2 * Copyright (c) 2015 - 2016 Ericsson India Global Services Pvt Ltd. and others. All rights reserved.
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
8 package org.opendaylight.vpnservice.neutronvpn;
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;
29 import org.slf4j.Logger;
30 import org.slf4j.LoggerFactory;
32 import java.util.List;
34 public class NeutronvpnProvider implements BindingAwareProvider, INeutronVpnManager, AutoCloseable {
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;
52 public NeutronvpnProvider(RpcProviderRegistry rpcRegistry,NotificationPublishService notificationPublishService,
53 NotificationService notificationService) {
54 this.rpcProviderRegistry = rpcRegistry;
55 this.notificationPublishService = notificationPublishService;
56 this.notificationService = notificationService;
59 public RpcProviderRegistry getRpcProviderRegistry() {
60 return rpcProviderRegistry;
63 public void setRpcProviderRegistry(RpcProviderRegistry rpcProviderRegistry) {
64 this.rpcProviderRegistry = rpcProviderRegistry;
67 public void setMdsalManager(IMdsalApiManager mdsalManager) {
68 this.mdsalManager = mdsalManager;
71 public void setLockManager(LockManagerService lockManager) {
72 this.lockManager = lockManager;
75 public void setEntityOwnershipService(EntityOwnershipService entityOwnershipService) {
76 this.entityOwnershipService = entityOwnershipService;
79 public void setBindingNormalizedNodeSerializer(BindingNormalizedNodeSerializer bindingNormalizedNodeSerializer) {
80 this.bindingNormalizedNodeSerializer = bindingNormalizedNodeSerializer;
84 public void onSessionInitiated(ProviderContext session) {
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);
100 LOG.info("NeutronvpnProvider Session Initiated");
101 } catch (Exception e) {
102 LOG.error("Error initializing services", e);
107 public void close() throws Exception {
108 portListener.close();
109 subnetListener.close();
110 routerListener.close();
111 networkListener.close();
112 bgpvpnListener.close();
114 l2GatewayProvider.close();
115 LOG.info("NeutronvpnProvider Closed");
119 public List<String> showNeutronPortsCLI() {
120 return nvManager.showNeutronPortsCLI();
124 public List<String> showVpnConfigCLI(Uuid vuuid) {
125 return nvManager.showVpnConfigCLI(vuuid);
129 public void addSubnetToVpn(Uuid vpnId, Uuid subnet) {
130 nvManager.addSubnetToVpn(vpnId, subnet);
134 public List<Uuid> getSubnetsforVpn(Uuid vpnid) {
135 return nvManager.getSubnetsforVpn(vpnid);
139 public void removeSubnetFromVpn(Uuid vpnId, Uuid subnet) {
140 nvManager.removeSubnetFromVpn(vpnId, subnet);
144 public Port getNeutronPort(String name) {
145 return nvManager.getNeutronPort(name);
149 public Port getNeutronPort(Uuid portId) {
150 return nvManager.getNeutronPort(portId);
154 public Subnet getNeutronSubnet(Uuid subnetId) {
155 return nvManager.getNeutronSubnet(subnetId);
159 public String uuidToTapPortName(Uuid id) {
160 return NeutronvpnUtils.uuidToTapPortName(id);
164 public IpAddress getNeutronSubnetGateway(Uuid subnetId) {
165 return nvManager.getNeutronSubnetGateway(subnetId);