Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
[safe/jmp/linux-2.6] / include / net / ip_fib.h
index 8b12667..c93f94e 100644 (file)
@@ -124,14 +124,12 @@ struct fib_result_nl {
 #ifdef CONFIG_IP_ROUTE_MULTIPATH
 
 #define FIB_RES_NH(res)                ((res).fi->fib_nh[(res).nh_sel])
-#define FIB_RES_RESET(res)     ((res).nh_sel = 0)
 
 #define FIB_TABLE_HASHSZ 2
 
 #else /* CONFIG_IP_ROUTE_MULTIPATH */
 
 #define FIB_RES_NH(res)                ((res).fi->fib_nh[0])
-#define FIB_RES_RESET(res)
 
 #define FIB_TABLE_HASHSZ 256
 
@@ -145,20 +143,22 @@ struct fib_result_nl {
 struct fib_table {
        struct hlist_node tb_hlist;
        u32             tb_id;
-       unsigned        tb_stamp;
        int             tb_default;
-       int             (*tb_lookup)(struct fib_table *tb, const struct flowi *flp, struct fib_result *res);
-       int             (*tb_insert)(struct fib_table *, struct fib_config *);
-       int             (*tb_delete)(struct fib_table *, struct fib_config *);
-       int             (*tb_dump)(struct fib_table *table, struct sk_buff *skb,
-                                    struct netlink_callback *cb);
-       int             (*tb_flush)(struct fib_table *table);
-       void            (*tb_select_default)(struct fib_table *table,
-                                            const struct flowi *flp, struct fib_result *res);
-
        unsigned char   tb_data[0];
 };
 
+extern int fib_table_lookup(struct fib_table *tb, const struct flowi *flp,
+                           struct fib_result *res);
+extern int fib_table_insert(struct fib_table *, struct fib_config *);
+extern int fib_table_delete(struct fib_table *, struct fib_config *);
+extern int fib_table_dump(struct fib_table *table, struct sk_buff *skb,
+                         struct netlink_callback *cb);
+extern int fib_table_flush(struct fib_table *table);
+extern void fib_table_select_default(struct fib_table *table,
+                                    const struct flowi *flp,
+                                    struct fib_result *res);
+
+
 #ifndef CONFIG_IP_MULTIPLE_TABLES
 
 #define TABLE_LOCAL_INDEX      0
@@ -185,11 +185,11 @@ static inline int fib_lookup(struct net *net, const struct flowi *flp,
        struct fib_table *table;
 
        table = fib_get_table(net, RT_TABLE_LOCAL);
-       if (!table->tb_lookup(table, flp, res))
+       if (!fib_table_lookup(table, flp, res))
                return 0;
 
        table = fib_get_table(net, RT_TABLE_MAIN);
-       if (!table->tb_lookup(table, flp, res))
+       if (!fib_table_lookup(table, flp, res))
                return 0;
        return -ENETUNREACH;
 }
@@ -213,7 +213,8 @@ extern struct fib_table *fib_get_table(struct net *net, u32 id);
 extern const struct nla_policy rtm_ipv4_policy[];
 extern void            ip_fib_init(void);
 extern int fib_validate_source(__be32 src, __be32 dst, u8 tos, int oif,
-                              struct net_device *dev, __be32 *spec_dst, u32 *itag);
+                              struct net_device *dev, __be32 *spec_dst,
+                              u32 *itag, u32 mark);
 extern void fib_select_default(struct net *net, const struct flowi *flp,
                               struct fib_result *res);