NETVIRT-1630 migrate to md-sal APIs
[netvirt.git] / natservice / impl / src / main / java / org / opendaylight / netvirt / natservice / internal / SnatServiceImplFactory.java
index 660a8f6ead77b11296e45729716f0250c17dcc41..ec8881f79fa2891f7fcce363a0aa7da24ac2cfa1 100644 (file)
@@ -9,11 +9,16 @@ 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.neutronvpn.interfaces.INeutronVpnManager;
+import org.opendaylight.netvirt.fibmanager.api.IFibManager;
+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;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.ItmRpcService;
@@ -30,28 +35,40 @@ public class SnatServiceImplFactory extends AbstractLifecycle {
     private final DataBroker dataBroker;
     private final IMdsalApiManager mdsalManager;
     private final ItmRpcService itmManager;
-    private final OdlInterfaceRpcService interfaceManager;
+    private final OdlInterfaceRpcService odlInterfaceRpcService;
     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;
+    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,
-            final ItmRpcService itmManager,
-            final OdlInterfaceRpcService interfaceManager,
-            final IdManagerService idManager,
-            final NAPTSwitchSelector naptSwitchSelector,
-            final NatserviceConfig config,
-            final INeutronVpnManager nvpnManager,
-            final ExternalRoutersListener externalRouterListener,
-            final IElanService elanManager) {
+                                  final ItmRpcService itmManager,
+                                  final OdlInterfaceRpcService odlInterfaceRpcService,
+                                  final IdManagerService idManager,
+                                  final NAPTSwitchSelector naptSwitchSelector,
+                                  final NatserviceConfig config,
+                                  final ExternalRoutersListener externalRouterListener,
+                                  final IElanService elanManager,
+                                  final IInterfaceManager interfaceManager,
+                                  final IVpnFootprintService vpnFootprintService,
+                                  final IFibManager fibManager,
+                                  final NatDataUtil natDataUtil,
+                                  final DataTreeEventCallbackRegistrar eventCallbacks,
+                                  final NatOverVxlanUtil natOverVxlanUtil,
+                                  final Ipv6SubnetFlowProgrammer ipv6SubnetFlowProgrammer) {
         this.dataBroker = dataBroker;
         this.mdsalManager = mdsalManager;
         this.itmManager = itmManager;
-        this.interfaceManager = interfaceManager;
+        this.odlInterfaceRpcService = odlInterfaceRpcService;
         this.idManager = idManager;
         this.naptSwitchSelector = naptSwitchSelector;
         if (config != null) {
@@ -59,9 +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
@@ -74,25 +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, interfaceManager,
-                    idManager, naptSwitchSelector);
+            return new FlatVlanConntrackBasedSnatService(dataBroker, mdsalManager, itmManager, odlInterfaceRpcService,
+                    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, interfaceManager,
-                    idManager, naptSwitchSelector, externalRouterListener, elanManager);
+            return new VxlanGreConntrackBasedSnatService(dataBroker, mdsalManager, itmManager, odlInterfaceRpcService,
+                    idManager, naptSwitchSelector, externalRouterListener, elanManager, interfaceManager,
+                    vpnFootprintService, fibManager, natDataUtil, eventCallbacks, natOverVxlanUtil);
         }
         return null;
     }
-
-
 }