Bug-3075: BMP activator 05/21105/6
authorMilos Fabian <milfabia@cisco.com>
Tue, 26 May 2015 09:40:06 +0000 (11:40 +0200)
committerMilos Fabian <milfabia@cisco.com>
Wed, 24 Jun 2015 09:31:13 +0000 (09:31 +0000)
-registers all message and TLV parsers/serializers
-integrate BMP activator with config subystem
-create instance of activator, consume BGP extensions

Change-Id: I745fac383ff6c7e9d275ce94ed426b2751aacec6
Signed-off-by: Milos Fabian <milfabia@cisco.com>
bgp/bmp-impl/pom.xml
bgp/bmp-impl/src/main/java/org/opendaylight/controller/config/yang/bmp/impl/BaseBmpParserModule.java [new file with mode: 0644]
bgp/bmp-impl/src/main/java/org/opendaylight/controller/config/yang/bmp/impl/BaseBmpParserModuleFactory.java [new file with mode: 0644]
bgp/bmp-impl/src/main/java/org/opendaylight/protocol/bmp/impl/BmpActivator.java [new file with mode: 0644]
bgp/bmp-impl/src/main/yang/odl-bmp-impl-cfg.yang [new file with mode: 0644]

index 7b36c58b0e6a18542b98d78379da12d1adea61bf..d1b9ca6e3d2a8a4979018c71ac25180df81c48a8 100644 (file)
                     </instructions>
                 </configuration>
             </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-jar-plugin</artifactId>
-                <executions>
-                    <execution>
-                        <phase>package</phase>
-                        <goals>
-                            <goal>test-jar</goal>
-                        </goals>
-                    </execution>
-                </executions>
-            </plugin>
+          <plugin>
+              <groupId>org.opendaylight.yangtools</groupId>
+              <artifactId>yang-maven-plugin</artifactId>
+          </plugin>
         </plugins>
     </build>
 </project>
\ No newline at end of file
diff --git a/bgp/bmp-impl/src/main/java/org/opendaylight/controller/config/yang/bmp/impl/BaseBmpParserModule.java b/bgp/bmp-impl/src/main/java/org/opendaylight/controller/config/yang/bmp/impl/BaseBmpParserModule.java
new file mode 100644 (file)
index 0000000..33d84c6
--- /dev/null
@@ -0,0 +1,32 @@
+/*
+ * 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.bmp.impl;
+
+import org.opendaylight.protocol.bmp.impl.BmpActivator;
+
+public class BaseBmpParserModule extends org.opendaylight.controller.config.yang.bmp.impl.AbstractBaseBmpParserModule {
+    public BaseBmpParserModule(org.opendaylight.controller.config.api.ModuleIdentifier identifier, org.opendaylight.controller.config.api.DependencyResolver dependencyResolver) {
+        super(identifier, dependencyResolver);
+    }
+
+    public BaseBmpParserModule(org.opendaylight.controller.config.api.ModuleIdentifier identifier, org.opendaylight.controller.config.api.DependencyResolver dependencyResolver, org.opendaylight.controller.config.yang.bmp.impl.BaseBmpParserModule oldModule, 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() {
+        return new BmpActivator(getBgpExtensionsDependency().getMessageRegistry());
+    }
+
+}
diff --git a/bgp/bmp-impl/src/main/java/org/opendaylight/controller/config/yang/bmp/impl/BaseBmpParserModuleFactory.java b/bgp/bmp-impl/src/main/java/org/opendaylight/controller/config/yang/bmp/impl/BaseBmpParserModuleFactory.java
new file mode 100644 (file)
index 0000000..d0eb692
--- /dev/null
@@ -0,0 +1,12 @@
+/*
+ * 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.bmp.impl;
+public class BaseBmpParserModuleFactory extends org.opendaylight.controller.config.yang.bmp.impl.AbstractBaseBmpParserModuleFactory {
+
+}
diff --git a/bgp/bmp-impl/src/main/java/org/opendaylight/protocol/bmp/impl/BmpActivator.java b/bgp/bmp-impl/src/main/java/org/opendaylight/protocol/bmp/impl/BmpActivator.java
new file mode 100644 (file)
index 0000000..ee1142c
--- /dev/null
@@ -0,0 +1,160 @@
+/*
+ * 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.bmp.impl;
+
+import java.util.ArrayList;
+import java.util.List;
+import org.opendaylight.protocol.bgp.parser.spi.MessageRegistry;
+import org.opendaylight.protocol.bmp.impl.message.InitiationHandler;
+import org.opendaylight.protocol.bmp.impl.message.PeerDownHandler;
+import org.opendaylight.protocol.bmp.impl.message.PeerUpHandler;
+import org.opendaylight.protocol.bmp.impl.message.RouteMonitoringMessageHandler;
+import org.opendaylight.protocol.bmp.impl.message.StatisticsReportHandler;
+import org.opendaylight.protocol.bmp.impl.message.TerminationHandler;
+import org.opendaylight.protocol.bmp.impl.tlv.DescriptionTlvHandler;
+import org.opendaylight.protocol.bmp.impl.tlv.NameTlvHandler;
+import org.opendaylight.protocol.bmp.impl.tlv.ReasonTlvHandler;
+import org.opendaylight.protocol.bmp.impl.tlv.StatType0TlvHandler;
+import org.opendaylight.protocol.bmp.impl.tlv.StatType1TlvHandler;
+import org.opendaylight.protocol.bmp.impl.tlv.StatType2TlvHandler;
+import org.opendaylight.protocol.bmp.impl.tlv.StatType3TlvHandler;
+import org.opendaylight.protocol.bmp.impl.tlv.StatType4TlvHandler;
+import org.opendaylight.protocol.bmp.impl.tlv.StatType5TlvHandler;
+import org.opendaylight.protocol.bmp.impl.tlv.StatType6TlvHandler;
+import org.opendaylight.protocol.bmp.impl.tlv.StatType7TlvHandler;
+import org.opendaylight.protocol.bmp.impl.tlv.StatType8TlvHandler;
+import org.opendaylight.protocol.bmp.impl.tlv.StringTlvHandler;
+import org.opendaylight.protocol.bmp.spi.registry.AbstractBmpExtensionProviderActivator;
+import org.opendaylight.protocol.bmp.spi.registry.BmpExtensionProviderContext;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev150512.InitiationMessage;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev150512.PeerDownNotification;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev150512.PeerUpNotification;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev150512.RouteMonitoringMessage;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev150512.StatsReportsMessage;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev150512.TerminationMessage;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev150512.description.tlv.DescriptionTlv;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev150512.name.tlv.NameTlv;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev150512.reason.tlv.ReasonTlv;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev150512.stat.tlvs.AdjRibsInRoutesTlv;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev150512.stat.tlvs.DuplicatePrefixAdvertisementsTlv;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev150512.stat.tlvs.DuplicateWithdrawsTlv;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev150512.stat.tlvs.InvalidatedAsConfedLoopTlv;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev150512.stat.tlvs.InvalidatedAsPathLoopTlv;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev150512.stat.tlvs.InvalidatedClusterListLoopTlv;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev150512.stat.tlvs.InvalidatedOriginatorIdTlv;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev150512.stat.tlvs.LocRibRoutesTlv;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev150512.stat.tlvs.RejectedPrefixesTlv;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bmp.message.rev150512.string.tlv.StringTlv;
+
+/**
+ * Created by cgasparini on 15.5.2015.
+ */
+public final class BmpActivator extends AbstractBmpExtensionProviderActivator {
+
+    private final MessageRegistry messageRegistry;
+
+    public BmpActivator(final MessageRegistry messageRegistry) {
+        this.messageRegistry = messageRegistry;
+    }
+
+    @Override
+    protected List<AutoCloseable> startImpl(final BmpExtensionProviderContext context) {
+        final List<AutoCloseable> regs = new ArrayList<>();
+        registerBmpTlvHandlers(regs, context);
+        registerBmpStatTlvHandlers(regs, context);
+        registerBmpMessageHandlers(regs, context);
+        return regs;
+    }
+
+    private void registerBmpMessageHandlers(final List<AutoCloseable> regs, final BmpExtensionProviderContext context) {
+        final InitiationHandler initiationHandler = new InitiationHandler(context.getBmpInitiationTlvRegistry());
+        regs.add(context.registerBmpMessageParser(initiationHandler.getBmpMessageType(), initiationHandler));
+        regs.add(context.registerBmpMessageSerializer(InitiationMessage.class, initiationHandler));
+
+        final TerminationHandler terminationHandler = new TerminationHandler(context.getBmpTerminationTlvRegistry());
+        regs.add(context.registerBmpMessageParser(terminationHandler.getBmpMessageType(), terminationHandler));
+        regs.add(context.registerBmpMessageSerializer(TerminationMessage.class, terminationHandler));
+
+        final PeerUpHandler peerUpHandler = new PeerUpHandler(this.messageRegistry);
+        regs.add(context.registerBmpMessageParser(peerUpHandler.getBmpMessageType(), peerUpHandler));
+        regs.add(context.registerBmpMessageSerializer(PeerUpNotification.class, peerUpHandler));
+
+        final PeerDownHandler peerDownHandler = new PeerDownHandler(this.messageRegistry);
+        regs.add(context.registerBmpMessageParser(peerDownHandler.getBmpMessageType(), peerDownHandler));
+        regs.add(context.registerBmpMessageSerializer(PeerDownNotification.class, peerDownHandler));
+
+        final StatisticsReportHandler statisticsReportHandler = new StatisticsReportHandler(this.messageRegistry,
+                context.getBmpStatisticsTlvRegistry());
+        regs.add(context.registerBmpMessageParser(statisticsReportHandler.getBmpMessageType(), statisticsReportHandler));
+        regs.add(context.registerBmpMessageSerializer(StatsReportsMessage.class, statisticsReportHandler));
+
+        final RouteMonitoringMessageHandler routeMonitoringMessageHandler = new RouteMonitoringMessageHandler(this.messageRegistry);
+        regs.add(context.registerBmpMessageParser(routeMonitoringMessageHandler.getBmpMessageType(), routeMonitoringMessageHandler));
+        regs.add(context.registerBmpMessageSerializer(RouteMonitoringMessage.class, routeMonitoringMessageHandler));
+
+    }
+
+    private void registerBmpTlvHandlers(final List<AutoCloseable> regs, final BmpExtensionProviderContext context) {
+        final DescriptionTlvHandler descriptionTlvHandler = new DescriptionTlvHandler();
+        regs.add(context.registerBmpInitiationTlvParser(DescriptionTlvHandler.TYPE, descriptionTlvHandler));
+        regs.add(context.registerBmpInitiationTlvSerializer(DescriptionTlv.class, descriptionTlvHandler));
+
+        final NameTlvHandler nameTlvHandler = new NameTlvHandler();
+        regs.add(context.registerBmpInitiationTlvParser(NameTlvHandler.TYPE, nameTlvHandler));
+        regs.add(context.registerBmpInitiationTlvSerializer(NameTlv.class, nameTlvHandler));
+
+        final StringTlvHandler stringTlvHandler = new StringTlvHandler();
+        regs.add(context.registerBmpInitiationTlvParser(StringTlvHandler.TYPE, stringTlvHandler));
+        regs.add(context.registerBmpInitiationTlvSerializer(StringTlv.class, stringTlvHandler));
+        regs.add(context.registerBmpTerminationTlvParser(StringTlvHandler.TYPE, stringTlvHandler));
+        regs.add(context.registerBmpTerminationTlvSerializer(StringTlv.class, stringTlvHandler));
+
+        final ReasonTlvHandler reasonTlvHandler = new ReasonTlvHandler();
+        regs.add(context.registerBmpTerminationTlvParser(ReasonTlvHandler.TYPE, reasonTlvHandler));
+        regs.add(context.registerBmpTerminationTlvSerializer(ReasonTlv.class, reasonTlvHandler));
+    }
+
+    private void registerBmpStatTlvHandlers(final List<AutoCloseable> regs, final BmpExtensionProviderContext context) {
+        final StatType0TlvHandler statType0TlvHandler = new StatType0TlvHandler();
+        regs.add(context.registerBmpStatisticsTlvParser(StatType0TlvHandler.TYPE, statType0TlvHandler));
+        regs.add(context.registerBmpStatisticsTlvSerializer(RejectedPrefixesTlv.class, statType0TlvHandler));
+
+        final StatType1TlvHandler statType1TlvHandler = new StatType1TlvHandler();
+        regs.add(context.registerBmpStatisticsTlvParser(StatType1TlvHandler.TYPE, statType1TlvHandler));
+        regs.add(context.registerBmpStatisticsTlvSerializer(DuplicatePrefixAdvertisementsTlv.class, statType1TlvHandler));
+
+        final StatType2TlvHandler statType2TlvHandler = new StatType2TlvHandler();
+        regs.add(context.registerBmpStatisticsTlvParser(StatType2TlvHandler.TYPE, statType2TlvHandler));
+        regs.add(context.registerBmpStatisticsTlvSerializer(DuplicateWithdrawsTlv.class, statType2TlvHandler));
+
+        final StatType3TlvHandler statType3TlvHandler = new StatType3TlvHandler();
+        regs.add(context.registerBmpStatisticsTlvParser(StatType3TlvHandler.TYPE, statType3TlvHandler));
+        regs.add(context.registerBmpStatisticsTlvSerializer(InvalidatedClusterListLoopTlv.class, statType3TlvHandler));
+
+        final StatType4TlvHandler statType4TlvHandler = new StatType4TlvHandler();
+        regs.add(context.registerBmpStatisticsTlvParser(StatType4TlvHandler.TYPE, statType4TlvHandler));
+        regs.add(context.registerBmpStatisticsTlvSerializer(InvalidatedAsPathLoopTlv.class, statType4TlvHandler));
+
+        final StatType5TlvHandler statType5TlvHandler = new StatType5TlvHandler();
+        regs.add(context.registerBmpStatisticsTlvParser(StatType5TlvHandler.TYPE, statType5TlvHandler));
+        regs.add(context.registerBmpStatisticsTlvSerializer(InvalidatedOriginatorIdTlv.class, statType5TlvHandler));
+
+        final StatType6TlvHandler statType6TlvHandler = new StatType6TlvHandler();
+        regs.add(context.registerBmpStatisticsTlvParser(StatType6TlvHandler.TYPE, statType6TlvHandler));
+        regs.add(context.registerBmpStatisticsTlvSerializer(InvalidatedAsConfedLoopTlv.class, statType6TlvHandler));
+
+        final StatType7TlvHandler statType7TlvHandler = new StatType7TlvHandler();
+        regs.add(context.registerBmpStatisticsTlvParser(StatType7TlvHandler.TYPE, statType7TlvHandler));
+        regs.add(context.registerBmpStatisticsTlvSerializer(AdjRibsInRoutesTlv.class, statType7TlvHandler));
+
+        final StatType8TlvHandler statType8TlvHandler = new StatType8TlvHandler();
+        regs.add(context.registerBmpStatisticsTlvParser(StatType8TlvHandler.TYPE, statType8TlvHandler));
+        regs.add(context.registerBmpStatisticsTlvSerializer(LocRibRoutesTlv.class, statType8TlvHandler));
+    }
+}
diff --git a/bgp/bmp-impl/src/main/yang/odl-bmp-impl-cfg.yang b/bgp/bmp-impl/src/main/yang/odl-bmp-impl-cfg.yang
new file mode 100644 (file)
index 0000000..a8bdf43
--- /dev/null
@@ -0,0 +1,51 @@
+// vi: set smarttab et sw=4 tabstop=4:
+module odl-bmp-impl-cfg {
+    yang-version 1;
+    namespace "urn:opendaylight:params:xml:ns:yang:controller:bmp:impl";
+    prefix "bmp-impl";
+
+    import config { prefix config; revision-date 2013-04-05; }
+    import odl-bmp-spi-cfg { prefix spi; revision-date 2015-05-13; }
+    import odl-bgp-parser-spi-cfg { prefix bgp-spi; revision-date 2013-11-15; }
+
+    organization "Cisco Systems, Inc.";
+
+    contact "Milos Fabian <milfabia@cisco.com>";
+
+    description
+        "This module contains the base YANG definitions for
+         BMP implementation.
+
+        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-05-18" {
+        description
+            "Initial revision";
+    }
+
+    identity bmp-parser-base {
+        base config:module-type;
+        config:provided-service spi:extension;
+        config:java-name-prefix BaseBmpParser;
+    }
+
+    augment "/config:modules/config:module/config:configuration" {
+        case bmp-parser-base {
+            when "/config:modules/config:module/config:type = 'bmp-parser-base'";
+
+            container bgp-extensions {
+                uses config:service-ref {
+                    refine type {
+                        mandatory true;
+                        config:required-identity bgp-spi:consumer-extensions;
+                    }
+                }
+            }
+        }
+    }
+}
\ No newline at end of file