BFD socket bind error upon reboot

J. Kendzorra juergen at kendzorra.de
Wed Aug 15 11:23:33 CEST 2018


Hi,

> Generally, BIRD should not try to use an address before it notices that
> the address is available/active. If BIRD tries to bind the socket before
> that, then it is a bug.

This seems to be a common pattern for services that are started when 
network is supposedly ready, but it really isn't (see many discussions 
around network.target vs. network-online.target).

> Which BIRD version it is? It is an IPv6 address? Which protocol caused
> the BFD session or it is static one? I would suspect that the issue
> is related to IPv6 DAD.

Unfortunately, that's not the case; we have BFD enabled only for IPv4

protocol bfd bfd_internal {
   neighbor 192.168.1.2;
(...)
   neighbor 192.168.1.10;
};

We're running bird 1.6.3-3 (Ubuntu Bionic).
The error I've seen when the BFD sessions didn't come up was this:
<ERR> bfd_internal: Socket error: bind: Cannot assign requested address

Since the listeners on ports 3784 and 4784 are wildcard binds, those 
shouldn't generate the error. However, there's a tx socket for 
communication with BFD peers on a random port (192.168.1.1:38164 as of 
today :) which I believe is the reason for the error message. Since the 
interface in question is a vlan on top of a bond (with multiple NICs 
involved), my working theory has been that upon reboot bird tried 
binding to 192.168.1.1:0 but since this interface wasn't fully 
available, got EADDRNOTAVAIL returned and BFD broke as a result. Note 
that I was able to restart the protocol later (birdc restart 
bfd_internal) which immediately made things work.
I added some debug code to the sections where the BFD protocol binds 
sockets to catch when the bind happens and the error occurs (to support 
my theory), however I haven't been able to replicate the problem yet.

Regards,
J.


More information about the Bird-users mailing list