add bgpmanager service dependency 10/18910/1
authorSasidharan Sambasivam <sasidharan.s.sambasivam@ericsson.com>
Thu, 23 Apr 2015 10:55:37 +0000 (16:25 +0530)
committerSasidharan Sambasivam <sasidharan.s.sambasivam@ericsson.com>
Thu, 23 Apr 2015 10:56:23 +0000 (16:26 +0530)
Change-Id: I1556be4489f84645a494df5a83d9b889d02264b9
Signed-off-by: Sasidharan Sambasivam <sasidharan.s.sambasivam@ericsson.com>
features/src/main/features/features.xml
vpnmanager/vpnmanager-impl/pom.xml
vpnmanager/vpnmanager-impl/src/main/config/default-config.xml
vpnmanager/vpnmanager-impl/src/main/java/org/opendaylight/vpnservice/VpnInterfaceManager.java
vpnmanager/vpnmanager-impl/src/main/java/org/opendaylight/vpnservice/VpnserviceProvider.java
vpnmanager/vpnmanager-impl/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/vpnservice/impl/rev150216/VpnserviceImplModule.java
vpnmanager/vpnmanager-impl/src/main/yang/vpnservice-impl.yang

index 7147f6de4ecbb3b434867b97fbb61b631014ae27..ffe2b9531f0b14a88a39e2a873c25c6eb9899f77 100644 (file)
@@ -29,21 +29,23 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
     <feature version='${mdsal.version}'>odl-mdsal-broker</feature>
     <feature version='${project.version}'>odl-vpnservice-api</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/vpnmanager-impl/${vpnmanager.version}</bundle>
     <bundle>mvn:org.opendaylight.vpnservice/interfacemgr-impl/${interfacemgr.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/bgpmanager-impl/${project.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="vpnmanager-impl-default-config.xml">mvn:org.opendaylight.vpnservice/vpnmanager-impl/${vpnmanager.version}/xml/config</configfile>
     <configfile finalname="interfacemgr-impl-default-config.xml">mvn:org.opendaylight.vpnservice/interfacemgr-impl/${interfacemgr.version}/xml/config</configfile>
     <configfile finalname="nexthopmgr-impl-default-config.xml">mvn:org.opendaylight.vpnservice/nexthopmgr-impl/${nexthopmgr.version}/xml/config</configfile>
     <configfile finalname="idmanager-impl-default-config.xml">mvn:org.opendaylight.vpnservice/idmanager-impl/${idmanager.version}/xml/config</configfile>
     <configfile finalname="fibmanager-impl-default-config.xml">mvn:org.opendaylight.vpnservice/fibmanager-impl/${fibmanager.version}/xml/config</configfile>
-    <configfile finalname="bgpmanager-impl-default-config.xml">mvn:org.opendaylight.vpnservice/bgpmanager-impl/${project.version}/xml/config</configfile>
+    
   </feature>
   <feature name='odl-vpnservice-impl-rest' version='${project.version}' description='OpenDaylight :: vpnservice :: impl :: REST '>
     <feature version="${project.version}">odl-vpnservice-impl</feature>
index 3eaa892d2d1dc2fd5dbad3e7e6e072e75aeeafe4..20886d9bb8eb389d8262050ea229e0f401bb88fb 100644 (file)
@@ -25,6 +25,11 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
       <groupId>${project.groupId}</groupId>
       <artifactId>vpnmanager-api</artifactId>
       <version>${project.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>${project.groupId}</groupId>
+      <artifactId>bgpmanager-api</artifactId>
+      <version>1.0-SNAPSHOT</version>
     </dependency>
            <!--  TEST Dependencies -->
     <dependency>
index 040db60383074060074b6ec9df4a1a8b1821fdd7..65cfb17f8d07d3f1796064fdbc2d6c441c8ec573 100644 (file)
@@ -11,6 +11,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html
   <required-capabilities>
       <capability>urn:opendaylight:params:xml:ns:yang:vpnservice:impl?module=vpnservice-impl&amp;revision=2015-02-16</capability>
       <capability>urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding?module=opendaylight-md-sal-binding&amp;revision=2013-10-28</capability>
+      <capability>urn:opendaylight:params:xml:ns:yang:bgpmanager:api?module=bgpmanager-api&amp;revision=2015-04-20</capability>
   </required-capabilities>
   <configuration>
 
@@ -23,6 +24,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>
+          <bgpmanager>
+            <type xmlns:bgpmanager="urn:opendaylight:params:xml:ns:yang:bgpmanager:api">bgpmanager:bgpmanager-api</type>
+            <name>bgpmanager</name>
+          </bgpmanager>
         </module>
       </modules>
     </data>
index e7bca5339d9d60ec61aaa03e9dce96f612775bcb..76f1f494cd26d9a93557622f0b19d002e9d202d5 100644 (file)
@@ -47,11 +47,11 @@ public class VpnInterfaceManager extends AbstractDataChangeListener<VpnInterface
     private static final FutureCallback<Void> DEFAULT_CALLBACK =
             new FutureCallback<Void>() {
                 public void onSuccess(Void result) {
-                    LOG.info("Success in Datastore write operation");
+                    LOG.info("Success in Datastore operation");
                 }
 
                 public void onFailure(Throwable error) {
-                    LOG.error("Error in Datastore write operation", error);
+                    LOG.error("Error in Datastore operation", error);
                 };
             };
 
@@ -168,9 +168,57 @@ public class VpnInterfaceManager extends AbstractDataChangeListener<VpnInterface
     }
 
     @Override
-    protected void remove( InstanceIdentifier<VpnInterface> identifier, VpnInterface del) {
-        // TODO Auto-generated method stub
+    protected void remove( InstanceIdentifier<VpnInterface> identifier, VpnInterface vpnInterface) {
+        LOG.info("Remove event - key: {}, value: {}" ,identifier, vpnInterface );
+        final VpnInterfaceKey key = identifier.firstKeyOf(VpnInterface.class, VpnInterfaceKey.class);
+        String interfaceName = key.getName();
+        InstanceIdentifierBuilder<Interface> idBuilder = 
+                InstanceIdentifier.builder(Interfaces.class).child(Interface.class, new InterfaceKey(interfaceName));
+        InstanceIdentifier<Interface> id = idBuilder.build();
+        Optional<Interface> port = read(LogicalDatastoreType.CONFIGURATION, id);
+        if (port.isPresent()) {
+            Interface interf = port.get();
+            unbindServiceOnInterface(interf);
+            removeNextHops(identifier, vpnInterface);
+        } else {
+            LOG.info("No nexthops were available to handle remove event {}", interfaceName);
+        }
+    }
+
+    private void removeNextHops(final InstanceIdentifier<VpnInterface> identifier, VpnInterface intf) {
+        //Read NextHops
+        InstanceIdentifier<Adjacencies> path = identifier.augmentation(Adjacencies.class);
+        Optional<Adjacencies> adjacencies = read(LogicalDatastoreType.OPERATIONAL, path);
+        String intfName = intf.getName();
+
+        if (adjacencies.isPresent()) {
+            List<Adjacency> nextHops = adjacencies.get().getAdjacency();
 
+            if (!nextHops.isEmpty()) {
+                LOG.trace("NextHops are " + nextHops);
+                for (Adjacency nextHop : nextHops) {
+                    //TODO: Update BGP
+                    removePrefixFromBGP(nextHop);
+                }
+            }
+
+            InstanceIdentifier<VpnInterface> interfaceId = VpnUtil.getVpnInterfaceIdentifier(intfName);
+            delete(LogicalDatastoreType.OPERATIONAL, interfaceId);
+        }
+    }
+
+    private <T extends DataObject> void delete(LogicalDatastoreType datastoreType, InstanceIdentifier<T> path) {
+        WriteTransaction tx = broker.newWriteOnlyTransaction();
+        tx.delete(datastoreType, path);
+        Futures.addCallback(tx.submit(), DEFAULT_CALLBACK);
+    }
+
+    private void unbindServiceOnInterface(Interface intf) {
+        //TODO: Remove Ingress flow on the interface to unbind the VPN service
+    }
+
+    private void removePrefixFromBGP(Adjacency nextHop) {
+        //TODO: Update the Prefix to BGP
     }
 
     @Override
index 7514cf7f0a6f1055abc88458ad7af0b3e4c7af94..a1e635c371349f55b1c7889b1e6870c78cbd5a7b 100644 (file)
@@ -7,10 +7,12 @@
  */
 package org.opendaylight.vpnservice;
 
+import java.util.Collections;
+
+import org.opendaylight.bgpmanager.api.IBgpManager;
 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.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -20,6 +22,7 @@ public class VpnserviceProvider implements BindingAwareProvider,
     private static final Logger LOG = LoggerFactory.getLogger(VpnserviceProvider.class);
     private VpnInterfaceManager vpnInterfaceManager;
     private VpnManager vpnManager;
+    private IBgpManager bgpManager;
 
     @Override
     public void onSessionInitiated(ProviderContext session) {
@@ -33,6 +36,11 @@ public class VpnserviceProvider implements BindingAwareProvider,
         }
     }
 
+    public void setBgpManager(IBgpManager bgpManager) {
+        LOG.debug("BGP Manager reference initialized");
+        this.bgpManager = bgpManager;
+    }
+
     @Override
     public void close() throws Exception {
         vpnManager.close();
index e484e95b5656bdbfc1945db0fd91a81403c1aa97..c0fe55864b6af54fce61914d180c8307b0e674f8 100644 (file)
@@ -27,7 +27,7 @@ public class VpnserviceImplModule extends org.opendaylight.yang.gen.v1.urn.opend
     public java.lang.AutoCloseable createInstance() {
         VpnserviceProvider provider = new VpnserviceProvider();
         getBrokerDependency().registerProvider(provider);
+        provider.setBgpManager(getBgpmanagerDependency());
         return provider;
     }
-
 }
index 3c5fb3dd605844b151a49848e228d6e2fa855de6..f77b000e6744b0f3d340a1511e8513e03f1513c3 100644 (file)
@@ -5,6 +5,7 @@ module vpnservice-impl {
 
     import config { prefix config; revision-date 2013-04-05; }
     import opendaylight-md-sal-binding { prefix md-sal-binding; revision-date 2013-10-28;}
+    import bgpmanager-api { prefix bgpmgr-api; revision-date 2015-04-20;}
 
     description
         "Service definition for vpnservice project";
@@ -30,6 +31,14 @@ module vpnservice-impl {
                     }
                 }
             }
+            container bgpmanager {
+                uses config:service-ref {
+                    refine type {
+                        mandatory true;
+                        config:required-identity bgpmgr-api:bgpmanager-api;
+                    }
+                }
+            }
         }
     }
 }