BIRD performance in a dynamic scenario
Hi everyone, First of all, thanks a lot for BIRD ! I have some questions about the dynamicity of BIRD wiht BGP. In a scenario where routes needs to be updated accondingly depending on some external informations, I find out that those informations would need to be written into the BIRD configuration file. As an example, if we need to add a bgp community based on the peer address (already known), we would need something like that : ```bird function get_community_from_peer_address(ip addr) -> pair { case addr { <addr1> : (1,1) ; <addr2> : (245, 12434) ; … else : (0, 0) ; } } ``` And we could update that function if needed in the future but the configuration will need to be parsed each time. If the rate of update is high, it can become a bootleneck. So I would like to know if I am going the right direction doing that way ? Is there a plan for a direct API to BIRD internals instead of passing a configuration file ? Thanks in advance for your answer, Maxime Peim
Hello! You can add the comunity directly in the inbound filters of the peer -- Mykola Yakymenko NETassist On Tue, May 20, 2025 at 07:43:28AM +0000, Maxime Peim (mpeim) via Bird-users wrote:
Hi everyone,
First of all, thanks a lot for BIRD !
I have some questions about the dynamicity of BIRD wiht BGP. In a scenario where routes needs to be updated accondingly depending on some external informations, I find out that those informations would need to be written into the BIRD configuration file.
As an example, if we need to add a bgp community based on the peer address (already known), we would need something like that :
```bird function get_community_from_peer_address(ip addr) -> pair { case addr { <addr1> : (1,1) ; <addr2> : (245, 12434) ; … else : (0, 0) ; } } ```
And we could update that function if needed in the future but the configuration will need to be parsed each time. If the rate of update is high, it can become a bootleneck.
So I would like to know if I am going the right direction doing that way ? Is there a plan for a direct API to BIRD internals instead of passing a configuration file ?
Thanks in advance for your answer, Maxime Peim
Indeed, if you know the peer in advance, right ? What about dynamic neighbor ? De : Yakimus // Netassist NOC <yakimus@netassist.ua> Date : mardi, 20 mai 2025 à 15:56 À : Maxime Peim (mpeim) <mpeim@cisco.com> Cc : bird-users@network.cz <bird-users@network.cz> Objet : Re: BIRD performance in a dynamic scenario Hello! You can add the comunity directly in the inbound filters of the peer -- Mykola Yakymenko NETassist On Tue, May 20, 2025 at 07:43:28AM +0000, Maxime Peim (mpeim) via Bird-users wrote:
Hi everyone,
First of all, thanks a lot for BIRD !
I have some questions about the dynamicity of BIRD wiht BGP. In a scenario where routes needs to be updated accondingly depending on some external informations, I find out that those informations would need to be written into the BIRD configuration file.
As an example, if we need to add a bgp community based on the peer address (already known), we would need something like that :
```bird function get_community_from_peer_address(ip addr) -> pair { case addr { <addr1> : (1,1) ; <addr2> : (245, 12434) ; … else : (0, 0) ; } } ```
And we could update that function if needed in the future but the configuration will need to be parsed each time. If the rate of update is high, it can become a bootleneck.
So I would like to know if I am going the right direction doing that way ? Is there a plan for a direct API to BIRD internals instead of passing a configuration file ?
Thanks in advance for your answer, Maxime Peim
Any idea if there is a way for dynamic neighbours? De : Bird-users <bird-users-bounces@network.cz> de la part de Maxime Peim (mpeim) via Bird-users <bird-users@network.cz> Date : mercredi, 21 mai 2025 à 14:32 À : Yakimus // Netassist NOC <yakimus@netassist.ua> Cc : bird-users@network.cz <bird-users@network.cz> Objet : Re: BIRD performance in a dynamic scenario Indeed, if you know the peer in advance, right ? What about dynamic neighbor ? De : Yakimus // Netassist NOC <yakimus@netassist.ua> Date : mardi, 20 mai 2025 à 15:56 À : Maxime Peim (mpeim) <mpeim@cisco.com> Cc : bird-users@network.cz <bird-users@network.cz> Objet : Re: BIRD performance in a dynamic scenario Hello! You can add the comunity directly in the inbound filters of the peer -- Mykola Yakymenko NETassist On Tue, May 20, 2025 at 07:43:28AM +0000, Maxime Peim (mpeim) via Bird-users wrote:
Hi everyone,
First of all, thanks a lot for BIRD !
I have some questions about the dynamicity of BIRD wiht BGP. In a scenario where routes needs to be updated accondingly depending on some external informations, I find out that those informations would need to be written into the BIRD configuration file.
As an example, if we need to add a bgp community based on the peer address (already known), we would need something like that :
```bird function get_community_from_peer_address(ip addr) -> pair { case addr { <addr1> : (1,1) ; <addr2> : (245, 12434) ; … else : (0, 0) ; } } ```
And we could update that function if needed in the future but the configuration will need to be parsed each time. If the rate of update is high, it can become a bootleneck.
So I would like to know if I am going the right direction doing that way ? Is there a plan for a direct API to BIRD internals instead of passing a configuration file ?
Thanks in advance for your answer, Maxime Peim
Please clarify how do you describe the configuration for your dynamic peers? -- Mykola Yakymenko NETassist On Mon, May 26, 2025 at 06:40:33PM +0000, Maxime Peim (mpeim) wrote:
Any idea if there is a way for dynamic neighbours?
De : Bird-users <bird-users-bounces@network.cz> de la part de Maxime Peim (mpeim) via Bird-users <bird-users@network.cz> Date : mercredi, 21 mai 2025 à 14:32 À : Yakimus // Netassist NOC <yakimus@netassist.ua> Cc : bird-users@network.cz <bird-users@network.cz> Objet : Re: BIRD performance in a dynamic scenario Indeed, if you know the peer in advance, right ? What about dynamic neighbor ?
De : Yakimus // Netassist NOC <yakimus@netassist.ua> Date : mardi, 20 mai 2025 à 15:56 À : Maxime Peim (mpeim) <mpeim@cisco.com> Cc : bird-users@network.cz <bird-users@network.cz> Objet : Re: BIRD performance in a dynamic scenario Hello!
You can add the comunity directly in the inbound filters of the peer
-- Mykola Yakymenko NETassist
On Tue, May 20, 2025 at 07:43:28AM +0000, Maxime Peim (mpeim) via Bird-users wrote:
Hi everyone,
First of all, thanks a lot for BIRD !
I have some questions about the dynamicity of BIRD wiht BGP. In a scenario where routes needs to be updated accondingly depending on some external informations, I find out that those informations would need to be written into the BIRD configuration file.
As an example, if we need to add a bgp community based on the peer address (already known), we would need something like that :
```bird function get_community_from_peer_address(ip addr) -> pair { case addr { <addr1> : (1,1) ; <addr2> : (245, 12434) ; … else : (0, 0) ; } } ```
And we could update that function if needed in the future but the configuration will need to be parsed each time. If the rate of update is high, it can become a bootleneck.
So I would like to know if I am going the right direction doing that way ? Is there a plan for a direct API to BIRD internals instead of passing a configuration file ?
Thanks in advance for your answer, Maxime Peim
Sure ! Configuration example: ``` ipv4 table table_1; protocol bgp { local 10.0.0.1 as 65000 ; neighbor range 0.0.0.0/0 internal dynamic name "peer_"; dynamic name digits 4; router id 10.0.0.1; strict bind; ipv4 { table table_1; import filter import_policy_filter; export all; next hop address 10.0.0.1; }; } function get_community_from_peer_address(ip addr) -> pair { case addr { 10.0.1.1: (1,1) ; 10.0.2.1: (245, 12434) ; … else : (0, 0) ; } } Filter import_policy_filter { pair comm = get_community_from_peer_address(from); bgp_community.add(comm); } ``` I want to modify the route attributes based on the peer, but from a dynamic neighborship. You could argue that could just add a new `bgp` protocol with the correct neighbor address and filter but I work on a porject where we don’t about all the peers in advance and adding/removing multiple bgp/static/l3vpn protocols for each peers tends to slow down the process of configuration reloading. Hence I found a solution of having those functions with switch cases which allow me to do minimal changes in the configuration file. However, I found it a bit hacky and wanted your view on that. De : Yakimus // Netassist NOC <yakimus@netassist.ua> Date : lundi, 26 mai 2025 à 22:15 À : Maxime Peim (mpeim) <mpeim@cisco.com> Cc : bird-users@network.cz <bird-users@network.cz> Objet : Re: BIRD performance in a dynamic scenario Please clarify how do you describe the configuration for your dynamic peers? -- Mykola Yakymenko NETassist On Mon, May 26, 2025 at 06:40:33PM +0000, Maxime Peim (mpeim) wrote:
Any idea if there is a way for dynamic neighbours?
De : Bird-users <bird-users-bounces@network.cz> de la part de Maxime Peim (mpeim) via Bird-users <bird-users@network.cz> Date : mercredi, 21 mai 2025 à 14:32 À : Yakimus // Netassist NOC <yakimus@netassist.ua> Cc : bird-users@network.cz <bird-users@network.cz> Objet : Re: BIRD performance in a dynamic scenario Indeed, if you know the peer in advance, right ? What about dynamic neighbor ?
De : Yakimus // Netassist NOC <yakimus@netassist.ua> Date : mardi, 20 mai 2025 à 15:56 À : Maxime Peim (mpeim) <mpeim@cisco.com> Cc : bird-users@network.cz <bird-users@network.cz> Objet : Re: BIRD performance in a dynamic scenario Hello!
You can add the comunity directly in the inbound filters of the peer
-- Mykola Yakymenko NETassist
On Tue, May 20, 2025 at 07:43:28AM +0000, Maxime Peim (mpeim) via Bird-users wrote:
Hi everyone,
First of all, thanks a lot for BIRD !
I have some questions about the dynamicity of BIRD wiht BGP. In a scenario where routes needs to be updated accondingly depending on some external informations, I find out that those informations would need to be written into the BIRD configuration file.
As an example, if we need to add a bgp community based on the peer address (already known), we would need something like that :
```bird function get_community_from_peer_address(ip addr) -> pair { case addr { <addr1> : (1,1) ; <addr2> : (245, 12434) ; … else : (0, 0) ; } } ```
And we could update that function if needed in the future but the configuration will need to be parsed each time. If the rate of update is high, it can become a bootleneck.
So I would like to know if I am going the right direction doing that way ? Is there a plan for a direct API to BIRD internals instead of passing a configuration file ?
Thanks in advance for your answer, Maxime Peim
Do you have some ideas then? De : Bird-users <bird-users-bounces@network.cz> de la part de Maxime Peim (mpeim) via Bird-users <bird-users@network.cz> Date : lundi, 26 mai 2025 à 22:30 À : Yakimus // Netassist NOC <yakimus@netassist.ua> Cc : bird-users@network.cz <bird-users@network.cz> Objet : Re: BIRD performance in a dynamic scenario Sure ! Configuration example: ``` ipv4 table table_1; protocol bgp { local 10.0.0.1 as 65000 ; neighbor range 0.0.0.0/0 internal dynamic name "peer_"; dynamic name digits 4; router id 10.0.0.1; strict bind; ipv4 { table table_1; import filter import_policy_filter; export all; next hop address 10.0.0.1; }; } function get_community_from_peer_address(ip addr) -> pair { case addr { 10.0.1.1: (1,1) ; 10.0.2.1: (245, 12434) ; … else : (0, 0) ; } } Filter import_policy_filter { pair comm = get_community_from_peer_address(from); bgp_community.add(comm); } ``` I want to modify the route attributes based on the peer, but from a dynamic neighborship. You could argue that could just add a new `bgp` protocol with the correct neighbor address and filter but I work on a porject where we don’t about all the peers in advance and adding/removing multiple bgp/static/l3vpn protocols for each peers tends to slow down the process of configuration reloading. Hence I found a solution of having those functions with switch cases which allow me to do minimal changes in the configuration file. However, I found it a bit hacky and wanted your view on that. De : Yakimus // Netassist NOC <yakimus@netassist.ua> Date : lundi, 26 mai 2025 à 22:15 À : Maxime Peim (mpeim) <mpeim@cisco.com> Cc : bird-users@network.cz <bird-users@network.cz> Objet : Re: BIRD performance in a dynamic scenario Please clarify how do you describe the configuration for your dynamic peers? -- Mykola Yakymenko NETassist On Mon, May 26, 2025 at 06:40:33PM +0000, Maxime Peim (mpeim) wrote:
Any idea if there is a way for dynamic neighbours?
De : Bird-users <bird-users-bounces@network.cz> de la part de Maxime Peim (mpeim) via Bird-users <bird-users@network.cz> Date : mercredi, 21 mai 2025 à 14:32 À : Yakimus // Netassist NOC <yakimus@netassist.ua> Cc : bird-users@network.cz <bird-users@network.cz> Objet : Re: BIRD performance in a dynamic scenario Indeed, if you know the peer in advance, right ? What about dynamic neighbor ?
De : Yakimus // Netassist NOC <yakimus@netassist.ua> Date : mardi, 20 mai 2025 à 15:56 À : Maxime Peim (mpeim) <mpeim@cisco.com> Cc : bird-users@network.cz <bird-users@network.cz> Objet : Re: BIRD performance in a dynamic scenario Hello!
You can add the comunity directly in the inbound filters of the peer
-- Mykola Yakymenko NETassist
On Tue, May 20, 2025 at 07:43:28AM +0000, Maxime Peim (mpeim) via Bird-users wrote:
Hi everyone,
First of all, thanks a lot for BIRD !
I have some questions about the dynamicity of BIRD wiht BGP. In a scenario where routes needs to be updated accondingly depending on some external informations, I find out that those informations would need to be written into the BIRD configuration file.
As an example, if we need to add a bgp community based on the peer address (already known), we would need something like that :
```bird function get_community_from_peer_address(ip addr) -> pair { case addr { <addr1> : (1,1) ; <addr2> : (245, 12434) ; … else : (0, 0) ; } } ```
And we could update that function if needed in the future but the configuration will need to be parsed each time. If the rate of update is high, it can become a bootleneck.
So I would like to know if I am going the right direction doing that way ? Is there a plan for a direct API to BIRD internals instead of passing a configuration file ?
Thanks in advance for your answer, Maxime Peim
participants (2)
-
Maxime Peim (mpeim) -
Yakimus // Netassist NOC