BUG-6460: Fix Neighbor Comparison 53/44253/1
authorClaudio D. Gasparini <cgaspari@cisco.com>
Wed, 17 Aug 2016 10:09:56 +0000 (12:09 +0200)
committerMilos Fabian <milfabia@cisco.com>
Thu, 18 Aug 2016 12:20:48 +0000 (12:20 +0000)
Fix comparison of neighbor by fix
-Neighbors can have same AfiSafi but with different sort.
-Also add default values to Neighbour builder fromBgpPeer.

Change-Id: I0f3118741aae2448ec980ada14dc58be59a4c2c9
Signed-off-by: Claudio D. Gasparini <cgaspari@cisco.com>
(cherry picked from commit 63cde5c485d15ac52cfbfac1f5091fdb9f5572e9)

bgp/openconfig-impl/src/main/java/org/opendaylight/protocol/bgp/openconfig/impl/BGPOpenConfigMappingServiceImpl.java
bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/config/BgpPeer.java

index 8bbd14001cc4a43a8d2290922836973756ef7fe5..d6c2ab0736ea13180331cf1c7fd705fbe3f01b28 100644 (file)
@@ -44,6 +44,7 @@ import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.t
 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.top.bgp.NeighborsBuilder;
 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.top.bgp.PeerGroups;
 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.top.bgp.PeerGroupsBuilder;
+import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.types.rev151009.CommunityType;
 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.types.rev151009.PeerType;
 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.network.instance.rev151018.network.instance.top.network.instances.network.instance.protocols.Protocol;
 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.network.instance.rev151018.network.instance.top.network.instances.network.instance.protocols.ProtocolBuilder;
@@ -74,6 +75,8 @@ public final class BGPOpenConfigMappingServiceImpl implements BGPOpenConfigMappi
     private static final PeerGroup APP_PEER_GROUP = new PeerGroupBuilder().setPeerGroupName(APPLICATION_PEER_GROUP_NAME)
             .setKey(new PeerGroupKey(APPLICATION_PEER_GROUP_NAME)).build();
     private static final PeerGroups PEER_GROUPS = new PeerGroupsBuilder().setPeerGroup(Collections.singletonList(APP_PEER_GROUP)).build();
+    private static final BigDecimal DEFAULT_KEEP_ALIVE = BigDecimal.valueOf(30);
+    private static final BigDecimal DEFAULT_MINIMUM_ADV_INTERVAL = BigDecimal.valueOf(30);
 
     @Override
     public List<BgpTableType> toTableTypes(final List<AfiSafi> afiSafis) {
@@ -177,6 +180,7 @@ public final class BGPOpenConfigMappingServiceImpl implements BGPOpenConfigMappi
         neighborBuilder.setTransport(new TransportBuilder().setConfig(
                 new org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbor.group.transport.ConfigBuilder()
                 .setPassiveMode(!isActive)
+                .setMtuDiscovery(Boolean.FALSE)
                 .addAugmentation(org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev160614.Config1.class,
                         new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev160614.Config1Builder()
                 .setRemotePort(portNumber).build())
@@ -186,11 +190,15 @@ public final class BGPOpenConfigMappingServiceImpl implements BGPOpenConfigMappi
                 .setAuthPassword(password != null ? password.getValue() : null)
                 .setPeerAs(remoteAs)
                 .setPeerType(toPeerTye(peerRole))
+                .setSendCommunity(CommunityType.NONE)
+                .setRouteFlapDamping(Boolean.FALSE)
                 .build());
         neighborBuilder.setTimers(new TimersBuilder().setConfig(
                 new org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbor.group.timers.ConfigBuilder()
                 .setHoldTime(BigDecimal.valueOf(holdTimer))
                 .setConnectRetry(BigDecimal.valueOf(retryTimer))
+                .setKeepaliveInterval(DEFAULT_KEEP_ALIVE)
+                .setMinimumAdvertisementInterval(DEFAULT_MINIMUM_ADV_INTERVAL)
                 .build()).build());
         neighborBuilder.setRouteReflector(new RouteReflectorBuilder().setConfig(
                 new org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbor.group.route.reflector.ConfigBuilder()
index 38b41787f61fbf7801a9313737a5050e3e8e7cdf..66e22b1c4315593d17dbc4eeeb2523305d828369 100644 (file)
@@ -20,6 +20,7 @@ import io.netty.util.concurrent.Future;
 import java.net.InetSocketAddress;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Objects;
 import org.opendaylight.controller.config.yang.bgp.rib.impl.BGPPeerRuntimeMXBean;
 import org.opendaylight.controller.config.yang.bgp.rib.impl.BgpPeerState;
 import org.opendaylight.controller.config.yang.bgp.rib.impl.BgpSessionState;
@@ -38,6 +39,9 @@ import org.opendaylight.protocol.bgp.rib.impl.spi.BgpDeployer.WriteConfiguration
 import org.opendaylight.protocol.bgp.rib.impl.spi.RIB;
 import org.opendaylight.protocol.concepts.KeyMapping;
 import org.opendaylight.protocol.util.Ipv4Util;
+import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.multiprotocol.rev151009.bgp.common.afi.safi.list.AfiSafi;
+import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbor.group.AfiSafis;
+import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbor.group.Config;
 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbors.Neighbor;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.open.message.BgpParameters;
@@ -52,6 +56,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.mult
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.mp.capabilities.AddPathCapabilityBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.mp.capabilities.MultiprotocolCapabilityBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.multiprotocol.rev130919.mp.capabilities.add.path.capability.AddressFamilies;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev160614.AfiSafi2;
 import org.osgi.framework.ServiceRegistration;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -103,7 +108,24 @@ public class BgpPeer implements PeerBean, BGPPeerRuntimeMXBean {
 
     @Override
     public Boolean containsEqualConfiguration(final Neighbor neighbor) {
-        return this.currentConfiguration.equals(neighbor);
+        final AfiSafis actAfiSafi = this.currentConfiguration.getAfiSafis();
+        final AfiSafis extAfiSafi = neighbor.getAfiSafis();
+        final List<AfiSafi> actualSafi = actAfiSafi.getAfiSafi();
+        final List<AfiSafi> extSafi = extAfiSafi.getAfiSafi();
+        return actualSafi.containsAll(extSafi) && extSafi.containsAll(actualSafi)
+        && Objects.equals(this.currentConfiguration.getConfig(), neighbor.getConfig())
+        && Objects.equals(this.currentConfiguration.getNeighborAddress(), neighbor.getNeighborAddress())
+        && Objects.equals(this.currentConfiguration.getAddPaths(),neighbor.getAddPaths())
+        && Objects.equals(this.currentConfiguration.getApplyPolicy(), neighbor.getApplyPolicy())
+        && Objects.equals(this.currentConfiguration.getAsPathOptions(), neighbor.getAsPathOptions())
+        && Objects.equals(this.currentConfiguration.getEbgpMultihop(), neighbor.getEbgpMultihop())
+        && Objects.equals(this.currentConfiguration.getGracefulRestart(), neighbor.getGracefulRestart())
+        && Objects.equals(this.currentConfiguration.getErrorHandling(), neighbor.getErrorHandling())
+        && Objects.equals(this.currentConfiguration.getLoggingOptions(), neighbor.getLoggingOptions())
+        && Objects.equals(this.currentConfiguration.getRouteReflector(), neighbor.getRouteReflector())
+        && Objects.equals(this.currentConfiguration.getState(), neighbor.getState())
+        && Objects.equals(this.currentConfiguration.getTimers(), neighbor.getTimers())
+        && Objects.equals(this.currentConfiguration.getTransport(), neighbor.getTransport());
     }
 
     private static List<BgpParameters> getBgpParameters(final Neighbor neighbor, final RIB rib,