function is_aspa_invalid_customer() { int prev_asn = MY_ASN; for int cur_asn in bgp_path do { if prev_asn != cur_asn && is_aspa_invalid_pair(prev_asn, cur_asn) then return true; prev_asn = cur_asn; } return false; } function is_aspa_invalid_peer(int peer_asn) { int prev_asn = peer_asn; for int cur_asn in bgp_path do { if cur_asn != peer_asn && prev_asn != cur_asn && is_aspa_invalid_pair(prev_asn, cur_asn) then return true; prev_asn = cur_asn; } return false; } function is_aspa_invalid_upstream() { int prev_asn = MY_ASN; int max_up_ramp = bgp_path.len; int min_down_ramp = 0; int i = 0; for int cur_asn in bgp_path do { if prev_asn != cur_asn then { if is_aspa_invalid_pair(cur_asn, cur_asn) && max_up_ramp > i then max_up_ramp = i; if is_aspa_invalid_pair(prev_asn, cur_asn) then min_down_ramp = i; } prev_asn = cur_asn; i = i + 1; } return min_down_ramp > max_up_ramp; }