BIRD 2.0.{7,10} MED not actually send for learned routes if export table on is set
Inrin
inrin at caesia.net
Sun Oct 16 14:04:51 CEST 2022
Addendum:
Using iBGP with export tables and setting the MED works.
On Sun, Oct 16, 2022 at 11:17:23AM +0200, Inrin via Bird-users wrote:
>Greetings,
>
>I noticed during setting up a peering that the MED is not actually send
>to my peer, although bird shows it in the export.
>We confirmed this via tcpdump on both ends.
>
>After debugging a bit, I noticed that this only affects “learned” routes
>but routes from the static protocol worked just fine.
>
>After disabling the “export table” feature, the MED was send out just
>fine.
>
>Is this behaviour expected?
>
>This behaviour is reproducible in BIRD 2.0.7 and 2.0.10 with the
>following scenario (Configs to test are attached):
>
> R0 is connected to R1 and R2
> R0, R1 and R2 send each one route
> R0 sets the MED to 300
> R1 sets the MED to 100
> R2 sets the MED to 200
>
>Setting “export table on;” yields the following results:
>
># Bird shows the MED in the export
>R0 $ ./birdc s r all export R1
>BIRD 2.0.10 ready.
>Table master4:
>198.18.0.0/24 unicast [static1 02:05:56.604] * (200)
> Type: static univ
> BGP.med: 300
>198.18.2.0/24 unicast [R2 02:11:51.132 from 198.19.0.2] * (100) [AS4242420002i]
> Type: BGP univ
> BGP.origin: IGP
> BGP.as_path: 4242420002
> BGP.next_hop: 198.19.0.2
> BGP.med: 300
> BGP.local_pref: 100
>R0 $ ./birdc s r all export R2
>BIRD 2.0.10 ready.
>Table master4:
>198.18.0.0/24 unicast [static1 02:05:56.604] * (200)
> Type: static univ
> BGP.med: 300
>198.18.1.0/24 unicast [R1 02:11:51.133 from 198.19.0.1] * (100) [AS4242420001i]
> Type: BGP univ
> BGP.origin: IGP
> BGP.as_path: 4242420001
> BGP.next_hop: 198.19.0.1
> BGP.med: 300
> BGP.local_pref: 100
>R0 #
>
>But on R1, R2 it does not appear for learned routes:
>R1 $ ./birdc s r all protocol R0
>BIRD 2.0.10 ready.
>Table master4:
>198.18.0.0/24 unicast [R0 02:11:51.133 from 198.19.0.0] * (100) [AS4242420000i]
> Type: BGP univ
> BGP.origin: IGP
> BGP.as_path: 4242420000
> BGP.next_hop: 198.19.0.0
> BGP.med: 300
> BGP.local_pref: 100
>198.18.2.0/24 unicast [R0 02:11:51.133 from 198.19.0.0] * (100) [AS4242420002i]
> Type: BGP univ
> BGP.origin: IGP
> BGP.as_path: 4242420000 4242420002
> BGP.next_hop: 198.19.0.0
> BGP.local_pref: 100
>R1 $
>
>R2 $ ./birdc s r all protocol R0
>BIRD 2.0.10 ready.
>Table master4:
>198.18.0.0/24 unicast [R0 02:11:51.132 from 198.19.0.0] * (100) [AS4242420000i]
> Type: BGP univ
> BGP.origin: IGP
> BGP.as_path: 4242420000
> BGP.next_hop: 198.19.0.0
> BGP.med: 300
> BGP.local_pref: 100
>198.18.1.0/24 unicast [R0 02:11:51.133 from 198.19.0.0] * (100) [AS4242420001i]
> Type: BGP univ
> BGP.origin: IGP
> BGP.as_path: 4242420000 4242420001
> BGP.next_hop: 198.19.0.0
> BGP.local_pref: 100
>R2 $
>
>
>Setting “export table off;” yield the expected result:
>R1 $ ./birdc s r all protocol R0
>BIRD 2.0.10 ready.
>Table master4:
>198.18.0.0/24 unicast [R0 03:15:47.147 from 198.19.0.0] * (100) [AS4242420000i]
> Type: BGP univ
> BGP.origin: IGP
> BGP.as_path: 4242420000
> BGP.next_hop: 198.19.0.0
> BGP.med: 300
> BGP.local_pref: 100
>198.18.2.0/24 unicast [R0 03:15:50.635 from 198.19.0.0] * (100) [AS4242420002i]
> Type: BGP univ
> BGP.origin: IGP
> BGP.as_path: 4242420000 4242420002
> BGP.next_hop: 198.19.0.0
> BGP.med: 300
> BGP.local_pref: 100
>R1 $
>
>R2 $ ./birdc s r all protocol R0
>BIRD 2.0.10 ready.
>Table master4:
>198.18.0.0/24 unicast [R0 03:15:50.635 from 198.19.0.0] * (100) [AS4242420000i]
> Type: BGP univ
> BGP.origin: IGP
> BGP.as_path: 4242420000
> BGP.next_hop: 198.19.0.0
> BGP.med: 300
> BGP.local_pref: 100
>198.18.1.0/24 unicast [R0 03:15:50.635 from 198.19.0.0] * (100) [AS4242420001i]
> Type: BGP univ
> BGP.origin: IGP
> BGP.as_path: 4242420000 4242420001
> BGP.next_hop: 198.19.0.0
> BGP.med: 300
> BGP.local_pref: 100
>R2 $
>protocol static { route 198.18.0.0/24 reject; ipv4 {}; }
>template bgp rs_peers {
> local 198.19.0.0 port 1179 as 4242420000;
> ipv4 {
> import table off;
> export table on;
> import all;
> export filter {
> if source ~ [RTS_STATIC, RTS_BGP] then {
> bgp_med = 300;
> accept;
> }
> reject;
> };
> };
>};
>
>protocol bgp R1 from rs_peers {
> neighbor 198.19.0.1 port 1179 as 4242420001;
>};
>protocol bgp R2 from rs_peers {
> neighbor 198.19.0.2 port 1179 as 4242420002;
>};
>protocol static { route 198.18.1.0/24 reject; ipv4 { }; }
>protocol bgp R0 {
> ipv4 {
> import all;
> export filter {
> if source ~ [RTS_STATIC, RTS_BGP] then {
> bgp_med = 100;
> accept;
> }
> reject;
> };
> };
> local 198.19.0.1 port 1179 as 4242420001;
> neighbor 198.19.0.0 port 1179 as 4242420000;
>};
>protocol static { route 198.18.2.0/24 reject; ipv4 { }; }
>protocol bgp R0 {
> ipv4 {
> import all;
> export filter {
> # here we export the whole net
> if source ~ [RTS_STATIC, RTS_BGP] then {
> bgp_med = 200;
> accept;
> }
> reject;
> };
> };
> local 198.19.0.2 port 1179 as 4242420002;
> neighbor 198.19.0.0 port 1179 as 4242420000;
>};
More information about the Bird-users
mailing list