• David Ahern's avatar
    net: vrf: ipv4 support for local traffic to local addresses · afe80a49
    David Ahern authored
    Add support for locally originated traffic to VRF-local addresses. If
    destination device for an skb is the loopback or VRF device then set
    its dst to a local version of the VRF cached dst_entry and call netif_rx
    to insert the packet onto the rx queue - similar to what is done for
    loopback. This patch handles IPv4 support; follow on patch handles IPv6.
    
    With this patch, ping, tcp and udp packets to a local IPv4 address are
    successfully routed:
    
        $ ip addr show dev eth1
        4: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master red state UP group default qlen 1000
            link/ether 02:e0:f9:1c:b9:74 brd ff:ff:ff:ff:ff:ff
            inet 10.100.1.1/24 brd 10.100.1.255 scope global eth1
               valid_lft forever preferred_lft forever
            inet6 2100:1::1/120 scope global
               valid_lft forever preferred_lft forever
            inet6 fe80::e0:f9ff:fe1c:b974/64 scope link
               valid_lft forever preferred_lft forever
    
        $ ping -c1 -I red 10.100.1.1
        ping: Warning: source address might be selected on device other than red.
        PING 10.100.1.1 (10.100.1.1) from 10.100.1.1 red: 56(84) bytes of data.
        64 bytes from 10.100.1.1: icmp_seq=1 ttl=64 time=0.057 ms
    
    This patch also enables use of IPv4 loopback address on the VRF device:
        $ ip addr add dev red 127.0.0.1/8
    
        $ ping -c1 -I red 127.0.0.1
        PING 127.0.0.1 (127.0.0.1) from 127.0.0.1 red: 56(84) bytes of data.
        64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.058 ms
    Signed-off-by: default avatarDavid Ahern <dsa@cumulusnetworks.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    afe80a49
vrf.c 21.9 KB