X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=itm%2Fitm-impl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fgenius%2Fitm%2Fcli%2FTepCommandHelper.java;h=b263b5e960ccadb030ee9d17ccb7931614154470;hb=a68ccca293b0c52c728d11e5fba5b70716c14852;hp=e5c3ee122d391f8117513b3b4f943b36eacb8bda;hpb=0a27a8f01db8289e59f5e861cd9a23d278d2524c;p=genius.git diff --git a/itm/itm-impl/src/main/java/org/opendaylight/genius/itm/cli/TepCommandHelper.java b/itm/itm-impl/src/main/java/org/opendaylight/genius/itm/cli/TepCommandHelper.java index e5c3ee122..b263b5e96 100644 --- a/itm/itm-impl/src/main/java/org/opendaylight/genius/itm/cli/TepCommandHelper.java +++ b/itm/itm-impl/src/main/java/org/opendaylight/genius/itm/cli/TepCommandHelper.java @@ -14,33 +14,34 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; +import javax.annotation.PostConstruct; +import javax.annotation.PreDestroy; +import javax.inject.Inject; +import javax.inject.Singleton; import org.apache.commons.net.util.SubnetUtils; import org.apache.felix.service.command.CommandSession; import org.opendaylight.controller.md.sal.binding.api.DataBroker; import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; -import org.opendaylight.genius.interfacemanager.interfaces.IInterfaceManager; import org.opendaylight.genius.itm.globals.ITMConstants; import org.opendaylight.genius.itm.impl.ItmUtils; import org.opendaylight.genius.mdsalutil.MDSALDataStoreUtils; +import org.opendaylight.genius.utils.cache.DataStoreCache; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpPrefix; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface.AdminStatus; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface.OperStatus; -import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rev160406.IfL2vlan; -import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rev160406.IfTunnel; import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rev160406.TunnelMonitoringTypeBase; import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rev160406.TunnelMonitoringTypeBfd; import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rev160406.TunnelMonitoringTypeLldp; import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rev160406.TunnelTypeBase; import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rev160406.TunnelTypeGre; +import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rev160406.TunnelTypeMplsOverGre; import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.interfacemanager.rev160406.TunnelTypeVxlan; import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.config.rev160406.TunnelMonitorInterval; import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.config.rev160406.TunnelMonitorIntervalBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.config.rev160406.TunnelMonitorParams; import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.config.rev160406.TunnelMonitorParamsBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.TunnelList; -import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.tunnel.list.InternalTunnel; +import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.TepTypeInternal; +import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.TunnelOperStatus; +import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.op.rev160406.tunnels_state.StateTunnelList; import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.TransportZones; import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.TransportZonesBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.genius.itm.rev160406.transport.zones.TransportZone; @@ -57,13 +58,11 @@ import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -//import org.opendaylight.genius.interfacemgr.util.OperationalIfmUtil; - - +@Singleton public class TepCommandHelper { private static final Logger LOG = LoggerFactory.getLogger(TepCommandHelper.class); - private DataBroker dataBroker; + private final DataBroker dataBroker; static int check = 0; static short flag = 0; /* @@ -75,19 +74,24 @@ public class TepCommandHelper { private List subnetList = new ArrayList<>(); private List tZoneList = new ArrayList<>(); private List vtepDelCommitList = new ArrayList<>(); - private IInterfaceManager interfaceManager; // private List> vtepPaths = new // ArrayList<>(); - - public TepCommandHelper(final DataBroker broker) { - this.dataBroker = broker; + @Inject + public TepCommandHelper(final DataBroker dataBroker) { + this.dataBroker = dataBroker; } + @PostConstruct + public void start() { + configureTunnelType(ITMConstants.DEFAULT_TRANSPORT_ZONE,ITMConstants.TUNNEL_TYPE_VXLAN); + LOG.info("TepCommandHelper Started"); + } - public void setInterfaceManager(IInterfaceManager interfaceManager) { - this.interfaceManager = interfaceManager; + @PreDestroy + public void close() { + LOG.info("TepCommandHelper Closed"); } public void createLocalCache(BigInteger dpnId, String portName, Integer vlanId, String ipAddress, @@ -135,9 +139,9 @@ public class TepCommandHelper { SubnetsKey subnetsKey = new SubnetsKey(subnetMaskObj); SubnetObject subObCli = new SubnetObject(gatewayIpObj, subnetsKey, subnetMaskObj, vlanId); if (tZones.containsKey(transportZone)) { - Map> subVtepMapTemp = (Map>) tZones.get(transportZone); + Map> subVtepMapTemp = tZones.get(transportZone); if (subVtepMapTemp.containsKey(subObCli)) { // if Subnet exists - List vtepListTemp = (List) subVtepMapTemp.get(subObCli); + List vtepListTemp = subVtepMapTemp.get(subObCli); if (vtepListTemp.contains(vtepCli)) { // do nothing } else { @@ -188,7 +192,7 @@ public class TepCommandHelper { // Checking for duplicates in local cache for (String tZ : tZones.keySet()) { boolean isGreType = isGreTunnelType(tZ, tZoneMap); - Map> subVtepMapTemp = (Map>) tZones.get(tZ); + Map> subVtepMapTemp = tZones.get(tZ); for (SubnetObject subOb : subVtepMapTemp.keySet()) { List vtepList = subVtepMapTemp.get(subOb); validateForDuplicateAndSingleGreTep(inputVtep, isConfiguredTepGreType, isGreType, vtepList); @@ -219,9 +223,8 @@ public class TepCommandHelper { if (isConfiguredTepGreType && isGreType) { for (Vteps vtep : vtepList) { if (vtep.getDpnId().equals(dpnId)) { - String errMsg = new StringBuilder("DPN [").append(dpnId) - .append("] already configured with GRE TEP. Mutiple GRE TEP's on a single DPN are not allowed.") - .toString(); + String errMsg = "DPN [" + dpnId + + "] already configured with GRE TEP. Mutiple GRE TEP's on a single DPN are not allowed."; Preconditions.checkArgument(false, errMsg); } } @@ -260,10 +263,7 @@ public class TepCommandHelper { return true; } */ - if( (tzone != null) && (tzone.getTunnelType()).equals(TunnelTypeGre.class) ) { - return true; - } - return false; + return (tzone != null) && (tzone.getTunnelType()).equals(TunnelTypeGre.class); } /** @@ -276,30 +276,7 @@ public class TepCommandHelper { public TransportZone getTransportZone(String tzone) { InstanceIdentifier tzonePath = InstanceIdentifier.builder(TransportZones.class) .child(TransportZone.class, new TransportZoneKey(tzone)).build(); - Optional tZoneOptional = ItmUtils.read(LogicalDatastoreType.CONFIGURATION, tzonePath, - dataBroker); - if (tZoneOptional.isPresent()) { - return tZoneOptional.get(); - } - return null; - } - - /** - * Gets the transport zone from config ds. - * - * @param tzone - * the tzone - * @return the transport zone - */ - public TransportZone getTransportZoneFromConfigDS(String tzone) { - InstanceIdentifier tzonePath = InstanceIdentifier.builder(TransportZones.class) - .child(TransportZone.class, new TransportZoneKey(tzone)).build(); - Optional tZoneOptional = ItmUtils.read(LogicalDatastoreType.CONFIGURATION, tzonePath, - dataBroker); - if (tZoneOptional.isPresent()) { - return tZoneOptional.get(); - } - return null; + return ItmUtils.read(LogicalDatastoreType.CONFIGURATION, tzonePath, dataBroker).orNull(); } /** @@ -309,11 +286,7 @@ public class TepCommandHelper { */ public TransportZones getAllTransportZones() { InstanceIdentifier path = InstanceIdentifier.builder(TransportZones.class).build(); - Optional tZonesOptional = ItmUtils.read(LogicalDatastoreType.CONFIGURATION, path, dataBroker); - if (tZonesOptional.isPresent()) { - return tZonesOptional.get(); - } - return null; + return ItmUtils.read(LogicalDatastoreType.CONFIGURATION, path, dataBroker).orNull(); } public boolean checkExistingSubnet(Map> subVtepMapTemp, SubnetObject subObCli) { @@ -331,7 +304,7 @@ public class TepCommandHelper { public boolean checkTepPerTzPerDpn(String tzone, BigInteger dpnId) { // check in local cache if (tZones.containsKey(tzone)) { - Map> subVtepMapTemp = (Map>) tZones.get(tzone); + Map> subVtepMapTemp = tZones.get(tzone); for (SubnetObject subOb : subVtepMapTemp.keySet()) { List vtepList = subVtepMapTemp.get(subOb); for (Vteps vtep : vtepList) @@ -373,7 +346,7 @@ public class TepCommandHelper { for (String tZ : tZones.keySet()) { LOG.debug("tZones" + tZ); subnetList = new ArrayList<>(); - Map> subVtepMapTemp = (Map>) tZones.get(tZ); + Map> subVtepMapTemp = tZones.get(tZ); for (SubnetObject subOb : subVtepMapTemp.keySet()) { LOG.debug("subnets" + subOb.get_prefix()); List vtepList = subVtepMapTemp.get(subOb); @@ -470,24 +443,42 @@ public class TepCommandHelper { result.add(String.format("%-16s %-16s %-16s %-12s %-12s %-12s %-16s %-12s", tZ.getZoneName(), strTunnelType, sub .getPrefix().getIpv4Prefix().getValue(), sub.getGatewayIp().getIpv4Address() .getValue(), sub.getVlanId().toString(), vtep.getDpnId().toString(), vtep - .getIpAddress().getIpv4Address().getValue(), vtep.getPortname().toString())); + .getIpAddress().getIpv4Address().getValue(), vtep.getPortname())); } } } - if (flag == true) { - for (String p : result) { - if(session != null) { - session.getConsole().println(p); + if (session != null) { + if (flag) { + for (String p : result) { + System.out.println(p); } + } else { + System.out.println("No teps to display"); } - } else if (session != null) { - session.getConsole().println("No teps to display"); } } else if(session != null){ - session.getConsole().println("No teps configured"); + System.out.println("No teps configured"); } } +public void showCache(String cacheName) { + + if( !DataStoreCache.isCacheValid(cacheName)) { + System.out.println( " " + cacheName + " is not a valid Cache Name ") ; + return ; + } + List keys = null ; + keys = DataStoreCache.getKeys(cacheName); + if( keys != null && !keys.isEmpty()) { + System.out.println( "Dumping the data in cache for " + cacheName ) ; + for( Object key : keys ) { + System.out.println( " KEY: " + key + " Value: " + DataStoreCache.get(cacheName, key) ) ; + System.out.println() ; + } + + }else + System.out.println( "No data in cache for " + cacheName ) ; + } public void deleteVtep(BigInteger dpnId, String portName, Integer vlanId, String ipAddress, String subnetMask, String gatewayIp, String transportZone,CommandSession session) throws TepException { @@ -547,15 +538,15 @@ public class TepCommandHelper { vtepDelCommitList.add(vtepCli); } else if(session != null) { - session.getConsole().println(String.format("vtep with this vlan or gateway doesnt exist")); + session.getConsole().println("vtep with this vlan or gateway doesnt exist"); } } } else if(session != null) { - session.getConsole().println(String.format("Vtep with this ipaddress doesnt exist")); + session.getConsole().println("Vtep with this ipaddress doesnt exist"); } } else if(session != null) { - session.getConsole().println(String.format("Vtep Doesnt exist")); + session.getConsole().println("Vtep Doesnt exist"); } } } @@ -646,10 +637,7 @@ public class TepCommandHelper { } } - public void showState(TunnelList tunnels, boolean tunnelMonitorEnabled, CommandSession session) throws TepException { - IfTunnel tunnelInterface = null; - IfL2vlan l2Vlan = null; - List tunnelLists = tunnels.getInternalTunnel(); + public void showState(List tunnelLists, boolean tunnelMonitorEnabled,CommandSession session) throws TepException{ if (tunnelLists == null || tunnelLists.isEmpty()) { handleError("No Internal Tunnels Exist", session); return; @@ -659,48 +647,32 @@ public class TepCommandHelper { session.getConsole().println("Tunnel Monitoring is Off"); } } - String displayFormat = "%-16s %-16s %-16s %-16s %-16s %-8s %-10s %-10s"; - if(session != null) { - session.getConsole().println(String.format(displayFormat, "Tunnel Name", "Source-DPN", - "Destination-DPN", "Source-IP", "Destination-IP", "Vlan Id", "Trunk-State", "Transport Type")); - session.getConsole().println("-------------------------------------------------------------------------------------------------------------------------------------"); - - } - for (InternalTunnel tunnel : tunnelLists) { - String tunnelInterfaceName = tunnel.getTunnelInterfaceName(); - LOG.trace("tunnelInterfaceName::: {}", tunnelInterfaceName); - - InstanceIdentifier ifStateId = - ItmUtils.buildStateInterfaceId(tunnelInterfaceName); - Optional ifStateOptional = - ItmUtils.read(LogicalDatastoreType.OPERATIONAL, ifStateId, dataBroker); - String tunnelState = "DOWN" ; - if (ifStateOptional.isPresent()) { - org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface iface = ifStateOptional.get() ; - if(iface.getAdminStatus() == AdminStatus.Up && iface.getOperStatus() == OperStatus.Up) - tunnelState = "UP" ; - } - InstanceIdentifier trunkIdentifier = ItmUtils.buildId(tunnelInterfaceName); - Optional ifaceObj = ItmUtils.read(LogicalDatastoreType.CONFIGURATION, trunkIdentifier, dataBroker) ; - if (ifaceObj.isPresent()) { - l2Vlan = (IfL2vlan) ifaceObj.get().getAugmentation(IfL2vlan.class); - tunnelInterface = (IfTunnel) ifaceObj.get().getAugmentation(IfTunnel.class); - - Class tunType = tunnelInterface.getTunnelInterfaceType(); + String displayFormat = "%-16s %-16s %-16s %-16s %-16s %-10s %-10s"; + System.out.println(String.format(displayFormat, "Tunnel Name", "Source-DPN", + "Destination-DPN", "Source-IP", "Destination-IP", "Trunk-State", "Transport Type")); + System.out.println("-------------------------------------------------------------------------------------------------------------------------------------"); + + for (StateTunnelList tunnelInst : tunnelLists) { + // Display only the internal tunnels + if( tunnelInst.getDstInfo().getTepDeviceType().equals(TepTypeInternal.class)) { + String tunnelInterfaceName = tunnelInst.getTunnelInterfaceName(); + LOG.trace("tunnelInterfaceName::: {}", tunnelInterfaceName); + String tunnelState = ITMConstants.TUNNEL_STATE_UNKNOWN; + if (tunnelInst.getOperState() == TunnelOperStatus.Up) + tunnelState = ITMConstants.TUNNEL_STATE_UP; + else if (tunnelInst.getOperState() == TunnelOperStatus.Down ) + tunnelState = ITMConstants.TUNNEL_STATE_DOWN; + Class tunType = tunnelInst.getTransportType(); String tunnelType = ITMConstants.TUNNEL_TYPE_VXLAN; if( tunType.equals(TunnelTypeVxlan.class)) tunnelType = ITMConstants.TUNNEL_TYPE_VXLAN ; else if( tunType.equals(TunnelTypeGre.class) ) tunnelType = ITMConstants.TUNNEL_TYPE_GRE ; - int vlanId = 0; - if( l2Vlan != null ) { - vlanId = l2Vlan.getVlanId().getValue() ; - } - if(session != null) { - session.getConsole().println(String.format(displayFormat, tunnel.getTunnelInterfaceName(), tunnel - .getSourceDPN().toString(), tunnel.getDestinationDPN().toString(), tunnelInterface.getTunnelSource().getIpv4Address().getValue(), tunnelInterface.getTunnelDestination().getIpv4Address().getValue(), vlanId, tunnelState, + else if (tunType.equals(TunnelTypeMplsOverGre.class)) + tunnelType = ITMConstants.TUNNEL_TYPE_MPLSoGRE; + System.out.println(String.format(displayFormat, tunnelInst.getTunnelInterfaceName(), tunnelInst.getSrcInfo().getTepDeviceId(), + tunnelInst.getDstInfo().getTepDeviceId(), tunnelInst.getSrcInfo().getTepIp().getIpv4Address().getValue(), tunnelInst.getDstInfo().getTepIp().getIpv4Address().getValue(), tunnelState, tunnelType)); - } } } } @@ -725,9 +697,9 @@ public class TepCommandHelper { SubnetObject subObCli = new SubnetObject(gatewayIpObj, subnetsKey, subnetMaskObj, vlanId); if (tZones.containsKey(transportZone)) { - Map> subVtepMapTemp = (Map>) tZones.get(transportZone); + Map> subVtepMapTemp = tZones.get(transportZone); if (subVtepMapTemp.containsKey(subObCli)) { // if Subnet exists - List vtepListTemp = (List) subVtepMapTemp.get(subObCli); + List vtepListTemp = subVtepMapTemp.get(subObCli); if (vtepListTemp.contains(vtepCli)) { exists = true; // return true if tzones has vtep vtepListTemp.remove(vtepCli); @@ -748,7 +720,7 @@ public class TepCommandHelper { public void configureTunnelType(String tZoneName, String tunnelType) { LOG.debug("configureTunnelType {} for transportZone {}", tunnelType, tZoneName); - TransportZone tZoneFromConfigDS = getTransportZoneFromConfigDS(tZoneName); + TransportZone tZoneFromConfigDS = ItmUtils.getTransportZoneFromConfigDS(tZoneName, dataBroker); validateTunnelType(tZoneName, tunnelType,tZoneFromConfigDS); if (tZoneFromConfigDS != null) { @@ -816,10 +788,10 @@ public class TepCommandHelper { // if (tZone != null) { if (tZoneFromConfigDS != null) { if( (!tZoneFromConfigDS.getTunnelType().equals(tunType)) && ItmUtils.isNotEmpty(tZoneFromConfigDS.getSubnets())) { - String errorMsg = new StringBuilder("Changing the tunnel type from ").append(tZoneFromConfigDS.getTunnelType()) - .append(" to ").append(strTunnelType) - .append(" is not allowed for already configured transport zone [").append(tZoneName) - .append("].").toString(); + String errorMsg = "Changing the tunnel type from " + tZoneFromConfigDS.getTunnelType() + + " to " + strTunnelType + + " is not allowed for already configured transport zone [" + tZoneName + + "]."; Preconditions.checkArgument(false, errorMsg); } }