Skip to content

Commit

Permalink
BGP: handle implicit confederation membership (#4990)
Browse files Browse the repository at this point in the history
* handle case where BGP peer is implicitly in a confederation with its peer
  • Loading branch information
sfraint authored and dhalperi committed Oct 15, 2019
1 parent 569ba14 commit d9245fb
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -512,15 +512,31 @@ static AsPair computeAsPair(
}
// Initiator is inside a confederation
if (initiatorConfed != null) {
if (listenerRemoteAsns.contains(initiatorConfed)
// Initiator and listener are in the same AS, so they're in the same confederation
if (initiatorLocalAs.equals(listenerLocalAs)) {
if (listenerRemoteAsns.contains(initiatorLocalAs)
&& initiatorRemoteAsns.contains(listenerLocalAs)) {
return new AsPair(initiatorLocalAs, listenerLocalAs);
} else {
return null;
}
} else if (listenerRemoteAsns.contains(initiatorConfed)
&& initiatorRemoteAsns.contains(listenerLocalAs)) {
return new AsPair(initiatorConfed, listenerLocalAs);
} else {
return null;
}
} else {
// Listener is inside a confederation
if (listenerRemoteAsns.contains(initiatorLocalAs)
// Initiator and listener are in the same AS, so they're in the same confederation
if (initiatorLocalAs.equals(listenerLocalAs)) {
if (listenerRemoteAsns.contains(initiatorLocalAs)
&& initiatorRemoteAsns.contains(listenerLocalAs)) {
return new AsPair(initiatorLocalAs, listenerLocalAs);
} else {
return null;
}
} else if (listenerRemoteAsns.contains(initiatorLocalAs)
&& initiatorRemoteAsns.contains(listenerConfed)) {
return new AsPair(initiatorLocalAs, listenerConfed);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -393,5 +393,11 @@ public void testComputeAsPair() {
// Confed no match
assertPair(1L, 3L, LongSpace.of(4), 4L, null, LongSpace.of(5), null);
assertPair(1L, 3L, LongSpace.of(4), 4L, 9L, LongSpace.of(5), null);

// One peer implicitly matches other's confed, they shares same AS
assertPair(1L, 3L, LongSpace.of(1L), 1L, null, LongSpace.of(1L), new AsPair(1, 1));
// One peer implicitly matches other's confed, but remote ASN doesn't overlap local AS
assertPair(1L, 3L, LongSpace.of(2L), 1L, null, LongSpace.of(1L), null);
assertPair(1L, 3L, LongSpace.of(1L), 1L, null, LongSpace.of(2L), null);
}
}

0 comments on commit d9245fb

Please sign in to comment.