X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=vpnservice.git;a=blobdiff_plain;f=interfacemgr%2Finterfacemgr-impl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fvpnservice%2Finterfacemgr%2Frenderer%2Fhwvtep%2Fstatehelpers%2FHwVTEPInterfaceStateUpdateHelper.java;fp=interfacemgr%2Finterfacemgr-impl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fvpnservice%2Finterfacemgr%2Frenderer%2Fhwvtep%2Fstatehelpers%2FHwVTEPInterfaceStateUpdateHelper.java;h=f796f1e391a1b3ad18caec4c18d84dee2a980ece;hp=0000000000000000000000000000000000000000;hb=8025297a9d760ee5add270ad673d4adc5b41d79f;hpb=769edd5c7e8cfa0a13a2f8e442270978f649b83f;ds=sidebyside diff --git a/interfacemgr/interfacemgr-impl/src/main/java/org/opendaylight/vpnservice/interfacemgr/renderer/hwvtep/statehelpers/HwVTEPInterfaceStateUpdateHelper.java b/interfacemgr/interfacemgr-impl/src/main/java/org/opendaylight/vpnservice/interfacemgr/renderer/hwvtep/statehelpers/HwVTEPInterfaceStateUpdateHelper.java new file mode 100644 index 00000000..f796f1e3 --- /dev/null +++ b/interfacemgr/interfacemgr-impl/src/main/java/org/opendaylight/vpnservice/interfacemgr/renderer/hwvtep/statehelpers/HwVTEPInterfaceStateUpdateHelper.java @@ -0,0 +1,94 @@ +/* + * Copyright (c) 2016 Ericsson India Global Services Pvt Ltd. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.opendaylight.vpnservice.interfacemgr.renderer.hwvtep.statehelpers; + +import com.google.common.util.concurrent.ListenableFuture; +import org.opendaylight.controller.md.sal.binding.api.DataBroker; +import org.opendaylight.controller.md.sal.binding.api.WriteTransaction; +import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; +import org.opendaylight.vpnservice.interfacemgr.commons.InterfaceManagerCommonUtils; +import org.opendaylight.vpnservice.interfacemgr.commons.InterfaceMetaUtils; +import org.opendaylight.vpnservice.interfacemgr.renderer.hwvtep.utilities.SouthboundUtils; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.hwvtep.physical._switch.attributes.Tunnels; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.hwvtep.physical._switch.attributes.TunnelsBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.hwvtep.physical._switch.attributes.TunnelsKey; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.hwvtep.tunnel.attributes.BfdParams; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.hwvtep.rev150901.hwvtep.tunnel.attributes.BfdStatus; +import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.ArrayList; +import java.util.List; + +public class HwVTEPInterfaceStateUpdateHelper { + private static final Logger LOG = LoggerFactory.getLogger(HwVTEPInterfaceStateUpdateHelper.class); + + public static List> updatePhysicalSwitch(DataBroker dataBroker, InstanceIdentifier tunnelsInstanceIdentifier, + Tunnels tunnelsNew, Tunnels tunnelsOld) { + List> futures = new ArrayList>(); + LOG.debug("updating physical switch for tunnels"); + String interfaceName = + InterfaceMetaUtils.getInterfaceForTunnelInstanceIdentifier(tunnelsInstanceIdentifier.toString(), dataBroker); + if (interfaceName == null) { + return futures; + } + + // update opstate of interface if TEP has gone down/up as a result of BFD monitoring + WriteTransaction transaction = dataBroker.newWriteOnlyTransaction(); + InterfaceManagerCommonUtils.updateOpState(transaction, interfaceName, getTunnelOpState(tunnelsNew.getBfdStatus())); + futures.add(transaction.submit()); + return futures; + } + + private static org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface.OperStatus + getTunnelOpState(List tunnelBfdStatus) { + org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface.OperStatus + livenessState = org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface.OperStatus.Down; + if (tunnelBfdStatus != null && !tunnelBfdStatus.isEmpty()) { + for (BfdStatus bfdState : tunnelBfdStatus) { + if (bfdState.getBfdStatusKey().equalsIgnoreCase(SouthboundUtils.BFD_OP_STATE)) { + String bfdOpState = bfdState.getBfdStatusValue(); + if (bfdOpState.equalsIgnoreCase(SouthboundUtils.BFD_STATE_UP)) { + livenessState = org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface.OperStatus.Up; + } else { + livenessState = org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface.OperStatus.Down; + } + break; + } + } + } + return livenessState; + } + + + public static List> startBfdMonitoring(DataBroker dataBroker, + InstanceIdentifier tunnelsInstanceIdentifier, + Tunnels tunnelsNew) { + List> futures = new ArrayList>(); + /*String interfaceName = + InterfaceMetaUtils.getInterfaceForTunnelInstanceIdentifier(tunnelsInstanceIdentifier.toString(), dataBroker); + if (interfaceName == null) { + LOG.debug("no interface configured for the tunnel {}", tunnelsInstanceIdentifier); + return futures; + }*/ + + LOG.debug("starting bfd monitoring for the hwvtep {}", tunnelsInstanceIdentifier); + WriteTransaction transaction = dataBroker.newWriteOnlyTransaction(); + TunnelsBuilder tBuilder = new TunnelsBuilder(); + tBuilder.setKey(new TunnelsKey(tunnelsNew.getLocalLocatorRef(), tunnelsNew.getRemoteLocatorRef())); + tBuilder.setLocalLocatorRef(tunnelsNew.getLocalLocatorRef()); + tBuilder.setRemoteLocatorRef(tunnelsNew.getLocalLocatorRef()); + List bfdParams = new ArrayList<>(); + SouthboundUtils.fillBfdParameters(bfdParams, null); + tBuilder.setBfdParams(bfdParams); + transaction.put(LogicalDatastoreType.CONFIGURATION, tunnelsInstanceIdentifier,tBuilder.build(), true); + futures.add(transaction.submit()); + return futures; + } +}