+ private static boolean TunnelMonitoringAttributesModified(Interface interfaceOld, Interface interfaceNew) {
+ IfTunnel ifTunnelOld = interfaceOld.getAugmentation(IfTunnel.class);
+ IfTunnel ifTunnelNew = interfaceNew.getAugmentation(IfTunnel.class);
+ if (checkAugmentations(ifTunnelOld, ifTunnelNew)) {
+ return true;
+ }
+ return false;
+ }
+
+ /*
+ * if the tunnel monitoring attributes have changed, handle it based on the tunnel type.
+ * As of now internal vxlan tunnels use LLDP monitoring and external tunnels use BFD monitoring.
+ */
+ private static void handleTunnelMonitorUpdates(List<ListenableFuture<Void>> futures, WriteTransaction transaction,
+ AlivenessMonitorService alivenessMonitorService,
+ Interface interfaceNew, Interface interfaceOld, DataBroker dataBroker){
+ LOG.debug("tunnel monitoring attributes modified for interface {}", interfaceNew.getName());
+ // update termination point on switch, if switch is connected
+ BridgeRefEntry bridgeRefEntry =
+ InterfaceMetaUtils.getBridgeReferenceForInterface(interfaceNew, dataBroker);
+ if(InterfaceMetaUtils.bridgeExists(bridgeRefEntry, dataBroker)) {
+ SouthboundUtils.updateBfdParamtersForTerminationPoint(bridgeRefEntry.getBridgeReference().getValue(),
+ interfaceNew.getAugmentation(IfTunnel.class),
+ interfaceNew.getName(), transaction);
+ }
+
+ // stop tunnel monitoring if admin state is disabled for an internal vxlan trunk interface
+ if(interfaceOld.isEnabled() && !interfaceNew.isEnabled()) {
+ AlivenessMonitorUtils.stopLLDPMonitoring(alivenessMonitorService, dataBroker, interfaceNew);
+ }else{
+ AlivenessMonitorUtils.handleTunnelMonitorUpdates(alivenessMonitorService, dataBroker, interfaceOld, interfaceNew);
+ }
+ futures.add(transaction.submit());
+ }
+
+ private static void handleInterfaceAdminStateUpdates(List<ListenableFuture<Void>> futures, WriteTransaction transaction,
+ Interface interfaceNew, DataBroker dataBroker,
+ org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface ifState){
+ OperStatus operStatus = InterfaceManagerCommonUtils.updateStateEntry(interfaceNew, dataBroker, transaction, ifState);
+
+ IfL2vlan ifL2vlan = interfaceNew.getAugmentation(IfL2vlan.class);
+ if (ifL2vlan == null || (IfL2vlan.L2vlanMode.Trunk != ifL2vlan.getL2vlanMode() && IfL2vlan.L2vlanMode.Transparent != ifL2vlan.getL2vlanMode())) {
+ futures.add(transaction.submit());
+ return;
+ }
+
+ InterfaceParentEntryKey interfaceParentEntryKey = new InterfaceParentEntryKey(interfaceNew.getName());
+ InterfaceParentEntry interfaceParentEntry =
+ InterfaceMetaUtils.getInterfaceParentEntryFromConfigDS(interfaceParentEntryKey, dataBroker);
+ if (interfaceParentEntry == null || interfaceParentEntry.getInterfaceChildEntry() == null) {
+ futures.add(transaction.submit());
+ return;
+ }
+
+ for (InterfaceChildEntry interfaceChildEntry : interfaceParentEntry.getInterfaceChildEntry()) {
+ InterfaceManagerCommonUtils.updateOperStatus(interfaceChildEntry.getChildInterface(), operStatus, transaction);
+ }
+ }
+