diff options
author | Denis V. Lunev <den@openvz.org> | 2008-01-23 02:49:35 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2008-01-28 18:11:12 -0500 |
commit | eee80592c3c1f7381c04913d9d3eb6e3c3c87628 (patch) | |
tree | e8c7bd98745450abbb290d35ef531c7c9673ba4c /include/net/route.h | |
parent | 7ba699c604ab811972eee2e041fd6b07659a2e6e (diff) |
[NETNS]: Correct namespace for connect-time routing.
ip_route_connect and ip_route_newports are a part of routing API
presented to the socket layer. The namespace is available inside them
through a socket.
Signed-off-by: Denis V. Lunev <den@openvz.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include/net/route.h')
-rw-r--r-- | include/net/route.h | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/include/net/route.h b/include/net/route.h index d9b876adbf42..1985d820edea 100644 --- a/include/net/route.h +++ b/include/net/route.h | |||
@@ -33,6 +33,7 @@ | |||
33 | #include <linux/ip.h> | 33 | #include <linux/ip.h> |
34 | #include <linux/cache.h> | 34 | #include <linux/cache.h> |
35 | #include <linux/security.h> | 35 | #include <linux/security.h> |
36 | #include <net/sock.h> | ||
36 | 37 | ||
37 | #ifndef __KERNEL__ | 38 | #ifndef __KERNEL__ |
38 | #warning This file is not supposed to be used outside of kernel. | 39 | #warning This file is not supposed to be used outside of kernel. |
@@ -157,8 +158,9 @@ static inline int ip_route_connect(struct rtable **rp, __be32 dst, | |||
157 | .dport = dport } } }; | 158 | .dport = dport } } }; |
158 | 159 | ||
159 | int err; | 160 | int err; |
161 | struct net *net = sk->sk_net; | ||
160 | if (!dst || !src) { | 162 | if (!dst || !src) { |
161 | err = __ip_route_output_key(&init_net, rp, &fl); | 163 | err = __ip_route_output_key(net, rp, &fl); |
162 | if (err) | 164 | if (err) |
163 | return err; | 165 | return err; |
164 | fl.fl4_dst = (*rp)->rt_dst; | 166 | fl.fl4_dst = (*rp)->rt_dst; |
@@ -167,7 +169,7 @@ static inline int ip_route_connect(struct rtable **rp, __be32 dst, | |||
167 | *rp = NULL; | 169 | *rp = NULL; |
168 | } | 170 | } |
169 | security_sk_classify_flow(sk, &fl); | 171 | security_sk_classify_flow(sk, &fl); |
170 | return ip_route_output_flow(&init_net, rp, &fl, sk, flags); | 172 | return ip_route_output_flow(net, rp, &fl, sk, flags); |
171 | } | 173 | } |
172 | 174 | ||
173 | static inline int ip_route_newports(struct rtable **rp, u8 protocol, | 175 | static inline int ip_route_newports(struct rtable **rp, u8 protocol, |
@@ -184,7 +186,7 @@ static inline int ip_route_newports(struct rtable **rp, u8 protocol, | |||
184 | ip_rt_put(*rp); | 186 | ip_rt_put(*rp); |
185 | *rp = NULL; | 187 | *rp = NULL; |
186 | security_sk_classify_flow(sk, &fl); | 188 | security_sk_classify_flow(sk, &fl); |
187 | return ip_route_output_flow(&init_net, rp, &fl, sk, 0); | 189 | return ip_route_output_flow(sk->sk_net, rp, &fl, sk, 0); |
188 | } | 190 | } |
189 | return 0; | 191 | return 0; |
190 | } | 192 | } |