[Cerowrt-devel] atomic route updates?

Robert Bradley robert.bradley1 at gmail.com
Wed Apr 24 09:27:04 EDT 2013

On 20/04/13 10:56, Dave Taht wrote:
> iproute2's ip/iproute2.c code has a function called iproute_modify,
> which to a blurring eye appears to be capable of doing an atomic route
> update via it's netlink interface.
> "        if (matches(*argv, "change") == 0 || strcmp(*argv, "chg") == 0)
>                  return iproute_modify(RTM_NEWROUTE, NLM_F_REPLACE,
>                                        argc-1, argv+1);
>          if (matches(*argv, "replace") == 0)
>                  return iproute_modify(RTM_NEWROUTE, NLM_F_CREATE|NLM_F_REPLACE,
>                                        argc-1, argv+1);"
> The babel  native daemon and the quagga-re code, however, does a
> delete/add, which results in packets dropping on the floor when a
> route changes.

I think quagga-RE would take a lot of work, as you'd need to teach it 
about modifying routes.  The standalone babeld looks promising though, 
and I have a basic patch up on GitHub 
(git://github.com/rb12345/babeld.git).  One issue is that it seems 
difficult to actually flush the IPv6 route cache, at least on Ubuntu, as 
writes to /proc/sys/net/ipv6/route/flush appear to be ignored.  The 
iproute2 approach is to query all cached routes and misuse its internal 
print_route function to remove each route when flushing the IPv6 cache.

At the moment, the code compiles fine, and I am in the process of 
testing it here.

Robert Bradley

More information about the Cerowrt-devel mailing list