aboutsummaryrefslogtreecommitdiffstats
path: root/net/ipv4
diff options
context:
space:
mode:
Diffstat (limited to 'net/ipv4')
-rw-r--r--net/ipv4/fib_trie.c21
-rw-r--r--net/ipv4/ip_output.c3
-rw-r--r--net/ipv4/netfilter/Makefile20
-rw-r--r--net/ipv4/netfilter/nf_nat_pptp.c4
-rw-r--r--net/ipv4/tcp_input.c9
-rw-r--r--net/ipv4/tcp_output.c3
6 files changed, 37 insertions, 23 deletions
diff --git a/net/ipv4/fib_trie.c b/net/ipv4/fib_trie.c
index cfb249cc0a58..13307c04d5a1 100644
--- a/net/ipv4/fib_trie.c
+++ b/net/ipv4/fib_trie.c
@@ -1989,6 +1989,10 @@ static struct node *fib_trie_get_next(struct fib_trie_iter *iter)
1989 unsigned cindex = iter->index; 1989 unsigned cindex = iter->index;
1990 struct tnode *p; 1990 struct tnode *p;
1991 1991
1992 /* A single entry routing table */
1993 if (!tn)
1994 return NULL;
1995
1992 pr_debug("get_next iter={node=%p index=%d depth=%d}\n", 1996 pr_debug("get_next iter={node=%p index=%d depth=%d}\n",
1993 iter->tnode, iter->index, iter->depth); 1997 iter->tnode, iter->index, iter->depth);
1994rescan: 1998rescan:
@@ -2037,11 +2041,18 @@ static struct node *fib_trie_get_first(struct fib_trie_iter *iter,
2037 if(!iter) 2041 if(!iter)
2038 return NULL; 2042 return NULL;
2039 2043
2040 if (n && IS_TNODE(n)) { 2044 if (n) {
2041 iter->tnode = (struct tnode *) n; 2045 if (IS_TNODE(n)) {
2042 iter->trie = t; 2046 iter->tnode = (struct tnode *) n;
2043 iter->index = 0; 2047 iter->trie = t;
2044 iter->depth = 1; 2048 iter->index = 0;
2049 iter->depth = 1;
2050 } else {
2051 iter->tnode = NULL;
2052 iter->trie = t;
2053 iter->index = 0;
2054 iter->depth = 0;
2055 }
2045 return n; 2056 return n;
2046 } 2057 }
2047 return NULL; 2058 return NULL;
diff --git a/net/ipv4/ip_output.c b/net/ipv4/ip_output.c
index f071f84808fa..a0f2008584bc 100644
--- a/net/ipv4/ip_output.c
+++ b/net/ipv4/ip_output.c
@@ -281,8 +281,9 @@ int ip_output(struct sk_buff *skb)
281 !(IPCB(skb)->flags & IPSKB_REROUTED)); 281 !(IPCB(skb)->flags & IPSKB_REROUTED));
282} 282}
283 283
284int ip_queue_xmit(struct sk_buff *skb, struct sock *sk, int ipfragok) 284int ip_queue_xmit(struct sk_buff *skb, int ipfragok)
285{ 285{
286 struct sock *sk = skb->sk;
286 struct inet_sock *inet = inet_sk(sk); 287 struct inet_sock *inet = inet_sk(sk);
287 struct ip_options *opt = inet->opt; 288 struct ip_options *opt = inet->opt;
288 struct rtable *rt; 289 struct rtable *rt;
diff --git a/net/ipv4/netfilter/Makefile b/net/ipv4/netfilter/Makefile
index 15e741aeb291..16d177b71bf8 100644
--- a/net/ipv4/netfilter/Makefile
+++ b/net/ipv4/netfilter/Makefile
@@ -4,6 +4,14 @@
4 4
5# objects for the standalone - connection tracking / NAT 5# objects for the standalone - connection tracking / NAT
6ip_conntrack-objs := ip_conntrack_standalone.o ip_conntrack_core.o ip_conntrack_proto_generic.o ip_conntrack_proto_tcp.o ip_conntrack_proto_udp.o ip_conntrack_proto_icmp.o 6ip_conntrack-objs := ip_conntrack_standalone.o ip_conntrack_core.o ip_conntrack_proto_generic.o ip_conntrack_proto_tcp.o ip_conntrack_proto_udp.o ip_conntrack_proto_icmp.o
7# objects for l3 independent conntrack
8nf_conntrack_ipv4-objs := nf_conntrack_l3proto_ipv4.o nf_conntrack_proto_icmp.o
9ifeq ($(CONFIG_NF_CONNTRACK_PROC_COMPAT),y)
10ifeq ($(CONFIG_PROC_FS),y)
11nf_conntrack_ipv4-objs += nf_conntrack_l3proto_ipv4_compat.o
12endif
13endif
14
7ip_nat-objs := ip_nat_core.o ip_nat_helper.o ip_nat_proto_unknown.o ip_nat_proto_tcp.o ip_nat_proto_udp.o ip_nat_proto_icmp.o 15ip_nat-objs := ip_nat_core.o ip_nat_helper.o ip_nat_proto_unknown.o ip_nat_proto_tcp.o ip_nat_proto_udp.o ip_nat_proto_icmp.o
8nf_nat-objs := nf_nat_core.o nf_nat_helper.o nf_nat_proto_unknown.o nf_nat_proto_tcp.o nf_nat_proto_udp.o nf_nat_proto_icmp.o 16nf_nat-objs := nf_nat_core.o nf_nat_helper.o nf_nat_proto_unknown.o nf_nat_proto_tcp.o nf_nat_proto_udp.o nf_nat_proto_icmp.o
9ifneq ($(CONFIG_NF_NAT),) 17ifneq ($(CONFIG_NF_NAT),)
@@ -20,6 +28,8 @@ ip_nat_h323-objs := ip_nat_helper_h323.o
20 28
21# connection tracking 29# connection tracking
22obj-$(CONFIG_IP_NF_CONNTRACK) += ip_conntrack.o 30obj-$(CONFIG_IP_NF_CONNTRACK) += ip_conntrack.o
31obj-$(CONFIG_NF_CONNTRACK_IPV4) += nf_conntrack_ipv4.o
32
23obj-$(CONFIG_IP_NF_NAT) += ip_nat.o 33obj-$(CONFIG_IP_NF_NAT) += ip_nat.o
24obj-$(CONFIG_NF_NAT) += nf_nat.o 34obj-$(CONFIG_NF_NAT) += nf_nat.o
25 35
@@ -106,13 +116,3 @@ obj-$(CONFIG_IP_NF_ARPFILTER) += arptable_filter.o
106 116
107obj-$(CONFIG_IP_NF_QUEUE) += ip_queue.o 117obj-$(CONFIG_IP_NF_QUEUE) += ip_queue.o
108 118
109# objects for l3 independent conntrack
110nf_conntrack_ipv4-objs := nf_conntrack_l3proto_ipv4.o nf_conntrack_proto_icmp.o
111ifeq ($(CONFIG_NF_CONNTRACK_PROC_COMPAT),y)
112ifeq ($(CONFIG_PROC_FS),y)
113nf_conntrack_ipv4-objs += nf_conntrack_l3proto_ipv4_compat.o
114endif
115endif
116
117# l3 independent conntrack
118obj-$(CONFIG_NF_CONNTRACK_IPV4) += nf_conntrack_ipv4.o
diff --git a/net/ipv4/netfilter/nf_nat_pptp.c b/net/ipv4/netfilter/nf_nat_pptp.c
index 0ae45b79a4eb..5df4fcae3ab6 100644
--- a/net/ipv4/netfilter/nf_nat_pptp.c
+++ b/net/ipv4/netfilter/nf_nat_pptp.c
@@ -72,9 +72,9 @@ static void pptp_nat_expected(struct nf_conn *ct,
72 DEBUGP("we are PAC->PNS\n"); 72 DEBUGP("we are PAC->PNS\n");
73 /* build tuple for PNS->PAC */ 73 /* build tuple for PNS->PAC */
74 t.src.l3num = AF_INET; 74 t.src.l3num = AF_INET;
75 t.src.u3.ip = master->tuplehash[exp->dir].tuple.src.u3.ip; 75 t.src.u3.ip = master->tuplehash[!exp->dir].tuple.src.u3.ip;
76 t.src.u.gre.key = nat_pptp_info->pns_call_id; 76 t.src.u.gre.key = nat_pptp_info->pns_call_id;
77 t.dst.u3.ip = master->tuplehash[exp->dir].tuple.dst.u3.ip; 77 t.dst.u3.ip = master->tuplehash[!exp->dir].tuple.dst.u3.ip;
78 t.dst.u.gre.key = nat_pptp_info->pac_call_id; 78 t.dst.u.gre.key = nat_pptp_info->pac_call_id;
79 t.dst.protonum = IPPROTO_GRE; 79 t.dst.protonum = IPPROTO_GRE;
80 } 80 }
diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c
index 5c16e24a6061..c26076fb890e 100644
--- a/net/ipv4/tcp_input.c
+++ b/net/ipv4/tcp_input.c
@@ -1011,10 +1011,11 @@ tcp_sacktag_write_queue(struct sock *sk, struct sk_buff *ack_skb, u32 prior_snd_
1011 for (j = 0; j < i; j++){ 1011 for (j = 0; j < i; j++){
1012 if (after(ntohl(sp[j].start_seq), 1012 if (after(ntohl(sp[j].start_seq),
1013 ntohl(sp[j+1].start_seq))){ 1013 ntohl(sp[j+1].start_seq))){
1014 sp[j].start_seq = htonl(tp->recv_sack_cache[j+1].start_seq); 1014 struct tcp_sack_block_wire tmp;
1015 sp[j].end_seq = htonl(tp->recv_sack_cache[j+1].end_seq); 1015
1016 sp[j+1].start_seq = htonl(tp->recv_sack_cache[j].start_seq); 1016 tmp = sp[j];
1017 sp[j+1].end_seq = htonl(tp->recv_sack_cache[j].end_seq); 1017 sp[j] = sp[j+1];
1018 sp[j+1] = tmp;
1018 } 1019 }
1019 1020
1020 } 1021 }
diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c
index 23e32c806916..975f4472af29 100644
--- a/net/ipv4/tcp_output.c
+++ b/net/ipv4/tcp_output.c
@@ -467,6 +467,7 @@ static int tcp_transmit_skb(struct sock *sk, struct sk_buff *skb, int clone_it,
467 467
468 th = (struct tcphdr *) skb_push(skb, tcp_header_size); 468 th = (struct tcphdr *) skb_push(skb, tcp_header_size);
469 skb->h.th = th; 469 skb->h.th = th;
470 skb_set_owner_w(skb, sk);
470 471
471 /* Build TCP header and checksum it. */ 472 /* Build TCP header and checksum it. */
472 th->source = inet->sport; 473 th->source = inet->sport;
@@ -540,7 +541,7 @@ static int tcp_transmit_skb(struct sock *sk, struct sk_buff *skb, int clone_it,
540 if (after(tcb->end_seq, tp->snd_nxt) || tcb->seq == tcb->end_seq) 541 if (after(tcb->end_seq, tp->snd_nxt) || tcb->seq == tcb->end_seq)
541 TCP_INC_STATS(TCP_MIB_OUTSEGS); 542 TCP_INC_STATS(TCP_MIB_OUTSEGS);
542 543
543 err = icsk->icsk_af_ops->queue_xmit(skb, sk, 0); 544 err = icsk->icsk_af_ops->queue_xmit(skb, 0);
544 if (likely(err <= 0)) 545 if (likely(err <= 0))
545 return err; 546 return err;
546 547