From a21feac23ffdfa0d4c480a589855fe0ad6dda8ab Mon Sep 17 00:00:00 2001 From: Pavel Emelyanov Date: Sun, 13 Apr 2008 22:32:25 -0700 Subject: [PATCH] --- yaml --- r: 90664 b: refs/heads/master c: 0204774191d3e7bc69e3ae6bbf328b635607505a h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/include/net/netns/dccp.h | 1 + trunk/net/dccp/ipv6.c | 16 ++++++++-------- 3 files changed, 10 insertions(+), 9 deletions(-) diff --git a/[refs] b/[refs] index 776b958788f7..6516b53c02ba 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 8231bd270df435f2d4d85b284dd9dbd48521dd84 +refs/heads/master: 0204774191d3e7bc69e3ae6bbf328b635607505a diff --git a/trunk/include/net/netns/dccp.h b/trunk/include/net/netns/dccp.h index e4f16faa898a..98d2a7ce1f71 100644 --- a/trunk/include/net/netns/dccp.h +++ b/trunk/include/net/netns/dccp.h @@ -5,6 +5,7 @@ struct sock; struct netns_dccp { struct sock *v4_ctl_sk; + struct sock *v6_ctl_sk; }; #endif diff --git a/trunk/net/dccp/ipv6.c b/trunk/net/dccp/ipv6.c index 2ca52913f4be..109dab3550f2 100644 --- a/trunk/net/dccp/ipv6.c +++ b/trunk/net/dccp/ipv6.c @@ -33,8 +33,7 @@ #include "ipv6.h" #include "feat.h" -/* Socket used for sending RSTs and ACKs */ -static struct sock *dccp_v6_ctl_sk; +/* dccp_v6_ctl_sk is used for sending RSTs and ACKs */ static struct inet_connection_sock_af_ops dccp_ipv6_mapped; static struct inet_connection_sock_af_ops dccp_ipv6_af_ops; @@ -296,6 +295,7 @@ static void dccp_v6_ctl_send_reset(struct sock *sk, struct sk_buff *rxskb) struct ipv6hdr *rxip6h; struct sk_buff *skb; struct flowi fl; + struct sock *ctl_sk = init_net.dccp.v6_ctl_sk; if (dccp_hdr(rxskb)->dccph_type == DCCP_PKT_RESET) return; @@ -303,7 +303,7 @@ static void dccp_v6_ctl_send_reset(struct sock *sk, struct sk_buff *rxskb) if (!ipv6_unicast_destination(rxskb)) return; - skb = dccp_ctl_make_reset(dccp_v6_ctl_sk, rxskb); + skb = dccp_ctl_make_reset(ctl_sk, rxskb); if (skb == NULL) return; @@ -322,9 +322,9 @@ static void dccp_v6_ctl_send_reset(struct sock *sk, struct sk_buff *rxskb) security_skb_classify_flow(rxskb, &fl); /* sk = NULL, but it is safe for now. RST socket required. */ - if (!ip6_dst_lookup(dccp_v6_ctl_sk, &skb->dst, &fl)) { + if (!ip6_dst_lookup(ctl_sk, &skb->dst, &fl)) { if (xfrm_lookup(&skb->dst, &fl, NULL, 0) >= 0) { - ip6_xmit(dccp_v6_ctl_sk, skb, &fl, NULL, 0); + ip6_xmit(ctl_sk, skb, &fl, NULL, 0); DCCP_INC_STATS_BH(DCCP_MIB_OUTSEGS); DCCP_INC_STATS_BH(DCCP_MIB_OUTRSTS); return; @@ -1198,7 +1198,7 @@ static int __init dccp_v6_init(void) inet6_register_protosw(&dccp_v6_protosw); - err = inet_ctl_sock_create(&dccp_v6_ctl_sk, PF_INET6, + err = inet_ctl_sock_create(&init_net.dccp.v6_ctl_sk, PF_INET6, SOCK_DCCP, IPPROTO_DCCP, &init_net); if (err != 0) goto out_unregister_protosw; @@ -1210,7 +1210,7 @@ static int __init dccp_v6_init(void) return err; out_destroy_ctl_sock: - inet_ctl_sock_destroy(dccp_v6_ctl_sk); + inet_ctl_sock_destroy(init_net.dccp.v6_ctl_sk); out_unregister_protosw: inet6_del_protocol(&dccp_v6_protocol, IPPROTO_DCCP); inet6_unregister_protosw(&dccp_v6_protosw); @@ -1222,7 +1222,7 @@ static int __init dccp_v6_init(void) static void __exit dccp_v6_exit(void) { unregister_pernet_subsys(&dccp_v6_ops); - inet_ctl_sock_destroy(dccp_v6_ctl_sk); + inet_ctl_sock_destroy(init_net.dccp.v6_ctl_sk); inet6_del_protocol(&dccp_v6_protocol, IPPROTO_DCCP); inet6_unregister_protosw(&dccp_v6_protosw); proto_unregister(&dccp_v6_prot);