54 lines
2.0 KiB
Plaintext
54 lines
2.0 KiB
Plaintext
function net186_import_filter(int POPID)
|
|
int viaRegion;
|
|
bgppath public_bgp_path;
|
|
{
|
|
public_bgp_path = delete(bgp_path, [4200000000..4225479999]);
|
|
|
|
if (LOCAL_ASN, 122, REGION) !~ bgp_large_community then bgp_large_community.add((LOCAL_ASN, 122, REGION));
|
|
|
|
if bgp_large_community ~ [(LOCAL_ASN, 110, 0), (LOCAL_ASN, 110, 2), (LOCAL_ASN, 110, 20)] then bgp_local_pref = 500;
|
|
else if bgp_large_community ~ [(LOCAL_ASN, 110, 1), (LOCAL_ASN, 110, 10)] then bgp_local_pref = 400;
|
|
else bgp_local_pref = 300;
|
|
|
|
viaRegion = 0;
|
|
# Route is via Europe & Africa & Middle East
|
|
if bgp_large_community ~ [(LOCAL_ASN, 122, 100), (LOCAL_ASN, 122, 300..310), (LOCAL_ASN, 122, 600)] then viaRegion = viaRegion + 1;
|
|
# Route is via America
|
|
if bgp_large_community ~ [(LOCAL_ASN, 122, 200..299)] then viaRegion = viaRegion + 1;
|
|
# Route is via East Asia & Oceania
|
|
if bgp_large_community ~ [(LOCAL_ASN, 122, 400..500)] then viaRegion = viaRegion + 1;
|
|
|
|
if viaRegion >= 3 then bgp_local_pref = bgp_local_pref - 50;
|
|
|
|
# Route is via China mainland but not advertise in China mainland.
|
|
if (LOCAL_ASN, 122, 430) ~ bgp_large_community && REGION != 430 && (LOCAL_ASN, 120, 430) ~ bgp_large_community then return false;
|
|
|
|
bgp_local_pref = bgp_local_pref - filter(bgp_large_community, [(LOCAL_ASN, 122, *)]).len * 5;
|
|
|
|
bgp_local_pref = bgp_local_pref - public_bgp_path.len * 10;
|
|
|
|
return true;
|
|
};
|
|
|
|
function net186_export_filter(int POPID) {
|
|
if (65535, 65282) ~ bgp_community then return false;
|
|
|
|
if (65535, 65283) ~ bgp_community then {
|
|
if (POPID / 10) != (POP / 10) then {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
if (LOCAL_ASN, 125, POP) ~ bgp_large_community then {
|
|
return false;
|
|
}
|
|
|
|
if (LOCAL_ASN, 126, REGION) ~ bgp_large_community then {
|
|
return false;
|
|
}
|
|
|
|
if bgp_large_community !~ [(LOCAL_ASN, 120, *)] then bgp_large_community.add((LOCAL_ASN, 120, POP));
|
|
if bgp_large_community !~ [(LOCAL_ASN, 121, *)] then bgp_large_community.add((LOCAL_ASN, 121, REGION));
|
|
|
|
return true;
|
|
}; |