]> nv-tegra.nvidia Code Review - linux-2.6.git/blobdiff - net/ipv4/fib_frontend.c
ipv4: fib table algorithm performance improvement
[linux-2.6.git] / net / ipv4 / fib_frontend.c
index e2f950592566ac93267dbd20bc85473d4a759d48..f73dbed0f0d71ddb5cfdd939f14176351fec84b1 100644 (file)
@@ -125,7 +125,7 @@ void fib_select_default(struct net *net,
 #endif
        tb = fib_get_table(net, table);
        if (FIB_RES_GW(*res) && FIB_RES_NH(*res).nh_scope == RT_SCOPE_LINK)
-               tb->tb_select_default(tb, flp, res);
+               fib_table_select_default(tb, flp, res);
 }
 
 static void fib_flush(struct net *net)
@@ -139,7 +139,7 @@ static void fib_flush(struct net *net)
        for (h = 0; h < FIB_TABLE_HASHSZ; h++) {
                head = &net->ipv4.fib_table_hash[h];
                hlist_for_each_entry(tb, node, head, tb_hlist)
-                       flushed += tb->tb_flush(tb);
+                       flushed += fib_table_flush(tb);
        }
 
        if (flushed)
@@ -162,7 +162,7 @@ struct net_device * ip_dev_find(struct net *net, __be32 addr)
 #endif
 
        local_table = fib_get_table(net, RT_TABLE_LOCAL);
-       if (!local_table || local_table->tb_lookup(local_table, &fl, &res))
+       if (!local_table || fib_table_lookup(local_table, &fl, &res))
                return NULL;
        if (res.type != RTN_LOCAL)
                goto out;
@@ -200,7 +200,7 @@ static inline unsigned __inet_dev_addr_type(struct net *net,
        local_table = fib_get_table(net, RT_TABLE_LOCAL);
        if (local_table) {
                ret = RTN_UNICAST;
-               if (!local_table->tb_lookup(local_table, &fl, &res)) {
+               if (!fib_table_lookup(local_table, &fl, &res)) {
                        if (!dev || dev == res.fi->fib_dev)
                                ret = res.type;
                        fib_res_put(&res);
@@ -473,13 +473,13 @@ int ip_rt_ioctl(struct net *net, unsigned int cmd, void __user *arg)
                        if (cmd == SIOCDELRT) {
                                tb = fib_get_table(net, cfg.fc_table);
                                if (tb)
-                                       err = tb->tb_delete(tb, &cfg);
+                                       err = fib_table_delete(tb, &cfg);
                                else
                                        err = -ESRCH;
                        } else {
                                tb = fib_new_table(net, cfg.fc_table);
                                if (tb)
-                                       err = tb->tb_insert(tb, &cfg);
+                                       err = fib_table_insert(tb, &cfg);
                                else
                                        err = -ENOBUFS;
                        }
@@ -594,7 +594,7 @@ static int inet_rtm_delroute(struct sk_buff *skb, struct nlmsghdr *nlh, void *ar
                goto errout;
        }
 
-       err = tb->tb_delete(tb, &cfg);
+       err = fib_table_delete(tb, &cfg);
 errout:
        return err;
 }
@@ -616,7 +616,7 @@ static int inet_rtm_newroute(struct sk_buff *skb, struct nlmsghdr *nlh, void *ar
                goto errout;
        }
 
-       err = tb->tb_insert(tb, &cfg);
+       err = fib_table_insert(tb, &cfg);
 errout:
        return err;
 }
@@ -647,7 +647,7 @@ static int inet_dump_fib(struct sk_buff *skb, struct netlink_callback *cb)
                        if (dumped)
                                memset(&cb->args[2], 0, sizeof(cb->args) -
                                                 2 * sizeof(cb->args[0]));
-                       if (tb->tb_dump(tb, skb, cb) < 0)
+                       if (fib_table_dump(tb, skb, cb) < 0)
                                goto out;
                        dumped = 1;
 next:
@@ -701,9 +701,9 @@ static void fib_magic(int cmd, int type, __be32 dst, int dst_len, struct in_ifad
                cfg.fc_scope = RT_SCOPE_HOST;
 
        if (cmd == RTM_NEWROUTE)
-               tb->tb_insert(tb, &cfg);
+               fib_table_insert(tb, &cfg);
        else
-               tb->tb_delete(tb, &cfg);
+               fib_table_delete(tb, &cfg);
 }
 
 void fib_add_ifaddr(struct in_ifaddr *ifa)
@@ -832,7 +832,7 @@ static void nl_fib_lookup(struct fib_result_nl *frn, struct fib_table *tb )
                local_bh_disable();
 
                frn->tb_id = tb->tb_id;
-               frn->err = tb->tb_lookup(tb, &fl, &res);
+               frn->err = fib_table_lookup(tb, &fl, &res);
 
                if (!frn->err) {
                        frn->prefixlen = res.prefixlen;
@@ -1009,7 +1009,7 @@ static void __net_exit ip_fib_net_exit(struct net *net)
                head = &net->ipv4.fib_table_hash[i];
                hlist_for_each_entry_safe(tb, node, tmp, head, tb_hlist) {
                        hlist_del(node);
-                       tb->tb_flush(tb);
+                       fib_table_flush(tb);
                        kfree(tb);
                }
        }