unable to install leaked routes with krt_prefsrc set/how to unset an attribute?
Hello. I am currently trying to get route leaking to work on Linux with bird. I have several VRFs and want to leak some of the routes from one VRF into an other. For this I have several routing tables in bird, one kernel protocol per table and pipe protocols to leak to routes between the tables. This works as intended. However I have a problem when exporting my leaked routes to the kernel. I get the log message May 16 15:28:24 host-1 bird[7349]: kernel4: 0.0.0.0/0: reinstalling May 16 15:28:24 host-1 bird[7349]: Netlink: Invalid argument May 16 15:28:24 host-1 bird[7349]: kernel4: 172.21.0.1/32: reinstalling May 16 15:28:24 host-1 bird[7349]: Netlink: Invalid argument Those 2 routes are not installed into the corresponding kernel routing table. These are exactly the routes that have the Kernel.prefsrc/krt_prefsrc attribute set. If I try to install these routes manually with all the attributes they have in the bird routing table I get the error
root@host-1:~# ip r add table 5 0.0.0.0/0 via 172.21.0.1 dev vlan-uplink-1 metric 1024 src 172.21.0.153 Error: Invalid prefsrc address.
This is because the IP address that is used here comes from an other VRF where it is available however it is not available in the VRF I am trying to install it. (I also don't need the prefsrc option to where the route is installed.) If I add the route to the Linux FIB without the prefsrc value or with an IP address that is available in the corresponding VRF, then it works out as intended. A workaround that I found is to set the krt_prefsrc attribute on export to something that is available in the target VRF. However it would be nicer to simply remove the attribute. So is it possible to remove an attribute from a route in bird? Greetings Jo
Hello! unset(krt_prefsrc); Maria On 16 May 2023 15:51:07 CEST, jo+bird@swagspace.org wrote:
Hello.
I am currently trying to get route leaking to work on Linux with bird.
I have several VRFs and want to leak some of the routes from one VRF into an other. For this I have several routing tables in bird, one kernel protocol per table and pipe protocols to leak to routes between the tables. This works as intended. However I have a problem when exporting my leaked routes to the kernel.
I get the log message
May 16 15:28:24 host-1 bird[7349]: kernel4: 0.0.0.0/0: reinstalling May 16 15:28:24 host-1 bird[7349]: Netlink: Invalid argument May 16 15:28:24 host-1 bird[7349]: kernel4: 172.21.0.1/32: reinstalling May 16 15:28:24 host-1 bird[7349]: Netlink: Invalid argument
Those 2 routes are not installed into the corresponding kernel routing table. These are exactly the routes that have the Kernel.prefsrc/krt_prefsrc attribute set. If I try to install these routes manually with all the attributes they have in the bird routing table I get the error
root@host-1:~# ip r add table 5 0.0.0.0/0 via 172.21.0.1 dev vlan-uplink-1 metric 1024 src 172.21.0.153 Error: Invalid prefsrc address.
This is because the IP address that is used here comes from an other VRF where it is available however it is not available in the VRF I am trying to install it. (I also don't need the prefsrc option to where the route is installed.) If I add the route to the Linux FIB without the prefsrc value or with an IP address that is available in the corresponding VRF, then it works out as intended. A workaround that I found is to set the krt_prefsrc attribute on export to something that is available in the target VRF. However it would be nicer to simply remove the attribute. So is it possible to remove an attribute from a route in bird?
Greetings Jo
participants (2)
-
jo+bird@swagspace.org -
Maria Matejka