提交 f1b050bf 编写于 作者: D Denis V. Lunev 提交者: David S. Miller

[NETNS]: Add namespace parameter to ip_route_output_flow.

Needed to propagate it down to the __ip_route_output_key.

Signed_off_by: Denis V. Lunev <den@openvz.org>
Signed-off-by: NDavid S. Miller <davem@davemloft.net>
上级 611c183e
...@@ -332,7 +332,7 @@ static struct rtable *find_route(struct t3cdev *dev, __be32 local_ip, ...@@ -332,7 +332,7 @@ static struct rtable *find_route(struct t3cdev *dev, __be32 local_ip,
} }
}; };
if (ip_route_output_flow(&rt, &fl, NULL, 0)) if (ip_route_output_flow(&init_net, &rt, &fl, NULL, 0))
return NULL; return NULL;
return rt; return rt;
} }
......
...@@ -112,7 +112,7 @@ extern void ip_rt_redirect(__be32 old_gw, __be32 dst, __be32 new_gw, ...@@ -112,7 +112,7 @@ extern void ip_rt_redirect(__be32 old_gw, __be32 dst, __be32 new_gw,
extern void rt_cache_flush(int how); extern void rt_cache_flush(int how);
extern int __ip_route_output_key(struct net *, struct rtable **, const struct flowi *flp); extern int __ip_route_output_key(struct net *, struct rtable **, const struct flowi *flp);
extern int ip_route_output_key(struct rtable **, struct flowi *flp); extern int ip_route_output_key(struct rtable **, struct flowi *flp);
extern int ip_route_output_flow(struct rtable **rp, struct flowi *flp, struct sock *sk, int flags); extern int ip_route_output_flow(struct net *, struct rtable **rp, struct flowi *flp, struct sock *sk, int flags);
extern int ip_route_input(struct sk_buff*, __be32 dst, __be32 src, u8 tos, struct net_device *devin); extern int ip_route_input(struct sk_buff*, __be32 dst, __be32 src, u8 tos, struct net_device *devin);
extern unsigned short ip_rt_frag_needed(struct iphdr *iph, unsigned short new_mtu); extern unsigned short ip_rt_frag_needed(struct iphdr *iph, unsigned short new_mtu);
extern void ip_rt_send_redirect(struct sk_buff *skb); extern void ip_rt_send_redirect(struct sk_buff *skb);
...@@ -167,7 +167,7 @@ static inline int ip_route_connect(struct rtable **rp, __be32 dst, ...@@ -167,7 +167,7 @@ static inline int ip_route_connect(struct rtable **rp, __be32 dst,
*rp = NULL; *rp = NULL;
} }
security_sk_classify_flow(sk, &fl); security_sk_classify_flow(sk, &fl);
return ip_route_output_flow(rp, &fl, sk, flags); return ip_route_output_flow(&init_net, rp, &fl, sk, flags);
} }
static inline int ip_route_newports(struct rtable **rp, u8 protocol, static inline int ip_route_newports(struct rtable **rp, u8 protocol,
...@@ -184,7 +184,7 @@ static inline int ip_route_newports(struct rtable **rp, u8 protocol, ...@@ -184,7 +184,7 @@ static inline int ip_route_newports(struct rtable **rp, u8 protocol,
ip_rt_put(*rp); ip_rt_put(*rp);
*rp = NULL; *rp = NULL;
security_sk_classify_flow(sk, &fl); security_sk_classify_flow(sk, &fl);
return ip_route_output_flow(rp, &fl, sk, 0); return ip_route_output_flow(&init_net, rp, &fl, sk, 0);
} }
return 0; return 0;
} }
......
...@@ -469,7 +469,7 @@ static struct dst_entry* dccp_v4_route_skb(struct sock *sk, ...@@ -469,7 +469,7 @@ static struct dst_entry* dccp_v4_route_skb(struct sock *sk,
}; };
security_skb_classify_flow(skb, &fl); security_skb_classify_flow(skb, &fl);
if (ip_route_output_flow(&rt, &fl, sk, 0)) { if (ip_route_output_flow(&init_net, &rt, &fl, sk, 0)) {
IP_INC_STATS_BH(IPSTATS_MIB_OUTNOROUTES); IP_INC_STATS_BH(IPSTATS_MIB_OUTNOROUTES);
return NULL; return NULL;
} }
......
...@@ -1113,7 +1113,7 @@ int inet_sk_rebuild_header(struct sock *sk) ...@@ -1113,7 +1113,7 @@ int inet_sk_rebuild_header(struct sock *sk)
}; };
security_sk_classify_flow(sk, &fl); security_sk_classify_flow(sk, &fl);
err = ip_route_output_flow(&rt, &fl, sk, 0); err = ip_route_output_flow(&init_net, &rt, &fl, sk, 0);
} }
if (!err) if (!err)
sk_setup_caps(sk, &rt->u.dst); sk_setup_caps(sk, &rt->u.dst);
......
...@@ -333,7 +333,7 @@ struct dst_entry* inet_csk_route_req(struct sock *sk, ...@@ -333,7 +333,7 @@ struct dst_entry* inet_csk_route_req(struct sock *sk,
.dport = ireq->rmt_port } } }; .dport = ireq->rmt_port } } };
security_req_classify_flow(req, &fl); security_req_classify_flow(req, &fl);
if (ip_route_output_flow(&rt, &fl, sk, 0)) { if (ip_route_output_flow(&init_net, &rt, &fl, sk, 0)) {
IP_INC_STATS_BH(IPSTATS_MIB_OUTNOROUTES); IP_INC_STATS_BH(IPSTATS_MIB_OUTNOROUTES);
return NULL; return NULL;
} }
......
...@@ -350,7 +350,7 @@ int ip_queue_xmit(struct sk_buff *skb, int ipfragok) ...@@ -350,7 +350,7 @@ int ip_queue_xmit(struct sk_buff *skb, int ipfragok)
* itself out. * itself out.
*/ */
security_sk_classify_flow(sk, &fl); security_sk_classify_flow(sk, &fl);
if (ip_route_output_flow(&rt, &fl, sk, 0)) if (ip_route_output_flow(&init_net, &rt, &fl, sk, 0))
goto no_route; goto no_route;
} }
sk_setup_caps(sk, &rt->u.dst); sk_setup_caps(sk, &rt->u.dst);
......
...@@ -558,7 +558,7 @@ static int raw_sendmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg, ...@@ -558,7 +558,7 @@ static int raw_sendmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg,
} }
security_sk_classify_flow(sk, &fl); security_sk_classify_flow(sk, &fl);
err = ip_route_output_flow(&rt, &fl, sk, 1); err = ip_route_output_flow(&init_net, &rt, &fl, sk, 1);
} }
if (err) if (err)
goto done; goto done;
......
...@@ -2533,11 +2533,12 @@ static int ipv4_dst_blackhole(struct rtable **rp, struct flowi *flp, struct sock ...@@ -2533,11 +2533,12 @@ static int ipv4_dst_blackhole(struct rtable **rp, struct flowi *flp, struct sock
return (rt ? 0 : -ENOMEM); return (rt ? 0 : -ENOMEM);
} }
int ip_route_output_flow(struct rtable **rp, struct flowi *flp, struct sock *sk, int flags) int ip_route_output_flow(struct net *net, struct rtable **rp, struct flowi *flp,
struct sock *sk, int flags)
{ {
int err; int err;
if ((err = __ip_route_output_key(&init_net, rp, flp)) != 0) if ((err = __ip_route_output_key(net, rp, flp)) != 0)
return err; return err;
if (flp->proto) { if (flp->proto) {
...@@ -2560,7 +2561,7 @@ EXPORT_SYMBOL_GPL(ip_route_output_flow); ...@@ -2560,7 +2561,7 @@ EXPORT_SYMBOL_GPL(ip_route_output_flow);
int ip_route_output_key(struct rtable **rp, struct flowi *flp) int ip_route_output_key(struct rtable **rp, struct flowi *flp)
{ {
return ip_route_output_flow(rp, flp, NULL, 0); return ip_route_output_flow(&init_net, rp, flp, NULL, 0);
} }
static int rt_fill_info(struct sk_buff *skb, u32 pid, u32 seq, int event, static int rt_fill_info(struct sk_buff *skb, u32 pid, u32 seq, int event,
......
...@@ -660,7 +660,7 @@ int udp_sendmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg, ...@@ -660,7 +660,7 @@ int udp_sendmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg,
{ .sport = inet->sport, { .sport = inet->sport,
.dport = dport } } }; .dport = dport } } };
security_sk_classify_flow(sk, &fl); security_sk_classify_flow(sk, &fl);
err = ip_route_output_flow(&rt, &fl, sk, 1); err = ip_route_output_flow(&init_net, &rt, &fl, sk, 1);
if (err) { if (err) {
if (err == -ENETUNREACH) if (err == -ENETUNREACH)
IP_INC_STATS_BH(IPSTATS_MIB_OUTNOROUTES); IP_INC_STATS_BH(IPSTATS_MIB_OUTNOROUTES);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册