2 * Copyright (c) 2017 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
9 package org.opendaylight.netvirt.elan.l2gw.utils;
11 import java.util.Collections;
12 import java.util.List;
15 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
16 import org.opendaylight.controller.md.sal.common.api.clustering.EntityOwnershipService;
17 import org.opendaylight.infrautils.inject.AbstractLifecycle;
18 import org.opendaylight.netvirt.elan.utils.ElanClusterUtils;
19 import org.opendaylight.netvirt.elanmanager.api.IL2gwService;
20 import org.opendaylight.netvirt.neutronvpn.api.l2gw.L2GatewayDevice;
21 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress;
22 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Uuid;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rpcs.rev160406.ItmRpcService;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.l2gateways.rev150712.l2gateway.connections.attributes.l2gatewayconnections.L2gatewayConnection;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.neutron.l2gateways.rev150712.l2gateways.attributes.l2gateways.L2gateway;
26 import org.slf4j.Logger;
27 import org.slf4j.LoggerFactory;
30 * Created by eaksahu on 3/15/2017.
32 public class L2gwServiceProvider extends AbstractLifecycle implements IL2gwService {
34 private static final Logger LOG = LoggerFactory.getLogger(L2gwServiceProvider.class);
36 private final DataBroker dataBroker;
37 private final ItmRpcService itmRpcService;
38 private final L2GatewayConnectionUtils l2GatewayConnectionUtils;
39 private final EntityOwnershipService entityOwnershipService;
41 public L2gwServiceProvider(final DataBroker dataBroker, final EntityOwnershipService entityOwnershipService,
42 ItmRpcService itmRpcService, L2GatewayConnectionUtils l2GatewayConnectionUtils) {
43 this.dataBroker = dataBroker;
44 this.entityOwnershipService = entityOwnershipService;
45 this.itmRpcService = itmRpcService;
46 this.l2GatewayConnectionUtils = l2GatewayConnectionUtils;
50 public void provisionItmAndL2gwConnection(L2GatewayDevice l2GwDevice, String psName,
51 String hwvtepNodeId, IpAddress tunnelIpAddr) {
52 ElanClusterUtils.runOnlyInLeaderNode(entityOwnershipService,
53 "Handling Physical Switch add create itm tunnels ", () -> {
54 ElanL2GatewayUtils.createItmTunnels(itmRpcService, hwvtepNodeId, psName, tunnelIpAddr);
55 return Collections.emptyList();
58 List<L2gatewayConnection> l2GwConns = L2GatewayConnectionUtils.getAssociatedL2GwConnections(
59 dataBroker, l2GwDevice.getL2GatewayIds());
60 LOG.debug("L2GatewayConnections associated for {} physical switch", psName);
61 for (L2gatewayConnection l2GwConn : l2GwConns) {
62 LOG.trace("L2GatewayConnection {} changes executed on physical switch {}",
63 l2GwConn.getL2gatewayId(), psName);
64 l2GatewayConnectionUtils.addL2GatewayConnection(l2GwConn, psName);
69 public List<L2gatewayConnection> getL2GwConnectionsByL2GatewayId(Uuid l2GatewayId) {
70 return l2GatewayConnectionUtils.getL2GwConnectionsByL2GatewayId(dataBroker, l2GatewayId);
74 public void addL2GatewayConnection(L2gatewayConnection input) {
75 l2GatewayConnectionUtils.addL2GatewayConnection(input);
79 public void addL2GatewayConnection(L2gatewayConnection input,
80 String l2GwDeviceName,
81 L2gateway l2Gateway) {
82 l2GatewayConnectionUtils.addL2GatewayConnection(input, l2GwDeviceName, l2Gateway);
86 public List<L2gatewayConnection> getAssociatedL2GwConnections(DataBroker broker, Set<Uuid> l2GatewayIds) {
87 return L2GatewayConnectionUtils.getAssociatedL2GwConnections(dataBroker, l2GatewayIds);
91 protected void start() throws Exception {
92 LOG.info("Starting L2gwServiceProvider");
96 protected void stop() throws Exception {