diff options
-rw-r--r-- | include/net/inet6_connection_sock.h | 2 | ||||
-rw-r--r-- | include/net/inet_connection_sock.h | 2 | ||||
-rw-r--r-- | include/net/ip.h | 2 | ||||
-rw-r--r-- | net/dccp/output.c | 4 | ||||
-rw-r--r-- | net/ipv4/ip_output.c | 4 | ||||
-rw-r--r-- | net/ipv4/tcp_output.c | 2 | ||||
-rw-r--r-- | net/ipv6/inet6_connection_sock.c | 2 | ||||
-rw-r--r-- | net/l2tp/l2tp_core.c | 10 | ||||
-rw-r--r-- | net/l2tp/l2tp_ip.c | 2 | ||||
-rw-r--r-- | net/sctp/protocol.c | 2 |
10 files changed, 17 insertions, 15 deletions
diff --git a/include/net/inet6_connection_sock.h b/include/net/inet6_connection_sock.h index ff013505236b..3207e58ee019 100644 --- a/include/net/inet6_connection_sock.h +++ b/include/net/inet6_connection_sock.h | |||
@@ -41,5 +41,5 @@ extern void inet6_csk_reqsk_queue_hash_add(struct sock *sk, | |||
41 | 41 | ||
42 | extern void inet6_csk_addr2sockaddr(struct sock *sk, struct sockaddr *uaddr); | 42 | extern void inet6_csk_addr2sockaddr(struct sock *sk, struct sockaddr *uaddr); |
43 | 43 | ||
44 | extern int inet6_csk_xmit(struct sk_buff *skb); | 44 | extern int inet6_csk_xmit(struct sk_buff *skb, struct flowi *fl); |
45 | #endif /* _INET6_CONNECTION_SOCK_H */ | 45 | #endif /* _INET6_CONNECTION_SOCK_H */ |
diff --git a/include/net/inet_connection_sock.h b/include/net/inet_connection_sock.h index 4367d913c0e2..96546cae1cba 100644 --- a/include/net/inet_connection_sock.h +++ b/include/net/inet_connection_sock.h | |||
@@ -36,7 +36,7 @@ struct tcp_congestion_ops; | |||
36 | * (i.e. things that depend on the address family) | 36 | * (i.e. things that depend on the address family) |
37 | */ | 37 | */ |
38 | struct inet_connection_sock_af_ops { | 38 | struct inet_connection_sock_af_ops { |
39 | int (*queue_xmit)(struct sk_buff *skb); | 39 | int (*queue_xmit)(struct sk_buff *skb, struct flowi *fl); |
40 | void (*send_check)(struct sock *sk, struct sk_buff *skb); | 40 | void (*send_check)(struct sock *sk, struct sk_buff *skb); |
41 | int (*rebuild_header)(struct sock *sk); | 41 | int (*rebuild_header)(struct sock *sk); |
42 | int (*conn_request)(struct sock *sk, struct sk_buff *skb); | 42 | int (*conn_request)(struct sock *sk, struct sk_buff *skb); |
diff --git a/include/net/ip.h b/include/net/ip.h index 095e392d5f16..acf8b7814c4e 100644 --- a/include/net/ip.h +++ b/include/net/ip.h | |||
@@ -104,7 +104,7 @@ extern int ip_do_nat(struct sk_buff *skb); | |||
104 | extern void ip_send_check(struct iphdr *ip); | 104 | extern void ip_send_check(struct iphdr *ip); |
105 | extern int __ip_local_out(struct sk_buff *skb); | 105 | extern int __ip_local_out(struct sk_buff *skb); |
106 | extern int ip_local_out(struct sk_buff *skb); | 106 | extern int ip_local_out(struct sk_buff *skb); |
107 | extern int ip_queue_xmit(struct sk_buff *skb); | 107 | extern int ip_queue_xmit(struct sk_buff *skb, struct flowi *fl); |
108 | extern void ip_init(void); | 108 | extern void ip_init(void); |
109 | extern int ip_append_data(struct sock *sk, | 109 | extern int ip_append_data(struct sock *sk, |
110 | int getfrag(void *from, char *to, int offset, int len, | 110 | int getfrag(void *from, char *to, int offset, int len, |
diff --git a/net/dccp/output.c b/net/dccp/output.c index 136d41cbcd02..fab108e51e5a 100644 --- a/net/dccp/output.c +++ b/net/dccp/output.c | |||
@@ -43,7 +43,7 @@ static void dccp_skb_entail(struct sock *sk, struct sk_buff *skb) | |||
43 | static int dccp_transmit_skb(struct sock *sk, struct sk_buff *skb) | 43 | static int dccp_transmit_skb(struct sock *sk, struct sk_buff *skb) |
44 | { | 44 | { |
45 | if (likely(skb != NULL)) { | 45 | if (likely(skb != NULL)) { |
46 | const struct inet_sock *inet = inet_sk(sk); | 46 | struct inet_sock *inet = inet_sk(sk); |
47 | const struct inet_connection_sock *icsk = inet_csk(sk); | 47 | const struct inet_connection_sock *icsk = inet_csk(sk); |
48 | struct dccp_sock *dp = dccp_sk(sk); | 48 | struct dccp_sock *dp = dccp_sk(sk); |
49 | struct dccp_skb_cb *dcb = DCCP_SKB_CB(skb); | 49 | struct dccp_skb_cb *dcb = DCCP_SKB_CB(skb); |
@@ -136,7 +136,7 @@ static int dccp_transmit_skb(struct sock *sk, struct sk_buff *skb) | |||
136 | 136 | ||
137 | DCCP_INC_STATS(DCCP_MIB_OUTSEGS); | 137 | DCCP_INC_STATS(DCCP_MIB_OUTSEGS); |
138 | 138 | ||
139 | err = icsk->icsk_af_ops->queue_xmit(skb); | 139 | err = icsk->icsk_af_ops->queue_xmit(skb, &inet->cork.fl); |
140 | return net_xmit_eval(err); | 140 | return net_xmit_eval(err); |
141 | } | 141 | } |
142 | return -ENOBUFS; | 142 | return -ENOBUFS; |
diff --git a/net/ipv4/ip_output.c b/net/ipv4/ip_output.c index 4ba26d4040ed..14ee1e47720c 100644 --- a/net/ipv4/ip_output.c +++ b/net/ipv4/ip_output.c | |||
@@ -312,7 +312,7 @@ int ip_output(struct sk_buff *skb) | |||
312 | !(IPCB(skb)->flags & IPSKB_REROUTED)); | 312 | !(IPCB(skb)->flags & IPSKB_REROUTED)); |
313 | } | 313 | } |
314 | 314 | ||
315 | int ip_queue_xmit(struct sk_buff *skb) | 315 | int ip_queue_xmit(struct sk_buff *skb, struct flowi *fl) |
316 | { | 316 | { |
317 | struct sock *sk = skb->sk; | 317 | struct sock *sk = skb->sk; |
318 | struct inet_sock *inet = inet_sk(sk); | 318 | struct inet_sock *inet = inet_sk(sk); |
@@ -332,7 +332,7 @@ int ip_queue_xmit(struct sk_buff *skb) | |||
332 | goto packet_routed; | 332 | goto packet_routed; |
333 | 333 | ||
334 | /* Make sure we can route this packet. */ | 334 | /* Make sure we can route this packet. */ |
335 | fl4 = &inet->cork.fl.u.ip4; | 335 | fl4 = &fl->u.ip4; |
336 | rt = (struct rtable *)__sk_dst_check(sk, 0); | 336 | rt = (struct rtable *)__sk_dst_check(sk, 0); |
337 | if (rt == NULL) { | 337 | if (rt == NULL) { |
338 | __be32 daddr; | 338 | __be32 daddr; |
diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c index 17388c7f49c4..882e0b0964d0 100644 --- a/net/ipv4/tcp_output.c +++ b/net/ipv4/tcp_output.c | |||
@@ -899,7 +899,7 @@ static int tcp_transmit_skb(struct sock *sk, struct sk_buff *skb, int clone_it, | |||
899 | TCP_ADD_STATS(sock_net(sk), TCP_MIB_OUTSEGS, | 899 | TCP_ADD_STATS(sock_net(sk), TCP_MIB_OUTSEGS, |
900 | tcp_skb_pcount(skb)); | 900 | tcp_skb_pcount(skb)); |
901 | 901 | ||
902 | err = icsk->icsk_af_ops->queue_xmit(skb); | 902 | err = icsk->icsk_af_ops->queue_xmit(skb, &inet->cork.fl); |
903 | if (likely(err <= 0)) | 903 | if (likely(err <= 0)) |
904 | return err; | 904 | return err; |
905 | 905 | ||
diff --git a/net/ipv6/inet6_connection_sock.c b/net/ipv6/inet6_connection_sock.c index f2c5b0fc0f21..8a58e8cf6646 100644 --- a/net/ipv6/inet6_connection_sock.c +++ b/net/ipv6/inet6_connection_sock.c | |||
@@ -203,7 +203,7 @@ struct dst_entry *__inet6_csk_dst_check(struct sock *sk, u32 cookie) | |||
203 | return dst; | 203 | return dst; |
204 | } | 204 | } |
205 | 205 | ||
206 | int inet6_csk_xmit(struct sk_buff *skb) | 206 | int inet6_csk_xmit(struct sk_buff *skb, struct flowi *fl_unused) |
207 | { | 207 | { |
208 | struct sock *sk = skb->sk; | 208 | struct sock *sk = skb->sk; |
209 | struct inet_sock *inet = inet_sk(sk); | 209 | struct inet_sock *inet = inet_sk(sk); |
diff --git a/net/l2tp/l2tp_core.c b/net/l2tp/l2tp_core.c index 78530299ae38..9be095e00450 100644 --- a/net/l2tp/l2tp_core.c +++ b/net/l2tp/l2tp_core.c | |||
@@ -954,7 +954,7 @@ static int l2tp_build_l2tpv3_header(struct l2tp_session *session, void *buf) | |||
954 | } | 954 | } |
955 | 955 | ||
956 | static int l2tp_xmit_core(struct l2tp_session *session, struct sk_buff *skb, | 956 | static int l2tp_xmit_core(struct l2tp_session *session, struct sk_buff *skb, |
957 | size_t data_len) | 957 | struct flowi *fl, size_t data_len) |
958 | { | 958 | { |
959 | struct l2tp_tunnel *tunnel = session->tunnel; | 959 | struct l2tp_tunnel *tunnel = session->tunnel; |
960 | unsigned int len = skb->len; | 960 | unsigned int len = skb->len; |
@@ -987,7 +987,7 @@ static int l2tp_xmit_core(struct l2tp_session *session, struct sk_buff *skb, | |||
987 | 987 | ||
988 | /* Queue the packet to IP for output */ | 988 | /* Queue the packet to IP for output */ |
989 | skb->local_df = 1; | 989 | skb->local_df = 1; |
990 | error = ip_queue_xmit(skb); | 990 | error = ip_queue_xmit(skb, fl); |
991 | 991 | ||
992 | /* Update stats */ | 992 | /* Update stats */ |
993 | if (error >= 0) { | 993 | if (error >= 0) { |
@@ -1028,6 +1028,7 @@ int l2tp_xmit_skb(struct l2tp_session *session, struct sk_buff *skb, int hdr_len | |||
1028 | int data_len = skb->len; | 1028 | int data_len = skb->len; |
1029 | struct l2tp_tunnel *tunnel = session->tunnel; | 1029 | struct l2tp_tunnel *tunnel = session->tunnel; |
1030 | struct sock *sk = tunnel->sock; | 1030 | struct sock *sk = tunnel->sock; |
1031 | struct flowi *fl; | ||
1031 | struct udphdr *uh; | 1032 | struct udphdr *uh; |
1032 | struct inet_sock *inet; | 1033 | struct inet_sock *inet; |
1033 | __wsum csum; | 1034 | __wsum csum; |
@@ -1070,10 +1071,11 @@ int l2tp_xmit_skb(struct l2tp_session *session, struct sk_buff *skb, int hdr_len | |||
1070 | skb_dst_drop(skb); | 1071 | skb_dst_drop(skb); |
1071 | skb_dst_set(skb, dst_clone(__sk_dst_get(sk))); | 1072 | skb_dst_set(skb, dst_clone(__sk_dst_get(sk))); |
1072 | 1073 | ||
1074 | inet = inet_sk(sk); | ||
1075 | fl = &inet->cork.fl; | ||
1073 | switch (tunnel->encap) { | 1076 | switch (tunnel->encap) { |
1074 | case L2TP_ENCAPTYPE_UDP: | 1077 | case L2TP_ENCAPTYPE_UDP: |
1075 | /* Setup UDP header */ | 1078 | /* Setup UDP header */ |
1076 | inet = inet_sk(sk); | ||
1077 | __skb_push(skb, sizeof(*uh)); | 1079 | __skb_push(skb, sizeof(*uh)); |
1078 | skb_reset_transport_header(skb); | 1080 | skb_reset_transport_header(skb); |
1079 | uh = udp_hdr(skb); | 1081 | uh = udp_hdr(skb); |
@@ -1111,7 +1113,7 @@ int l2tp_xmit_skb(struct l2tp_session *session, struct sk_buff *skb, int hdr_len | |||
1111 | 1113 | ||
1112 | l2tp_skb_set_owner_w(skb, sk); | 1114 | l2tp_skb_set_owner_w(skb, sk); |
1113 | 1115 | ||
1114 | l2tp_xmit_core(session, skb, data_len); | 1116 | l2tp_xmit_core(session, skb, fl, data_len); |
1115 | out_unlock: | 1117 | out_unlock: |
1116 | bh_unlock_sock(sk); | 1118 | bh_unlock_sock(sk); |
1117 | 1119 | ||
diff --git a/net/l2tp/l2tp_ip.c b/net/l2tp/l2tp_ip.c index 1ca74892ff09..f7fb09ecaf89 100644 --- a/net/l2tp/l2tp_ip.c +++ b/net/l2tp/l2tp_ip.c | |||
@@ -508,7 +508,7 @@ static int l2tp_ip_sendmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *m | |||
508 | skb_dst_set(skb, dst_clone(&rt->dst)); | 508 | skb_dst_set(skb, dst_clone(&rt->dst)); |
509 | 509 | ||
510 | /* Queue the packet to IP for output */ | 510 | /* Queue the packet to IP for output */ |
511 | rc = ip_queue_xmit(skb); | 511 | rc = ip_queue_xmit(skb, &inet->cork.fl); |
512 | 512 | ||
513 | error: | 513 | error: |
514 | /* Update stats */ | 514 | /* Update stats */ |
diff --git a/net/sctp/protocol.c b/net/sctp/protocol.c index 69fbc55cf18e..847193b7995f 100644 --- a/net/sctp/protocol.c +++ b/net/sctp/protocol.c | |||
@@ -855,7 +855,7 @@ static inline int sctp_v4_xmit(struct sk_buff *skb, | |||
855 | IP_PMTUDISC_DO : IP_PMTUDISC_DONT; | 855 | IP_PMTUDISC_DO : IP_PMTUDISC_DONT; |
856 | 856 | ||
857 | SCTP_INC_STATS(SCTP_MIB_OUTSCTPPACKS); | 857 | SCTP_INC_STATS(SCTP_MIB_OUTSCTPPACKS); |
858 | return ip_queue_xmit(skb); | 858 | return ip_queue_xmit(skb, &transport->fl); |
859 | } | 859 | } |
860 | 860 | ||
861 | static struct sctp_af sctp_af_inet; | 861 | static struct sctp_af sctp_af_inet; |