In flow dissector if a GRE header contains a keyid this is saved in the new extra entropy field of flow_keys. The GRE keyid is then represented in the flow hash function input.
Signed-off-by: Tom Herbert <t...@herbertland.com> --- include/net/flow_keys.h | 1 + net/core/flow_dissector.c | 15 ++++++++++++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/include/net/flow_keys.h b/include/net/flow_keys.h index 906d47a..779e42f 100644 --- a/include/net/flow_keys.h +++ b/include/net/flow_keys.h @@ -28,6 +28,7 @@ struct flow_keys { u8 padding; u32 vlan_id:12, flow_label:20; + u32 extra_entropy; union { __be32 ports; diff --git a/net/core/flow_dissector.c b/net/core/flow_dissector.c index de71e42..025b91f 100644 --- a/net/core/flow_dissector.c +++ b/net/core/flow_dissector.c @@ -195,8 +195,21 @@ ipv6: nhoff += 4; if (hdr->flags & GRE_CSUM) nhoff += 4; - if (hdr->flags & GRE_KEY) + if (hdr->flags & GRE_KEY) { + const __be32 *keyid; + __be32 _keyid; + + keyid = __skb_header_pointer(skb, nhoff, + sizeof(_keyid), + data, hlen, + &_keyid); + if (!keyid) + return false; + + flow->extra_entropy ^= *keyid; + nhoff += 4; + } if (hdr->flags & GRE_SEQ) nhoff += 4; if (proto == htons(ETH_P_TEB)) { -- 1.8.1 -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html