BGPCEP-740: Fix logic for MED comparison in BGP best path selection 09/70409/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>
Fri, 6 Apr 2018 06:50:58 +0000 (06:50 +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>
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 84e2546e546fa28ce0dcda5c844e3c206d439b85..c7062bcf26148116551d96f29103b3e2995cde05 100644 (file)
@@ -111,7 +111,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 60700d39565f47567beb1cdfe621dc3552d50687..41d92bc5bf303f711d9339bbbe8e2642b97659ad 100644 (file)
@@ -79,6 +79,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.rev130919.path.attributes.attributes.OriginatorIdBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.path.attributes.attributes.as.path.SegmentsBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.update.message.WithdrawnRoutesBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.path.attributes.attributes.MultiExitDiscBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.Attributes1;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.Attributes1Builder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.BgpTableType;
@@ -311,6 +312,7 @@ class AbstractAddPathTest extends AbstractConcurrentDataBrokerTest {
         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 8cec9a283b59395a33541e18171e7c6f83501619..d9a198afce9e0c90d8eedd211067e0770d495e08 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);