diff options
Diffstat (limited to 'net/ipv6/tcp_ipv6.c')
-rw-r--r-- | net/ipv6/tcp_ipv6.c | 114 |
1 files changed, 57 insertions, 57 deletions
diff --git a/net/ipv6/tcp_ipv6.c b/net/ipv6/tcp_ipv6.c index 5c71501fc917..f67033b4bb66 100644 --- a/net/ipv6/tcp_ipv6.c +++ b/net/ipv6/tcp_ipv6.c | |||
@@ -156,7 +156,6 @@ static int tcp_v6_connect(struct sock *sk, struct sockaddr *uaddr, | |||
156 | flowlabel = fl6_sock_lookup(sk, fl6.flowlabel); | 156 | flowlabel = fl6_sock_lookup(sk, fl6.flowlabel); |
157 | if (flowlabel == NULL) | 157 | if (flowlabel == NULL) |
158 | return -EINVAL; | 158 | return -EINVAL; |
159 | usin->sin6_addr = flowlabel->dst; | ||
160 | fl6_sock_release(flowlabel); | 159 | fl6_sock_release(flowlabel); |
161 | } | 160 | } |
162 | } | 161 | } |
@@ -192,13 +191,13 @@ static int tcp_v6_connect(struct sock *sk, struct sockaddr *uaddr, | |||
192 | } | 191 | } |
193 | 192 | ||
194 | if (tp->rx_opt.ts_recent_stamp && | 193 | if (tp->rx_opt.ts_recent_stamp && |
195 | !ipv6_addr_equal(&np->daddr, &usin->sin6_addr)) { | 194 | !ipv6_addr_equal(&sk->sk_v6_daddr, &usin->sin6_addr)) { |
196 | tp->rx_opt.ts_recent = 0; | 195 | tp->rx_opt.ts_recent = 0; |
197 | tp->rx_opt.ts_recent_stamp = 0; | 196 | tp->rx_opt.ts_recent_stamp = 0; |
198 | tp->write_seq = 0; | 197 | tp->write_seq = 0; |
199 | } | 198 | } |
200 | 199 | ||
201 | np->daddr = usin->sin6_addr; | 200 | sk->sk_v6_daddr = usin->sin6_addr; |
202 | np->flow_label = fl6.flowlabel; | 201 | np->flow_label = fl6.flowlabel; |
203 | 202 | ||
204 | /* | 203 | /* |
@@ -237,17 +236,17 @@ static int tcp_v6_connect(struct sock *sk, struct sockaddr *uaddr, | |||
237 | } else { | 236 | } else { |
238 | ipv6_addr_set_v4mapped(inet->inet_saddr, &np->saddr); | 237 | ipv6_addr_set_v4mapped(inet->inet_saddr, &np->saddr); |
239 | ipv6_addr_set_v4mapped(inet->inet_rcv_saddr, | 238 | ipv6_addr_set_v4mapped(inet->inet_rcv_saddr, |
240 | &np->rcv_saddr); | 239 | &sk->sk_v6_rcv_saddr); |
241 | } | 240 | } |
242 | 241 | ||
243 | return err; | 242 | return err; |
244 | } | 243 | } |
245 | 244 | ||
246 | if (!ipv6_addr_any(&np->rcv_saddr)) | 245 | if (!ipv6_addr_any(&sk->sk_v6_rcv_saddr)) |
247 | saddr = &np->rcv_saddr; | 246 | saddr = &sk->sk_v6_rcv_saddr; |
248 | 247 | ||
249 | fl6.flowi6_proto = IPPROTO_TCP; | 248 | fl6.flowi6_proto = IPPROTO_TCP; |
250 | fl6.daddr = np->daddr; | 249 | fl6.daddr = sk->sk_v6_daddr; |
251 | fl6.saddr = saddr ? *saddr : np->saddr; | 250 | fl6.saddr = saddr ? *saddr : np->saddr; |
252 | fl6.flowi6_oif = sk->sk_bound_dev_if; | 251 | fl6.flowi6_oif = sk->sk_bound_dev_if; |
253 | fl6.flowi6_mark = sk->sk_mark; | 252 | fl6.flowi6_mark = sk->sk_mark; |
@@ -266,7 +265,7 @@ static int tcp_v6_connect(struct sock *sk, struct sockaddr *uaddr, | |||
266 | 265 | ||
267 | if (saddr == NULL) { | 266 | if (saddr == NULL) { |
268 | saddr = &fl6.saddr; | 267 | saddr = &fl6.saddr; |
269 | np->rcv_saddr = *saddr; | 268 | sk->sk_v6_rcv_saddr = *saddr; |
270 | } | 269 | } |
271 | 270 | ||
272 | /* set the source address */ | 271 | /* set the source address */ |
@@ -279,7 +278,7 @@ static int tcp_v6_connect(struct sock *sk, struct sockaddr *uaddr, | |||
279 | rt = (struct rt6_info *) dst; | 278 | rt = (struct rt6_info *) dst; |
280 | if (tcp_death_row.sysctl_tw_recycle && | 279 | if (tcp_death_row.sysctl_tw_recycle && |
281 | !tp->rx_opt.ts_recent_stamp && | 280 | !tp->rx_opt.ts_recent_stamp && |
282 | ipv6_addr_equal(&rt->rt6i_dst.addr, &np->daddr)) | 281 | ipv6_addr_equal(&rt->rt6i_dst.addr, &sk->sk_v6_daddr)) |
283 | tcp_fetch_timewait_stamp(sk, dst); | 282 | tcp_fetch_timewait_stamp(sk, dst); |
284 | 283 | ||
285 | icsk->icsk_ext_hdr_len = 0; | 284 | icsk->icsk_ext_hdr_len = 0; |
@@ -298,7 +297,7 @@ static int tcp_v6_connect(struct sock *sk, struct sockaddr *uaddr, | |||
298 | 297 | ||
299 | if (!tp->write_seq && likely(!tp->repair)) | 298 | if (!tp->write_seq && likely(!tp->repair)) |
300 | tp->write_seq = secure_tcpv6_sequence_number(np->saddr.s6_addr32, | 299 | tp->write_seq = secure_tcpv6_sequence_number(np->saddr.s6_addr32, |
301 | np->daddr.s6_addr32, | 300 | sk->sk_v6_daddr.s6_addr32, |
302 | inet->inet_sport, | 301 | inet->inet_sport, |
303 | inet->inet_dport); | 302 | inet->inet_dport); |
304 | 303 | ||
@@ -465,7 +464,7 @@ static int tcp_v6_send_synack(struct sock *sk, struct dst_entry *dst, | |||
465 | struct request_sock *req, | 464 | struct request_sock *req, |
466 | u16 queue_mapping) | 465 | u16 queue_mapping) |
467 | { | 466 | { |
468 | struct inet6_request_sock *treq = inet6_rsk(req); | 467 | struct inet_request_sock *ireq = inet_rsk(req); |
469 | struct ipv6_pinfo *np = inet6_sk(sk); | 468 | struct ipv6_pinfo *np = inet6_sk(sk); |
470 | struct sk_buff * skb; | 469 | struct sk_buff * skb; |
471 | int err = -ENOMEM; | 470 | int err = -ENOMEM; |
@@ -477,9 +476,10 @@ static int tcp_v6_send_synack(struct sock *sk, struct dst_entry *dst, | |||
477 | skb = tcp_make_synack(sk, dst, req, NULL); | 476 | skb = tcp_make_synack(sk, dst, req, NULL); |
478 | 477 | ||
479 | if (skb) { | 478 | if (skb) { |
480 | __tcp_v6_send_check(skb, &treq->loc_addr, &treq->rmt_addr); | 479 | __tcp_v6_send_check(skb, &ireq->ir_v6_loc_addr, |
480 | &ireq->ir_v6_rmt_addr); | ||
481 | 481 | ||
482 | fl6->daddr = treq->rmt_addr; | 482 | fl6->daddr = ireq->ir_v6_rmt_addr; |
483 | skb_set_queue_mapping(skb, queue_mapping); | 483 | skb_set_queue_mapping(skb, queue_mapping); |
484 | err = ip6_xmit(sk, skb, fl6, np->opt, np->tclass); | 484 | err = ip6_xmit(sk, skb, fl6, np->opt, np->tclass); |
485 | err = net_xmit_eval(err); | 485 | err = net_xmit_eval(err); |
@@ -502,7 +502,7 @@ static int tcp_v6_rtx_synack(struct sock *sk, struct request_sock *req) | |||
502 | 502 | ||
503 | static void tcp_v6_reqsk_destructor(struct request_sock *req) | 503 | static void tcp_v6_reqsk_destructor(struct request_sock *req) |
504 | { | 504 | { |
505 | kfree_skb(inet6_rsk(req)->pktopts); | 505 | kfree_skb(inet_rsk(req)->pktopts); |
506 | } | 506 | } |
507 | 507 | ||
508 | #ifdef CONFIG_TCP_MD5SIG | 508 | #ifdef CONFIG_TCP_MD5SIG |
@@ -515,13 +515,13 @@ static struct tcp_md5sig_key *tcp_v6_md5_do_lookup(struct sock *sk, | |||
515 | static struct tcp_md5sig_key *tcp_v6_md5_lookup(struct sock *sk, | 515 | static struct tcp_md5sig_key *tcp_v6_md5_lookup(struct sock *sk, |
516 | struct sock *addr_sk) | 516 | struct sock *addr_sk) |
517 | { | 517 | { |
518 | return tcp_v6_md5_do_lookup(sk, &inet6_sk(addr_sk)->daddr); | 518 | return tcp_v6_md5_do_lookup(sk, &addr_sk->sk_v6_daddr); |
519 | } | 519 | } |
520 | 520 | ||
521 | static struct tcp_md5sig_key *tcp_v6_reqsk_md5_lookup(struct sock *sk, | 521 | static struct tcp_md5sig_key *tcp_v6_reqsk_md5_lookup(struct sock *sk, |
522 | struct request_sock *req) | 522 | struct request_sock *req) |
523 | { | 523 | { |
524 | return tcp_v6_md5_do_lookup(sk, &inet6_rsk(req)->rmt_addr); | 524 | return tcp_v6_md5_do_lookup(sk, &inet_rsk(req)->ir_v6_rmt_addr); |
525 | } | 525 | } |
526 | 526 | ||
527 | static int tcp_v6_parse_md5_keys (struct sock *sk, char __user *optval, | 527 | static int tcp_v6_parse_md5_keys (struct sock *sk, char __user *optval, |
@@ -621,10 +621,10 @@ static int tcp_v6_md5_hash_skb(char *md5_hash, struct tcp_md5sig_key *key, | |||
621 | 621 | ||
622 | if (sk) { | 622 | if (sk) { |
623 | saddr = &inet6_sk(sk)->saddr; | 623 | saddr = &inet6_sk(sk)->saddr; |
624 | daddr = &inet6_sk(sk)->daddr; | 624 | daddr = &sk->sk_v6_daddr; |
625 | } else if (req) { | 625 | } else if (req) { |
626 | saddr = &inet6_rsk(req)->loc_addr; | 626 | saddr = &inet_rsk(req)->ir_v6_loc_addr; |
627 | daddr = &inet6_rsk(req)->rmt_addr; | 627 | daddr = &inet_rsk(req)->ir_v6_rmt_addr; |
628 | } else { | 628 | } else { |
629 | const struct ipv6hdr *ip6h = ipv6_hdr(skb); | 629 | const struct ipv6hdr *ip6h = ipv6_hdr(skb); |
630 | saddr = &ip6h->saddr; | 630 | saddr = &ip6h->saddr; |
@@ -949,7 +949,7 @@ static int tcp_v6_conn_request(struct sock *sk, struct sk_buff *skb) | |||
949 | { | 949 | { |
950 | struct tcp_options_received tmp_opt; | 950 | struct tcp_options_received tmp_opt; |
951 | struct request_sock *req; | 951 | struct request_sock *req; |
952 | struct inet6_request_sock *treq; | 952 | struct inet_request_sock *ireq; |
953 | struct ipv6_pinfo *np = inet6_sk(sk); | 953 | struct ipv6_pinfo *np = inet6_sk(sk); |
954 | struct tcp_sock *tp = tcp_sk(sk); | 954 | struct tcp_sock *tp = tcp_sk(sk); |
955 | __u32 isn = TCP_SKB_CB(skb)->when; | 955 | __u32 isn = TCP_SKB_CB(skb)->when; |
@@ -994,25 +994,25 @@ static int tcp_v6_conn_request(struct sock *sk, struct sk_buff *skb) | |||
994 | tmp_opt.tstamp_ok = tmp_opt.saw_tstamp; | 994 | tmp_opt.tstamp_ok = tmp_opt.saw_tstamp; |
995 | tcp_openreq_init(req, &tmp_opt, skb); | 995 | tcp_openreq_init(req, &tmp_opt, skb); |
996 | 996 | ||
997 | treq = inet6_rsk(req); | 997 | ireq = inet_rsk(req); |
998 | treq->rmt_addr = ipv6_hdr(skb)->saddr; | 998 | ireq->ir_v6_rmt_addr = ipv6_hdr(skb)->saddr; |
999 | treq->loc_addr = ipv6_hdr(skb)->daddr; | 999 | ireq->ir_v6_loc_addr = ipv6_hdr(skb)->daddr; |
1000 | if (!want_cookie || tmp_opt.tstamp_ok) | 1000 | if (!want_cookie || tmp_opt.tstamp_ok) |
1001 | TCP_ECN_create_request(req, skb, sock_net(sk)); | 1001 | TCP_ECN_create_request(req, skb, sock_net(sk)); |
1002 | 1002 | ||
1003 | treq->iif = sk->sk_bound_dev_if; | 1003 | ireq->ir_iif = sk->sk_bound_dev_if; |
1004 | 1004 | ||
1005 | /* So that link locals have meaning */ | 1005 | /* So that link locals have meaning */ |
1006 | if (!sk->sk_bound_dev_if && | 1006 | if (!sk->sk_bound_dev_if && |
1007 | ipv6_addr_type(&treq->rmt_addr) & IPV6_ADDR_LINKLOCAL) | 1007 | ipv6_addr_type(&ireq->ir_v6_rmt_addr) & IPV6_ADDR_LINKLOCAL) |
1008 | treq->iif = inet6_iif(skb); | 1008 | ireq->ir_iif = inet6_iif(skb); |
1009 | 1009 | ||
1010 | if (!isn) { | 1010 | if (!isn) { |
1011 | if (ipv6_opt_accepted(sk, skb) || | 1011 | if (ipv6_opt_accepted(sk, skb) || |
1012 | np->rxopt.bits.rxinfo || np->rxopt.bits.rxoinfo || | 1012 | np->rxopt.bits.rxinfo || np->rxopt.bits.rxoinfo || |
1013 | np->rxopt.bits.rxhlim || np->rxopt.bits.rxohlim) { | 1013 | np->rxopt.bits.rxhlim || np->rxopt.bits.rxohlim) { |
1014 | atomic_inc(&skb->users); | 1014 | atomic_inc(&skb->users); |
1015 | treq->pktopts = skb; | 1015 | ireq->pktopts = skb; |
1016 | } | 1016 | } |
1017 | 1017 | ||
1018 | if (want_cookie) { | 1018 | if (want_cookie) { |
@@ -1051,7 +1051,7 @@ static int tcp_v6_conn_request(struct sock *sk, struct sk_buff *skb) | |||
1051 | * to the moment of synflood. | 1051 | * to the moment of synflood. |
1052 | */ | 1052 | */ |
1053 | LIMIT_NETDEBUG(KERN_DEBUG "TCP: drop open request from %pI6/%u\n", | 1053 | LIMIT_NETDEBUG(KERN_DEBUG "TCP: drop open request from %pI6/%u\n", |
1054 | &treq->rmt_addr, ntohs(tcp_hdr(skb)->source)); | 1054 | &ireq->ir_v6_rmt_addr, ntohs(tcp_hdr(skb)->source)); |
1055 | goto drop_and_release; | 1055 | goto drop_and_release; |
1056 | } | 1056 | } |
1057 | 1057 | ||
@@ -1086,7 +1086,7 @@ static struct sock * tcp_v6_syn_recv_sock(struct sock *sk, struct sk_buff *skb, | |||
1086 | struct request_sock *req, | 1086 | struct request_sock *req, |
1087 | struct dst_entry *dst) | 1087 | struct dst_entry *dst) |
1088 | { | 1088 | { |
1089 | struct inet6_request_sock *treq; | 1089 | struct inet_request_sock *ireq; |
1090 | struct ipv6_pinfo *newnp, *np = inet6_sk(sk); | 1090 | struct ipv6_pinfo *newnp, *np = inet6_sk(sk); |
1091 | struct tcp6_sock *newtcp6sk; | 1091 | struct tcp6_sock *newtcp6sk; |
1092 | struct inet_sock *newinet; | 1092 | struct inet_sock *newinet; |
@@ -1116,11 +1116,11 @@ static struct sock * tcp_v6_syn_recv_sock(struct sock *sk, struct sk_buff *skb, | |||
1116 | 1116 | ||
1117 | memcpy(newnp, np, sizeof(struct ipv6_pinfo)); | 1117 | memcpy(newnp, np, sizeof(struct ipv6_pinfo)); |
1118 | 1118 | ||
1119 | ipv6_addr_set_v4mapped(newinet->inet_daddr, &newnp->daddr); | 1119 | ipv6_addr_set_v4mapped(newinet->inet_daddr, &newsk->sk_v6_daddr); |
1120 | 1120 | ||
1121 | ipv6_addr_set_v4mapped(newinet->inet_saddr, &newnp->saddr); | 1121 | ipv6_addr_set_v4mapped(newinet->inet_saddr, &newnp->saddr); |
1122 | 1122 | ||
1123 | newnp->rcv_saddr = newnp->saddr; | 1123 | newsk->sk_v6_rcv_saddr = newnp->saddr; |
1124 | 1124 | ||
1125 | inet_csk(newsk)->icsk_af_ops = &ipv6_mapped; | 1125 | inet_csk(newsk)->icsk_af_ops = &ipv6_mapped; |
1126 | newsk->sk_backlog_rcv = tcp_v4_do_rcv; | 1126 | newsk->sk_backlog_rcv = tcp_v4_do_rcv; |
@@ -1151,7 +1151,7 @@ static struct sock * tcp_v6_syn_recv_sock(struct sock *sk, struct sk_buff *skb, | |||
1151 | return newsk; | 1151 | return newsk; |
1152 | } | 1152 | } |
1153 | 1153 | ||
1154 | treq = inet6_rsk(req); | 1154 | ireq = inet_rsk(req); |
1155 | 1155 | ||
1156 | if (sk_acceptq_is_full(sk)) | 1156 | if (sk_acceptq_is_full(sk)) |
1157 | goto out_overflow; | 1157 | goto out_overflow; |
@@ -1185,10 +1185,10 @@ static struct sock * tcp_v6_syn_recv_sock(struct sock *sk, struct sk_buff *skb, | |||
1185 | 1185 | ||
1186 | memcpy(newnp, np, sizeof(struct ipv6_pinfo)); | 1186 | memcpy(newnp, np, sizeof(struct ipv6_pinfo)); |
1187 | 1187 | ||
1188 | newnp->daddr = treq->rmt_addr; | 1188 | newsk->sk_v6_daddr = ireq->ir_v6_rmt_addr; |
1189 | newnp->saddr = treq->loc_addr; | 1189 | newnp->saddr = ireq->ir_v6_loc_addr; |
1190 | newnp->rcv_saddr = treq->loc_addr; | 1190 | newsk->sk_v6_rcv_saddr = ireq->ir_v6_loc_addr; |
1191 | newsk->sk_bound_dev_if = treq->iif; | 1191 | newsk->sk_bound_dev_if = ireq->ir_iif; |
1192 | 1192 | ||
1193 | /* Now IPv6 options... | 1193 | /* Now IPv6 options... |
1194 | 1194 | ||
@@ -1203,11 +1203,11 @@ static struct sock * tcp_v6_syn_recv_sock(struct sock *sk, struct sk_buff *skb, | |||
1203 | 1203 | ||
1204 | /* Clone pktoptions received with SYN */ | 1204 | /* Clone pktoptions received with SYN */ |
1205 | newnp->pktoptions = NULL; | 1205 | newnp->pktoptions = NULL; |
1206 | if (treq->pktopts != NULL) { | 1206 | if (ireq->pktopts != NULL) { |
1207 | newnp->pktoptions = skb_clone(treq->pktopts, | 1207 | newnp->pktoptions = skb_clone(ireq->pktopts, |
1208 | sk_gfp_atomic(sk, GFP_ATOMIC)); | 1208 | sk_gfp_atomic(sk, GFP_ATOMIC)); |
1209 | consume_skb(treq->pktopts); | 1209 | consume_skb(ireq->pktopts); |
1210 | treq->pktopts = NULL; | 1210 | ireq->pktopts = NULL; |
1211 | if (newnp->pktoptions) | 1211 | if (newnp->pktoptions) |
1212 | skb_set_owner_r(newnp->pktoptions, newsk); | 1212 | skb_set_owner_r(newnp->pktoptions, newsk); |
1213 | } | 1213 | } |
@@ -1244,13 +1244,13 @@ static struct sock * tcp_v6_syn_recv_sock(struct sock *sk, struct sk_buff *skb, | |||
1244 | 1244 | ||
1245 | #ifdef CONFIG_TCP_MD5SIG | 1245 | #ifdef CONFIG_TCP_MD5SIG |
1246 | /* Copy over the MD5 key from the original socket */ | 1246 | /* Copy over the MD5 key from the original socket */ |
1247 | if ((key = tcp_v6_md5_do_lookup(sk, &newnp->daddr)) != NULL) { | 1247 | if ((key = tcp_v6_md5_do_lookup(sk, &newsk->sk_v6_daddr)) != NULL) { |
1248 | /* We're using one, so create a matching key | 1248 | /* We're using one, so create a matching key |
1249 | * on the newsk structure. If we fail to get | 1249 | * on the newsk structure. If we fail to get |
1250 | * memory, then we end up not copying the key | 1250 | * memory, then we end up not copying the key |
1251 | * across. Shucks. | 1251 | * across. Shucks. |
1252 | */ | 1252 | */ |
1253 | tcp_md5_do_add(newsk, (union tcp_md5_addr *)&newnp->daddr, | 1253 | tcp_md5_do_add(newsk, (union tcp_md5_addr *)&newsk->sk_v6_daddr, |
1254 | AF_INET6, key->key, key->keylen, | 1254 | AF_INET6, key->key, key->keylen, |
1255 | sk_gfp_atomic(sk, GFP_ATOMIC)); | 1255 | sk_gfp_atomic(sk, GFP_ATOMIC)); |
1256 | } | 1256 | } |
@@ -1722,8 +1722,8 @@ static void get_openreq6(struct seq_file *seq, | |||
1722 | const struct sock *sk, struct request_sock *req, int i, kuid_t uid) | 1722 | const struct sock *sk, struct request_sock *req, int i, kuid_t uid) |
1723 | { | 1723 | { |
1724 | int ttd = req->expires - jiffies; | 1724 | int ttd = req->expires - jiffies; |
1725 | const struct in6_addr *src = &inet6_rsk(req)->loc_addr; | 1725 | const struct in6_addr *src = &inet_rsk(req)->ir_v6_loc_addr; |
1726 | const struct in6_addr *dest = &inet6_rsk(req)->rmt_addr; | 1726 | const struct in6_addr *dest = &inet_rsk(req)->ir_v6_rmt_addr; |
1727 | 1727 | ||
1728 | if (ttd < 0) | 1728 | if (ttd < 0) |
1729 | ttd = 0; | 1729 | ttd = 0; |
@@ -1734,10 +1734,10 @@ static void get_openreq6(struct seq_file *seq, | |||
1734 | i, | 1734 | i, |
1735 | src->s6_addr32[0], src->s6_addr32[1], | 1735 | src->s6_addr32[0], src->s6_addr32[1], |
1736 | src->s6_addr32[2], src->s6_addr32[3], | 1736 | src->s6_addr32[2], src->s6_addr32[3], |
1737 | ntohs(inet_rsk(req)->loc_port), | 1737 | inet_rsk(req)->ir_num, |
1738 | dest->s6_addr32[0], dest->s6_addr32[1], | 1738 | dest->s6_addr32[0], dest->s6_addr32[1], |
1739 | dest->s6_addr32[2], dest->s6_addr32[3], | 1739 | dest->s6_addr32[2], dest->s6_addr32[3], |
1740 | ntohs(inet_rsk(req)->rmt_port), | 1740 | ntohs(inet_rsk(req)->ir_rmt_port), |
1741 | TCP_SYN_RECV, | 1741 | TCP_SYN_RECV, |
1742 | 0,0, /* could print option size, but that is af dependent. */ | 1742 | 0,0, /* could print option size, but that is af dependent. */ |
1743 | 1, /* timers active (only the expire timer) */ | 1743 | 1, /* timers active (only the expire timer) */ |
@@ -1758,10 +1758,9 @@ static void get_tcp6_sock(struct seq_file *seq, struct sock *sp, int i) | |||
1758 | const struct inet_sock *inet = inet_sk(sp); | 1758 | const struct inet_sock *inet = inet_sk(sp); |
1759 | const struct tcp_sock *tp = tcp_sk(sp); | 1759 | const struct tcp_sock *tp = tcp_sk(sp); |
1760 | const struct inet_connection_sock *icsk = inet_csk(sp); | 1760 | const struct inet_connection_sock *icsk = inet_csk(sp); |
1761 | const struct ipv6_pinfo *np = inet6_sk(sp); | ||
1762 | 1761 | ||
1763 | dest = &np->daddr; | 1762 | dest = &sp->sk_v6_daddr; |
1764 | src = &np->rcv_saddr; | 1763 | src = &sp->sk_v6_rcv_saddr; |
1765 | destp = ntohs(inet->inet_dport); | 1764 | destp = ntohs(inet->inet_dport); |
1766 | srcp = ntohs(inet->inet_sport); | 1765 | srcp = ntohs(inet->inet_sport); |
1767 | 1766 | ||
@@ -1810,11 +1809,10 @@ static void get_timewait6_sock(struct seq_file *seq, | |||
1810 | { | 1809 | { |
1811 | const struct in6_addr *dest, *src; | 1810 | const struct in6_addr *dest, *src; |
1812 | __u16 destp, srcp; | 1811 | __u16 destp, srcp; |
1813 | const struct inet6_timewait_sock *tw6 = inet6_twsk((struct sock *)tw); | 1812 | s32 delta = tw->tw_ttd - inet_tw_time_stamp(); |
1814 | long delta = tw->tw_ttd - jiffies; | ||
1815 | 1813 | ||
1816 | dest = &tw6->tw_v6_daddr; | 1814 | dest = &tw->tw_v6_daddr; |
1817 | src = &tw6->tw_v6_rcv_saddr; | 1815 | src = &tw->tw_v6_rcv_saddr; |
1818 | destp = ntohs(tw->tw_dport); | 1816 | destp = ntohs(tw->tw_dport); |
1819 | srcp = ntohs(tw->tw_sport); | 1817 | srcp = ntohs(tw->tw_sport); |
1820 | 1818 | ||
@@ -1834,6 +1832,7 @@ static void get_timewait6_sock(struct seq_file *seq, | |||
1834 | static int tcp6_seq_show(struct seq_file *seq, void *v) | 1832 | static int tcp6_seq_show(struct seq_file *seq, void *v) |
1835 | { | 1833 | { |
1836 | struct tcp_iter_state *st; | 1834 | struct tcp_iter_state *st; |
1835 | struct sock *sk = v; | ||
1837 | 1836 | ||
1838 | if (v == SEQ_START_TOKEN) { | 1837 | if (v == SEQ_START_TOKEN) { |
1839 | seq_puts(seq, | 1838 | seq_puts(seq, |
@@ -1849,14 +1848,14 @@ static int tcp6_seq_show(struct seq_file *seq, void *v) | |||
1849 | switch (st->state) { | 1848 | switch (st->state) { |
1850 | case TCP_SEQ_STATE_LISTENING: | 1849 | case TCP_SEQ_STATE_LISTENING: |
1851 | case TCP_SEQ_STATE_ESTABLISHED: | 1850 | case TCP_SEQ_STATE_ESTABLISHED: |
1852 | get_tcp6_sock(seq, v, st->num); | 1851 | if (sk->sk_state == TCP_TIME_WAIT) |
1852 | get_timewait6_sock(seq, v, st->num); | ||
1853 | else | ||
1854 | get_tcp6_sock(seq, v, st->num); | ||
1853 | break; | 1855 | break; |
1854 | case TCP_SEQ_STATE_OPENREQ: | 1856 | case TCP_SEQ_STATE_OPENREQ: |
1855 | get_openreq6(seq, st->syn_wait_sk, v, st->num, st->uid); | 1857 | get_openreq6(seq, st->syn_wait_sk, v, st->num, st->uid); |
1856 | break; | 1858 | break; |
1857 | case TCP_SEQ_STATE_TIME_WAIT: | ||
1858 | get_timewait6_sock(seq, v, st->num); | ||
1859 | break; | ||
1860 | } | 1859 | } |
1861 | out: | 1860 | out: |
1862 | return 0; | 1861 | return 0; |
@@ -1929,6 +1928,7 @@ struct proto tcpv6_prot = { | |||
1929 | .memory_allocated = &tcp_memory_allocated, | 1928 | .memory_allocated = &tcp_memory_allocated, |
1930 | .memory_pressure = &tcp_memory_pressure, | 1929 | .memory_pressure = &tcp_memory_pressure, |
1931 | .orphan_count = &tcp_orphan_count, | 1930 | .orphan_count = &tcp_orphan_count, |
1931 | .sysctl_mem = sysctl_tcp_mem, | ||
1932 | .sysctl_wmem = sysctl_tcp_wmem, | 1932 | .sysctl_wmem = sysctl_tcp_wmem, |
1933 | .sysctl_rmem = sysctl_tcp_rmem, | 1933 | .sysctl_rmem = sysctl_tcp_rmem, |
1934 | .max_header = MAX_TCP_HEADER, | 1934 | .max_header = MAX_TCP_HEADER, |