OSDN Git Service

netfilter: nft_fib: Convert nft_fib4_eval to new dev helper
authorDavid Ahern <dsahern@gmail.com>
Thu, 20 Sep 2018 20:50:49 +0000 (13:50 -0700)
committerDavid S. Miller <davem@davemloft.net>
Fri, 21 Sep 2018 03:01:53 +0000 (20:01 -0700)
Convert nft_fib4_eval to the new device checking helper and
remove the duplicate code.

Signed-off-by: David Ahern <dsahern@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/ipv4/netfilter/nft_fib_ipv4.c

index e50976e..94eb25b 100644 (file)
@@ -76,10 +76,7 @@ void nft_fib4_eval(const struct nft_expr *expr, struct nft_regs *regs,
                .flowi4_iif = LOOPBACK_IFINDEX,
        };
        const struct net_device *oif;
-       struct net_device *found;
-#ifdef CONFIG_IP_ROUTE_MULTIPATH
-       int i;
-#endif
+       const struct net_device *found;
 
        /*
         * Do not set flowi4_oif, it restricts results (for example, asking
@@ -146,25 +143,13 @@ void nft_fib4_eval(const struct nft_expr *expr, struct nft_regs *regs,
 
        if (!oif) {
                found = FIB_RES_DEV(res);
-               goto ok;
-       }
-
-#ifdef CONFIG_IP_ROUTE_MULTIPATH
-       for (i = 0; i < res.fi->fib_nhs; i++) {
-               struct fib_nh *nh = &res.fi->fib_nh[i];
+       } else {
+               if (!fib_info_nh_uses_dev(res.fi, oif))
+                       return;
 
-               if (nh->nh_dev == oif) {
-                       found = nh->nh_dev;
-                       goto ok;
-               }
+               found = oif;
        }
-       return;
-#else
-       found = FIB_RES_DEV(res);
-       if (found != oif)
-               return;
-#endif
-ok:
+
        switch (priv->result) {
        case NFT_FIB_RESULT_OIF:
                *dest = found->ifindex;