]> err.no Git - linux-2.6/commitdiff
[NETNS]: Add netns parameter to fib_lookup.
authorDenis V. Lunev <den@openvz.org>
Tue, 22 Jan 2008 01:31:55 +0000 (17:31 -0800)
committerDavid S. Miller <davem@davemloft.net>
Mon, 28 Jan 2008 23:10:19 +0000 (15:10 -0800)
Signed-off-by: Denis V. Lunev <den@openvz.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/net/ip_fib.h
net/ipv4/fib_frontend.c
net/ipv4/fib_rules.c
net/ipv4/fib_semantics.c
net/ipv4/route.c

index f580542f08ed29a9912dec81d72bbbe3da0359f2..a8591243418911df5958e8db8d781ccf22af2c04 100644 (file)
@@ -178,15 +178,16 @@ static inline struct fib_table *fib_new_table(struct net *net, u32 id)
        return fib_get_table(net, id);
 }
 
-static inline int fib_lookup(const struct flowi *flp, struct fib_result *res)
+static inline int fib_lookup(struct net *net, const struct flowi *flp,
+                            struct fib_result *res)
 {
        struct fib_table *table;
 
-       table = fib_get_table(&init_net, RT_TABLE_LOCAL);
+       table = fib_get_table(net, RT_TABLE_LOCAL);
        if (!table->tb_lookup(table, flp, res))
                return 0;
 
-       table = fib_get_table(&init_net, RT_TABLE_MAIN);
+       table = fib_get_table(net, RT_TABLE_MAIN);
        if (!table->tb_lookup(table, flp, res))
                return 0;
        return -ENETUNREACH;
@@ -208,7 +209,7 @@ extern void __net_exit fib4_rules_exit(struct net *net);
 extern u32 fib_rules_tclass(struct fib_result *res);
 #endif
 
-extern int fib_lookup(struct flowi *flp, struct fib_result *res);
+extern int fib_lookup(struct net *n, struct flowi *flp, struct fib_result *res);
 
 extern struct fib_table *fib_new_table(struct net *net, u32 id);
 extern struct fib_table *fib_get_table(struct net *net, u32 id);
index 8987046d97f3246fcf279d46abe587d2898413bb..e056154076b3d1c130cbe58dc37d538a6ccf7664 100644 (file)
@@ -241,7 +241,7 @@ int fib_validate_source(__be32 src, __be32 dst, u8 tos, int oif,
        if (in_dev == NULL)
                goto e_inval;
 
-       if (fib_lookup(&fl, &res))
+       if (fib_lookup(&init_net, &fl, &res))
                goto last_resort;
        if (res.type != RTN_UNICAST)
                goto e_inval_res;
@@ -265,7 +265,7 @@ int fib_validate_source(__be32 src, __be32 dst, u8 tos, int oif,
        fl.oif = dev->ifindex;
 
        ret = 0;
-       if (fib_lookup(&fl, &res) == 0) {
+       if (fib_lookup(&init_net, &fl, &res) == 0) {
                if (res.type == RTN_UNICAST) {
                        *spec_dst = FIB_RES_PREFSRC(res);
                        ret = FIB_RES_NH(res).nh_scope >= RT_SCOPE_HOST;
index d2001f1c28a271accb227e330d87027b755f6001..1effb4ab688ce4568f87f0ae28583b8c3f99faf8 100644 (file)
@@ -54,14 +54,14 @@ u32 fib_rules_tclass(struct fib_result *res)
 }
 #endif
 
-int fib_lookup(struct flowi *flp, struct fib_result *res)
+int fib_lookup(struct net *net, struct flowi *flp, struct fib_result *res)
 {
        struct fib_lookup_arg arg = {
                .result = res,
        };
        int err;
 
-       err = fib_rules_lookup(init_net.ipv4.rules_ops, flp, 0, &arg);
+       err = fib_rules_lookup(net->ipv4.rules_ops, flp, 0, &arg);
        res->r = arg.rule;
 
        return err;
index 0e08df4d6f9a5549e583ccd4241d99e7f1e6da6c..ecd91c60975f2618746217d62f347b1551cc3546 100644 (file)
@@ -559,7 +559,7 @@ static int fib_check_nh(struct fib_config *cfg, struct fib_info *fi,
                        /* It is not necessary, but requires a bit of thinking */
                        if (fl.fl4_scope < RT_SCOPE_LINK)
                                fl.fl4_scope = RT_SCOPE_LINK;
-                       if ((err = fib_lookup(&fl, &res)) != 0)
+                       if ((err = fib_lookup(&init_net, &fl, &res)) != 0)
                                return err;
                }
                err = -EINVAL;
index f80c761ea0bba20cde2738c920aacfb7a40789b7..a7651c64bb48c62b84841462bbda9d383fcbed54 100644 (file)
@@ -1559,7 +1559,7 @@ void ip_rt_get_source(u8 *addr, struct rtable *rt)
 
        if (rt->fl.iif == 0)
                src = rt->rt_src;
-       else if (fib_lookup(&rt->fl, &res) == 0) {
+       else if (fib_lookup(&init_net, &rt->fl, &res) == 0) {
                src = FIB_RES_PREFSRC(res);
                fib_res_put(&res);
        } else
@@ -1911,7 +1911,7 @@ static int ip_route_input_slow(struct sk_buff *skb, __be32 daddr, __be32 saddr,
        /*
         *      Now we are ready to route packet.
         */
-       if ((err = fib_lookup(&fl, &res)) != 0) {
+       if ((err = fib_lookup(&init_net, &fl, &res)) != 0) {
                if (!IN_DEV_FORWARD(in_dev))
                        goto e_hostunreach;
                goto no_route;
@@ -2363,7 +2363,7 @@ static int ip_route_output_slow(struct rtable **rp, const struct flowi *oldflp)
                goto make_route;
        }
 
-       if (fib_lookup(&fl, &res)) {
+       if (fib_lookup(&init_net, &fl, &res)) {
                res.fi = NULL;
                if (oldflp->oif) {
                        /* Apparently, routing tables are wrong. Assume,