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 public_bgp_path.len = 1 && bgp_large_community !~ [(LOCAL_ASN, 110, 10)] then bgp_local_pref = 501; else 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, 10)] then bgp_local_pref = 400; else bgp_local_pref = 300; pub_route_controller_specific(); 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), (LOCAL_ASN, 121, 100), (LOCAL_ASN, 121, 300..310), (LOCAL_ASN, 121, 600)] || POP ~ [100, 300..310, 600] then viaRegion = viaRegion + 1; # Route is via or locate America if bgp_large_community ~ [(LOCAL_ASN, 122, 200..299), (LOCAL_ASN, 121, 200..299)] || POP ~ [200..299] then viaRegion = viaRegion + 1; # Route is via or locate East Asia & Oceania if bgp_large_community ~ [(LOCAL_ASN, 122, 400..500), (LOCAL_ASN, 121, 400..500)] || POP ~ [400..500] then viaRegion = viaRegion + 1; if bgp_large_community !~ [(LOCAL_ASN, 110, 0), (LOCAL_ASN, 110, 2), (LOCAL_ASN, 110, 1)] then bgp_local_pref = bgp_local_pref - 50 * viaRegion; else bgp_local_pref = bgp_local_pref - 100 * viaRegion; # Route is via China mainland but not advertise in China mainland. if (LOCAL_ASN, 122, 430) ~ bgp_large_community && REGION != 430 && (LOCAL_ASN, 121, 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; if LOCAL_ASN ~ bgp_path then return false; 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)); if (LOCAL_ASN, 122, REGION) !~ bgp_large_community then bgp_large_community.add((LOCAL_ASN, 122, REGION)); return true; };