diff options
author | Hannes Frederic Sowa <hannes@stressinduktion.org> | 2015-03-25 17:07:44 +0100 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2015-03-25 14:07:04 -0400 |
commit | b6a7719aedd7e5c0f2df7641aa47386111682df4 (patch) | |
tree | f0374d5535a6670c1cb453cc6c0e15237e108376 /include | |
parent | 8fa38a38ac37a0ca5366cd62ba4339c2bab49db9 (diff) | |
download | linux-b6a7719aedd7e5c0f2df7641aa47386111682df4.tar.gz linux-b6a7719aedd7e5c0f2df7641aa47386111682df4.tar.bz2 linux-b6a7719aedd7e5c0f2df7641aa47386111682df4.zip |
ipv4: hash net ptr into fragmentation bucket selection
As namespaces are sometimes used with overlapping ip address ranges,
we should also use the namespace as input to the hash to select the ip
fragmentation counter bucket.
Cc: Eric Dumazet <edumazet@google.com>
Cc: Flavio Leitner <fbl@redhat.com>
Signed-off-by: Hannes Frederic Sowa <hannes@stressinduktion.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include')
-rw-r--r-- | include/net/ip.h | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/include/net/ip.h b/include/net/ip.h index 025c61c0dffb..d0808a323763 100644 --- a/include/net/ip.h +++ b/include/net/ip.h @@ -318,9 +318,10 @@ static inline unsigned int ip_skb_dst_mtu(const struct sk_buff *skb) } u32 ip_idents_reserve(u32 hash, int segs); -void __ip_select_ident(struct iphdr *iph, int segs); +void __ip_select_ident(struct net *net, struct iphdr *iph, int segs); -static inline void ip_select_ident_segs(struct sk_buff *skb, struct sock *sk, int segs) +static inline void ip_select_ident_segs(struct net *net, struct sk_buff *skb, + struct sock *sk, int segs) { struct iphdr *iph = ip_hdr(skb); @@ -337,13 +338,14 @@ static inline void ip_select_ident_segs(struct sk_buff *skb, struct sock *sk, in iph->id = 0; } } else { - __ip_select_ident(iph, segs); + __ip_select_ident(net, iph, segs); } } -static inline void ip_select_ident(struct sk_buff *skb, struct sock *sk) +static inline void ip_select_ident(struct net *net, struct sk_buff *skb, + struct sock *sk) { - ip_select_ident_segs(skb, sk, 1); + ip_select_ident_segs(net, skb, sk, 1); } static inline __wsum inet_compute_pseudo(struct sk_buff *skb, int proto) |