Bulk merge of l2gw changes
[netvirt.git] / elanmanager / impl / src / main / java / org / opendaylight / netvirt / elan / l2gw / utils / L2gwServiceProvider.java
1 /*
2  * Copyright (c) 2017 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
9 package org.opendaylight.netvirt.elan.l2gw.utils;
10
11 import java.util.Collections;
12 import java.util.List;
13 import java.util.Set;
14 import javax.inject.Inject;
15 import javax.inject.Singleton;
16 import org.opendaylight.infrautils.inject.AbstractLifecycle;
17 import org.opendaylight.mdsal.binding.api.DataBroker;
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;
28
29 /**
30  * Created by eaksahu on 3/15/2017.
31  */
32 @Singleton
33 public class L2gwServiceProvider extends AbstractLifecycle implements IL2gwService {
34
35     private static final Logger LOG = LoggerFactory.getLogger(L2gwServiceProvider.class);
36
37     private final DataBroker dataBroker;
38     private final ItmRpcService itmRpcService;
39     private final L2GatewayConnectionUtils l2GatewayConnectionUtils;
40     private final ElanClusterUtils elanClusterUtils;
41
42     @Inject
43     public L2gwServiceProvider(final DataBroker dataBroker, final ElanClusterUtils elanClusterUtils,
44                                ItmRpcService itmRpcService, L2GatewayConnectionUtils l2GatewayConnectionUtils) {
45         this.dataBroker = dataBroker;
46         this.elanClusterUtils = elanClusterUtils;
47         this.itmRpcService = itmRpcService;
48         this.l2GatewayConnectionUtils = l2GatewayConnectionUtils;
49     }
50
51     @Override
52     public void provisionItmAndL2gwConnection(L2GatewayDevice l2GwDevice, String psName,
53                                               String hwvtepNodeId, IpAddress tunnelIpAddr) {
54         elanClusterUtils.runOnlyInOwnerNode(hwvtepNodeId, "Handling Physical Switch add create itm tunnels ",
55             () -> {
56                 LOG.info("Creating itm tunnel for {}", tunnelIpAddr);
57                 ElanL2GatewayUtils.createItmTunnels(dataBroker, itmRpcService, hwvtepNodeId, psName, tunnelIpAddr);
58                 return Collections.emptyList();
59             });
60
61         List<L2gatewayConnection> l2GwConns = L2GatewayConnectionUtils.getAssociatedL2GwConnections(
62                 dataBroker, l2GwDevice.getL2GatewayIds());
63         LOG.debug("L2GatewayConnections associated for {} physical switch", psName);
64         if (l2GwConns == null || l2GwConns.isEmpty()) {
65             LOG.info("No connections are provisioned for {} {} {}", l2GwDevice, psName, hwvtepNodeId);
66         }
67         for (L2gatewayConnection l2GwConn : l2GwConns) {
68             LOG.trace("L2GatewayConnection {} changes executed on physical switch {}",
69                     l2GwConn.getL2gatewayId(), psName);
70             l2GatewayConnectionUtils.addL2GatewayConnection(l2GwConn, psName);
71         }
72     }
73
74     @Override
75     public List<L2gatewayConnection> getL2GwConnectionsByL2GatewayId(Uuid l2GatewayId) {
76         return l2GatewayConnectionUtils.getL2GwConnectionsByL2GatewayId(l2GatewayId);
77     }
78
79     @Override
80     public void addL2GatewayConnection(L2gatewayConnection input) {
81         l2GatewayConnectionUtils.addL2GatewayConnection(input);
82     }
83
84     @Override
85     public void addL2GatewayConnection(L2gatewayConnection input,
86                                        String l2GwDeviceName,
87                                        L2gateway l2Gateway) {
88         l2GatewayConnectionUtils.addL2GatewayConnection(input, l2GwDeviceName, l2Gateway);
89     }
90
91     @Override
92     public List<L2gatewayConnection> getAssociatedL2GwConnections(Set<Uuid> l2GatewayIds) {
93         return L2GatewayConnectionUtils.getAssociatedL2GwConnections(dataBroker, l2GatewayIds);
94     }
95
96     @Override
97     protected void start() {
98         LOG.info("Starting L2gwServiceProvider");
99     }
100
101     @Override
102     protected void stop() {
103
104     }
105 }