Merge "Updated rpcResult for GetEgressPointer"
authorPrem Sankar <prem.sankar.g@ericsson.com>
Thu, 7 May 2015 23:04:03 +0000 (23:04 +0000)
committerGerrit Code Review <gerrit@opendaylight.org>
Thu, 7 May 2015 23:04:03 +0000 (23:04 +0000)
59 files changed:
bgpmanager/bgpmanager-api/pom.xml
bgpmanager/bgpmanager-impl/pom.xml
bgpmanager/bgpmanager-impl/src/main/java/org/opendaylight/bgpmanager/BgpManager.java
bgpmanager/bgpmanager-impl/src/main/java/org/opendaylight/bgpmanager/thrift/client/implementation/BgpRouter.java
bgpmanager/bgpmanager-impl/src/main/java/org/opendaylight/bgpmanager/thrift/client/implementation/BgpSyncHandle.java
bgpmanager/bgpmanager-impl/src/main/java/org/opendaylight/bgpmanager/thrift/server/implementation/BgpThriftService.java
bgpmanager/bgpmanager-impl/src/main/java/org/opendaylight/bgpmanager/thrift/server/implementation/BgpUpdateHandler.java
commons/binding-parent/pom.xml [new file with mode: 0644]
commons/config-parent/pom.xml [new file with mode: 0644]
distribution/karaf/pom.xml
features/pom.xml
features/src/main/features/features.xml
fibmanager/fibmanager-api/pom.xml
fibmanager/fibmanager-impl/pom.xml
idmanager/idmanager-api/pom.xml
idmanager/idmanager-impl/pom.xml
idmanager/idmanager-impl/src/main/config/default-config.xml
idmanager/idmanager-impl/src/main/java/org/opendaylight/idmanager/IdManager.java
idmanager/idmanager-impl/src/main/java/org/opendaylight/idmanager/IdManagerServiceProvider.java
idmanager/idmanager-impl/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/idmanager/impl/rev150325/IdmanagerImplModule.java
idmanager/idmanager-impl/src/main/yang/idmanager-impl.yang
interfacemgr/interfacemgr-api/pom.xml
interfacemgr/interfacemgr-impl/pom.xml
interfacemgr/interfacemgr-impl/src/main/java/org/opendaylight/vpnservice/interfacemgr/IfmConstants.java
interfacemgr/interfacemgr-impl/src/main/java/org/opendaylight/vpnservice/interfacemgr/IfmUtil.java
interfacemgr/interfacemgr-impl/src/main/java/org/opendaylight/vpnservice/interfacemgr/InterfaceManager.java
interfacemgr/interfacemgr-impl/src/main/java/org/opendaylight/vpnservice/interfacemgr/InterfacemgrProvider.java
interfacemgr/interfacemgr-impl/src/test/java/org/opendaylight/vpnservice/interfacemgr/test/IfmUtilTest.java [new file with mode: 0644]
interfacemgr/interfacemgr-impl/src/test/java/org/opendaylight/vpnservice/interfacemgr/test/InterfaceManagerTest.java [new file with mode: 0644]
interfacemgr/interfacemgr-impl/src/test/java/org/opendaylight/vpnservice/interfacemgr/test/MockDataChangedEvent.java [new file with mode: 0644]
mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/vpnservice/mdsalutil/AbstractDataChangeListener.java [new file with mode: 0644]
mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/vpnservice/mdsalutil/ActionType.java
mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/vpnservice/mdsalutil/GroupEntity.java
mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/vpnservice/mdsalutil/InstructionType.java
mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/vpnservice/mdsalutil/MDSALDataStoreUtils.java [new file with mode: 0644]
mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/vpnservice/mdsalutil/MDSALUtil.java
mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/vpnservice/mdsalutil/MatchFieldType.java
mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/vpnservice/mdsalutil/MetaDataConstants.java
mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/vpnservice/mdsalutil/MetaDataUtil.java
mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/vpnservice/mdsalutil/NwConstants.java
mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/vpnservice/mdsalutil/interfaces/IMdsalApiManager.java
mdsalutil/mdsalutil-impl/pom.xml
mdsalutil/mdsalutil-impl/src/main/java/org/opendaylight/vpnservice/mdsalutil/internal/MDSALManager.java
mdsalutil/mdsalutil-impl/src/main/java/org/opendaylight/vpnservice/mdsalutil/internal/MDSALUtilProvider.java [new file with mode: 0644]
mdsalutil/mdsalutil-impl/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/mdsalutil/impl/rev150403/MdsaluttilimplModule.java
mdsalutil/mdsalutil-impl/src/test/java/org/opendaylight/vpnservice/test/AbstractMockForwardingRulesManager.java [new file with mode: 0644]
mdsalutil/mdsalutil-impl/src/test/java/org/opendaylight/vpnservice/test/MdSalUtilTest.java [new file with mode: 0644]
mdsalutil/mdsalutil-impl/src/test/java/org/opendaylight/vpnservice/test/MockFlowForwarder.java [new file with mode: 0644]
mdsalutil/mdsalutil-impl/src/test/java/org/opendaylight/vpnservice/test/MockGroupForwarder.java [new file with mode: 0644]
mdsalutil/pom.xml
model-bgp/pom.xml
nexthopmgr/nexthopmgr-api/pom.xml
nexthopmgr/nexthopmgr-impl/pom.xml
nexthopmgr/nexthopmgr-impl/src/main/java/org/opendaylight/vpnservice/nexthopmgr/NexthopManager.java
nexthopmgr/nexthopmgr-impl/src/main/java/org/opendaylight/vpnservice/nexthopmgr/NexthopmgrProvider.java
pom.xml
vpnmanager/vpnmanager-api/pom.xml
vpnmanager/vpnmanager-impl/pom.xml
vpnservice-artifacts/pom.xml

index 609a4ace30a1bbc3679782455a158fd85592b049..d359c1487bb957e0759af2321dd2f02fc1c6a923 100644 (file)
@@ -9,34 +9,18 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 
   <parent>
-    <groupId>org.opendaylight.controller</groupId>
+    <groupId>org.opendaylight.vpnservice</groupId>
     <artifactId>config-parent</artifactId>
-    <version>0.3.0-SNAPSHOT</version>
-    <relativePath/>
+    <version>0.0.1-SNAPSHOT</version>
+    <relativePath>../../commons/config-parent</relativePath>
   </parent>
 
   <modelVersion>4.0.0</modelVersion>
   <groupId>org.opendaylight.vpnservice</groupId>
   <artifactId>bgpmanager-api</artifactId>
-  <version>1.0-SNAPSHOT</version>
+  <version>${vpnservices.version}</version>
   <packaging>bundle</packaging>
-<!--
-  <dependencies>
 
-    <dependency>
-      <groupId>${project.groupId}</groupId>
-      <artifactId>vpnmanager-api</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-
-    <dependency>
-      <groupId>${project.groupId}.third-party</groupId>
-      <artifactId>org.apache.thriftlib</artifactId>
-      <version>1.0.1-SNAPSHOT</version>
-    </dependency>
-
-  </dependencies>
- -->
   <properties>
     <maven.javadoc.skip>true</maven.javadoc.skip>
   </properties>
index 7ad9092faba7600760143b7bfa02357d30e745a9..78469fd1ec2bdc562e39aa69c645a7a98800ce29 100644 (file)
@@ -9,33 +9,33 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 
   <parent>
-    <groupId>org.opendaylight.controller</groupId>
+    <groupId>org.opendaylight.vpnservice</groupId>
     <artifactId>config-parent</artifactId>
-    <version>0.3.0-SNAPSHOT</version>
-    <relativePath/>
+    <version>0.0.1-SNAPSHOT</version>
+    <relativePath>../../commons/config-parent</relativePath>
   </parent>
 
   <modelVersion>4.0.0</modelVersion>
   <groupId>org.opendaylight.vpnservice</groupId>
   <artifactId>bgpmanager-impl</artifactId>
-  <version>1.0-SNAPSHOT</version>
+  <version>${vpnservices.version}</version>
   <packaging>bundle</packaging>
   <dependencies>
 
     <dependency>
       <groupId>${project.groupId}</groupId>
       <artifactId>bgpmanager-api</artifactId>
-      <version>1.0-SNAPSHOT</version>
+      <version>${vpnservices.version}</version>
     </dependency>
     <dependency>
       <groupId>${project.groupId}</groupId>
       <artifactId>model-bgp</artifactId>
-      <version>2013.07.15.7-SNAPSHOT</version>
+      <version>${model.bgp.version}</version>
     </dependency>
     <dependency>
       <groupId>${project.groupId}</groupId>
       <artifactId>fibmanager-api</artifactId>
-      <version>0.0.1-SNAPSHOT</version>
+      <version>${vpnservices.version}</version>
     </dependency>
 
     <dependency>
@@ -45,21 +45,4 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
     </dependency>
   </dependencies>
 
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-checkstyle-plugin</artifactId>
-        <configuration>
-          <configLocation>
-            ${project.basedir}/../../commons/src/main/resources/vpns_checks.xml
-          </configLocation>
-          <failsOnError>true</failsOnError>
-          <includes>**/*.java,**/*.xml,**/*.ini</includes>
-          <excludes>**/yang/</excludes>
-        </configuration>
-      </plugin>
-    </plugins>
-  </build>
-
 </project>
index cbcaa2e5d9e3a2048f9d6b0cba28f7dca0fd1896..35d492471d2e48227a0cafc39bcff876c19c077a 100644 (file)
@@ -35,7 +35,7 @@ import org.slf4j.LoggerFactory;
 
 public class BgpManager implements BindingAwareProvider, AutoCloseable, IBgpManager {
 
-    private static final Logger s_logger = LoggerFactory.getLogger(BgpManager.class);
+    private static final Logger LOGGER = LoggerFactory.getLogger(BgpManager.class);
     private BgpConfigurationManager bgpConfigurationMgr;
     private FibDSWriter fibDSWriter;
     private BgpConfiguration   bgpConfiguration = new BgpConfiguration();
@@ -88,7 +88,7 @@ public class BgpManager implements BindingAwareProvider, AutoCloseable, IBgpMana
             try {
                 wait();
             } catch (InterruptedException e) {
-                s_logger.error("InterruptedException while waiting for Bgp connection to initialize");
+                LOGGER.error("InterruptedException while waiting for Bgp connection to initialize");
                 return;
             }
         }
@@ -96,37 +96,37 @@ public class BgpManager implements BindingAwareProvider, AutoCloseable, IBgpMana
 
     public void startBgpService() throws TException {
         if(bgpThriftClient == null) {
-            s_logger.info("Start Bgp Service - bgpThriftClient is null. Unable to start BGP service.");
+            LOGGER.info("Start Bgp Service - bgpThriftClient is null. Unable to start BGP service.");
             return;
         }
 
         // Now try start bgp - if bgp is already Active, it will tell us, nothing to do then
         try {
             bgpThriftClient.startBgp((int)bgpConfiguration.getAsNum(), bgpConfiguration.getRouterId());
-            s_logger.info("Started BGP with AS number " + (int)bgpConfiguration.getAsNum() + " and router id " + bgpConfiguration.getRouterId());
+            LOGGER.info("Started BGP with AS number " + (int)bgpConfiguration.getAsNum() + " and router id " + bgpConfiguration.getRouterId());
         } catch (BgpRouterException be) {
             if(be.getErrorCode() == BgpRouterException.BGP_ERR_ACTIVE) {
-                s_logger.info("bgp server already active");
+                LOGGER.info("bgp server already active");
                 return;
             }
             else if(be.getErrorCode() == BgpRouterException.BGP_ERR_NOT_INITED) {
-                s_logger.error("bgp server connection not initialized.");
+                LOGGER.error("bgp server connection not initialized.");
                 reInitConn();
                 return;
             }
             else {
-                s_logger.error("application error while starting bgp server " + be.getErrorCode());
+                LOGGER.error("application error while starting bgp server " + be.getErrorCode());
                 return;
             }
 
         }  catch (TException t) {
-            s_logger.error("Could not set up thrift connection with bgp server");
-            //s_logger.trace("Transport error while starting bgp server ", t);
+            LOGGER.error("Could not set up thrift connection with bgp server");
+            //LOGGER.trace("Transport error while starting bgp server ", t);
             reInitConn();
             throw t;
         } catch (Exception e) {
-            s_logger.error("Error while starting bgp server");
-            //s_logger.trace("Bgp Service not started due to exception", e);
+            LOGGER.error("Error while starting bgp server");
+            //LOGGER.trace("Bgp Service not started due to exception", e);
             return;
         }
 
@@ -136,13 +136,13 @@ public class BgpManager implements BindingAwareProvider, AutoCloseable, IBgpMana
 
     @Override
     public void onSessionInitiated(ProviderContext session) {
-        s_logger.info("BgpManager Session Initiated");
+        LOGGER.info("BgpManager Session Initiated");
         try {
             final DataBroker dataBroker = session.getSALService(DataBroker.class);
             bgpConfigurationMgr = new BgpConfigurationManager(dataBroker, bgpConfiguration, this);
             fibDSWriter = new FibDSWriter(dataBroker);
         } catch (Exception e) {
-            s_logger.error("Error initializing services", e);
+            LOGGER.error("Error initializing services", e);
         }
 
         initializeBGPCommunication();
@@ -151,7 +151,7 @@ public class BgpManager implements BindingAwareProvider, AutoCloseable, IBgpMana
 
    @Override
     public void close() throws Exception {
-        s_logger.info("BgpManager Closed");
+        LOGGER.info("BgpManager Closed");
 
        //close the client and server ends of the thrift communication
        if(bgpThriftClient != null)
@@ -174,42 +174,42 @@ public class BgpManager implements BindingAwareProvider, AutoCloseable, IBgpMana
 
     protected void addNeighbor(String ipAddress, long asNum) throws TException {
         if(bgpThriftClient == null) {
-            s_logger.info("Add BGP Neighbor - bgpThriftClient is null. Unable to add BGP Neighbor.");
+            LOGGER.info("Add BGP Neighbor - bgpThriftClient is null. Unable to add BGP Neighbor.");
             return;
         }
 
         try {
             bgpThriftClient.addNeighbor(ipAddress, (int) asNum);
         } catch (BgpRouterException b) {
-            s_logger.error("Failed to add BGP neighbor " + ipAddress + "due to BgpRouter Exception number " + b.getErrorCode());
-            s_logger.error("BgpRouterException trace ", b);
+            LOGGER.error("Failed to add BGP neighbor " + ipAddress + "due to BgpRouter Exception number " + b.getErrorCode());
+            LOGGER.error("BgpRouterException trace ", b);
         } catch (TException t) {
-            s_logger.error(String.format("Failed adding neighbor %s due to Transport error", ipAddress));
+            LOGGER.error(String.format("Failed adding neighbor %s due to Transport error", ipAddress));
             reInitConn();
             throw t;
         } catch (Exception e) {
-            s_logger.error(String.format("Failed adding neighbor %s", ipAddress));
+            LOGGER.error(String.format("Failed adding neighbor %s", ipAddress));
         }
     }
 
 
     protected void deleteNeighbor(String ipAddress) throws TException {
         if(bgpThriftClient == null) {
-            s_logger.info("Delete BGP Neighbor - bgpThriftClient is null. Unable to delete BGP Neighbor.");
+            LOGGER.info("Delete BGP Neighbor - bgpThriftClient is null. Unable to delete BGP Neighbor.");
             return;
         }
 
         try {
             bgpThriftClient.delNeighbor(ipAddress);
         } catch (BgpRouterException b) {
-            s_logger.error("Failed to delete BGP neighbor " + ipAddress + "due to BgpRouter Exception number " + b.getErrorCode());
-            s_logger.error("BgpRouterException trace ", b);
+            LOGGER.error("Failed to delete BGP neighbor " + ipAddress + "due to BgpRouter Exception number " + b.getErrorCode());
+            LOGGER.error("BgpRouterException trace ", b);
         }catch (TException t) {
-            s_logger.error(String.format("Failed deleting neighbor %s due to Transport error", ipAddress));
+            LOGGER.error(String.format("Failed deleting neighbor %s due to Transport error", ipAddress));
             reInitConn();
             throw t;
         } catch (Exception e) {
-            s_logger.error(String.format("Failed deleting neighbor %s", ipAddress));
+            LOGGER.error(String.format("Failed deleting neighbor %s", ipAddress));
         }
     }
 
@@ -217,21 +217,21 @@ public class BgpManager implements BindingAwareProvider, AutoCloseable, IBgpMana
     @Override
     public void addVrf(String rd, Collection<String> importRts, Collection<String> exportRts) throws Exception {
         if(bgpThriftClient == null) {
-            s_logger.info("Add BGP vrf - bgpThriftClient is null. Unable to add BGP vrf.");
+            LOGGER.info("Add BGP vrf - bgpThriftClient is null. Unable to add BGP vrf.");
             return;
         }
         try {
             bgpThriftClient.addVrf(rd, new ArrayList<>(importRts), new ArrayList<>(exportRts));
         } catch (BgpRouterException b) {
-            s_logger.error("Failed to add BGP vrf " + rd + "due to BgpRouter Exception number " + b.getErrorCode());
-            s_logger.error("BgpRouterException trace ", b);
+            LOGGER.error("Failed to add BGP vrf " + rd + "due to BgpRouter Exception number " + b.getErrorCode());
+            LOGGER.error("BgpRouterException trace ", b);
             throw b;
         } catch (TException t) {
-            s_logger.error(String.format("Failed adding vrf %s due to Transport error", rd));
+            LOGGER.error(String.format("Failed adding vrf %s due to Transport error", rd));
             reInitConn();
             throw t;
         } catch (Exception e) {
-            s_logger.error(String.format("Failed adding vrf %s", rd));
+            LOGGER.error(String.format("Failed adding vrf %s", rd));
             throw e;
         }
     }
@@ -239,21 +239,21 @@ public class BgpManager implements BindingAwareProvider, AutoCloseable, IBgpMana
     @Override
     public void deleteVrf(String rd) throws Exception {
         if(bgpThriftClient == null) {
-            s_logger.info("Delete BGP vrf - bgpThriftClient is null. Unable to delete BGP vrf.");
+            LOGGER.info("Delete BGP vrf - bgpThriftClient is null. Unable to delete BGP vrf.");
             return;
         }
         try {
             bgpThriftClient.delVrf(rd);
         } catch (BgpRouterException b) {
-            s_logger.error("Failed to delete BGP vrf " + rd + "due to BgpRouter Exception number " + b.getErrorCode());
-            s_logger.error("BgpRouterException trace ", b);
+            LOGGER.error("Failed to delete BGP vrf " + rd + "due to BgpRouter Exception number " + b.getErrorCode());
+            LOGGER.error("BgpRouterException trace ", b);
             throw b;
         } catch (TException t) {
-            s_logger.error(String.format("Failed deleting vrf %s due to Transport error", rd));
+            LOGGER.error(String.format("Failed deleting vrf %s due to Transport error", rd));
             reInitConn();
             throw t;
         } catch (Exception e) {
-            s_logger.error(String.format("Failed deleting vrf %s", rd));
+            LOGGER.error(String.format("Failed deleting vrf %s", rd));
             throw e;
         }
     }
@@ -269,16 +269,16 @@ public class BgpManager implements BindingAwareProvider, AutoCloseable, IBgpMana
         try {
             bgpThriftClient.addPrefix(rd, prefix, nextHop, vpnLabel);
         } catch (BgpRouterException b) {
-            s_logger.error("Failed to add BGP prefix " + prefix + "due to BgpRouter Exception number " + b.getErrorCode());
-            s_logger.error("BgpRouterException trace ", b);
+            LOGGER.error("Failed to add BGP prefix " + prefix + "due to BgpRouter Exception number " + b.getErrorCode());
+            LOGGER.error("BgpRouterException trace ", b);
             throw b;
         } catch (TException t) {
-            s_logger.error(String.format("Failed adding prefix entry <vrf:prefix:nexthop:vpnlabel> %s:%s:%s:%d due to Transport error",
+            LOGGER.error(String.format("Failed adding prefix entry <vrf:prefix:nexthop:vpnlabel> %s:%s:%s:%d due to Transport error",
                 rd, prefix, nextHop, vpnLabel));
             reInitConn();
             throw t;
         } catch (Exception e) {
-            s_logger.error(String.format("Failed adding prefix entry <vrf:prefix:nexthop:vpnlabel> %s:%s:%s:%d",
+            LOGGER.error(String.format("Failed adding prefix entry <vrf:prefix:nexthop:vpnlabel> %s:%s:%s:%d",
                 rd, prefix, nextHop, vpnLabel));
             throw e;
         }
@@ -295,16 +295,16 @@ public class BgpManager implements BindingAwareProvider, AutoCloseable, IBgpMana
         try {
             bgpThriftClient.delPrefix(rd, prefix);
         } catch (BgpRouterException b) {
-            s_logger.error("Failed to delete BGP prefix " + prefix + "due to BgpRouter Exception number " + b.getErrorCode());
-            s_logger.error("BgpRouterException trace ", b);
+            LOGGER.error("Failed to delete BGP prefix " + prefix + "due to BgpRouter Exception number " + b.getErrorCode());
+            LOGGER.error("BgpRouterException trace ", b);
             throw b;
         } catch (TException t) {
-            s_logger.error(String.format("Failed deleting prefix entry <vrf:prefix> %s:%s due to Transport error",
+            LOGGER.error(String.format("Failed deleting prefix entry <vrf:prefix> %s:%s due to Transport error",
                 rd, prefix));
             reInitConn();
             throw t;
         } catch (Exception e) {
-            s_logger.error(String.format("Failed deleting prefix entry <vrf:prefix> %s:%s",
+            LOGGER.error(String.format("Failed deleting prefix entry <vrf:prefix> %s:%s",
                 rd, prefix));
             throw e;
         }
@@ -316,22 +316,22 @@ public class BgpManager implements BindingAwareProvider, AutoCloseable, IBgpMana
         bgpPort = port;
 
         if(bgpThriftClient == null) {
-            s_logger.error("Failed to connect to BGP server since Bgp Thrift Client is not initialized yet.");
+            LOGGER.error("Failed to connect to BGP server since Bgp Thrift Client is not initialized yet.");
             return;
         }
         try {
             bgpThriftClient.connect(host, port);
-            s_logger.info("Connected to BGP server " + host + " on port " + port);
+            LOGGER.info("Connected to BGP server " + host + " on port " + port);
         } catch (BgpRouterException b) {
-            s_logger.error("Failed to connect to BGP server " + host + " on port " + port + " due to BgpRouter Exception number " + b.getErrorCode());
+            LOGGER.error("Failed to connect to BGP server " + host + " on port " + port + " due to BgpRouter Exception number " + b.getErrorCode());
             //_logger.error("BgpRouterException trace ", b);
             throw b;
         } catch (TException t) {
-            s_logger.error("Failed to initialize BGP Connection due to Transport error ");
+            LOGGER.error("Failed to initialize BGP Connection due to Transport error ");
             throw t;
         }
         catch (Exception e) {
-            s_logger.error("Failed to initialize BGP Connection ");
+            LOGGER.error("Failed to initialize BGP Connection ");
             throw e;
         }
     }
@@ -340,8 +340,8 @@ public class BgpManager implements BindingAwareProvider, AutoCloseable, IBgpMana
         try {
             bgpConfiguration.setAsNum(asNum);
             bgpConfiguration.setRouterId(routerId);
-        } catch(Throwable e) {
-            s_logger.error("failed configuring bgp ",e);
+        } catch(Exception e) {
+            LOGGER.error("failed configuring bgp ",e);
         }
     }
 
@@ -349,173 +349,18 @@ public class BgpManager implements BindingAwareProvider, AutoCloseable, IBgpMana
 
         try {
             bgpThriftClient.reInit();
-            s_logger.info("Reinitialized connection to BGP Server " + bgpHost);
+            LOGGER.info("Reinitialized connection to BGP Server " + bgpHost);
         } catch (BgpRouterException b) {
-            s_logger.error("Failed to reinitialize connection to BGP server " + bgpHost + " on port " + bgpPort + " due to BgpRouter Exception number " + b.getErrorCode());
-            s_logger.error("BgpRouterException trace ", b);
+            LOGGER.error("Failed to reinitialize connection to BGP server " + bgpHost + " on port " + bgpPort + " due to BgpRouter Exception number " + b.getErrorCode());
+            LOGGER.error("BgpRouterException trace ", b);
         } catch (TException t) {
-            s_logger.error("Failed to reinitialize BGP Connection due to Transport error.");
+            LOGGER.error("Failed to reinitialize BGP Connection due to Transport error.");
         }
         catch (Exception e) {
-            s_logger.error("Failed to reinitialize BGP Connection.", e);
+            LOGGER.error("Failed to reinitialize BGP Connection.", e);
         }
     }
 
-    /*public synchronized void startBgpSync() {
-        boolean getRoutes = true;
-        readBgpConfiguration();
-        try {
-            pushConfigurationToBgp();
-
-        } catch (BgpRouterException b) {
-            s_logger.error("Failed to push configuration to BGP due to BgpRouter Exception number " + b.getErrorCode());
-            s_logger.error("BgpRouterException trace ", b);
-            if(b.getErrorCode() == BgpRouterException.BGP_ERR_INACTIVE)
-                getRoutes = false;
-        } catch (Exception e) {
-            s_logger.error("Failed to push configuration to bgp ", e);
-        }
-        if(getRoutes == true)
-            pullConfigurationFromBgp();
-        //controllerResyncLatch.countDown();
-    }*/
-
-    /*public void waitForControllerBgpResync() {
-        try {
-            controllerResyncLatch.await();
-        } catch (InterruptedException e) {
-        }
-    }*/
-
-    /*private void pullConfigurationFromBgp() {
-        //get routes from bgp server
-        s_logger.info("Starting bgp route sync");
-        try {
-            bgpThriftClient.doRouteSync();
-        } catch (BgpRouterException b) {
-            s_logger.error("Failed BGP Route sync due to BgpRouter Exception number " + b.getErrorCode());
-            s_logger.error("BgpRouterException trace ", b);
-        } catch (Exception e) {
-            s_logger.error("Failed to pull configuration from bgp ", e);
-        }
-    }*/
-
-    /*private BgpConfiguration readBgpConfiguration() {
-        if (cache != null) {
-            bgpConfiguration = cache.get("bgpConfiguration");
-            if (bgpConfiguration == null) {
-                s_logger.info("Created bgp configuration cache");
-                bgpConfiguration = new BgpConfiguration();
-                cache.put("bgpConfiguration", bgpConfiguration);
-            } else {
-                s_logger.info("Using bgp configuration cache");
-            }
-        }
-        return bgpConfiguration;
-    }*/
-
-    /*public synchronized void pushConfigurationToBgp() throws Exception {
-        if (bgpConfiguration.getAsNum() == 0) {
-            s_logger.error("No as num configured, Skipping the push configuration to bgp ");
-            throw new BgpRouterException(BgpRouterException.BGP_ERR_INACTIVE);
-            //return;
-        }
-        if(bgpThriftClient == null) {
-            s_logger.error("bgpThriftClient is null. Skipping the push configuration to bgp.");
-            throw new BgpRouterException(BgpRouterException.BGP_ERR_INACTIVE);
-            //return;
-        }
-
-        try {
-            bgpThriftClient.startBgp((int)bgpConfiguration.getAsNum(), bgpConfiguration.getRouterId());
-            s_logger.info("Started BGP with AS number " + (int)bgpConfiguration.getAsNum() + " and router id " + bgpConfiguration.getRouterId());
-        } catch (BgpRouterException be) {
-            if(be.getErrorCode() == BgpRouterException.BGP_ERR_ACTIVE) {
-                s_logger.info("bgp server already active");
-                return;                //the assumption here is that bgp server is configured already with neighbor, vrfs and routes as well
-            } if(be.getErrorCode() == BgpRouterException.BGP_ERR_INACTIVE) {
-                s_logger.info("bgp server inactive");
-                throw be;
-            }
-
-            else {
-                s_logger.error("application error while starting bgp server %d", be.getErrorCode());
-                return;
-            }
-
-        } catch (SocketTimeoutException to) {
-            s_logger.error("Socket Timeout error while starting bgp server", to);
-            return;
-        } catch (TException t) {
-            s_logger.error("Transport error while starting bgp server ", t);
-            return;
-        } catch (Exception e) {
-            s_logger.error("Error while starting bgp server", e);
-        }
-
-        if (bgpConfiguration.getNeighbourIp().trim().length() > 0) {
-            try {
-                bgpThriftClient.addNeighbor(bgpConfiguration.getNeighbourIp(), bgpConfiguration.getNeighbourAsNum());
-            } catch (TException t) {
-                s_logger.error("Failed to push vrf to bgp due to Transport error" );
-                //retry connection
-                reInitConn();
-                addNeighbor(bgpConfiguration.getNeighbourIp(), bgpConfiguration.getNeighbourAsNum());
-            } catch (Exception e) {
-                s_logger.error("Error while starting bgp server", e);
-            }
-        }
-
-        Tenant tenant;
-        try {
-            tenant = tenantManager.getTenant("NEUTRON");
-        } catch (TenantNotFoundException e) {
-            s_logger.error("Tenant not found. Skipping push configuration to bgp.");
-            return;
-        }
-        if (tenant != null) {
-            int tenantId = tenant.getTenantId();
-
-            Set<VpnInstanceInfo> vpnInfos = l3Manager.getVpnInstanceManager().getVpnsForTenant(tenantId);
-            s_logger.info("Number of vpns to configure is "+vpnInfos.size());
-            for (VpnInstanceInfo vpnInfo: vpnInfos) {
-                try {
-                    bgpThriftClient.addVrf(vpnInfo.getRouteDistinguisher(),
-                        new ArrayList<>(vpnInfo.getRtImportList()),
-                        new ArrayList<>(vpnInfo.getRtExportList()));
-                } catch (TException t) {
-                    s_logger.error("Failed to push vrf to bgp due to Transport error" );
-                    //retry connection
-                    reInitConn();
-                    addVrf(vpnInfo.getRouteDistinguisher(), new ArrayList<>(vpnInfo.getRtImportList()),
-                        new ArrayList<>(vpnInfo.getRtExportList()));
-                } catch (Exception e) {
-                    s_logger.error("Failed to push vrf to bgp ", e);
-                }
-            }
-            for (VpnInstanceInfo vpnInfo: vpnInfos) {
-                ConcurrentMap<FibInfo, Object>  fibInfos = l3Manager.getVpnInstanceManager().
-                    getLocalFibInfosForRdCache(vpnInfo.getRouteDistinguisher());
-                s_logger.info("Number of fib infos to configure is "+fibInfos.size());
-                for (FibInfo fibInfo : fibInfos.keySet()) {
-                    try {
-                        bgpThriftClient.addPrefix(vpnInfo.getRouteDistinguisher(), fibInfo.getDestinationPrefix(),
-                            fibInfo.getNextHopPrefix(), (int) fibInfo.getLabel());
-                    } catch (TException t) {
-                        s_logger.error("Failed to push route to bgp due to Transport error" );
-                        reInitConn();
-                        addPrefix(vpnInfo.getRouteDistinguisher(), fibInfo.getDestinationPrefix(),
-                            fibInfo.getNextHopPrefix(), (int) fibInfo.getLabel());
-                    } catch (Exception e) {
-                        s_logger.error("Failed to push route to bgp ", e);
-                    }
-                }
-            }
-        }
-
-    }
-    */
-
     public void disconnect() {
         bgpThriftClient.disconnect();
     }
index 181e266427071f85f542d432040d882c8ccc6d45..e5af15acd93e733c946c5d4d08b633a9334102f6 100644 (file)
@@ -17,10 +17,9 @@ import org.slf4j.LoggerFactory;
 
 public class BgpRouter {
     private TTransport transport;
-    private TSocket sock;
     private TProtocol protocol;
     private static BgpConfigurator.Client bgpClient=null;
-    private static final Logger logger = LoggerFactory.getLogger(BgpRouter.class);
+    private static final Logger LOGGER = LoggerFactory.getLogger(BgpRouter.class);
 
 
     private final static int ADD_NBR = 1;
@@ -31,10 +30,6 @@ public class BgpRouter {
     private final static int DEL_PFX = 6;
     private final static int START_BGP = 7;
 
-    //public final static int BGP_ERR_INITED = 101;
-    //public final static int BGP_ERR_NOT_INITED = 102;
-
-
     private final static int GET_RTS_INIT = 0;
     private final static int GET_RTS_NEXT = 1;
 
@@ -75,38 +70,42 @@ public class BgpRouter {
         this.bgpPort = bgpPort;
         bop = new BgpOp();
         try {
-            logger.info("Connecting to BGP Server " + bgpHost + " on port " + bgpPort);
+            LOGGER.info("Connecting to BGP Server " + bgpHost + " on port " + bgpPort);
             reInit();
         } catch (Exception e) {
-            logger.error("Failed connecting to BGP server ");
+            LOGGER.error("Failed connecting to BGP server ");
             throw e;
         }
     }
 
     public void disconnect() {
-        if(transport != null)
+        if(transport != null) {
             transport.close();
+        }
     }
 
     public void reInit()
         throws TException, BgpRouterException {
-        if(transport != null)
+        if(transport != null) {
             transport.close();
+        }
         transport = new TSocket(bgpHost, bgpPort);
         ((TSocket)transport).setTimeout(Constants.CL_SKT_TIMEO_MS);
         transport.open();
         protocol = new TBinaryProtocol(transport);
         bgpClient = new BgpConfigurator.Client(protocol);
-        if(bop == null)
+        if(bop == null) {
             bop = new BgpOp();
+        }
     }
 
     private void dispatch(BgpOp op)
         throws TException, BgpRouterException {
         int result = 1;
 
-        if (bgpClient == null)
+        if (bgpClient == null) {
             throw new BgpRouterException(BgpRouterException.BGP_ERR_NOT_INITED);
+        }
 
         switch (op.type) {
             case START_BGP:
@@ -133,7 +132,9 @@ public class BgpRouter {
                 break;
             default: break;
         }
-        if (result != 0) throw new BgpRouterException(result);
+        if (result != 0) {
+            throw new BgpRouterException(result);
+        }
     }
 
     public void startBgp(int asNum, String rtrId)
@@ -141,7 +142,7 @@ public class BgpRouter {
         bop.type = START_BGP;
         bop.asNum = asNum;
         bop.rtrId = rtrId;
-        logger.info("Starting BGP Server with as number " + asNum + " and router ID " + rtrId);
+        LOGGER.info("Starting BGP Server with as number " + asNum + " and router ID " + rtrId);
         dispatch(bop);
     }
 
@@ -150,7 +151,7 @@ public class BgpRouter {
         bop.type = ADD_NBR;
         bop.nbrIp = nbrIp;
         bop.nbrAsNum = nbrAsNum;
-        logger.info("Adding BGP Neighbor " + nbrIp + " with as number " + nbrAsNum);
+        LOGGER.info("Adding BGP Neighbor " + nbrIp + " with as number " + nbrAsNum);
         dispatch(bop);
     }
 
@@ -158,7 +159,7 @@ public class BgpRouter {
         throws TException, BgpRouterException {
         bop.type = DEL_NBR;
         bop.nbrIp = nbrIp;
-        logger.info("Deleting BGP Neighbor " + nbrIp);
+        LOGGER.info("Deleting BGP Neighbor " + nbrIp);
         dispatch(bop);
     }
 
@@ -168,7 +169,7 @@ public class BgpRouter {
         bop.rd = rd;
         bop.irts = irts;
         bop.erts = erts;
-        logger.info("Adding BGP VRF rd: " + rd);
+        LOGGER.info("Adding BGP VRF rd: " + rd);
         dispatch(bop);
     }
 
@@ -176,7 +177,7 @@ public class BgpRouter {
         throws TException, BgpRouterException {
         bop.type = DEL_VRF;
         bop.rd = rd;
-        logger.info("Deleting BGP VRF rd: " + rd);
+        LOGGER.info("Deleting BGP VRF rd: " + rd);
         dispatch(bop);
     }
 
@@ -187,7 +188,7 @@ public class BgpRouter {
         bop.pfx = prefix;
         bop.nh = nexthop;
         bop.lbl = label;
-        logger.info("Adding BGP route - rd:" + rd + " prefix:" + prefix + " nexthop:" + nexthop + " label:" + label);
+        LOGGER.info("Adding BGP route - rd:" + rd + " prefix:" + prefix + " nexthop:" + nexthop + " label:" + label);
         dispatch(bop);
     }
 
@@ -196,16 +197,18 @@ public class BgpRouter {
         bop.type = DEL_PFX;
         bop.rd = rd;
         bop.pfx = prefix;
-        logger.info("Deleting BGP route - rd:" + rd + " prefix:" + prefix);
+        LOGGER.info("Deleting BGP route - rd:" + rd + " prefix:" + prefix);
         dispatch(bop);
     }
 
     public int initRibSync(BgpSyncHandle handle)
         throws TException, BgpRouterException {
-        if (bgpClient == null)
+        if (bgpClient == null) {
             throw new BgpRouterException(BgpRouterException.BGP_ERR_NOT_INITED);
-        if (handle.getState() == BgpSyncHandle.ITERATING)
+        }
+        if (handle.getState() == BgpSyncHandle.ITERATING) {
             return BgpRouterException.BGP_ERR_IN_ITER;
+        }
         handle.setState(BgpSyncHandle.INITED);
         handle.setMore(1);
         return 0;
@@ -213,8 +216,9 @@ public class BgpRouter {
 
     public int endRibSync(BgpSyncHandle handle)
         throws TException, BgpRouterException {
-        if (bgpClient == null)
+        if (bgpClient == null) {
             throw new BgpRouterException(BgpRouterException.BGP_ERR_NOT_INITED);
+        }
         int state = handle.getState();
         switch (state) {
             case BgpSyncHandle.INITED:
@@ -233,8 +237,9 @@ public class BgpRouter {
 
     public Routes doRibSync(BgpSyncHandle handle)
         throws TException, BgpRouterException {
-        if (bgpClient == null)
+        if (bgpClient == null) {
             throw new BgpRouterException(BgpRouterException.BGP_ERR_NOT_INITED);
+        }
         int state = handle.getState();
         if (state != BgpSyncHandle.INITED && state != BgpSyncHandle.ITERATING) {
             Routes r = new Routes();
@@ -246,11 +251,13 @@ public class BgpRouter {
         handle.setState(BgpSyncHandle.ITERATING);
         int winSize = handle.getMaxCount()*handle.getRouteSize();
         Routes outRoutes = bgpClient.getRoutes(op, winSize);
-       if (outRoutes.errcode != 0)
-            return outRoutes;
+       if (outRoutes.errcode != 0) {
+           return outRoutes;
+       }
         handle.setMore(outRoutes.more);
-        if (outRoutes.more == 0)
+        if (outRoutes.more == 0) {
             handle.setState(BgpSyncHandle.DONE);
+        }
         return outRoutes;
     }
 
@@ -260,13 +267,13 @@ public class BgpRouter {
         BgpSyncHandle bsh = BgpSyncHandle.getInstance();
 
         try {
-            logger.info("Starting BGP Route sync.. ");
+            LOGGER.info("Starting BGP Route sync.. ");
             initRibSync(bsh);
             while (bsh.getState() != bsh.DONE) {
                 Routes r = doRibSync(bsh);
                 if(r.getErrcode() == BgpRouterException.BGP_ERR_INACTIVE) {
                     //BGP server is inactive; log and return
-                    logger.error("BGP Server is inactive. Failed BGP Route sync");
+                    LOGGER.error("BGP Server is inactive. Failed BGP Route sync");
                     return;
                 }
                 Iterator<Update> iter = r.getUpdatesIterator();
@@ -281,37 +288,12 @@ public class BgpRouter {
                 }
             }
             endRibSync(bsh);
-            logger.info("Completed BGP Route sync.");
+            LOGGER.info("Completed BGP Route sync.");
         }  catch (Exception e) {
             throw e;
         }
     };
 
 
-    public List<Route> getRoutes()
-        throws TException, BgpRouterException {
-
-        BgpSyncHandle bsh = BgpSyncHandle.getInstance();
-        List<Route> allRoutes = new ArrayList<Route>();
-
-        try {
-            initRibSync(bsh);
-            while (bsh.getState() != bsh.DONE) {
-                Routes r = doRibSync(bsh);
-                Iterator<Update> iter = r.getUpdatesIterator();
-                while (iter.hasNext()) {
-                    Update u = iter.next();
-                    Route route = new Route(u.rd, u.prefix, u.prefixlen, u.nexthop, u.label);
-
-                    allRoutes.add(route);
-                }
-            }
-            endRibSync(bsh);
-        }  catch (Exception e) {
-            throw e;
-        }
-        return allRoutes;
-    };
-
 
 }
index e00515f3fe18631ff0380237f23758b07ff57e18..5c0eb4238c2dc7a6a3e75982706eb239f83bb32e 100644 (file)
@@ -4,9 +4,12 @@ package org.opendaylight.bgpmanager.thrift.client.implementation;
 import java.io.IOException;
 import java.net.Socket;
 import java.net.SocketException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 public class BgpSyncHandle {
     private static BgpSyncHandle handle = null;
+    private static final Logger LOGGER = LoggerFactory.getLogger(BgpSyncHandle.class);
     private int more;
     private int state;
 
@@ -16,7 +19,7 @@ public class BgpSyncHandle {
     public static final int ABORTED = 4;
     public static final int NEVER_DONE = 5;
 
-    public static final int default_tcp_sock_sz = 87380;    //default receive buffer size on linux > 2.4 (SLES 11)
+    public static final int DEFAULT_TCP_SOCK_SZ = 87380;    //default receive buffer size on linux > 2.4
 
     private BgpSyncHandle() {
         more = 1; 
@@ -24,8 +27,9 @@ public class BgpSyncHandle {
     }
 
     public static synchronized BgpSyncHandle getInstance() {
-       if (handle == null) 
+       if (handle == null) {
            handle = new BgpSyncHandle();
+       }
        return handle;
     }
 
@@ -36,14 +40,16 @@ public class BgpSyncHandle {
     public int getMaxCount() {
         //compute the max count of routes we would like to send
         Socket skt = new Socket();
-        int sockBufSz = default_tcp_sock_sz;
+        int sockBufSz = DEFAULT_TCP_SOCK_SZ;
         try {
             sockBufSz = skt.getReceiveBufferSize();
         } catch (SocketException s) {
+            LOGGER.warn("Socket Exception while retrieving default socket buffer size");
         }
         try {
             skt.close();
         } catch (IOException e) {
+            LOGGER.warn("IO Exception while closing socket for retrieving default socket buffer size");
         }
         return sockBufSz/getRouteSize();
     }
index c6d01195c109050a2331b335a074060502e5f499..dfe4af646d97f2907c2f8b39c1cd6bd5d81ea699 100644 (file)
@@ -14,14 +14,12 @@ import org.slf4j.LoggerFactory;
 
 public class BgpThriftService {
        
-       private static final Logger logger = LoggerFactory.getLogger(BgpThriftService.class);
+       private static final Logger LOGGER = LoggerFactory.getLogger(BgpThriftService.class);
        
        private int port;
-       //private int serverType;
        private int maxWorkerThreads;
        private int minWorkerThreads;
     private TServerTransport serverTransport;
-       //private TNonblockingServerTransport serverTransport;
     private TServer server;
        private BgpUpdateHandler notificationHandler;
        private BgpManager bgpManager;
@@ -29,17 +27,16 @@ public class BgpThriftService {
     public BgpThriftService(BgpManager bgpMgr, FibDSWriter dsWriter) {
        bgpManager = bgpMgr;
                notificationHandler = new BgpUpdateHandler(bgpManager, dsWriter);
-               //fibDSWriter = dsWriter;
     }
 
 
        public void start() {
-               logger.info("BGP Thrift Server starting.");
+               LOGGER.info("BGP Thrift Server starting.");
                startBgpThriftServer();
        }
        
        public void stop() {
-               logger.info("BGP Thrift Server stopping.");
+               LOGGER.info("BGP Thrift Server stopping.");
                stopBgpThriftServer();
        }
 
@@ -47,7 +44,7 @@ public class BgpThriftService {
         * Destroy method called up after the bundle has been stopped
         */
        public void destroy() {
-               logger.debug("BGP Thrift Server destroy ");
+               LOGGER.debug("BGP Thrift Server destroy ");
        }
 
     /**
@@ -71,7 +68,7 @@ public class BgpThriftService {
 
        public void stopBgpThriftServer() {
                try {
-            logger.debug("Server stopping");
+            LOGGER.debug("Server stopping");
 
             if (serverTransport != null) {
                 serverTransport.close();
@@ -79,21 +76,19 @@ public class BgpThriftService {
             
             server.stop();
         } catch (Exception e) {
-            logger.error("Error while stopping the server - {} {}", getClass().getName(), e.getMessage());
+            LOGGER.error("Error while stopping the server - {} {}", getClass().getName(), e.getMessage());
         }
        }
        
        private class ThriftRunnable implements Runnable {
                @Override
                public void run() {
-                       //notificationHandler = new BgpUpdateHandler(bgpManager);
 
                try {
                                serverTransport = new TServerSocket(port);
-                               //serverTransport = new TNonblockingServerSocket(port);
-                   logger.info("Server Socket on Port {} ", port);
-                       } catch (TTransportException e) {                       
-                               e.printStackTrace();
+                   LOGGER.info("Server Socket on Port {} ", port);
+                       } catch (TTransportException e) {
+                               LOGGER.error("Transport Exception while starting bgp thrift server", e);
                                return;
                        }
                        /* This may need to change. Right now, its as good as a blocking server for each client (client would be
@@ -103,11 +98,6 @@ public class BgpThriftService {
                server = new TThreadPoolServer(new TThreadPoolServer.Args(serverTransport)
                        .maxWorkerThreads(maxWorkerThreads).minWorkerThreads(minWorkerThreads)
                        .processor(new BgpUpdater.Processor<BgpUpdateHandler>(notificationHandler)));
-                       /*
-                       THsHaServer.Args args = new THsHaServer.Args(serverTransport);
-                       args.workerThreads(10);
-                       server = new THsHaServer(args.processor(new BgpUpdater.Processor<BgpUpdateHandler>(notificationHandler)));*/
-
                        server.serve();
                }               
        }
index a9aecccc9fd5edd6ccb423cc858a7c0a2add7ecc..9f3c40a89a65a2d5ae33f791bf1cab1abd3767bf 100644 (file)
@@ -8,7 +8,7 @@ import org.slf4j.LoggerFactory;
 
 class BgpUpdateHandler implements BgpUpdater.Iface {
 
-    private static final Logger logger = LoggerFactory.getLogger(BgpUpdateHandler.class);
+    private static final Logger LOGGER = LoggerFactory.getLogger(BgpUpdateHandler.class);
     private BgpManager bgpManager;
     private FibDSWriter fibDSWriter;
 
@@ -20,7 +20,7 @@ class BgpUpdateHandler implements BgpUpdater.Iface {
     public void onUpdatePushRoute(String rd, String prefix, int plen,
                                 String nexthop, int label) {
 
-       logger.info("Route add ** " + rd + " ** " + prefix + "/" + plen
+       LOGGER.info("Route add ** " + rd + " ** " + prefix + "/" + plen
                + " ** " + nexthop + " ** " + label);
         //Write to FIB in Data Store
         fibDSWriter.addFibEntryToDS(rd, prefix + "/" + plen, nexthop, label);
@@ -28,13 +28,13 @@ class BgpUpdateHandler implements BgpUpdater.Iface {
    }
 
    public void onUpdateWithdrawRoute(String rd, String prefix, int plen) {
-       logger.info("Route del ** " + rd + " ** " + prefix + "/" + plen);
+       LOGGER.info("Route del ** " + rd + " ** " + prefix + "/" + plen);
        fibDSWriter.removeFibEntryFromDS(rd, prefix + "/" + plen);
 
    }
 
    public void onStartConfigResyncNotification() {
-       logger.info("BGP (re)started");
+       LOGGER.info("BGP (re)started");
        bgpManager.reInitConn();
    }
 
diff --git a/commons/binding-parent/pom.xml b/commons/binding-parent/pom.xml
new file mode 100644 (file)
index 0000000..8710446
--- /dev/null
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Copyright (c) 2015 Ericsson India Global Services Pvt Ltd. 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
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <parent>
+    <groupId>org.opendaylight.yangtools</groupId>
+    <artifactId>binding-parent</artifactId>
+    <version>0.7.0-SNAPSHOT</version>
+    <relativePath/>
+  </parent>
+
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>org.opendaylight.vpnservice</groupId>
+  <artifactId>binding-parent</artifactId>
+  <version>0.0.1-SNAPSHOT</version>
+  <packaging>pom</packaging>
+
+  <properties>
+    <vpnservices.version>0.0.1-SNAPSHOT</vpnservices.version>
+    <ietf.inet.types.version>2010.09.24.7-SNAPSHOT</ietf.inet.types.version>
+    <ietf.yang.types.version>2010.09.24.7-SNAPSHOT</ietf.yang.types.version>
+    <ietf.interfaces.version>2014.05.08.7-SNAPSHOT</ietf.interfaces.version>
+    <iana.if.type.version>2014.05.08.7-SNAPSHOT</iana.if.type.version>
+    <yang.ext.version>2013.09.07.7-SNAPSHOT</yang.ext.version>
+    <yangtools.version>0.7.0-SNAPSHOT</yangtools.version>
+    <mdsal.version>1.2.0-SNAPSHOT</mdsal.version>
+    <vpns.mdsalutil.version>0.0.1-SNAPSHOT</vpns.mdsalutil.version>
+    <model.bgp.version>2013.07.15.7-SNAPSHOT</model.bgp.version>
+  </properties>
+</project>
diff --git a/commons/config-parent/pom.xml b/commons/config-parent/pom.xml
new file mode 100644 (file)
index 0000000..98a1c10
--- /dev/null
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- vi: set et smarttab sw=4 tabstop=4: --><!--
+Copyright (c) 2015 Ericsson India Global Services Pvt Ltd. 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
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+  <parent>
+    <groupId>org.opendaylight.controller</groupId>
+    <artifactId>config-parent</artifactId>
+    <version>0.3.0-SNAPSHOT</version>
+    <relativePath/>
+  </parent>
+
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>org.opendaylight.vpnservice</groupId>
+  <artifactId>config-parent</artifactId>
+  <version>0.0.1-SNAPSHOT</version>
+  <packaging>pom</packaging>
+
+  <properties>
+    <!-- ODL -->
+    <vpnservices.version>0.0.1-SNAPSHOT</vpnservices.version>
+    <ietf.inet.types.version>2010.09.24.7-SNAPSHOT</ietf.inet.types.version>
+    <ietf.yang.types.version>2010.09.24.7-SNAPSHOT</ietf.yang.types.version>
+    <ietf.interfaces.version>2014.05.08.7-SNAPSHOT</ietf.interfaces.version>
+    <iana.if.type.version>2014.05.08.7-SNAPSHOT</iana.if.type.version>
+    <yang.ext.version>2013.09.07.7-SNAPSHOT</yang.ext.version>
+    <yangtools.version>0.7.0-SNAPSHOT</yangtools.version>
+    <mdsal.version>1.2.0-SNAPSHOT</mdsal.version>
+    <vpns.mdsalutil.version>0.0.1-SNAPSHOT</vpns.mdsalutil.version>
+    <model.bgp.version>2013.07.15.7-SNAPSHOT</model.bgp.version>
+  </properties>
+
+  <dependencies>
+    <!-- Testing Dependencies -->
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <scope>test</scope>
+    </dependency>
+
+    <dependency>
+      <groupId>org.mockito</groupId>
+      <artifactId>mockito-all</artifactId>
+      <scope>test</scope>
+    </dependency>
+  </dependencies>
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-checkstyle-plugin</artifactId>
+        <configuration>
+          <configLocation>
+            ${project.basedir}/../../commons/src/main/resources/vpns_checks.xml
+          </configLocation>
+          <failsOnError>true</failsOnError>
+          <includes>**/*.java,**/*.xml,**/*.ini,**/*.sh,**/*.bat</includes>
+          <excludes>**/yang/</excludes>
+        </configuration>
+      </plugin>
+    </plugins>
+  </build>
+
+</project>
index 2a9d836c8ed50684848454afb05f9ba9ec729d42..1b2348f4abd386e14eb87d11a73306afc784a1a7 100644 (file)
@@ -16,7 +16,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html INTERNAL
   <modelVersion>4.0.0</modelVersion>
   <groupId>org.opendaylight.vpnservice</groupId>
   <artifactId>vpnservice-karaf</artifactId>
-  <version>1.0-SNAPSHOT</version>
+  <version>0.1.0-SNAPSHOT</version>
   <name>${project.artifactId}</name>
   <prerequisites>
     <maven>3.1.1</maven>
index e4405cb3df3acb779829957ee5b5b56f80b7a7c1..6a8ccae6d85eb437a07bfc236d830c0e508460bf 100644 (file)
@@ -14,7 +14,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html INTERNAL
   </parent>
   <groupId>org.opendaylight.vpnservice</groupId>
   <artifactId>vpnservice-features</artifactId>
-  <version>1.0-SNAPSHOT</version>
+  <version>0.1.0-SNAPSHOT</version>
   <name>${project.artifactId}</name>
   <modelVersion>4.0.0</modelVersion>
   <prerequisites>
@@ -24,6 +24,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html INTERNAL
     <mdsal.version>1.2.0-SNAPSHOT</mdsal.version>
     <openflowplugin.version>0.1.0-SNAPSHOT</openflowplugin.version>
     <yangtools.version>0.7.0-SNAPSHOT</yangtools.version>
+    <vpnservices.version>0.0.1-SNAPSHOT</vpnservices.version>
     <mdsalutil.version>0.0.1-SNAPSHOT</mdsalutil.version>
     <vpnmanager.version>0.0.1-SNAPSHOT</vpnmanager.version>
     <interfacemgr.version>0.0.1-SNAPSHOT</interfacemgr.version>
@@ -129,19 +130,19 @@ and is available at http://www.eclipse.org/legal/epl-v10.html INTERNAL
     <dependency>
       <groupId>${project.groupId}</groupId>
       <artifactId>bgpmanager-impl</artifactId>
-      <version>${project.version}</version>
+      <version>${vpnservices.version}</version>
     </dependency>
     <dependency>
       <groupId>${project.groupId}</groupId>
       <artifactId>bgpmanager-impl</artifactId>
-      <version>${project.version}</version>
+      <version>${vpnservices.version}</version>
       <classifier>config</classifier>
       <type>xml</type>
     </dependency>
     <dependency>
       <groupId>${project.groupId}</groupId>
       <artifactId>bgpmanager-api</artifactId>
-      <version>${project.version}</version>
+      <version>${vpnservices.version}</version>
     </dependency>
     <dependency>
       <groupId>${project.groupId}</groupId>
index 123f8e9c24aaab15edd695cbc038a6a242e4d1c0..a44ea7097986a04da672c37e3d5e79415c21a952 100644 (file)
@@ -18,9 +18,9 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
     <feature version='${yangtools.version}'>odl-yangtools-models</feature>
     <feature version='${openflowplugin.version}'>odl-openflowplugin-nsf-model</feature>
     <bundle>mvn:org.opendaylight.vpnservice/model-bgp/{{VERSION}}</bundle>
+    <bundle>mvn:org.opendaylight.vpnservice/idmanager-api/${idmanager.version}</bundle>
     <bundle>mvn:org.opendaylight.vpnservice/vpnmanager-api/${vpnmanager.version}</bundle>
     <bundle>mvn:org.opendaylight.vpnservice/nexthopmgr-api/${nexthopmgr.version}</bundle>
-    <bundle>mvn:org.opendaylight.vpnservice/idmanager-api/${idmanager.version}</bundle>
     <bundle>mvn:org.opendaylight.vpnservice/fibmanager-api/${fibmanager.version}</bundle>
 
   </feature>
@@ -29,21 +29,21 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
     <feature version='${project.version}'>odl-vpnservice-api</feature>
     <feature version="${openflowplugin.version}">odl-openflowplugin-southbound</feature>
     <feature version="${openflowplugin.version}">odl-openflowplugin-flow-services</feature>
-    <bundle>mvn:org.opendaylight.vpnservice/bgpmanager-api/${project.version}</bundle>
-    <bundle>mvn:org.opendaylight.vpnservice/bgpmanager-impl/${project.version}</bundle>
+    <bundle>mvn:org.opendaylight.vpnservice/idmanager-impl/${idmanager.version}</bundle>
+    <bundle>mvn:org.opendaylight.vpnservice/bgpmanager-api/${vpnservices.version}</bundle>
+    <bundle>mvn:org.opendaylight.vpnservice/bgpmanager-impl/${vpnservices.version}</bundle>
     <bundle>mvn:org.opendaylight.vpnservice/mdsalutil-api/${interfacemgr.version}</bundle>
     <bundle>mvn:org.opendaylight.vpnservice/mdsalutil-impl/${interfacemgr.version}</bundle>
     <bundle>mvn:org.opendaylight.vpnservice/interfacemgr-api/${interfacemgr.version}</bundle>
     <bundle>mvn:org.opendaylight.vpnservice/interfacemgr-impl/${interfacemgr.version}</bundle>
     <bundle>mvn:org.opendaylight.vpnservice/vpnmanager-impl/${vpnmanager.version}</bundle>
     <bundle>mvn:org.opendaylight.vpnservice/nexthopmgr-impl/${nexthopmgr.version}</bundle>
-    <bundle>mvn:org.opendaylight.vpnservice/idmanager-impl/${idmanager.version}</bundle>
     <bundle>mvn:org.opendaylight.vpnservice/fibmanager-impl/${fibmanager.version}</bundle>
 
     <!--<bundle>mvn:org.opendaylight.vpnservice.third-party/org.apache.thriftlib/1.0.1-SNAPSHOT</bundle>-->
     <bundle>wrap:mvn:org.apache.thrift/libthrift/0.9.1$overwrite=merge&amp;Bundle-Version=0.9.1&amp;Export-Package=*;-noimport:=true;version="0.9.1"</bundle>
     <!--<bundle>wrap:mvn:javax.servlet/servlet-api/2.5</bundle>-->
-    <configfile finalname="bgpmanager-impl-default-config.xml">mvn:org.opendaylight.vpnservice/bgpmanager-impl/${project.version}/xml/config</configfile>
+    <configfile finalname="bgpmanager-impl-default-config.xml">mvn:org.opendaylight.vpnservice/bgpmanager-impl/${vpnservices.version}/xml/config</configfile>
     <configfile finalname="mdsalutil-impl-default-config.xml">mvn:org.opendaylight.vpnservice/mdsalutil-impl/${interfacemgr.version}/xml/config</configfile>
     <configfile finalname="interfacemgr-impl-default-config.xml">mvn:org.opendaylight.vpnservice/interfacemgr-impl/${interfacemgr.version}/xml/config</configfile>
     <configfile finalname="vpnmanager-impl-default-config.xml">mvn:org.opendaylight.vpnservice/vpnmanager-impl/${vpnmanager.version}/xml/config</configfile>
index 89ff83d9445e9a9a5d4bdf160b725a9816d9ef30..aa25305ae6322865a444c5ce414d6f82552fad8f 100644 (file)
@@ -8,27 +8,18 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
 -->
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <parent>
-    <groupId>org.opendaylight.yangtools</groupId>
+    <groupId>org.opendaylight.vpnservice</groupId>
     <artifactId>binding-parent</artifactId>
-    <version>0.7.0-SNAPSHOT</version>
-    <relativePath/>
+    <version>0.0.1-SNAPSHOT</version>
+    <relativePath>../../commons/binding-parent</relativePath>
   </parent>
 
   <modelVersion>4.0.0</modelVersion>
   <groupId>org.opendaylight.vpnservice</groupId>
   <artifactId>fibmanager-api</artifactId>
-  <version>0.0.1-SNAPSHOT</version>
+  <version>${vpnservices.version}</version>
   <packaging>bundle</packaging>
 
-  <properties>
-    <!-- ODL -->
-    <ietf.inet.types.version>2010.09.24.7-SNAPSHOT</ietf.inet.types.version>
-    <ietf.yang.types.version>2010.09.24.7-SNAPSHOT</ietf.yang.types.version>
-    <yang.ext.version>2013.09.07.7-SNAPSHOT</yang.ext.version>
-    <yangtools.version>0.7.0-SNAPSHOT</yangtools.version>
-    <mdsal.version>1.2.0-SNAPSHOT</mdsal.version>
-  </properties>
-
   <dependencies>
     <dependency>
       <groupId>org.opendaylight.yangtools</groupId>
@@ -53,12 +44,12 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
     <dependency>
       <groupId>org.opendaylight.yangtools.model</groupId>
       <artifactId>ietf-interfaces</artifactId>
-      <version>2014.05.08.7-SNAPSHOT</version>
+      <version>${ietf.interfaces.version}</version>
     </dependency>
     <dependency>
       <groupId>org.opendaylight.yangtools.model</groupId>
       <artifactId>iana-if-type-2014-05-08</artifactId>
-      <version>2014.05.08.7-SNAPSHOT</version>
+      <version>${iana.if.type.version}</version>
     </dependency>
     <dependency>
       <groupId>org.opendaylight.controller.model</groupId>
index 95b37969a3e5456c9bb70c8b16fdc38ca2015777..9e91a468a2a00cbeedfe7e3e4f630b3b11da4afc 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!-- vi: set et smarttab sw=4 tabstop=4: --><!--
-Copyright (c) 2014 Cisco Systems, Inc. and others.  All rights reserved.
+Copyright (c) 2015 Ericsson India Global Services Pvt Ltd. 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,
@@ -9,55 +9,29 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 
   <parent>
-    <groupId>org.opendaylight.controller</groupId>
+    <groupId>org.opendaylight.vpnservice</groupId>
     <artifactId>config-parent</artifactId>
-    <version>0.3.0-SNAPSHOT</version>
-    <relativePath/>
+    <version>0.0.1-SNAPSHOT</version>
+    <relativePath>../../commons/config-parent</relativePath>
   </parent>
 
   <modelVersion>4.0.0</modelVersion>
   <groupId>org.opendaylight.vpnservice</groupId>
   <artifactId>fibmanager-impl</artifactId>
-  <version>0.0.1-SNAPSHOT</version>
+  <version>${vpnservices.version}</version>
   <packaging>bundle</packaging>
   <dependencies>
     <dependency>
       <groupId>org.opendaylight.vpnservice</groupId>
       <artifactId>fibmanager-api</artifactId>
-      <version>0.0.1-SNAPSHOT</version>
+      <version>${vpnservices.version}</version>
     </dependency>
     <dependency>
       <groupId>org.opendaylight.vpnservice</groupId>
       <artifactId>vpnmanager-impl</artifactId>
-      <version>1.0-SNAPSHOT</version>
-    </dependency>
-    <!-- Testing Dependencies -->
-    <dependency>
-      <groupId>junit</groupId>
-      <artifactId>junit</artifactId>
-      <scope>test</scope>
+      <version>${vpnservices.version}</version>
     </dependency>
 
-    <dependency>
-      <groupId>org.mockito</groupId>
-      <artifactId>mockito-all</artifactId>
-      <scope>test</scope>
-    </dependency>
   </dependencies>
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-checkstyle-plugin</artifactId>
-        <configuration>
-          <configLocation>
-            ${project.basedir}/../../commons/src/main/resources/vpns_checks.xml
-          </configLocation>
-          <failsOnError>true</failsOnError>
-          <includes>**/*.java,**/*.xml,**/*.ini,**/*.sh,**/*.bat</includes>
-          <excludes>**/yang/</excludes>
-        </configuration>
-      </plugin>
-    </plugins>
-  </build>
+
 </project>
index 04766482f10fec764c12f2125ca406cc6b33cb4a..6a7708fa0861c372476aa3d369a40362beec200e 100644 (file)
@@ -8,27 +8,18 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
 -->
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <parent>
-    <groupId>org.opendaylight.yangtools</groupId>
+    <groupId>org.opendaylight.vpnservice</groupId>
     <artifactId>binding-parent</artifactId>
-    <version>0.7.0-SNAPSHOT</version>
-    <relativePath/>
+    <version>0.0.1-SNAPSHOT</version>
+    <relativePath>../../commons/binding-parent</relativePath>
   </parent>
 
   <modelVersion>4.0.0</modelVersion>
   <groupId>org.opendaylight.vpnservice</groupId>
   <artifactId>idmanager-api</artifactId>
-  <version>0.0.1-SNAPSHOT</version>
+  <version>${vpnservices.version}</version>
   <packaging>bundle</packaging>
 
-  <properties>
-    <!-- ODL -->
-    <ietf.inet.types.version>2010.09.24.7-SNAPSHOT</ietf.inet.types.version>
-    <ietf.yang.types.version>2010.09.24.7-SNAPSHOT</ietf.yang.types.version>
-    <yang.ext.version>2013.09.07.7-SNAPSHOT</yang.ext.version>
-    <yangtools.version>0.7.0-SNAPSHOT</yangtools.version>
-    <mdsal.version>1.2.0-SNAPSHOT</mdsal.version>
-  </properties>
-
   <dependencies>
     <dependency>
       <groupId>org.opendaylight.yangtools</groupId>
index 06b5f88a8e9740e905efd14bd897af81810d5f1b..039d4e053c8211e55b852de7d872204ea26e12e9 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!-- vi: set et smarttab sw=4 tabstop=4: --><!--
-Copyright (c) 2014 Cisco Systems, Inc. and others.  All rights reserved.
+Copyright (c) 2015 Ericsson India Global Services Pvt Ltd. 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,
@@ -9,49 +9,23 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 
   <parent>
-    <groupId>org.opendaylight.controller</groupId>
+    <groupId>org.opendaylight.vpnservice</groupId>
     <artifactId>config-parent</artifactId>
-    <version>0.3.0-SNAPSHOT</version>
-    <relativePath/>
+    <version>0.0.1-SNAPSHOT</version>
+    <relativePath>../../commons/config-parent</relativePath>
   </parent>
 
   <modelVersion>4.0.0</modelVersion>
   <groupId>org.opendaylight.vpnservice</groupId>
   <artifactId>idmanager-impl</artifactId>
-  <version>0.0.1-SNAPSHOT</version>
+  <version>${vpnservices.version}</version>
   <packaging>bundle</packaging>
   <dependencies>
-    <!-- Testing Dependencies -->
-    <dependency>
-      <groupId>junit</groupId>
-      <artifactId>junit</artifactId>
-      <scope>test</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.mockito</groupId>
-      <artifactId>mockito-all</artifactId>
-      <scope>test</scope>
-    </dependency>
     <dependency>
       <groupId>org.opendaylight.vpnservice</groupId>
       <artifactId>idmanager-api</artifactId>
-      <version>0.0.1-SNAPSHOT</version>
+      <version>${vpnservices.version}</version>
     </dependency>
   </dependencies>
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-checkstyle-plugin</artifactId>
-        <configuration>
-          <configLocation>
-            ${project.basedir}/../../commons/src/main/resources/vpns_checks.xml
-          </configLocation>
-          <failsOnError>true</failsOnError>
-          <includes>**/*.java,**/*.xml,**/*.ini,**/*.sh,**/*.bat</includes>
-          <excludes>**/yang/</excludes>
-        </configuration>
-      </plugin>
-    </plugins>
-  </build>
+
 </project>
index eccf8afdaab556072298a57acf4efbdf6d39ffc0..55fbb666e21b580c061a4521522f335f7a01d696 100644 (file)
@@ -23,6 +23,10 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
             <type xmlns:binding="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding">binding:binding-broker-osgi-registry</type>
             <name>binding-osgi-broker</name>
           </broker>
+          <rpc-registry>
+            <type xmlns:binding="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding">binding:binding-rpc-registry</type>
+            <name>binding-rpc-broker</name>
+          </rpc-registry>
         </module>
       </modules>
     </data>
index 2f6cec8ff8af508e7700b905e216b4e946f6fb2d..7eb3bd3a0ad1e16b3132303a7f6c942af5dbd7a0 100644 (file)
@@ -19,8 +19,8 @@ import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
 import org.opendaylight.yangtools.concepts.ListenerRegistration;
 import org.opendaylight.yangtools.yang.binding.DataObject;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
-import org.opendaylight.yangtools.yang.common.RpcError;
 import org.opendaylight.yangtools.yang.common.RpcResult;
+import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.idmanager.rev150403.*;
@@ -28,8 +28,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.idmanager.rev150
 import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.idmanager.rev150403.pools.id.pool.*;
 
 import java.math.BigInteger;
-import java.util.Collection;
-import java.util.Collections;
+import java.util.ArrayList;
 import java.util.List;
 import java.util.concurrent.Future;
 
@@ -55,7 +54,7 @@ public class IdManager implements IdManagerService, AutoCloseable{
     }
 
     public IdManager(final DataBroker db) {
-       broker = db;
+        broker = db;
     }
 
     private <T extends DataObject> Optional<T> read(LogicalDatastoreType datastoreType,
@@ -80,6 +79,13 @@ public class IdManager implements IdManagerService, AutoCloseable{
         Futures.addCallback(tx.submit(), callback);
     }
 
+    private <T extends DataObject> void asyncUpdate(LogicalDatastoreType datastoreType,
+                                                    InstanceIdentifier<T> path, T data, FutureCallback<Void> callback) {
+        WriteTransaction tx = broker.newWriteOnlyTransaction();
+        tx.merge(datastoreType, path, data, true);
+        Futures.addCallback(tx.submit(), callback);
+    }
+
     @Override
     public Future<RpcResult<Void>> createIdPool(CreateIdPoolInput input)
     {
@@ -87,22 +93,31 @@ public class IdManager implements IdManagerService, AutoCloseable{
         String poolName = input.getPoolName();
         long startIndx = input.getIdStart();
         long poolSize = input.getPoolSize().longValue();
+        RpcResultBuilder<Void> rpcResultBuilder;
 
         LOG.debug("poolName: %s, startIndx: %d , poolSize: %d ", poolName, startIndx,  poolSize);
 
-        InstanceIdentifier.InstanceIdentifierBuilder<IdPool> idBuilder =
-                InstanceIdentifier.builder(Pools.class).child(IdPool.class, new IdPoolKey(poolName));
-        InstanceIdentifier<IdPool> id = idBuilder.build();
-        Optional<IdPool> pool = read(LogicalDatastoreType.OPERATIONAL, id);
-        if (!pool.isPresent()) {
-            LOG.debug("Creating a new global pool: %s " ,poolName);
-            IdPool newPool = getPoolInterface(poolName, startIndx, poolSize);
-            asyncWrite(LogicalDatastoreType.OPERATIONAL, id, newPool, DEFAULT_CALLBACK);
+        try {
+            InstanceIdentifier.InstanceIdentifierBuilder<IdPool> idBuilder =
+                    InstanceIdentifier.builder(Pools.class).child(IdPool.class, new IdPoolKey(poolName));
+            InstanceIdentifier<IdPool> id = idBuilder.build();
+            Optional<IdPool> pool = read(LogicalDatastoreType.OPERATIONAL, id);
+            if (!pool.isPresent()) {
+                LOG.debug("Creating a new global pool: {} ", poolName);
+                IdPool newPool = getPoolInterface(poolName, startIndx, poolSize);
+                LOG.debug("NewPool: {}", newPool);
+                asyncWrite(LogicalDatastoreType.OPERATIONAL, id, newPool, DEFAULT_CALLBACK);
 
+            }
+
+            rpcResultBuilder = RpcResultBuilder.success();
+        }
+        catch(Exception e){
+            LOG.error("Creation of global pool {} failed due to {}" ,poolName, e);
+            rpcResultBuilder = RpcResultBuilder.failed();
         }
 
-       // return Futures.immediateFuture(RpcResult<Void>);
-        return null;
+        return Futures.immediateFuture(rpcResultBuilder.build());
     }
 
 
@@ -112,45 +127,54 @@ public class IdManager implements IdManagerService, AutoCloseable{
         String poolName = input.getPoolName();
         String idKey = input.getIdKey();
 
-        LOG.debug("poolName: %s ,idKey: %s", poolName, idKey);
-
-        InstanceIdentifier.InstanceIdentifierBuilder<IdPool> idBuilder =
-                InstanceIdentifier.builder(Pools.class).child(IdPool.class, new IdPoolKey(poolName));
-        InstanceIdentifier<IdPool> id = idBuilder.build();
-        Optional<IdPool> globalPool = read(LogicalDatastoreType.OPERATIONAL, id);
-        Long newIdValue = null;
-        GeneratedIds newGenId = null;
-        if (globalPool.isPresent()) {
-            IdPool pool = globalPool.get();
-            List<GeneratedIds> generatedIds = pool.getGeneratedIds();
-
-            if (!generatedIds.isEmpty()) {
-                for (GeneratedIds gen_id : generatedIds) {
-                    if (gen_id.getIdKey().equals(idKey)) {
-                        newIdValue = gen_id.getIdValue();
-                        LOG.debug("Existing id for the key %s ", idKey);
-                    }
+        LOG.debug("poolName: {} ,idKey: {}", poolName, idKey);
+        RpcResultBuilder<GetUniqueIdOutput> rpcResultBuilder;
 
+        try {
+            InstanceIdentifier.InstanceIdentifierBuilder<IdPool> idBuilder =
+                    InstanceIdentifier.builder(Pools.class).child(IdPool.class, new IdPoolKey(poolName));
+            InstanceIdentifier<IdPool> id = idBuilder.build();
+            Optional<IdPool> globalPool = read(LogicalDatastoreType.OPERATIONAL, id);
+            GetUniqueIdOutputBuilder output = new GetUniqueIdOutputBuilder();
+            Long newIdValue = null;
+            GeneratedIds newGenId = null;
+            if (globalPool.isPresent()) {
+                IdPool pool = globalPool.get();
+                List<GeneratedIds> generatedIds = pool.getGeneratedIds();
+
+                if (generatedIds == null) {
+                    generatedIds = new ArrayList<GeneratedIds>();
                 }
-            }
-            synchronized(this){
-                if (newIdValue == null) {
-                    LOG.debug("Creating a new id for the pool: %s ", poolName);
-                    newIdValue = (long) generatedIds.size() + 1;
-                    newGenId = getIdsInterface(idKey, newIdValue);
-                    generatedIds.add(newGenId);
-                    asyncWrite(LogicalDatastoreType.OPERATIONAL, id, pool, DEFAULT_CALLBACK);
+                if (!generatedIds.isEmpty()) {
+                    for (GeneratedIds gen_id : generatedIds) {
+                        if (gen_id.getIdKey().equals(idKey)) {
+                            newIdValue = gen_id.getIdValue();
+                            LOG.debug("Existing id {} for the key {} ", idKey, newIdValue);
+                        }
+
+                    }
+                }
+                synchronized (this) {
+                    if (newIdValue == null) {
+                        newIdValue = (long) generatedIds.size() + 1;
+                        LOG.debug("Creating a new id {} for the pool: {} ", newIdValue, poolName);
+                        newGenId = getIdsInterface(idKey, newIdValue);
+                        generatedIds.add(newGenId);
+                        pool = new IdPoolBuilder(pool).setGeneratedIds(generatedIds).build();
+                        asyncUpdate(LogicalDatastoreType.OPERATIONAL, id, pool, DEFAULT_CALLBACK);
+                    }
                 }
+                output.setIdValue(newIdValue);
             }
 
-            GetUniqueIdOutputBuilder output = new GetUniqueIdOutputBuilder();
-            output.setIdValue(newIdValue);
-
+            rpcResultBuilder = RpcResultBuilder.success();
+            rpcResultBuilder.withResult(output.build());
+        }
+        catch(Exception e){
+            LOG.error("Creation of id for the key {} , global pool {} failed due to {}" ,idKey, poolName, e);
+            rpcResultBuilder = RpcResultBuilder.failed();
         }
-        /*            Collection<RpcError> errors = Collections.emptyList();
-            RpcResult<GetUniqueIdOutput> result = Rpcs.getRpcResult(true, output.build(), errors);
-            return Futures.immediateFuture(result);*/
-        return null;
+        return Futures.immediateFuture(rpcResultBuilder.build());
     }
 
 
@@ -166,14 +190,14 @@ public class IdManager implements IdManagerService, AutoCloseable{
     }
 
     private static final FutureCallback<Void> DEFAULT_CALLBACK =
-            new FutureCallback<Void>() {
-                public void onSuccess(Void result) {
-                    LOG.debug("Success in Datastore write operation");
-                }
+        new FutureCallback<Void>() {
+            public void onSuccess(Void result) {
+                LOG.debug("Success in Datastore write operation");
+            }
 
-                public void onFailure(Throwable error) {
-                    LOG.error("Error in Datastore write operation", error);
-                };
+            public void onFailure(Throwable error) {
+                LOG.error("Error in Datastore write operation", error);
             };
+        };
 
 }
index f94d59f123330e0422949a433b539f9714abf219..ab016b1ef26322334da7a603544b827eba04fde6 100644 (file)
@@ -9,9 +9,12 @@
 package org.opendaylight.idmanager;
 
 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.opendaylight.controller.sal.binding.api.BindingAwareBroker;
 import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext;
 import org.opendaylight.controller.sal.binding.api.BindingAwareProvider;
 
+import org.opendaylight.controller.sal.binding.api.RpcProviderRegistry;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.idmanager.rev150403.IdManagerService;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -21,21 +24,35 @@ public class IdManagerServiceProvider implements BindingAwareProvider,
 
         private static final Logger LOG = LoggerFactory.getLogger(IdManagerServiceProvider.class);
         private IdManager idManager;
+        private RpcProviderRegistry rpcProviderRegistry;
+
+    public RpcProviderRegistry getRpcProviderRegistry() {
+        return rpcProviderRegistry;
+    }
+
+    public void setRpcProviderRegistry(RpcProviderRegistry rpcProviderRegistry) {
+        this.rpcProviderRegistry = rpcProviderRegistry;
+    }
 
         @Override
-        public void onSessionInitiated(ProviderContext session){
-            LOG.info("IDManagerserviceProvider Session Initiated");
-            try {
-                final  DataBroker dataBroker = session.getSALService(DataBroker.class);
-                idManager = new IdManager(dataBroker);
-            } catch (Exception e) {
-                LOG.error("Error initializing services", e);
-            }
+    public void onSessionInitiated(ProviderContext session){
+        LOG.info("IDManagerserviceProvider Session Initiated");
+        try {
+            final  DataBroker dataBroker = session.getSALService(DataBroker.class);
+            idManager = new IdManager(dataBroker);
+            final BindingAwareBroker.RpcRegistration<IdManagerService> rpcRegistration = getRpcProviderRegistry().addRpcImplementation(IdManagerService.class, idManager);
+        } catch (Exception e) {
+            LOG.error("Error initializing services", e);
         }
+    }
 
-        @Override
-        public void close() throws Exception {
-            idManager.close();
+    public IdManagerServiceProvider(RpcProviderRegistry rpcRegistry) {
+        this.rpcProviderRegistry = rpcRegistry;
+    }
+
+    @Override
+    public void close() throws Exception {
+        idManager.close();
         }
     }
 
index ba9314d15bebe7c7976099006babe3caaf668890..d141e3eef2271c0f3ae41dbd76a5a409c55f2e01 100644 (file)
@@ -8,7 +8,9 @@
 
 package org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.idmanager.impl.rev150325;
 
+import org.opendaylight.controller.sal.binding.api.BindingAwareBroker;
 import org.opendaylight.idmanager.IdManagerServiceProvider;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.idmanager.rev150403.IdManagerService;
 
 public class IdmanagerImplModule extends org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.idmanager.impl.rev150325.AbstractIdmanagerImplModule {
     public IdmanagerImplModule(org.opendaylight.controller.config.api.ModuleIdentifier identifier, org.opendaylight.controller.config.api.DependencyResolver dependencyResolver) {
@@ -20,15 +22,14 @@ public class IdmanagerImplModule extends org.opendaylight.yang.gen.v1.urn.openda
     }
 
     @Override
-    public void customValidation() {
-        // add custom validation form module attributes here.
+    public java.lang.AutoCloseable createInstance() {
+        IdManagerServiceProvider provider = new IdManagerServiceProvider(getRpcRegistryDependency());
+        getBrokerDependency().registerProvider(provider);
+        return provider;
     }
 
     @Override
-    public java.lang.AutoCloseable createInstance() {
-          IdManagerServiceProvider provider = new IdManagerServiceProvider();
-          getBrokerDependency().registerProvider(provider);
-          return provider;
+    public void customValidation() {
+        // add custom validation form module attributes here.
     }
-
 }
index ec07c7b5e696de27462b64e63d77bf203a00715b..c1425075100baeae49f7e942715173d802aeed95 100644 (file)
@@ -30,6 +30,15 @@ module idmanager-impl {
                     }
                 }
             }
+            container rpc-registry {
+                 uses config:service-ref {
+                      refine type {
+                         mandatory true;
+                         config:required-identity md-sal-binding:binding-rpc-registry;
+                      }
+                 }
+            }
+
         }
     }
 }
index 4cfdfcf6919de45a345c3371e1ab999adb0061d0..32dace0f44892e2889b3066004ab4270600d92a8 100644 (file)
@@ -8,27 +8,18 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
 -->
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <parent>
-    <groupId>org.opendaylight.controller</groupId>
+    <groupId>org.opendaylight.vpnservice</groupId>
     <artifactId>config-parent</artifactId>
-    <version>0.3.0-SNAPSHOT</version>
-    <relativePath/>
+    <version>0.0.1-SNAPSHOT</version>
+    <relativePath>../../commons/config-parent</relativePath>
   </parent>
 
   <modelVersion>4.0.0</modelVersion>
   <groupId>org.opendaylight.vpnservice</groupId>
   <artifactId>interfacemgr-api</artifactId>
-  <version>0.0.1-SNAPSHOT</version>
+  <version>${vpnservices.version}</version>
   <packaging>bundle</packaging>
 
-  <properties>
-    <!-- ODL -->
-    <ietf.inet.types.version>2010.09.24.7-SNAPSHOT</ietf.inet.types.version>
-    <ietf.yang.types.version>2010.09.24.7-SNAPSHOT</ietf.yang.types.version>
-    <yang.ext.version>2013.09.07.7-SNAPSHOT</yang.ext.version>
-    <yangtools.version>0.7.0-SNAPSHOT</yangtools.version>
-    <mdsal.version>1.2.0-SNAPSHOT</mdsal.version>
-    <vpns.mdsalutil.version>0.0.1-SNAPSHOT</vpns.mdsalutil.version>
-  </properties>
   <dependencies>
     <dependency>
       <groupId>org.opendaylight.yangtools</groupId>
@@ -58,12 +49,12 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
     <dependency>
       <groupId>org.opendaylight.yangtools.model</groupId>
       <artifactId>ietf-interfaces</artifactId>
-      <version>2014.05.08.7-SNAPSHOT</version>
+      <version>${ietf.interfaces.version}</version>
     </dependency>
     <dependency>
       <groupId>org.opendaylight.yangtools.model</groupId>
       <artifactId>iana-if-type-2014-05-08</artifactId>
-      <version>2014.05.08.7-SNAPSHOT</version>
+      <version>${iana.if.type.version}</version>
     </dependency>
     <dependency>
       <groupId>org.opendaylight.controller.model</groupId>
index a6c4b08bf041b71a9753a6b3202b18519425d614..59451e2ad7279c0fdbc76a79dc120356836386a9 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!-- vi: set et smarttab sw=4 tabstop=4: --><!--
-Copyright (c) 2014 Cisco Systems, Inc. and others.  All rights reserved.
+Copyright (c) 2015 Ericsson India Global Services Pvt Ltd. 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,
@@ -9,10 +9,10 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 
   <parent>
-    <groupId>org.opendaylight.controller</groupId>
+    <groupId>org.opendaylight.vpnservice</groupId>
     <artifactId>config-parent</artifactId>
-    <version>0.3.0-SNAPSHOT</version>
-    <relativePath/>
+    <version>0.0.1-SNAPSHOT</version>
+    <relativePath>../../commons/config-parent</relativePath>
   </parent>
 
   <modelVersion>4.0.0</modelVersion>
@@ -38,52 +38,22 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
     <dependency>
       <groupId>org.opendaylight.vpnservice</groupId>
       <artifactId>vpnmanager-impl</artifactId>
-      <version>1.0-SNAPSHOT</version>
+      <version>${vpnservices.version}</version>
     </dependency>
     <dependency>
       <groupId>org.opendaylight.vpnservice</groupId>
       <artifactId>mdsalutil-api</artifactId>
-      <version>0.0.1-SNAPSHOT</version>
+      <version>${vpnservices.version}</version>
     </dependency>
     <dependency>
       <groupId>org.opendaylight.vpnservice</groupId>
       <artifactId>idmanager-api</artifactId>
-      <version>0.0.1-SNAPSHOT</version>
+      <version>${vpnservices.version}</version>
     </dependency>
     <dependency>
       <groupId>org.opendaylight.vpnservice</groupId>
       <artifactId>idmanager-impl</artifactId>
-      <version>0.0.1-SNAPSHOT</version>
-    </dependency>
-    <!-- Testing Dependencies -->
-    <dependency>
-      <groupId>junit</groupId>
-      <artifactId>junit</artifactId>
-      <scope>test</scope>
-    </dependency>
-
-    <dependency>
-      <groupId>org.mockito</groupId>
-      <artifactId>mockito-all</artifactId>
-      <scope>test</scope>
+      <version>${vpnservices.version}</version>
     </dependency>
   </dependencies>
-
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-checkstyle-plugin</artifactId>
-        <configuration>
-          <configLocation>
-            ${project.basedir}/../../commons/src/main/resources/vpns_checks.xml
-          </configLocation>
-          <failsOnError>true</failsOnError>
-          <includes>**/*.java,**/*.xml,**/*.ini,**/*.sh,**/*.bat</includes>
-          <excludes>**/yang/</excludes>
-        </configuration>
-      </plugin>
-    </plugins>
-  </build>
-
 </project>
index 4cfa0005f798241dc2693a10f3dac94aca764c2f..add3af5b81a287d7f21878878778ce73e10995f7 100644 (file)
@@ -2,8 +2,10 @@ package org.opendaylight.vpnservice.interfacemgr;
 
 public class IfmConstants {
     public static final String IFM_IDPOOL_NAME = "interfaces";
+    public static final long IFM_IDPOOL_START = 1L;
+    public static final String IFM_IDPOOL_SIZE = "65535";
     public static final String OF_URI_PREFIX = "openflow:";
-    public static final String OF_URI_SEPARATOR = "openflow:";
-    public static final int DEFAULT_IFINDEX = 65535;
+    public static final String OF_URI_SEPARATOR = ":";
+    public static final int DEFAULT_IFINDEX = 65536;
 
 }
index af51d74a5c76209ce86af9ff2bb367eeedc6515f..76f0c1ae5acf97f2eed76ef3de16025a01a62bdf 100644 (file)
@@ -1,11 +1,20 @@
 package org.opendaylight.vpnservice.interfacemgr;
 
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.Interfaces;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.InterfacesState;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.InterfaceKey;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.idmanager.rev150403.Pools;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.idmanager.rev150403.pools.IdPool;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.idmanager.rev150403.pools.IdPoolKey;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier.InstanceIdentifierBuilder;
 
-public class IfmUtil { 
+public class IfmUtil {
 
-    static String getDpnFromNodeConnectorId(NodeConnectorId portId) {
+    public static String getDpnFromNodeConnectorId(NodeConnectorId portId) {
         /*
          * NodeConnectorId is of form 'openflow:dpnid:portnum'
          */
@@ -14,7 +23,36 @@ public class IfmUtil {
     }
 
 
-    static NodeId buildDpnNodeId(long dpnId) {
+    public static NodeId buildDpnNodeId(long dpnId) {
         return new NodeId(IfmConstants.OF_URI_PREFIX + dpnId);
     }
+
+    public static InstanceIdentifier<Interface> buildId(String interfaceName) {
+        //TODO Make this generic and move to AbstractDataChangeListener or Utils.
+        InstanceIdentifierBuilder<Interface> idBuilder =
+                InstanceIdentifier.builder(Interfaces.class).child(Interface.class, new InterfaceKey(interfaceName));
+        InstanceIdentifier<Interface> id = idBuilder.build();
+        return id;
+    }
+
+    public static InstanceIdentifier<org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface> buildStateInterfaceId(String interfaceName) {
+        InstanceIdentifierBuilder<org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface> idBuilder =
+                InstanceIdentifier.builder(InterfacesState.class)
+                .child(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface.class,
+                                new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.InterfaceKey(interfaceName));
+        InstanceIdentifier<org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface> id = idBuilder.build();
+        return id;
+    }
+
+    public static org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.InterfaceKey getStateInterfaceKeyFromName(
+                    String name) {
+        return new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.InterfaceKey(name);
+    }
+
+    public static InstanceIdentifier<IdPool> getPoolId(String poolName){
+        InstanceIdentifier.InstanceIdentifierBuilder<IdPool> idBuilder =
+                        InstanceIdentifier.builder(Pools.class).child(IdPool.class, new IdPoolKey(poolName));
+        InstanceIdentifier<IdPool> id = idBuilder.build();
+        return id;
+    }
 }
index 8f0a4aa381c96369ef4d46952e6d783ad497e407..a1cc4972589eee098b9d2b3cb32bca552c571e52 100644 (file)
@@ -7,18 +7,15 @@
  */
 package org.opendaylight.vpnservice.interfacemgr;
 
-
 import com.google.common.base.Optional;
 import com.google.common.util.concurrent.FutureCallback;
 import com.google.common.util.concurrent.Futures;
-
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.Future;
-
 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
 import org.opendaylight.controller.md.sal.binding.api.DataChangeListener;
 import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
@@ -34,7 +31,6 @@ import org.opendaylight.vpnservice.mdsalutil.MatchInfo;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.iana._if.type.rev140508.L2vlan;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.InterfaceType;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.Interfaces;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.InterfacesState;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.InterfaceKey;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface.OperStatus;
@@ -49,9 +45,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.N
 import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.idmanager.rev150403.GetUniqueIdInput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.idmanager.rev150403.GetUniqueIdInputBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.idmanager.rev150403.GetUniqueIdOutput;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.idmanager.rev150403.Pools;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.idmanager.rev150403.pools.IdPool;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.idmanager.rev150403.pools.IdPoolKey;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.idmanager.rev150403.pools.id.pool.GeneratedIds;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.rev150331.BaseIds;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.rev150331.IfL2vlan;
@@ -140,18 +134,6 @@ public class InterfaceManager extends AbstractDataChangeListener<Interface> impl
         return id;
     }
 
-    private InstanceIdentifier
-        <org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface> 
-        buildStateInterfaceId(String interfaceName) {
-        //TODO Make this generic and move to AbstractDataChangeListener or Utils.
-        InstanceIdentifierBuilder
-            <org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface> 
-            idBuilder = InstanceIdentifier.builder(InterfacesState.class)
-                .child(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface.class,
-                                new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.InterfaceKey(interfaceName));
-        InstanceIdentifier<org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface> id = idBuilder.build();
-        return id;
-    }
 
     private void addInterface(final InstanceIdentifier<Interface> identifier,
                               final Interface interf) {
@@ -164,7 +146,7 @@ public class InterfaceManager extends AbstractDataChangeListener<Interface> impl
             ncId = nodeConn.getId();
         }
         mapNcToInterfaceName.put(ncId, interf.getName());
-        if(interf.getType().getClass().isInstance(L3tunnel.class)) {
+        if(interf.getType().isAssignableFrom(L3tunnel.class)) {
             NodeId nodeId = getNodeIdFromNodeConnectorId(ncId);
             IfL3tunnel l3Tunnel = interf.getAugmentation(IfL3tunnel.class);
             dbDpnEndpoints.put(nodeId, l3Tunnel.getLocalIp().getIpv4Address().getValue());
@@ -184,7 +166,7 @@ public class InterfaceManager extends AbstractDataChangeListener<Interface> impl
          *    if-index = interface-id
         */
         InstanceIdentifier<org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface> id =
-                        buildStateInterfaceId(interf.getName());
+                        IfmUtil.buildStateInterfaceId(interf.getName());
         Optional<org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface> stateIf =
                         read(LogicalDatastoreType.OPERATIONAL, id);
         org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface stateIface;
@@ -198,7 +180,7 @@ public class InterfaceManager extends AbstractDataChangeListener<Interface> impl
             ifaceBuilder.setOperStatus(getOperStatus(nodeConn));
 
             ifaceBuilder.setIfIndex(getIfIndex(ifName)).setName(ifName).setType(interf.getType());
-            ifaceBuilder.setKey(getStateInterfaceKeyFromName(ifName));
+            ifaceBuilder.setKey(IfmUtil.getStateInterfaceKeyFromName(ifName));
             stateIface = ifaceBuilder.build();
             LOG.trace("Adding stateIface {} and id {} to OPERATIONAL DS", stateIface, id);
             asyncWrite(LogicalDatastoreType.OPERATIONAL, id, stateIface, DEFAULT_CALLBACK);
@@ -233,10 +215,8 @@ public class InterfaceManager extends AbstractDataChangeListener<Interface> impl
          * TODO: Start-delete-me
          */
 
-        InstanceIdentifier.InstanceIdentifierBuilder<IdPool> idBuilder =
-                        InstanceIdentifier.builder(Pools.class).child(IdPool.class, new IdPoolKey("interfaces"));
-        InstanceIdentifier<IdPool> id = idBuilder.build();
-        Optional<IdPool> globalPool = read(LogicalDatastoreType.OPERATIONAL, id);
+        InstanceIdentifier<IdPool> id = IfmUtil.getPoolId(IfmConstants.IFM_IDPOOL_NAME);
+        Optional<IdPool> globalPool = read(LogicalDatastoreType.OPERATIONAL, id );
         Long newIdValue = null;
         if (globalPool.isPresent()) {
             IdPool pool = globalPool.get();
@@ -265,11 +245,6 @@ public class InterfaceManager extends AbstractDataChangeListener<Interface> impl
         }
     }
 
-    private org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.InterfaceKey getStateInterfaceKeyFromName(
-                    String name) {
-        return new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.InterfaceKey(name);
-    }
-
     private NodeConnector getNodeConnectorFromDataStore(Interface interf) {
         NodeConnectorId ncId = interf.getAugmentation(BaseIds.class).getOfPortId();
         //TODO: Replace with MDSAL Util method
@@ -294,7 +269,7 @@ public class InterfaceManager extends AbstractDataChangeListener<Interface> impl
     private void delInterface(final InstanceIdentifier<Interface> identifier,
                               final Interface delInterface) {
         InstanceIdentifier<org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface> id =
-                        buildStateInterfaceId(delInterface.getName());
+                        IfmUtil.buildStateInterfaceId(delInterface.getName());
         Optional<org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface> stateIf =
                         read(LogicalDatastoreType.OPERATIONAL, id);
         if(stateIf.isPresent()) {
@@ -303,7 +278,7 @@ public class InterfaceManager extends AbstractDataChangeListener<Interface> impl
             NodeConnectorId ncId = getNodeConnectorIdFromInterface(delInterface);
             if(ncId != null) {
                 mapNcToInterfaceName.remove(ncId);
-                if(delInterface.getType().getClass().isInstance(L3tunnel.class)) {
+                if(delInterface.getType().isAssignableFrom(L3tunnel.class)) {
                     Node node = getNodeFromDataStore(delInterface);
                     if((node != null) &&(node.getNodeConnector().isEmpty())) {
                         dbDpnEndpoints.remove(node.getId());
@@ -343,7 +318,7 @@ public class InterfaceManager extends AbstractDataChangeListener<Interface> impl
             if(nc != null) {
                 // Name doesn't change. Is it present in update?
                 mapNcToInterfaceName.put(nc.getId(), original.getName());
-                if(interf.getType().getClass().isInstance(L3tunnel.class)) {
+                if(interf.getType().isAssignableFrom(L3tunnel.class)) {
                     NodeId nodeId = getNodeIdFromNodeConnectorId(nc.getId());
                     IfL3tunnel l3Tunnel = interf.getAugmentation(IfL3tunnel.class);
                     dbDpnEndpoints.put(nodeId, l3Tunnel.getLocalIp().getIpv4Address().getValue());
@@ -384,31 +359,31 @@ public class InterfaceManager extends AbstractDataChangeListener<Interface> impl
         updateInterface(identifier, original, update);
     }
 
-    private <T extends DataObject> void asyncWrite(LogicalDatastoreType datastoreType,
+    protected <T extends DataObject> void asyncWrite(LogicalDatastoreType datastoreType,
                     InstanceIdentifier<T> path, T data, FutureCallback<Void> callback) {
-    WriteTransaction tx = broker.newWriteOnlyTransaction();
-    tx.put(datastoreType, path, data, true);
-    Futures.addCallback(tx.submit(), callback);
+        WriteTransaction tx = broker.newWriteOnlyTransaction();
+        tx.put(datastoreType, path, data, true);
+        Futures.addCallback(tx.submit(), callback);
     }
 
-    private <T extends DataObject> void asyncUpdate(LogicalDatastoreType datastoreType,
+    protected <T extends DataObject> void asyncUpdate(LogicalDatastoreType datastoreType,
                     InstanceIdentifier<T> path, T data, FutureCallback<Void> callback) {
-    WriteTransaction tx = broker.newWriteOnlyTransaction();
-    tx.merge(datastoreType, path, data, true);
-    Futures.addCallback(tx.submit(), callback);
+        WriteTransaction tx = broker.newWriteOnlyTransaction();
+        tx.merge(datastoreType, path, data, true);
+        Futures.addCallback(tx.submit(), callback);
     }
 
-    private <T extends DataObject> void asyncRemove(LogicalDatastoreType datastoreType,
+    protected <T extends DataObject> void asyncRemove(LogicalDatastoreType datastoreType,
                     InstanceIdentifier<T> path, FutureCallback<Void> callback) {
-    WriteTransaction tx = broker.newWriteOnlyTransaction();
-    tx.delete(datastoreType, path);
-    Futures.addCallback(tx.submit(), callback);
+        WriteTransaction tx = broker.newWriteOnlyTransaction();
+        tx.delete(datastoreType, path);
+        Futures.addCallback(tx.submit(), callback);
     }
 
     void processPortAdd(NodeConnector port) {
         NodeConnectorId portId = port.getId();
         FlowCapableNodeConnector ofPort = port.getAugmentation(FlowCapableNodeConnector.class);
-        LOG.debug("PortAdd: PortId { "+portId.getValue()+"} PortName {"+ofPort.getName()+"}");
+        LOG.debug("PortAdd: PortId { " + portId.getValue() + "} PortName {" + ofPort.getName() + "}");
         String ifName = this.mapNcToInterfaceName.get(portId);
         setInterfaceOperStatus(ifName, OperStatus.Up);
     }
@@ -429,7 +404,7 @@ public class InterfaceManager extends AbstractDataChangeListener<Interface> impl
     private void setInterfaceOperStatus(String ifName, OperStatus opStatus) {
         if (ifName != null) {
             InstanceIdentifier<org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface> id =
-                            buildStateInterfaceId(ifName);
+                            IfmUtil.buildStateInterfaceId(ifName);
             Optional<org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface> stateIf =
                             read(LogicalDatastoreType.OPERATIONAL, id);
             org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface stateIface;
@@ -482,11 +457,12 @@ public class InterfaceManager extends AbstractDataChangeListener<Interface> impl
         long dpn = this.getDpnForInterface(ifName);
         long portNo = this.getPortNumForInterface(iface).longValue();
         matches.add(new MatchInfo(MatchFieldType.in_port, new long[] {dpn, portNo}));
+
         if (ifType.isInstance(L2vlan.class)) {
             IfL2vlan vlanIface = iface.getAugmentation(IfL2vlan.class);
             long vlanVid = vlanIface.getVlanId().longValue();
             if (vlanVid != 0) {
-                matches.add(new MatchInfo(MatchFieldType.vlan_vid, 
+                matches.add(new MatchInfo(MatchFieldType.vlan_vid,
                             new long[] {vlanVid}));
                 LOG.trace("L2Vlan: {}",vlanIface);
             }
@@ -495,10 +471,10 @@ public class InterfaceManager extends AbstractDataChangeListener<Interface> impl
             IfL3tunnel ifL3Tunnel = iface.getAugmentation(IfL3tunnel.class);
             Class<? extends TunnelTypeBase> tunnType = ifL3Tunnel.getTunnelType();
             LOG.trace("L3Tunnel: {}",ifL3Tunnel);
-        } else if (ifType.getClass().isInstance(StackedVlan.class)) {
+        } else if (ifType.isAssignableFrom(StackedVlan.class)) {
             IfStackedVlan ifStackedVlan = iface.getAugmentation(IfStackedVlan.class);
             LOG.trace("StackedVlan: {}",ifStackedVlan);
-        } else if (ifType.getClass().isInstance(Mpls.class)) {
+        } else if (ifType.isAssignableFrom(Mpls.class)) {
             IfMpls ifMpls = iface.getAugmentation(IfMpls.class);
             LOG.trace("Mpls: {}",ifMpls);
         }
@@ -515,7 +491,7 @@ public class InterfaceManager extends AbstractDataChangeListener<Interface> impl
 
         if (iface.isEnabled()) {
 
-            if(ifType.isInstance(L2vlan.class)) {
+            if(ifType.isAssignableFrom(L2vlan.class)) {
                 IfL2vlan vlanIface = iface.getAugmentation(IfL2vlan.class);
                 long vlanVid = vlanIface.getVlanId();
                 LOG.trace("L2Vlan: {}",vlanIface);
@@ -525,23 +501,23 @@ public class InterfaceManager extends AbstractDataChangeListener<Interface> impl
                             new String[] { Long.toString(vlanVid) }));
                 }
                 listActionInfo.add(new ActionInfo(ActionType.output, new String[] { Long.toString(portNo)}));
-                
-            } else if (ifType.isInstance(L3tunnel.class)) {
+
+            } else if (ifType.isAssignableFrom(L3tunnel.class)) {
                 //TODO: Handle different tunnel types
                 IfL3tunnel ifL3Tunnel = iface.getAugmentation(IfL3tunnel.class);
                 Class<? extends TunnelTypeBase> tunnType = ifL3Tunnel.getTunnelType();
                 LOG.trace("L3Tunnel: {}",ifL3Tunnel);
                 //TODO: check switch_type and configure accordingly
                 listActionInfo.add(new ActionInfo(ActionType.output, new String[] { Long.toString(portNo)}));
-                
-            } else if (ifType.isInstance(StackedVlan.class)) {
+
+            } else if (ifType.isAssignableFrom(StackedVlan.class)) {
                 IfStackedVlan ifStackedVlan = iface.getAugmentation(IfStackedVlan.class);
                 LOG.trace("StackedVlan: {}",ifStackedVlan);
-                // TBD
-            } else if (ifType.isInstance(Mpls.class)) {
+                // TODO: TBD
+            } else if (ifType.isAssignableFrom(Mpls.class)) {
                 IfMpls ifMpls = iface.getAugmentation(IfMpls.class);
                 LOG.trace("Mpls: {}",ifMpls);
-                // TBD
+                // TODO: TBD
             }
         }
         return listActionInfo;
index 01bf1f7ca662c11d96160ccb72a0037e577bdfd9..9a04dae55def58f0854b132e4962ee58b194b285 100644 (file)
@@ -7,18 +7,16 @@
  */
 package org.opendaylight.vpnservice.interfacemgr;
 
-import java.util.concurrent.ExecutionException;
 import java.math.BigInteger;
 import java.util.List;
+import java.util.concurrent.ExecutionException;
 import java.util.concurrent.Future;
-import org.opendaylight.vpnservice.mdsalutil.ActionInfo;
-import org.opendaylight.vpnservice.interfacemgr.interfaces.IInterfaceManager;
 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
 import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext;
 import org.opendaylight.controller.sal.binding.api.BindingAwareProvider;
 import org.opendaylight.idmanager.IdManager;
 import org.opendaylight.vpnservice.interfacemgr.interfaces.IInterfaceManager;
-import org.opendaylight.vpnservice.mdsalutil.InstructionInfo;
+import org.opendaylight.vpnservice.mdsalutil.ActionInfo;
 import org.opendaylight.vpnservice.mdsalutil.MatchInfo;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.idmanager.rev150403.CreateIdPoolInput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.idmanager.rev150403.CreateIdPoolInputBuilder;
@@ -50,14 +48,14 @@ public class InterfacemgrProvider implements BindingAwareProvider, AutoCloseable
 
     private void createIdPool() {
         CreateIdPoolInput createPool = new CreateIdPoolInputBuilder()
-        .setPoolName("interfaces")
-        .setIdStart(1L)
-        .setPoolSize(new BigInteger("65535"))
-        .build();
+            .setPoolName(IfmConstants.IFM_IDPOOL_NAME)
+            .setIdStart(IfmConstants.IFM_IDPOOL_START)
+            .setPoolSize(new BigInteger(IfmConstants.IFM_IDPOOL_SIZE))
+            .build();
         //TODO: Error handling
         Future<RpcResult<Void>> result = idManager.createIdPool(createPool);
         try {
-            if((result != null) && (result.get().isSuccessful())) {
+            if ((result != null) && (result.get().isSuccessful())) {
                 LOG.debug("Created IdPool for InterfaceMgr");
             }
         } catch (InterruptedException | ExecutionException e) {
diff --git a/interfacemgr/interfacemgr-impl/src/test/java/org/opendaylight/vpnservice/interfacemgr/test/IfmUtilTest.java b/interfacemgr/interfacemgr-impl/src/test/java/org/opendaylight/vpnservice/interfacemgr/test/IfmUtilTest.java
new file mode 100644 (file)
index 0000000..74e11df
--- /dev/null
@@ -0,0 +1,31 @@
+package org.opendaylight.vpnservice.interfacemgr.test;
+
+import static org.junit.Assert.assertEquals;
+import static org.mockito.Mockito.when;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.opendaylight.vpnservice.interfacemgr.IfmUtil;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId;
+
+public class IfmUtilTest {
+
+    @Mock NodeConnectorId ncId;
+    MockDataChangedEvent event;
+
+    @Before
+    public void setUp() throws Exception {
+        MockitoAnnotations.initMocks(this);
+    }
+
+    @Test
+    public void testDpnConversions() {
+        String NodeId = IfmUtil.buildDpnNodeId(101L).getValue();
+        assertEquals("openflow:101", NodeId);
+        when(ncId.getValue()).thenReturn("openflow:101:11");
+        assertEquals("101",IfmUtil.getDpnFromNodeConnectorId(ncId));
+    }
+
+}
diff --git a/interfacemgr/interfacemgr-impl/src/test/java/org/opendaylight/vpnservice/interfacemgr/test/InterfaceManagerTest.java b/interfacemgr/interfacemgr-impl/src/test/java/org/opendaylight/vpnservice/interfacemgr/test/InterfaceManagerTest.java
new file mode 100644 (file)
index 0000000..1cae176
--- /dev/null
@@ -0,0 +1,209 @@
+package org.opendaylight.vpnservice.interfacemgr.test;
+
+import static org.junit.Assert.*;
+import static org.mockito.Matchers.any;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.when;
+
+import com.google.common.base.Optional;
+import com.google.common.util.concurrent.FutureCallback;
+import com.google.common.util.concurrent.Futures;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.runners.MockitoJUnitRunner;
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.opendaylight.controller.md.sal.binding.api.DataChangeListener;
+import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
+import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
+import org.opendaylight.controller.md.sal.common.api.data.AsyncDataBroker.DataChangeScope;
+import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
+import org.opendaylight.idmanager.IdManager;
+import org.opendaylight.vpnservice.interfacemgr.IfmUtil;
+import org.opendaylight.vpnservice.interfacemgr.InterfaceManager;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.iana._if.type.rev140508.L2vlan;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.InterfaceType;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.InterfaceBuilder;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.InterfaceKey;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface.OperStatus;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnector;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnectorBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnectorKey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeKey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.idmanager.rev150403.pools.IdPool;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.rev150331.BaseIds;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.rev150331.BaseIdsBuilder;
+import org.opendaylight.yangtools.concepts.ListenerRegistration;
+import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+
+@RunWith(MockitoJUnitRunner.class)
+public class InterfaceManagerTest {
+
+    private String ifName = "dpn1-if0";
+    Map<InstanceIdentifier<?>,DataObject> written = new HashMap<>();
+    Map<InstanceIdentifier<?>,DataObject> updated = new HashMap<>();
+    Set<InstanceIdentifier<?>> removed = new HashSet<>();
+
+    @Mock DataBroker dataBroker;
+    @Mock IdManager idManager;
+    @Mock ListenerRegistration<DataChangeListener> dataChangeListenerRegistration;
+    @Mock ReadOnlyTransaction mockReadTx;
+    @Mock WriteTransaction mockWriteTx;
+
+    MockDataChangedEvent dataChangeEvent;
+    InterfaceManager imgr;
+
+    NodeConnectorId ncId;
+    NodeConnector nc;
+    Interface interf;
+    InstanceIdentifier<Interface> ifIdent;
+    InstanceIdentifier<NodeConnector> ncIdent;
+    InstanceIdentifier<org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface> ifsIdent;
+    org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface stateIface;
+    InstanceIdentifier<IdPool> poolIdent;
+
+    @Before
+    public void setUp() throws Exception {
+        when(dataBroker.registerDataChangeListener(
+                any(LogicalDatastoreType.class),
+                any(InstanceIdentifier.class),
+                any(DataChangeListener.class),
+                any(DataChangeScope.class)))
+                .thenReturn(dataChangeListenerRegistration);
+        dataChangeEvent = new MockDataChangedEvent();
+        imgr = new InterfaceManager(dataBroker, idManager) {
+            protected <T extends DataObject> void asyncWrite(LogicalDatastoreType datastoreType,
+                            InstanceIdentifier<T> path, T data, FutureCallback<Void> callback) {
+                /*
+                 * Do nothing for now. Ideally we should capture this information
+                 * and use it to verify results.
+                 */
+                written.put(path, data);
+            }
+            protected <T extends DataObject> void asyncUpdate(LogicalDatastoreType datastoreType,
+                            InstanceIdentifier<T> path, T data, FutureCallback<Void> callback) {
+                updated.put(path, data);
+            }
+
+            protected <T extends DataObject> void asyncRemove(LogicalDatastoreType datastoreType,
+                            InstanceIdentifier<T> path, FutureCallback<Void> callback) {
+                removed.add(path);
+            }
+
+        };
+        setupMocks();
+    }
+
+    private void setupMocks() {
+        ncId = new NodeConnectorId("openflow:10:111");
+        nc = buildNodeConnector(ncId);
+        interf = buildInterface(ifName, "Test Interface1", true, L2vlan.class, ncId);
+        ifIdent = IfmUtil.buildId(ifName);
+        ncIdent = getNcIdent("openflow:10",ncId);
+        ifsIdent = IfmUtil.buildStateInterfaceId(interf.getName());
+        stateIface = buildStateInterface(ifName);
+        poolIdent = IfmUtil.getPoolId("interfaces");
+
+        // Setup mocks
+        when(dataBroker.newReadOnlyTransaction()).thenReturn(mockReadTx);
+        when(dataBroker.newWriteOnlyTransaction()).thenReturn(mockWriteTx);
+    }
+
+    @Test
+    public void testAdd() {
+        Optional<Interface> expected = Optional.of(interf);
+        Optional<NodeConnector> expectedNc = Optional.of(nc);
+        doReturn(Futures.immediateCheckedFuture(expected)).when(mockReadTx).read(
+                        LogicalDatastoreType.CONFIGURATION, ifIdent);
+        doReturn(Futures.immediateCheckedFuture(expectedNc)).when(mockReadTx).read(
+                        LogicalDatastoreType.OPERATIONAL, ncIdent);
+        doReturn(Futures.immediateCheckedFuture(Optional.absent())).when(mockReadTx).read(
+                        LogicalDatastoreType.OPERATIONAL, ifsIdent);
+        doReturn(Futures.immediateCheckedFuture(Optional.absent())).when(mockReadTx).read(
+                        LogicalDatastoreType.OPERATIONAL, poolIdent);
+
+        dataChangeEvent.created.put(IfmUtil.buildId(ifName), interf);
+        imgr.onDataChanged(dataChangeEvent);
+        //Add some verifications
+        assertEquals(1,written.size());
+        assertEquals(0,updated.size());
+        assertEquals(0, removed.size());
+        org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface writtenIface =
+                        (org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface)written.get(ifsIdent);
+        assertEquals(stateIface.getKey(), writtenIface.getKey());
+        assertEquals(65536, writtenIface.getIfIndex().intValue());
+        assertEquals(OperStatus.Up, writtenIface.getOperStatus());
+    }
+
+    @Test
+    public void testUpdate() {
+        Optional<Interface> expected = Optional.of(interf);
+        Optional<NodeConnector> expectedNc = Optional.of(nc);
+        Optional<org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface> expectedStateIf = Optional.of(stateIface);
+        doReturn(Futures.immediateCheckedFuture(expected)).when(mockReadTx).read(
+                        LogicalDatastoreType.CONFIGURATION, ifIdent);
+        doReturn(Futures.immediateCheckedFuture(expectedNc)).when(mockReadTx).read(
+                        LogicalDatastoreType.OPERATIONAL, ncIdent);
+        doReturn(Futures.immediateCheckedFuture(expectedStateIf)).when(mockReadTx).read(
+                        LogicalDatastoreType.OPERATIONAL, ifsIdent);
+        doReturn(Futures.immediateCheckedFuture(Optional.absent())).when(mockReadTx).read(
+                        LogicalDatastoreType.OPERATIONAL, poolIdent);
+        dataChangeEvent.original.put(IfmUtil.buildId(ifName), interf);
+        dataChangeEvent.updated.put(IfmUtil.buildId(ifName), interf);
+        imgr.onDataChanged(dataChangeEvent);
+        //Add some verifications
+
+        assertEquals(0,written.size());
+        assertEquals(1,updated.size());
+        assertEquals(0, removed.size());
+        org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface updatedIface =
+                        (org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface)updated.get(ifsIdent);
+        assertNotEquals(stateIface.getKey(),updatedIface.getKey());
+        assertNull(updatedIface.getIfIndex());
+        assertEquals(OperStatus.Up, updatedIface.getOperStatus());
+    }
+
+    private org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface buildStateInterface(
+                    String ifName) {
+        org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.InterfaceBuilder ifaceBuilder =
+                        new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.InterfaceBuilder();
+        ifaceBuilder.setKey(IfmUtil.getStateInterfaceKeyFromName(ifName));
+        return ifaceBuilder.build();
+    }
+
+    private InstanceIdentifier<NodeConnector> getNcIdent(String nodeKey, NodeConnectorId ncId) {
+        return InstanceIdentifier.builder(Nodes.class)
+                        .child(Node.class, new NodeKey(new NodeId(nodeKey)))
+                        .child(NodeConnector.class, new NodeConnectorKey(ncId))
+                        .build();
+    }
+
+    private Interface buildInterface(String ifName, String desc, boolean enabled, Class<? extends InterfaceType> ifType, NodeConnectorId ncId) {
+        InterfaceBuilder builder = new InterfaceBuilder().setKey(new InterfaceKey(ifName)).setName(ifName)
+                        .setDescription(desc).setEnabled(enabled).setType(ifType);
+
+        BaseIds baseId = new BaseIdsBuilder().setOfPortId(ncId).build();
+        builder.addAugmentation(BaseIds.class, baseId);
+        return builder.build();
+    }
+
+    private NodeConnector buildNodeConnector(NodeConnectorId ncId) {
+        NodeConnectorBuilder ncBuilder = new NodeConnectorBuilder()
+                        .setId(ncId)
+                        .setKey(new NodeConnectorKey(ncId));
+        return ncBuilder.build();
+    }
+
+}
diff --git a/interfacemgr/interfacemgr-impl/src/test/java/org/opendaylight/vpnservice/interfacemgr/test/MockDataChangedEvent.java b/interfacemgr/interfacemgr-impl/src/test/java/org/opendaylight/vpnservice/interfacemgr/test/MockDataChangedEvent.java
new file mode 100644 (file)
index 0000000..3c95c90
--- /dev/null
@@ -0,0 +1,53 @@
+/*
+ * Copyright (c) 2015 Ericsson India Global Services Pvt Ltd. 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.vpnservice.interfacemgr.test;
+
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+import org.opendaylight.controller.md.sal.common.api.data.AsyncDataChangeEvent;
+import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+
+class MockDataChangedEvent implements AsyncDataChangeEvent<InstanceIdentifier<?>, DataObject> {
+  Map<InstanceIdentifier<?>,DataObject> created = new HashMap<>();
+  Map<InstanceIdentifier<?>,DataObject> updated = new HashMap<>();
+  Map<InstanceIdentifier<?>,DataObject> original = new HashMap<>();
+  Set<InstanceIdentifier<?>> removed = new HashSet<>();
+
+  @Override
+  public Map<InstanceIdentifier<?>, DataObject> getCreatedData() {
+      return created;
+  }
+
+  @Override
+  public Map<InstanceIdentifier<?>, DataObject> getUpdatedData() {
+      return updated;
+  }
+
+  @Override
+  public Set<InstanceIdentifier<?>> getRemovedPaths() {
+      return removed;
+  }
+
+  @Override
+  public Map<InstanceIdentifier<?>, DataObject> getOriginalData() {
+      return original;
+  }
+
+  @Override
+  public DataObject getOriginalSubtree() {
+      throw new UnsupportedOperationException("Not implemented by mock");
+  }
+
+  @Override
+  public DataObject getUpdatedSubtree() {
+      throw new UnsupportedOperationException("Not implemented by mock");
+  }
+}
diff --git a/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/vpnservice/mdsalutil/AbstractDataChangeListener.java b/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/vpnservice/mdsalutil/AbstractDataChangeListener.java
new file mode 100644 (file)
index 0000000..eff8741
--- /dev/null
@@ -0,0 +1,113 @@
+/*
+ * Copyright (c) 2015 Ericsson India Global Services Pvt Ltd. 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.vpnservice.mdsalutil;
+
+import com.google.common.base.Optional;
+import com.google.common.base.Preconditions;
+
+import org.opendaylight.controller.md.sal.binding.api.DataChangeListener;
+import org.opendaylight.controller.md.sal.common.api.data.AsyncDataChangeEvent;
+import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+
+import java.util.Collections;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * AbstractDataChangeListener implemented basic {@link DataChangeListener} processing for
+ * MDSAL Data Objects.
+ */
+public abstract class AbstractDataChangeListener<T extends DataObject> implements DataChangeListener {
+
+    protected final Class<T> clazz;
+
+    /**
+     * @param clazz - for which the data change event is received
+     */
+    public AbstractDataChangeListener(Class<T> clazz) {
+        this.clazz = Preconditions.checkNotNull(clazz, "Class can not be null!");
+    }
+
+    @Override
+    public void onDataChanged(final AsyncDataChangeEvent<InstanceIdentifier<?>, DataObject> changeEvent) {
+        Preconditions.checkNotNull(changeEvent,"Async ChangeEvent can not be null!");
+
+        /* All DataObjects for create */
+        final Map<InstanceIdentifier<?>, DataObject> createdData = changeEvent.getCreatedData() != null
+                ? changeEvent.getCreatedData() : Collections.<InstanceIdentifier<?>, DataObject>emptyMap();
+        /* All DataObjects for remove */
+        final Set<InstanceIdentifier<?>> removeData = changeEvent.getRemovedPaths() != null
+                ? changeEvent.getRemovedPaths() : Collections.<InstanceIdentifier<?>>emptySet();
+        /* All DataObjects for updates */
+        final Map<InstanceIdentifier<?>, DataObject> updateData = changeEvent.getUpdatedData() != null
+                ? changeEvent.getUpdatedData() : Collections.<InstanceIdentifier<?>, DataObject>emptyMap();
+        /* All Original DataObjects */
+        final Map<InstanceIdentifier<?>, DataObject> originalData = changeEvent.getOriginalData() != null
+                ? changeEvent.getOriginalData() : Collections.<InstanceIdentifier<?>, DataObject>emptyMap();
+
+        this.createData(createdData);
+        this.updateData(updateData, originalData);
+        this.removeData(removeData, originalData);
+    }
+
+    @SuppressWarnings("unchecked")
+    private void createData(final Map<InstanceIdentifier<?>, DataObject> createdData) {
+        final Set<InstanceIdentifier<?>> keys = createdData.keySet() != null
+                ? createdData.keySet() : Collections.<InstanceIdentifier<?>>emptySet();
+        for (InstanceIdentifier<?> key : keys) {
+            if (clazz.equals(key.getTargetType())) {
+                InstanceIdentifier<T> createKeyIdent = key.firstIdentifierOf(clazz);
+                final Optional<DataObject> value = Optional.of(createdData.get(key));
+                if (value.isPresent()) {
+                    this.add(createKeyIdent, (T)value.get());
+                }
+            }
+        }
+    }
+
+    @SuppressWarnings("unchecked")
+    private void updateData(final Map<InstanceIdentifier<?>, DataObject> updateData,
+            final Map<InstanceIdentifier<?>, DataObject> originalData) {
+
+        final Set<InstanceIdentifier<?>> keys = updateData.keySet() != null
+                ? updateData.keySet() : Collections.<InstanceIdentifier<?>>emptySet();
+        for (InstanceIdentifier<?> key : keys) {
+            if (clazz.equals(key.getTargetType())) {
+                InstanceIdentifier<T> updateKeyIdent = key.firstIdentifierOf(clazz);
+                final Optional<DataObject> value = Optional.of(updateData.get(key));
+                final Optional<DataObject> original = Optional.of(originalData.get(key));
+                if (value.isPresent() && original.isPresent()) {
+                    this.update(updateKeyIdent, (T)original.get(), (T)value.get());
+                }
+            }
+        }
+    }
+
+    @SuppressWarnings("unchecked")
+    private void removeData(final Set<InstanceIdentifier<?>> removeData,
+            final Map<InstanceIdentifier<?>, DataObject> originalData) {
+
+        for (InstanceIdentifier<?> key : removeData) {
+            if (clazz.equals(key.getTargetType())) {
+                final InstanceIdentifier<T> ident = key.firstIdentifierOf(clazz);
+                final DataObject removeValue = originalData.get(key);
+                this.remove(ident, (T)removeValue);
+            }
+        }
+    }
+
+    protected abstract void remove(InstanceIdentifier<T> identifier, T del);
+
+    protected abstract void update(InstanceIdentifier<T> identifier, T original, T update);
+
+    protected abstract void add(InstanceIdentifier<T> identifier, T add);
+
+}
+
+
index 3744928c482cf72e5a9f77d50f64a721a0afa07a..8dba62c17efe1804a90ab7a3c03383d25f6d40cb 100644 (file)
@@ -100,37 +100,6 @@ public enum ActionType {
         }
     },
 
-    /**
-     * The action info passed to this ActionType should have two actionValues string.
-     *
-     * The first string representing the metadata and the next string representing the metadatamask
-     */
-    /*
-    filter_equals {
-
-        @Override
-        public Action buildAction(ActionInfo actionInfo) {
-            String[] actionValues = actionInfo.getActionValues();
-            if (actionValues == null || actionValues.length != 2) {
-                throw new RuntimeException("Filter Equal set field action should have two arguments for metadata and metadata mask");
-            }
-            final BigInteger metaData = new BigInteger(actionValues[0]);
-            final BigInteger metadataMask = new BigInteger(actionValues[1]);
-            return new ActionBuilder()
-                .setAction(
-                    new ExperimenterActionTypeBuilder().setActionType(
-                        new FilterTypesActionBuilder()
-                            .setFilterType(EricFilterTypes.ERICFTEQUAL)
-                            .setMetadata(
-                                new MetadataBuilder().setMetadata(metaData).setMetadataMask(metadataMask).build())
-                        .build())//Filter Equal Action Type
-                    .build())//Experimenter Action
-                .setKey(new ActionKey(actionInfo.getActionKey()))
-                .build();
-        }
-    },
-    */
-
     pop_mpls {
         @Override
         public Action buildAction(ActionInfo actionInfo) {
@@ -160,28 +129,7 @@ public enum ActionType {
                     .setKey(new ActionKey(actionInfo.getActionKey())).build();
         }
     },
-/*
-    pop_vxlan {
-        @Override
-        public Action buildAction(ActionInfo actionInfo) {
-            return new ActionBuilder().setAction(
-                    new ExperimenterActionTypeBuilder().setActionType(
-                            new VxlanPopActionBuilder().build()).build())
-                    .setKey(new ActionKey(actionInfo.getActionKey())).build();
-        }
-    },
-    */
-/*
-    pop_gre {
-        @Override
-        public Action buildAction(ActionInfo actionInfo) {
-            return new ActionBuilder().setAction(
-                    new ExperimenterActionTypeBuilder().setActionType(
-                            new GrePopActionBuilder().build()).build())
-                    .setKey(new ActionKey(actionInfo.getActionKey())).build();
-        }
-    },
-*/
+
     push_mpls {
         @Override
         public Action buildAction(ActionInfo actionInfo) {
@@ -213,28 +161,7 @@ public enum ActionType {
                     .setKey(new ActionKey(actionInfo.getActionKey())).build();
         }
     },
-/*
-    push_vxlan {
-        @Override
-        public Action buildAction(ActionInfo actionInfo) {
-            return new ActionBuilder().setAction(
-                    new ExperimenterActionTypeBuilder().setActionType(
-                                    new VxlanPushActionBuilder().setEthType(0x0800).build()).build())
-                    .setKey(new ActionKey(actionInfo.getActionKey())).build();
-        }
-    },
-    */
-/*
-    push_gre {
-        @Override
-        public Action buildAction(ActionInfo actionInfo) {
-            return new ActionBuilder().setAction(
-                    new ExperimenterActionTypeBuilder().setActionType(
-                            new GrePushActionBuilder().setEthType(0x0800).build()).build())
-                    .setKey(new ActionKey(actionInfo.getActionKey())).build();
-        }
-    },
-*/
+
     set_field_mpls_label {
         @Override
         public Action buildAction(ActionInfo actionInfo) {
index fc08f8c584acff7194147cdb80e1b7032bd477a0..402abd831908ff08350017ae391b9903dace3968 100644 (file)
@@ -51,8 +51,6 @@ public class GroupEntity extends AbstractSwitchEntity {
             m_groupBuilder.setGroupName(getGroupName());
             m_groupBuilder.setGroupType(getGroupType());
             m_groupBuilder.setBuckets(MDSALUtil.buildBuckets(getBucketInfoList()));
-
-           // m_groupBuilder.setResyncFlag(getResyncFlag());
         }
 
         return m_groupBuilder;
index 96fd52f97e881bc696e04b7de15a5b617c9acc44..5ee42539a4425e771823edcfa750fce5bb11f998 100644 (file)
@@ -84,8 +84,7 @@ public enum InstructionType {
     clear_actions {
         @Override
         public Instruction buildInstruction(InstructionInfo instructionInfo, int instructionKey) {
-            // ClearActions clearActions = new
-            // ClearActionsBuilder().setAction(listAction).build();
+            
             ClearActionsCase clearActionsCase = new ClearActionsCaseBuilder().build();
 
             InstructionBuilder instructionBuilder = new InstructionBuilder();
diff --git a/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/vpnservice/mdsalutil/MDSALDataStoreUtils.java b/mdsalutil/mdsalutil-api/src/main/java/org/opendaylight/vpnservice/mdsalutil/MDSALDataStoreUtils.java
new file mode 100644 (file)
index 0000000..d52394e
--- /dev/null
@@ -0,0 +1,52 @@
+package org.opendaylight.vpnservice.mdsalutil;
+
+import com.google.common.base.Optional;
+import com.google.common.util.concurrent.FutureCallback;
+import com.google.common.util.concurrent.Futures;
+
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
+import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
+import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
+import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+
+public class MDSALDataStoreUtils {
+
+    public <T extends DataObject> Optional<T> read(final DataBroker broker,final LogicalDatastoreType datastoreType,
+            InstanceIdentifier<T> path) {
+
+        ReadOnlyTransaction tx = broker.newReadOnlyTransaction();
+
+        Optional<T> result = Optional.absent();
+        try {
+            result = tx.read(datastoreType, path).get();
+        } catch (Exception e) {
+            throw new RuntimeException(e);
+        }
+
+        return result;
+    }
+
+   public static <T extends DataObject> void asyncWrite(final DataBroker broker, final LogicalDatastoreType datastoreType,
+       InstanceIdentifier<T> path, T data, FutureCallback<Void> callback) {
+       WriteTransaction tx = broker.newWriteOnlyTransaction();
+       tx.put(datastoreType, path, data, true);
+       Futures.addCallback(tx.submit(), callback);
+   }
+
+   public <T extends DataObject> void asyncUpdate(final DataBroker broker,final LogicalDatastoreType datastoreType,
+       InstanceIdentifier<T> path, T data, FutureCallback<Void> callback) {
+       WriteTransaction tx = broker.newWriteOnlyTransaction();
+       tx.merge(datastoreType, path, data, true);
+       Futures.addCallback(tx.submit(), callback);
+   }
+
+   public <T extends DataObject> void asyncRemove(final DataBroker broker,final LogicalDatastoreType datastoreType,
+       InstanceIdentifier<T> path, FutureCallback<Void> callback) {
+       WriteTransaction tx = broker.newWriteOnlyTransaction();
+       tx.delete(datastoreType, path);
+       Futures.addCallback(tx.submit(), callback);
+   }
+
+}
index 81cfd10df62b9de38c6974e42e66da932332dd08..fea7e624f69b7a55f19556fc85371f114b0a9737 100644 (file)
@@ -17,23 +17,18 @@ import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.LinkedBlockingQueue;
 
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.FlowCookie;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.FlowCookie;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.Action;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.table.Flow;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.table.FlowBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.table.FlowKey;
-//import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.GetFlowStatisticsFromFlowTableInput;
-//import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.GetFlowStatisticsFromFlowTableInputBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.FlowModFlags;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Instructions;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.InstructionsBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Match;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.MatchBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.list.Instruction;
-//import org.opendaylight.yang.gen.v1.urn.opendaylight.group.statistics.rev131111.GetGroupStatisticsInput;
-//import org.opendaylight.yang.gen.v1.urn.opendaylight.group.statistics.rev131111.GetGroupStatisticsInputBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.BucketId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.GroupId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.GroupTypes;
@@ -65,23 +60,12 @@ import com.google.common.primitives.Ints;
 public class MDSALUtil {
 
     public static final String NODE_PREFIX = "openflow";
-    public static final String SEPARATOR = ":"; // TODO name separtor correctly
-
+    public static final String SEPARATOR = ":";
     private static final Buckets EMPTY_Buckets = new BucketsBuilder().build();
     private static final Instructions EMPTY_Instructions = new InstructionsBuilder().setInstruction(
             new ArrayList<Instruction>()).build();
     private static final Match EMPTY_Matches = new MatchBuilder().build();
 
-    // public static Map<Long, SyncStatus> syncStatusMap = new
-    // ConcurrentHashMap<Long, SyncStatus>();
-    public static Map<Long, LinkedBlockingQueue<Object>> lportMap = new ConcurrentHashMap<Long, LinkedBlockingQueue<Object>>();
-    public static Map<Long, LinkedBlockingQueue<Object>> lportDownMap = new ConcurrentHashMap<Long, LinkedBlockingQueue<Object>>();
-    // public static Map<String, Boolean> ofRefMap = new
-    // ConcurrentHashMap<String, Boolean>();
-    public static Map<Long, Map<String, Boolean>> ofRefMapDpn = new ConcurrentHashMap<Long, Map<String, Boolean>>();
-    public static Map<Long, Map<Integer, String>> ofRefGroupMapDpn = new ConcurrentHashMap<Long, Map<Integer, String>>();
-    public static Map<Long, Map<String, String>> ofRefFlowMapDpn = new ConcurrentHashMap<Long, Map<String, String>>();
-
     public static FlowEntity buildFlowEntity(long dpnId, short tableId, String flowId, int priority, String flowName,
             int idleTimeOut, int hardTimeOut, BigInteger cookie, List<MatchInfo> listMatchInfo,
             List<InstructionInfo> listInstructionInfo) {
@@ -101,19 +85,6 @@ public class MDSALUtil {
         return flowEntity;
     }
 
-    // TODO FIX ME
-    /*
-    public static Flow buildResyncFlow(short tableId, String flowId, int priority, String flowName, int idleTimeOut,
-            int hardTimeOut, BigInteger cookie, List<MatchInfo> listMatchInfo,
-            List<InstructionInfo> listInstructionInfo, boolean isStrict, boolean isResync) {
-        FlowKey key = new FlowKey(new FlowId(flowId));
-        return new FlowBuilder().setMatch(buildMatches(listMatchInfo)).setKey(key)
-                .setPriority(Integer.valueOf(priority)).setInstructions(buildInstructions(listInstructionInfo))
-                .setBarrier(false).setInstallHw(true).setHardTimeout(hardTimeOut).setIdleTimeout(idleTimeOut)
-                .setFlowName(flowName).setTableId(Short.valueOf(tableId)).setStrict(isStrict)
-                .setCookie(new FlowCookie(cookie)).setResyncFlag(isResync).build();
-    }
-    */
     // TODO: CHECK IF THIS IS USED
     public static Flow buildFlow(short tableId, String flowId, int priority, String flowName, int idleTimeOut,
             int hardTimeOut, BigInteger cookie, List<MatchInfo> listMatchInfo, List<InstructionInfo> listInstructionInfo) {
@@ -132,32 +103,6 @@ public class MDSALUtil {
                 .setCookie(new FlowCookie(cookie)).build();
     }
 
- // TODO FIX ME
-    /*
-    public static Flow buildResyncFlow(short tableId, String flowId, int priority, String flowName, int idleTimeOut,
-            int hardTimeOut, BigInteger cookie, List<MatchInfo> listMatchInfo,
-            List<InstructionInfo> listInstructionInfo, boolean isStrict, boolean isResync, boolean isSendFlowRem) {
-        FlowKey key = new FlowKey(new FlowId(flowId));
-        return new FlowBuilder().setMatch(buildMatches(listMatchInfo)).setKey(key)
-                .setPriority(Integer.valueOf(priority)).setInstructions(buildInstructions(listInstructionInfo))
-                .setBarrier(false).setInstallHw(true).setHardTimeout(hardTimeOut).setIdleTimeout(idleTimeOut)
-                .setFlowName(flowName).setTableId(Short.valueOf(tableId)).setStrict(isStrict)
-                .setCookie(new FlowCookie(cookie))
-                .setFlags(new FlowModFlags(false, false, false, false, isSendFlowRem)).setResyncFlag(isResync).build();
-
-    }
-    */
-/*
-    public static Flow buildFlow(short tableId, String flowId, int priority, String flowName, int idleTimeOut,
-            int hardTimeOut, BigInteger cookie, List<MatchInfo> listMatchInfo,
-            List<InstructionInfo> listInstructionInfo, boolean isStrict, boolean isSendFlowRem) {
-        return buildResyncFlow(tableId, flowId, priority, flowName, idleTimeOut, hardTimeOut, cookie, listMatchInfo,
-                listInstructionInfo, isStrict, false, isSendFlowRem);
-
-    }
-*/
-
-
     public static GroupEntity buildGroupEntity(long dpnId, long groupId, String groupName, GroupTypes groupType,
             List<BucketInfo> listBucketInfo) {
 
@@ -171,41 +116,6 @@ public class MDSALUtil {
         return groupEntity;
     }
 
-    // FIXME -- AS ReSync is not required for ODL VPN Service
-    /*
-    public static Group buildGroup(long groupId, String groupName, GroupTypes groupType, List<BucketInfo> listBucketInfo) {
-        return buildGroup(groupId, groupName, groupType, listBucketInfo, false);
-    }
-
-    public static Group buildGroup(long groupId, String groupName, GroupTypes groupType,
-            List<BucketInfo> listBucketInfo, boolean isResync) {
-        return new GroupBuilder().setBuckets(buildBuckets(listBucketInfo)).setKey(new GroupKey(new GroupId(groupId)))
-                .setBarrier(false).setGroupId(new GroupId(Long.valueOf(groupId))).setGroupType(groupType)
-                .setGroupName(groupName).setResyncFlag(isResync).build();
-    }
-*/
-    // Removing --Missing Constraint
-    /*
-    public static GetFlowStatisticsFromFlowTableInput buildGetFlowStatisticsFromFlowTableInput(short tableId,
-            List<MatchInfo> listMatchInfo, long dpnId) {
-        return new GetFlowStatisticsFromFlowTableInputBuilder()
-                .setTableId(Short.valueOf(tableId))
-                .setMatch(buildMatches(listMatchInfo))
-                .setNode(
-                        new NodeRef(InstanceIdentifier.builder(Nodes.class)
-                                .child(Node.class, new NodeKey(new NodeId("openflow:" + dpnId))).toInstance())).build();
-
-    }
-
-    public static GetGroupStatisticsInput buildGetGroupStatistics(long groupId, long dpnId) {
-        return new GetGroupStatisticsInputBuilder()
-                .setGroupId(new GroupId(Long.valueOf(groupId)))
-                .setNode(
-                        new NodeRef(InstanceIdentifier.builder(Nodes.class)
-                                .child(Node.class, new NodeKey(new NodeId("openflow:" + dpnId))).toInstance())).build();
-    }
-    */
-
     public static TransmitPacketInput getPacketOutDefault(List<ActionInfo> actionInfos, byte[] payload, long dpnId) {
         return new TransmitPacketInputBuilder()
                 .setAction(buildActions(actionInfos))
index f38acf70f89fec17f55bca292a4873ffc873d4c2..178ba18cf232b856f2aac5c4b08707fda97e17fc 100644 (file)
@@ -55,596 +55,562 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026
 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.TunnelId;
 
 public enum MatchFieldType {
-       eth_src {
-               @Override
-               protected Class<? extends MatchField> getMatchType() {
-                       return EthSrc.class;
-               }
-
-               @Override
-               public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
-                       EthernetMatchBuilder ethernetMatchBuilder = (EthernetMatchBuilder) mapMatchBuilder
-                                       .get(EthernetMatchBuilder.class);
-
-                       if (ethernetMatchBuilder == null) {
-                               ethernetMatchBuilder = new EthernetMatchBuilder();
-                               mapMatchBuilder.put(EthernetMatchBuilder.class, ethernetMatchBuilder);
-                       }
-
-                       ethernetMatchBuilder.setEthernetSource(new EthernetSourceBuilder().setAddress(
-                                       new MacAddress(matchInfo.getStringMatchValues()[0])).build());
-               }
-
-               @Override
-               public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
-                       EthernetMatchBuilder ethernetMatchBuilder = (EthernetMatchBuilder) mapMatchBuilder
-                                       .remove(EthernetMatchBuilder.class);
-
-                       if (ethernetMatchBuilder != null) {
-                               matchBuilderInOut.setEthernetMatch(ethernetMatchBuilder.build());
-                       }
-               }
-       },
-
-       eth_dst {
-               @Override
-               protected Class<? extends MatchField> getMatchType() {
-                       return EthDst.class;
-               }
-
-               @Override
-               public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
-                       EthernetMatchBuilder ethernetMatchBuilder = (EthernetMatchBuilder) mapMatchBuilder
-                                       .get(EthernetMatchBuilder.class);
-
-                       if (ethernetMatchBuilder == null) {
-                               ethernetMatchBuilder = new EthernetMatchBuilder();
-                               mapMatchBuilder.put(EthernetMatchBuilder.class, ethernetMatchBuilder);
-                       }
-
-                       ethernetMatchBuilder.setEthernetDestination(new EthernetDestinationBuilder().setAddress(
-                                       new MacAddress(matchInfo.getStringMatchValues()[0])).build());
-               }
-
-               @Override
-               public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
-                       EthernetMatchBuilder ethernetMatchBuilder = (EthernetMatchBuilder) mapMatchBuilder
-                                       .remove(EthernetMatchBuilder.class);
-
-                       if (ethernetMatchBuilder != null) {
-                               matchBuilderInOut.setEthernetMatch(ethernetMatchBuilder.build());
-                       }
-               }
-       },
-
-       eth_type {
-               @Override
-               protected Class<? extends MatchField> getMatchType() {
-                       return EthType.class;
-               }
-
-               @Override
-               public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
-                       EthernetMatchBuilder ethernetMatchBuilder = (EthernetMatchBuilder) mapMatchBuilder
-                                       .get(EthernetMatchBuilder.class);
-
-                       if (ethernetMatchBuilder == null) {
-                               ethernetMatchBuilder = new EthernetMatchBuilder();
-                               mapMatchBuilder.put(EthernetMatchBuilder.class, ethernetMatchBuilder);
-                       }
-
-                       ethernetMatchBuilder.setEthernetType(new EthernetTypeBuilder().setType(
-                                       new EtherType(matchInfo.getMatchValues()[0])).build());
-               }
-
-               @Override
-               public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
-                       EthernetMatchBuilder ethernetMatchBuilder = (EthernetMatchBuilder) mapMatchBuilder
-                                       .remove(EthernetMatchBuilder.class);
-
-                       if (ethernetMatchBuilder != null) {
-                               matchBuilderInOut.setEthernetMatch(ethernetMatchBuilder.build());
-                       }
-               }
-       },
-
-       in_port {
-               @Override
-               protected Class<? extends MatchField> getMatchType() {
-                       return InPort.class;
-               }
-
-               @Override
-               public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
-               }
-
-               @Override
-               public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
-                       // NodeConnectorId format -> openflow:<dpnId>:<portId>
-                       StringBuffer nodeConnectorId = new StringBuffer().append("openflow:").append(matchInfo.getMatchValues()[0])
-                       .append(':').append(matchInfo.getMatchValues()[1]);
-                       matchBuilderInOut.setInPort(new NodeConnectorId(nodeConnectorId.toString()));
-               }
-       },
-
-       ip_proto {
-               @Override
-               protected Class<? extends MatchField> getMatchType() {
-                       return IpProto.class;
-               }
-
-               @Override
-               public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
-                       IpMatchBuilder ipMatchBuilder = (IpMatchBuilder) mapMatchBuilder.get(IpMatchBuilder.class);
-
-                       if (ipMatchBuilder == null) {
-                               ipMatchBuilder = new IpMatchBuilder();
-                               mapMatchBuilder.put(IpMatchBuilder.class, ipMatchBuilder);
-                       }
-
-                       ipMatchBuilder.setIpProtocol(Short.valueOf((short) matchInfo.getMatchValues()[0])).build();
-               }
-
-               @Override
-               public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
-                       IpMatchBuilder ipMatchBuilder = (IpMatchBuilder) mapMatchBuilder.remove(IpMatchBuilder.class);
-
-                       if (ipMatchBuilder != null) {
-                               matchBuilderInOut.setIpMatch(ipMatchBuilder.build());
-                       }
-               }
-       },
-
-       ipv4_dst {
-               @Override
-               protected Class<? extends MatchField> getMatchType() {
-                       return Ipv4Dst.class;
-               }
-
-               @Override
-               public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
-                       Ipv4MatchBuilder ipv4MatchBuilder = (Ipv4MatchBuilder) mapMatchBuilder.get(Ipv4MatchBuilder.class);
-
-                       if (ipv4MatchBuilder == null) {
-                               ipv4MatchBuilder = new Ipv4MatchBuilder();
-                               mapMatchBuilder.put(Ipv4MatchBuilder.class, ipv4MatchBuilder);
-                       }
-
-                       long[] prefix = matchInfo.getMatchValues();
-                       ipv4MatchBuilder.setIpv4Destination(new Ipv4Prefix(MDSALUtil.longToIp(prefix[0], prefix[1]))).build();
-               }
-
-               @Override
-               public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
-                       Ipv4MatchBuilder ipv4MatchBuilder = (Ipv4MatchBuilder) mapMatchBuilder.remove(Ipv4MatchBuilder.class);
-
-                       if (ipv4MatchBuilder != null) {
-                               matchBuilderInOut.setLayer3Match(ipv4MatchBuilder.build());
-                       }
-               }
-       },
-
-       ipv4_src {
-               @Override
-               protected Class<? extends MatchField> getMatchType() {
-                       return Ipv4Src.class;
-               }
-
-               @Override
-               public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
-                       Ipv4MatchBuilder ipv4MatchBuilder = (Ipv4MatchBuilder) mapMatchBuilder.get(Ipv4MatchBuilder.class);
-
-                       if (ipv4MatchBuilder == null) {
-                               ipv4MatchBuilder = new Ipv4MatchBuilder();
-                               mapMatchBuilder.put(Ipv4MatchBuilder.class, ipv4MatchBuilder);
-                       }
-
-                       long[] prefix = matchInfo.getMatchValues();
-                       ipv4MatchBuilder.setIpv4Source(new Ipv4Prefix(MDSALUtil.longToIp(prefix[0], prefix[1]))).build();
-               }
-
-               @Override
-               public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
-                       Ipv4MatchBuilder ipv4MatchBuilder = (Ipv4MatchBuilder) mapMatchBuilder.remove(Ipv4MatchBuilder.class);
-
-                       if (ipv4MatchBuilder != null) {
-                               matchBuilderInOut.setLayer3Match(ipv4MatchBuilder.build());
-                       }
-               }
-       },
-
-       arp_op {
-               @Override
-               protected Class<? extends MatchField> getMatchType() {
-                       return ArpOp.class;
-               }
-
-               @Override
-               public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
-                       ArpMatchBuilder arpMatchBuilder = (ArpMatchBuilder) mapMatchBuilder.get(ArpMatchBuilder.class);
-
-                       if (arpMatchBuilder == null) {
-                               arpMatchBuilder = new ArpMatchBuilder();
-                               mapMatchBuilder.put(ArpMatchBuilder.class, arpMatchBuilder);
-                       }
-
-                       arpMatchBuilder.setArpOp(Integer.valueOf((int) matchInfo.getMatchValues()[0]));
-               }
-
-               @Override
-               public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
-                       ArpMatchBuilder arpMatchBuilder = (ArpMatchBuilder) mapMatchBuilder.remove(ArpMatchBuilder.class);
-
-                       if (arpMatchBuilder != null) {
-                               matchBuilderInOut.setLayer3Match(arpMatchBuilder.build());
-                       }
-               }
-       },
-
-       arp_tpa {
-               @Override
-               protected Class<? extends MatchField> getMatchType() {
-                       return ArpTpa.class;
-               }
-
-               @Override
-               public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
-                       ArpMatchBuilder arpMatchBuilder = (ArpMatchBuilder) mapMatchBuilder.get(ArpMatchBuilder.class);
-
-                       if (arpMatchBuilder == null) {
-                               arpMatchBuilder = new ArpMatchBuilder();
-                               mapMatchBuilder.put(ArpMatchBuilder.class, arpMatchBuilder);
-                       }
-
-                       long[] prefix = matchInfo.getMatchValues();
-                       arpMatchBuilder.setArpTargetTransportAddress(new Ipv4Prefix(MDSALUtil.longToIp(prefix[0], prefix[1])));
-               }
-
-               @Override
-               public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
-                       ArpMatchBuilder arpMatchBuilder = (ArpMatchBuilder) mapMatchBuilder.remove(ArpMatchBuilder.class);
-
-                       if (arpMatchBuilder != null) {
-                               matchBuilderInOut.setLayer3Match(arpMatchBuilder.build());
-                       }
-               }
-       },
-
-       arp_spa {
-               @Override
-               protected Class<? extends MatchField> getMatchType() {
-                       return ArpSpa.class;
-               }
-
-               @Override
-               public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
-                       ArpMatchBuilder arpMatchBuilder = (ArpMatchBuilder) mapMatchBuilder.get(ArpMatchBuilder.class);
-
-                       if (arpMatchBuilder == null) {
-                               arpMatchBuilder = new ArpMatchBuilder();
-                               mapMatchBuilder.put(ArpMatchBuilder.class, arpMatchBuilder);
-                       }
-
-                       long[] prefix = matchInfo.getMatchValues();
-                       arpMatchBuilder.setArpSourceTransportAddress(new Ipv4Prefix(MDSALUtil.longToIp(prefix[0], prefix[1])));
-               }
-
-               @Override
-               public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
-                       ArpMatchBuilder arpMatchBuilder = (ArpMatchBuilder) mapMatchBuilder.remove(ArpMatchBuilder.class);
-
-                       if (arpMatchBuilder != null) {
-                               matchBuilderInOut.setLayer3Match(arpMatchBuilder.build());
-                       }
-               }
-       },
-
-       metadata {
-               @Override
-               protected Class<? extends MatchField> getMatchType() {
-                       return Metadata.class;
-               }
-
-               @Override
-               public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
-                       MetadataBuilder metadataBuilder = (MetadataBuilder) mapMatchBuilder.get(MetadataBuilder.class);
-
-                       if (metadataBuilder == null) {
-                               metadataBuilder = new MetadataBuilder();
-                               mapMatchBuilder.put(MetadataBuilder.class, metadataBuilder);
-                       }
-
-                       BigInteger[] metadataValues = matchInfo.getBigMatchValues();
-                       metadataBuilder.setMetadata(metadataValues[0]).setMetadataMask(metadataValues[1]).build();
-               }
-
-               @Override
-               public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
-                       MetadataBuilder metadataBuilder = (MetadataBuilder) mapMatchBuilder.remove(MetadataBuilder.class);
-
-                       if (metadataBuilder != null) {
-                               matchBuilderInOut.setMetadata(metadataBuilder.build());
-                       }
-               }
-       },
-
-       mpls_label {
-               @Override
-               protected Class<? extends MatchField> getMatchType() {
-                       return MplsLabel.class;
-               }
-
-               @Override
-               public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
-                       ProtocolMatchFieldsBuilder protocolMatchFieldsBuilder = (ProtocolMatchFieldsBuilder) mapMatchBuilder
-                                       .get(ProtocolMatchFieldsBuilder.class);
-
-                       if (protocolMatchFieldsBuilder == null) {
-                               protocolMatchFieldsBuilder = new ProtocolMatchFieldsBuilder();
-                               mapMatchBuilder.put(ProtocolMatchFieldsBuilder.class, protocolMatchFieldsBuilder);
-                       }
-
-                       protocolMatchFieldsBuilder.setMplsLabel(Long.valueOf(matchInfo.getStringMatchValues()[0])).build();
-               }
-
-               @Override
-               public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
-                       ProtocolMatchFieldsBuilder protocolMatchFieldsBuilder = (ProtocolMatchFieldsBuilder) mapMatchBuilder
-                                       .remove(ProtocolMatchFieldsBuilder.class);
-
-                       if (protocolMatchFieldsBuilder != null) {
-                               matchBuilderInOut.setProtocolMatchFields(protocolMatchFieldsBuilder.build());
-                       }
-               }
-       },
-
-       pbb_isid {
-               @Override
-               protected Class<? extends MatchField> getMatchType() {
-                       return PbbIsid.class;
-               }
-
-               @Override
-               public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
-                       ProtocolMatchFieldsBuilder protocolMatchFieldsBuilder = (ProtocolMatchFieldsBuilder) mapMatchBuilder
-                                       .get(ProtocolMatchFieldsBuilder.class);
-
-                       if (protocolMatchFieldsBuilder == null) {
-                               protocolMatchFieldsBuilder = new ProtocolMatchFieldsBuilder();
-                               mapMatchBuilder.put(ProtocolMatchFieldsBuilder.class, protocolMatchFieldsBuilder);
-                       }
-
-                       protocolMatchFieldsBuilder.setPbb(new PbbBuilder().setPbbIsid(Long.valueOf(matchInfo.getMatchValues()[0]))
-                                       .build());
-               }
-
-               @Override
-               public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
-                       ProtocolMatchFieldsBuilder protocolMatchFieldsBuilder = (ProtocolMatchFieldsBuilder) mapMatchBuilder
-                                       .remove(ProtocolMatchFieldsBuilder.class);
-
-                       if (protocolMatchFieldsBuilder != null) {
-                               matchBuilderInOut.setProtocolMatchFields(protocolMatchFieldsBuilder.build());
-                       }
-               }
-       },
-
-       tcp_dst {
-               @Override
-               protected Class<? extends MatchField> getMatchType() {
-                       return TcpDst.class;
-               }
-
-               @Override
-               public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
-                       TcpMatchBuilder tcpMatchBuilder = (TcpMatchBuilder) mapMatchBuilder.get(TcpMatchBuilder.class);
-
-                       if (tcpMatchBuilder == null) {
-                               tcpMatchBuilder = new TcpMatchBuilder();
-                               mapMatchBuilder.put(TcpMatchBuilder.class, tcpMatchBuilder);
-                       }
-
-                       tcpMatchBuilder.setTcpDestinationPort(new PortNumber(Integer.valueOf((int) matchInfo.getMatchValues()[0])));
-               }
-
-               @Override
-               public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
-                       TcpMatchBuilder tcpMatchBuilder = (TcpMatchBuilder) mapMatchBuilder.remove(TcpMatchBuilder.class);
-
-                       if (tcpMatchBuilder != null) {
-                               matchBuilderInOut.setLayer4Match(tcpMatchBuilder.build());
-                       }
-               }
-       },
-
-       tcp_src {
-               @Override
-               protected Class<? extends MatchField> getMatchType() {
-                       return TcpSrc.class;
-               }
-
-               @Override
-               public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
-                       TcpMatchBuilder tcpMatchBuilder = (TcpMatchBuilder) mapMatchBuilder.get(TcpMatchBuilder.class);
-
-                       if (tcpMatchBuilder == null) {
-                               tcpMatchBuilder = new TcpMatchBuilder();
-                               mapMatchBuilder.put(TcpMatchBuilder.class, tcpMatchBuilder);
-                       }
-
-                       tcpMatchBuilder.setTcpSourcePort(new PortNumber(Integer.valueOf((int) matchInfo.getMatchValues()[0])));
-               }
-
-               @Override
-               public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
-                       TcpMatchBuilder tcpMatchBuilder = (TcpMatchBuilder) mapMatchBuilder.remove(TcpMatchBuilder.class);
-
-                       if (tcpMatchBuilder != null) {
-                               matchBuilderInOut.setLayer4Match(tcpMatchBuilder.build());
-                       }
-               }
-       },
-
-       udp_dst {
-               @Override
-               protected Class<? extends MatchField> getMatchType() {
-                       return UdpDst.class;
-               }
-
-               @Override
-               public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
-                       UdpMatchBuilder udpMatchBuilder = (UdpMatchBuilder) mapMatchBuilder.get(UdpMatchBuilder.class);
-
-                       if (udpMatchBuilder == null) {
-                               udpMatchBuilder = new UdpMatchBuilder();
-                               mapMatchBuilder.put(UdpMatchBuilder.class, udpMatchBuilder);
-                       }
-
-                       udpMatchBuilder.setUdpDestinationPort(new PortNumber(Integer.valueOf((int) matchInfo.getMatchValues()[0])));
-               }
-
-               @Override
-               public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
-                       UdpMatchBuilder udpMatchBuilder = (UdpMatchBuilder) mapMatchBuilder.remove(UdpMatchBuilder.class);
-
-                       if (udpMatchBuilder != null) {
-                               matchBuilderInOut.setLayer4Match(udpMatchBuilder.build());
-                       }
-               }
-       },
-
-       udp_src {
-               @Override
-               protected Class<? extends MatchField> getMatchType() {
-                       return UdpSrc.class;
-               }
-
-               @Override
-               public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
-                       UdpMatchBuilder udpMatchBuilder = (UdpMatchBuilder) mapMatchBuilder.get(UdpMatchBuilder.class);
-
-                       if (udpMatchBuilder == null) {
-                               udpMatchBuilder = new UdpMatchBuilder();
-                               mapMatchBuilder.put(UdpMatchBuilder.class, udpMatchBuilder);
-                       }
-
-                       udpMatchBuilder.setUdpSourcePort(new PortNumber(Integer.valueOf((int) matchInfo.getMatchValues()[0])));
-               }
-
-               @Override
-               public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
-                       UdpMatchBuilder udpMatchBuilder = (UdpMatchBuilder) mapMatchBuilder.remove(UdpMatchBuilder.class);
-
-                       if (udpMatchBuilder != null) {
-                               matchBuilderInOut.setLayer4Match(udpMatchBuilder.build());
-                       }
-               }
-       },
-       tunnel_id {
-               @Override
-               public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
-                       TunnelBuilder tunnelBuilder = (TunnelBuilder) mapMatchBuilder.get(TunnelBuilder.class);
-
-                       if (tunnelBuilder == null) {
-                               tunnelBuilder = new TunnelBuilder();
-                               mapMatchBuilder.put(TunnelBuilder.class, tunnelBuilder);
-                       }
-
-                       BigInteger[] tunnelIdValues = matchInfo.getBigMatchValues();
-                       tunnelBuilder.setTunnelId(tunnelIdValues[0]).setTunnelMask(tunnelIdValues[1]).build();
-               }
-
-               @Override
-               public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
-                       TunnelBuilder tunnelBuilder = (TunnelBuilder) mapMatchBuilder.remove(TunnelBuilder.class);
-
-                       if (tunnelBuilder != null) {
-                               matchBuilderInOut.setTunnel(tunnelBuilder.build());
-                       }
-               }
-
-               @Override
-               protected Class<? extends MatchField> getMatchType() {
-                       return TunnelId.class;
-               }
-
-       },
-
-       vlan_vid {
-               @Override
-               protected Class<? extends MatchField> getMatchType() {
-                       return VlanVid.class;
-               }
-
-               @Override
-               public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
-                       VlanMatchBuilder vlanMatchBuilder = (VlanMatchBuilder) mapMatchBuilder.get(VlanMatchBuilder.class);
-
-                       if (vlanMatchBuilder == null) {
-                               vlanMatchBuilder = new VlanMatchBuilder();
-                               mapMatchBuilder.put(VlanMatchBuilder.class, vlanMatchBuilder);
-                       }
-
-                       vlanMatchBuilder.setVlanId(new VlanIdBuilder()
-                       .setVlanId(new VlanId(Integer.valueOf((int) matchInfo.getMatchValues()[0])))
-                       .setVlanIdPresent(((int) matchInfo.getMatchValues()[0] == 0) ? Boolean.FALSE : Boolean.TRUE)
-                       .build());
-               }
-
-               @Override
-               public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
-                       VlanMatchBuilder vlanMatchBuilder = (VlanMatchBuilder) mapMatchBuilder.remove(VlanMatchBuilder.class);
-
-                       if (vlanMatchBuilder != null) {
-                               matchBuilderInOut.setVlanMatch(vlanMatchBuilder.build());
-                       }
-               }
-       };
-
-       /*
-       public SetFieldMatch buildSetFieldMatch(XtensionType xtype) {
-               if (xtype == null || xtype.getMatchMaskType() == 
-                               SalOfaMatchMaskType.OFPMMNOMASK) {
-                       return new 
-                                       SetFieldMatchBuilder().setHasMask(false).setMatchType(getMatchType())
-                                       .setSalOxmClass(SalOpenflowBasicClass.class).build();
-               }
-
-               return new SetFieldMatchBuilder()
-               .setHasMask(true)
-               .setMatchType(getMatchType())
-               .setSalOxmClass(SalOpenflowBasicClass.class)
-               .addAugmentation(
-                               ExperimenterSetFieldMatch.class,
-                               new 
-                               ExperimenterSetFieldMatchBuilder().setMatchMaskType(xtype.getMatchMaskType())
-                               .setTlvMatchMask(xtype.getByteBuf()).build()).build();
-
-
-       }
-*/
-
-       // New one for ODL without the Extension --CHECK
-       /*
-       public SetFieldMatch buildSetFieldMatch() {
-               
-               return new SetFieldMatchBuilder().setHasMask(false).setMatchType(getMatchType())
-                                       .setSalOxmClass(SalOpenflowBasicClass.class).build();
-                                       
-               return null;
-               }
-*/
-               
-       
-       public abstract void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder);
-
-       public abstract void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo,
-                       Map<Class<?>, Object> mapMatchBuilder);
-
-       protected abstract Class<? extends MatchField> getMatchType();
-
-       protected boolean hasMatchFieldMask() {
-               // Override this to return true
-                               return false;
-       }
+    eth_src {
+        @Override
+        protected Class<? extends MatchField> getMatchType() {
+            return EthSrc.class;
+        }
+
+        @Override
+        public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
+            EthernetMatchBuilder ethernetMatchBuilder = (EthernetMatchBuilder) mapMatchBuilder
+                    .get(EthernetMatchBuilder.class);
+
+            if (ethernetMatchBuilder == null) {
+                ethernetMatchBuilder = new EthernetMatchBuilder();
+                mapMatchBuilder.put(EthernetMatchBuilder.class, ethernetMatchBuilder);
+            }
+
+            ethernetMatchBuilder.setEthernetSource(new EthernetSourceBuilder().setAddress(
+                    new MacAddress(matchInfo.getStringMatchValues()[0])).build());
+        }
+
+        @Override
+        public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
+            EthernetMatchBuilder ethernetMatchBuilder = (EthernetMatchBuilder) mapMatchBuilder
+                    .remove(EthernetMatchBuilder.class);
+
+            if (ethernetMatchBuilder != null) {
+                matchBuilderInOut.setEthernetMatch(ethernetMatchBuilder.build());
+            }
+        }
+    },
+
+    eth_dst {
+        @Override
+        protected Class<? extends MatchField> getMatchType() {
+            return EthDst.class;
+        }
+
+        @Override
+        public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
+            EthernetMatchBuilder ethernetMatchBuilder = (EthernetMatchBuilder) mapMatchBuilder
+                    .get(EthernetMatchBuilder.class);
+
+            if (ethernetMatchBuilder == null) {
+                ethernetMatchBuilder = new EthernetMatchBuilder();
+                mapMatchBuilder.put(EthernetMatchBuilder.class, ethernetMatchBuilder);
+            }
+
+            ethernetMatchBuilder.setEthernetDestination(new EthernetDestinationBuilder().setAddress(
+                    new MacAddress(matchInfo.getStringMatchValues()[0])).build());
+        }
+
+        @Override
+        public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
+            EthernetMatchBuilder ethernetMatchBuilder = (EthernetMatchBuilder) mapMatchBuilder
+                    .remove(EthernetMatchBuilder.class);
+
+            if (ethernetMatchBuilder != null) {
+                matchBuilderInOut.setEthernetMatch(ethernetMatchBuilder.build());
+            }
+        }
+    },
+
+    eth_type {
+        @Override
+        protected Class<? extends MatchField> getMatchType() {
+            return EthType.class;
+        }
+
+        @Override
+        public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
+            EthernetMatchBuilder ethernetMatchBuilder = (EthernetMatchBuilder) mapMatchBuilder
+                    .get(EthernetMatchBuilder.class);
+
+            if (ethernetMatchBuilder == null) {
+                ethernetMatchBuilder = new EthernetMatchBuilder();
+                mapMatchBuilder.put(EthernetMatchBuilder.class, ethernetMatchBuilder);
+            }
+
+            ethernetMatchBuilder.setEthernetType(new EthernetTypeBuilder().setType(
+                    new EtherType(matchInfo.getMatchValues()[0])).build());
+        }
+
+        @Override
+        public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
+            EthernetMatchBuilder ethernetMatchBuilder = (EthernetMatchBuilder) mapMatchBuilder
+                    .remove(EthernetMatchBuilder.class);
+
+            if (ethernetMatchBuilder != null) {
+                matchBuilderInOut.setEthernetMatch(ethernetMatchBuilder.build());
+            }
+        }
+    },
+
+    in_port {
+        @Override
+        protected Class<? extends MatchField> getMatchType() {
+            return InPort.class;
+        }
+
+        @Override
+        public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
+        }
+
+        @Override
+        public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
+
+            StringBuffer nodeConnectorId = new StringBuffer().append("openflow:").append(matchInfo.getMatchValues()[0])
+            .append(':').append(matchInfo.getMatchValues()[1]);
+            matchBuilderInOut.setInPort(new NodeConnectorId(nodeConnectorId.toString()));
+        }
+    },
+
+    ip_proto {
+        @Override
+        protected Class<? extends MatchField> getMatchType() {
+            return IpProto.class;
+        }
+
+        @Override
+        public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
+            IpMatchBuilder ipMatchBuilder = (IpMatchBuilder) mapMatchBuilder.get(IpMatchBuilder.class);
+
+            if (ipMatchBuilder == null) {
+                ipMatchBuilder = new IpMatchBuilder();
+                mapMatchBuilder.put(IpMatchBuilder.class, ipMatchBuilder);
+            }
+
+            ipMatchBuilder.setIpProtocol(Short.valueOf((short) matchInfo.getMatchValues()[0])).build();
+        }
+
+        @Override
+        public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
+            IpMatchBuilder ipMatchBuilder = (IpMatchBuilder) mapMatchBuilder.remove(IpMatchBuilder.class);
+
+            if (ipMatchBuilder != null) {
+                matchBuilderInOut.setIpMatch(ipMatchBuilder.build());
+            }
+        }
+    },
+
+    ipv4_dst {
+        @Override
+        protected Class<? extends MatchField> getMatchType() {
+            return Ipv4Dst.class;
+        }
+
+        @Override
+        public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
+            Ipv4MatchBuilder ipv4MatchBuilder = (Ipv4MatchBuilder) mapMatchBuilder.get(Ipv4MatchBuilder.class);
+
+            if (ipv4MatchBuilder == null) {
+                ipv4MatchBuilder = new Ipv4MatchBuilder();
+                mapMatchBuilder.put(Ipv4MatchBuilder.class, ipv4MatchBuilder);
+            }
+
+            long[] prefix = matchInfo.getMatchValues();
+            ipv4MatchBuilder.setIpv4Destination(new Ipv4Prefix(MDSALUtil.longToIp(prefix[0], prefix[1]))).build();
+        }
+
+        @Override
+        public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
+            Ipv4MatchBuilder ipv4MatchBuilder = (Ipv4MatchBuilder) mapMatchBuilder.remove(Ipv4MatchBuilder.class);
+
+            if (ipv4MatchBuilder != null) {
+                matchBuilderInOut.setLayer3Match(ipv4MatchBuilder.build());
+            }
+        }
+    },
+
+    ipv4_src {
+        @Override
+        protected Class<? extends MatchField> getMatchType() {
+            return Ipv4Src.class;
+        }
+
+        @Override
+        public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
+            Ipv4MatchBuilder ipv4MatchBuilder = (Ipv4MatchBuilder) mapMatchBuilder.get(Ipv4MatchBuilder.class);
+
+            if (ipv4MatchBuilder == null) {
+                ipv4MatchBuilder = new Ipv4MatchBuilder();
+                mapMatchBuilder.put(Ipv4MatchBuilder.class, ipv4MatchBuilder);
+            }
+
+            long[] prefix = matchInfo.getMatchValues();
+            ipv4MatchBuilder.setIpv4Source(new Ipv4Prefix(MDSALUtil.longToIp(prefix[0], prefix[1]))).build();
+        }
+
+        @Override
+        public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
+            Ipv4MatchBuilder ipv4MatchBuilder = (Ipv4MatchBuilder) mapMatchBuilder.remove(Ipv4MatchBuilder.class);
+
+            if (ipv4MatchBuilder != null) {
+                matchBuilderInOut.setLayer3Match(ipv4MatchBuilder.build());
+            }
+        }
+    },
+
+    arp_op {
+        @Override
+        protected Class<? extends MatchField> getMatchType() {
+            return ArpOp.class;
+        }
+
+        @Override
+        public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
+            ArpMatchBuilder arpMatchBuilder = (ArpMatchBuilder) mapMatchBuilder.get(ArpMatchBuilder.class);
+
+            if (arpMatchBuilder == null) {
+                arpMatchBuilder = new ArpMatchBuilder();
+                mapMatchBuilder.put(ArpMatchBuilder.class, arpMatchBuilder);
+            }
+
+            arpMatchBuilder.setArpOp(Integer.valueOf((int) matchInfo.getMatchValues()[0]));
+        }
+
+        @Override
+        public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
+            ArpMatchBuilder arpMatchBuilder = (ArpMatchBuilder) mapMatchBuilder.remove(ArpMatchBuilder.class);
+
+            if (arpMatchBuilder != null) {
+                matchBuilderInOut.setLayer3Match(arpMatchBuilder.build());
+            }
+        }
+    },
+
+    arp_tpa {
+        @Override
+        protected Class<? extends MatchField> getMatchType() {
+            return ArpTpa.class;
+        }
+
+        @Override
+        public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
+            ArpMatchBuilder arpMatchBuilder = (ArpMatchBuilder) mapMatchBuilder.get(ArpMatchBuilder.class);
+
+            if (arpMatchBuilder == null) {
+                arpMatchBuilder = new ArpMatchBuilder();
+                mapMatchBuilder.put(ArpMatchBuilder.class, arpMatchBuilder);
+            }
+
+            long[] prefix = matchInfo.getMatchValues();
+            arpMatchBuilder.setArpTargetTransportAddress(new Ipv4Prefix(MDSALUtil.longToIp(prefix[0], prefix[1])));
+        }
+
+        @Override
+        public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
+            ArpMatchBuilder arpMatchBuilder = (ArpMatchBuilder) mapMatchBuilder.remove(ArpMatchBuilder.class);
+
+            if (arpMatchBuilder != null) {
+                matchBuilderInOut.setLayer3Match(arpMatchBuilder.build());
+            }
+        }
+    },
+
+    arp_spa {
+        @Override
+        protected Class<? extends MatchField> getMatchType() {
+            return ArpSpa.class;
+        }
+
+        @Override
+        public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
+            ArpMatchBuilder arpMatchBuilder = (ArpMatchBuilder) mapMatchBuilder.get(ArpMatchBuilder.class);
+
+            if (arpMatchBuilder == null) {
+                arpMatchBuilder = new ArpMatchBuilder();
+                mapMatchBuilder.put(ArpMatchBuilder.class, arpMatchBuilder);
+            }
+
+            long[] prefix = matchInfo.getMatchValues();
+            arpMatchBuilder.setArpSourceTransportAddress(new Ipv4Prefix(MDSALUtil.longToIp(prefix[0], prefix[1])));
+        }
+
+        @Override
+        public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
+            ArpMatchBuilder arpMatchBuilder = (ArpMatchBuilder) mapMatchBuilder.remove(ArpMatchBuilder.class);
+
+            if (arpMatchBuilder != null) {
+                matchBuilderInOut.setLayer3Match(arpMatchBuilder.build());
+            }
+        }
+    },
+
+    metadata {
+        @Override
+        protected Class<? extends MatchField> getMatchType() {
+            return Metadata.class;
+        }
+
+        @Override
+        public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
+            MetadataBuilder metadataBuilder = (MetadataBuilder) mapMatchBuilder.get(MetadataBuilder.class);
+
+            if (metadataBuilder == null) {
+                metadataBuilder = new MetadataBuilder();
+                mapMatchBuilder.put(MetadataBuilder.class, metadataBuilder);
+            }
+
+            BigInteger[] metadataValues = matchInfo.getBigMatchValues();
+            metadataBuilder.setMetadata(metadataValues[0]).setMetadataMask(metadataValues[1]).build();
+        }
+
+        @Override
+        public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
+            MetadataBuilder metadataBuilder = (MetadataBuilder) mapMatchBuilder.remove(MetadataBuilder.class);
+
+            if (metadataBuilder != null) {
+                matchBuilderInOut.setMetadata(metadataBuilder.build());
+            }
+        }
+    },
+
+    mpls_label {
+        @Override
+        protected Class<? extends MatchField> getMatchType() {
+            return MplsLabel.class;
+        }
+
+        @Override
+        public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
+            ProtocolMatchFieldsBuilder protocolMatchFieldsBuilder = (ProtocolMatchFieldsBuilder) mapMatchBuilder
+                    .get(ProtocolMatchFieldsBuilder.class);
+
+            if (protocolMatchFieldsBuilder == null) {
+                protocolMatchFieldsBuilder = new ProtocolMatchFieldsBuilder();
+                mapMatchBuilder.put(ProtocolMatchFieldsBuilder.class, protocolMatchFieldsBuilder);
+            }
+
+            protocolMatchFieldsBuilder.setMplsLabel(Long.valueOf(matchInfo.getStringMatchValues()[0])).build();
+        }
+
+        @Override
+        public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
+            ProtocolMatchFieldsBuilder protocolMatchFieldsBuilder = (ProtocolMatchFieldsBuilder) mapMatchBuilder
+                    .remove(ProtocolMatchFieldsBuilder.class);
+
+            if (protocolMatchFieldsBuilder != null) {
+                matchBuilderInOut.setProtocolMatchFields(protocolMatchFieldsBuilder.build());
+            }
+        }
+    },
+
+    pbb_isid {
+        @Override
+        protected Class<? extends MatchField> getMatchType() {
+            return PbbIsid.class;
+        }
+
+        @Override
+        public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
+            ProtocolMatchFieldsBuilder protocolMatchFieldsBuilder = (ProtocolMatchFieldsBuilder) mapMatchBuilder
+                    .get(ProtocolMatchFieldsBuilder.class);
+
+            if (protocolMatchFieldsBuilder == null) {
+                protocolMatchFieldsBuilder = new ProtocolMatchFieldsBuilder();
+                mapMatchBuilder.put(ProtocolMatchFieldsBuilder.class, protocolMatchFieldsBuilder);
+            }
+
+            protocolMatchFieldsBuilder.setPbb(new PbbBuilder().setPbbIsid(Long.valueOf(matchInfo.getMatchValues()[0]))
+                    .build());
+        }
+
+        @Override
+        public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
+            ProtocolMatchFieldsBuilder protocolMatchFieldsBuilder = (ProtocolMatchFieldsBuilder) mapMatchBuilder
+                    .remove(ProtocolMatchFieldsBuilder.class);
+
+            if (protocolMatchFieldsBuilder != null) {
+                matchBuilderInOut.setProtocolMatchFields(protocolMatchFieldsBuilder.build());
+            }
+        }
+    },
+
+    tcp_dst {
+        @Override
+        protected Class<? extends MatchField> getMatchType() {
+            return TcpDst.class;
+        }
+
+        @Override
+        public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
+            TcpMatchBuilder tcpMatchBuilder = (TcpMatchBuilder) mapMatchBuilder.get(TcpMatchBuilder.class);
+
+            if (tcpMatchBuilder == null) {
+                tcpMatchBuilder = new TcpMatchBuilder();
+                mapMatchBuilder.put(TcpMatchBuilder.class, tcpMatchBuilder);
+            }
+
+            tcpMatchBuilder.setTcpDestinationPort(new PortNumber(Integer.valueOf((int) matchInfo.getMatchValues()[0])));
+        }
+
+        @Override
+        public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
+            TcpMatchBuilder tcpMatchBuilder = (TcpMatchBuilder) mapMatchBuilder.remove(TcpMatchBuilder.class);
+
+            if (tcpMatchBuilder != null) {
+                matchBuilderInOut.setLayer4Match(tcpMatchBuilder.build());
+            }
+        }
+    },
+
+    tcp_src {
+        @Override
+        protected Class<? extends MatchField> getMatchType() {
+            return TcpSrc.class;
+        }
+
+        @Override
+        public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
+            TcpMatchBuilder tcpMatchBuilder = (TcpMatchBuilder) mapMatchBuilder.get(TcpMatchBuilder.class);
+
+            if (tcpMatchBuilder == null) {
+                tcpMatchBuilder = new TcpMatchBuilder();
+                mapMatchBuilder.put(TcpMatchBuilder.class, tcpMatchBuilder);
+            }
+
+            tcpMatchBuilder.setTcpSourcePort(new PortNumber(Integer.valueOf((int) matchInfo.getMatchValues()[0])));
+        }
+
+        @Override
+        public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
+            TcpMatchBuilder tcpMatchBuilder = (TcpMatchBuilder) mapMatchBuilder.remove(TcpMatchBuilder.class);
+
+            if (tcpMatchBuilder != null) {
+                matchBuilderInOut.setLayer4Match(tcpMatchBuilder.build());
+            }
+        }
+    },
+
+    udp_dst {
+        @Override
+        protected Class<? extends MatchField> getMatchType() {
+            return UdpDst.class;
+        }
+
+        @Override
+        public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
+            UdpMatchBuilder udpMatchBuilder = (UdpMatchBuilder) mapMatchBuilder.get(UdpMatchBuilder.class);
+
+            if (udpMatchBuilder == null) {
+                udpMatchBuilder = new UdpMatchBuilder();
+                mapMatchBuilder.put(UdpMatchBuilder.class, udpMatchBuilder);
+            }
+
+            udpMatchBuilder.setUdpDestinationPort(new PortNumber(Integer.valueOf((int) matchInfo.getMatchValues()[0])));
+        }
+
+        @Override
+        public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
+            UdpMatchBuilder udpMatchBuilder = (UdpMatchBuilder) mapMatchBuilder.remove(UdpMatchBuilder.class);
+
+            if (udpMatchBuilder != null) {
+                matchBuilderInOut.setLayer4Match(udpMatchBuilder.build());
+            }
+        }
+    },
+
+    udp_src {
+        @Override
+        protected Class<? extends MatchField> getMatchType() {
+            return UdpSrc.class;
+        }
+
+        @Override
+        public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
+            UdpMatchBuilder udpMatchBuilder = (UdpMatchBuilder) mapMatchBuilder.get(UdpMatchBuilder.class);
+
+            if (udpMatchBuilder == null) {
+                udpMatchBuilder = new UdpMatchBuilder();
+                mapMatchBuilder.put(UdpMatchBuilder.class, udpMatchBuilder);
+            }
+
+            udpMatchBuilder.setUdpSourcePort(new PortNumber(Integer.valueOf((int) matchInfo.getMatchValues()[0])));
+        }
+
+        @Override
+        public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
+            UdpMatchBuilder udpMatchBuilder = (UdpMatchBuilder) mapMatchBuilder.remove(UdpMatchBuilder.class);
+
+            if (udpMatchBuilder != null) {
+                matchBuilderInOut.setLayer4Match(udpMatchBuilder.build());
+            }
+        }
+    },
+    tunnel_id {
+        @Override
+        public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
+            TunnelBuilder tunnelBuilder = (TunnelBuilder) mapMatchBuilder.get(TunnelBuilder.class);
+
+            if (tunnelBuilder == null) {
+                tunnelBuilder = new TunnelBuilder();
+                mapMatchBuilder.put(TunnelBuilder.class, tunnelBuilder);
+            }
+
+            BigInteger[] tunnelIdValues = matchInfo.getBigMatchValues();
+            tunnelBuilder.setTunnelId(tunnelIdValues[0]).setTunnelMask(tunnelIdValues[1]).build();
+        }
+
+        @Override
+        public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
+            TunnelBuilder tunnelBuilder = (TunnelBuilder) mapMatchBuilder.remove(TunnelBuilder.class);
+
+            if (tunnelBuilder != null) {
+                matchBuilderInOut.setTunnel(tunnelBuilder.build());
+            }
+        }
+
+        @Override
+        protected Class<? extends MatchField> getMatchType() {
+            return TunnelId.class;
+        }
+
+    },
+
+    vlan_vid {
+        @Override
+        protected Class<? extends MatchField> getMatchType() {
+            return VlanVid.class;
+        }
+
+        @Override
+        public void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
+            VlanMatchBuilder vlanMatchBuilder = (VlanMatchBuilder) mapMatchBuilder.get(VlanMatchBuilder.class);
+
+            if (vlanMatchBuilder == null) {
+                vlanMatchBuilder = new VlanMatchBuilder();
+                mapMatchBuilder.put(VlanMatchBuilder.class, vlanMatchBuilder);
+            }
+
+            vlanMatchBuilder.setVlanId(new VlanIdBuilder()
+            .setVlanId(new VlanId(Integer.valueOf((int) matchInfo.getMatchValues()[0])))
+            .setVlanIdPresent(((int) matchInfo.getMatchValues()[0] == 0) ? Boolean.FALSE : Boolean.TRUE)
+            .build());
+        }
+
+        @Override
+        public void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder) {
+            VlanMatchBuilder vlanMatchBuilder = (VlanMatchBuilder) mapMatchBuilder.remove(VlanMatchBuilder.class);
+
+            if (vlanMatchBuilder != null) {
+                matchBuilderInOut.setVlanMatch(vlanMatchBuilder.build());
+            }
+        }
+    };
+
+
+    public abstract void createInnerMatchBuilder(MatchInfo matchInfo, Map<Class<?>, Object> mapMatchBuilder);
+
+    public abstract void setMatch(MatchBuilder matchBuilderInOut, MatchInfo matchInfo,
+            Map<Class<?>, Object> mapMatchBuilder);
+
+    protected abstract Class<? extends MatchField> getMatchType();
+
+    protected boolean hasMatchFieldMask() {
+        // Override this to return true
+                return false;
+    }
 }
index b1c2cf876ea3185d4b20b21d118af077b5105771..5cd8dba54b7c6bbec6fecb7736c3ae670689bf7b 100644 (file)
@@ -4,9 +4,7 @@
  */
 package org.opendaylight.vpnservice.mdsalutil;
 
-import java.math.BigInteger;
 
 public class MetaDataConstants {
-    // Base cookie value
-    public static final BigInteger COOKIE_SCF_BASE = new BigInteger("7000000", 16);
+      // Nothing
 }
index 0628cda72abb80803b93dadad485d00e9baf5dc8..a57f0ff90bc9521fd2b5f5798c57aa3211c2d867 100644 (file)
@@ -3,157 +3,5 @@ package org.opendaylight.vpnservice.mdsalutil;
 import java.math.BigInteger;
 
 public class MetaDataUtil {
-
-    public static final BigInteger METADATA_NO_MASK = new BigInteger("0000000000000000", 16);
-    public static final BigInteger METADATA_MASK_SCF_MATCH = new BigInteger("FF00000000000000", 16);
-    public static final BigInteger METADATA_MASK_SUBP_MATCH = new BigInteger("00000000FFFF0000", 16);
-    public static final BigInteger METADATA_MASK_APPP_MATCH = new BigInteger("000000000000FFFF", 16);
-    public static final BigInteger METADATA_MASK_LPORT_MATCH = new BigInteger("00FFFF0000000000", 16);
-    public static final BigInteger METADATA_MASK_SCID_MATCH = new BigInteger("000000000000FFFF", 16);
-    public static final BigInteger METADATA_MASK_SCID_WRITE = new BigInteger("000000000000FFFF", 16);
-    public static final BigInteger METADATA_MASK_SUBP_WRITE = new BigInteger("00000000FFFF0000", 16);
-    public static final BigInteger METADATA_MASK_APPP_WRITE = new BigInteger("000000000000FFFF", 16);
-    public static final BigInteger MASK_DMAC_WRITE = new BigInteger("0000FFFFFFFFFFFF", 16);
-    public static final BigInteger METADATA_MASK_SCF_WRITE = new BigInteger("FF00000000000000", 16);
-    public static final BigInteger METADATA_MASK_LPORT_WRITE = new BigInteger("00FFFF0000000000", 16);
-    public static final BigInteger METADATA_MASK_LPORT_TAG = new BigInteger("1FFFFF0000000000", 16);
-    public static final BigInteger METADATA_MASK_SERVICE_INDEX = new BigInteger("E000000000000000", 16);
-    public static final BigInteger METADATA_MASK_SERVICE = new BigInteger("000000FFFF000000", 16);
-    public static final BigInteger METADA_MASK_TUNNEL_ID_VNI = new BigInteger("00000000FFFFFF00", 16);
-    public static final BigInteger METADATA_MASK_LABEL_ITM = new BigInteger("40FFFFFF000000FF", 16);
-    public static final BigInteger METADA_MASK_VALID_TUNNEL_ID_BIT_AND_TUNNEL_ID = new BigInteger("08000000FFFFFF00", 16);
-    public static final BigInteger METADATA_MASK_LABEL_L3 = new BigInteger("000000FFFF000000", 16);
     public static final BigInteger METADATA_MASK_VRFID = new BigInteger("00000000FFFFFFFF", 16);
-
-    public static BigInteger getMetadataSCF(int scfTag) {
-        return (new BigInteger("FF", 16).and(BigInteger.valueOf(scfTag))).shiftLeft(56);
-    }
-
-    public static BigInteger getMetadataSCID(int scId) {
-        return BigInteger.valueOf(scId).and(new BigInteger("FFFF", 16));
-    }
-
-    public static BigInteger getMetadataSubProfID(int subProfId) {
-        return (BigInteger.valueOf(subProfId).and(new BigInteger("FFFF", 16))).shiftLeft(16);
-    }
-
-    public static BigInteger getMetadataAppProfID(int appProfId) {
-        return BigInteger.valueOf(appProfId).and(new BigInteger("FFFF", 16));
-    }
-
-    public static BigInteger getMetadataAPPP(int appProfId) {
-        return BigInteger.valueOf(appProfId).and(new BigInteger("FFFF", 16));
-    }
-
-    public static BigInteger getCookieSCFEthTypeFilter(int scfTag) {
-        return MetaDataConstants.COOKIE_SCF_BASE.add(new BigInteger("0120000", 16)).add(BigInteger.valueOf(scfTag));
-    }
-
-    public static BigInteger getCookieSubFilter(int scfTag) {
-        return MetaDataConstants.COOKIE_SCF_BASE.add(new BigInteger("0310000", 16)).add(BigInteger.valueOf(scfTag));
-    }
-
-    public static BigInteger getCookieProfMap(int scfTag) {
-        return MetaDataConstants.COOKIE_SCF_BASE.add(new BigInteger("0510000", 16)).add(BigInteger.valueOf(scfTag));
-    }
-
-    public static BigInteger getCookieSCFAppFilter(int scfTag) {
-        return MetaDataConstants.COOKIE_SCF_BASE.add(new BigInteger("0410000", 16)).add(BigInteger.valueOf(scfTag));
-    }
-
-    public static BigInteger getEthDestForIpNextHop(int groupId) {
-        return BigInteger.valueOf(groupId).and(MASK_DMAC_WRITE);
-    }
-    public static long getIpAddress(byte[] rawIpAddress) {
-        return (((rawIpAddress[0] & 0xFF) << (3 * 8)) + ((rawIpAddress[1] & 0xFF) << (2 * 8))
-                + ((rawIpAddress[2] & 0xFF) << (1 * 8)) + (rawIpAddress[3] & 0xFF)) & 0xffffffffL;
-    }
-
-    public static BigInteger getMetadataLPort(int lPortTag) {
-        return (new BigInteger("FFFF", 16).and(BigInteger.valueOf(lPortTag))).shiftLeft(40);
-    }
-
-    public static BigInteger getMetadataScHop(int scfInstanceTag, int scfPortTag, int serviceChainId) {
-        return getMetadataSCF(scfInstanceTag).or(getMetadataLPort(scfPortTag)).or(getMetadataSCID(serviceChainId));
-    }
-
-    public static BigInteger getMetadataMaskScHop() {
-        return METADATA_MASK_SCF_WRITE.or(METADATA_MASK_LPORT_WRITE).or(METADATA_MASK_SCID_WRITE);
-    }
-
-    public static BigInteger getCookieSCHop(int scfInstanceTag) {
-        return MetaDataConstants.COOKIE_SCF_BASE.add(new BigInteger("0610000", 16)).add(BigInteger.valueOf(scfInstanceTag));
-    }
-
-    public static BigInteger getMetadataScfPort(int scfInstanceTag, int scfPortTag) {
-        return getMetadataSCF(scfInstanceTag).or(getMetadataLPort(scfPortTag));
-    }
-
-    public static BigInteger getMetadataMaskScfPort() {
-        return METADATA_MASK_LPORT_WRITE.or(METADATA_MASK_SCF_WRITE);
-    }
-
-    public static BigInteger getCookieSCFPort() {
-        return new BigInteger("5000000", 16);
-    }
-
-    public static BigInteger getCookieSCFIpv4EthTypeFilter(int scfInstanceTag) {
-        return MetaDataConstants.COOKIE_SCF_BASE.add(new BigInteger("0100000", 16)).add(BigInteger.valueOf(scfInstanceTag));
-    }
-
-    public static BigInteger getCookieSCFArpEthTypeFilter(int scfInstanceTag) {
-        return MetaDataConstants.COOKIE_SCF_BASE.add(new BigInteger("0110000", 16)).add(BigInteger.valueOf(scfInstanceTag));
-    }
-
-    public static BigInteger getLportTagMetaData(int lportTag) {
-        return new BigInteger("1FFFFF", 16).and(BigInteger.valueOf(lportTag)).shiftLeft(40);
-    }
-
-    public static BigInteger getLportFromMetadata(BigInteger metadata) {
-        return (metadata.and(METADATA_MASK_LPORT_TAG)).shiftRight(40);
-    }
-
-    public static BigInteger getServiceIndexMetaData(int serviceIndex) {
-        return new BigInteger("7", 16).and(BigInteger.valueOf(serviceIndex)).shiftLeft(61);
-    }
-
-    public static BigInteger getMetaDataForLPortDispatcher(int lportTag, short serviceIndex) {
-        return getServiceIndexMetaData(serviceIndex).or(getLportTagMetaData(lportTag));
-    }
-
-    public static BigInteger getMetaDataMaskForLPortDispatcher() {
-        return METADATA_MASK_SERVICE_INDEX.or(METADATA_MASK_LPORT_TAG);
-    }
-
-    public static BigInteger getWriteMetaDataMaskForServicePorts() {
-        return METADATA_MASK_SERVICE_INDEX.or(METADATA_MASK_LPORT_TAG).or(METADATA_MASK_SERVICE);
-    }
-
-    public static BigInteger getMetaDataMaskForLPortDispatcher(BigInteger metadataMaskForServiceIndex, 
-            BigInteger metadataMaskForLPortTag, BigInteger metadataMaskForService) {
-        return metadataMaskForServiceIndex.or(metadataMaskForLPortTag).or(metadataMaskForService);
-    }
-
-    public static BigInteger getMetaDataForLPortDispatcher(int lportTag, short serviceIndex,
-            BigInteger serviceMetaData) {
-        return getServiceIndexMetaData(serviceIndex).or(getLportTagMetaData(lportTag)).or(serviceMetaData);
-    }
-
-
-    public static BigInteger getVmLportTagMetaData(int vrfId) {
-        return BigInteger.valueOf(vrfId);
-    }
-
-    public static BigInteger getTunnelIdWithVni(int vni) {
-        return BigInteger.valueOf(vni).shiftLeft(8);
-    }
-
-    /**
-     * For the tunnel id with VNI and valid-vni-flag set, the most significant byte
-     * should have 08. So, shifting 08 to 7 bytes (56 bits) and the result is OR-ed with
-     * VNI being shifted to 1 byte.
-     */
-    public static BigInteger getTunnelIdWithValidVniBitAndVniSet(int vni) {
-        return BigInteger.valueOf(0X08).shiftLeft(56).or(BigInteger.valueOf(vni).shiftLeft(8));
-    }
 }
index 37d35863a0fce9cb33c3541b738906a2120ce23f..f800dbf06d2cf0a15085b5169b49752eb6df3088 100644 (file)
@@ -21,14 +21,7 @@ public class NwConstants {
     //Default Port
     public static final int UDP_DEFAULT_PORT = 4789;
 
-    // Table IDs
-    public static final short PRECHECK_TABLE          = 0;
-    public static final short PORT_VLAN_TABLE         = 0;
-
-    // Table Max Entries
-    public static final long INGRESS_TABLE_MAX_ENTRY  = 1000;
-    public static final long PRECHECK_TABLE_MAX_ENTRY = 100;
-
+    
     // Flow Actions
     public static final int ADD_FLOW = 0;
     public static final int DEL_FLOW = 1;
@@ -39,10 +32,4 @@ public class NwConstants {
     public static final int TABLE_MISS_FLOW = 0;
     public static final int TABLE_MISS_PRIORITY = 0;
 
-    // Misc FIXME: Find new place for this
-    public static final String DPN_STATE_CACHE = "dpn.state.cache";
-    public static final String DPN_SYNCSTATUS_CACHE = "dpn.resync.status.cache";
-    public static final String STATISTICS_LOCK_PREFIX ="scf.statistics.lock";
-    public static final String STATISTICS_LOCK_SEPARATOR =".";
-    public static final int STATISTICS_LOCK_RETRY_COUNT =1800;
-}
\ No newline at end of file
+ }
\ No newline at end of file
index 1ab2c54a0df41c678bdb2824576a5121a33d58e7..697946facb517f01bd88531f6901daa673655198 100644 (file)
@@ -1,18 +1,9 @@
 package org.opendaylight.vpnservice.mdsalutil.interfaces;
 
-//import java.math.BigInteger;
 import java.util.List;
-
 import org.opendaylight.vpnservice.mdsalutil.ActionInfo;
-//import org.opendaylight.vpnservice.mdsalutil.BucketInfo;
-//import org.opendaylight.vpnservice.mdsalutil.DpnState;
 import org.opendaylight.vpnservice.mdsalutil.FlowEntity;
 import org.opendaylight.vpnservice.mdsalutil.GroupEntity;
-//import org.opendaylight.vpnservice.mdsalutil.InstructionInfo;
-//import org.opendaylight.vpnservice.mdsalutil.MatchInfo;
-//import org.opendaylight.vpnservice.mdsalutil.SyncStatus;
-//import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.Table;
-//import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.GroupTypes;
 
 public interface IMdsalApiManager {
 
index 049d293fa35dc1de584ffd2061c521772324d19a..2101d2ad4d4d58648e75912a822585b01765691c 100644 (file)
             <artifactId>model-flow-service</artifactId>
             <version>0.1.0-SNAPSHOT</version>
         </dependency>
-        <!--<dependency>
-            <groupId>org.opendaylight.controller.model</groupId>
-            <artifactId>model-flow-management</artifactId>
-        </dependency>-->
-        <!-- Commenting due to missing constraint error
-        <dependency>
-            <groupId>org.opendaylight.controller.model</groupId>
-            <artifactId>model-inventory</artifactId>
-        </dependency>
-        -->
-        <!--<dependency>
-            <groupId>org.eclipse.xtend</groupId>
-            <artifactId>org.eclipse.xtend.lib</artifactId>
-            <version>${xtend.version}</version>
-        </dependency>-->
-        <!--<dependency>
-            <groupId>equinoxSDK381</groupId>
-            <artifactId>org.eclipse.osgi</artifactId>
-        </dependency>-->
-        <dependency>
+         <!--  TEST Dependencies -->
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+    </dependency>
+       <dependency>
+       <groupId>org.mockito</groupId>
+       <artifactId>mockito-all</artifactId>
+       <scope>test</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.powermock</groupId>
+        <artifactId>powermock-module-junit4</artifactId>
+        <version>1.5.2</version>
+        <scope>test</scope>
+    </dependency>
+    <dependency>
+        <groupId>org.powermock</groupId>
+        <artifactId>powermock-api-mockito</artifactId>
+        <version>1.5.2</version>
+        <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.opendaylight.controller</groupId>
+      <artifactId>sal-binding-broker-impl</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.opendaylight.controller</groupId>
+      <artifactId>sal-binding-broker-impl</artifactId>
+      <version>${mdsal.version}</version>
+      <scope>test</scope>
+      <type>test-jar</type>
+    </dependency>
+     <dependency>
             <groupId>commons-lang</groupId>
             <artifactId>commons-lang</artifactId>
         </dependency>
@@ -59,7 +74,7 @@
             <groupId>com.google.guava</groupId>
             <artifactId>guava</artifactId>
         </dependency>
-        <dependency>
+     <dependency>
       <groupId>${project.groupId}</groupId>
       <artifactId>mdsalutil-api</artifactId>
       <version>${project.version}</version>
                     <manifestLocation>${project.basedir}/META-INF</manifestLocation>
                 </configuration>
             </plugin>
-            <!--<plugin>
-                <groupId>org.eclipse.xtend</groupId>
-                <artifactId>xtend-maven-plugin</artifactId>
-                <version>${xtend.version}</version>
-                <executions>
-                    <execution>
-                        <goals>
-                            <goal>compile</goal>
-                        </goals>
-                        <configuration>
-                            <outputDirectory>${basedir}/src/main/xtend-gen</outputDirectory>
-                        </configuration>
-                    </execution>
-                </executions>
-            </plugin>-->
             <plugin>
                 <artifactId>maven-clean-plugin</artifactId>
                 <version>${maven.clean.plugin.version}</version>
                     </filesets>
                 </configuration>
             </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-surefire-plugin</artifactId>
+                <configuration>
+                    <argLine>-XX:-UseSplitVerifier</argLine>
+                </configuration>
+            </plugin>
+            
         </plugins>
     </build>
 </project>
index 00119d417cc3edd1fc8f89654cad9bed3203c760..20e74528831cc64eb1912d173d5e38f28f4a7be3 100644 (file)
@@ -11,38 +11,24 @@ package org.opendaylight.vpnservice.mdsalutil.internal;
 
 import java.math.BigInteger;
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
 import java.util.concurrent.atomic.AtomicInteger;
 
-import org.opendaylight.controller.md.sal.common.api.TransactionStatus;
-//import org.opendaylight.controller.md.sal.common.api.data.DataModification;
 import org.opendaylight.vpnservice.mdsalutil.ActionInfo;
 import org.opendaylight.vpnservice.mdsalutil.ActionType;
-import org.opendaylight.vpnservice.mdsalutil.BucketInfo;
 import org.opendaylight.vpnservice.mdsalutil.FlowEntity;
 import org.opendaylight.vpnservice.mdsalutil.GroupEntity;
-import org.opendaylight.vpnservice.mdsalutil.InstructionInfo;
 import org.opendaylight.vpnservice.mdsalutil.MDSALUtil;
-import org.opendaylight.vpnservice.mdsalutil.MatchInfo;
-import org.opendaylight.vpnservice.mdsalutil.MatchFieldType;
-import org.opendaylight.vpnservice.mdsalutil.MetaDataUtil;
-import org.opendaylight.vpnservice.mdsalutil.InstructionType;
 import org.opendaylight.vpnservice.mdsalutil.interfaces.IMdsalApiManager;
-import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ConsumerContext;
-import org.opendaylight.controller.sal.binding.api.BindingAwareConsumer;
-import org.opendaylight.controller.sal.binding.api.data.DataBrokerService;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Uri;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNode;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNodeConnector;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.Table;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.TableBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.TableKey;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.table.Flow;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.table.FlowBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.table.FlowKey;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.FlowTableRef;
-// Missing constraint
-//import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.transaction.rev131103.TransactionId;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.FlowRef;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.GroupId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.groups.Group;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.groups.GroupKey;
@@ -50,7 +36,6 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeCon
 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorRef;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes;
-//import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.OpendaylightInventoryService;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnector;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnectorKey;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node;
@@ -59,114 +44,126 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.N
 import org.opendaylight.yang.gen.v1.urn.opendaylight.packet.service.rev130709.PacketProcessingService;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier.InstanceIdentifierBuilder;
-import org.opendaylight.yangtools.yang.common.RpcResult;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-
 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
+import org.opendaylight.controller.md.sal.common.api.data.OptimisticLockFailedException;
 import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
-import org.opendaylight.controller.md.sal.binding.api.ReadWriteTransaction;
 import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
 
 import com.google.common.util.concurrent.CheckedFuture;
 import com.google.common.util.concurrent.FutureCallback;
 import com.google.common.util.concurrent.Futures;
-import com.google.common.util.concurrent.ListenableFuture;
 
-public class MDSALManager implements IMdsalApiManager,BindingAwareConsumer, AutoCloseable {
+public class MDSALManager implements AutoCloseable {
 
     private static final Logger s_logger = LoggerFactory.getLogger(MDSALManager.class);
 
     private DataBroker m_dataBroker;
 
-    private ConsumerContext m_consumerContext = null;
-       
     private PacketProcessingService m_packetProcessingService;
-      
+
     private final AtomicInteger m_atomicInteger = new AtomicInteger();
 
     //TODO : IF ID MANAGER IS RQD
-    
-    @Override
-    public void onSessionInitialized(ConsumerContext session) {
-       
-       s_logger.info( " Session Initiated for MD SAL Manager") ;
-       
-        m_consumerContext = session;
-        
-       m_dataBroker = session.getSALService(DataBroker.class);
-              
-        // TODO - Verify this.
-       m_packetProcessingService = session.getRpcService(PacketProcessingService.class);
-            
+
+    /**
+     * Writes the flows and Groups to the MD SAL DataStore
+     * which will be sent to the openflowplugin for installing flows/groups on the switch.
+     * Other modules of VPN service that wants to install flows / groups on the switch
+     * uses this utility
+     *
+     * @param db - dataBroker reference
+     * @param pktProcService- PacketProcessingService for sending the packet outs
+     */
+    public MDSALManager(final DataBroker db, PacketProcessingService pktProcService) {
+        m_dataBroker = db;
+        m_packetProcessingService = pktProcService;
+
     }
-    
-    
+
+
     @Override
     public void close() throws Exception {
-       s_logger.info("MDSAL Manager Closed");
+        s_logger.info("MDSAL Manager Closed");
     }
-    
-    @Override
+
+
     public void printTest() {
-       
-       s_logger.info(" INTER MODULECOMMUNICATION IS WORKING!!!!");
+
+        s_logger.info(" INTER MODULECOMMUNICATION IS WORKING!!!!");
     }
-    @Override
+
     public void installFlow(FlowEntity flowEntity) {
+
         try {
-            s_logger.info("within installFlowX {}", flowEntity.getDpnId());
-            System.out.println( " Insie installFlow -- ") ;
+            s_logger.info("within installFlow {}", flowEntity.getDpnId());
 
             if (flowEntity.getCookie() == null) {
-                s_logger.info("Helium_sync: Cookie is null");
+              //  s_logger.info("Helium_sync: Cookie is null");
                 flowEntity.setCookie(new BigInteger("0110000", 16));
             }
 
-            Flow flow = flowEntity.getFlowBuilder().build();
+            FlowKey flowKey = new FlowKey( new FlowId(flowEntity.getFlowId()) );
+
+            FlowBuilder flowbld = flowEntity.getFlowBuilder();
+
+            Flow flow = flowbld.build() ;
 
             Node nodeDpn = buildDpnNode(flowEntity.getDpnId());
             InstanceIdentifier<Node> nodeInstanceId = InstanceIdentifier.builder(Nodes.class)
                     .child(Node.class, nodeDpn.getKey()).build();
+
             InstanceIdentifier<Flow> flowInstanceId = InstanceIdentifier.builder(Nodes.class)
                     .child(Node.class, nodeDpn.getKey()).augmentation(FlowCapableNode.class)
-                    .child(Table.class, new TableKey(flow.getTableId())).child(Flow.class, flow.getKey()).build();
+                    .child(Table.class, new TableKey(flowEntity.getTableId())).child(Flow.class,flowKey).build();
 
             String sTransactionUri = generateTransactionUri();
-            // Helium Way
-                       
+
+            TableKey tableKey = new TableKey(flowEntity.getTableId() );
+            InstanceIdentifier<Table> tableInstanceId = InstanceIdentifier.create(Nodes.class).child(Node.class, nodeDpn.getKey())
+                    .augmentation(FlowCapableNode.class).child(Table.class, tableKey);
+            Table table = new TableBuilder().setKey(tableKey).setFlow(Collections.<Flow>emptyList()).build();
+
             WriteTransaction modification = m_dataBroker.newWriteOnlyTransaction();
-            
-            modification.put(LogicalDatastoreType.CONFIGURATION, nodeInstanceId, nodeDpn, true);
-            
-            modification.put(LogicalDatastoreType.CONFIGURATION, flowInstanceId, flow);
-            
-            ListenableFuture<RpcResult<TransactionStatus>> commitFuture = modification.commit();
-            
-            Futures.addCallback(commitFuture, new FutureCallback<RpcResult<TransactionStatus>>() {
+
+            //CHECK IF RQD
+           // modification.put(LogicalDatastoreType.CONFIGURATION, nodeInstanceId, nodeDpn, true);
+
+
+            modification.put(LogicalDatastoreType.CONFIGURATION, tableInstanceId, table);
+
+            modification.put(LogicalDatastoreType.CONFIGURATION, flowInstanceId, flowbld.build());
+
+            CheckedFuture<Void,TransactionCommitFailedException> submitFuture  = modification.submit();
+
+            Futures.addCallback(submitFuture, new FutureCallback<Void>() {
+
                 @Override
-                public void onSuccess(RpcResult<TransactionStatus> result) {
-                       if( result.getResult() != TransactionStatus.COMMITED ) {
-                               s_logger.debug("Failed to commit the Flow Data " + result.getErrors());
-                       
-                    }
-                
+                public void onSuccess(final Void result) {
+                    // Commited successfully
+                    s_logger.info( "Install Flow -- Committedsuccessfully ") ;
                 }
 
                 @Override
-                public void onFailure(Throwable throwable) {
-                       s_logger.error(throwable.getMessage(), throwable);
-                    s_logger.debug(String.format("Status of Flow Data Loaded Transaction : failure. Reason : %s", throwable));
-                    
+                public void onFailure(final Throwable t) {
+                    // Transaction failed
+
+                    if(t instanceof OptimisticLockFailedException) {
+                        // Failed because of concurrent transaction modifying same data
+                        s_logger.error( "Install Flow -- Failed because of concurrent transaction modifying same data ") ;
+                    } else {
+                       // Some other type of TransactionCommitFailedException
+                        s_logger.error( "Install Flow -- Some other type of TransactionCommitFailedException " + t) ;
+                    }
                 }
             });
         } catch (Exception e) {
             s_logger.error("Could not install flow: {}, exception: {}", flowEntity, e.getMessage());
         }
-
     }
-    @Override
+
     public void installGroup(GroupEntity groupEntity) {
         try {
             Group group = groupEntity.getGroupBuilder().build();
@@ -178,40 +175,40 @@ public class MDSALManager implements IMdsalApiManager,BindingAwareConsumer, Auto
                     .child(Node.class, nodeDpn.getKey()).augmentation(FlowCapableNode.class)
                     .child(Group.class, new GroupKey(new GroupId(groupEntity.getGroupId()))).build();
 
-                       
-         // Helium
             WriteTransaction modification = m_dataBroker.newWriteOnlyTransaction();
-            
-            modification.put(LogicalDatastoreType.CONFIGURATION, nodeInstanceId, nodeDpn);
+
+            //CHECK IF RQD
+         //   modification.put(LogicalDatastoreType.CONFIGURATION, nodeInstanceId, nodeDpn);
             modification.put(LogicalDatastoreType.CONFIGURATION, groupInstanceId, group);
-                              
-            ListenableFuture<RpcResult<TransactionStatus>> commitFuture = modification.commit();
-            
-            Futures.addCallback(commitFuture, new FutureCallback<RpcResult<TransactionStatus>>() {
+
+            CheckedFuture<Void,TransactionCommitFailedException> submitFuture  = modification.submit();
+
+            Futures.addCallback(submitFuture, new FutureCallback<Void>() {
                 @Override
-                public void onSuccess(RpcResult<TransactionStatus> result) {
-                       if( result.getResult() != TransactionStatus.COMMITED ) {
-                               s_logger.debug("Failed to commit the group Data " + result.getErrors());
-                       
-                    }
-                
+                public void onSuccess(final Void result) {
+                    // Commited successfully
+                    s_logger.info( "Install Group -- Committedsuccessfully ") ;
                 }
 
                 @Override
-                public void onFailure(Throwable throwable) {
-                       s_logger.error(throwable.getMessage(), throwable);
-                    s_logger.debug(String.format("Status of Group Data Loaded Transaction : failure. Reason : %s", throwable));
-                    
+                public void onFailure(final Throwable t) {
+                    // Transaction failed
+
+                    if(t instanceof OptimisticLockFailedException) {
+                        // Failed because of concurrent transaction modifying same data
+                        s_logger.error( "Install Group -- Failed because of concurrent transaction modifying same data ") ;
+                    } else {
+                       // Some other type of TransactionCommitFailedException
+                        s_logger.error( "Install Group -- Some other type of TransactionCommitFailedException " + t) ;
+                    }
                 }
-            });
-                        
-        } catch (Exception e) {
+             });
+           } catch (Exception e) {
             s_logger.error("Could not install Group: {}, exception: {}", groupEntity, e.getMessage());
             throw e;
         }
     }
 
-    @Override
     public void removeFlow(FlowEntity flowEntity) {
         try {
             Node nodeDpn = buildDpnNode(flowEntity.getDpnId());
@@ -224,31 +221,33 @@ public class MDSALManager implements IMdsalApiManager,BindingAwareConsumer, Auto
                 WriteTransaction modification = m_dataBroker.newWriteOnlyTransaction();
                 modification.delete(LogicalDatastoreType.CONFIGURATION,flowInstanceId );
 
-                ListenableFuture<RpcResult<TransactionStatus>> commitFuture = modification.commit();
-                
-                Futures.addCallback(commitFuture, new FutureCallback<RpcResult<TransactionStatus>>() {
+                CheckedFuture<Void,TransactionCommitFailedException> submitFuture  = modification.submit();
+
+                Futures.addCallback(submitFuture, new FutureCallback<Void>() {
                     @Override
-                    public void onSuccess(RpcResult<TransactionStatus> result) {
-                       if( result.getResult() != TransactionStatus.COMMITED ) {
-                               s_logger.debug("Failed to remove the Flow Data " + result.getErrors());
-                               
-                        }
-                    
+                    public void onSuccess(final Void result) {
+                        // Commited successfully
+                        s_logger.info( "Delete Flow -- Committedsuccessfully ") ;
                     }
 
                     @Override
-                    public void onFailure(Throwable throwable) {
-                       s_logger.error(throwable.getMessage(), throwable);
-                        s_logger.debug(String.format("Status of Flow Data remove Transaction : failure. Reason : %s", throwable));
-                        
+                    public void onFailure(final Throwable t) {
+                        // Transaction failed
+                        if(t instanceof OptimisticLockFailedException) {
+                            // Failed because of concurrent transaction modifying same data
+                            s_logger.error( "Delete Flow -- Failed because of concurrent transaction modifying same data ") ;
+                        } else {
+                           // Some other type of TransactionCommitFailedException
+                            s_logger.error( "Delete Flow -- Some other type of TransactionCommitFailedException " + t) ;
+                        }
                     }
+
                 });
         } catch (Exception e) {
             s_logger.error("Could not remove Flow: {}, exception: {}", flowEntity, e.getMessage());
         }
     }
 
-    @Override
     public void removeGroup(GroupEntity groupEntity) {
         try {
             Node nodeDpn = buildDpnNode(groupEntity.getDpnId());
@@ -256,39 +255,36 @@ public class MDSALManager implements IMdsalApiManager,BindingAwareConsumer, Auto
                     .child(Node.class, nodeDpn.getKey()).augmentation(FlowCapableNode.class)
                     .child(Group.class, new GroupKey(new GroupId(groupEntity.getGroupId()))).build();
 
-
             WriteTransaction modification = m_dataBroker.newWriteOnlyTransaction();
-            
+
             modification.delete(LogicalDatastoreType.CONFIGURATION,groupInstanceId );
 
-            ListenableFuture<RpcResult<TransactionStatus>> commitFuture = modification.commit();
-            
-            Futures.addCallback(commitFuture, new FutureCallback<RpcResult<TransactionStatus>>() {
+            CheckedFuture<Void,TransactionCommitFailedException> submitFuture  = modification.submit();
+
+            Futures.addCallback(submitFuture, new FutureCallback<Void>() {
                 @Override
-                public void onSuccess(RpcResult<TransactionStatus> result) {
-                       if( result.getResult() != TransactionStatus.COMMITED ) {
-                               s_logger.debug("Failed to remove the group Data " + result.getErrors());
-                       
-                    }
-                
+                public void onSuccess(final Void result) {
+                    // Commited successfully
+                    s_logger.info( "Install Group -- Committedsuccessfully ") ;
                 }
 
                 @Override
-                public void onFailure(Throwable throwable) {
-                       s_logger.error(throwable.getMessage(), throwable);
-                    s_logger.debug(String.format("Status of group Data remove Transaction : failure. Reason : %s", throwable));
-                    
+                public void onFailure(final Throwable t) {
+                    // Transaction failed
+                    if(t instanceof OptimisticLockFailedException) {
+                        // Failed because of concurrent transaction modifying same data
+                        s_logger.error( "Install Group -- Failed because of concurrent transaction modifying same data ") ;
+                    } else {
+                       // Some other type of TransactionCommitFailedException
+                        s_logger.error( "Install Group -- Some other type of TransactionCommitFailedException " + t) ;
+                    }
                 }
             });
-
-                
-
         } catch (Exception e) {
             s_logger.error("Could not remove Group: {}, exception: {}", groupEntity, e.getMessage());
         }
     }
 
-    @Override
     public void modifyGroup(GroupEntity groupEntity) {
 
         installGroup(groupEntity);
@@ -308,8 +304,7 @@ public class MDSALManager implements IMdsalApiManager,BindingAwareConsumer, Auto
                 + Long.toString(nTransactionId);
     }
 */
-    
-    @Override
+
     public void sendPacketOut(long lDpnId, int groupId, byte[] payload) {
 
         List<ActionInfo> actionInfos = new ArrayList<ActionInfo>();
@@ -318,16 +313,13 @@ public class MDSALManager implements IMdsalApiManager,BindingAwareConsumer, Auto
         sendPacketOutWithActions(lDpnId, groupId, payload, actionInfos);
     }
 
-    @Override
     public void sendPacketOutWithActions(long lDpnId, long groupId, byte[] payload, List<ActionInfo> actionInfos) {
 
         m_packetProcessingService.transmitPacket(MDSALUtil.getPacketOut(actionInfos, payload, lDpnId,
                 getNodeConnRef("openflow:" + lDpnId, "0xfffffffd")));
     }
 
-    @Override
     public void sendARPPacketOutWithActions(long lDpnId, byte[] payload, List<ActionInfo> actions) {
-
         m_packetProcessingService.transmitPacket(MDSALUtil.getPacketOut(actions, payload, lDpnId,
                 getNodeConnRef("openflow:" + lDpnId, "0xfffffffd")));
     }
@@ -372,4 +364,5 @@ public class MDSALManager implements IMdsalApiManager,BindingAwareConsumer, Auto
 
         return nodeDpn;
     }
+
 }
diff --git a/mdsalutil/mdsalutil-impl/src/main/java/org/opendaylight/vpnservice/mdsalutil/internal/MDSALUtilProvider.java b/mdsalutil/mdsalutil-impl/src/main/java/org/opendaylight/vpnservice/mdsalutil/internal/MDSALUtilProvider.java
new file mode 100644 (file)
index 0000000..6246d9c
--- /dev/null
@@ -0,0 +1,100 @@
+package org.opendaylight.vpnservice.mdsalutil.internal;
+
+import java.util.List;
+
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.opendaylight.controller.sal.binding.api.BindingAwareConsumer;
+import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ConsumerContext;
+import org.opendaylight.vpnservice.mdsalutil.ActionInfo;
+import org.opendaylight.vpnservice.mdsalutil.FlowEntity;
+import org.opendaylight.vpnservice.mdsalutil.GroupEntity;
+import org.opendaylight.vpnservice.mdsalutil.interfaces.IMdsalApiManager;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.packet.service.rev130709.PacketProcessingService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class MDSALUtilProvider implements BindingAwareConsumer, IMdsalApiManager, AutoCloseable {
+
+    private static final Logger s_logger = LoggerFactory.getLogger(MDSALUtilProvider.class);
+    private MDSALManager mdSalMgr;
+
+    @Override
+    public void onSessionInitialized(ConsumerContext session) {
+
+        s_logger.info( " Session Initiated for MD SAL Util Provider") ;
+
+        try {
+            final DataBroker dataBroker;
+            final PacketProcessingService packetProcessingService;
+            dataBroker = session.getSALService(DataBroker.class);
+             // TODO - Verify this.
+             packetProcessingService = session.getRpcService(PacketProcessingService.class);
+             mdSalMgr = new MDSALManager( dataBroker, packetProcessingService) ;
+        }catch( Exception e) {
+            s_logger.error( "Error initializing MD SAL Util Services " + e );
+        }
+    }
+
+
+    @Override
+    public void close() throws Exception {
+        mdSalMgr.close();
+        s_logger.info("MDSAL Manager Closed");
+    }
+
+
+    @Override
+    public void installFlow(FlowEntity flowEntity) {
+          mdSalMgr.installFlow(flowEntity);
+    }
+
+    @Override
+    public void removeFlow(FlowEntity flowEntity) {
+        mdSalMgr.removeFlow(flowEntity);
+    }
+
+    @Override
+    public void installGroup(GroupEntity groupEntity) {
+        mdSalMgr.installGroup(groupEntity);
+    }
+
+
+    @Override
+    public void modifyGroup(GroupEntity groupEntity) {
+        mdSalMgr.modifyGroup(groupEntity);
+    }
+
+
+    @Override
+    public void removeGroup(GroupEntity groupEntity) {
+        mdSalMgr.removeGroup(groupEntity);
+    }
+
+
+    @Override
+    public void sendPacketOut(long lDpnId, int groupId, byte[] payload) {
+        mdSalMgr.sendPacketOut(lDpnId, groupId, payload);
+    }
+
+
+    @Override
+    public void sendPacketOutWithActions(long lDpnId, long groupId,
+            byte[] payload, List<ActionInfo> actionInfos) {
+        mdSalMgr.sendPacketOutWithActions(lDpnId, groupId, payload, actionInfos);
+    }
+
+
+    @Override
+    public void sendARPPacketOutWithActions(long dpid, byte[] payload,
+            List<ActionInfo> action_info) {
+        mdSalMgr.sendARPPacketOutWithActions(dpid, payload, action_info);
+    }
+
+
+    @Override
+    public void printTest() {
+        // TODO Auto-generated method stub
+        mdSalMgr.printTest();
+    }
+
+}
index ab2776d75fd8ab197250a5197ede492e81234a13..473d96254413bc7305eaaf3a4ec2122ecefd7a13 100644 (file)
@@ -1,6 +1,6 @@
 package org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.mdsalutil.impl.rev150403;
 
-import org.opendaylight.vpnservice.mdsalutil.internal.MDSALManager;
+import org.opendaylight.vpnservice.mdsalutil.internal.MDSALUtilProvider;
 
 public class MdsaluttilimplModule extends org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.mdsalutil.impl.rev150403.AbstractMdsaluttilimplModule {
     public MdsaluttilimplModule(org.opendaylight.controller.config.api.ModuleIdentifier identifier, org.opendaylight.controller.config.api.DependencyResolver dependencyResolver) {
@@ -21,11 +21,11 @@ public class MdsaluttilimplModule extends org.opendaylight.yang.gen.v1.urn.opend
        // TODO:implement
 //      Can use the following to get a handle to data broker
        
-        MDSALManager mdsalUtilMgr = new MDSALManager();
-        getBrokerDependency().registerConsumer(mdsalUtilMgr);
+       MDSALUtilProvider mdsalUtilProvider = new MDSALUtilProvider();
+        getBrokerDependency().registerConsumer(mdsalUtilProvider);
        //DataBroker dataBrokerService = getDataBrokerDependency();
        //mdsalUtilMgr.setDataProvider(dataBrokerService);
-        return mdsalUtilMgr ;
+        return mdsalUtilProvider ;
       }
 
 }
diff --git a/mdsalutil/mdsalutil-impl/src/test/java/org/opendaylight/vpnservice/test/AbstractMockForwardingRulesManager.java b/mdsalutil/mdsalutil-impl/src/test/java/org/opendaylight/vpnservice/test/AbstractMockForwardingRulesManager.java
new file mode 100644 (file)
index 0000000..1bffa91
--- /dev/null
@@ -0,0 +1,25 @@
+package org.opendaylight.vpnservice.test;
+
+import java.util.Collection;
+
+import org.opendaylight.controller.md.sal.binding.api.DataObjectModification;
+import org.opendaylight.controller.md.sal.binding.api.DataTreeChangeListener;
+import org.opendaylight.controller.md.sal.binding.api.DataTreeModification;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNode;
+import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+
+import com.google.common.base.Preconditions;
+
+public abstract class AbstractMockForwardingRulesManager<D extends DataObject> implements DataTreeChangeListener<D> {
+
+    public AbstractMockForwardingRulesManager() {
+        // Do Nothing
+    }
+
+
+    public void onDataTreeChanged(Collection<DataTreeModification<D>> changes) {
+        // TODO Auto-generated method stub
+    }
+
+}
diff --git a/mdsalutil/mdsalutil-impl/src/test/java/org/opendaylight/vpnservice/test/MdSalUtilTest.java b/mdsalutil/mdsalutil-impl/src/test/java/org/opendaylight/vpnservice/test/MdSalUtilTest.java
new file mode 100644 (file)
index 0000000..8c804b8
--- /dev/null
@@ -0,0 +1,230 @@
+package org.opendaylight.vpnservice.test;
+
+import java.math.BigInteger;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Collections;
+import java.util.concurrent.ExecutionException;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+
+import org.mockito.runners.MockitoJUnitRunner;
+import org.powermock.api.mockito.PowerMockito;
+import org.powermock.core.classloader.annotations.PrepareForTest;
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
+import org.opendaylight.controller.md.sal.binding.test.AbstractDataBrokerTest;
+import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
+import org.opendaylight.vpnservice.mdsalutil.ActionInfo;
+import org.opendaylight.vpnservice.mdsalutil.ActionType;
+import org.opendaylight.vpnservice.mdsalutil.FlowEntity;
+import org.opendaylight.vpnservice.mdsalutil.GroupEntity;
+import org.opendaylight.vpnservice.mdsalutil.BucketInfo;
+import org.opendaylight.vpnservice.mdsalutil.InstructionInfo;
+import org.opendaylight.vpnservice.mdsalutil.InstructionType;
+import org.opendaylight.vpnservice.mdsalutil.MDSALUtil;
+import org.opendaylight.vpnservice.mdsalutil.MatchFieldType;
+import org.opendaylight.vpnservice.mdsalutil.MatchInfo;
+import org.opendaylight.vpnservice.mdsalutil.internal.MDSALManager;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNode;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNodeBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Instructions;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.InstructionsBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Match;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.MatchBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.list.Instruction;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.GroupTypes;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodesBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeKey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.packet.service.rev130709.PacketProcessingService;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+
+import static org.junit.Assert.assertEquals;
+
+@RunWith(MockitoJUnitRunner.class)
+//@RunWith(PowerMockRunner.class)
+@PrepareForTest(MDSALUtil.class)
+public class MdSalUtilTest extends AbstractDataBrokerTest {
+     DataBroker dataBroker;
+     @Mock PacketProcessingService ppS ;
+     MDSALManager mdSalMgr = null ;
+     MockFlowForwarder flowFwder = null ;
+     MockGroupForwarder grpFwder = null ;
+
+     @Before
+        public void setUp() throws Exception {
+            dataBroker = getDataBroker() ;
+            mdSalMgr = new MDSALManager( dataBroker, ppS);
+            flowFwder = new MockFlowForwarder( dataBroker );
+            grpFwder = new MockGroupForwarder( dataBroker ) ;
+
+            PowerMockito.mockStatic(MDSALUtil.class) ;
+
+            NodeKey s1Key = new NodeKey(new NodeId("openflow:1"));
+            addFlowCapableNode(s1Key);
+        }
+
+        @Test
+        public void testInstallFlow() {
+            String dpnId = "openflow:1";
+            String tableId1 = "12";
+
+            //Install Flow 1
+            FlowEntity testFlow1 = createFlowEntity(dpnId, tableId1) ;
+            mdSalMgr.installFlow(testFlow1);
+            assertEquals(1, flowFwder.getDataChgCount());
+
+            // Install FLow 2
+            String tableId2 = "13" ;
+             FlowEntity testFlow2 = createFlowEntity(dpnId, tableId2) ;
+             mdSalMgr.installFlow(testFlow2);
+             assertEquals(2, flowFwder.getDataChgCount());
+        }
+
+        @Test
+        public void testRemoveFlow() {
+            String dpnId = "openflow:1";
+            String tableId = "13" ;
+            FlowEntity testFlow = createFlowEntity(dpnId, tableId) ;
+
+            // To test RemoveFlow add and then delete Flows
+            mdSalMgr.installFlow(testFlow) ;
+            assertEquals(1, flowFwder.getDataChgCount());
+            mdSalMgr.removeFlow(testFlow);
+            assertEquals(0, flowFwder.getDataChgCount());
+        }
+
+        @Test
+        public void testInstallGroup() {
+            // Install Group 1
+            String Nodeid = "1";
+            String inport = "2" ;
+            int vlanid = 100 ;
+            GroupEntity grpEntity1 = createGroupEntity(Nodeid, inport, vlanid) ;
+
+             mdSalMgr.installGroup(grpEntity1);
+             assertEquals(1, grpFwder.getDataChgCount());
+
+             // Install Group 2
+               Nodeid = "1";
+                inport = "3" ;
+                vlanid = 100 ;
+                GroupEntity grpEntity2 = createGroupEntity(Nodeid, inport, vlanid) ;
+                mdSalMgr.installGroup(grpEntity2);
+                assertEquals(2, grpFwder.getDataChgCount());
+        }
+
+        @Test
+        public void testRemoveGroup() {
+            String Nodeid = "1";
+            String inport = "2" ;
+            int vlanid = 100 ;
+            GroupEntity grpEntity = createGroupEntity(Nodeid, inport, vlanid) ;
+            // To test RemoveGroup  add and then delete Group
+            mdSalMgr.installGroup(grpEntity);
+            assertEquals(1, grpFwder.getDataChgCount());
+            mdSalMgr.removeGroup(grpEntity);
+            assertEquals(0, grpFwder.getDataChgCount());
+        }
+
+        public void addFlowCapableNode(NodeKey nodeKey) throws ExecutionException, InterruptedException {
+            Nodes nodes = new NodesBuilder().setNode(Collections.<Node>emptyList()).build();
+            InstanceIdentifier<Node> flowNodeIdentifier = InstanceIdentifier.create(Nodes.class)
+                    .child(Node.class, nodeKey);
+
+            FlowCapableNodeBuilder fcnBuilder = new FlowCapableNodeBuilder();
+            NodeBuilder nodeBuilder = new NodeBuilder();
+            nodeBuilder.setKey(nodeKey);
+            nodeBuilder.addAugmentation(FlowCapableNode.class, fcnBuilder.build());
+
+            WriteTransaction writeTx = getDataBroker().newWriteOnlyTransaction();
+            writeTx.put(LogicalDatastoreType.OPERATIONAL, InstanceIdentifier.create(Nodes.class), nodes);
+            writeTx.put(LogicalDatastoreType.OPERATIONAL, flowNodeIdentifier, nodeBuilder.build());
+            writeTx.put(LogicalDatastoreType.CONFIGURATION, InstanceIdentifier.create(Nodes.class), nodes);
+            writeTx.put(LogicalDatastoreType.CONFIGURATION, flowNodeIdentifier, nodeBuilder.build());
+            assertCommit(writeTx.submit());
+        }
+
+         // Methods to test the install Flow and Group
+
+        public FlowEntity createFlowEntity(String dpnId, String tableId) {
+
+            long dpId;
+            int SERVICE_ID = 0;
+            FlowEntity terminatingServiceTableFlowEntity = null;
+
+            List<ActionInfo> listActionInfo = new ArrayList<ActionInfo>();
+            listActionInfo.add(new ActionInfo(ActionType.punt_to_controller,
+                    new String[] {}));
+
+            try {
+                dpId = Long.parseLong(dpnId.split(":")[1]);
+
+                List<MatchInfo> mkMatches = new ArrayList<MatchInfo>();
+                BigInteger COOKIE = new BigInteger("9000000", 16);
+
+                short s_tableId = Short.parseShort(tableId) ;
+
+                mkMatches.add(new MatchInfo(MatchFieldType.tunnel_id, new BigInteger[] {
+                        new BigInteger("0000000000000000", 16) }));
+
+                List<InstructionInfo> mkInstructions = new ArrayList<InstructionInfo>();
+                mkInstructions.add(new InstructionInfo(InstructionType.write_actions,
+                        listActionInfo));
+
+                terminatingServiceTableFlowEntity = MDSALUtil
+                        .buildFlowEntity(
+                                dpId,
+                                s_tableId,
+                                getFlowRef(s_tableId,
+                                        SERVICE_ID), 5, "Terminating Service Flow Entry: " + SERVICE_ID,
+                                0, 0, COOKIE
+                                        .add(BigInteger.valueOf(SERVICE_ID)),
+                                        null, null);
+                } catch (Exception e) {
+                    //throw new Exception(e) ;
+              }
+
+            return terminatingServiceTableFlowEntity;
+        }
+
+        private String getFlowRef(short termSvcTable, int svcId) {
+            return new StringBuffer().append(termSvcTable).append(svcId).toString();
+        }
+
+        public GroupEntity createGroupEntity(String Nodeid, String inport, int vlanid) {
+            GroupEntity groupEntity;
+            long id = getUniqueValue(Nodeid, inport);
+            List<BucketInfo> listBucketInfo = new ArrayList<BucketInfo>();
+            List<ActionInfo> listActionInfo = new ArrayList<ActionInfo>();
+            if (vlanid > 0) {
+                listActionInfo.add(new ActionInfo(ActionType.push_vlan, new String[] { null }));
+                listActionInfo.add(new ActionInfo(ActionType.set_field_vlan_vid, new String[] { String.valueOf(vlanid) }));
+            }
+            listActionInfo.add(new ActionInfo(ActionType.output, new String[] { inport, "65535" }));
+            listBucketInfo.add(new BucketInfo(listActionInfo));
+
+            String groupName = "Test Group";
+            groupEntity = MDSALUtil.buildGroupEntity(Long.valueOf(Nodeid), id, groupName, GroupTypes.GroupIndirect,
+                    listBucketInfo);
+
+            return groupEntity;
+        }
+
+        private static long getUniqueValue(String nodeId, String inport) {
+
+            Long nodeIdL = Long.valueOf(nodeId);
+            Long inportL = Long.valueOf(inport);
+                long sd_set;
+                sd_set = nodeIdL * 10 + inportL;
+
+                return sd_set;
+    }
+
+}
diff --git a/mdsalutil/mdsalutil-impl/src/test/java/org/opendaylight/vpnservice/test/MockFlowForwarder.java b/mdsalutil/mdsalutil-impl/src/test/java/org/opendaylight/vpnservice/test/MockFlowForwarder.java
new file mode 100644 (file)
index 0000000..56ba800
--- /dev/null
@@ -0,0 +1,72 @@
+package org.opendaylight.vpnservice.test;
+
+import java.util.Collection;
+
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.opendaylight.controller.md.sal.binding.api.DataObjectModification;
+import org.opendaylight.controller.md.sal.binding.api.DataTreeIdentifier;
+import org.opendaylight.controller.md.sal.binding.api.DataTreeModification;
+import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNode;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.Table;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.table.Flow;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node;
+import org.opendaylight.yangtools.concepts.ListenerRegistration;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+
+public class MockFlowForwarder extends AbstractMockForwardingRulesManager<Flow> {
+
+    private int nFlowCount = 0;
+
+    private ListenerRegistration<MockFlowForwarder> listenerRegistration;
+
+    public MockFlowForwarder( final DataBroker db) {
+        super() ;
+        registerListener(db) ;
+    }
+
+    private void registerListener(final DataBroker db) {
+        final DataTreeIdentifier<Flow> treeId = new DataTreeIdentifier<>(LogicalDatastoreType.CONFIGURATION, getWildCardPath());
+        try {
+            listenerRegistration = db.registerDataTreeChangeListener(treeId, MockFlowForwarder.this);
+        } catch (final Exception e) {
+            throw new IllegalStateException("FlowForwarder registration Listener fail! System needs restart.", e);
+        }
+    }
+
+    private InstanceIdentifier<Flow> getWildCardPath() {
+            return InstanceIdentifier.create(Nodes.class).child(Node.class)
+                    .augmentation(FlowCapableNode.class).child(Table.class).child(Flow.class);
+     }
+
+    @Override
+    public void onDataTreeChanged(Collection<DataTreeModification<Flow>> changes) {
+        for (DataTreeModification<Flow> change : changes) {
+            final InstanceIdentifier<Flow> key = change.getRootPath().getRootIdentifier();
+            final DataObjectModification<Flow> mod = change.getRootNode();
+
+                switch (mod.getModificationType()) {
+                case DELETE:
+                    nFlowCount -= 1;
+                    break;
+                case SUBTREE_MODIFIED:
+                    // CHECK IF RQD
+                    break;
+                case WRITE:
+                    if (mod.getDataBefore() == null) {
+                        nFlowCount += 1;
+                    } else {
+                        // UPDATE COUNT UNCHANGED
+                    }
+                    break;
+                default:
+                    throw new IllegalArgumentException("Unhandled modification type " + mod.getModificationType());
+                }
+            }
+     }
+
+    public int getDataChgCount() {
+        return nFlowCount;
+    }
+}
diff --git a/mdsalutil/mdsalutil-impl/src/test/java/org/opendaylight/vpnservice/test/MockGroupForwarder.java b/mdsalutil/mdsalutil-impl/src/test/java/org/opendaylight/vpnservice/test/MockGroupForwarder.java
new file mode 100644 (file)
index 0000000..b47deee
--- /dev/null
@@ -0,0 +1,69 @@
+package org.opendaylight.vpnservice.test;
+
+import java.util.Collection;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNode;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.groups.Group;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes;
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.opendaylight.controller.md.sal.binding.api.DataObjectModification;
+import org.opendaylight.controller.md.sal.binding.api.DataTreeIdentifier;
+import org.opendaylight.controller.md.sal.binding.api.DataTreeModification;
+import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
+import org.opendaylight.yangtools.concepts.ListenerRegistration;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node;
+
+public class MockGroupForwarder extends AbstractMockForwardingRulesManager<Group>{
+
+    private int nGroupCount = 0;
+    private ListenerRegistration<MockGroupForwarder> listenerRegistration ;
+
+    public MockGroupForwarder( final DataBroker db) {
+        super() ;
+        registerListener(db) ;
+    }
+
+    private void registerListener(final DataBroker db) {
+       final DataTreeIdentifier<Group> treeId = new DataTreeIdentifier<>(LogicalDatastoreType.CONFIGURATION, getWildCardPath());
+       try {
+           listenerRegistration = db.registerDataTreeChangeListener(treeId, MockGroupForwarder.this);
+       } catch (final Exception e) {
+           throw new IllegalStateException("GroupForwarder registration Listener fail! System needs restart.", e);
+       }
+    }
+
+    private InstanceIdentifier<Group> getWildCardPath() {
+        return InstanceIdentifier.create(Nodes.class).child(Node.class).
+                augmentation(FlowCapableNode.class).child(Group.class);
+    }
+
+    @Override
+    public void onDataTreeChanged(Collection<DataTreeModification<Group>> changes) {
+        for (DataTreeModification<Group> change : changes) {
+            final InstanceIdentifier<Group> key = change.getRootPath().getRootIdentifier();
+            final DataObjectModification<Group> mod = change.getRootNode();
+
+                switch (mod.getModificationType()) {
+                case DELETE:
+                    nGroupCount -= 1;
+                    break;
+                case SUBTREE_MODIFIED:
+                    // CHECK IF RQD
+                    break;
+                case WRITE:
+                    if (mod.getDataBefore() == null) {
+                        nGroupCount += 1;
+                    } else {
+                        // UPDATE COUNT UNCHANGED
+                    }
+                    break;
+                default:
+                    throw new IllegalArgumentException("Unhandled modification type " + mod.getModificationType());
+                }
+            }
+     }
+
+    public int getDataChgCount() {
+        return nGroupCount;
+    }
+}
index 0e362dc937b5319504cccb998af7c126fc0de84c..3d52a99d2fb159371cbdf9bf8bd8bf80bf0ff486 100644 (file)
@@ -11,7 +11,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html INTERNAL
     <groupId>org.opendaylight.odlparent</groupId>
     <artifactId>odlparent</artifactId>
     <version>1.5.0-SNAPSHOT</version>
-       <relativePath/>
+    <relativePath/>
   </parent>
 
   <groupId>org.opendaylight.vpnservice</groupId>
index 46ed199ce071466e7c7d2a86b31a048bc8328e81..1a205a397b91dd00fd6834d13069f2fa5033837a 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!-- vi: set et smarttab sw=4 tabstop=4: -->
 <!--
- Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
+ Copyright (c) 2015 Ericsson India Global Services Pvt Ltd. 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,
@@ -9,28 +9,21 @@
 -->
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 
-    <parent>
-        <groupId>org.opendaylight.yangtools</groupId>
-        <artifactId>binding-parent</artifactId>
-        <version>0.7.0-SNAPSHOT</version>
-        <relativePath/>
-    </parent>
+  <parent>
+    <groupId>org.opendaylight.vpnservice</groupId>
+    <artifactId>binding-parent</artifactId>
+    <version>0.0.1-SNAPSHOT</version>
+    <relativePath>../commons/binding-parent</relativePath>
+  </parent>
 
     <modelVersion>4.0.0</modelVersion>
     <groupId>org.opendaylight.vpnservice</groupId>
     <artifactId>model-bgp</artifactId>
-    <version>2013.07.15.7-SNAPSHOT</version>
+    <version>${model.bgp.version}</version>
     <name>${project.artifactId}</name>
     <description>${project.artifactId}</description>
     <packaging>bundle</packaging>
 
-    <properties>
-        <!-- ODL -->
-        <ietf.inet.types.version>2010.09.24.7-SNAPSHOT</ietf.inet.types.version>
-        <ietf.yang.types.version>2010.09.24.7-SNAPSHOT</ietf.yang.types.version>
-        <yangtools.version>0.7.0-SNAPSHOT</yangtools.version>
-    </properties>
-
     <dependencies>
         <dependency>
             <groupId>org.opendaylight.yangtools</groupId>
             <artifactId>ietf-yang-types</artifactId>
             <version>${ietf.yang.types.version}</version>
         </dependency>
-        <dependency>
-            <groupId>junit</groupId>
-            <artifactId>junit</artifactId>
-            <scope>test</scope>
-        </dependency>
     </dependencies>
 </project>
index f4022970f3aecaaf4fc1ed45619936f38aa74c78..24e58e6b5e965a21594f7ac339859cddb6a99087 100644 (file)
@@ -8,27 +8,18 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
 -->
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <parent>
-    <groupId>org.opendaylight.yangtools</groupId>
+    <groupId>org.opendaylight.vpnservice</groupId>
     <artifactId>binding-parent</artifactId>
-    <version>0.7.0-SNAPSHOT</version>
-    <relativePath/>
+    <version>0.0.1-SNAPSHOT</version>
+    <relativePath>../../commons/binding-parent</relativePath>
   </parent>
 
   <modelVersion>4.0.0</modelVersion>
   <groupId>org.opendaylight.vpnservice</groupId>
   <artifactId>nexthopmgr-api</artifactId>
-  <version>0.0.1-SNAPSHOT</version>
+  <version>${vpnservices.version}</version>
   <packaging>bundle</packaging>
 
-  <properties>
-    <!-- ODL -->
-    <ietf.inet.types.version>2010.09.24.7-SNAPSHOT</ietf.inet.types.version>
-    <ietf.yang.types.version>2010.09.24.7-SNAPSHOT</ietf.yang.types.version>
-    <yang.ext.version>2013.09.07.7-SNAPSHOT</yang.ext.version>
-    <yangtools.version>0.7.0-SNAPSHOT</yangtools.version>
-    <mdsal.version>1.2.0-SNAPSHOT</mdsal.version>
-  </properties>
-
   <dependencies>
     <dependency>
       <groupId>org.opendaylight.yangtools</groupId>
@@ -58,12 +49,12 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
     <dependency>
       <groupId>org.opendaylight.yangtools.model</groupId>
       <artifactId>ietf-interfaces</artifactId>
-      <version>2014.05.08.7-SNAPSHOT</version>
+      <version>${ietf.interfaces.version}</version>
     </dependency>
     <dependency>
       <groupId>org.opendaylight.yangtools.model</groupId>
       <artifactId>iana-if-type-2014-05-08</artifactId>
-      <version>2014.05.08.7-SNAPSHOT</version>
+      <version>${iana.if.type.version}</version>
     </dependency>
     <dependency>
       <groupId>org.opendaylight.controller.model</groupId>
index a6f04dd24895268fea1cb83ddf2b154ba86f0654..601bc90f4a7aedc0149c9d234a85689e07ecc4c2 100644 (file)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!-- vi: set et smarttab sw=4 tabstop=4: --><!--
-Copyright (c) 2014 Cisco Systems, Inc. and others.  All rights reserved.
+Copyright (c) 2015 Ericsson India Global Services Pvt Ltd. 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,
@@ -9,22 +9,22 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 
   <parent>
-    <groupId>org.opendaylight.controller</groupId>
+    <groupId>org.opendaylight.vpnservice</groupId>
     <artifactId>config-parent</artifactId>
-    <version>0.3.0-SNAPSHOT</version>
-    <relativePath/>
+    <version>0.0.1-SNAPSHOT</version>
+    <relativePath>../../commons/config-parent</relativePath>
   </parent>
 
   <modelVersion>4.0.0</modelVersion>
   <groupId>org.opendaylight.vpnservice</groupId>
   <artifactId>nexthopmgr-impl</artifactId>
-  <version>0.0.1-SNAPSHOT</version>
+  <version>${vpnservices.version}</version>
   <packaging>bundle</packaging>
   <dependencies>
     <dependency>
       <groupId>${project.groupId}</groupId>
       <artifactId>vpnmanager-api</artifactId>
-      <version>0.0.1-SNAPSHOT</version>
+      <version>${vpnservices.version}</version>
     </dependency>
     <dependency>
       <groupId>${project.groupId}</groupId>
@@ -34,12 +34,12 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
     <dependency>
       <groupId>org.opendaylight.vpnservice</groupId>
       <artifactId>idmanager-api</artifactId>
-      <version>0.0.1-SNAPSHOT</version>
+      <version>${vpnservices.version}</version>
     </dependency>
     <dependency>
       <groupId>org.opendaylight.vpnservice</groupId>
       <artifactId>idmanager-impl</artifactId>
-      <version>0.0.1-SNAPSHOT</version>
+      <version>${vpnservices.version}</version>
     </dependency>
     <dependency>
       <groupId>${project.groupId}</groupId>
@@ -52,33 +52,6 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
       <version>${project.version}</version>
     </dependency>
 
-    <!-- Testing Dependencies -->
-    <dependency>
-      <groupId>junit</groupId>
-      <artifactId>junit</artifactId>
-      <scope>test</scope>
-    </dependency>
-
-    <dependency>
-      <groupId>org.mockito</groupId>
-      <artifactId>mockito-all</artifactId>
-      <scope>test</scope>
-    </dependency>
   </dependencies>
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-checkstyle-plugin</artifactId>
-        <configuration>
-          <configLocation>
-            ${project.basedir}/../../commons/src/main/resources/vpns_checks.xml
-          </configLocation>
-          <failsOnError>true</failsOnError>
-          <includes>**/*.java,**/*.xml,**/*.ini,**/*.sh,**/*.bat</includes>
-          <excludes>**/yang/</excludes>
-        </configuration>
-      </plugin>
-    </plugins>
-  </build>
+
 </project>
index 8239e9a8eb8c90e702e815ed30eaf12c19998068..546e60f8a91ee5970da596eb3d4cfdf3b9c1d66e 100644 (file)
@@ -79,7 +79,6 @@ public class NexthopManager implements L3nexthopService, AutoCloseable {
     */
     public NexthopManager(final DataBroker db) {
         broker = db;
-        createNexthopPointerPool();
     }
 
     @Override
@@ -99,7 +98,7 @@ public class NexthopManager implements L3nexthopService, AutoCloseable {
         this.idManager = idManager;
     }
 
-    private void createNexthopPointerPool() {
+    protected void createNexthopPointerPool() {
         CreateIdPoolInput createPool = new CreateIdPoolInputBuilder()
             .setPoolName("nextHopPointerPool")
             .setIdStart(1L)
@@ -417,4 +416,4 @@ public class NexthopManager implements L3nexthopService, AutoCloseable {
         Futures.addCallback(tx.submit(), DEFAULT_CALLBACK);
     }
 
-}
\ No newline at end of file
+}
index 57b7a766746b63f4fa92f96a3d7479a0e4d62a35..2e1456622e0494d19ff069a05af40e0b824873a9 100644 (file)
@@ -38,6 +38,7 @@ public class NexthopmgrProvider implements BindingAwareProvider, AutoCloseable {
         nhManager.setMdsalManager(mdsalManager);
         nhManager.setInterfaceManager(interfaceManager);
         nhManager.setIdManager(idManager);
+        nhManager.createNexthopPointerPool();
         LOG.info("NexthopmgrProvider Session Initiated");
     }
 
diff --git a/pom.xml b/pom.xml
index 22e07fb4e52314b65cc1cf030ecd5fd71ab0392e..7c29c75c64b1dbd3e43f6eca07dde5c657abd0a0 100644 (file)
--- a/pom.xml
+++ b/pom.xml
@@ -16,8 +16,10 @@ and is available at http://www.eclipse.org/legal/epl-v10.html INTERNAL
     <maven>3.1.1</maven>
   </prerequisites>
   <modules>
-       <module>model-bgp</module>
-       <module>mdsalutil</module>
+    <module>commons/binding-parent</module>
+    <module>commons/config-parent</module>
+    <module>model-bgp</module>
+    <module>mdsalutil</module>
     <module>vpnmanager</module>
     <module>interfacemgr</module>
     <module>nexthopmgr</module>
index 99490b122a4244611f5634ae820fbe35bc83c3e5..b042c1eb3e9816184aa66665420b9b71f0362b84 100644 (file)
@@ -8,27 +8,18 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
 -->
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <parent>
-    <groupId>org.opendaylight.yangtools</groupId>
+    <groupId>org.opendaylight.vpnservice</groupId>
     <artifactId>binding-parent</artifactId>
-    <version>0.7.0-SNAPSHOT</version>
-    <relativePath/>
+    <version>0.0.1-SNAPSHOT</version>
+    <relativePath>../../commons/binding-parent</relativePath>
   </parent>
 
   <modelVersion>4.0.0</modelVersion>
   <groupId>org.opendaylight.vpnservice</groupId>
   <artifactId>vpnmanager-api</artifactId>
-  <version>0.0.1-SNAPSHOT</version>
+  <version>${vpnservices.version}</version>
   <packaging>bundle</packaging>
 
-  <properties>
-    <!-- ODL -->
-    <ietf.inet.types.version>2010.09.24.7-SNAPSHOT</ietf.inet.types.version>
-    <ietf.yang.types.version>2010.09.24.7-SNAPSHOT</ietf.yang.types.version>
-    <yang.ext.version>2013.09.07.7-SNAPSHOT</yang.ext.version>
-    <yangtools.version>0.7.0-SNAPSHOT</yangtools.version>
-    <mdsal.version>1.2.0-SNAPSHOT</mdsal.version>
-  </properties>
-
   <dependencies>
     <dependency>
       <groupId>org.opendaylight.yangtools</groupId>
@@ -58,17 +49,17 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
     <dependency>
       <groupId>org.opendaylight.yangtools.model</groupId>
       <artifactId>ietf-interfaces</artifactId>
-      <version>2014.05.08.7-SNAPSHOT</version>
+      <version>${ietf.interfaces.version}</version>
     </dependency>
     <dependency>
       <groupId>org.opendaylight.yangtools.model</groupId>
       <artifactId>iana-if-type-2014-05-08</artifactId>
-      <version>2014.05.08.7-SNAPSHOT</version>
+      <version>${iana.if.type.version}</version>
     </dependency>
     <dependency>
       <groupId>org.opendaylight.vpnservice</groupId>
       <artifactId>model-bgp</artifactId>
-      <version>2013.07.15.7-SNAPSHOT</version>
+      <version>${model.bgp.version}</version>
     </dependency>
   </dependencies>
 </project>
index ba626fb075a0b76c962ee4aec85add75968b72cc..7846979c78517460a25fd4b214bb13e891990e7e 100644 (file)
@@ -9,69 +9,43 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 
   <parent>
-    <groupId>org.opendaylight.controller</groupId>
+    <groupId>org.opendaylight.vpnservice</groupId>
     <artifactId>config-parent</artifactId>
-    <version>0.3.0-SNAPSHOT</version>
-    <relativePath/>
+    <version>0.0.1-SNAPSHOT</version>
+    <relativePath>../../commons/config-parent</relativePath>
   </parent>
 
   <modelVersion>4.0.0</modelVersion>
   <groupId>org.opendaylight.vpnservice</groupId>
   <artifactId>vpnmanager-impl</artifactId>
-  <version>0.0.1-SNAPSHOT</version>
+  <version>${vpnservices.version}</version>
   <packaging>bundle</packaging>
   <dependencies>
     <dependency>
       <groupId>${project.groupId}</groupId>
       <artifactId>vpnmanager-api</artifactId>
-      <version>${project.version}</version>
+      <version>${vpnservices.version}</version>
     </dependency>
     <dependency>
       <groupId>${project.groupId}</groupId>
       <artifactId>bgpmanager-api</artifactId>
-      <version>1.0-SNAPSHOT</version>
+      <version>${vpnservices.version}</version>
     </dependency>
     <dependency>
       <groupId>org.opendaylight.vpnservice</groupId>
       <artifactId>fibmanager-api</artifactId>
-      <version>${project.version}</version>
+      <version>${vpnservices.version}</version>
     </dependency>
     <dependency>
       <groupId>${project.groupId}</groupId>
       <artifactId>mdsalutil-api</artifactId>
-      <version>${project.version}</version>
+      <version>${vpnservices.version}</version>
     </dependency>
     <dependency>
       <groupId>${project.groupId}</groupId>
       <artifactId>interfacemgr-api</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <!--  TEST Dependencies -->
-    <dependency>
-      <groupId>junit</groupId>
-      <artifactId>junit</artifactId>
-    </dependency>
-       <dependency>
-       <groupId>org.mockito</groupId>
-       <artifactId>mockito-all</artifactId>
-       <scope>test</scope>
+      <version>${vpnservices.version}</version>
     </dependency>
   </dependencies>
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-checkstyle-plugin</artifactId>
-        <configuration>
-          <configLocation>
-            ${project.basedir}/../../commons/src/main/resources/vpns_checks.xml
-          </configLocation>
-          <failsOnError>true</failsOnError>
-          <includes>**/*.java,**/*.xml,**/*.ini</includes>
-          <excludes>**/yang/</excludes>
-        </configuration>
-      </plugin>
-    </plugins>
-  </build>
 
 </project>
index 766bb87f40fa358608ffb8525eb22235c5d28013..7b7b14caff7d433c7fca635844afe67b3fdec27b 100644 (file)
@@ -12,7 +12,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
   <modelVersion>4.0.0</modelVersion>
   <groupId>org.opendaylight.vpnservice</groupId>
   <artifactId>vpnservice-artifacts</artifactId>
-  <version>1.0-SNAPSHOT</version>
+  <version>0.1.0-SNAPSHOT</version>
   <packaging>pom</packaging>
 
   <dependencyManagement>