BUG-2571 : created configuration for Flowspec 13/18913/6
authorDana Kutenicsova <dkutenic@cisco.com>
Thu, 23 Apr 2015 11:23:19 +0000 (13:23 +0200)
committerRobert Varga <nite@hq.sk>
Thu, 30 Apr 2015 23:40:40 +0000 (23:40 +0000)
Implemented configuration and registration for
parser and RIB for Flowspec support.

Change-Id: I46158998f4b7fb6de6c3fc018e02df2c150104dd
Signed-off-by: Dana Kutenicsova <dkutenic@cisco.com>
bgp/controller-config/src/main/resources/initial/31-bgp.xml
bgp/controller-config/src/main/resources/initial/41-bgp-example.xml
bgp/flowspec/src/main/java/org/opendaylight/controller/config/yang/bgp/flowspec/FlowspecModule.java [new file with mode: 0644]
bgp/flowspec/src/main/java/org/opendaylight/controller/config/yang/bgp/flowspec/FlowspecModuleFactory.java [new file with mode: 0644]
bgp/flowspec/src/main/java/org/opendaylight/protocol/bgp/flowspec/BGPActivator.java [moved from bgp/flowspec/src/main/java/org/opendaylight/protocol/bgp/flowspec/FSActivator.java with 89% similarity]
bgp/flowspec/src/main/java/org/opendaylight/protocol/bgp/flowspec/RIBActivator.java [new file with mode: 0644]
bgp/flowspec/src/main/yang/odl-bgp-flowspec-cfg.yang [new file with mode: 0644]
bgp/flowspec/src/test/java/org/opendaylight/protocol/bgp/flowspec/ActivatorTest.java

index ab8538c422a68566079a8293bbe8fe85631daccb..38097207e1716cf62a65e69c95825ae08651d9c4 100644 (file)
@@ -12,6 +12,7 @@
         <capability>urn:opendaylight:params:xml:ns:yang:bgp-linkstate?module=bgp-linkstate&amp;revision=2015-02-10</capability>
         <capability>urn:opendaylight:params:xml:ns:yang:bgp-types?module=bgp-types&amp;revision=2013-09-19</capability>
         <capability>urn:opendaylight:params:xml:ns:yang:controller:bgp:linkstate?module=odl-bgp-linkstate-cfg&amp;revision=2013-11-15</capability>
+        <capability>urn:opendaylight:params:xml:ns:yang:controller:bgp:flowspec?module=odl-bgp-flowspec-cfg&amp;revision=2015-04-23</capability>
         <capability>urn:opendaylight:params:xml:ns:yang:controller:bgp:parser:spi?module=odl-bgp-parser-spi-cfg&amp;revision=2013-11-15</capability>
         <capability>urn:opendaylight:params:xml:ns:yang:controller:bgp:rib:spi?module=odl-bgp-rib-spi-cfg&amp;revision=2013-11-15</capability>
         <capability>urn:opendaylight:params:xml:ns:yang:controller:bgp:rib:impl?module=odl-bgp-rib-impl-cfg&amp;revision=2013-04-09</capability>
                         <type xmlns:bgpspi="urn:opendaylight:params:xml:ns:yang:controller:bgp:parser:spi">bgpspi:extension</type>
                         <name>bgp-linkstate</name>
                     </extension>
+                    <extension>
+                        <type xmlns:bgpspi="urn:opendaylight:params:xml:ns:yang:controller:bgp:parser:spi">bgpspi:extension</type>
+                        <name>bgp-flowspec</name>
+                    </extension>
                 </module>
                 <module>
                     <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:bgp:rib:impl">prefix:base-bgp-parser</type>
                         <type xmlns:ribspi="urn:opendaylight:params:xml:ns:yang:controller:bgp:rib:spi">ribspi:extension</type>
                         <name>bgp-linkstate</name>
                     </extension>
+                    <extension>
+                        <type xmlns:ribspi="urn:opendaylight:params:xml:ns:yang:controller:bgp:rib:spi">ribspi:extension</type>
+                        <name>bgp-flowspec</name>
+                    </extension>
                 </module>
                 <module>
                     <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:bgp:rib:impl">prefix:base-bgp-rib</type>
                         To preserve (TYPE = 99) set value bellow to false; to use IANA assigned type set the value to true or remove (true by default)-->
                     <iana-linkstate-attribute-type>true</iana-linkstate-attribute-type>
                 </module>
+                <module>
+                    <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:bgp:flowspec">prefix:bgp-flowspec</type>
+                    <name>bgp-flowspec</name>
+                </module>
                 <module>
                     <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:bgp:rib:impl">prefix:bgp-dispatcher-impl</type>
                     <name>global-bgp-dispatcher</name>
                     <afi xmlns:linkstate="urn:opendaylight:params:xml:ns:yang:bgp-linkstate">linkstate:linkstate-address-family</afi>
                     <safi xmlns:linkstate="urn:opendaylight:params:xml:ns:yang:bgp-linkstate">linkstate:linkstate-subsequent-address-family</safi>
                 </module>
+                <module>
+                    <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:bgp:rib:impl">prefix:bgp-table-type-impl</type>
+                    <name>flowspec</name>
+                    <afi xmlns:bgp="urn:opendaylight:params:xml:ns:yang:bgp-types">bgp:ipv4-address-family</afi>
+                    <safi xmlns:flowspec="urn:opendaylight:params:xml:ns:yang:bgp-flowspec">flowspec:flowspec-subsequent-address-family</safi>
+                </module>
             </modules>
 
             <services xmlns="urn:opendaylight:params:xml:ns:yang:controller:config">
                         <name>bgp-linkstate</name>
                         <provider>/modules/module[type='bgp-linkstate'][name='bgp-linkstate']</provider>
                     </instance>
+                    <instance>
+                        <name>bgp-flowspec</name>
+                        <provider>/modules/module[type='bgp-flowspec'][name='bgp-flowspec']</provider>
+                    </instance>
                 </service>
                 <service>
                     <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:bgp:rib:impl">prefix:bgp-table-type</type>
                         <name>linkstate</name>
                         <provider>/modules/module[type='bgp-table-type-impl'][name='linkstate']</provider>
                     </instance>
+                    <instance>
+                        <name>flowspec</name>
+                        <provider>/modules/module[type='bgp-table-type-impl'][name='flowspec']</provider>
+                    </instance>
                 </service>
                 <service>
                     <type xmlns:ribspi="urn:opendaylight:params:xml:ns:yang:controller:bgp:rib:spi">ribspi:extension</type>
                         <name>bgp-linkstate</name>
                         <provider>/modules/module[type='bgp-linkstate'][name='bgp-linkstate']</provider>
                     </instance>
+                    <instance>
+                        <name>bgp-flowspec</name>
+                        <provider>/modules/module[type='bgp-flowspec'][name='bgp-flowspec']</provider>
+                    </instance>
                 </service>
                 <service>
                     <type xmlns:ribspi="urn:opendaylight:params:xml:ns:yang:controller:bgp:rib:spi">ribspi:extensions</type>
index e8b948f945f0b825a58c83d3c5cdc359fe2c2f3d..34af29e585cdcc6ccb93b0b9c01030008fbdc26c 100644 (file)
                         <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:bgp:rib:impl">prefix:bgp-table-type</type>
                         <name>linkstate</name>
                     </advertized-table>
+                    <advertized-table>
+                        <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:bgp:rib:impl">prefix:bgp-table-type</type>
+                        <name>flowspec</name>
+                    </advertized-table>
                 </module>
                 -->
 
                         <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:bgp:rib:impl">prefix:bgp-table-type</type>
                         <name>linkstate</name>
                     </local-table>
+                    <local-table>
+                        <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:bgp:rib:impl">prefix:bgp-table-type</type>
+                        <name>flowspec</name>
+                    </local-table>
                     <extensions>
                         <type xmlns:ribspi="urn:opendaylight:params:xml:ns:yang:controller:bgp:rib:spi">ribspi:extensions</type>
                         <name>global-rib-extensions</name>
                 </service>
             </services>
         </data>
-
     </configuration>
 </snapshot>
diff --git a/bgp/flowspec/src/main/java/org/opendaylight/controller/config/yang/bgp/flowspec/FlowspecModule.java b/bgp/flowspec/src/main/java/org/opendaylight/controller/config/yang/bgp/flowspec/FlowspecModule.java
new file mode 100644 (file)
index 0000000..871cf05
--- /dev/null
@@ -0,0 +1,69 @@
+/*
+ * Copyright (c) 2015 Cisco Systems, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.controller.config.yang.bgp.flowspec;
+
+import org.opendaylight.protocol.bgp.flowspec.BGPActivator;
+import org.opendaylight.protocol.bgp.flowspec.RIBActivator;
+import org.opendaylight.protocol.bgp.parser.spi.BGPExtensionProviderActivator;
+import org.opendaylight.protocol.bgp.parser.spi.BGPExtensionProviderContext;
+import org.opendaylight.protocol.bgp.rib.spi.RIBExtensionProviderActivator;
+import org.opendaylight.protocol.bgp.rib.spi.RIBExtensionProviderContext;
+
+public class FlowspecModule extends org.opendaylight.controller.config.yang.bgp.flowspec.AbstractFlowspecModule {
+    public FlowspecModule(final org.opendaylight.controller.config.api.ModuleIdentifier identifier, final org.opendaylight.controller.config.api.DependencyResolver dependencyResolver) {
+        super(identifier, dependencyResolver);
+    }
+
+    public FlowspecModule(final org.opendaylight.controller.config.api.ModuleIdentifier identifier, final org.opendaylight.controller.config.api.DependencyResolver dependencyResolver, final org.opendaylight.controller.config.yang.bgp.flowspec.FlowspecModule oldModule, final java.lang.AutoCloseable oldInstance) {
+        super(identifier, dependencyResolver, oldModule, oldInstance);
+    }
+
+    @Override
+    public void customValidation() {
+        // add custom validation form module attributes here.
+    }
+
+    @Override
+    public java.lang.AutoCloseable createInstance() {
+        final class FlowspecExtension implements AutoCloseable, BGPExtensionProviderActivator, RIBExtensionProviderActivator {
+            private final BGPExtensionProviderActivator bgpact = new BGPActivator();
+            private final RIBExtensionProviderActivator ribact = new RIBActivator();
+
+            @Override
+            public void close() {
+                if (this.bgpact != null) {
+                    this.bgpact.stop();
+                }
+                if (this.ribact != null) {
+                    this.ribact.stopRIBExtensionProvider();
+                }
+            }
+
+            @Override
+            public void startRIBExtensionProvider(final RIBExtensionProviderContext context) {
+                this.ribact.startRIBExtensionProvider(context);
+            }
+
+            @Override
+            public void stopRIBExtensionProvider() {
+                this.ribact.stopRIBExtensionProvider();
+            }
+
+            @Override
+            public void start(final BGPExtensionProviderContext context) {
+                this.bgpact.start(context);
+            }
+
+            @Override
+            public void stop() {
+                this.bgpact.stop();
+            }
+        }
+        return new FlowspecExtension();
+    }
+}
diff --git a/bgp/flowspec/src/main/java/org/opendaylight/controller/config/yang/bgp/flowspec/FlowspecModuleFactory.java b/bgp/flowspec/src/main/java/org/opendaylight/controller/config/yang/bgp/flowspec/FlowspecModuleFactory.java
new file mode 100644 (file)
index 0000000..d307138
--- /dev/null
@@ -0,0 +1,11 @@
+/*
+ * Copyright (c) 2015 Cisco Systems, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.controller.config.yang.bgp.flowspec;
+public class FlowspecModuleFactory extends org.opendaylight.controller.config.yang.bgp.flowspec.AbstractFlowspecModuleFactory {
+
+}
similarity index 89%
rename from bgp/flowspec/src/main/java/org/opendaylight/protocol/bgp/flowspec/FSActivator.java
rename to bgp/flowspec/src/main/java/org/opendaylight/protocol/bgp/flowspec/BGPActivator.java
index 3806ea7bce9d361ac8614384f1baab4c50eee50a..f2fcda928ce8812e3929bfd244960d628bf18e7f 100644 (file)
@@ -13,11 +13,11 @@ import org.opendaylight.protocol.bgp.parser.impl.message.update.ExtendedCommunit
 import org.opendaylight.protocol.bgp.parser.spi.AbstractBGPExtensionProviderActivator;
 import org.opendaylight.protocol.bgp.parser.spi.BGPExtensionProviderContext;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.flowspec.rev150114.FlowspecSubsequentAddressFamily;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.path.attributes.Attributes;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.flowspec.rev150114.flowspec.routes.FlowspecRoutes;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev130919.path.attributes.attributes.ExtendedCommunities;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.Ipv4AddressFamily;
 
-public final class FSActivator extends AbstractBGPExtensionProviderActivator {
+public final class BGPActivator extends AbstractBGPExtensionProviderActivator {
 
     private static final int FLOWSPEC_SAFI = 133;
 
@@ -29,7 +29,7 @@ public final class FSActivator extends AbstractBGPExtensionProviderActivator {
 
         regs.add(context.registerNlriParser(Ipv4AddressFamily.class, FlowspecSubsequentAddressFamily.class,
                 new FSNlriParser()));
-        regs.add(context.registerNlriSerializer(Attributes.class, new FSNlriParser()));
+        regs.add(context.registerNlriSerializer(FlowspecRoutes.class, new FSNlriParser()));
 
         final ExtendedCommunitiesAttributeParser extendedCommunitiesAttributeParser = new FSExtendedCommunitiesAttributeParser(context.getReferenceCache());
         regs.add(context.registerAttributeSerializer(ExtendedCommunities.class, extendedCommunitiesAttributeParser));
diff --git a/bgp/flowspec/src/main/java/org/opendaylight/protocol/bgp/flowspec/RIBActivator.java b/bgp/flowspec/src/main/java/org/opendaylight/protocol/bgp/flowspec/RIBActivator.java
new file mode 100644 (file)
index 0000000..320d4d9
--- /dev/null
@@ -0,0 +1,22 @@
+/*
+ * Copyright (c) 2015 Cisco Systems, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.opendaylight.protocol.bgp.flowspec;
+
+import com.google.common.collect.Lists;
+import java.util.List;
+import org.opendaylight.protocol.bgp.rib.spi.AbstractRIBExtensionProviderActivator;
+import org.opendaylight.protocol.bgp.rib.spi.RIBExtensionProviderContext;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.flowspec.rev150114.FlowspecSubsequentAddressFamily;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.types.rev130919.Ipv4AddressFamily;
+
+public class RIBActivator extends AbstractRIBExtensionProviderActivator {
+    @Override
+    protected List<AutoCloseable> startRIBExtensionProviderImpl(final RIBExtensionProviderContext context) {
+        return Lists.newArrayList((AutoCloseable)context.registerRIBSupport(Ipv4AddressFamily.class, FlowspecSubsequentAddressFamily.class, FlowspecRIBSupport.getInstance()));
+    }
+}
diff --git a/bgp/flowspec/src/main/yang/odl-bgp-flowspec-cfg.yang b/bgp/flowspec/src/main/yang/odl-bgp-flowspec-cfg.yang
new file mode 100644 (file)
index 0000000..c55c1fa
--- /dev/null
@@ -0,0 +1,43 @@
+// vi: set smarttab et sw=4 tabstop=4:
+module odl-bgp-flowspec-cfg {
+    yang-version 1;
+    namespace "urn:opendaylight:params:xml:ns:yang:controller:bgp:flowspec";
+    prefix "bgpfs";
+
+    import config { prefix config; revision-date 2013-04-05; }
+    import odl-bgp-parser-spi-cfg { prefix bgpspi; revision-date 2013-11-15; }
+    import odl-bgp-rib-spi-cfg { prefix ribspi; revision-date 2013-11-15; }
+
+    organization "Cisco Systems, Inc.";
+
+    contact "Dana Kutenicsova <dkutenic@cisco.com>";
+
+    description
+        "This module contains the base YANG definitions for
+         BGP Flowspec extension.
+
+        Copyright (c)2015 Cisco Systems, Inc. All rights reserved.;
+
+        This program and the accompanying materials are made available
+        under the terms of the Eclipse Public License v1.0 which
+        accompanies this distribution, and is available at
+        http://www.eclipse.org/legal/epl-v10.html";
+
+    revision "2015-04-23" {
+        description
+            "Initial revision";
+    }
+
+    identity bgp-flowspec {
+        base config:module-type;
+        config:provided-service bgpspi:extension;
+        config:provided-service ribspi:extension;
+        config:java-name-prefix Flowspec;
+    }
+
+    augment "/config:modules/config:module/config:configuration" {
+        case bgp-flowspec {
+            when "/config:modules/config:module/config:type = 'bgp-flowspec'";
+        }
+    }
+}
index e1c5fc75ac2c853941dc1272a07b868e5b8786dd..01c704c074c5623237b68035649b7ad732755c8b 100644 (file)
@@ -20,7 +20,7 @@ public class ActivatorTest {
 
     @Test
     public void testActivator() throws Exception {
-        final FSActivator act = new FSActivator();
+        final BGPActivator act = new BGPActivator();
         final BGPExtensionProviderContext context = new SimpleBGPExtensionProviderContext();
         assertNull(context.getSubsequentAddressFamilyRegistry().classForFamily(133));
         act.start(context);