Message ID | 1536825468-20974-1-git-send-email-pieter.jansenvanvuuren@netronome.com |
---|---|
State | Accepted |
Headers | show |
Series | [ovs-dev,branch-2.10] lib/tc: treat vlan id and prio as independent fields | expand |
Bleep bloop. Greetings Pieter Jansen van Vuuren, I am a robot and I have tried out your patch. Thanks for your contribution. I encountered some error that I wasn't expecting. See the details below. checkpatch: ERROR: Too many signoffs; are you missing Co-authored-by lines? Lines checked: 88, Warnings: 0, Errors: 1 Please check this out. If you feel there has been an error, please email aconole@bytheb.org Thanks, 0-day Robot
On Thu, Sep 13, 2018 at 08:57:48AM +0100, Pieter Jansen van Vuuren wrote: > Previously the key was used to check the presence of vlan id and > prio fields instead of using the mask. Additionally the vlan id > field was considered to be present if only the prio field was set, > and vice versa. f.e. setting the following: > > ovs-ofctl -OOpenFlow13,OpenFlow15 add-flow br0 \ > priority=10,cookie=1,table=0,ip,dl_vlan_pcp=2,actions=output:2 > > Resulted in (instead of wildcarding vlan_id, filter matches 0): > filter protocol 802.1Q pref 1 flower chain 0 > filter protocol 802.1Q pref 1 flower chain 0 handle 0x1 > vlan_id 0 > vlan_prio 2 > vlan_ethtype ip > eth_type ipv4 > ip_flags nofrag > in_hw > action order 1: mirred (Egress Redirect to device eth1) stolen > index 2 ref 1 bind 1 installed 5 sec used 5 sec > Action statistics: > Sent 0 bytes 0 pkt (dropped 0, overlimits 0 requeues 0) > backlog 0b 0p requeues 0 > cookie 47040ae7a94fff6afd7ed8aa04b11ba4 > > Signed-off-by: Pieter Jansen van Vuuren <pieter.jansenvanvuuren@netronome.com> Thanks Pieter, I have applied this backport to branch-2.10, branch-2.9 and branch-2.8.
diff --git a/lib/netdev-tc-offloads.c b/lib/netdev-tc-offloads.c index 64f431c8d..f998ddfe1 100644 --- a/lib/netdev-tc-offloads.c +++ b/lib/netdev-tc-offloads.c @@ -960,10 +960,12 @@ netdev_tc_flow_put(struct netdev *netdev, struct match *match, && (vid_mask || pcp_mask)) { if (vid_mask) { flower.key.vlan_id = vlan_tci_to_vid(key->vlans[0].tci); + flower.mask.vlan_id = vlan_tci_to_vid(mask->vlans[0].tci); VLOG_DBG_RL(&rl, "vlan_id: %d\n", flower.key.vlan_id); } if (pcp_mask) { flower.key.vlan_prio = vlan_tci_to_pcp(key->vlans[0].tci); + flower.mask.vlan_prio = vlan_tci_to_pcp(mask->vlans[0].tci); VLOG_DBG_RL(&rl, "vlan_prio: %d\n", flower.key.vlan_prio); } flower.key.encap_eth_type = flower.key.eth_type; diff --git a/lib/tc.c b/lib/tc.c index d5123bd69..b385ff365 100644 --- a/lib/tc.c +++ b/lib/tc.c @@ -346,10 +346,12 @@ nl_parse_flower_vlan(struct nlattr **attrs, struct tc_flower *flower) if (attrs[TCA_FLOWER_KEY_VLAN_ID]) { flower->key.vlan_id = nl_attr_get_u16(attrs[TCA_FLOWER_KEY_VLAN_ID]); + flower->mask.vlan_id = 0xffff; } if (attrs[TCA_FLOWER_KEY_VLAN_PRIO]) { flower->key.vlan_prio = nl_attr_get_u8(attrs[TCA_FLOWER_KEY_VLAN_PRIO]); + flower->mask.vlan_prio = 0xff; } } @@ -1637,9 +1639,11 @@ nl_msg_put_flower_options(struct ofpbuf *request, struct tc_flower *flower) nl_msg_put_be16(request, TCA_FLOWER_KEY_ETH_TYPE, flower->key.eth_type); if (is_vlan) { - if (flower->key.vlan_id || flower->key.vlan_prio) { + if (flower->key.vlan_id) { nl_msg_put_u16(request, TCA_FLOWER_KEY_VLAN_ID, flower->key.vlan_id); + } + if (flower->key.vlan_prio) { nl_msg_put_u8(request, TCA_FLOWER_KEY_VLAN_PRIO, flower->key.vlan_prio); }