Skip to content

Commit

Permalink
[NETNS][IPV6] tcp6 - handle several network namespace
Browse files Browse the repository at this point in the history
We have the right network namespace at the right place now.
So make use of this information to make tcp6 per network namespace

Signed-off-by: Daniel Lezcano <dlezcano@fr.ibm.com>
Signed-off-by: Benjamin Thery <benjamin.thery@bull.net>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Daniel Lezcano authored and David S. Miller committed Mar 7, 2008
1 parent 93ec926 commit e504799
Showing 1 changed file with 8 additions and 6 deletions.
14 changes: 8 additions & 6 deletions net/ipv6/tcp_ipv6.c
Original file line number Diff line number Diff line change
Expand Up @@ -988,6 +988,8 @@ static void tcp_v6_send_reset(struct sock *sk, struct sk_buff *skb)
struct tcphdr *th = tcp_hdr(skb), *t1;
struct sk_buff *buff;
struct flowi fl;
struct net *net = skb->dst->dev->nd_net;
struct sock *ctl_sk = net->ipv6.tcp_sk;
unsigned int tot_len = sizeof(*th);
#ifdef CONFIG_TCP_MD5SIG
struct tcp_md5sig_key *key;
Expand Down Expand Up @@ -1072,11 +1074,10 @@ static void tcp_v6_send_reset(struct sock *sk, struct sk_buff *skb)
* Underlying function will use this to retrieve the network
* namespace
*/
if (!ip6_dst_lookup(init_net.ipv6.tcp_sk, &buff->dst, &fl)) {
if (!ip6_dst_lookup(ctl_sk, &buff->dst, &fl)) {

if (xfrm_lookup(&buff->dst, &fl, NULL, 0) >= 0) {
ip6_xmit(init_net.ipv6.tcp_sk,
buff, &fl, NULL, 0);
ip6_xmit(ctl_sk, buff, &fl, NULL, 0);
TCP_INC_STATS_BH(TCP_MIB_OUTSEGS);
TCP_INC_STATS_BH(TCP_MIB_OUTRSTS);
return;
Expand All @@ -1092,6 +1093,8 @@ static void tcp_v6_send_ack(struct tcp_timewait_sock *tw,
struct tcphdr *th = tcp_hdr(skb), *t1;
struct sk_buff *buff;
struct flowi fl;
struct net *net = skb->dev->nd_net;
struct sock *ctl_sk = net->ipv6.tcp_sk;
unsigned int tot_len = sizeof(struct tcphdr);
__be32 *topt;
#ifdef CONFIG_TCP_MD5SIG
Expand Down Expand Up @@ -1173,10 +1176,9 @@ static void tcp_v6_send_ack(struct tcp_timewait_sock *tw,
fl.fl_ip_sport = t1->source;
security_skb_classify_flow(skb, &fl);

if (!ip6_dst_lookup(init_net.ipv6.tcp_sk, &buff->dst, &fl)) {
if (!ip6_dst_lookup(ctl_sk, &buff->dst, &fl)) {
if (xfrm_lookup(&buff->dst, &fl, NULL, 0) >= 0) {
ip6_xmit(init_net.ipv6.tcp_sk,
buff, &fl, NULL, 0);
ip6_xmit(ctl_sk, buff, &fl, NULL, 0);
TCP_INC_STATS_BH(TCP_MIB_OUTSEGS);
return;
}
Expand Down

0 comments on commit e504799

Please sign in to comment.