X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;ds=sidebyside;f=nexthopmgr%2Fnexthopmgr-impl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fvpnservice%2Fnexthopmgr%2FOdlInterfaceChangeListener.java;fp=nexthopmgr%2Fnexthopmgr-impl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fvpnservice%2Fnexthopmgr%2FOdlInterfaceChangeListener.java;h=d5ddfd21936a95b106f8b02182389043413353a6;hb=b4b1b760287d5aa668c493b0a8f35e2ebae5ecd8;hp=49a7bdbbf43fd81b6ad60680709680f374b2dcb9;hpb=98d90be34e10a45f55e973a119a2f67a0e70a058;p=vpnservice.git diff --git a/nexthopmgr/nexthopmgr-impl/src/main/java/org/opendaylight/vpnservice/nexthopmgr/OdlInterfaceChangeListener.java b/nexthopmgr/nexthopmgr-impl/src/main/java/org/opendaylight/vpnservice/nexthopmgr/OdlInterfaceChangeListener.java index 49a7bdbb..d5ddfd21 100644 --- a/nexthopmgr/nexthopmgr-impl/src/main/java/org/opendaylight/vpnservice/nexthopmgr/OdlInterfaceChangeListener.java +++ b/nexthopmgr/nexthopmgr-impl/src/main/java/org/opendaylight/vpnservice/nexthopmgr/OdlInterfaceChangeListener.java @@ -9,18 +9,20 @@ package org.opendaylight.vpnservice.nexthopmgr; import java.math.BigInteger; + +import com.google.common.base.Optional; import org.opendaylight.controller.md.sal.binding.api.DataBroker; import org.opendaylight.controller.md.sal.binding.api.DataChangeListener; import org.opendaylight.controller.md.sal.common.api.data.AsyncDataBroker.DataChangeScope; import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; import org.opendaylight.vpnservice.interfacemgr.interfaces.IInterfaceManager; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.iana._if.type.rev140508.Tunnel; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpAddress; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.Interfaces; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface; -import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId; -import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.rev150331.BaseIds; -import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.rev150331.IfL3tunnel; -import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.rev150331.L3tunnel; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.InterfacesState; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.InterfaceKey; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface; +import org.opendaylight.yang.gen.v1.urn.opendaylight.vpnservice.interfacemgr.rev150331.IfTunnel; import org.opendaylight.yangtools.concepts.ListenerRegistration; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.slf4j.Logger; @@ -60,7 +62,7 @@ public class OdlInterfaceChangeListener extends AbstractDataChangeListener identifier, Interface intrf) { - LOG.trace("Adding Interface : key: " + identifier + ", value=" + intrf ); - - if (intrf.getType().equals(L3tunnel.class)) { - IfL3tunnel intfData = intrf.getAugmentation(IfL3tunnel.class); - IpAddress gatewayIp = intfData.getGatewayIp(); - IpAddress remoteIp = (gatewayIp == null) ? intfData.getRemoteIp() : gatewayIp; - NodeConnectorId ofPort = intrf.getAugmentation(BaseIds.class).getOfPortId(); - nexthopManager.createRemoteNextHop(intrf.getName(), ofPort.toString(), remoteIp.getIpv4Address().getValue()); + protected void add(InstanceIdentifier identifier, Interface interfaceInfo) { + LOG.trace("Adding Interface : key: " + identifier + ", value=" + interfaceInfo ); + // READ interface config information + org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface intrf = + getInterfaceFromConfigDS(nexthopManager, new InterfaceKey(interfaceInfo.getName())); + + if(intrf != null && intrf.getType().equals(Tunnel.class)){ + IfTunnel intfData = intrf.getAugmentation(IfTunnel.class); + IpAddress gatewayIp = intfData.getTunnelGateway(); + IpAddress remoteIp = (gatewayIp == null) ? intfData.getTunnelDestination() : gatewayIp; + nexthopManager.createRemoteNextHop(intrf.getName(), remoteIp.getIpv4Address().getValue()); } } - private InstanceIdentifier getWildCardPath() { - return InstanceIdentifier.create(Interfaces.class).child(Interface.class); + return InstanceIdentifier.create(InterfacesState.class).child(Interface.class); } @Override protected void remove(InstanceIdentifier identifier, - Interface intrf) { - LOG.trace("Removing interface : key: " + identifier + ", value=" + intrf ); - if (intrf.getType().equals(L3tunnel.class)) { + Interface interfaceInfo) { + LOG.trace("Removing interface : key: " + identifier + ", value=" + interfaceInfo ); + // READ interface config information + org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface intrf = + getInterfaceFromConfigDS(nexthopManager, new InterfaceKey(interfaceInfo.getName())); + + if (intrf != null && intrf.getType().equals(Tunnel.class)) { BigInteger dpnId = interfaceManager.getDpnForInterface(intrf); - IfL3tunnel intfData = intrf.getAugmentation(IfL3tunnel.class); - IpAddress gatewayIp = intfData.getGatewayIp(); - IpAddress remoteIp = (gatewayIp == null) ? intfData.getRemoteIp() : gatewayIp; + IfTunnel intfData = intrf.getAugmentation(IfTunnel.class); + IpAddress gatewayIp = intfData.getTunnelGateway(); + IpAddress remoteIp = (gatewayIp == null) ? intfData.getTunnelDestination() : gatewayIp; nexthopManager.removeRemoteNextHop(dpnId, intrf.getName(), remoteIp.getIpv4Address().getValue()); } } + public static org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface getInterfaceFromConfigDS(NexthopManager nexthopManager, InterfaceKey interfaceKey) { + InstanceIdentifier interfaceId = + getInterfaceIdentifier(interfaceKey); + Optional interfaceOptional = + nexthopManager.read(LogicalDatastoreType.CONFIGURATION, interfaceId); + if (!interfaceOptional.isPresent()) { + return null; + } + + return interfaceOptional.get(); + } + + public static InstanceIdentifier getInterfaceIdentifier(InterfaceKey interfaceKey) { + InstanceIdentifier.InstanceIdentifierBuilder interfaceInstanceIdentifierBuilder = + InstanceIdentifier.builder(Interfaces.class).child(org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface.class, interfaceKey); + return interfaceInstanceIdentifierBuilder.build(); + } + @Override protected void update(InstanceIdentifier identifier, Interface original, Interface update) {