On Mon, Oct 21, 2019 at 10:09:45PM +0200, Matteo Croce wrote: > Documents two piece of code which can't be understood at a glance. > > Signed-off-by: Matteo Croce <mcr...@redhat.com>
Reviewed-by: Simon Horman <simon.hor...@netronome.com> > --- > include/net/flow_dissector.h | 1 + > net/core/flow_dissector.c | 6 ++++++ > 2 files changed, 7 insertions(+) > > diff --git a/include/net/flow_dissector.h b/include/net/flow_dissector.h > index 90bd210be060..7747af3cc500 100644 > --- a/include/net/flow_dissector.h > +++ b/include/net/flow_dissector.h > @@ -282,6 +282,7 @@ struct flow_keys { > struct flow_dissector_key_vlan cvlan; > struct flow_dissector_key_keyid keyid; > struct flow_dissector_key_ports ports; > + /* 'addrs' must be the last member */ > struct flow_dissector_key_addrs addrs; > }; > > diff --git a/net/core/flow_dissector.c b/net/core/flow_dissector.c > index 7c09d87d3269..affde70dad47 100644 > --- a/net/core/flow_dissector.c > +++ b/net/core/flow_dissector.c > @@ -1374,6 +1374,9 @@ static inline size_t flow_keys_hash_length(const struct > flow_keys *flow) > { > size_t diff = FLOW_KEYS_HASH_OFFSET + sizeof(flow->addrs); > BUILD_BUG_ON((sizeof(*flow) - FLOW_KEYS_HASH_OFFSET) % sizeof(u32)); > + /* flow.addrs MUST be the last member in struct flow_keys because > + * different L3 protocols have different address length > + */ > BUILD_BUG_ON(offsetof(typeof(*flow), addrs) != > sizeof(*flow) - sizeof(flow->addrs)); > > @@ -1421,6 +1424,9 @@ __be32 flow_get_u32_dst(const struct flow_keys *flow) > } > EXPORT_SYMBOL(flow_get_u32_dst); > > +/* Sort the source and destination IP (and the ports if the IP are the same), > + * to have consistent hash within the two directions > + */ > static inline void __flow_hash_consistentify(struct flow_keys *keys) > { > int addr_diff, i; > -- > 2.21.0 >