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