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