Skip to content
Snippets Groups Projects
  1. Sep 16, 2022
  2. Sep 06, 2022
    • Maria Matejka's avatar
      Better profylaction recursive route loops · 71b3456e
      Maria Matejka authored
      In some specific configurations, it was possible to send BIRD into an
      infinite loop of recursive next hop resolution. This was caused by route
      priority inversion.
      
      To prevent priority inversions affecting other next hops, we simply
      refuse to resolve any next hop if the best route for the matching prefix
      is recursive or any other route with the same preference is recursive.
      
      Next hop resolution doesn't change route priority, therefore it is
      perfectly OK to resolve BGP next hops e.g. by an OSPF route, yet if the
      same (or covering) prefix is also announced by iBGP, by retraction of
      the OSPF route we would get a possible priority inversion.
      71b3456e
  3. Aug 18, 2022
  4. Aug 03, 2022
  5. Jul 27, 2022
  6. Jul 26, 2022
    • Ondřej Zajíček's avatar
      Netlink: Restrict route replace for IPv6 · ddb1bdf2
      Ondřej Zajíček authored
      Seems like the previous patch was too optimistic, as route replace is
      still broken even in Linux 4.19 LTS (but fixed in Linux 5.10 LTS) for:
      
        ip route add 2001:db8::/32 via fe80::1 dev eth0
        ip route replace 2001:db8::/32 dev eth0
      
      It ends with two routes instead of just the second.
      
      The issue is limited to direct and special type (e.g. unreachable)
      routes, the patch restricts route replace for cases when the new route
      is a regular route (with a next hop address).
      ddb1bdf2
  7. Jul 25, 2022
    • Ondřej Zajíček's avatar
      Netlink: Simplify handling of IPv6 ECMP routes · 722daa95
      Ondřej Zajíček authored
      When IPv6 ECMP support first appeared in Linux kernel, it used different
      API than IPv4 ECMP. Individual next hops were updated and announced
      separately, instead of using RTA_MULTIPATH as in IPv4. This has several
      drawbacks and requires complex code to merge received notifications to
      one multipath route.
      
      When Linux came with IPv6 RTA_MULTIPATH support, the initial versions
      were somewhat buggy, so we kept using the old API for updates (splitting
      multipath routes to sequences of route updates), while accepting both
      old-style routes and RTA_MULTIPATH routes in scans / notifications.
      
      As IPv6 RTA_MULTIPATH support is here for a long time, this patch fully
      switches Netlink to the IPv6 RTA_MULTIPATH API and removes old complex
      code for handling individual next hop announces.
      
      The required Linux version is at least 4.11 for reliable operation.
      
      Thanks to Daniel Gröber for the original patch.
      722daa95
  8. Jul 24, 2022
    • Ondřej Zajíček's avatar
      Merge branch 'master' into backport · 2e484f8d
      Ondřej Zajíček authored
      2e484f8d
    • Ondřej Zajíček's avatar
      KRT: Scan routing tables separetely on linux to avoid congestion · 534d0a4b
      Ondřej Zajíček authored
      Remove compile-time sysdep option CONFIG_ALL_TABLES_AT_ONCE, replace it
      with runtime ability to run either separate table scans or shared scan.
      
      On Linux, use separate table scans by default when the netlink socket
      option NETLINK_GET_STRICT_CHK is available, but retreat to shared scan
      when it fails.
      
      Running separate table scans has advantages where some routing tables are
      managed independently, e.g. when multiple routing daemons are running on
      the same machine, as kernel routing table modification performance is
      significantly reduced when the table is modified while it is being
      scanned.
      
      Thanks Daniel Gröber for the original patch and Toke Høiland-Jørgensen
      for suggestions.
      534d0a4b
  9. Jul 22, 2022
  10. Jul 12, 2022
  11. Jul 11, 2022
  12. Jul 10, 2022
  13. Jun 27, 2022
  14. Jun 16, 2022
  15. Jun 07, 2022
  16. Jun 05, 2022
    • Ondřej Zajíček's avatar
      Babel: Do not try to remove multicast seqno request objects from neighbour list · ad686c55
      Ondřej Zajíček authored
      The Babel seqno request code keeps track of which seqno requests are
      outstanding for a neighbour by putting them onto a per-neighbour list. When
      reusing a seqno request, it will try to remove this node, but if the seqno
      request in question was a multicast request with no neighbour attached this
      will result in a crash because it tries to remove a list node that wasn't
      added to any list.
      
      Fix this by making the list remove conditional. Also fix neighbor removal
      which were changing seqno requests to multicast ones instead of removing
      them.
      
      Fixes: ebd5751c ("Babel: Seqno requests are properly decoupled from
      neighbors when the underlying interface disappears").
      
      Based on the patch from Toke Høiland-Jørgensen <toke@toke.dk>,
      bug reported by Stefan Haller <stefan.haller@stha.de>, thanks.
      ad686c55
  17. Jun 04, 2022
    • Ondřej Zajíček's avatar
    • Ondřej Zajíček's avatar
      Nest: Improve GC strategy for rtables · a8a3d95b
      Ondřej Zajíček authored
      Use timer (configurable as 'gc period') to schedule routing table
      GC/pruning to ensure that prune is done on time but not too often.
      
      Randomize GC timers to avoid concentration of GC events from different
      tables in one loop cycle.
      
      Fix a bug that caused minimum inter-GC interval be 5 us instead of 5 s.
      
      Make default 'gc period' adaptive based on number of routing tables,
      from 10 s for small setups to 600 s for large ones.
      
      In marge multi-table RS setup, the patch improved time of flushing
      a downed peer from 20-30 min to <2 min and removed 40s latencies.
      a8a3d95b
Loading