Rework Cluster-Id config 60/70760/2
authorClaudio D. Gasparini <claudio.gasparini@pantheon.tech>
Tue, 10 Apr 2018 18:35:42 +0000 (20:35 +0200)
committerClaudio D. Gasparini <claudio.gasparini@pantheon.tech>
Wed, 11 Apr 2018 06:49:02 +0000 (08:49 +0200)
BGPCEP-564
Change-Id: I96557eca0c599e0934b7fada91bfc35162eae7bc
Signed-off-by: Claudio D. Gasparini <claudio.gasparini@pantheon.tech>
bgp/openconfig-api/src/main/yang/bgp-openconfig-extensions.yang
bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/config/BgpPeer.java
bgp/rib-impl/src/main/java/org/opendaylight/protocol/bgp/rib/impl/config/OpenConfigMappingUtil.java
bgp/rib-impl/src/test/java/org/opendaylight/protocol/bgp/rib/impl/config/OpenConfigMappingUtilTest.java

index ab4df24f8f73d43708de342ac5d1bcc708afba1b..ebc7179e9dba3e075d8de7e974429179067264b2 100644 (file)
@@ -91,15 +91,6 @@ module bgp-openconfig-extensions {
         }
     }
 
-    grouping route-reflector-cluster-id-config {
-        leaf route-reflector-cluster-id {
-            type bgp-types:rr-cluster-id-type;
-            description
-              "Route-reflector cluster id to use when local router is
-              configured as a route reflector.";
-        }
-    }
-
     augment /netinst:network-instances/netinst:network-instance/netinst:protocols/netinst:protocol {
         ext:augment-identifier network-instance-protocol;
         uses openconfig-bgp:bgp-top {
@@ -126,13 +117,14 @@ module bgp-openconfig-extensions {
                      peer-group";
                 uses openconfig-bgp:bgp-neighbor-peer-group_config;
             }
-            augment bgp/neighbors/neighbor/config {
-                ext:augment-identifier neighbor-cluster-id-config;
-                uses route-reflector-cluster-id-config;
-            }
             augment bgp/global/config {
                 ext:augment-identifier global-config-augmentation;
-                uses route-reflector-cluster-id-config;
+                leaf route-reflector-cluster-id {
+                    type bgp-types:rr-cluster-id-type;
+                    description
+                      "Route-reflector cluster id to use when local router is
+                      configured as a route reflector.";
+                  }
             }
             augment bgp/neighbors/neighbor/state {
                 ext:augment-identifier neighbor_state-augmentation;
@@ -186,10 +178,6 @@ module bgp-openconfig-extensions {
                 ext:augment-identifier peer-group-transport-config;
                 uses transport-config;
             }
-            augment bgp/peer-groups/peer-group/config {
-                ext:augment-identifier peer-group-cluster-id-config;
-                uses route-reflector-cluster-id-config;
-            }
             augment bgp/peer-groups/peer-group/afi-safis/afi-safi {
                 ext:augment-identifier group-add-paths-config;
                 uses openconfig-bgp:bgp-neighbor-add-paths_config;
index 05d2d2862d73f029e4f248b17c12657f9ea2acb2..e946e33cfb41e1acb9400e6b1b1f9b798dd82387 100644 (file)
@@ -253,7 +253,7 @@ public final class BgpPeer implements PeerBean, BGPPeerStateConsumer {
                     .toTableKey(afisSAfis.getAfiSafi(), tableTypeRegistry);
             final PeerRole role = OpenConfigMappingUtil.toPeerRole(neighbor, peerGroup);
             final ClusterIdentifier clusterId = OpenConfigMappingUtil
-                    .getNeighborClusterIdentifier(neighbor.getConfig());
+                    .getNeighborClusterIdentifier(neighbor.getRouteReflector(), peerGroup);
             final List<BgpParameters> bgpParameters = getBgpParameters(afisSAfis, rib, tableTypeRegistry);
             final KeyMapping keyMapping = OpenConfigMappingUtil.getNeighborKey(neighbor);
             final IpAddress neighborLocalAddress = OpenConfigMappingUtil.getLocalAddress(neighbor.getTransport());
index a268e1f5075c988273caee16518d7d633bba2d1f..a651f70b6e911b8cb172f4ea5da70209e58f9648 100644 (file)
@@ -56,11 +56,9 @@ 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.openconfig.extensions.rev180329.GlobalAddPathsConfig;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev180329.GlobalConfigAugmentation;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev180329.NeighborAddPathsConfig;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev180329.NeighborClusterIdConfig;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev180329.NeighborPeerGroupConfig;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev180329.NeighborTransportConfig;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev180329.PeerGroupTransportConfig;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev180329.RouteReflectorClusterIdConfig;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev180329.PeerRole;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev180329.rib.TablesKey;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.ClusterIdentifier;
@@ -189,21 +187,34 @@ public final class OpenConfigMappingUtil {
 
     public static ClusterIdentifier getGlobalClusterIdentifier(final org.opendaylight.yang.gen.v1.http.openconfig.net
             .yang.bgp.rev151009.bgp.global.base.Config globalConfig) {
-        final RouteReflectorClusterIdConfig configAug
+        final GlobalConfigAugmentation globalConfigAugmentation
                 = globalConfig.getAugmentation(GlobalConfigAugmentation.class);
-        if (configAug != null && configAug.getRouteReflectorClusterId() != null) {
-            return new ClusterIdentifier(configAug.getRouteReflectorClusterId().getIpv4Address());
+        if (globalConfigAugmentation != null && globalConfigAugmentation.getRouteReflectorClusterId() != null) {
+            return new ClusterIdentifier(globalConfigAugmentation.getRouteReflectorClusterId().getIpv4Address());
         }
         return new ClusterIdentifier(globalConfig.getRouterId());
     }
 
     @Nullable
-    public static ClusterIdentifier getNeighborClusterIdentifier(@Nullable final org.opendaylight.yang.gen.v1.http
-            .openconfig.net.yang.bgp.rev151009.bgp.neighbor.group.Config config) {
-        if (config != null) {
-            final RouteReflectorClusterIdConfig configAug = config.getAugmentation(NeighborClusterIdConfig.class);
-            if (configAug != null && configAug.getRouteReflectorClusterId() != null) {
-                return new ClusterIdentifier(configAug.getRouteReflectorClusterId().getIpv4Address());
+    public static ClusterIdentifier getNeighborClusterIdentifier(
+            @Nullable final RouteReflector routeReflector,
+            @Nullable final PeerGroup peerGroup) {
+        if (peerGroup != null) {
+            final ClusterIdentifier clusteriId = extractClusterId(peerGroup.getRouteReflector());
+            if (clusteriId != null) {
+                return clusteriId;
+            }
+        }
+
+        return extractClusterId(routeReflector);
+    }
+
+    private static ClusterIdentifier extractClusterId(final RouteReflector routeReflector) {
+        if (routeReflector != null) {
+            final org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbor.group.route
+                    .reflector.Config config = routeReflector.getConfig();
+            if (config != null && config.getRouteReflectorClusterId() != null) {
+                return new ClusterIdentifier(config.getRouteReflectorClusterId().getIpv4Address());
             }
         }
         return null;
index 1b9fc6b55b33e4d77f78d7105188b4f2d94ea0e0..68631570d56102e339f726b155e0b1d156520fa6 100644 (file)
@@ -60,6 +60,7 @@ import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.n
 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbors.Neighbor;
 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbors.NeighborBuilder;
 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbors.NeighborKey;
+import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.peer.group.PeerGroup;
 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.peer.group.PeerGroupBuilder;
 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.top.Bgp;
 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.top.bgp.Neighbors;
@@ -89,8 +90,6 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.open
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev180329.GlobalConfigAugmentationBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev180329.NeighborAddPathsConfig;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev180329.NeighborAddPathsConfigBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev180329.NeighborClusterIdConfig;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev180329.NeighborClusterIdConfigBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev180329.NeighborPeerGroupConfig;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev180329.NeighborPeerGroupConfigBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.openconfig.extensions.rev180329.NeighborTransportConfig;
@@ -371,15 +370,23 @@ public class OpenConfigMappingUtilTest {
 
     @Test
     public void testGetNeighborClusterIdentifier() {
-        assertNull(OpenConfigMappingUtil.getNeighborClusterIdentifier(null));
 
-        final ConfigBuilder configBuilder = new ConfigBuilder();
-        assertNull(OpenConfigMappingUtil.getNeighborClusterIdentifier(configBuilder.build()));
+        assertNull(OpenConfigMappingUtil.getNeighborClusterIdentifier(null, null));
+
+        final PeerGroupBuilder peerGroup = new PeerGroupBuilder();
+        assertNull(OpenConfigMappingUtil.getNeighborClusterIdentifier(null, peerGroup.build()));
+
+        final RouteReflectorBuilder configBuilder = new RouteReflectorBuilder();
+        assertNull(OpenConfigMappingUtil.getNeighborClusterIdentifier(configBuilder.build(), peerGroup.build()));
 
-        configBuilder.addAugmentation(NeighborClusterIdConfig.class, new NeighborClusterIdConfigBuilder()
+        configBuilder.setConfig(new org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.rev151009.bgp.neighbor
+                .group.route.reflector.ConfigBuilder()
                 .setRouteReflectorClusterId(new RrClusterIdType(CLUSTER_ID)).build()).build();
-        assertEquals(CLUSTER_ID.getValue(),
-                OpenConfigMappingUtil.getNeighborClusterIdentifier(configBuilder.build()).getValue());
+        assertEquals(CLUSTER_ID.getValue(), OpenConfigMappingUtil.getNeighborClusterIdentifier(configBuilder.build(),
+                peerGroup.build()).getValue());
+
+        assertEquals(CLUSTER_ID.getValue(), OpenConfigMappingUtil.getNeighborClusterIdentifier(null,
+                peerGroup.setRouteReflector(configBuilder.build()).build()).getValue());
     }
 
     @Test