net/ipv6/route.c: packets originating on device match lo
authorDavid McCullough <david_mccullough@mcafee.com>
Mon, 25 Jun 2012 15:42:26 +0000 (15:42 +0000)
committerDavid S. Miller <davem@davemloft.net>
Tue, 26 Jun 2012 06:54:32 +0000 (23:54 -0700)
Fix to allow IPv6 packets originating locally to match rules with the "iff"
set to "lo".  This allows IPv6 rule matching work the same as it does for
IPv4.  From the iproute2 man page:

   iif NAME
  select  the incoming device to match.  If the interface is loop‐
  back, the rule only matches packets originating from this  host.
  This  means that you may create separate routing tables for for‐
  warded and local packets and, hence, completely segregate them.

Signed-off-by: David McCullough <david_mccullough@mcafee.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/ipv6/route.c

index c5bbece7f9f2a2619f3af781874fbd177c435ded..c518e4ec0cea13f71eaafe9a2761fc7d58d35103 100644 (file)
@@ -937,6 +937,8 @@ struct dst_entry * ip6_route_output(struct net *net, const struct sock *sk,
 {
        int flags = 0;
 
+       fl6->flowi6_iif = net->loopback_dev->ifindex;
+
        if ((sk && sk->sk_bound_dev_if) || rt6_need_strict(&fl6->daddr))
                flags |= RT6_LOOKUP_F_IFACE;