2 * Copyright (c) 2016, 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
8 package org.opendaylight.genius.interfacemanager.renderer.hwvtep.confighelpers;
10 import static org.opendaylight.genius.infra.Datastore.CONFIGURATION;
11 import static org.opendaylight.mdsal.binding.api.WriteTransaction.CREATE_MISSING_PARENTS;
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;
32 public final class HwVTEPInterfaceConfigUpdateHelper {
33 private static final Logger LOG = LoggerFactory.getLogger(HwVTEPInterfaceConfigUpdateHelper.class);
35 private HwVTEPInterfaceConfigUpdateHelper() {
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());
43 // Create hwvtep through OVSDB plugin
44 if (globalNodeId != null) {
45 return updateBfdMonitoring(txRunner, globalNodeId, physicalSwitchNodeId, ifTunnel);
47 LOG.debug("specified physical switch is not connected {}", physicalSwitchNodeId);
48 return Collections.emptyList();
53 * BFD monitoring interval and enable/disable attributes can be modified
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);
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)));