67b14ae0f902d2e04e5b5f8e91b7c3f885f82f60
[genius.git] / interfacemanager / interfacemanager-impl / src / main / java / org / opendaylight / genius / interfacemanager / renderer / hwvtep / confighelpers / HwVTEPInterfaceConfigUpdateHelper.java
1 /*
2  * Copyright (c) 2016, 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 package org.opendaylight.genius.interfacemanager.renderer.hwvtep.confighelpers;
9
10 import static org.opendaylight.genius.infra.Datastore.CONFIGURATION;
11 import static org.opendaylight.mdsal.binding.api.WriteTransaction.CREATE_MISSING_PARENTS;
12
13 import com.google.common.util.concurrent.ListenableFuture;
14 import java.util.ArrayList;
15 import java.util.Collections;
16 import java.util.List;
17 import org.opendaylight.genius.infra.ManagedNewTransactionRunner;
18 import org.opendaylight.genius.interfacemanager.renderer.hwvtep.utilities.SouthboundUtils;
19 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rev160406.IfTunnel;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.HwvtepPhysicalLocatorRef;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.hwvtep.physical._switch.attributes.Tunnels;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.hwvtep.physical._switch.attributes.TunnelsBuilder;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.hwvtep.physical._switch.attributes.TunnelsKey;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.hwvtep.tunnel.attributes.BfdParams;
26 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
27 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.node.TerminationPoint;
28 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
29 import org.slf4j.Logger;
30 import org.slf4j.LoggerFactory;
31
32 public final class HwVTEPInterfaceConfigUpdateHelper {
33     private static final Logger LOG = LoggerFactory.getLogger(HwVTEPInterfaceConfigUpdateHelper.class);
34
35     private HwVTEPInterfaceConfigUpdateHelper() {
36     }
37
38     public static List<ListenableFuture<Void>> updateConfiguration(ManagedNewTransactionRunner txRunner,
39             InstanceIdentifier<Node> physicalSwitchNodeId, InstanceIdentifier<Node> globalNodeId,
40             Interface interfaceNew, IfTunnel ifTunnel) {
41         LOG.info("updating hwvtep configuration for {}", interfaceNew.getName());
42
43         // Create hwvtep through OVSDB plugin
44         if (globalNodeId != null) {
45             return updateBfdMonitoring(txRunner, globalNodeId, physicalSwitchNodeId, ifTunnel);
46         } else {
47             LOG.debug("specified physical switch is not connected {}", physicalSwitchNodeId);
48             return Collections.emptyList();
49         }
50     }
51
52     /*
53      * BFD monitoring interval and enable/disable attributes can be modified
54      */
55     public static List<ListenableFuture<Void>> updateBfdMonitoring(ManagedNewTransactionRunner txRunner,
56             InstanceIdentifier<Node> globalNodeId, InstanceIdentifier<Node> physicalSwitchId, IfTunnel ifTunnel) {
57         TunnelsBuilder tunnelsBuilder = new TunnelsBuilder();
58         InstanceIdentifier<TerminationPoint> localTEPInstanceIdentifier = SouthboundUtils
59                 .createTEPInstanceIdentifier(globalNodeId, ifTunnel.getTunnelSource());
60         InstanceIdentifier<TerminationPoint> remoteTEPInstanceIdentifier = SouthboundUtils
61                 .createTEPInstanceIdentifier(globalNodeId, ifTunnel.getTunnelDestination());
62         InstanceIdentifier<Tunnels> tunnelsInstanceIdentifier = SouthboundUtils.createTunnelsInstanceIdentifier(
63                 physicalSwitchId, localTEPInstanceIdentifier, remoteTEPInstanceIdentifier);
64
65         LOG.debug("updating bfd monitoring parameters for the hwvtep {}", tunnelsInstanceIdentifier);
66         tunnelsBuilder.withKey(new TunnelsKey(new HwvtepPhysicalLocatorRef(localTEPInstanceIdentifier),
67                 new HwvtepPhysicalLocatorRef(remoteTEPInstanceIdentifier)));
68         List<BfdParams> bfdParams = new ArrayList<>();
69         SouthboundUtils.fillBfdParameters(bfdParams, ifTunnel);
70         tunnelsBuilder.setBfdParams(bfdParams);
71         return Collections.singletonList(txRunner.callWithNewWriteOnlyTransactionAndSubmit(CONFIGURATION,
72             tx -> tx.merge(tunnelsInstanceIdentifier, tunnelsBuilder.build(), CREATE_MISSING_PARENTS)));
73     }
74 }