91 lines
2.8 KiB
Plaintext
91 lines
2.8 KiB
Plaintext
function pub_add_communities(int ASN; int PeerType) {
|
|
# DIRECT PEER
|
|
if (PeerType=0) then {
|
|
bgp_large_community.add((LOCAL_ASN, 110, 0));
|
|
bgp_large_community.add((LOCAL_ASN, 110, 2));
|
|
|
|
# PEER via IX
|
|
} else if (PeerType=1) then {
|
|
bgp_large_community.add((LOCAL_ASN, 110, 0));
|
|
bgp_large_community.add((LOCAL_ASN, 110, 1));
|
|
|
|
# UPSTREAM
|
|
}else if (PeerType=10) then {
|
|
bgp_large_community.add((LOCAL_ASN, 110, 10));
|
|
|
|
# DOWNSTREAM
|
|
} else if (PeerType=20) then {
|
|
bgp_large_community.add((LOCAL_ASN, 110, 20));
|
|
}
|
|
|
|
# Finished (LOCAL_ASN, 110, *);
|
|
|
|
if (LOCAL_ASN, 120, POP) ~ bgp_large_community then bgp_large_community.add((LOCAL_ASN, 120, POP));
|
|
if (LOCAL_ASN, 121, REGION) ~ bgp_large_community then bgp_large_community.add((LOCAL_ASN, 121, REGION));
|
|
|
|
# Finished (LOCAL_ASN, 120~130, *);
|
|
}
|
|
|
|
function pub_preprocess_communities() {
|
|
if (LOCAL_ASN, 115, 1) ~ bgp_large_community then bgp_path.prepend(bgp_path.last);
|
|
if (LOCAL_ASN, 115, 3) ~ bgp_large_community then {
|
|
bgp_path.prepend(bgp_path.last);
|
|
bgp_path.prepend(bgp_path.last);
|
|
bgp_path.prepend(bgp_path.last);
|
|
}
|
|
if (LOCAL_ASN, 115, 5) ~ bgp_large_community then {
|
|
bgp_path.prepend(bgp_path.last);
|
|
bgp_path.prepend(bgp_path.last);
|
|
bgp_path.prepend(bgp_path.last);
|
|
bgp_path.prepend(bgp_path.last);
|
|
bgp_path.prepend(bgp_path.last);
|
|
}
|
|
# Finished (LOCAL_ASN, 115, *);
|
|
}
|
|
|
|
function pub_process_communities(int ASN; int PeerType) {
|
|
|
|
if (LOCAL_ASN, 125, POP) ~ bgp_large_community then {
|
|
bgp_community.add((65535, 65282));
|
|
}
|
|
|
|
if (LOCAL_ASN, 126, REGION) ~ bgp_large_community then {
|
|
bgp_community.add((65535, 65283));
|
|
}
|
|
|
|
if (65535, 65281) ~ bgp_community then return false;
|
|
if (65535, 65282) ~ bgp_community then return false;
|
|
if (65535, 65283) ~ bgp_community then return false;
|
|
|
|
if (LOCAL_ASN, 2, ASN) ~ bgp_large_community then return false;
|
|
|
|
# PEER
|
|
if (PeerType<10) then {
|
|
if (LOCAL_ASN, 1, 1) ~ bgp_large_community then return false;
|
|
|
|
# UPSTREAM
|
|
} else if (PeerType=10) then {
|
|
if (LOCAL_ASN, 1, 0) ~ bgp_large_community then return false;
|
|
|
|
# DOWNSTREAM
|
|
} else if (PeerType=20) then {
|
|
if (LOCAL_ASN, 1, 2) ~ bgp_large_community then return false;
|
|
}
|
|
|
|
}
|
|
|
|
function transit_import_filter(int ASN) {
|
|
if !is_valid() then return false;
|
|
pub_add_communities(ASN, 10);
|
|
pub_preprocess_communities();
|
|
return true;
|
|
}
|
|
|
|
function transit_export_filter(int ASN) {
|
|
# Delete Self eBGP Confed Path.
|
|
bgp_path.delete([4200000000..4225479999]);
|
|
if !is_valid() then return false;
|
|
pub_process_communities(ASN, 10);
|
|
if bgp_path.last !~ DOWNSTREAM_ASN && source = RTS_BGP then return false;
|
|
return true;
|
|
} |