Hi All, I am run bird for lab and I am with a difficult to create a filter with bgp communities and bgp extended communities.
In my filter at first I check if router need go only for peer ASN, note that is a export filter. If not only for peer ASN and have only-community (65001:* or ro:65001:*) drop this route. I was executed troubleshooting and I could determinate that problem is in this operation: "(([(65001,*)] ~ bgp_community) || ([(ro,65001,*)] ~ bgp_ext_community))". I think in this regular expression have a problem, that case create a fault in my if-clause. I operate my bird in mode router-server, to simulate a IXP. In this test my other client announce a router without community 65001:*. and in import filter with ASN 61580 I am accept all routes . Thanks, Lucenildo Lins +++++++ lucenildo@other-client> show route advertising-protocol bgp 187.16.213.253 extensive 168.181.23.0/24 inet.0: 27 destinations, 32 routes (26 active, 0 holddown, 2 hidden) * 168.181.23.0/24 (1 entry, 1 announced) BGP group IX-emulado-v4 type External Nexthop: Self AS path: [61580] I Communities: 61580:5571 65000:11752 65000:14026 +++++++++ define Client_ASN = 65551; filter bgp_out_as65551 { if exp_only(Client_ASN) then { rm_interal_comm(); accept; } if exp_has_only() then { rm_interal_comm(); reject; } rm_interal_comm(); accept; } function exp_has_only() { if !(source = RTS_BGP) then return false; if (([(65001,*)] ~ bgp_community) || ([(ro,65001,*)] ~ bgp_ext_community)) then return true; return false; } function exp_only(int ASNumber) { if ! (source = RTS_BGP) then return false; if ASNumber > 65535 then { if (ro,65001,ASNumber) ~ bgp_ext_community then return true; } else { if (((65001,ASNumber) ~ bgp_community) || ((ro,65001,ASNumber) ~ bgp_ext_community)) then return true; } return false; }