mirror of
https://github.com/quantum5/bird-filter.git
synced 2025-04-24 00:51:57 -04:00
Simplify peer handling
This commit is contained in:
parent
e51cb3edb5
commit
6e1d2e9fc5
32
aspa/test.py
32
aspa/test.py
|
@ -62,33 +62,33 @@ class PeerTest(unittest.TestCase):
|
|||
])
|
||||
|
||||
def test_all_valid(self):
|
||||
self.assertFalse(self.validator.is_aspa_invalid_peer(64501, [64501, 64500]))
|
||||
self.assertFalse(self.validator.is_aspa_invalid_peer(64502, [64502, 64501, 64500]))
|
||||
self.assertFalse(self.validator.is_aspa_invalid_peer(64503, [64503, 64502, 64501, 64500]))
|
||||
self.assertFalse(self.validator.is_aspa_invalid_peer(64504, [64504, 64503, 64502, 64501]))
|
||||
self.assertFalse(self.validator.is_aspa_invalid_peer(64504, [64504, 64503, 64502]))
|
||||
self.assertFalse(self.validator.is_aspa_invalid_peer(64504, [64504, 64503]))
|
||||
self.assertFalse(self.validator.is_aspa_invalid_peer(64504, [64504]))
|
||||
self.assertFalse(self.validator.is_aspa_invalid_peer([64501, 64500]))
|
||||
self.assertFalse(self.validator.is_aspa_invalid_peer([64502, 64501, 64500]))
|
||||
self.assertFalse(self.validator.is_aspa_invalid_peer([64503, 64502, 64501, 64500]))
|
||||
self.assertFalse(self.validator.is_aspa_invalid_peer([64504, 64503, 64502, 64501]))
|
||||
self.assertFalse(self.validator.is_aspa_invalid_peer([64504, 64503, 64502]))
|
||||
self.assertFalse(self.validator.is_aspa_invalid_peer([64504, 64503]))
|
||||
self.assertFalse(self.validator.is_aspa_invalid_peer([64504]))
|
||||
|
||||
def test_prepend_valid(self):
|
||||
self.assertFalse(self.validator.is_aspa_invalid_peer(64501, [64501, 64500, 64500]))
|
||||
self.assertFalse(self.validator.is_aspa_invalid_peer(64502, [64502, 64502, 64501, 64501, 64500]))
|
||||
self.assertFalse(self.validator.is_aspa_invalid_peer(64503, [64503, 64502, 64502, 64501, 64500, 64500]))
|
||||
self.assertFalse(self.validator.is_aspa_invalid_peer([64501, 64500, 64500]))
|
||||
self.assertFalse(self.validator.is_aspa_invalid_peer([64502, 64502, 64501, 64501, 64500]))
|
||||
self.assertFalse(self.validator.is_aspa_invalid_peer([64503, 64502, 64502, 64501, 64500, 64500]))
|
||||
|
||||
def test_some_unknown(self):
|
||||
self.assertFalse(self.validator.is_aspa_invalid_peer(64505, [64505, 64504, 64503, 64502]))
|
||||
self.assertFalse(self.validator.is_aspa_invalid_peer(64503, [64503, 64503, 64502, 64505]))
|
||||
self.assertFalse(self.validator.is_aspa_invalid_peer([64505, 64504, 64503, 64502]))
|
||||
self.assertFalse(self.validator.is_aspa_invalid_peer([64503, 64503, 64502, 64505]))
|
||||
|
||||
def test_all_unknown(self):
|
||||
self.assertFalse(self.validator.is_aspa_invalid_customer(64506, [64506, 64507, 64508]))
|
||||
self.assertFalse(self.validator.is_aspa_invalid_peer([64506, 64507, 64508]))
|
||||
|
||||
def test_some_invalid(self):
|
||||
self.assertTrue(self.validator.is_aspa_invalid_peer(64505, [64505, 64505, 64503, 64503]))
|
||||
self.assertTrue(self.validator.is_aspa_invalid_peer(64504, [64504, 64503, 64506, 64500]))
|
||||
self.assertTrue(self.validator.is_aspa_invalid_peer([64505, 64505, 64503, 64503]))
|
||||
self.assertTrue(self.validator.is_aspa_invalid_peer([64504, 64503, 64506, 64500]))
|
||||
|
||||
def test_peer_originated(self):
|
||||
for i in [64500, 64501, 64502, 64503, 64504, 64505]:
|
||||
self.assertFalse(self.validator.is_aspa_invalid_peer(i, [i]))
|
||||
self.assertFalse(self.validator.is_aspa_invalid_peer([i]))
|
||||
|
||||
|
||||
class UpstreamTest(unittest.TestCase):
|
||||
|
|
|
@ -24,10 +24,8 @@ class Validator:
|
|||
|
||||
return False
|
||||
|
||||
def is_aspa_invalid_peer(self, peer_asn: int, bgp_path: list[int]) -> bool:
|
||||
remove_peer = list(dropwhile(lambda asn: asn != peer_asn, bgp_path))
|
||||
|
||||
for prev_asn, asn in zip(chain([peer_asn], remove_peer), remove_peer):
|
||||
def is_aspa_invalid_peer(self, bgp_path: list[int]) -> bool:
|
||||
for prev_asn, asn in zip(bgp_path, bgp_path[1:]):
|
||||
if prev_asn == asn:
|
||||
continue
|
||||
|
||||
|
@ -66,11 +64,11 @@ class BirdValidator(Validator):
|
|||
|
||||
return False
|
||||
|
||||
def is_aspa_invalid_peer(self, peer_asn: int, bgp_path: list[int]) -> bool:
|
||||
prev_asn = peer_asn
|
||||
def is_aspa_invalid_peer(self, bgp_path: list[int]) -> bool:
|
||||
prev_asn = bgp_path[0]
|
||||
|
||||
for asn in bgp_path:
|
||||
if asn != peer_asn and prev_asn != asn and self.is_invalid_pair(prev_asn, asn):
|
||||
if prev_asn != asn and self.is_invalid_pair(prev_asn, asn):
|
||||
return True
|
||||
prev_asn = asn
|
||||
|
||||
|
|
|
@ -10,12 +10,11 @@ function is_aspa_invalid_customer() {
|
|||
return false;
|
||||
}
|
||||
|
||||
function is_aspa_invalid_peer(int peer_asn) {
|
||||
int prev_asn = peer_asn;
|
||||
function is_aspa_invalid_peer() {
|
||||
int prev_asn = bgp_path.first;
|
||||
|
||||
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
|
||||
if prev_asn != cur_asn && is_aspa_invalid_pair(prev_asn, cur_asn) then
|
||||
return true;
|
||||
prev_asn = cur_asn;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue