diff --git a/lib/10-community-transit.conf b/lib/10-community-transit.conf index 43d20ce..7acafb6 100644 --- a/lib/10-community-transit.conf +++ b/lib/10-community-transit.conf @@ -78,17 +78,19 @@ function pub_process_communities(int ASN; int PeerType) { function pub_process_path() { # Delete Self eBGP Confed Path. bgp_path.delete([4200000000..4225479999]); - # Route is via or locate Europe & Africa & Middle East - if bgp_large_community ~ [(LOCAL_ASN, 122, 100), (LOCAL_ASN, 122, 300..310), (LOCAL_ASN, 122, 600), (LOCAL_ASN, 121, 100), (LOCAL_ASN, 121, 300..310), (LOCAL_ASN, 121, 600)] then bgp_path.prepend(LOCAL_ASN); - # Route is via or locate America - if bgp_large_community ~ [(LOCAL_ASN, 122, 200..299), (LOCAL_ASN, 121, 200..299)] then bgp_path.prepend(LOCAL_ASN); - # Route is via or locate East Asia & Oceania - if bgp_large_community ~ [(LOCAL_ASN, 122, 400..500), (LOCAL_ASN, 121, 200..299)] then bgp_path.prepend(LOCAL_ASN); + # Self PoP if (LOCAL_ASN, 120, POP) ~ bgp_large_community then { - bgp_path.delete(LOCAL_ASN); - bgp_path.prepend(LOCAL_ASN); + # Nothing here. + } else { + # Route is via or locate Europe & Africa & Middle East + if bgp_large_community ~ [(LOCAL_ASN, 122, 100), (LOCAL_ASN, 122, 300..310), (LOCAL_ASN, 122, 600), (LOCAL_ASN, 121, 100), (LOCAL_ASN, 121, 300..310), (LOCAL_ASN, 121, 600)] then bgp_path.prepend(LOCAL_ASN); + # Route is via or locate America + if bgp_large_community ~ [(LOCAL_ASN, 122, 200..299), (LOCAL_ASN, 121, 200..299)] then bgp_path.prepend(LOCAL_ASN); + # Route is via or locate East Asia & Oceania + if bgp_large_community ~ [(LOCAL_ASN, 122, 400..500), (LOCAL_ASN, 121, 400..500)] then bgp_path.prepend(LOCAL_ASN); } + pub_preprocess_communities(); } diff --git a/util/util.conf b/util/util.conf index 32e43c9..ac3b7ff 100644 --- a/util/util.conf +++ b/util/util.conf @@ -25,6 +25,7 @@ function is_downstream_asn() { } function is_valid() { + if (LOCAL_ASN, 0, 665) ~ bgp_large_community then return true; if pub_is_invalid_net_length() then return false; if is_bogon_prefix() then return false; if is_bogon_asn() then return false;