ipv4: Change rt->rt_iif encoding.
authorDavid S. Miller <davem@davemloft.net>
Mon, 23 Jul 2012 20:57:45 +0000 (13:57 -0700)
committerDavid S. Miller <davem@davemloft.net>
Mon, 23 Jul 2012 23:36:27 +0000 (16:36 -0700)
On input packet processing, rt->rt_iif will be zero if we should
use skb->dev->ifindex.

Since we access rt->rt_iif consistently via inet_iif(), that is
the only spot whose interpretation have to adjust.

Signed-off-by: David S. Miller <davem@davemloft.net>
include/net/route.h
net/ipv4/route.c

index 60d611d..c29ef27 100644 (file)
@@ -277,7 +277,11 @@ static inline struct rtable *ip_route_newports(struct flowi4 *fl4, struct rtable
 
 static inline int inet_iif(const struct sk_buff *skb)
 {
-       return skb_rtable(skb)->rt_iif;
+       int iif = skb_rtable(skb)->rt_iif;
+
+       if (iif)
+               return iif;
+       return skb->skb_iif;
 }
 
 extern int sysctl_ip_default_ttl;
index f6be781..6bcb8fc 100644 (file)
@@ -1309,7 +1309,7 @@ static int ip_route_input_mc(struct sk_buff *skb, __be32 daddr, __be32 saddr,
        rth->rt_flags   = RTCF_MULTICAST;
        rth->rt_type    = RTN_MULTICAST;
        rth->rt_is_input= 1;
-       rth->rt_iif     = dev->ifindex;
+       rth->rt_iif     = 0;
        rth->rt_pmtu    = 0;
        rth->rt_gateway = 0;
        if (our) {
@@ -1435,7 +1435,7 @@ static int __mkroute_input(struct sk_buff *skb,
        rth->rt_flags = flags;
        rth->rt_type = res->type;
        rth->rt_is_input = 1;
-       rth->rt_iif     = in_dev->dev->ifindex;
+       rth->rt_iif     = 0;
        rth->rt_pmtu    = 0;
        rth->rt_gateway = 0;
 
@@ -1608,7 +1608,7 @@ local_input:
        rth->rt_flags   = flags|RTCF_LOCAL;
        rth->rt_type    = res.type;
        rth->rt_is_input = 1;
-       rth->rt_iif     = dev->ifindex;
+       rth->rt_iif     = 0;
        rth->rt_pmtu    = 0;
        rth->rt_gateway = 0;
        if (res.type == RTN_UNREACHABLE) {
@@ -1772,7 +1772,7 @@ static struct rtable *__mkroute_output(const struct fib_result *res,
        rth->rt_flags   = flags;
        rth->rt_type    = type;
        rth->rt_is_input = 0;
-       rth->rt_iif     = orig_oif ? : dev_out->ifindex;
+       rth->rt_iif     = orig_oif ? : 0;
        rth->rt_pmtu    = 0;
        rth->rt_gateway = 0;