diff options
Diffstat (limited to 'net/ipv4/ip_output.c')
| -rw-r--r-- | net/ipv4/ip_output.c | 15 | 
1 files changed, 8 insertions, 7 deletions
diff --git a/net/ipv4/ip_output.c b/net/ipv4/ip_output.c index f9895180f481..322b40864ac0 100644 --- a/net/ipv4/ip_output.c +++ b/net/ipv4/ip_output.c  | |||
| @@ -329,7 +329,7 @@ int ip_queue_xmit(struct sk_buff *skb, int ipfragok) | |||
| 329 | __be32 daddr; | 329 | __be32 daddr; | 
| 330 | 330 | ||
| 331 | /* Use correct destination address if we have options. */ | 331 | /* Use correct destination address if we have options. */ | 
| 332 | daddr = inet->daddr; | 332 | daddr = inet->inet_daddr; | 
| 333 | if(opt && opt->srr) | 333 | if(opt && opt->srr) | 
| 334 | daddr = opt->faddr; | 334 | daddr = opt->faddr; | 
| 335 | 335 | ||
| @@ -338,13 +338,13 @@ int ip_queue_xmit(struct sk_buff *skb, int ipfragok) | |||
| 338 | .mark = sk->sk_mark, | 338 | .mark = sk->sk_mark, | 
| 339 | .nl_u = { .ip4_u = | 339 | .nl_u = { .ip4_u = | 
| 340 | { .daddr = daddr, | 340 | { .daddr = daddr, | 
| 341 | .saddr = inet->saddr, | 341 | .saddr = inet->inet_saddr, | 
| 342 | .tos = RT_CONN_FLAGS(sk) } }, | 342 | .tos = RT_CONN_FLAGS(sk) } }, | 
| 343 | .proto = sk->sk_protocol, | 343 | .proto = sk->sk_protocol, | 
| 344 | .flags = inet_sk_flowi_flags(sk), | 344 | .flags = inet_sk_flowi_flags(sk), | 
| 345 | .uli_u = { .ports = | 345 | .uli_u = { .ports = | 
| 346 | { .sport = inet->sport, | 346 | { .sport = inet->inet_sport, | 
| 347 | .dport = inet->dport } } }; | 347 | .dport = inet->inet_dport } } }; | 
| 348 | 348 | ||
| 349 | /* If this fails, retransmit mechanism of transport layer will | 349 | /* If this fails, retransmit mechanism of transport layer will | 
| 350 | * keep trying until route appears or the connection times | 350 | * keep trying until route appears or the connection times | 
| @@ -379,7 +379,7 @@ packet_routed: | |||
| 379 | 379 | ||
| 380 | if (opt && opt->optlen) { | 380 | if (opt && opt->optlen) { | 
| 381 | iph->ihl += opt->optlen >> 2; | 381 | iph->ihl += opt->optlen >> 2; | 
| 382 | ip_options_build(skb, opt, inet->daddr, rt, 0); | 382 | ip_options_build(skb, opt, inet->inet_daddr, rt, 0); | 
| 383 | } | 383 | } | 
| 384 | 384 | ||
| 385 | ip_select_ident_more(iph, &rt->u.dst, sk, | 385 | ip_select_ident_more(iph, &rt->u.dst, sk, | 
| @@ -846,7 +846,8 @@ int ip_append_data(struct sock *sk, | |||
| 846 | maxfraglen = ((mtu - fragheaderlen) & ~7) + fragheaderlen; | 846 | maxfraglen = ((mtu - fragheaderlen) & ~7) + fragheaderlen; | 
| 847 | 847 | ||
| 848 | if (inet->cork.length + length > 0xFFFF - fragheaderlen) { | 848 | if (inet->cork.length + length > 0xFFFF - fragheaderlen) { | 
| 849 | ip_local_error(sk, EMSGSIZE, rt->rt_dst, inet->dport, mtu-exthdrlen); | 849 | ip_local_error(sk, EMSGSIZE, rt->rt_dst, inet->inet_dport, | 
| 850 | mtu-exthdrlen); | ||
| 850 | return -EMSGSIZE; | 851 | return -EMSGSIZE; | 
| 851 | } | 852 | } | 
| 852 | 853 | ||
| @@ -1100,7 +1101,7 @@ ssize_t ip_append_page(struct sock *sk, struct page *page, | |||
| 1100 | maxfraglen = ((mtu - fragheaderlen) & ~7) + fragheaderlen; | 1101 | maxfraglen = ((mtu - fragheaderlen) & ~7) + fragheaderlen; | 
| 1101 | 1102 | ||
| 1102 | if (inet->cork.length + size > 0xFFFF - fragheaderlen) { | 1103 | if (inet->cork.length + size > 0xFFFF - fragheaderlen) { | 
| 1103 | ip_local_error(sk, EMSGSIZE, rt->rt_dst, inet->dport, mtu); | 1104 | ip_local_error(sk, EMSGSIZE, rt->rt_dst, inet->inet_dport, mtu); | 
| 1104 | return -EMSGSIZE; | 1105 | return -EMSGSIZE; | 
| 1105 | } | 1106 | } | 
| 1106 | 1107 | ||
