Merge branch 'for-4.2/sg' of git://git.kernel.dk/linux-block
[firefly-linux-kernel-4.4.55.git] / include / net / ip_fib.h
index 54271ed0ed45b5b6ee5b8ffadd6aae01e0872bb8..49c142bdf01e67b55bcf59c2d1e63f6615783ea1 100644 (file)
@@ -226,7 +226,7 @@ static inline struct fib_table *fib_new_table(struct net *net, u32 id)
 }
 
 static inline int fib_lookup(struct net *net, const struct flowi4 *flp,
-                            struct fib_result *res)
+                            struct fib_result *res, unsigned int flags)
 {
        struct fib_table *tb;
        int err = -ENETUNREACH;
@@ -234,7 +234,7 @@ static inline int fib_lookup(struct net *net, const struct flowi4 *flp,
        rcu_read_lock();
 
        tb = fib_get_table(net, RT_TABLE_MAIN);
-       if (tb && !fib_table_lookup(tb, flp, res, FIB_LOOKUP_NOREF))
+       if (tb && !fib_table_lookup(tb, flp, res, flags | FIB_LOOKUP_NOREF))
                err = 0;
 
        rcu_read_unlock();
@@ -249,16 +249,18 @@ void __net_exit fib4_rules_exit(struct net *net);
 struct fib_table *fib_new_table(struct net *net, u32 id);
 struct fib_table *fib_get_table(struct net *net, u32 id);
 
-int __fib_lookup(struct net *net, struct flowi4 *flp, struct fib_result *res);
+int __fib_lookup(struct net *net, struct flowi4 *flp,
+                struct fib_result *res, unsigned int flags);
 
 static inline int fib_lookup(struct net *net, struct flowi4 *flp,
-                            struct fib_result *res)
+                            struct fib_result *res, unsigned int flags)
 {
        struct fib_table *tb;
        int err;
 
+       flags |= FIB_LOOKUP_NOREF;
        if (net->ipv4.fib_has_custom_rules)
-               return __fib_lookup(net, flp, res);
+               return __fib_lookup(net, flp, res, flags);
 
        rcu_read_lock();
 
@@ -266,11 +268,11 @@ static inline int fib_lookup(struct net *net, struct flowi4 *flp,
 
        for (err = 0; !err; err = -ENETUNREACH) {
                tb = rcu_dereference_rtnl(net->ipv4.fib_main);
-               if (tb && !fib_table_lookup(tb, flp, res, FIB_LOOKUP_NOREF))
+               if (tb && !fib_table_lookup(tb, flp, res, flags))
                        break;
 
                tb = rcu_dereference_rtnl(net->ipv4.fib_default);
-               if (tb && !fib_table_lookup(tb, flp, res, FIB_LOOKUP_NOREF))
+               if (tb && !fib_table_lookup(tb, flp, res, flags))
                        break;
        }
 
@@ -305,9 +307,9 @@ void fib_flush_external(struct net *net);
 
 /* Exported by fib_semantics.c */
 int ip_fib_check_default(__be32 gw, struct net_device *dev);
-int fib_sync_down_dev(struct net_device *dev, int force);
+int fib_sync_down_dev(struct net_device *dev, unsigned long event);
 int fib_sync_down_addr(struct net *net, __be32 local);
-int fib_sync_up(struct net_device *dev);
+int fib_sync_up(struct net_device *dev, unsigned int nh_flags);
 void fib_select_multipath(struct fib_result *res);
 
 /* Exported by fib_trie.c */