61 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			61 lines
		
	
	
		
			2.7 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 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;
 | 
						|
}; |