Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

bgpd: fix ipv4-mapped ipv6 use cases #17019

Draft
wants to merge 18 commits into
base: master
Choose a base branch
from

Commits on Oct 7, 2024

  1. topotests: add an ebgp 6vpe test

    This test uses the connected ipv4 mapped ipv6 prefix
    to resolve the received BGP routes.
    
    Signed-off-by: Louis Scalbert <louis.scalbert@6wind.com>
    Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
    Signed-off-by: François Dumontet <francois.dumontet@6wind.com>
    pguibert6WIND authored and louis-6wind committed Oct 7, 2024
    Configuration menu
    Copy the full SHA
    e78b216 View commit details
    Browse the repository at this point in the history
  2. bgpd: optimize bgp_interface_address_add

    Move common checks outside of the loop.
    
    Signed-off-by: Louis Scalbert <louis.scalbert@6wind.com>
    louis-6wind committed Oct 7, 2024
    Configuration menu
    Copy the full SHA
    c5ea446 View commit details
    Browse the repository at this point in the history
  3. bgpd: reduce bgp_interface_address_add indentation

    Reduce bgp_interface_address_add indentation
    
    Signed-off-by: Louis Scalbert <louis.scalbert@6wind.com>
    louis-6wind committed Oct 7, 2024
    Configuration menu
    Copy the full SHA
    9f29bf8 View commit details
    Browse the repository at this point in the history
  4. bgpd: log new ipv6 global in bgp_interface_address_add

    Log new IPv6 global address in bgp_interface_address_add
    
    Signed-off-by: Louis Scalbert <louis.scalbert@6wind.com>
    louis-6wind committed Oct 7, 2024
    Configuration menu
    Copy the full SHA
    a6a9322 View commit details
    Browse the repository at this point in the history
  5. bgpd: fix sending ipv6 local nexthop if global present

    bgpd keeps on advertising IPv6 prefixes with a IPv6 link-local nexthop
    after a valid IPv6 global appears.
    
    At bgpd startup, the IPv6 global is announced by zebra after the
    link-local. Only the link-local is advertised. Clearing the BGP sessions
    make the global to to be announced.
    
    Update the nexthops with the global IPv6 when available.
    
    Signed-off-by: Louis Scalbert <louis.scalbert@6wind.com>
    louis-6wind committed Oct 7, 2024
    Configuration menu
    Copy the full SHA
    3b84b32 View commit details
    Browse the repository at this point in the history
  6. topotests: add bgp_nexthop_mp_ipv4_6 test

    Add bgp_nexthop_mp_ipv4_6 topotest to test to nexhop value with
    MP-BGP IPv4 and IPv6 on IPv4 peering. The test has route-reflector,
    route-server, iBGP and eBGP peers.
    
    Signed-off-by: Louis Scalbert <louis.scalbert@6wind.com>
    louis-6wind committed Oct 7, 2024
    Configuration menu
    Copy the full SHA
    5b3c646 View commit details
    Browse the repository at this point in the history
  7. bgpd: optimize bgp_interface_address_del

    Move common checks outside of the loop.
    
    Signed-off-by: Louis Scalbert <louis.scalbert@6wind.com>
    louis-6wind committed Oct 7, 2024
    Configuration menu
    Copy the full SHA
    76b121d View commit details
    Browse the repository at this point in the history
  8. bgpd: fix removing ipv6 global nexhop

    When the IPv6 global is removed on an interface towards a peer, the
    IPv6 nexthop global that is sent is a IPv4-mapped IPv6 address. It
    should be the link-local.
    
    At removal, replace the global by the next global address or the
    link-local as last resort.
    
    Signed-off-by: Louis Scalbert <louis.scalbert@6wind.com>
    louis-6wind committed Oct 7, 2024
    Configuration menu
    Copy the full SHA
    6cc1a5d View commit details
    Browse the repository at this point in the history
  9. bgpd: fix "used" json key on link-local nexthop

    When a peer has no IPv6 global address to send as nexthop, it sends the
    IPv6 link-local instead as global. "show bgp ipv6 json" displays the
    same address in global and link-local scopes.
    
    > "nexthops": [
    >   {
    >     "ip": "fe80::a495:38ff:fea6:6ea3",
    >     "afi": "ipv6",
    >     "scope": "global",
    >     "used": true
    >   },
    >   {
    >     "ip": "fe80::a495:38ff:fea6:6ea3",
    >     "afi": "ipv6",
    >     "scope": "link-local"
    >   }
    > ]
    
    However, "used" key is set on the global nexthop but not in link-local.
    It is correct but it makes difficult to test JSON to expect the usage of
    a link-local. The contrary is also correct.
    
    Set "used" key on the link-local nexhop instead to facilitate the tests.
    
    Signed-off-by: Louis Scalbert <louis.scalbert@6wind.com>
    louis-6wind committed Oct 7, 2024
    Configuration menu
    Copy the full SHA
    771c98a View commit details
    Browse the repository at this point in the history
  10. tests: ipv6 global removal in bgp_nexthop_mp_ipv4_6

    Test ipv6 global removal in bgp_nexthop_mp_ipv4_6
    
    Signed-off-by: Louis Scalbert <louis.scalbert@6wind.com>
    louis-6wind committed Oct 7, 2024
    Configuration menu
    Copy the full SHA
    baaced7 View commit details
    Browse the repository at this point in the history
  11. bgpd: set ipv4-mapped ipv6 for ipv4 with ipv6 nexthop

    The code was expected that no IPv6 global address was present but the
    previous commit was replacing nexthop.v6global by the link-local address
    instead of un-setting it in case of removal of the IPv6 global.
    
    Set also ipv4-mapped ipv6 address as nexthop when a link-local is found
    and it is an ipv4 prefix over ipv6 nexthop.
    
    Signed-off-by: Louis Scalbert <louis.scalbert@6wind.com>
    louis-6wind committed Oct 7, 2024
    Configuration menu
    Copy the full SHA
    ce2b15c View commit details
    Browse the repository at this point in the history
  12. bgpd: prefer link-local to a ipv4-mapped ipv6 global

    When a peer sends an IPv4-mapped IPv6 global and a IPv6 link-local
    nexthop, prefer the link-local unless a route-map tells to use the
    global.
    
    Signed-off-by: Louis Scalbert <louis.scalbert@6wind.com>
    louis-6wind committed Oct 7, 2024
    Configuration menu
    Copy the full SHA
    975af27 View commit details
    Browse the repository at this point in the history
  13. topotests: update bgp_vrf_leaking_5549_routes

    Before the patch-set, ce1 was sending an IPv6 Link-local as global and
    link-local nexthop to pe1.
    
    Set bgp_vrf_leaking_5549_routes in accordance with the previous fixes.
    
    Signed-off-by: Louis Scalbert <louis.scalbert@6wind.com>
    louis-6wind committed Oct 7, 2024
    Configuration menu
    Copy the full SHA
    f3c825d View commit details
    Browse the repository at this point in the history
  14. bgpd: fix ipv4-mapped ipv6 for ipv6 over ipv4 peer

    When IPv6 prefixes are sent over an IPv4 session, the UPDATE is sent
    with a link-local nexthop as global nexthop instead of a IPv4-mapped
    IPv6 address. If the peer interface has no IPv6 address, routes are
    not installed.
    
    Seen with bgp_nexthop_mp_ipv4_6 topotests on step2:
    
    > root@r2:/# vtysh -c 'show bgp ipv6 fd00:100::/64 json' | jq .
    > {
    >   "prefix": "fd00:100::/64",
    >   "paths": [
    >     {
    >       "nexthops": [
    >         {
    >           "ip": "fe80::449a:f8ff:fe67:1f93",
    >           "hostname": "r1",
    >           "afi": "ipv6",
    >           "scope": "global",
    >           "metric": 0,
    >           "accessible": true
    >         },
    >         {
    >           "ip": "fe80::449a:f8ff:fe67:1f93",
    >           "hostname": "r1",
    >           "afi": "ipv6",
    >           "scope": "link-local",
    >           "accessible": true,
    >           "used": true
    >         }
    >       ],
    >     }
    >   ]
    > }
    
    Now:
    
    > root@r2:/# vtysh -c 'show bgp ipv6 fd00:100::/64 json' | jq .
    > {
    >   "prefix": "fd00:100::/64",
    >   "paths": [
    >       "nexthops": [
    >         {
    >           "ip": "::ffff:172.16.0.1",
    >           "hostname": "r1",
    >           "afi": "ipv6",
    >           "scope": "global",
    >           "metric": 0,
    >           "accessible": true
    >         },
    >         {
    >           "ip": "fe80::3842:28ff:fe90:f815",
    >           "hostname": "r1",
    >           "afi": "ipv6",
    >           "scope": "link-local",
    >           "accessible": true,
    >           "used": true
    >         }
    >       ],
    >     }
    >   ]
    > }
    
    Note that the link-local is still preferred over the global address.
    
    Fixes: 25995695f5 ("bgpd: set ipv4-mapped ipv6 for ipv4 with ipv6 nexthop")
    Signed-off-by: Louis Scalbert <louis.scalbert@6wind.com>
    louis-6wind committed Oct 7, 2024
    Configuration menu
    Copy the full SHA
    43cf690 View commit details
    Browse the repository at this point in the history
  15. bgpd: fix nexthop resolution of ipv4-mapped ipv6

    Fix nexthop resolution of ipv4-mapped ipv6 nexthop addresses.
    
    Fixes: 5dd731a ("bgpd: prefer link-local to a ipv4-mapped ipv6 global")
    Signed-off-by: Louis Scalbert <louis.scalbert@6wind.com>
    louis-6wind committed Oct 7, 2024
    Configuration menu
    Copy the full SHA
    ff37609 View commit details
    Browse the repository at this point in the history
  16. bgpd: replace ipv4-mapped ipv6 at update forwarding

    Replace IPv4-mapped IPv6 at update forwarding because the peer may not
    be able to create a route with the IPv4-mapped IPv6.
    
    Signed-off-by: Louis Scalbert <louis.scalbert@6wind.com>
    louis-6wind committed Oct 7, 2024
    Configuration menu
    Copy the full SHA
    929a070 View commit details
    Browse the repository at this point in the history
  17. topotests: bgp_nexthop_mp_ipv4_6, test ipv4-mapped

    Test that a IPv4-mapped IPv6 is sent from a peer that has no global IPv6
    address.
    
    Signed-off-by: Louis Scalbert <louis.scalbert@6wind.com>
    louis-6wind committed Oct 7, 2024
    Configuration menu
    Copy the full SHA
    bd8f81a View commit details
    Browse the repository at this point in the history
  18. bgpd: Do not use mapped IPv4/IPv6 addresses for unnumbered peering

    Before:
    
    ```
    router bgp 4283023031
     bgp router-id 100.83.23.31
     neighbor leafs peer-group
     neighbor leafs remote-as external
     neighbor eth1 interface peer-group leafs
     !
     address-family ipv4 unicast
      network 100.83.23.31/32
     exit-address-family
     !
    exit
    ```
    
    ```
    leaf2# show ip bgp 100.83.23.31/32
    …
      4283023031
        ::ffff:6453:171f (inaccessible) from node31-h23-osl3(swp32) (100.83.23.31)
        (fe80::a6bf:1ff:fe2d:689a) (used)
          Origin IGP, metric 0, invalid, external
          Last update: Tue Aug 13 08:36:46 2024
    ```
    
    Fixes: fc5a738 ("bgpd: set ipv4-mapped ipv6 for ipv4 with ipv6 nexthop")
    
    Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
    ton31337 authored and louis-6wind committed Oct 7, 2024
    Configuration menu
    Copy the full SHA
    4b983b5 View commit details
    Browse the repository at this point in the history