Remove redundant names in paths
[netvirt.git] / natservice / impl / src / main / java / org / opendaylight / netvirt / natservice / internal / SnatServiceImplFactory.java
1 /*
2  * Copyright (c) 2017 Red Hat, Inc. and others. All rights reserved.
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6  * and is available at http://www.eclipse.org/legal/epl-v10.html
7  */
8 package org.opendaylight.netvirt.natservice.internal;
9
10 import javax.inject.Inject;
11 import javax.inject.Singleton;
12 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
13 import org.opendaylight.genius.mdsalutil.interfaces.IMdsalApiManager;
14 import org.opendaylight.infrautils.inject.AbstractLifecycle;
15 import org.opendaylight.netvirt.elanmanager.api.IElanService;
16 import org.opendaylight.netvirt.neutronvpn.interfaces.INeutronVpnManager;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.idmanager.rev160406.IdManagerService;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rpcs.rev160406.OdlInterfaceRpcService;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.ItmRpcService;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.natservice.config.rev170206.NatserviceConfig;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.natservice.config.rev170206.NatserviceConfig.NatMode;
22 import org.slf4j.Logger;
23 import org.slf4j.LoggerFactory;
24
25 @Singleton
26 public class SnatServiceImplFactory extends AbstractLifecycle {
27
28     private static final Logger LOG = LoggerFactory.getLogger(SnatServiceImplFactory.class);
29
30     private final DataBroker dataBroker;
31     private final IMdsalApiManager mdsalManager;
32     private final ItmRpcService itmManager;
33     private final OdlInterfaceRpcService interfaceManager;
34     private final IdManagerService idManager;
35     private final NAPTSwitchSelector naptSwitchSelector;
36     private final NatMode natMode;
37     private final INeutronVpnManager nvpnManager;
38     private final ExternalRoutersListener externalRouterListener;
39     private final IElanService elanManager;
40
41     @Inject
42     public SnatServiceImplFactory(final DataBroker dataBroker, final IMdsalApiManager mdsalManager,
43             final ItmRpcService itmManager,
44             final OdlInterfaceRpcService interfaceManager,
45             final IdManagerService idManager,
46             final NAPTSwitchSelector naptSwitchSelector,
47             final NatserviceConfig config,
48             final INeutronVpnManager nvpnManager,
49             final ExternalRoutersListener externalRouterListener,
50             final IElanService elanManager) {
51         this.dataBroker = dataBroker;
52         this.mdsalManager = mdsalManager;
53         this.itmManager = itmManager;
54         this.interfaceManager = interfaceManager;
55         this.idManager = idManager;
56         this.naptSwitchSelector = naptSwitchSelector;
57         if (config != null) {
58             this.natMode = config.getNatMode();
59         } else {
60             this.natMode = null;
61         }
62         this.nvpnManager = nvpnManager;
63         this.externalRouterListener = externalRouterListener;
64         this.elanManager = elanManager;
65     }
66
67     @Override
68     protected void start() {
69         LOG.info("{} start", getClass().getSimpleName());
70     }
71
72     @Override
73     protected void stop() {
74         LOG.info("{} close", getClass().getSimpleName());
75     }
76
77     public AbstractSnatService createFlatVlanSnatServiceImpl() {
78
79         if (natMode == NatMode.Conntrack) {
80             return new FlatVlanConntrackBasedSnatService(dataBroker, mdsalManager, itmManager, interfaceManager,
81                     idManager, naptSwitchSelector);
82         }
83         return null;
84     }
85
86     public AbstractSnatService createVxlanGreSnatServiceImpl() {
87
88         if (natMode == NatMode.Conntrack) {
89             NatOverVxlanUtil.validateAndCreateVxlanVniPool(dataBroker, nvpnManager, idManager,
90                     NatConstants.ODL_VNI_POOL_NAME);
91             return new VxlanGreConntrackBasedSnatService(dataBroker, mdsalManager, itmManager, interfaceManager,
92                     idManager, naptSwitchSelector, externalRouterListener, elanManager);
93         }
94         return null;
95     }
96
97
98 }