Messages in this thread Patch in this message | | | From | YueHaibing <> | Subject | [PATCH v2] flow_dissector: Fix vlan header offset in __skb_flow_dissect | Date | Mon, 24 Jun 2019 11:49:13 +0800 |
| |
We build vlan on top of bonding interface, which vlan offload is off, bond mode is 802.3ad (LACP) and xmit_hash_policy is BOND_XMIT_POLICY_ENCAP34.
__skb_flow_dissect() fails to get information from protocol headers encapsulated within vlan, because 'nhoff' is points to IP header, so bond hashing is based on layer 2 info, which fails to distribute packets across slaves.
Fixes: d5709f7ab776 ("flow_dissector: For stripped vlan, get vlan info from skb->vlan_tci") Signed-off-by: YueHaibing <yuehaibing@huawei.com> --- v2: remove redundant spaces --- net/core/flow_dissector.c | 3 +++ 1 file changed, 3 insertions(+)
diff --git a/net/core/flow_dissector.c b/net/core/flow_dissector.c index 01ad60b..ff85934 100644 --- a/net/core/flow_dissector.c +++ b/net/core/flow_dissector.c @@ -998,6 +998,9 @@ bool __skb_flow_dissect(const struct net *net, skb && skb_vlan_tag_present(skb)) { proto = skb->protocol; } else { + if (dissector_vlan == FLOW_DISSECTOR_KEY_MAX) + nhoff -= sizeof(*vlan); + vlan = __skb_header_pointer(skb, nhoff, sizeof(_vlan), data, hlen, &_vlan); if (!vlan) { -- 2.7.4
| |