L2 Gw create changes related to ITM Tunnels creation in neutronvpn module
[vpnservice.git] / neutronvpn / neutronvpn-impl / src / main / java / org / opendaylight / vpnservice / neutronvpn / NeutronvpnProvider.java
1 /*
2  * Copyright (c) 2016 Ericsson India Global Services Pvt Ltd. 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.vpnservice.neutronvpn;
9
10 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
11 import org.opendaylight.controller.sal.binding.api.BindingAwareBroker;
12 import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.ProviderContext;
13 import org.opendaylight.controller.sal.binding.api.BindingAwareProvider;
14 import org.opendaylight.controller.sal.binding.api.RpcProviderRegistry;
15 import org.opendaylight.controller.md.sal.common.api.clustering.EntityOwnershipService;
16 import org.opendaylight.yangtools.binding.data.codec.api.BindingNormalizedNodeSerializer;
17 import org.opendaylight.vpnservice.mdsalutil.interfaces.IMdsalApiManager;
18 import org.opendaylight.vpnservice.neutronvpn.interfaces.INeutronVpnManager;
19 import org.opendaylight.vpnservice.neutronvpn.l2gw.L2GatewayProvider;
20 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpAddress;
21 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Uuid;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.ports.rev150712.ports.attributes.ports.Port;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.subnets.rev150712.subnets.attributes.subnets.Subnet;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.lockmanager.rev150819.LockManagerService;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.neutronvpn.rev150602.NeutronvpnService;
26 import org.slf4j.Logger;
27 import org.slf4j.LoggerFactory;
28
29 import java.util.List;
30
31 public class NeutronvpnProvider implements BindingAwareProvider, INeutronVpnManager, AutoCloseable {
32
33     private static final Logger LOG = LoggerFactory.getLogger(NeutronvpnProvider.class);
34     private NeutronvpnManager nvManager;
35     private IMdsalApiManager mdsalManager;
36     private LockManagerService lockManager;
37     private NeutronBgpvpnChangeListener bgpvpnListener;
38     private NeutronNetworkChangeListener networkListener;
39     private NeutronSubnetChangeListener subnetListener;
40     private NeutronRouterChangeListener routerListener;
41     private NeutronPortChangeListener portListener;
42     private RpcProviderRegistry rpcProviderRegistry;
43     private L2GatewayProvider l2GatewayProvider;
44     private EntityOwnershipService entityOwnershipService;
45     private BindingNormalizedNodeSerializer bindingNormalizedNodeSerializer;
46
47     public NeutronvpnProvider(RpcProviderRegistry rpcRegistry) {
48         this.rpcProviderRegistry = rpcRegistry;
49     }
50
51     public RpcProviderRegistry getRpcProviderRegistry() {
52         return rpcProviderRegistry;
53     }
54
55     public void setRpcProviderRegistry(RpcProviderRegistry rpcProviderRegistry) {
56         this.rpcProviderRegistry = rpcProviderRegistry;
57     }
58
59     public void setMdsalManager(IMdsalApiManager mdsalManager) {
60         this.mdsalManager = mdsalManager;
61     }
62
63     public void setLockManager(LockManagerService lockManager) {
64         this.lockManager = lockManager;
65     }
66
67     public void setEntityOwnershipService(EntityOwnershipService entityOwnershipService) {
68         this.entityOwnershipService = entityOwnershipService;
69     }
70
71     public void setBindingNormalizedNodeSerializer(BindingNormalizedNodeSerializer bindingNormalizedNodeSerializer) {
72         this.bindingNormalizedNodeSerializer = bindingNormalizedNodeSerializer;
73     }
74
75     @Override
76     public void onSessionInitiated(ProviderContext session) {
77         try {
78             final DataBroker dbx = session.getSALService(DataBroker.class);
79             nvManager = new NeutronvpnManager(dbx, mdsalManager);
80             final BindingAwareBroker.RpcRegistration<NeutronvpnService> rpcRegistration =
81                     getRpcProviderRegistry().addRpcImplementation(NeutronvpnService.class, nvManager);
82             bgpvpnListener = new NeutronBgpvpnChangeListener(dbx, nvManager);
83             networkListener = new NeutronNetworkChangeListener(dbx, nvManager);
84             subnetListener = new NeutronSubnetChangeListener(dbx, nvManager);
85             routerListener = new NeutronRouterChangeListener(dbx, nvManager);
86             portListener = new NeutronPortChangeListener(dbx, nvManager);
87             nvManager.setLockManager(lockManager);
88             l2GatewayProvider = new L2GatewayProvider(dbx, rpcProviderRegistry, entityOwnershipService,
89                     bindingNormalizedNodeSerializer);
90
91             LOG.info("NeutronvpnProvider Session Initiated");
92         } catch (Exception e) {
93             LOG.error("Error initializing services", e);
94         }
95     }
96
97     @Override
98     public void close() throws Exception {
99         portListener.close();
100         subnetListener.close();
101         routerListener.close();
102         networkListener.close();
103         bgpvpnListener.close();
104         nvManager.close();
105         l2GatewayProvider.close();
106         LOG.info("NeutronvpnProvider Closed");
107     }
108
109     @Override
110     public List<String> showNeutronPortsCLI() {
111         return nvManager.showNeutronPortsCLI();
112     }
113
114     @Override
115     public List<String> showVpnConfigCLI(Uuid vuuid) {
116         return nvManager.showVpnConfigCLI(vuuid);
117     }
118
119     @Override
120     public void addSubnetToVpn(Uuid vpnId, Uuid subnet) {
121         nvManager.addSubnetToVpn(vpnId, subnet);
122     }
123
124     @Override
125     public List<Uuid> getSubnetsforVpn(Uuid vpnid) {
126         return nvManager.getSubnetsforVpn(vpnid);
127     }
128
129     @Override
130     public void removeSubnetFromVpn(Uuid vpnId, Uuid subnet) {
131         nvManager.removeSubnetFromVpn(vpnId, subnet);
132     }
133
134     @Override
135     public Port getNeutronPort(String name) {
136         return nvManager.getNeutronPort(name);
137     }
138
139     @Override
140     public Port getNeutronPort(Uuid portId) {
141         return nvManager.getNeutronPort(portId);
142     }
143
144     @Override
145     public Subnet getNeutronSubnet(Uuid subnetId) {
146         return nvManager.getNeutronSubnet(subnetId);
147     }
148
149     @Override
150     public String uuidToTapPortName(Uuid id) {
151         return NeutronvpnUtils.uuidToTapPortName(id);
152     }
153
154     @Override
155     public IpAddress getNeutronSubnetGateway(Uuid subnetId) {
156         return nvManager.getNeutronSubnetGateway(subnetId);
157     }
158
159 }