diff options
Diffstat (limited to 'net/ipv4')
77 files changed, 240 insertions, 133 deletions
diff --git a/net/ipv4/af_inet.c b/net/ipv4/af_inet.c index 0a277453526b..8d157157bf8e 100644 --- a/net/ipv4/af_inet.c +++ b/net/ipv4/af_inet.c | |||
@@ -68,6 +68,7 @@ | |||
68 | */ | 68 | */ |
69 | 69 | ||
70 | #include <linux/config.h> | 70 | #include <linux/config.h> |
71 | #include <linux/err.h> | ||
71 | #include <linux/errno.h> | 72 | #include <linux/errno.h> |
72 | #include <linux/types.h> | 73 | #include <linux/types.h> |
73 | #include <linux/socket.h> | 74 | #include <linux/socket.h> |
@@ -1096,6 +1097,54 @@ int inet_sk_rebuild_header(struct sock *sk) | |||
1096 | 1097 | ||
1097 | EXPORT_SYMBOL(inet_sk_rebuild_header); | 1098 | EXPORT_SYMBOL(inet_sk_rebuild_header); |
1098 | 1099 | ||
1100 | static struct sk_buff *inet_gso_segment(struct sk_buff *skb, int features) | ||
1101 | { | ||
1102 | struct sk_buff *segs = ERR_PTR(-EINVAL); | ||
1103 | struct iphdr *iph; | ||
1104 | struct net_protocol *ops; | ||
1105 | int proto; | ||
1106 | int ihl; | ||
1107 | int id; | ||
1108 | |||
1109 | if (!pskb_may_pull(skb, sizeof(*iph))) | ||
1110 | goto out; | ||
1111 | |||
1112 | iph = skb->nh.iph; | ||
1113 | ihl = iph->ihl * 4; | ||
1114 | if (ihl < sizeof(*iph)) | ||
1115 | goto out; | ||
1116 | |||
1117 | if (!pskb_may_pull(skb, ihl)) | ||
1118 | goto out; | ||
1119 | |||
1120 | skb->h.raw = __skb_pull(skb, ihl); | ||
1121 | iph = skb->nh.iph; | ||
1122 | id = ntohs(iph->id); | ||
1123 | proto = iph->protocol & (MAX_INET_PROTOS - 1); | ||
1124 | segs = ERR_PTR(-EPROTONOSUPPORT); | ||
1125 | |||
1126 | rcu_read_lock(); | ||
1127 | ops = rcu_dereference(inet_protos[proto]); | ||
1128 | if (ops && ops->gso_segment) | ||
1129 | segs = ops->gso_segment(skb, features); | ||
1130 | rcu_read_unlock(); | ||
1131 | |||
1132 | if (!segs || unlikely(IS_ERR(segs))) | ||
1133 | goto out; | ||
1134 | |||
1135 | skb = segs; | ||
1136 | do { | ||
1137 | iph = skb->nh.iph; | ||
1138 | iph->id = htons(id++); | ||
1139 | iph->tot_len = htons(skb->len - skb->mac_len); | ||
1140 | iph->check = 0; | ||
1141 | iph->check = ip_fast_csum(skb->nh.raw, iph->ihl); | ||
1142 | } while ((skb = skb->next)); | ||
1143 | |||
1144 | out: | ||
1145 | return segs; | ||
1146 | } | ||
1147 | |||
1099 | #ifdef CONFIG_IP_MULTICAST | 1148 | #ifdef CONFIG_IP_MULTICAST |
1100 | static struct net_protocol igmp_protocol = { | 1149 | static struct net_protocol igmp_protocol = { |
1101 | .handler = igmp_rcv, | 1150 | .handler = igmp_rcv, |
@@ -1105,6 +1154,7 @@ static struct net_protocol igmp_protocol = { | |||
1105 | static struct net_protocol tcp_protocol = { | 1154 | static struct net_protocol tcp_protocol = { |
1106 | .handler = tcp_v4_rcv, | 1155 | .handler = tcp_v4_rcv, |
1107 | .err_handler = tcp_v4_err, | 1156 | .err_handler = tcp_v4_err, |
1157 | .gso_segment = tcp_tso_segment, | ||
1108 | .no_policy = 1, | 1158 | .no_policy = 1, |
1109 | }; | 1159 | }; |
1110 | 1160 | ||
@@ -1150,6 +1200,7 @@ static int ipv4_proc_init(void); | |||
1150 | static struct packet_type ip_packet_type = { | 1200 | static struct packet_type ip_packet_type = { |
1151 | .type = __constant_htons(ETH_P_IP), | 1201 | .type = __constant_htons(ETH_P_IP), |
1152 | .func = ip_rcv, | 1202 | .func = ip_rcv, |
1203 | .gso_segment = inet_gso_segment, | ||
1153 | }; | 1204 | }; |
1154 | 1205 | ||
1155 | static int __init inet_init(void) | 1206 | static int __init inet_init(void) |
diff --git a/net/ipv4/ah4.c b/net/ipv4/ah4.c index c7782230080d..8e748be36c5a 100644 --- a/net/ipv4/ah4.c +++ b/net/ipv4/ah4.c | |||
@@ -1,4 +1,3 @@ | |||
1 | #include <linux/config.h> | ||
2 | #include <linux/module.h> | 1 | #include <linux/module.h> |
3 | #include <net/ip.h> | 2 | #include <net/ip.h> |
4 | #include <net/xfrm.h> | 3 | #include <net/xfrm.h> |
diff --git a/net/ipv4/arp.c b/net/ipv4/arp.c index 4749d504c629..7b51b3bdb548 100644 --- a/net/ipv4/arp.c +++ b/net/ipv4/arp.c | |||
@@ -80,7 +80,6 @@ | |||
80 | #include <linux/kernel.h> | 80 | #include <linux/kernel.h> |
81 | #include <linux/sched.h> | 81 | #include <linux/sched.h> |
82 | #include <linux/capability.h> | 82 | #include <linux/capability.h> |
83 | #include <linux/config.h> | ||
84 | #include <linux/socket.h> | 83 | #include <linux/socket.h> |
85 | #include <linux/sockios.h> | 84 | #include <linux/sockios.h> |
86 | #include <linux/errno.h> | 85 | #include <linux/errno.h> |
diff --git a/net/ipv4/datagram.c b/net/ipv4/datagram.c index c1b42b5257f8..ec5da4fbd9f4 100644 --- a/net/ipv4/datagram.c +++ b/net/ipv4/datagram.c | |||
@@ -11,7 +11,6 @@ | |||
11 | * 2 of the License, or (at your option) any later version. | 11 | * 2 of the License, or (at your option) any later version. |
12 | */ | 12 | */ |
13 | 13 | ||
14 | #include <linux/config.h> | ||
15 | #include <linux/types.h> | 14 | #include <linux/types.h> |
16 | #include <linux/module.h> | 15 | #include <linux/module.h> |
17 | #include <linux/ip.h> | 16 | #include <linux/ip.h> |
diff --git a/net/ipv4/devinet.c b/net/ipv4/devinet.c index 54419b27686f..a7c65e9e5ec9 100644 --- a/net/ipv4/devinet.c +++ b/net/ipv4/devinet.c | |||
@@ -27,7 +27,6 @@ | |||
27 | * if no match found. | 27 | * if no match found. |
28 | */ | 28 | */ |
29 | 29 | ||
30 | #include <linux/config.h> | ||
31 | 30 | ||
32 | #include <asm/uaccess.h> | 31 | #include <asm/uaccess.h> |
33 | #include <asm/system.h> | 32 | #include <asm/system.h> |
diff --git a/net/ipv4/esp4.c b/net/ipv4/esp4.c index 9bbdd4494551..4e112738b3fa 100644 --- a/net/ipv4/esp4.c +++ b/net/ipv4/esp4.c | |||
@@ -1,4 +1,3 @@ | |||
1 | #include <linux/config.h> | ||
2 | #include <linux/module.h> | 1 | #include <linux/module.h> |
3 | #include <net/ip.h> | 2 | #include <net/ip.h> |
4 | #include <net/xfrm.h> | 3 | #include <net/xfrm.h> |
diff --git a/net/ipv4/fib_frontend.c b/net/ipv4/fib_frontend.c index 31387abf53a2..ba2a70745a63 100644 --- a/net/ipv4/fib_frontend.c +++ b/net/ipv4/fib_frontend.c | |||
@@ -15,7 +15,6 @@ | |||
15 | * 2 of the License, or (at your option) any later version. | 15 | * 2 of the License, or (at your option) any later version. |
16 | */ | 16 | */ |
17 | 17 | ||
18 | #include <linux/config.h> | ||
19 | #include <linux/module.h> | 18 | #include <linux/module.h> |
20 | #include <asm/uaccess.h> | 19 | #include <asm/uaccess.h> |
21 | #include <asm/system.h> | 20 | #include <asm/system.h> |
diff --git a/net/ipv4/fib_hash.c b/net/ipv4/fib_hash.c index e2890ec8159e..3c1d32ad35f2 100644 --- a/net/ipv4/fib_hash.c +++ b/net/ipv4/fib_hash.c | |||
@@ -15,7 +15,6 @@ | |||
15 | * 2 of the License, or (at your option) any later version. | 15 | * 2 of the License, or (at your option) any later version. |
16 | */ | 16 | */ |
17 | 17 | ||
18 | #include <linux/config.h> | ||
19 | #include <asm/uaccess.h> | 18 | #include <asm/uaccess.h> |
20 | #include <asm/system.h> | 19 | #include <asm/system.h> |
21 | #include <linux/bitops.h> | 20 | #include <linux/bitops.h> |
diff --git a/net/ipv4/fib_rules.c b/net/ipv4/fib_rules.c index ec566f3e66c7..6c642d11d4ca 100644 --- a/net/ipv4/fib_rules.c +++ b/net/ipv4/fib_rules.c | |||
@@ -19,7 +19,6 @@ | |||
19 | * Marc Boucher : routing by fwmark | 19 | * Marc Boucher : routing by fwmark |
20 | */ | 20 | */ |
21 | 21 | ||
22 | #include <linux/config.h> | ||
23 | #include <asm/uaccess.h> | 22 | #include <asm/uaccess.h> |
24 | #include <asm/system.h> | 23 | #include <asm/system.h> |
25 | #include <linux/bitops.h> | 24 | #include <linux/bitops.h> |
diff --git a/net/ipv4/fib_semantics.c b/net/ipv4/fib_semantics.c index 0f4145babb14..5f87533684d5 100644 --- a/net/ipv4/fib_semantics.c +++ b/net/ipv4/fib_semantics.c | |||
@@ -15,7 +15,6 @@ | |||
15 | * 2 of the License, or (at your option) any later version. | 15 | * 2 of the License, or (at your option) any later version. |
16 | */ | 16 | */ |
17 | 17 | ||
18 | #include <linux/config.h> | ||
19 | #include <asm/uaccess.h> | 18 | #include <asm/uaccess.h> |
20 | #include <asm/system.h> | 19 | #include <asm/system.h> |
21 | #include <linux/bitops.h> | 20 | #include <linux/bitops.h> |
diff --git a/net/ipv4/fib_trie.c b/net/ipv4/fib_trie.c index 95a639f2e3db..1cb65305e102 100644 --- a/net/ipv4/fib_trie.c +++ b/net/ipv4/fib_trie.c | |||
@@ -52,7 +52,6 @@ | |||
52 | 52 | ||
53 | #define VERSION "0.407" | 53 | #define VERSION "0.407" |
54 | 54 | ||
55 | #include <linux/config.h> | ||
56 | #include <asm/uaccess.h> | 55 | #include <asm/uaccess.h> |
57 | #include <asm/system.h> | 56 | #include <asm/system.h> |
58 | #include <asm/bitops.h> | 57 | #include <asm/bitops.h> |
diff --git a/net/ipv4/icmp.c b/net/ipv4/icmp.c index 017900172f7d..4c86ac3d882d 100644 --- a/net/ipv4/icmp.c +++ b/net/ipv4/icmp.c | |||
@@ -64,7 +64,6 @@ | |||
64 | * | 64 | * |
65 | */ | 65 | */ |
66 | 66 | ||
67 | #include <linux/config.h> | ||
68 | #include <linux/module.h> | 67 | #include <linux/module.h> |
69 | #include <linux/types.h> | 68 | #include <linux/types.h> |
70 | #include <linux/jiffies.h> | 69 | #include <linux/jiffies.h> |
diff --git a/net/ipv4/igmp.c b/net/ipv4/igmp.c index ab680c851aa2..d299c8e547d6 100644 --- a/net/ipv4/igmp.c +++ b/net/ipv4/igmp.c | |||
@@ -72,7 +72,6 @@ | |||
72 | * Vinay Kulkarni | 72 | * Vinay Kulkarni |
73 | */ | 73 | */ |
74 | 74 | ||
75 | #include <linux/config.h> | ||
76 | #include <linux/module.h> | 75 | #include <linux/module.h> |
77 | #include <asm/uaccess.h> | 76 | #include <asm/uaccess.h> |
78 | #include <asm/system.h> | 77 | #include <asm/system.h> |
diff --git a/net/ipv4/inet_connection_sock.c b/net/ipv4/inet_connection_sock.c index 9a01bb81f8bf..e50a1bfd7ccc 100644 --- a/net/ipv4/inet_connection_sock.c +++ b/net/ipv4/inet_connection_sock.c | |||
@@ -13,7 +13,6 @@ | |||
13 | * 2 of the License, or(at your option) any later version. | 13 | * 2 of the License, or(at your option) any later version. |
14 | */ | 14 | */ |
15 | 15 | ||
16 | #include <linux/config.h> | ||
17 | #include <linux/module.h> | 16 | #include <linux/module.h> |
18 | #include <linux/jhash.h> | 17 | #include <linux/jhash.h> |
19 | 18 | ||
diff --git a/net/ipv4/inet_diag.c b/net/ipv4/inet_diag.c index 457db99c76df..8e7e41b66c79 100644 --- a/net/ipv4/inet_diag.c +++ b/net/ipv4/inet_diag.c | |||
@@ -11,7 +11,6 @@ | |||
11 | * 2 of the License, or (at your option) any later version. | 11 | * 2 of the License, or (at your option) any later version. |
12 | */ | 12 | */ |
13 | 13 | ||
14 | #include <linux/config.h> | ||
15 | #include <linux/module.h> | 14 | #include <linux/module.h> |
16 | #include <linux/types.h> | 15 | #include <linux/types.h> |
17 | #include <linux/fcntl.h> | 16 | #include <linux/fcntl.h> |
diff --git a/net/ipv4/inet_hashtables.c b/net/ipv4/inet_hashtables.c index ee9b5515b9ae..95fac5532994 100644 --- a/net/ipv4/inet_hashtables.c +++ b/net/ipv4/inet_hashtables.c | |||
@@ -13,7 +13,6 @@ | |||
13 | * 2 of the License, or (at your option) any later version. | 13 | * 2 of the License, or (at your option) any later version. |
14 | */ | 14 | */ |
15 | 15 | ||
16 | #include <linux/config.h> | ||
17 | #include <linux/module.h> | 16 | #include <linux/module.h> |
18 | #include <linux/random.h> | 17 | #include <linux/random.h> |
19 | #include <linux/sched.h> | 18 | #include <linux/sched.h> |
diff --git a/net/ipv4/inet_timewait_sock.c b/net/ipv4/inet_timewait_sock.c index 417f126c749e..cdd805344c61 100644 --- a/net/ipv4/inet_timewait_sock.c +++ b/net/ipv4/inet_timewait_sock.c | |||
@@ -8,7 +8,6 @@ | |||
8 | * From code orinally in TCP | 8 | * From code orinally in TCP |
9 | */ | 9 | */ |
10 | 10 | ||
11 | #include <linux/config.h> | ||
12 | 11 | ||
13 | #include <net/inet_hashtables.h> | 12 | #include <net/inet_hashtables.h> |
14 | #include <net/inet_timewait_sock.h> | 13 | #include <net/inet_timewait_sock.h> |
diff --git a/net/ipv4/ip_forward.c b/net/ipv4/ip_forward.c index 9f0bb529ab70..a22d11d2911c 100644 --- a/net/ipv4/ip_forward.c +++ b/net/ipv4/ip_forward.c | |||
@@ -21,7 +21,6 @@ | |||
21 | * Mike McLagan : Routing by source | 21 | * Mike McLagan : Routing by source |
22 | */ | 22 | */ |
23 | 23 | ||
24 | #include <linux/config.h> | ||
25 | #include <linux/types.h> | 24 | #include <linux/types.h> |
26 | #include <linux/mm.h> | 25 | #include <linux/mm.h> |
27 | #include <linux/sched.h> | 26 | #include <linux/sched.h> |
diff --git a/net/ipv4/ip_fragment.c b/net/ipv4/ip_fragment.c index da734c439179..b84b53a47526 100644 --- a/net/ipv4/ip_fragment.c +++ b/net/ipv4/ip_fragment.c | |||
@@ -23,7 +23,6 @@ | |||
23 | */ | 23 | */ |
24 | 24 | ||
25 | #include <linux/compiler.h> | 25 | #include <linux/compiler.h> |
26 | #include <linux/config.h> | ||
27 | #include <linux/module.h> | 26 | #include <linux/module.h> |
28 | #include <linux/types.h> | 27 | #include <linux/types.h> |
29 | #include <linux/mm.h> | 28 | #include <linux/mm.h> |
diff --git a/net/ipv4/ip_gre.c b/net/ipv4/ip_gre.c index ab99bebdcdc8..6ff9b10d9563 100644 --- a/net/ipv4/ip_gre.c +++ b/net/ipv4/ip_gre.c | |||
@@ -11,7 +11,6 @@ | |||
11 | */ | 11 | */ |
12 | 12 | ||
13 | #include <linux/capability.h> | 13 | #include <linux/capability.h> |
14 | #include <linux/config.h> | ||
15 | #include <linux/module.h> | 14 | #include <linux/module.h> |
16 | #include <linux/types.h> | 15 | #include <linux/types.h> |
17 | #include <linux/sched.h> | 16 | #include <linux/sched.h> |
diff --git a/net/ipv4/ip_input.c b/net/ipv4/ip_input.c index c9026dbf4c93..e1a7dba2fa8a 100644 --- a/net/ipv4/ip_input.c +++ b/net/ipv4/ip_input.c | |||
@@ -121,7 +121,6 @@ | |||
121 | #include <linux/kernel.h> | 121 | #include <linux/kernel.h> |
122 | #include <linux/string.h> | 122 | #include <linux/string.h> |
123 | #include <linux/errno.h> | 123 | #include <linux/errno.h> |
124 | #include <linux/config.h> | ||
125 | 124 | ||
126 | #include <linux/net.h> | 125 | #include <linux/net.h> |
127 | #include <linux/socket.h> | 126 | #include <linux/socket.h> |
diff --git a/net/ipv4/ip_output.c b/net/ipv4/ip_output.c index 8538aac3d148..ca0e714613fb 100644 --- a/net/ipv4/ip_output.c +++ b/net/ipv4/ip_output.c | |||
@@ -53,7 +53,6 @@ | |||
53 | #include <linux/mm.h> | 53 | #include <linux/mm.h> |
54 | #include <linux/string.h> | 54 | #include <linux/string.h> |
55 | #include <linux/errno.h> | 55 | #include <linux/errno.h> |
56 | #include <linux/config.h> | ||
57 | 56 | ||
58 | #include <linux/socket.h> | 57 | #include <linux/socket.h> |
59 | #include <linux/sockios.h> | 58 | #include <linux/sockios.h> |
@@ -210,8 +209,7 @@ static inline int ip_finish_output(struct sk_buff *skb) | |||
210 | return dst_output(skb); | 209 | return dst_output(skb); |
211 | } | 210 | } |
212 | #endif | 211 | #endif |
213 | if (skb->len > dst_mtu(skb->dst) && | 212 | if (skb->len > dst_mtu(skb->dst) && !skb_shinfo(skb)->gso_size) |
214 | !(skb_shinfo(skb)->ufo_size || skb_shinfo(skb)->tso_size)) | ||
215 | return ip_fragment(skb, ip_finish_output2); | 213 | return ip_fragment(skb, ip_finish_output2); |
216 | else | 214 | else |
217 | return ip_finish_output2(skb); | 215 | return ip_finish_output2(skb); |
@@ -362,7 +360,7 @@ packet_routed: | |||
362 | } | 360 | } |
363 | 361 | ||
364 | ip_select_ident_more(iph, &rt->u.dst, sk, | 362 | ip_select_ident_more(iph, &rt->u.dst, sk, |
365 | (skb_shinfo(skb)->tso_segs ?: 1) - 1); | 363 | (skb_shinfo(skb)->gso_segs ?: 1) - 1); |
366 | 364 | ||
367 | /* Add an IP checksum. */ | 365 | /* Add an IP checksum. */ |
368 | ip_send_check(iph); | 366 | ip_send_check(iph); |
@@ -744,7 +742,8 @@ static inline int ip_ufo_append_data(struct sock *sk, | |||
744 | (length - transhdrlen)); | 742 | (length - transhdrlen)); |
745 | if (!err) { | 743 | if (!err) { |
746 | /* specify the length of each IP datagram fragment*/ | 744 | /* specify the length of each IP datagram fragment*/ |
747 | skb_shinfo(skb)->ufo_size = (mtu - fragheaderlen); | 745 | skb_shinfo(skb)->gso_size = mtu - fragheaderlen; |
746 | skb_shinfo(skb)->gso_type = SKB_GSO_UDP; | ||
748 | __skb_queue_tail(&sk->sk_write_queue, skb); | 747 | __skb_queue_tail(&sk->sk_write_queue, skb); |
749 | 748 | ||
750 | return 0; | 749 | return 0; |
@@ -1087,14 +1086,16 @@ ssize_t ip_append_page(struct sock *sk, struct page *page, | |||
1087 | 1086 | ||
1088 | inet->cork.length += size; | 1087 | inet->cork.length += size; |
1089 | if ((sk->sk_protocol == IPPROTO_UDP) && | 1088 | if ((sk->sk_protocol == IPPROTO_UDP) && |
1090 | (rt->u.dst.dev->features & NETIF_F_UFO)) | 1089 | (rt->u.dst.dev->features & NETIF_F_UFO)) { |
1091 | skb_shinfo(skb)->ufo_size = (mtu - fragheaderlen); | 1090 | skb_shinfo(skb)->gso_size = mtu - fragheaderlen; |
1091 | skb_shinfo(skb)->gso_type = SKB_GSO_UDP; | ||
1092 | } | ||
1092 | 1093 | ||
1093 | 1094 | ||
1094 | while (size > 0) { | 1095 | while (size > 0) { |
1095 | int i; | 1096 | int i; |
1096 | 1097 | ||
1097 | if (skb_shinfo(skb)->ufo_size) | 1098 | if (skb_shinfo(skb)->gso_size) |
1098 | len = size; | 1099 | len = size; |
1099 | else { | 1100 | else { |
1100 | 1101 | ||
diff --git a/net/ipv4/ip_sockglue.c b/net/ipv4/ip_sockglue.c index 12e0bf19f24a..84f43a3c9098 100644 --- a/net/ipv4/ip_sockglue.c +++ b/net/ipv4/ip_sockglue.c | |||
@@ -17,7 +17,6 @@ | |||
17 | * Mike McLagan : Routing by source | 17 | * Mike McLagan : Routing by source |
18 | */ | 18 | */ |
19 | 19 | ||
20 | #include <linux/config.h> | ||
21 | #include <linux/module.h> | 20 | #include <linux/module.h> |
22 | #include <linux/types.h> | 21 | #include <linux/types.h> |
23 | #include <linux/mm.h> | 22 | #include <linux/mm.h> |
diff --git a/net/ipv4/ipcomp.c b/net/ipv4/ipcomp.c index 3ed8b57a1002..8e0374847532 100644 --- a/net/ipv4/ipcomp.c +++ b/net/ipv4/ipcomp.c | |||
@@ -13,7 +13,6 @@ | |||
13 | * - Compression stats. | 13 | * - Compression stats. |
14 | * - Adaptive compression. | 14 | * - Adaptive compression. |
15 | */ | 15 | */ |
16 | #include <linux/config.h> | ||
17 | #include <linux/module.h> | 16 | #include <linux/module.h> |
18 | #include <asm/scatterlist.h> | 17 | #include <asm/scatterlist.h> |
19 | #include <asm/semaphore.h> | 18 | #include <asm/semaphore.h> |
diff --git a/net/ipv4/ipip.c b/net/ipv4/ipip.c index ea398ee43f28..3291d5192aad 100644 --- a/net/ipv4/ipip.c +++ b/net/ipv4/ipip.c | |||
@@ -94,7 +94,6 @@ | |||
94 | 94 | ||
95 | 95 | ||
96 | #include <linux/capability.h> | 96 | #include <linux/capability.h> |
97 | #include <linux/config.h> | ||
98 | #include <linux/module.h> | 97 | #include <linux/module.h> |
99 | #include <linux/types.h> | 98 | #include <linux/types.h> |
100 | #include <linux/sched.h> | 99 | #include <linux/sched.h> |
diff --git a/net/ipv4/ipmr.c b/net/ipv4/ipmr.c index 717ab7d6d7b6..ba33f8621c67 100644 --- a/net/ipv4/ipmr.c +++ b/net/ipv4/ipmr.c | |||
@@ -28,7 +28,6 @@ | |||
28 | * | 28 | * |
29 | */ | 29 | */ |
30 | 30 | ||
31 | #include <linux/config.h> | ||
32 | #include <asm/system.h> | 31 | #include <asm/system.h> |
33 | #include <asm/uaccess.h> | 32 | #include <asm/uaccess.h> |
34 | #include <linux/types.h> | 33 | #include <linux/types.h> |
diff --git a/net/ipv4/ipvs/ip_vs_est.c b/net/ipv4/ipvs/ip_vs_est.c index c453e1e57f4b..4c1940381ba0 100644 --- a/net/ipv4/ipvs/ip_vs_est.c +++ b/net/ipv4/ipvs/ip_vs_est.c | |||
@@ -13,7 +13,6 @@ | |||
13 | * Changes: | 13 | * Changes: |
14 | * | 14 | * |
15 | */ | 15 | */ |
16 | #include <linux/config.h> | ||
17 | #include <linux/kernel.h> | 16 | #include <linux/kernel.h> |
18 | #include <linux/jiffies.h> | 17 | #include <linux/jiffies.h> |
19 | #include <linux/slab.h> | 18 | #include <linux/slab.h> |
diff --git a/net/ipv4/multipath_drr.c b/net/ipv4/multipath_drr.c index db67373f9b34..252e837b17a5 100644 --- a/net/ipv4/multipath_drr.c +++ b/net/ipv4/multipath_drr.c | |||
@@ -12,7 +12,6 @@ | |||
12 | * 2 of the License, or (at your option) any later version. | 12 | * 2 of the License, or (at your option) any later version. |
13 | */ | 13 | */ |
14 | 14 | ||
15 | #include <linux/config.h> | ||
16 | #include <asm/system.h> | 15 | #include <asm/system.h> |
17 | #include <asm/uaccess.h> | 16 | #include <asm/uaccess.h> |
18 | #include <linux/types.h> | 17 | #include <linux/types.h> |
diff --git a/net/ipv4/multipath_random.c b/net/ipv4/multipath_random.c index 5249dbe7c559..b8c289f247cb 100644 --- a/net/ipv4/multipath_random.c +++ b/net/ipv4/multipath_random.c | |||
@@ -12,7 +12,6 @@ | |||
12 | * 2 of the License, or (at your option) any later version. | 12 | * 2 of the License, or (at your option) any later version. |
13 | */ | 13 | */ |
14 | 14 | ||
15 | #include <linux/config.h> | ||
16 | #include <asm/system.h> | 15 | #include <asm/system.h> |
17 | #include <asm/uaccess.h> | 16 | #include <asm/uaccess.h> |
18 | #include <linux/types.h> | 17 | #include <linux/types.h> |
diff --git a/net/ipv4/multipath_rr.c b/net/ipv4/multipath_rr.c index b6cd2870478f..bba5abe5542d 100644 --- a/net/ipv4/multipath_rr.c +++ b/net/ipv4/multipath_rr.c | |||
@@ -12,7 +12,6 @@ | |||
12 | * 2 of the License, or (at your option) any later version. | 12 | * 2 of the License, or (at your option) any later version. |
13 | */ | 13 | */ |
14 | 14 | ||
15 | #include <linux/config.h> | ||
16 | #include <asm/system.h> | 15 | #include <asm/system.h> |
17 | #include <asm/uaccess.h> | 16 | #include <asm/uaccess.h> |
18 | #include <linux/types.h> | 17 | #include <linux/types.h> |
diff --git a/net/ipv4/multipath_wrandom.c b/net/ipv4/multipath_wrandom.c index 342d0b9098f5..d25ec4ae09e5 100644 --- a/net/ipv4/multipath_wrandom.c +++ b/net/ipv4/multipath_wrandom.c | |||
@@ -12,7 +12,6 @@ | |||
12 | * 2 of the License, or (at your option) any later version. | 12 | * 2 of the License, or (at your option) any later version. |
13 | */ | 13 | */ |
14 | 14 | ||
15 | #include <linux/config.h> | ||
16 | #include <asm/system.h> | 15 | #include <asm/system.h> |
17 | #include <asm/uaccess.h> | 16 | #include <asm/uaccess.h> |
18 | #include <linux/types.h> | 17 | #include <linux/types.h> |
diff --git a/net/ipv4/netfilter/Kconfig b/net/ipv4/netfilter/Kconfig index e1d7f5fbc526..ef0b5aac5838 100644 --- a/net/ipv4/netfilter/Kconfig +++ b/net/ipv4/netfilter/Kconfig | |||
@@ -332,7 +332,7 @@ config IP_NF_MATCH_HASHLIMIT | |||
332 | help | 332 | help |
333 | This option adds a new iptables `hashlimit' match. | 333 | This option adds a new iptables `hashlimit' match. |
334 | 334 | ||
335 | As opposed to `limit', this match dynamically crates a hash table | 335 | As opposed to `limit', this match dynamically creates a hash table |
336 | of limit buckets, based on your selection of source/destination | 336 | of limit buckets, based on your selection of source/destination |
337 | ip addresses and/or ports. | 337 | ip addresses and/or ports. |
338 | 338 | ||
diff --git a/net/ipv4/netfilter/arp_tables.c b/net/ipv4/netfilter/arp_tables.c index d0d19192026d..80c73ca90116 100644 --- a/net/ipv4/netfilter/arp_tables.c +++ b/net/ipv4/netfilter/arp_tables.c | |||
@@ -9,7 +9,6 @@ | |||
9 | * | 9 | * |
10 | */ | 10 | */ |
11 | 11 | ||
12 | #include <linux/config.h> | ||
13 | #include <linux/kernel.h> | 12 | #include <linux/kernel.h> |
14 | #include <linux/skbuff.h> | 13 | #include <linux/skbuff.h> |
15 | #include <linux/netdevice.h> | 14 | #include <linux/netdevice.h> |
@@ -1120,7 +1119,8 @@ int arpt_register_table(struct arpt_table *table, | |||
1120 | return ret; | 1119 | return ret; |
1121 | } | 1120 | } |
1122 | 1121 | ||
1123 | if (xt_register_table(table, &bootstrap, newinfo) != 0) { | 1122 | ret = xt_register_table(table, &bootstrap, newinfo); |
1123 | if (ret != 0) { | ||
1124 | xt_free_table_info(newinfo); | 1124 | xt_free_table_info(newinfo); |
1125 | return ret; | 1125 | return ret; |
1126 | } | 1126 | } |
diff --git a/net/ipv4/netfilter/ip_conntrack_core.c b/net/ipv4/netfilter/ip_conntrack_core.c index 7e4cf9a4d15f..aa459177c3f8 100644 --- a/net/ipv4/netfilter/ip_conntrack_core.c +++ b/net/ipv4/netfilter/ip_conntrack_core.c | |||
@@ -17,7 +17,6 @@ | |||
17 | * - export ip_conntrack[_expect]_{find_get,put} functions | 17 | * - export ip_conntrack[_expect]_{find_get,put} functions |
18 | * */ | 18 | * */ |
19 | 19 | ||
20 | #include <linux/config.h> | ||
21 | #include <linux/types.h> | 20 | #include <linux/types.h> |
22 | #include <linux/icmp.h> | 21 | #include <linux/icmp.h> |
23 | #include <linux/ip.h> | 22 | #include <linux/ip.h> |
diff --git a/net/ipv4/netfilter/ip_conntrack_ftp.c b/net/ipv4/netfilter/ip_conntrack_ftp.c index 4dcf526c3944..1d18c863f064 100644 --- a/net/ipv4/netfilter/ip_conntrack_ftp.c +++ b/net/ipv4/netfilter/ip_conntrack_ftp.c | |||
@@ -8,7 +8,6 @@ | |||
8 | * published by the Free Software Foundation. | 8 | * published by the Free Software Foundation. |
9 | */ | 9 | */ |
10 | 10 | ||
11 | #include <linux/config.h> | ||
12 | #include <linux/module.h> | 11 | #include <linux/module.h> |
13 | #include <linux/netfilter.h> | 12 | #include <linux/netfilter.h> |
14 | #include <linux/ip.h> | 13 | #include <linux/ip.h> |
diff --git a/net/ipv4/netfilter/ip_conntrack_helper_h323.c b/net/ipv4/netfilter/ip_conntrack_helper_h323.c index 0665674218c6..af35235672d5 100644 --- a/net/ipv4/netfilter/ip_conntrack_helper_h323.c +++ b/net/ipv4/netfilter/ip_conntrack_helper_h323.c | |||
@@ -11,7 +11,6 @@ | |||
11 | * For more information, please see http://nath323.sourceforge.net/ | 11 | * For more information, please see http://nath323.sourceforge.net/ |
12 | */ | 12 | */ |
13 | 13 | ||
14 | #include <linux/config.h> | ||
15 | #include <linux/module.h> | 14 | #include <linux/module.h> |
16 | #include <linux/netfilter.h> | 15 | #include <linux/netfilter.h> |
17 | #include <linux/ip.h> | 16 | #include <linux/ip.h> |
diff --git a/net/ipv4/netfilter/ip_conntrack_helper_pptp.c b/net/ipv4/netfilter/ip_conntrack_helper_pptp.c index 8ccfe17bb253..b020a33e65e9 100644 --- a/net/ipv4/netfilter/ip_conntrack_helper_pptp.c +++ b/net/ipv4/netfilter/ip_conntrack_helper_pptp.c | |||
@@ -46,7 +46,6 @@ | |||
46 | * | 46 | * |
47 | */ | 47 | */ |
48 | 48 | ||
49 | #include <linux/config.h> | ||
50 | #include <linux/module.h> | 49 | #include <linux/module.h> |
51 | #include <linux/netfilter.h> | 50 | #include <linux/netfilter.h> |
52 | #include <linux/ip.h> | 51 | #include <linux/ip.h> |
diff --git a/net/ipv4/netfilter/ip_conntrack_irc.c b/net/ipv4/netfilter/ip_conntrack_irc.c index a2ac5ce544b2..44889075f3b2 100644 --- a/net/ipv4/netfilter/ip_conntrack_irc.c +++ b/net/ipv4/netfilter/ip_conntrack_irc.c | |||
@@ -22,7 +22,6 @@ | |||
22 | * | 22 | * |
23 | */ | 23 | */ |
24 | 24 | ||
25 | #include <linux/config.h> | ||
26 | #include <linux/module.h> | 25 | #include <linux/module.h> |
27 | #include <linux/netfilter.h> | 26 | #include <linux/netfilter.h> |
28 | #include <linux/ip.h> | 27 | #include <linux/ip.h> |
diff --git a/net/ipv4/netfilter/ip_conntrack_proto_gre.c b/net/ipv4/netfilter/ip_conntrack_proto_gre.c index 21ee124c0463..4ee016c427b4 100644 --- a/net/ipv4/netfilter/ip_conntrack_proto_gre.c +++ b/net/ipv4/netfilter/ip_conntrack_proto_gre.c | |||
@@ -23,7 +23,6 @@ | |||
23 | * | 23 | * |
24 | */ | 24 | */ |
25 | 25 | ||
26 | #include <linux/config.h> | ||
27 | #include <linux/module.h> | 26 | #include <linux/module.h> |
28 | #include <linux/types.h> | 27 | #include <linux/types.h> |
29 | #include <linux/timer.h> | 28 | #include <linux/timer.h> |
diff --git a/net/ipv4/netfilter/ip_conntrack_proto_sctp.c b/net/ipv4/netfilter/ip_conntrack_proto_sctp.c index 0416073c5600..2d3612cd5f18 100644 --- a/net/ipv4/netfilter/ip_conntrack_proto_sctp.c +++ b/net/ipv4/netfilter/ip_conntrack_proto_sctp.c | |||
@@ -254,7 +254,7 @@ static int do_basic_checks(struct ip_conntrack *conntrack, | |||
254 | } | 254 | } |
255 | 255 | ||
256 | DEBUGP("Basic checks passed\n"); | 256 | DEBUGP("Basic checks passed\n"); |
257 | return 0; | 257 | return count == 0; |
258 | } | 258 | } |
259 | 259 | ||
260 | static int new_state(enum ip_conntrack_dir dir, | 260 | static int new_state(enum ip_conntrack_dir dir, |
diff --git a/net/ipv4/netfilter/ip_conntrack_proto_tcp.c b/net/ipv4/netfilter/ip_conntrack_proto_tcp.c index c5c2ce5cdeb8..fb920e76ec10 100644 --- a/net/ipv4/netfilter/ip_conntrack_proto_tcp.c +++ b/net/ipv4/netfilter/ip_conntrack_proto_tcp.c | |||
@@ -19,7 +19,6 @@ | |||
19 | * version 2.2 | 19 | * version 2.2 |
20 | */ | 20 | */ |
21 | 21 | ||
22 | #include <linux/config.h> | ||
23 | #include <linux/types.h> | 22 | #include <linux/types.h> |
24 | #include <linux/sched.h> | 23 | #include <linux/sched.h> |
25 | #include <linux/timer.h> | 24 | #include <linux/timer.h> |
diff --git a/net/ipv4/netfilter/ip_conntrack_standalone.c b/net/ipv4/netfilter/ip_conntrack_standalone.c index 88445aac3f28..7bd3c22003a2 100644 --- a/net/ipv4/netfilter/ip_conntrack_standalone.c +++ b/net/ipv4/netfilter/ip_conntrack_standalone.c | |||
@@ -12,7 +12,6 @@ | |||
12 | * published by the Free Software Foundation. | 12 | * published by the Free Software Foundation. |
13 | */ | 13 | */ |
14 | 14 | ||
15 | #include <linux/config.h> | ||
16 | #include <linux/types.h> | 15 | #include <linux/types.h> |
17 | #include <linux/ip.h> | 16 | #include <linux/ip.h> |
18 | #include <linux/netfilter.h> | 17 | #include <linux/netfilter.h> |
diff --git a/net/ipv4/netfilter/ip_nat_helper.c b/net/ipv4/netfilter/ip_nat_helper.c index 5d506e0564d5..cbcaa45370ae 100644 --- a/net/ipv4/netfilter/ip_nat_helper.c +++ b/net/ipv4/netfilter/ip_nat_helper.c | |||
@@ -15,7 +15,6 @@ | |||
15 | * - make ip_nat_resize_packet more generic (TCP and UDP) | 15 | * - make ip_nat_resize_packet more generic (TCP and UDP) |
16 | * - add ip_nat_mangle_udp_packet | 16 | * - add ip_nat_mangle_udp_packet |
17 | */ | 17 | */ |
18 | #include <linux/config.h> | ||
19 | #include <linux/module.h> | 18 | #include <linux/module.h> |
20 | #include <linux/kmod.h> | 19 | #include <linux/kmod.h> |
21 | #include <linux/types.h> | 20 | #include <linux/types.h> |
diff --git a/net/ipv4/netfilter/ip_nat_helper_pptp.c b/net/ipv4/netfilter/ip_nat_helper_pptp.c index f3977726ff09..1d149964dc38 100644 --- a/net/ipv4/netfilter/ip_nat_helper_pptp.c +++ b/net/ipv4/netfilter/ip_nat_helper_pptp.c | |||
@@ -35,7 +35,6 @@ | |||
35 | * | 35 | * |
36 | */ | 36 | */ |
37 | 37 | ||
38 | #include <linux/config.h> | ||
39 | #include <linux/module.h> | 38 | #include <linux/module.h> |
40 | #include <linux/ip.h> | 39 | #include <linux/ip.h> |
41 | #include <linux/tcp.h> | 40 | #include <linux/tcp.h> |
diff --git a/net/ipv4/netfilter/ip_nat_proto_gre.c b/net/ipv4/netfilter/ip_nat_proto_gre.c index 96ceabaec402..38acfdf540eb 100644 --- a/net/ipv4/netfilter/ip_nat_proto_gre.c +++ b/net/ipv4/netfilter/ip_nat_proto_gre.c | |||
@@ -23,7 +23,6 @@ | |||
23 | * | 23 | * |
24 | */ | 24 | */ |
25 | 25 | ||
26 | #include <linux/config.h> | ||
27 | #include <linux/module.h> | 26 | #include <linux/module.h> |
28 | #include <linux/ip.h> | 27 | #include <linux/ip.h> |
29 | #include <linux/netfilter_ipv4/ip_nat.h> | 28 | #include <linux/netfilter_ipv4/ip_nat.h> |
diff --git a/net/ipv4/netfilter/ip_nat_snmp_basic.c b/net/ipv4/netfilter/ip_nat_snmp_basic.c index d20d557f915a..0b1b416759cc 100644 --- a/net/ipv4/netfilter/ip_nat_snmp_basic.c +++ b/net/ipv4/netfilter/ip_nat_snmp_basic.c | |||
@@ -43,7 +43,6 @@ | |||
43 | * 2000-08-06: Convert to new helper API (Harald Welte). | 43 | * 2000-08-06: Convert to new helper API (Harald Welte). |
44 | * | 44 | * |
45 | */ | 45 | */ |
46 | #include <linux/config.h> | ||
47 | #include <linux/in.h> | 46 | #include <linux/in.h> |
48 | #include <linux/module.h> | 47 | #include <linux/module.h> |
49 | #include <linux/types.h> | 48 | #include <linux/types.h> |
diff --git a/net/ipv4/netfilter/ip_nat_standalone.c b/net/ipv4/netfilter/ip_nat_standalone.c index 67e676783da9..17de077a7901 100644 --- a/net/ipv4/netfilter/ip_nat_standalone.c +++ b/net/ipv4/netfilter/ip_nat_standalone.c | |||
@@ -18,7 +18,6 @@ | |||
18 | * - now capable of multiple expectations for one master | 18 | * - now capable of multiple expectations for one master |
19 | * */ | 19 | * */ |
20 | 20 | ||
21 | #include <linux/config.h> | ||
22 | #include <linux/types.h> | 21 | #include <linux/types.h> |
23 | #include <linux/icmp.h> | 22 | #include <linux/icmp.h> |
24 | #include <linux/ip.h> | 23 | #include <linux/ip.h> |
diff --git a/net/ipv4/netfilter/ip_queue.c b/net/ipv4/netfilter/ip_queue.c index b93f0494362f..198ac36db861 100644 --- a/net/ipv4/netfilter/ip_queue.c +++ b/net/ipv4/netfilter/ip_queue.c | |||
@@ -457,11 +457,19 @@ dev_cmp(struct ipq_queue_entry *entry, unsigned long ifindex) | |||
457 | if (entry->info->indev) | 457 | if (entry->info->indev) |
458 | if (entry->info->indev->ifindex == ifindex) | 458 | if (entry->info->indev->ifindex == ifindex) |
459 | return 1; | 459 | return 1; |
460 | |||
461 | if (entry->info->outdev) | 460 | if (entry->info->outdev) |
462 | if (entry->info->outdev->ifindex == ifindex) | 461 | if (entry->info->outdev->ifindex == ifindex) |
463 | return 1; | 462 | return 1; |
464 | 463 | #ifdef CONFIG_BRIDGE_NETFILTER | |
464 | if (entry->skb->nf_bridge) { | ||
465 | if (entry->skb->nf_bridge->physindev && | ||
466 | entry->skb->nf_bridge->physindev->ifindex == ifindex) | ||
467 | return 1; | ||
468 | if (entry->skb->nf_bridge->physoutdev && | ||
469 | entry->skb->nf_bridge->physoutdev->ifindex == ifindex) | ||
470 | return 1; | ||
471 | } | ||
472 | #endif | ||
465 | return 0; | 473 | return 0; |
466 | } | 474 | } |
467 | 475 | ||
@@ -507,7 +515,7 @@ ipq_rcv_skb(struct sk_buff *skb) | |||
507 | if (type <= IPQM_BASE) | 515 | if (type <= IPQM_BASE) |
508 | return; | 516 | return; |
509 | 517 | ||
510 | if (security_netlink_recv(skb)) | 518 | if (security_netlink_recv(skb, CAP_NET_ADMIN)) |
511 | RCV_SKB_FAIL(-EPERM); | 519 | RCV_SKB_FAIL(-EPERM); |
512 | 520 | ||
513 | write_lock_bh(&queue_lock); | 521 | write_lock_bh(&queue_lock); |
diff --git a/net/ipv4/netfilter/ip_tables.c b/net/ipv4/netfilter/ip_tables.c index cee3397ec277..fc5bdd5eb7d3 100644 --- a/net/ipv4/netfilter/ip_tables.c +++ b/net/ipv4/netfilter/ip_tables.c | |||
@@ -14,7 +14,6 @@ | |||
14 | * 08 Oct 2005 Harald Welte <lafore@netfilter.org> | 14 | * 08 Oct 2005 Harald Welte <lafore@netfilter.org> |
15 | * - Generalize into "x_tables" layer and "{ip,ip6,arp}_tables" | 15 | * - Generalize into "x_tables" layer and "{ip,ip6,arp}_tables" |
16 | */ | 16 | */ |
17 | #include <linux/config.h> | ||
18 | #include <linux/cache.h> | 17 | #include <linux/cache.h> |
19 | #include <linux/capability.h> | 18 | #include <linux/capability.h> |
20 | #include <linux/skbuff.h> | 19 | #include <linux/skbuff.h> |
@@ -1761,7 +1760,7 @@ translate_compat_table(const char *name, | |||
1761 | goto free_newinfo; | 1760 | goto free_newinfo; |
1762 | 1761 | ||
1763 | /* And one copy for every other CPU */ | 1762 | /* And one copy for every other CPU */ |
1764 | for_each_cpu(i) | 1763 | for_each_possible_cpu(i) |
1765 | if (newinfo->entries[i] && newinfo->entries[i] != entry1) | 1764 | if (newinfo->entries[i] && newinfo->entries[i] != entry1) |
1766 | memcpy(newinfo->entries[i], entry1, newinfo->size); | 1765 | memcpy(newinfo->entries[i], entry1, newinfo->size); |
1767 | 1766 | ||
@@ -2113,7 +2112,8 @@ int ipt_register_table(struct xt_table *table, const struct ipt_replace *repl) | |||
2113 | return ret; | 2112 | return ret; |
2114 | } | 2113 | } |
2115 | 2114 | ||
2116 | if (xt_register_table(table, &bootstrap, newinfo) != 0) { | 2115 | ret = xt_register_table(table, &bootstrap, newinfo); |
2116 | if (ret != 0) { | ||
2117 | xt_free_table_info(newinfo); | 2117 | xt_free_table_info(newinfo); |
2118 | return ret; | 2118 | return ret; |
2119 | } | 2119 | } |
diff --git a/net/ipv4/netfilter/ipt_CLUSTERIP.c b/net/ipv4/netfilter/ipt_CLUSTERIP.c index dbc83c5d7aa6..cbffeae3f565 100644 --- a/net/ipv4/netfilter/ipt_CLUSTERIP.c +++ b/net/ipv4/netfilter/ipt_CLUSTERIP.c | |||
@@ -10,7 +10,6 @@ | |||
10 | * | 10 | * |
11 | */ | 11 | */ |
12 | #include <linux/module.h> | 12 | #include <linux/module.h> |
13 | #include <linux/config.h> | ||
14 | #include <linux/proc_fs.h> | 13 | #include <linux/proc_fs.h> |
15 | #include <linux/jhash.h> | 14 | #include <linux/jhash.h> |
16 | #include <linux/bitops.h> | 15 | #include <linux/bitops.h> |
diff --git a/net/ipv4/netfilter/ipt_MASQUERADE.c b/net/ipv4/netfilter/ipt_MASQUERADE.c index 8b3e7f99b861..ebd94f2abf0d 100644 --- a/net/ipv4/netfilter/ipt_MASQUERADE.c +++ b/net/ipv4/netfilter/ipt_MASQUERADE.c | |||
@@ -9,7 +9,6 @@ | |||
9 | * published by the Free Software Foundation. | 9 | * published by the Free Software Foundation. |
10 | */ | 10 | */ |
11 | 11 | ||
12 | #include <linux/config.h> | ||
13 | #include <linux/types.h> | 12 | #include <linux/types.h> |
14 | #include <linux/inetdevice.h> | 13 | #include <linux/inetdevice.h> |
15 | #include <linux/ip.h> | 14 | #include <linux/ip.h> |
diff --git a/net/ipv4/netfilter/ipt_NETMAP.c b/net/ipv4/netfilter/ipt_NETMAP.c index 2fcf1075b027..736c4b5a86a7 100644 --- a/net/ipv4/netfilter/ipt_NETMAP.c +++ b/net/ipv4/netfilter/ipt_NETMAP.c | |||
@@ -10,7 +10,6 @@ | |||
10 | * published by the Free Software Foundation. | 10 | * published by the Free Software Foundation. |
11 | */ | 11 | */ |
12 | 12 | ||
13 | #include <linux/config.h> | ||
14 | #include <linux/ip.h> | 13 | #include <linux/ip.h> |
15 | #include <linux/module.h> | 14 | #include <linux/module.h> |
16 | #include <linux/netdevice.h> | 15 | #include <linux/netdevice.h> |
diff --git a/net/ipv4/netfilter/ipt_REJECT.c b/net/ipv4/netfilter/ipt_REJECT.c index 431a3ce6f7b7..269bc2067cb8 100644 --- a/net/ipv4/netfilter/ipt_REJECT.c +++ b/net/ipv4/netfilter/ipt_REJECT.c | |||
@@ -12,7 +12,6 @@ | |||
12 | * published by the Free Software Foundation. | 12 | * published by the Free Software Foundation. |
13 | */ | 13 | */ |
14 | 14 | ||
15 | #include <linux/config.h> | ||
16 | #include <linux/module.h> | 15 | #include <linux/module.h> |
17 | #include <linux/skbuff.h> | 16 | #include <linux/skbuff.h> |
18 | #include <linux/ip.h> | 17 | #include <linux/ip.h> |
diff --git a/net/ipv4/netfilter/ipt_ULOG.c b/net/ipv4/netfilter/ipt_ULOG.c index c84cc03389d8..d7dd7fe7051c 100644 --- a/net/ipv4/netfilter/ipt_ULOG.c +++ b/net/ipv4/netfilter/ipt_ULOG.c | |||
@@ -47,7 +47,6 @@ | |||
47 | */ | 47 | */ |
48 | 48 | ||
49 | #include <linux/module.h> | 49 | #include <linux/module.h> |
50 | #include <linux/config.h> | ||
51 | #include <linux/spinlock.h> | 50 | #include <linux/spinlock.h> |
52 | #include <linux/socket.h> | 51 | #include <linux/socket.h> |
53 | #include <linux/skbuff.h> | 52 | #include <linux/skbuff.h> |
diff --git a/net/ipv4/netfilter/iptable_mangle.c b/net/ipv4/netfilter/iptable_mangle.c index 397b95cc026b..4e7998beda63 100644 --- a/net/ipv4/netfilter/iptable_mangle.c +++ b/net/ipv4/netfilter/iptable_mangle.c | |||
@@ -10,7 +10,6 @@ | |||
10 | * | 10 | * |
11 | * Extended to all five netfilter hooks by Brad Chapman & Harald Welte | 11 | * Extended to all five netfilter hooks by Brad Chapman & Harald Welte |
12 | */ | 12 | */ |
13 | #include <linux/config.h> | ||
14 | #include <linux/module.h> | 13 | #include <linux/module.h> |
15 | #include <linux/netfilter_ipv4/ip_tables.h> | 14 | #include <linux/netfilter_ipv4/ip_tables.h> |
16 | #include <linux/netdevice.h> | 15 | #include <linux/netdevice.h> |
diff --git a/net/ipv4/netfilter/nf_conntrack_l3proto_ipv4.c b/net/ipv4/netfilter/nf_conntrack_l3proto_ipv4.c index 8cc8e1b36778..0af803df82b0 100644 --- a/net/ipv4/netfilter/nf_conntrack_l3proto_ipv4.c +++ b/net/ipv4/netfilter/nf_conntrack_l3proto_ipv4.c | |||
@@ -14,7 +14,6 @@ | |||
14 | * Derived from net/ipv4/netfilter/ip_conntrack_standalone.c | 14 | * Derived from net/ipv4/netfilter/ip_conntrack_standalone.c |
15 | */ | 15 | */ |
16 | 16 | ||
17 | #include <linux/config.h> | ||
18 | #include <linux/types.h> | 17 | #include <linux/types.h> |
19 | #include <linux/ip.h> | 18 | #include <linux/ip.h> |
20 | #include <linux/netfilter.h> | 19 | #include <linux/netfilter.h> |
diff --git a/net/ipv4/protocol.c b/net/ipv4/protocol.c index 291831e792af..05f5114828ea 100644 --- a/net/ipv4/protocol.c +++ b/net/ipv4/protocol.c | |||
@@ -32,7 +32,6 @@ | |||
32 | #include <linux/kernel.h> | 32 | #include <linux/kernel.h> |
33 | #include <linux/sched.h> | 33 | #include <linux/sched.h> |
34 | #include <linux/string.h> | 34 | #include <linux/string.h> |
35 | #include <linux/config.h> | ||
36 | #include <linux/socket.h> | 35 | #include <linux/socket.h> |
37 | #include <linux/in.h> | 36 | #include <linux/in.h> |
38 | #include <linux/inet.h> | 37 | #include <linux/inet.h> |
diff --git a/net/ipv4/route.c b/net/ipv4/route.c index cc9423de7311..da44fabf4dc5 100644 --- a/net/ipv4/route.c +++ b/net/ipv4/route.c | |||
@@ -64,7 +64,6 @@ | |||
64 | * 2 of the License, or (at your option) any later version. | 64 | * 2 of the License, or (at your option) any later version. |
65 | */ | 65 | */ |
66 | 66 | ||
67 | #include <linux/config.h> | ||
68 | #include <linux/module.h> | 67 | #include <linux/module.h> |
69 | #include <asm/uaccess.h> | 68 | #include <asm/uaccess.h> |
70 | #include <asm/system.h> | 69 | #include <asm/system.h> |
@@ -244,7 +243,7 @@ static unsigned int rt_hash_rnd; | |||
244 | 243 | ||
245 | static DEFINE_PER_CPU(struct rt_cache_stat, rt_cache_stat); | 244 | static DEFINE_PER_CPU(struct rt_cache_stat, rt_cache_stat); |
246 | #define RT_CACHE_STAT_INC(field) \ | 245 | #define RT_CACHE_STAT_INC(field) \ |
247 | (per_cpu(rt_cache_stat, raw_smp_processor_id()).field++) | 246 | (__raw_get_cpu_var(rt_cache_stat).field++) |
248 | 247 | ||
249 | static int rt_intern_hash(unsigned hash, struct rtable *rth, | 248 | static int rt_intern_hash(unsigned hash, struct rtable *rth, |
250 | struct rtable **res); | 249 | struct rtable **res); |
diff --git a/net/ipv4/sysctl_net_ipv4.c b/net/ipv4/sysctl_net_ipv4.c index ce4cd5f35511..70cea9d08a38 100644 --- a/net/ipv4/sysctl_net_ipv4.c +++ b/net/ipv4/sysctl_net_ipv4.c | |||
@@ -10,7 +10,6 @@ | |||
10 | #include <linux/mm.h> | 10 | #include <linux/mm.h> |
11 | #include <linux/module.h> | 11 | #include <linux/module.h> |
12 | #include <linux/sysctl.h> | 12 | #include <linux/sysctl.h> |
13 | #include <linux/config.h> | ||
14 | #include <linux/igmp.h> | 13 | #include <linux/igmp.h> |
15 | #include <linux/inetdevice.h> | 14 | #include <linux/inetdevice.h> |
16 | #include <net/snmp.h> | 15 | #include <net/snmp.h> |
diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c index 74998f250071..804458712d88 100644 --- a/net/ipv4/tcp.c +++ b/net/ipv4/tcp.c | |||
@@ -247,7 +247,6 @@ | |||
247 | * TCP_CLOSE socket is finished | 247 | * TCP_CLOSE socket is finished |
248 | */ | 248 | */ |
249 | 249 | ||
250 | #include <linux/config.h> | ||
251 | #include <linux/module.h> | 250 | #include <linux/module.h> |
252 | #include <linux/types.h> | 251 | #include <linux/types.h> |
253 | #include <linux/fcntl.h> | 252 | #include <linux/fcntl.h> |
@@ -258,6 +257,7 @@ | |||
258 | #include <linux/random.h> | 257 | #include <linux/random.h> |
259 | #include <linux/bootmem.h> | 258 | #include <linux/bootmem.h> |
260 | #include <linux/cache.h> | 259 | #include <linux/cache.h> |
260 | #include <linux/err.h> | ||
261 | 261 | ||
262 | #include <net/icmp.h> | 262 | #include <net/icmp.h> |
263 | #include <net/tcp.h> | 263 | #include <net/tcp.h> |
@@ -571,7 +571,7 @@ new_segment: | |||
571 | skb->ip_summed = CHECKSUM_HW; | 571 | skb->ip_summed = CHECKSUM_HW; |
572 | tp->write_seq += copy; | 572 | tp->write_seq += copy; |
573 | TCP_SKB_CB(skb)->end_seq += copy; | 573 | TCP_SKB_CB(skb)->end_seq += copy; |
574 | skb_shinfo(skb)->tso_segs = 0; | 574 | skb_shinfo(skb)->gso_segs = 0; |
575 | 575 | ||
576 | if (!copied) | 576 | if (!copied) |
577 | TCP_SKB_CB(skb)->flags &= ~TCPCB_FLAG_PSH; | 577 | TCP_SKB_CB(skb)->flags &= ~TCPCB_FLAG_PSH; |
@@ -642,7 +642,7 @@ static inline int select_size(struct sock *sk, struct tcp_sock *tp) | |||
642 | int tmp = tp->mss_cache; | 642 | int tmp = tp->mss_cache; |
643 | 643 | ||
644 | if (sk->sk_route_caps & NETIF_F_SG) { | 644 | if (sk->sk_route_caps & NETIF_F_SG) { |
645 | if (sk->sk_route_caps & NETIF_F_TSO) | 645 | if (sk_can_gso(sk)) |
646 | tmp = 0; | 646 | tmp = 0; |
647 | else { | 647 | else { |
648 | int pgbreak = SKB_MAX_HEAD(MAX_TCP_HEADER); | 648 | int pgbreak = SKB_MAX_HEAD(MAX_TCP_HEADER); |
@@ -818,7 +818,7 @@ new_segment: | |||
818 | 818 | ||
819 | tp->write_seq += copy; | 819 | tp->write_seq += copy; |
820 | TCP_SKB_CB(skb)->end_seq += copy; | 820 | TCP_SKB_CB(skb)->end_seq += copy; |
821 | skb_shinfo(skb)->tso_segs = 0; | 821 | skb_shinfo(skb)->gso_segs = 0; |
822 | 822 | ||
823 | from += copy; | 823 | from += copy; |
824 | copied += copy; | 824 | copied += copy; |
@@ -2144,6 +2144,78 @@ int compat_tcp_getsockopt(struct sock *sk, int level, int optname, | |||
2144 | EXPORT_SYMBOL(compat_tcp_getsockopt); | 2144 | EXPORT_SYMBOL(compat_tcp_getsockopt); |
2145 | #endif | 2145 | #endif |
2146 | 2146 | ||
2147 | struct sk_buff *tcp_tso_segment(struct sk_buff *skb, int features) | ||
2148 | { | ||
2149 | struct sk_buff *segs = ERR_PTR(-EINVAL); | ||
2150 | struct tcphdr *th; | ||
2151 | unsigned thlen; | ||
2152 | unsigned int seq; | ||
2153 | unsigned int delta; | ||
2154 | unsigned int oldlen; | ||
2155 | unsigned int len; | ||
2156 | |||
2157 | if (!pskb_may_pull(skb, sizeof(*th))) | ||
2158 | goto out; | ||
2159 | |||
2160 | th = skb->h.th; | ||
2161 | thlen = th->doff * 4; | ||
2162 | if (thlen < sizeof(*th)) | ||
2163 | goto out; | ||
2164 | |||
2165 | if (!pskb_may_pull(skb, thlen)) | ||
2166 | goto out; | ||
2167 | |||
2168 | oldlen = (u16)~skb->len; | ||
2169 | __skb_pull(skb, thlen); | ||
2170 | |||
2171 | if (skb_gso_ok(skb, features | NETIF_F_GSO_ROBUST)) { | ||
2172 | /* Packet is from an untrusted source, reset gso_segs. */ | ||
2173 | int mss = skb_shinfo(skb)->gso_size; | ||
2174 | |||
2175 | skb_shinfo(skb)->gso_segs = (skb->len + mss - 1) / mss; | ||
2176 | |||
2177 | segs = NULL; | ||
2178 | goto out; | ||
2179 | } | ||
2180 | |||
2181 | segs = skb_segment(skb, features); | ||
2182 | if (IS_ERR(segs)) | ||
2183 | goto out; | ||
2184 | |||
2185 | len = skb_shinfo(skb)->gso_size; | ||
2186 | delta = htonl(oldlen + (thlen + len)); | ||
2187 | |||
2188 | skb = segs; | ||
2189 | th = skb->h.th; | ||
2190 | seq = ntohl(th->seq); | ||
2191 | |||
2192 | do { | ||
2193 | th->fin = th->psh = 0; | ||
2194 | |||
2195 | th->check = ~csum_fold(th->check + delta); | ||
2196 | if (skb->ip_summed != CHECKSUM_HW) | ||
2197 | th->check = csum_fold(csum_partial(skb->h.raw, thlen, | ||
2198 | skb->csum)); | ||
2199 | |||
2200 | seq += len; | ||
2201 | skb = skb->next; | ||
2202 | th = skb->h.th; | ||
2203 | |||
2204 | th->seq = htonl(seq); | ||
2205 | th->cwr = 0; | ||
2206 | } while (skb->next); | ||
2207 | |||
2208 | delta = htonl(oldlen + (skb->tail - skb->h.raw) + skb->data_len); | ||
2209 | th->check = ~csum_fold(th->check + delta); | ||
2210 | if (skb->ip_summed != CHECKSUM_HW) | ||
2211 | th->check = csum_fold(csum_partial(skb->h.raw, thlen, | ||
2212 | skb->csum)); | ||
2213 | |||
2214 | out: | ||
2215 | return segs; | ||
2216 | } | ||
2217 | EXPORT_SYMBOL(tcp_tso_segment); | ||
2218 | |||
2147 | extern void __skb_cb_too_small_for_tcp(int, int); | 2219 | extern void __skb_cb_too_small_for_tcp(int, int); |
2148 | extern struct tcp_congestion_ops tcp_reno; | 2220 | extern struct tcp_congestion_ops tcp_reno; |
2149 | 2221 | ||
diff --git a/net/ipv4/tcp_bic.c b/net/ipv4/tcp_bic.c index b2d9021ad22b..b0134ab08379 100644 --- a/net/ipv4/tcp_bic.c +++ b/net/ipv4/tcp_bic.c | |||
@@ -12,7 +12,6 @@ | |||
12 | * this behaves the same as the original Reno. | 12 | * this behaves the same as the original Reno. |
13 | */ | 13 | */ |
14 | 14 | ||
15 | #include <linux/config.h> | ||
16 | #include <linux/mm.h> | 15 | #include <linux/mm.h> |
17 | #include <linux/module.h> | 16 | #include <linux/module.h> |
18 | #include <net/tcp.h> | 17 | #include <net/tcp.h> |
diff --git a/net/ipv4/tcp_cong.c b/net/ipv4/tcp_cong.c index 857eefc52aab..5765f9d03174 100644 --- a/net/ipv4/tcp_cong.c +++ b/net/ipv4/tcp_cong.c | |||
@@ -6,7 +6,6 @@ | |||
6 | * Copyright (C) 2005 Stephen Hemminger <shemminger@osdl.org> | 6 | * Copyright (C) 2005 Stephen Hemminger <shemminger@osdl.org> |
7 | */ | 7 | */ |
8 | 8 | ||
9 | #include <linux/config.h> | ||
10 | #include <linux/module.h> | 9 | #include <linux/module.h> |
11 | #include <linux/mm.h> | 10 | #include <linux/mm.h> |
12 | #include <linux/types.h> | 11 | #include <linux/types.h> |
diff --git a/net/ipv4/tcp_cubic.c b/net/ipv4/tcp_cubic.c index 78b7a6b9e4de..2be27980ca78 100644 --- a/net/ipv4/tcp_cubic.c +++ b/net/ipv4/tcp_cubic.c | |||
@@ -12,7 +12,6 @@ | |||
12 | * this behaves the same as the original Reno. | 12 | * this behaves the same as the original Reno. |
13 | */ | 13 | */ |
14 | 14 | ||
15 | #include <linux/config.h> | ||
16 | #include <linux/mm.h> | 15 | #include <linux/mm.h> |
17 | #include <linux/module.h> | 16 | #include <linux/module.h> |
18 | #include <net/tcp.h> | 17 | #include <net/tcp.h> |
diff --git a/net/ipv4/tcp_diag.c b/net/ipv4/tcp_diag.c index c148c1081880..57c5f0b10e6c 100644 --- a/net/ipv4/tcp_diag.c +++ b/net/ipv4/tcp_diag.c | |||
@@ -11,7 +11,6 @@ | |||
11 | * 2 of the License, or (at your option) any later version. | 11 | * 2 of the License, or (at your option) any later version. |
12 | */ | 12 | */ |
13 | 13 | ||
14 | #include <linux/config.h> | ||
15 | 14 | ||
16 | #include <linux/module.h> | 15 | #include <linux/module.h> |
17 | #include <linux/inet_diag.h> | 16 | #include <linux/inet_diag.h> |
@@ -26,7 +25,10 @@ static void tcp_diag_get_info(struct sock *sk, struct inet_diag_msg *r, | |||
26 | const struct tcp_sock *tp = tcp_sk(sk); | 25 | const struct tcp_sock *tp = tcp_sk(sk); |
27 | struct tcp_info *info = _info; | 26 | struct tcp_info *info = _info; |
28 | 27 | ||
29 | r->idiag_rqueue = tp->rcv_nxt - tp->copied_seq; | 28 | if (sk->sk_state == TCP_LISTEN) |
29 | r->idiag_rqueue = sk->sk_ack_backlog; | ||
30 | else | ||
31 | r->idiag_rqueue = tp->rcv_nxt - tp->copied_seq; | ||
30 | r->idiag_wqueue = tp->write_seq - tp->snd_una; | 32 | r->idiag_wqueue = tp->write_seq - tp->snd_una; |
31 | if (info != NULL) | 33 | if (info != NULL) |
32 | tcp_get_info(sk, info); | 34 | tcp_get_info(sk, info); |
diff --git a/net/ipv4/tcp_highspeed.c b/net/ipv4/tcp_highspeed.c index 1120245b2373..aaa1538c0692 100644 --- a/net/ipv4/tcp_highspeed.c +++ b/net/ipv4/tcp_highspeed.c | |||
@@ -6,7 +6,6 @@ | |||
6 | * John Heffner <jheffner@psc.edu> | 6 | * John Heffner <jheffner@psc.edu> |
7 | */ | 7 | */ |
8 | 8 | ||
9 | #include <linux/config.h> | ||
10 | #include <linux/module.h> | 9 | #include <linux/module.h> |
11 | #include <net/tcp.h> | 10 | #include <net/tcp.h> |
12 | 11 | ||
diff --git a/net/ipv4/tcp_htcp.c b/net/ipv4/tcp_htcp.c index 3d92c1859267..6edfe5e4510e 100644 --- a/net/ipv4/tcp_htcp.c +++ b/net/ipv4/tcp_htcp.c | |||
@@ -6,7 +6,6 @@ | |||
6 | * http://www.hamilton.ie/net/htcp3.pdf | 6 | * http://www.hamilton.ie/net/htcp3.pdf |
7 | */ | 7 | */ |
8 | 8 | ||
9 | #include <linux/config.h> | ||
10 | #include <linux/mm.h> | 9 | #include <linux/mm.h> |
11 | #include <linux/module.h> | 10 | #include <linux/module.h> |
12 | #include <net/tcp.h> | 11 | #include <net/tcp.h> |
diff --git a/net/ipv4/tcp_hybla.c b/net/ipv4/tcp_hybla.c index 40dbb3877510..7406e0c5fb8e 100644 --- a/net/ipv4/tcp_hybla.c +++ b/net/ipv4/tcp_hybla.c | |||
@@ -10,7 +10,6 @@ | |||
10 | * root at danielinux.net | 10 | * root at danielinux.net |
11 | */ | 11 | */ |
12 | 12 | ||
13 | #include <linux/config.h> | ||
14 | #include <linux/module.h> | 13 | #include <linux/module.h> |
15 | #include <net/tcp.h> | 14 | #include <net/tcp.h> |
16 | 15 | ||
diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c index e08245bdda3a..738dad9f7d49 100644 --- a/net/ipv4/tcp_input.c +++ b/net/ipv4/tcp_input.c | |||
@@ -63,7 +63,6 @@ | |||
63 | * Pasi Sarolahti: F-RTO for dealing with spurious RTOs | 63 | * Pasi Sarolahti: F-RTO for dealing with spurious RTOs |
64 | */ | 64 | */ |
65 | 65 | ||
66 | #include <linux/config.h> | ||
67 | #include <linux/mm.h> | 66 | #include <linux/mm.h> |
68 | #include <linux/module.h> | 67 | #include <linux/module.h> |
69 | #include <linux/sysctl.h> | 68 | #include <linux/sysctl.h> |
@@ -1073,7 +1072,7 @@ tcp_sacktag_write_queue(struct sock *sk, struct sk_buff *ack_skb, u32 prior_snd_ | |||
1073 | else | 1072 | else |
1074 | pkt_len = (end_seq - | 1073 | pkt_len = (end_seq - |
1075 | TCP_SKB_CB(skb)->seq); | 1074 | TCP_SKB_CB(skb)->seq); |
1076 | if (tcp_fragment(sk, skb, pkt_len, skb_shinfo(skb)->tso_size)) | 1075 | if (tcp_fragment(sk, skb, pkt_len, skb_shinfo(skb)->gso_size)) |
1077 | break; | 1076 | break; |
1078 | pcount = tcp_skb_pcount(skb); | 1077 | pcount = tcp_skb_pcount(skb); |
1079 | } | 1078 | } |
@@ -4178,8 +4177,6 @@ static int tcp_rcv_synsent_state_process(struct sock *sk, struct sk_buff *skb, | |||
4178 | */ | 4177 | */ |
4179 | 4178 | ||
4180 | TCP_ECN_rcv_synack(tp, th); | 4179 | TCP_ECN_rcv_synack(tp, th); |
4181 | if (tp->ecn_flags&TCP_ECN_OK) | ||
4182 | sock_set_flag(sk, SOCK_NO_LARGESEND); | ||
4183 | 4180 | ||
4184 | tp->snd_wl1 = TCP_SKB_CB(skb)->seq; | 4181 | tp->snd_wl1 = TCP_SKB_CB(skb)->seq; |
4185 | tcp_ack(sk, skb, FLAG_SLOWPATH); | 4182 | tcp_ack(sk, skb, FLAG_SLOWPATH); |
@@ -4322,8 +4319,6 @@ discard: | |||
4322 | tp->max_window = tp->snd_wnd; | 4319 | tp->max_window = tp->snd_wnd; |
4323 | 4320 | ||
4324 | TCP_ECN_rcv_syn(tp, th); | 4321 | TCP_ECN_rcv_syn(tp, th); |
4325 | if (tp->ecn_flags&TCP_ECN_OK) | ||
4326 | sock_set_flag(sk, SOCK_NO_LARGESEND); | ||
4327 | 4322 | ||
4328 | tcp_mtup_init(sk); | 4323 | tcp_mtup_init(sk); |
4329 | tcp_sync_mss(sk, icsk->icsk_pmtu_cookie); | 4324 | tcp_sync_mss(sk, icsk->icsk_pmtu_cookie); |
diff --git a/net/ipv4/tcp_ipv4.c b/net/ipv4/tcp_ipv4.c index 25ecc6e2478b..8355b729fa95 100644 --- a/net/ipv4/tcp_ipv4.c +++ b/net/ipv4/tcp_ipv4.c | |||
@@ -52,7 +52,6 @@ | |||
52 | * a single port at the same time. | 52 | * a single port at the same time. |
53 | */ | 53 | */ |
54 | 54 | ||
55 | #include <linux/config.h> | ||
56 | 55 | ||
57 | #include <linux/types.h> | 56 | #include <linux/types.h> |
58 | #include <linux/fcntl.h> | 57 | #include <linux/fcntl.h> |
@@ -242,6 +241,7 @@ int tcp_v4_connect(struct sock *sk, struct sockaddr *uaddr, int addr_len) | |||
242 | goto failure; | 241 | goto failure; |
243 | 242 | ||
244 | /* OK, now commit destination to socket. */ | 243 | /* OK, now commit destination to socket. */ |
244 | sk->sk_gso_type = SKB_GSO_TCPV4; | ||
245 | sk_setup_caps(sk, &rt->u.dst); | 245 | sk_setup_caps(sk, &rt->u.dst); |
246 | 246 | ||
247 | if (!tp->write_seq) | 247 | if (!tp->write_seq) |
@@ -884,6 +884,7 @@ struct sock *tcp_v4_syn_recv_sock(struct sock *sk, struct sk_buff *skb, | |||
884 | if (!newsk) | 884 | if (!newsk) |
885 | goto exit; | 885 | goto exit; |
886 | 886 | ||
887 | newsk->sk_gso_type = SKB_GSO_TCPV4; | ||
887 | sk_setup_caps(newsk, dst); | 888 | sk_setup_caps(newsk, dst); |
888 | 889 | ||
889 | newtp = tcp_sk(newsk); | 890 | newtp = tcp_sk(newsk); |
@@ -1726,7 +1727,8 @@ static void get_tcp4_sock(struct sock *sp, char *tmpbuf, int i) | |||
1726 | sprintf(tmpbuf, "%4d: %08X:%04X %08X:%04X %02X %08X:%08X %02X:%08lX " | 1727 | sprintf(tmpbuf, "%4d: %08X:%04X %08X:%04X %02X %08X:%08X %02X:%08lX " |
1727 | "%08X %5d %8d %lu %d %p %u %u %u %u %d", | 1728 | "%08X %5d %8d %lu %d %p %u %u %u %u %d", |
1728 | i, src, srcp, dest, destp, sp->sk_state, | 1729 | i, src, srcp, dest, destp, sp->sk_state, |
1729 | tp->write_seq - tp->snd_una, tp->rcv_nxt - tp->copied_seq, | 1730 | tp->write_seq - tp->snd_una, |
1731 | (sp->sk_state == TCP_LISTEN) ? sp->sk_ack_backlog : (tp->rcv_nxt - tp->copied_seq), | ||
1730 | timer_active, | 1732 | timer_active, |
1731 | jiffies_to_clock_t(timer_expires - jiffies), | 1733 | jiffies_to_clock_t(timer_expires - jiffies), |
1732 | icsk->icsk_retransmits, | 1734 | icsk->icsk_retransmits, |
diff --git a/net/ipv4/tcp_minisocks.c b/net/ipv4/tcp_minisocks.c index 2b9b7f6c7f7c..e0851697ad5e 100644 --- a/net/ipv4/tcp_minisocks.c +++ b/net/ipv4/tcp_minisocks.c | |||
@@ -20,7 +20,6 @@ | |||
20 | * Jorge Cwik, <jorge@laser.satlink.net> | 20 | * Jorge Cwik, <jorge@laser.satlink.net> |
21 | */ | 21 | */ |
22 | 22 | ||
23 | #include <linux/config.h> | ||
24 | #include <linux/mm.h> | 23 | #include <linux/mm.h> |
25 | #include <linux/module.h> | 24 | #include <linux/module.h> |
26 | #include <linux/sysctl.h> | 25 | #include <linux/sysctl.h> |
@@ -440,8 +439,6 @@ struct sock *tcp_create_openreq_child(struct sock *sk, struct request_sock *req, | |||
440 | newicsk->icsk_ack.last_seg_size = skb->len - newtp->tcp_header_len; | 439 | newicsk->icsk_ack.last_seg_size = skb->len - newtp->tcp_header_len; |
441 | newtp->rx_opt.mss_clamp = req->mss; | 440 | newtp->rx_opt.mss_clamp = req->mss; |
442 | TCP_ECN_openreq_child(newtp, req); | 441 | TCP_ECN_openreq_child(newtp, req); |
443 | if (newtp->ecn_flags&TCP_ECN_OK) | ||
444 | sock_set_flag(newsk, SOCK_NO_LARGESEND); | ||
445 | 442 | ||
446 | TCP_INC_STATS_BH(TCP_MIB_PASSIVEOPENS); | 443 | TCP_INC_STATS_BH(TCP_MIB_PASSIVEOPENS); |
447 | } | 444 | } |
diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c index 07bb5a2b375e..5c08ea20a18d 100644 --- a/net/ipv4/tcp_output.c +++ b/net/ipv4/tcp_output.c | |||
@@ -510,20 +510,21 @@ static void tcp_queue_skb(struct sock *sk, struct sk_buff *skb) | |||
510 | 510 | ||
511 | static void tcp_set_skb_tso_segs(struct sock *sk, struct sk_buff *skb, unsigned int mss_now) | 511 | static void tcp_set_skb_tso_segs(struct sock *sk, struct sk_buff *skb, unsigned int mss_now) |
512 | { | 512 | { |
513 | if (skb->len <= mss_now || | 513 | if (skb->len <= mss_now || !sk_can_gso(sk)) { |
514 | !(sk->sk_route_caps & NETIF_F_TSO)) { | ||
515 | /* Avoid the costly divide in the normal | 514 | /* Avoid the costly divide in the normal |
516 | * non-TSO case. | 515 | * non-TSO case. |
517 | */ | 516 | */ |
518 | skb_shinfo(skb)->tso_segs = 1; | 517 | skb_shinfo(skb)->gso_segs = 1; |
519 | skb_shinfo(skb)->tso_size = 0; | 518 | skb_shinfo(skb)->gso_size = 0; |
519 | skb_shinfo(skb)->gso_type = 0; | ||
520 | } else { | 520 | } else { |
521 | unsigned int factor; | 521 | unsigned int factor; |
522 | 522 | ||
523 | factor = skb->len + (mss_now - 1); | 523 | factor = skb->len + (mss_now - 1); |
524 | factor /= mss_now; | 524 | factor /= mss_now; |
525 | skb_shinfo(skb)->tso_segs = factor; | 525 | skb_shinfo(skb)->gso_segs = factor; |
526 | skb_shinfo(skb)->tso_size = mss_now; | 526 | skb_shinfo(skb)->gso_size = mss_now; |
527 | skb_shinfo(skb)->gso_type = sk->sk_gso_type; | ||
527 | } | 528 | } |
528 | } | 529 | } |
529 | 530 | ||
@@ -822,9 +823,7 @@ unsigned int tcp_current_mss(struct sock *sk, int large_allowed) | |||
822 | 823 | ||
823 | mss_now = tp->mss_cache; | 824 | mss_now = tp->mss_cache; |
824 | 825 | ||
825 | if (large_allowed && | 826 | if (large_allowed && sk_can_gso(sk) && !tp->urg_mode) |
826 | (sk->sk_route_caps & NETIF_F_TSO) && | ||
827 | !tp->urg_mode) | ||
828 | doing_tso = 1; | 827 | doing_tso = 1; |
829 | 828 | ||
830 | if (dst) { | 829 | if (dst) { |
@@ -914,7 +913,7 @@ static int tcp_init_tso_segs(struct sock *sk, struct sk_buff *skb, unsigned int | |||
914 | 913 | ||
915 | if (!tso_segs || | 914 | if (!tso_segs || |
916 | (tso_segs > 1 && | 915 | (tso_segs > 1 && |
917 | skb_shinfo(skb)->tso_size != mss_now)) { | 916 | tcp_skb_mss(skb) != mss_now)) { |
918 | tcp_set_skb_tso_segs(sk, skb, mss_now); | 917 | tcp_set_skb_tso_segs(sk, skb, mss_now); |
919 | tso_segs = tcp_skb_pcount(skb); | 918 | tso_segs = tcp_skb_pcount(skb); |
920 | } | 919 | } |
@@ -1724,8 +1723,9 @@ int tcp_retransmit_skb(struct sock *sk, struct sk_buff *skb) | |||
1724 | tp->snd_una == (TCP_SKB_CB(skb)->end_seq - 1)) { | 1723 | tp->snd_una == (TCP_SKB_CB(skb)->end_seq - 1)) { |
1725 | if (!pskb_trim(skb, 0)) { | 1724 | if (!pskb_trim(skb, 0)) { |
1726 | TCP_SKB_CB(skb)->seq = TCP_SKB_CB(skb)->end_seq - 1; | 1725 | TCP_SKB_CB(skb)->seq = TCP_SKB_CB(skb)->end_seq - 1; |
1727 | skb_shinfo(skb)->tso_segs = 1; | 1726 | skb_shinfo(skb)->gso_segs = 1; |
1728 | skb_shinfo(skb)->tso_size = 0; | 1727 | skb_shinfo(skb)->gso_size = 0; |
1728 | skb_shinfo(skb)->gso_type = 0; | ||
1729 | skb->ip_summed = CHECKSUM_NONE; | 1729 | skb->ip_summed = CHECKSUM_NONE; |
1730 | skb->csum = 0; | 1730 | skb->csum = 0; |
1731 | } | 1731 | } |
@@ -1930,8 +1930,9 @@ void tcp_send_fin(struct sock *sk) | |||
1930 | skb->csum = 0; | 1930 | skb->csum = 0; |
1931 | TCP_SKB_CB(skb)->flags = (TCPCB_FLAG_ACK | TCPCB_FLAG_FIN); | 1931 | TCP_SKB_CB(skb)->flags = (TCPCB_FLAG_ACK | TCPCB_FLAG_FIN); |
1932 | TCP_SKB_CB(skb)->sacked = 0; | 1932 | TCP_SKB_CB(skb)->sacked = 0; |
1933 | skb_shinfo(skb)->tso_segs = 1; | 1933 | skb_shinfo(skb)->gso_segs = 1; |
1934 | skb_shinfo(skb)->tso_size = 0; | 1934 | skb_shinfo(skb)->gso_size = 0; |
1935 | skb_shinfo(skb)->gso_type = 0; | ||
1935 | 1936 | ||
1936 | /* FIN eats a sequence byte, write_seq advanced by tcp_queue_skb(). */ | 1937 | /* FIN eats a sequence byte, write_seq advanced by tcp_queue_skb(). */ |
1937 | TCP_SKB_CB(skb)->seq = tp->write_seq; | 1938 | TCP_SKB_CB(skb)->seq = tp->write_seq; |
@@ -1963,8 +1964,9 @@ void tcp_send_active_reset(struct sock *sk, gfp_t priority) | |||
1963 | skb->csum = 0; | 1964 | skb->csum = 0; |
1964 | TCP_SKB_CB(skb)->flags = (TCPCB_FLAG_ACK | TCPCB_FLAG_RST); | 1965 | TCP_SKB_CB(skb)->flags = (TCPCB_FLAG_ACK | TCPCB_FLAG_RST); |
1965 | TCP_SKB_CB(skb)->sacked = 0; | 1966 | TCP_SKB_CB(skb)->sacked = 0; |
1966 | skb_shinfo(skb)->tso_segs = 1; | 1967 | skb_shinfo(skb)->gso_segs = 1; |
1967 | skb_shinfo(skb)->tso_size = 0; | 1968 | skb_shinfo(skb)->gso_size = 0; |
1969 | skb_shinfo(skb)->gso_type = 0; | ||
1968 | 1970 | ||
1969 | /* Send it off. */ | 1971 | /* Send it off. */ |
1970 | TCP_SKB_CB(skb)->seq = tcp_acceptable_seq(sk, tp); | 1972 | TCP_SKB_CB(skb)->seq = tcp_acceptable_seq(sk, tp); |
@@ -2039,16 +2041,15 @@ struct sk_buff * tcp_make_synack(struct sock *sk, struct dst_entry *dst, | |||
2039 | memset(th, 0, sizeof(struct tcphdr)); | 2041 | memset(th, 0, sizeof(struct tcphdr)); |
2040 | th->syn = 1; | 2042 | th->syn = 1; |
2041 | th->ack = 1; | 2043 | th->ack = 1; |
2042 | if (dst->dev->features&NETIF_F_TSO) | ||
2043 | ireq->ecn_ok = 0; | ||
2044 | TCP_ECN_make_synack(req, th); | 2044 | TCP_ECN_make_synack(req, th); |
2045 | th->source = inet_sk(sk)->sport; | 2045 | th->source = inet_sk(sk)->sport; |
2046 | th->dest = ireq->rmt_port; | 2046 | th->dest = ireq->rmt_port; |
2047 | TCP_SKB_CB(skb)->seq = tcp_rsk(req)->snt_isn; | 2047 | TCP_SKB_CB(skb)->seq = tcp_rsk(req)->snt_isn; |
2048 | TCP_SKB_CB(skb)->end_seq = TCP_SKB_CB(skb)->seq + 1; | 2048 | TCP_SKB_CB(skb)->end_seq = TCP_SKB_CB(skb)->seq + 1; |
2049 | TCP_SKB_CB(skb)->sacked = 0; | 2049 | TCP_SKB_CB(skb)->sacked = 0; |
2050 | skb_shinfo(skb)->tso_segs = 1; | 2050 | skb_shinfo(skb)->gso_segs = 1; |
2051 | skb_shinfo(skb)->tso_size = 0; | 2051 | skb_shinfo(skb)->gso_size = 0; |
2052 | skb_shinfo(skb)->gso_type = 0; | ||
2052 | th->seq = htonl(TCP_SKB_CB(skb)->seq); | 2053 | th->seq = htonl(TCP_SKB_CB(skb)->seq); |
2053 | th->ack_seq = htonl(tcp_rsk(req)->rcv_isn + 1); | 2054 | th->ack_seq = htonl(tcp_rsk(req)->rcv_isn + 1); |
2054 | if (req->rcv_wnd == 0) { /* ignored for retransmitted syns */ | 2055 | if (req->rcv_wnd == 0) { /* ignored for retransmitted syns */ |
@@ -2152,8 +2153,9 @@ int tcp_connect(struct sock *sk) | |||
2152 | TCP_SKB_CB(buff)->flags = TCPCB_FLAG_SYN; | 2153 | TCP_SKB_CB(buff)->flags = TCPCB_FLAG_SYN; |
2153 | TCP_ECN_send_syn(sk, tp, buff); | 2154 | TCP_ECN_send_syn(sk, tp, buff); |
2154 | TCP_SKB_CB(buff)->sacked = 0; | 2155 | TCP_SKB_CB(buff)->sacked = 0; |
2155 | skb_shinfo(buff)->tso_segs = 1; | 2156 | skb_shinfo(buff)->gso_segs = 1; |
2156 | skb_shinfo(buff)->tso_size = 0; | 2157 | skb_shinfo(buff)->gso_size = 0; |
2158 | skb_shinfo(buff)->gso_type = 0; | ||
2157 | buff->csum = 0; | 2159 | buff->csum = 0; |
2158 | TCP_SKB_CB(buff)->seq = tp->write_seq++; | 2160 | TCP_SKB_CB(buff)->seq = tp->write_seq++; |
2159 | TCP_SKB_CB(buff)->end_seq = tp->write_seq; | 2161 | TCP_SKB_CB(buff)->end_seq = tp->write_seq; |
@@ -2257,8 +2259,9 @@ void tcp_send_ack(struct sock *sk) | |||
2257 | buff->csum = 0; | 2259 | buff->csum = 0; |
2258 | TCP_SKB_CB(buff)->flags = TCPCB_FLAG_ACK; | 2260 | TCP_SKB_CB(buff)->flags = TCPCB_FLAG_ACK; |
2259 | TCP_SKB_CB(buff)->sacked = 0; | 2261 | TCP_SKB_CB(buff)->sacked = 0; |
2260 | skb_shinfo(buff)->tso_segs = 1; | 2262 | skb_shinfo(buff)->gso_segs = 1; |
2261 | skb_shinfo(buff)->tso_size = 0; | 2263 | skb_shinfo(buff)->gso_size = 0; |
2264 | skb_shinfo(buff)->gso_type = 0; | ||
2262 | 2265 | ||
2263 | /* Send it off, this clears delayed acks for us. */ | 2266 | /* Send it off, this clears delayed acks for us. */ |
2264 | TCP_SKB_CB(buff)->seq = TCP_SKB_CB(buff)->end_seq = tcp_acceptable_seq(sk, tp); | 2267 | TCP_SKB_CB(buff)->seq = TCP_SKB_CB(buff)->end_seq = tcp_acceptable_seq(sk, tp); |
@@ -2293,8 +2296,9 @@ static int tcp_xmit_probe_skb(struct sock *sk, int urgent) | |||
2293 | skb->csum = 0; | 2296 | skb->csum = 0; |
2294 | TCP_SKB_CB(skb)->flags = TCPCB_FLAG_ACK; | 2297 | TCP_SKB_CB(skb)->flags = TCPCB_FLAG_ACK; |
2295 | TCP_SKB_CB(skb)->sacked = urgent; | 2298 | TCP_SKB_CB(skb)->sacked = urgent; |
2296 | skb_shinfo(skb)->tso_segs = 1; | 2299 | skb_shinfo(skb)->gso_segs = 1; |
2297 | skb_shinfo(skb)->tso_size = 0; | 2300 | skb_shinfo(skb)->gso_size = 0; |
2301 | skb_shinfo(skb)->gso_type = 0; | ||
2298 | 2302 | ||
2299 | /* Use a previous sequence. This should cause the other | 2303 | /* Use a previous sequence. This should cause the other |
2300 | * end to send an ack. Don't queue or clone SKB, just | 2304 | * end to send an ack. Don't queue or clone SKB, just |
diff --git a/net/ipv4/tcp_scalable.c b/net/ipv4/tcp_scalable.c index 26d7486ee501..4624501e9680 100644 --- a/net/ipv4/tcp_scalable.c +++ b/net/ipv4/tcp_scalable.c | |||
@@ -5,7 +5,6 @@ | |||
5 | * John Heffner <jheffner@sc.edu> | 5 | * John Heffner <jheffner@sc.edu> |
6 | */ | 6 | */ |
7 | 7 | ||
8 | #include <linux/config.h> | ||
9 | #include <linux/module.h> | 8 | #include <linux/module.h> |
10 | #include <net/tcp.h> | 9 | #include <net/tcp.h> |
11 | 10 | ||
diff --git a/net/ipv4/tcp_vegas.c b/net/ipv4/tcp_vegas.c index 3b7403495052..490360b5b4bf 100644 --- a/net/ipv4/tcp_vegas.c +++ b/net/ipv4/tcp_vegas.c | |||
@@ -31,7 +31,6 @@ | |||
31 | * assumed senders never went idle. | 31 | * assumed senders never went idle. |
32 | */ | 32 | */ |
33 | 33 | ||
34 | #include <linux/config.h> | ||
35 | #include <linux/mm.h> | 34 | #include <linux/mm.h> |
36 | #include <linux/module.h> | 35 | #include <linux/module.h> |
37 | #include <linux/skbuff.h> | 36 | #include <linux/skbuff.h> |
diff --git a/net/ipv4/tcp_westwood.c b/net/ipv4/tcp_westwood.c index 4247da1384bf..5446312ffd2a 100644 --- a/net/ipv4/tcp_westwood.c +++ b/net/ipv4/tcp_westwood.c | |||
@@ -21,7 +21,6 @@ | |||
21 | * ssthresh after packet loss. The probing phase is as the original Reno. | 21 | * ssthresh after packet loss. The probing phase is as the original Reno. |
22 | */ | 22 | */ |
23 | 23 | ||
24 | #include <linux/config.h> | ||
25 | #include <linux/mm.h> | 24 | #include <linux/mm.h> |
26 | #include <linux/module.h> | 25 | #include <linux/module.h> |
27 | #include <linux/skbuff.h> | 26 | #include <linux/skbuff.h> |
diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c index 3f93292b0ad8..9bfcddad695b 100644 --- a/net/ipv4/udp.c +++ b/net/ipv4/udp.c | |||
@@ -91,7 +91,6 @@ | |||
91 | #include <linux/errno.h> | 91 | #include <linux/errno.h> |
92 | #include <linux/timer.h> | 92 | #include <linux/timer.h> |
93 | #include <linux/mm.h> | 93 | #include <linux/mm.h> |
94 | #include <linux/config.h> | ||
95 | #include <linux/inet.h> | 94 | #include <linux/inet.h> |
96 | #include <linux/ipv6.h> | 95 | #include <linux/ipv6.h> |
97 | #include <linux/netdevice.h> | 96 | #include <linux/netdevice.h> |
diff --git a/net/ipv4/xfrm4_output.c b/net/ipv4/xfrm4_output.c index ac9d91d4bb05..193363e22932 100644 --- a/net/ipv4/xfrm4_output.c +++ b/net/ipv4/xfrm4_output.c | |||
@@ -9,6 +9,8 @@ | |||
9 | */ | 9 | */ |
10 | 10 | ||
11 | #include <linux/compiler.h> | 11 | #include <linux/compiler.h> |
12 | #include <linux/if_ether.h> | ||
13 | #include <linux/kernel.h> | ||
12 | #include <linux/skbuff.h> | 14 | #include <linux/skbuff.h> |
13 | #include <linux/spinlock.h> | 15 | #include <linux/spinlock.h> |
14 | #include <linux/netfilter_ipv4.h> | 16 | #include <linux/netfilter_ipv4.h> |
@@ -97,16 +99,10 @@ error_nolock: | |||
97 | goto out_exit; | 99 | goto out_exit; |
98 | } | 100 | } |
99 | 101 | ||
100 | static int xfrm4_output_finish(struct sk_buff *skb) | 102 | static int xfrm4_output_finish2(struct sk_buff *skb) |
101 | { | 103 | { |
102 | int err; | 104 | int err; |
103 | 105 | ||
104 | #ifdef CONFIG_NETFILTER | ||
105 | if (!skb->dst->xfrm) { | ||
106 | IPCB(skb)->flags |= IPSKB_REROUTED; | ||
107 | return dst_output(skb); | ||
108 | } | ||
109 | #endif | ||
110 | while (likely((err = xfrm4_output_one(skb)) == 0)) { | 106 | while (likely((err = xfrm4_output_one(skb)) == 0)) { |
111 | nf_reset(skb); | 107 | nf_reset(skb); |
112 | 108 | ||
@@ -119,7 +115,7 @@ static int xfrm4_output_finish(struct sk_buff *skb) | |||
119 | return dst_output(skb); | 115 | return dst_output(skb); |
120 | 116 | ||
121 | err = nf_hook(PF_INET, NF_IP_POST_ROUTING, &skb, NULL, | 117 | err = nf_hook(PF_INET, NF_IP_POST_ROUTING, &skb, NULL, |
122 | skb->dst->dev, xfrm4_output_finish); | 118 | skb->dst->dev, xfrm4_output_finish2); |
123 | if (unlikely(err != 1)) | 119 | if (unlikely(err != 1)) |
124 | break; | 120 | break; |
125 | } | 121 | } |
@@ -127,6 +123,48 @@ static int xfrm4_output_finish(struct sk_buff *skb) | |||
127 | return err; | 123 | return err; |
128 | } | 124 | } |
129 | 125 | ||
126 | static int xfrm4_output_finish(struct sk_buff *skb) | ||
127 | { | ||
128 | struct sk_buff *segs; | ||
129 | |||
130 | #ifdef CONFIG_NETFILTER | ||
131 | if (!skb->dst->xfrm) { | ||
132 | IPCB(skb)->flags |= IPSKB_REROUTED; | ||
133 | return dst_output(skb); | ||
134 | } | ||
135 | #endif | ||
136 | |||
137 | if (!skb_shinfo(skb)->gso_size) | ||
138 | return xfrm4_output_finish2(skb); | ||
139 | |||
140 | skb->protocol = htons(ETH_P_IP); | ||
141 | segs = skb_gso_segment(skb, 0); | ||
142 | kfree_skb(skb); | ||
143 | if (unlikely(IS_ERR(segs))) | ||
144 | return PTR_ERR(segs); | ||
145 | |||
146 | do { | ||
147 | struct sk_buff *nskb = segs->next; | ||
148 | int err; | ||
149 | |||
150 | segs->next = NULL; | ||
151 | err = xfrm4_output_finish2(segs); | ||
152 | |||
153 | if (unlikely(err)) { | ||
154 | while ((segs = nskb)) { | ||
155 | nskb = segs->next; | ||
156 | segs->next = NULL; | ||
157 | kfree_skb(segs); | ||
158 | } | ||
159 | return err; | ||
160 | } | ||
161 | |||
162 | segs = nskb; | ||
163 | } while (segs); | ||
164 | |||
165 | return 0; | ||
166 | } | ||
167 | |||
130 | int xfrm4_output(struct sk_buff *skb) | 168 | int xfrm4_output(struct sk_buff *skb) |
131 | { | 169 | { |
132 | return NF_HOOK_COND(PF_INET, NF_IP_POST_ROUTING, skb, NULL, skb->dst->dev, | 170 | return NF_HOOK_COND(PF_INET, NF_IP_POST_ROUTING, skb, NULL, skb->dst->dev, |
diff --git a/net/ipv4/xfrm4_policy.c b/net/ipv4/xfrm4_policy.c index c0465284dfac..8f50eae47d03 100644 --- a/net/ipv4/xfrm4_policy.c +++ b/net/ipv4/xfrm4_policy.c | |||
@@ -9,7 +9,6 @@ | |||
9 | */ | 9 | */ |
10 | 10 | ||
11 | #include <linux/compiler.h> | 11 | #include <linux/compiler.h> |
12 | #include <linux/config.h> | ||
13 | #include <linux/inetdevice.h> | 12 | #include <linux/inetdevice.h> |
14 | #include <net/xfrm.h> | 13 | #include <net/xfrm.h> |
15 | #include <net/ip.h> | 14 | #include <net/ip.h> |