diff options
Diffstat (limited to 'net/ipv4/ip_output.c')
-rw-r--r-- | net/ipv4/ip_output.c | 23 |
1 files changed, 13 insertions, 10 deletions
diff --git a/net/ipv4/ip_output.c b/net/ipv4/ip_output.c index f9895180f481..e34013a78ef4 100644 --- a/net/ipv4/ip_output.c +++ b/net/ipv4/ip_output.c | |||
@@ -264,9 +264,11 @@ int ip_mc_output(struct sk_buff *skb) | |||
264 | 264 | ||
265 | This check is duplicated in ip_mr_input at the moment. | 265 | This check is duplicated in ip_mr_input at the moment. |
266 | */ | 266 | */ |
267 | && ((rt->rt_flags&RTCF_LOCAL) || !(IPCB(skb)->flags&IPSKB_FORWARDED)) | 267 | && |
268 | ((rt->rt_flags & RTCF_LOCAL) || | ||
269 | !(IPCB(skb)->flags & IPSKB_FORWARDED)) | ||
268 | #endif | 270 | #endif |
269 | ) { | 271 | ) { |
270 | struct sk_buff *newskb = skb_clone(skb, GFP_ATOMIC); | 272 | struct sk_buff *newskb = skb_clone(skb, GFP_ATOMIC); |
271 | if (newskb) | 273 | if (newskb) |
272 | NF_HOOK(PF_INET, NF_INET_POST_ROUTING, newskb, | 274 | NF_HOOK(PF_INET, NF_INET_POST_ROUTING, newskb, |
@@ -329,7 +331,7 @@ int ip_queue_xmit(struct sk_buff *skb, int ipfragok) | |||
329 | __be32 daddr; | 331 | __be32 daddr; |
330 | 332 | ||
331 | /* Use correct destination address if we have options. */ | 333 | /* Use correct destination address if we have options. */ |
332 | daddr = inet->daddr; | 334 | daddr = inet->inet_daddr; |
333 | if(opt && opt->srr) | 335 | if(opt && opt->srr) |
334 | daddr = opt->faddr; | 336 | daddr = opt->faddr; |
335 | 337 | ||
@@ -338,13 +340,13 @@ int ip_queue_xmit(struct sk_buff *skb, int ipfragok) | |||
338 | .mark = sk->sk_mark, | 340 | .mark = sk->sk_mark, |
339 | .nl_u = { .ip4_u = | 341 | .nl_u = { .ip4_u = |
340 | { .daddr = daddr, | 342 | { .daddr = daddr, |
341 | .saddr = inet->saddr, | 343 | .saddr = inet->inet_saddr, |
342 | .tos = RT_CONN_FLAGS(sk) } }, | 344 | .tos = RT_CONN_FLAGS(sk) } }, |
343 | .proto = sk->sk_protocol, | 345 | .proto = sk->sk_protocol, |
344 | .flags = inet_sk_flowi_flags(sk), | 346 | .flags = inet_sk_flowi_flags(sk), |
345 | .uli_u = { .ports = | 347 | .uli_u = { .ports = |
346 | { .sport = inet->sport, | 348 | { .sport = inet->inet_sport, |
347 | .dport = inet->dport } } }; | 349 | .dport = inet->inet_dport } } }; |
348 | 350 | ||
349 | /* If this fails, retransmit mechanism of transport layer will | 351 | /* If this fails, retransmit mechanism of transport layer will |
350 | * keep trying until route appears or the connection times | 352 | * keep trying until route appears or the connection times |
@@ -379,7 +381,7 @@ packet_routed: | |||
379 | 381 | ||
380 | if (opt && opt->optlen) { | 382 | if (opt && opt->optlen) { |
381 | iph->ihl += opt->optlen >> 2; | 383 | iph->ihl += opt->optlen >> 2; |
382 | ip_options_build(skb, opt, inet->daddr, rt, 0); | 384 | ip_options_build(skb, opt, inet->inet_daddr, rt, 0); |
383 | } | 385 | } |
384 | 386 | ||
385 | ip_select_ident_more(iph, &rt->u.dst, sk, | 387 | ip_select_ident_more(iph, &rt->u.dst, sk, |
@@ -501,8 +503,8 @@ int ip_fragment(struct sk_buff *skb, int (*output)(struct sk_buff *)) | |||
501 | if (skb->sk) { | 503 | if (skb->sk) { |
502 | frag->sk = skb->sk; | 504 | frag->sk = skb->sk; |
503 | frag->destructor = sock_wfree; | 505 | frag->destructor = sock_wfree; |
504 | truesizes += frag->truesize; | ||
505 | } | 506 | } |
507 | truesizes += frag->truesize; | ||
506 | } | 508 | } |
507 | 509 | ||
508 | /* Everything is OK. Generate! */ | 510 | /* Everything is OK. Generate! */ |
@@ -846,7 +848,8 @@ int ip_append_data(struct sock *sk, | |||
846 | maxfraglen = ((mtu - fragheaderlen) & ~7) + fragheaderlen; | 848 | maxfraglen = ((mtu - fragheaderlen) & ~7) + fragheaderlen; |
847 | 849 | ||
848 | if (inet->cork.length + length > 0xFFFF - fragheaderlen) { | 850 | if (inet->cork.length + length > 0xFFFF - fragheaderlen) { |
849 | ip_local_error(sk, EMSGSIZE, rt->rt_dst, inet->dport, mtu-exthdrlen); | 851 | ip_local_error(sk, EMSGSIZE, rt->rt_dst, inet->inet_dport, |
852 | mtu-exthdrlen); | ||
850 | return -EMSGSIZE; | 853 | return -EMSGSIZE; |
851 | } | 854 | } |
852 | 855 | ||
@@ -1100,7 +1103,7 @@ ssize_t ip_append_page(struct sock *sk, struct page *page, | |||
1100 | maxfraglen = ((mtu - fragheaderlen) & ~7) + fragheaderlen; | 1103 | maxfraglen = ((mtu - fragheaderlen) & ~7) + fragheaderlen; |
1101 | 1104 | ||
1102 | if (inet->cork.length + size > 0xFFFF - fragheaderlen) { | 1105 | if (inet->cork.length + size > 0xFFFF - fragheaderlen) { |
1103 | ip_local_error(sk, EMSGSIZE, rt->rt_dst, inet->dport, mtu); | 1106 | ip_local_error(sk, EMSGSIZE, rt->rt_dst, inet->inet_dport, mtu); |
1104 | return -EMSGSIZE; | 1107 | return -EMSGSIZE; |
1105 | } | 1108 | } |
1106 | 1109 | ||