BGPCEP-740: Fix logic for MED comparison in BGP best path selection 66/70366/1
authorClaudio D. Gasparini <claudio.gasparini@pantheon.tech>
Wed, 4 Apr 2018 15:35:19 +0000 (17:35 +0200)
committerClaudio David Gasparini <claudio.gasparini@pantheon.tech>
Thu, 5 Apr 2018 08:42:33 +0000 (08:42 +0000)
New better path should be selected only if new MED is lower than
actual best path MED.

Change-Id: I8bd07dc8b42e575cebcc4e1ea4b55d9c2c842f42
Signed-off-by: Ajay Lele <ajayslele@gmail.com>
Signed-off-by: Claudio D. Gasparini <claudio.gasparini@pantheon.tech>
(cherry picked from commit c98b6ebaaca98050c7e2bebe4709e918b15fba70)

bgp/path-selection-mode/src/main/java/org/opendaylight/protocol/bgp/mode/spi/AbstractBestPathSelector.java
bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/AbstractAddPathTest.java
bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/AddPathBasePathsTest.java

index ef4da5a97de816f94262a963fd7760091ce206a3..e321a03386f76486b8b3ebdaa1b554bf2b830f56 100644 (file)
@@ -112,7 +112,7 @@ public class AbstractBestPathSelector {
             if (this.bestState.getMultiExitDisc() != null || state.getMultiExitDisc() != null) {
                 final Long bmed = this.bestState.getMultiExitDisc();
                 final Long nmed = state.getMultiExitDisc();
-                return nmed > bmed;
+                return nmed >= bmed;
             }
         } else {
             /*
index 1eda3a5f84cc77a327704c2d92a1b17b3090fa91..b1c9bf23285c245ae3241238efff0d78660fcceb 100644 (file)
@@ -77,6 +77,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mess
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev171207.path.attributes.attributes.AsPathBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev171207.path.attributes.attributes.ClusterIdBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev171207.path.attributes.attributes.LocalPrefBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev171207.path.attributes.attributes.MultiExitDiscBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev171207.path.attributes.attributes.OriginBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev171207.path.attributes.attributes.OriginatorIdBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev171207.path.attributes.attributes.as.path.SegmentsBuilder;
@@ -311,6 +312,7 @@ public abstract class AbstractAddPathTest extends AbstractConcurrentDataBrokerTe
         attBuilder.setLocalPref(new LocalPrefBuilder().setPref(localPreference).build());
         attBuilder.setOrigin(new OriginBuilder().setValue(BgpOrigin.Igp).build());
         attBuilder.setAsPath(new AsPathBuilder().setSegments(Collections.emptyList()).build());
+        attBuilder.setMultiExitDisc(new MultiExitDiscBuilder().setMed(0L).build());
         if (clusterId != null) {
             attBuilder.setClusterId(new ClusterIdBuilder().setCluster(Collections.singletonList(clusterId)).build());
             attBuilder.setOriginatorId(new OriginatorIdBuilder().setOriginator(new Ipv4Address(clusterId)).build());
index 85d7a753812baac3e73cdab77e63138671d81294..9cbf11c4e04731e1c9c5fa884383ef5b321d6ab9 100644 (file)
@@ -98,7 +98,7 @@ public class AddPathBasePathsTest extends AbstractAddPathTest {
         assertEquals(UPD_NA_100_EBGP, listener5.getListMsg().get(0));
 
         //the second best route
-        sendRouteAndCheckIsOnLocRib(session2, PREFIX1, 50, 1);
+        sendRouteAndCheckIsOnLocRib(session2, PREFIX1, 100, 1);
         checkReceivedMessages(listener4, 1);
         checkReceivedMessages(listener5, 1);