diff options
Diffstat (limited to 'include/net/ip.h')
-rw-r--r-- | include/net/ip.h | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/include/net/ip.h b/include/net/ip.h index 48f55979d842..5e5268807a1c 100644 --- a/include/net/ip.h +++ b/include/net/ip.h | |||
@@ -264,9 +264,11 @@ int ip_dont_fragment(struct sock *sk, struct dst_entry *dst) | |||
264 | 264 | ||
265 | extern void __ip_select_ident(struct iphdr *iph, struct dst_entry *dst, int more); | 265 | extern void __ip_select_ident(struct iphdr *iph, struct dst_entry *dst, int more); |
266 | 266 | ||
267 | static inline void ip_select_ident(struct iphdr *iph, struct dst_entry *dst, struct sock *sk) | 267 | static inline void ip_select_ident(struct sk_buff *skb, struct dst_entry *dst, struct sock *sk) |
268 | { | 268 | { |
269 | if (iph->frag_off & htons(IP_DF)) { | 269 | struct iphdr *iph = ip_hdr(skb); |
270 | |||
271 | if ((iph->frag_off & htons(IP_DF)) && !skb->local_df) { | ||
270 | /* This is only to work around buggy Windows95/2000 | 272 | /* This is only to work around buggy Windows95/2000 |
271 | * VJ compression implementations. If the ID field | 273 | * VJ compression implementations. If the ID field |
272 | * does not change, they drop every other packet in | 274 | * does not change, they drop every other packet in |
@@ -278,9 +280,11 @@ static inline void ip_select_ident(struct iphdr *iph, struct dst_entry *dst, str | |||
278 | __ip_select_ident(iph, dst, 0); | 280 | __ip_select_ident(iph, dst, 0); |
279 | } | 281 | } |
280 | 282 | ||
281 | static inline void ip_select_ident_more(struct iphdr *iph, struct dst_entry *dst, struct sock *sk, int more) | 283 | static inline void ip_select_ident_more(struct sk_buff *skb, struct dst_entry *dst, struct sock *sk, int more) |
282 | { | 284 | { |
283 | if (iph->frag_off & htons(IP_DF)) { | 285 | struct iphdr *iph = ip_hdr(skb); |
286 | |||
287 | if ((iph->frag_off & htons(IP_DF)) && !skb->local_df) { | ||
284 | if (sk && inet_sk(sk)->inet_daddr) { | 288 | if (sk && inet_sk(sk)->inet_daddr) { |
285 | iph->id = htons(inet_sk(sk)->inet_id); | 289 | iph->id = htons(inet_sk(sk)->inet_id); |
286 | inet_sk(sk)->inet_id += 1 + more; | 290 | inet_sk(sk)->inet_id += 1 + more; |