BGP strict bind socket error
Ben Tremblay
ben at tremblay.dev
Tue Jan 7 21:45:43 CET 2020
Hi all,
I have encountered a problem with how BIRD opens the listening socket for strict bind BGP.
In particular, BIRD sometimes tries to open the listening socket for the protocol when the configured local IP is not yet present on the interface. It seems that BIRD will try to bind the BGP socket to the configured IP if any address exists on the protocol interface that can be used to reach the neighbor. Let me give an example to clarify.
I have a minimal reproducible example with the following BGP configuration:
router id 192.168.0.1;
protocol device {
scan time 10;
}
protocol bgp bgp_01 {
ipv4 {
import all;
export all;
};
debug all;
local 192.168.0.1 port 179 as 1;
neighbor 192.168.0.2 port 179 as 1;
interface "host1";
direct;
strict bind yes;
}
Given this configuration, I can reproduce the problem behaviour by starting the protocol with no addressing on the host1 interface and then adding an address which includes the neighbor IP in its subnet, e.g. 192.168.0.3/24. Once this address/route is added, BIRD logs the following:
Jan 07 12:09:31 router03 bird[57497]: bgp_01: Neighbor ready
Jan 07 12:09:31 router03 bird[57497]: bgp_01: Socket error: bind: Cannot assign requested address
Jan 07 12:09:31 router03 bird[57497]: bgp_01: Cannot open listening socket
And the protocol enters an error state:
BIRD 2.0.6 ready.
Name Proto Table State Since Info
device1 Device --- up 11:55:51.049
bgp_01 BGP --- down 12:09:31.264 Error: No listening socket
The reason this error is so problematic for me is that the protocol cannot recover from this state without administrative intervention (e.g. configuring bird or restarting the protocol).
So, I have two questions:
1. Is this correct behaviour?
2. Can I configure BIRD so that my protocol is able to recover after suffering a socket error like this?
I should also mention I can actually observe this socket error occur when adding the 'correct' address to the protocol interface, but only in the context of a larger application and only some of the time.
Thanks,
Ben
More information about the Bird-users
mailing list