diff options
author | John Hurley <john.hurley@netronome.com> | 2019-12-19 14:58:43 +0000 |
---|---|---|
committer | Simon Horman <simon.horman@netronome.com> | 2020-01-22 14:20:18 +0100 |
commit | 56c8027b5fd830a810f320a6ded6e8f8289e4fe6 (patch) | |
tree | 303a864af1d65865c959a0c42ecee14d8c214c53 /lib | |
parent | 34b00fd272b5c454137b15a36a17e322f7bbda90 (diff) | |
download | openvswitch-56c8027b5fd830a810f320a6ded6e8f8289e4fe6.tar.gz |
tc: handle packet mark of zero
Openstack may set an skb mark of 0 in tunnel rules. This is considered to
be an unused/unset value. However, it prevents the rule from being
offloaded.
Check if the key value of the skb mark is 0 when it is in use (mask is
set to all ones). If it is then ignore the field and continue with TC offload.
Only the exact-match case is covered by this patch as it addresses the
Openstack use-case and seems most robust against feature evolution: f.e. in
future there may exist hardware offload scenarios where an operation, such
as a BPF offload, sets the SKB mark before proceeding tho the in-HW OVS.
datapath.
Signed-off-by: John Hurley <john.hurley@netronome.com>
Co-Authored-by: Simon Horman <simon.horman@netronome.com>
Signed-off-by: Simon Horman <simon.horman@netronome.com>
Acked-by: Aaron Conole <aconole@redhat.com>
Diffstat (limited to 'lib')
-rw-r--r-- | lib/netdev-offload-tc.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/lib/netdev-offload-tc.c b/lib/netdev-offload-tc.c index 723ec376d..550e440b3 100644 --- a/lib/netdev-offload-tc.c +++ b/lib/netdev-offload-tc.c @@ -1620,6 +1620,11 @@ netdev_tc_flow_put(struct netdev *netdev, struct match *match, mask->ct_label = OVS_U128_ZERO; } + /* ignore exact match on skb_mark of 0. */ + if (mask->pkt_mark == UINT32_MAX && !key->pkt_mark) { + mask->pkt_mark = 0; + } + err = test_key_and_mask(match); if (err) { return err; |