• Vinay K Nallamothu's avatar
    mpls: Fix 6PE forwarding · f84532ce
    Vinay K Nallamothu authored
    This patch adds support for 6PE (RFC 4798) which uses IPv4-mapped IPv6
    nexthop to connect IPv6 islands over IPv4 only MPLS network core.
    
    Prior to this fix, to find the link-layer destination mac address, 6PE
    enabled host/router was sending IPv6 ND requests for IPv4-mapped IPv6
    nexthop address over the interface facing the IPv4 only core which
    wouldn't success as the core is IPv6 free.
    
    This fix changes that behavior on 6PE host to treat the nexthop as IPv4
    address and send ARP requests whenever the next-hop address is an
    IPv4-mapped IPv6 address.
    
    Below topology illustrates the issue and how the patch addresses it.
    
    abcd::1.1.1.1 (lo)                                              abcd::2.2.2.2 (lo)
    R0 (PE/host)------------------------R1--------------------------------R2 (PE/host)
                <--- IPv4 MPLS core --->   <------ IPv4 MPLS core -------->
               eth1               eth2       eth3                       eth4
              172.18.0.10     172.18.0.11   172.19.0.11              172.19.0.12
        ffff::172.18.0.10                                      ffff::172.19.0.12
                <------------------IPv6 MPLS tunnel ---------------------->
    
    R0 and R2 act as 6PE routers of IPv6 islands. R1 is IPv4 only with MPLS tunnels
    between R0,R1 and R1,R2.
    
     docker exec r0 ip -f inet6 route add abcd::2.2.2.2/128 nexthop encap mpls 100 via ::ffff:172.18.0.11 dev eth1
     docker exec r2 ip -f inet6 route add abcd::1.1.1.1/128 nexthop encap mpls 200 via ::ffff:172.19.0.11 dev eth4
    
     docker exec r1 ip -f mpls route add 100 via inet 172.19.0.12 dev eth3
     docker exec r1 ip -f mpls route add 200 via inet 172.18.0.10 dev eth2
    
    With the change, when R0 sends an IPv6 packet over MPLS tunnel to abcd::2.2.2.2,
    using ::ffff:172.18.0.11 as the nexthop, it does neighbor discovery for
    172.18.18.0.11.
    Signed-off-by: default avatarVinay K Nallamothu <nvinay@juniper.net>
    Tested-by: default avatarAvinash Lingala <ar977m@att.com>
    Tested-by: default avatarAravind Srinivas Srinivasa Prabhakar <aprabh@juniper.net>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    f84532ce
mpls_iptunnel.c 7.82 KB