BIRD 2.0.0: RFC8097 extended communities and rpki-light

Pier Carlo Chiodi pierky at pierky.com
Tue Dec 12 18:47:44 CET 2017


Hello,

while I was running some tests on BIRD 2.0.0 I've noticed that the
handling of RFC8097 extended communities is different from 1.6.3.

Scenario:
- AS10 announces a route to the route server;
- the route server adds the (0x4300, 0, 1) ext community (RFC8097);
- AS20 receives the route;
- clients are always both on 1.6.3.

This is the filter I'm using:

filter from_client {
	bgp_ext_community.add((unknown 0x4300, 0, 1));
	accept;
}

The results I get follow:

- when 1.6.3 is used on the route server, BIRD treats the community
  strictly according to RFC4360:

   If a route has a non-transitivity extended community, then before
   advertising the route across the Autonomous System boundary the
   community SHOULD be removed from the route.

- when 2.0.0 is used, the community is treated accordingly to
  draft-ietf-sidrops-route-server-rpki-light-02 and is propagated to the
  client.

Since I didn't find any reference to RFC8097/rpki-light on the web site,
I was wondering if I missed something or if this is the expected
behaviour.

Configs and 'show route' output attached.

Bests,

--
Pier Carlo Chiodi
https://pierky.com
-------------- next part --------------
router id 192.0.2.10;

log "/var/log/bird.log" all;
log syslog all;
debug protocols all;

protocol device { }

protocol static own_prefixes {
	route 1.0.1.0/24 reject;
}
protocol bgp the_rs {
	local as 10;
	neighbor 192.0.2.2 as 999;
	import all;
	export all;
	connect delay time 1;
	connect retry time 1;
}
-------------- next part --------------
router id 192.0.2.20;

log "/var/log/bird.log" all;
log syslog all;
debug protocols all;

protocol device { }

protocol bgp the_rs {
	local as 20;
	neighbor 192.0.2.2 as 999;
	import all;
	export all;
	connect delay time 1;
	connect retry time 1;
}
-------------- next part --------------
With BIRD 2.0.0 on the route server:

rs$ birdcl show route all
BIRD 2.0.0 ready.
Table master4:
1.0.1.0/24           unicast [AS10 17:33:32.159] * (100) [AS10i]
        via 192.0.2.10 on eth0
        Type: BGP univ
        BGP.origin: IGP
        BGP.as_path: 10
        BGP.next_hop: 192.0.2.10
        BGP.local_pref: 100
        BGP.ext_community: (generic, 0x43000000, 0x1)
rs$ birdcl show route all export AS20
BIRD 2.0.0 ready.
Table master4:
1.0.1.0/24           unicast [AS10 17:33:32.159] * (100) [AS10i]
        via 192.0.2.10 on eth0
        Type: BGP univ
        BGP.origin: IGP
        BGP.as_path: 10
        BGP.next_hop: 192.0.2.10
        BGP.local_pref: 100
        BGP.ext_community: (generic, 0x43000000, 0x1)

from the receiving client:

receiver$ birdcl show route all
BIRD 1.6.3 ready.
1.0.1.0/24         via 192.0.2.10 on eth0 [the_rs 17:33:32 from 192.0.2.2] * (100) [AS10i]
        Type: BGP unicast univ
        BGP.origin: IGP
        BGP.as_path: 10
        BGP.next_hop: 192.0.2.10
        BGP.local_pref: 100
        BGP.ext_community: (generic, 0x43000000, 0x1)




With BIRD 1.6.3 on the route server:

rs$ birdcl show route all
BIRD 1.6.3 ready.
1.0.1.0/24         via 192.0.2.10 on eth0 [AS10 17:36:56] * (100) [AS10i]
        Type: BGP unicast univ
        BGP.origin: IGP
        BGP.as_path: 10
        BGP.next_hop: 192.0.2.10
        BGP.local_pref: 100
        BGP.ext_community: (generic, 0x43000000, 0x1)
rs$ birdcl show route all export AS20
BIRD 1.6.3 ready.
1.0.1.0/24         via 192.0.2.10 on eth0 [AS10 17:36:56] * (100) [AS10i]
        Type: BGP unicast univ
        BGP.origin: IGP
        BGP.as_path: 10
        BGP.next_hop: 192.0.2.10
        BGP.local_pref: 100
        BGP.ext_community: (generic, 0x43000000, 0x1)

from the receiving client:

receiver$ birdcl show route all
BIRD 1.6.3 ready.
1.0.1.0/24         via 192.0.2.10 on eth0 [the_rs 17:36:56 from 192.0.2.2] * (100) [AS10i]
        Type: BGP unicast univ
        BGP.origin: IGP
        BGP.as_path: 10
        BGP.next_hop: 192.0.2.10
        BGP.local_pref: 100
-------------- next part --------------
router id 192.0.2.2;
define rs_as = 999;

log "/var/log/bird.log" all;
log syslog all;
debug protocols { states, routes, filters, interfaces, events };

protocol device {};

table master sorted;

filter from_client {
	bgp_ext_community.add((unknown 0x4300, 0, 1));
	accept;
}

protocol bgp AS10 {
	description "AS10";

	local as 999;
	neighbor 192.0.2.10 as 10;
	rs client;

	passive on;
	ttl security off;
	interpret communities off;

	secondary;
	import keep filtered on;
	import filter from_client;
	export all;
}

protocol bgp AS20 {
	description "AS20";

	local as 999;
	neighbor 192.0.2.20 as 20;
	rs client;

	passive on;
	ttl security off;
	interpret communities off;

	secondary;
	import keep filtered on;
	import filter from_client;
	export all;
}
-------------- next part --------------
router id 192.0.2.2;
define rs_as = 999;

log "/var/log/bird.log" all;
log syslog all;
debug protocols { states, routes, filters, interfaces, events };

protocol device {};

ipv4 table master4 sorted;
ipv6 table master6 sorted;

filter from_client {
	bgp_ext_community.add((unknown 0x4300, 0, 1));
	accept;
}

protocol bgp AS10 {
	description "AS10";

	local as 999;
	neighbor 192.0.2.10 as 10;
	rs client;

	passive on;
	ttl security off;
	interpret communities off;

	ipv4 {
		secondary;
		import keep filtered on;
		import filter from_client;
		export all;
	};
}

protocol bgp AS20 {
	description "AS20";

	local as 999;
	neighbor 192.0.2.20 as 20;
	rs client;

	passive on;
	ttl security off;
	interpret communities off;

	ipv4 {
		secondary;
		import keep filtered on;
		import filter from_client;
		export all;
	};
}


More information about the Bird-users mailing list