NETVIRT-1630 migrate to md-sal APIs
[netvirt.git] / natservice / impl / src / main / java / org / opendaylight / netvirt / natservice / internal / SnatServiceImplFactory.java
index 2ddb1095d9b3cfeae3aaf6a87349f34c6fde3a69..ec8881f79fa2891f7fcce363a0aa7da24ac2cfa1 100644 (file)
@@ -9,13 +9,15 @@ package org.opendaylight.netvirt.natservice.internal;
 
 import javax.inject.Inject;
 import javax.inject.Singleton;
-import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.eclipse.jdt.annotation.Nullable;
+import org.opendaylight.genius.datastoreutils.listeners.DataTreeEventCallbackRegistrar;
 import org.opendaylight.genius.interfacemanager.interfaces.IInterfaceManager;
 import org.opendaylight.genius.mdsalutil.interfaces.IMdsalApiManager;
 import org.opendaylight.infrautils.inject.AbstractLifecycle;
+import org.opendaylight.mdsal.binding.api.DataBroker;
 import org.opendaylight.netvirt.elanmanager.api.IElanService;
 import org.opendaylight.netvirt.fibmanager.api.IFibManager;
-import org.opendaylight.netvirt.neutronvpn.interfaces.INeutronVpnManager;
+import org.opendaylight.netvirt.natservice.ha.NatDataUtil;
 import org.opendaylight.netvirt.vpnmanager.api.IVpnFootprintService;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.IdManagerService;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rpcs.rev160406.OdlInterfaceRpcService;
@@ -37,12 +39,15 @@ public class SnatServiceImplFactory extends AbstractLifecycle {
     private final IdManagerService idManager;
     private final NAPTSwitchSelector naptSwitchSelector;
     private final NatMode natMode;
-    private final INeutronVpnManager nvpnManager;
     private final ExternalRoutersListener externalRouterListener;
     private final IElanService elanManager;
     private final IInterfaceManager interfaceManager;
     private final IVpnFootprintService vpnFootprintService;
-    protected final IFibManager fibManager;
+    private final IFibManager fibManager;
+    private final NatDataUtil natDataUtil;
+    private final DataTreeEventCallbackRegistrar eventCallbacks;
+    private final NatOverVxlanUtil natOverVxlanUtil;
+    private final Ipv6SubnetFlowProgrammer ipv6SubnetFlowProgrammer;
 
     @Inject
     public SnatServiceImplFactory(final DataBroker dataBroker, final IMdsalApiManager mdsalManager,
@@ -51,12 +56,15 @@ public class SnatServiceImplFactory extends AbstractLifecycle {
                                   final IdManagerService idManager,
                                   final NAPTSwitchSelector naptSwitchSelector,
                                   final NatserviceConfig config,
-                                  final INeutronVpnManager nvpnManager,
                                   final ExternalRoutersListener externalRouterListener,
                                   final IElanService elanManager,
                                   final IInterfaceManager interfaceManager,
                                   final IVpnFootprintService vpnFootprintService,
-                                  final IFibManager fibManager) {
+                                  final IFibManager fibManager,
+                                  final NatDataUtil natDataUtil,
+                                  final DataTreeEventCallbackRegistrar eventCallbacks,
+                                  final NatOverVxlanUtil natOverVxlanUtil,
+                                  final Ipv6SubnetFlowProgrammer ipv6SubnetFlowProgrammer) {
         this.dataBroker = dataBroker;
         this.mdsalManager = mdsalManager;
         this.itmManager = itmManager;
@@ -68,12 +76,15 @@ public class SnatServiceImplFactory extends AbstractLifecycle {
         } else {
             this.natMode = null;
         }
-        this.nvpnManager = nvpnManager;
         this.externalRouterListener = externalRouterListener;
         this.elanManager = elanManager;
         this.interfaceManager = interfaceManager;
         this.vpnFootprintService = vpnFootprintService;
         this.fibManager = fibManager;
+        this.natDataUtil = natDataUtil;
+        this.eventCallbacks = eventCallbacks;
+        this.natOverVxlanUtil = natOverVxlanUtil;
+        this.ipv6SubnetFlowProgrammer = ipv6SubnetFlowProgrammer;
     }
 
     @Override
@@ -86,26 +97,28 @@ public class SnatServiceImplFactory extends AbstractLifecycle {
         LOG.info("{} close", getClass().getSimpleName());
     }
 
+    @Nullable
     public AbstractSnatService createFlatVlanSnatServiceImpl() {
-
         if (natMode == NatMode.Conntrack) {
             return new FlatVlanConntrackBasedSnatService(dataBroker, mdsalManager, itmManager, odlInterfaceRpcService,
-                    idManager, naptSwitchSelector, interfaceManager, vpnFootprintService, fibManager);
+                    idManager, naptSwitchSelector, interfaceManager, vpnFootprintService, fibManager,  natDataUtil,
+                    eventCallbacks);
         }
         return null;
     }
 
-    public AbstractSnatService createVxlanGreSnatServiceImpl() {
+    public Ipv6ForwardingService createFlatVlanIpv6ServiceImpl() {
+        return new Ipv6ForwardingService(dataBroker, mdsalManager, itmManager, odlInterfaceRpcService,
+                idManager, naptSwitchSelector, interfaceManager, ipv6SubnetFlowProgrammer);
+    }
 
+    @Nullable
+    public AbstractSnatService createVxlanGreSnatServiceImpl() {
         if (natMode == NatMode.Conntrack) {
-            NatOverVxlanUtil.validateAndCreateVxlanVniPool(dataBroker, nvpnManager, idManager,
-                    NatConstants.ODL_VNI_POOL_NAME);
             return new VxlanGreConntrackBasedSnatService(dataBroker, mdsalManager, itmManager, odlInterfaceRpcService,
                     idManager, naptSwitchSelector, externalRouterListener, elanManager, interfaceManager,
-                    vpnFootprintService, fibManager);
+                    vpnFootprintService, fibManager, natDataUtil, eventCallbacks, natOverVxlanUtil);
         }
         return null;
     }
-
-
 }