[quagga-dev 5290] Re: Zebra and IFF_UP weird interface behavior

Milan Kocian milon at wq.cz
Thu Mar 13 16:31:06 GMT 2008


On Wed, Mar 12, 2008 at 02:53:29PM -0700, Michael Larson wrote:
> Hello,
> 
> We're seeing a problem with zebra and setting the interface admin (IFF_UP) flag. Specifically, if the configured interface is administratively downed and upped zebra writes the following error to syslog:
> 
> "Can't set interface's address: Resource temporarily unavailable"
> 
> This error is generated by if_addr_wakeup() in zebra/interface.c on the IFF_UP=true event. Zebra skips further processing on this interface after failing to set the address.
> 
> The reason for the failure is that (linux 2.6.23) on an IFF_UP=false event the IP address is not removed from the interface and when zebra attempts to set the address on the following IFF_UP=true event it  fails.
> 
> A further IFF_DOWN event will cause zebra to appear to hang (or at least subsequent vtysh commands hang).
> 
> 
> This behavior can be fixed by removing the "continue;" statement immediately following this logged error message in if_addr_wakeup().
> 
> 
> If we apply this code change zebra will no longer hang, but we are seeing another error where static routes are not reinserted back into the rib after the first IFF_UP=false, then IFF_UP=true event.
> 
> On the first IFF_UP=false event the static route will show that it is "unknown" rather than the expected "inactive" state (via show ip route).
> 
> I haven't solved this last issue and I'm not entirely convinced that removing the "continue" statement in order to solve the first problem is the correct fix (although zebra shouldn't fail on reinserting the address if the failure is due to the address already being present on the interface). 
> 
> We're using a cut of the latest quagga source tree (this behavior is also in v0.99.9).
> 
> Mike
> 
hello, 

Do you have loaded ipv6 module ? Did you try to test kernel 2.6.24 ? In
2.6.24 was fixed small bug in sending netlink messege on interface down event.
(ipv6 module sended RTM_DELLINK message on interface down event and
quagga deleted all ip addresses in internal db. After up event quagga didn't
know anything about ip's on inteface)

Regards,

-- 
Milan Kocian



More information about the Quagga-dev mailing list