diff options
author | stephen hemminger <shemminger@vyatta.com> | 2012-10-01 14:49:21 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2012-10-02 14:38:04 -0400 |
commit | bfe1b9b16e3bed06d16826813edf5922fd82d91f (patch) | |
tree | 4be855263ce4ef237a93c3b0971de26c69b36746 /drivers/net/vxlan.c | |
parent | aaba1f58a73a285aefac825e5eafad1d211c43de (diff) |
vxlan: put UDP socket in correct namespace
Move vxlan UDP socket to correct network namespace
Signed-off-by: Stephen Hemminger <shemminger@vyatta.com>
Acked-by: "Eric W. Biederman" <ebiederm@xmission.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/vxlan.c')
-rw-r--r-- | drivers/net/vxlan.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/drivers/net/vxlan.c b/drivers/net/vxlan.c index f87a98f1aec2..51de9edb55f5 100644 --- a/drivers/net/vxlan.c +++ b/drivers/net/vxlan.c | |||
@@ -1136,6 +1136,9 @@ static __net_init int vxlan_init_net(struct net *net) | |||
1136 | pr_debug("UDP socket create failed\n"); | 1136 | pr_debug("UDP socket create failed\n"); |
1137 | return rc; | 1137 | return rc; |
1138 | } | 1138 | } |
1139 | /* Put in proper namespace */ | ||
1140 | sk = vn->sock->sk; | ||
1141 | sk_change_net(sk, net); | ||
1139 | 1142 | ||
1140 | vxlan_addr.sin_port = htons(vxlan_port); | 1143 | vxlan_addr.sin_port = htons(vxlan_port); |
1141 | 1144 | ||
@@ -1144,13 +1147,12 @@ static __net_init int vxlan_init_net(struct net *net) | |||
1144 | if (rc < 0) { | 1147 | if (rc < 0) { |
1145 | pr_debug("bind for UDP socket %pI4:%u (%d)\n", | 1148 | pr_debug("bind for UDP socket %pI4:%u (%d)\n", |
1146 | &vxlan_addr.sin_addr, ntohs(vxlan_addr.sin_port), rc); | 1149 | &vxlan_addr.sin_addr, ntohs(vxlan_addr.sin_port), rc); |
1147 | sock_release(vn->sock); | 1150 | sk_release_kernel(sk); |
1148 | vn->sock = NULL; | 1151 | vn->sock = NULL; |
1149 | return rc; | 1152 | return rc; |
1150 | } | 1153 | } |
1151 | 1154 | ||
1152 | /* Disable multicast loopback */ | 1155 | /* Disable multicast loopback */ |
1153 | sk = vn->sock->sk; | ||
1154 | inet_sk(sk)->mc_loop = 0; | 1156 | inet_sk(sk)->mc_loop = 0; |
1155 | 1157 | ||
1156 | /* Mark socket as an encapsulation socket. */ | 1158 | /* Mark socket as an encapsulation socket. */ |
@@ -1169,7 +1171,7 @@ static __net_exit void vxlan_exit_net(struct net *net) | |||
1169 | struct vxlan_net *vn = net_generic(net, vxlan_net_id); | 1171 | struct vxlan_net *vn = net_generic(net, vxlan_net_id); |
1170 | 1172 | ||
1171 | if (vn->sock) { | 1173 | if (vn->sock) { |
1172 | sock_release(vn->sock); | 1174 | sk_release_kernel(vn->sock->sk); |
1173 | vn->sock = NULL; | 1175 | vn->sock = NULL; |
1174 | } | 1176 | } |
1175 | } | 1177 | } |