Message ID | 1431444182-3935169-6-git-send-email-tom@herbertland.com |
---|---|
State | Changes Requested, archived |
Delegated to: | David Miller |
Headers | show |
On Tue, 2015-05-12 at 08:23 -0700, Tom Herbert wrote: > 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 <tom@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 f1fb7a5..1b204ed 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 ^= ntohl(*keyid); entropy doesn't need to respect byte order. flow->extra_entropy ^= (__force u32)*keyid; -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
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 f1fb7a5..1b204ed 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 ^= ntohl(*keyid); + nhoff += 4; + } if (hdr->flags & GRE_SEQ) nhoff += 4; if (proto == htons(ETH_P_TEB)) {
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 <tom@herbertland.com> --- include/net/flow_keys.h | 1 + net/core/flow_dissector.c | 15 ++++++++++++++- 2 files changed, 15 insertions(+), 1 deletion(-)