diff options
Diffstat (limited to 'net/ipv4/ip_output.c')
-rw-r--r-- | net/ipv4/ip_output.c | 28 |
1 files changed, 13 insertions, 15 deletions
diff --git a/net/ipv4/ip_output.c b/net/ipv4/ip_output.c index 341779e685d9..08349267ceb4 100644 --- a/net/ipv4/ip_output.c +++ b/net/ipv4/ip_output.c | |||
@@ -142,7 +142,7 @@ int ip_build_and_send_pkt(struct sk_buff *skb, struct sock *sk, | |||
142 | __be32 saddr, __be32 daddr, struct ip_options *opt) | 142 | __be32 saddr, __be32 daddr, struct ip_options *opt) |
143 | { | 143 | { |
144 | struct inet_sock *inet = inet_sk(sk); | 144 | struct inet_sock *inet = inet_sk(sk); |
145 | struct rtable *rt = (struct rtable *)skb->dst; | 145 | struct rtable *rt = skb->rtable; |
146 | struct iphdr *iph; | 146 | struct iphdr *iph; |
147 | 147 | ||
148 | /* Build the IP header. */ | 148 | /* Build the IP header. */ |
@@ -240,7 +240,7 @@ static int ip_finish_output(struct sk_buff *skb) | |||
240 | int ip_mc_output(struct sk_buff *skb) | 240 | int ip_mc_output(struct sk_buff *skb) |
241 | { | 241 | { |
242 | struct sock *sk = skb->sk; | 242 | struct sock *sk = skb->sk; |
243 | struct rtable *rt = (struct rtable*)skb->dst; | 243 | struct rtable *rt = skb->rtable; |
244 | struct net_device *dev = rt->u.dst.dev; | 244 | struct net_device *dev = rt->u.dst.dev; |
245 | 245 | ||
246 | /* | 246 | /* |
@@ -321,7 +321,7 @@ int ip_queue_xmit(struct sk_buff *skb, int ipfragok) | |||
321 | /* Skip all of this if the packet is already routed, | 321 | /* Skip all of this if the packet is already routed, |
322 | * f.e. by something like SCTP. | 322 | * f.e. by something like SCTP. |
323 | */ | 323 | */ |
324 | rt = (struct rtable *) skb->dst; | 324 | rt = skb->rtable; |
325 | if (rt != NULL) | 325 | if (rt != NULL) |
326 | goto packet_routed; | 326 | goto packet_routed; |
327 | 327 | ||
@@ -351,7 +351,7 @@ int ip_queue_xmit(struct sk_buff *skb, int ipfragok) | |||
351 | * itself out. | 351 | * itself out. |
352 | */ | 352 | */ |
353 | security_sk_classify_flow(sk, &fl); | 353 | security_sk_classify_flow(sk, &fl); |
354 | if (ip_route_output_flow(&init_net, &rt, &fl, sk, 0)) | 354 | if (ip_route_output_flow(sock_net(sk), &rt, &fl, sk, 0)) |
355 | goto no_route; | 355 | goto no_route; |
356 | } | 356 | } |
357 | sk_setup_caps(sk, &rt->u.dst); | 357 | sk_setup_caps(sk, &rt->u.dst); |
@@ -441,7 +441,7 @@ int ip_fragment(struct sk_buff *skb, int (*output)(struct sk_buff*)) | |||
441 | unsigned int mtu, hlen, left, len, ll_rs, pad; | 441 | unsigned int mtu, hlen, left, len, ll_rs, pad; |
442 | int offset; | 442 | int offset; |
443 | __be16 not_last_frag; | 443 | __be16 not_last_frag; |
444 | struct rtable *rt = (struct rtable*)skb->dst; | 444 | struct rtable *rt = skb->rtable; |
445 | int err = 0; | 445 | int err = 0; |
446 | 446 | ||
447 | dev = rt->u.dst.dev; | 447 | dev = rt->u.dst.dev; |
@@ -825,7 +825,7 @@ int ip_append_data(struct sock *sk, | |||
825 | inet->cork.fragsize = mtu = inet->pmtudisc == IP_PMTUDISC_PROBE ? | 825 | inet->cork.fragsize = mtu = inet->pmtudisc == IP_PMTUDISC_PROBE ? |
826 | rt->u.dst.dev->mtu : | 826 | rt->u.dst.dev->mtu : |
827 | dst_mtu(rt->u.dst.path); | 827 | dst_mtu(rt->u.dst.path); |
828 | inet->cork.rt = rt; | 828 | inet->cork.dst = &rt->u.dst; |
829 | inet->cork.length = 0; | 829 | inet->cork.length = 0; |
830 | sk->sk_sndmsg_page = NULL; | 830 | sk->sk_sndmsg_page = NULL; |
831 | sk->sk_sndmsg_off = 0; | 831 | sk->sk_sndmsg_off = 0; |
@@ -834,7 +834,7 @@ int ip_append_data(struct sock *sk, | |||
834 | transhdrlen += exthdrlen; | 834 | transhdrlen += exthdrlen; |
835 | } | 835 | } |
836 | } else { | 836 | } else { |
837 | rt = inet->cork.rt; | 837 | rt = (struct rtable *)inet->cork.dst; |
838 | if (inet->cork.flags & IPCORK_OPT) | 838 | if (inet->cork.flags & IPCORK_OPT) |
839 | opt = inet->cork.opt; | 839 | opt = inet->cork.opt; |
840 | 840 | ||
@@ -1083,7 +1083,7 @@ ssize_t ip_append_page(struct sock *sk, struct page *page, | |||
1083 | if (skb_queue_empty(&sk->sk_write_queue)) | 1083 | if (skb_queue_empty(&sk->sk_write_queue)) |
1084 | return -EINVAL; | 1084 | return -EINVAL; |
1085 | 1085 | ||
1086 | rt = inet->cork.rt; | 1086 | rt = (struct rtable *)inet->cork.dst; |
1087 | if (inet->cork.flags & IPCORK_OPT) | 1087 | if (inet->cork.flags & IPCORK_OPT) |
1088 | opt = inet->cork.opt; | 1088 | opt = inet->cork.opt; |
1089 | 1089 | ||
@@ -1208,10 +1208,8 @@ static void ip_cork_release(struct inet_sock *inet) | |||
1208 | inet->cork.flags &= ~IPCORK_OPT; | 1208 | inet->cork.flags &= ~IPCORK_OPT; |
1209 | kfree(inet->cork.opt); | 1209 | kfree(inet->cork.opt); |
1210 | inet->cork.opt = NULL; | 1210 | inet->cork.opt = NULL; |
1211 | if (inet->cork.rt) { | 1211 | dst_release(inet->cork.dst); |
1212 | ip_rt_put(inet->cork.rt); | 1212 | inet->cork.dst = NULL; |
1213 | inet->cork.rt = NULL; | ||
1214 | } | ||
1215 | } | 1213 | } |
1216 | 1214 | ||
1217 | /* | 1215 | /* |
@@ -1224,7 +1222,7 @@ int ip_push_pending_frames(struct sock *sk) | |||
1224 | struct sk_buff **tail_skb; | 1222 | struct sk_buff **tail_skb; |
1225 | struct inet_sock *inet = inet_sk(sk); | 1223 | struct inet_sock *inet = inet_sk(sk); |
1226 | struct ip_options *opt = NULL; | 1224 | struct ip_options *opt = NULL; |
1227 | struct rtable *rt = inet->cork.rt; | 1225 | struct rtable *rt = (struct rtable *)inet->cork.dst; |
1228 | struct iphdr *iph; | 1226 | struct iphdr *iph; |
1229 | __be16 df = 0; | 1227 | __be16 df = 0; |
1230 | __u8 ttl; | 1228 | __u8 ttl; |
@@ -1357,7 +1355,7 @@ void ip_send_reply(struct sock *sk, struct sk_buff *skb, struct ip_reply_arg *ar | |||
1357 | } replyopts; | 1355 | } replyopts; |
1358 | struct ipcm_cookie ipc; | 1356 | struct ipcm_cookie ipc; |
1359 | __be32 daddr; | 1357 | __be32 daddr; |
1360 | struct rtable *rt = (struct rtable*)skb->dst; | 1358 | struct rtable *rt = skb->rtable; |
1361 | 1359 | ||
1362 | if (ip_options_echo(&replyopts.opt, skb)) | 1360 | if (ip_options_echo(&replyopts.opt, skb)) |
1363 | return; | 1361 | return; |
@@ -1384,7 +1382,7 @@ void ip_send_reply(struct sock *sk, struct sk_buff *skb, struct ip_reply_arg *ar | |||
1384 | .dport = tcp_hdr(skb)->source } }, | 1382 | .dport = tcp_hdr(skb)->source } }, |
1385 | .proto = sk->sk_protocol }; | 1383 | .proto = sk->sk_protocol }; |
1386 | security_skb_classify_flow(skb, &fl); | 1384 | security_skb_classify_flow(skb, &fl); |
1387 | if (ip_route_output_key(sk->sk_net, &rt, &fl)) | 1385 | if (ip_route_output_key(sock_net(sk), &rt, &fl)) |
1388 | return; | 1386 | return; |
1389 | } | 1387 | } |
1390 | 1388 | ||