To fix grep not working for tep:show &
[genius.git] / itm / itm-impl / src / main / java / org / opendaylight / genius / itm / cli / TepCommandHelper.java
index e5c3ee122d391f8117513b3b4f943b36eacb8bda..b263b5e960ccadb030ee9d17ccb7931614154470 100644 (file)
@@ -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<Subnets> subnetList = new ArrayList<>();
     private List<TransportZone> tZoneList = new ArrayList<>();
     private List<Vteps> vtepDelCommitList = new ArrayList<>();
-    private IInterfaceManager interfaceManager;
 
     // private List<InstanceIdentifier<? extends DataObject>> 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<SubnetObject, List<Vteps>> subVtepMapTemp = (Map<SubnetObject, List<Vteps>>) tZones.get(transportZone);
+            Map<SubnetObject, List<Vteps>> subVtepMapTemp = tZones.get(transportZone);
             if (subVtepMapTemp.containsKey(subObCli)) { // if Subnet exists
-                List<Vteps> vtepListTemp = (List<Vteps>) subVtepMapTemp.get(subObCli);
+                List<Vteps> 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<SubnetObject, List<Vteps>> subVtepMapTemp = (Map<SubnetObject, List<Vteps>>) tZones.get(tZ);
+            Map<SubnetObject, List<Vteps>> subVtepMapTemp = tZones.get(tZ);
             for (SubnetObject subOb : subVtepMapTemp.keySet()) {
                 List<Vteps> 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<TransportZone> tzonePath = InstanceIdentifier.builder(TransportZones.class)
                 .child(TransportZone.class, new TransportZoneKey(tzone)).build();
-        Optional<TransportZone> 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<TransportZone> tzonePath = InstanceIdentifier.builder(TransportZones.class)
-                .child(TransportZone.class, new TransportZoneKey(tzone)).build();
-        Optional<TransportZone> 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<TransportZones> path = InstanceIdentifier.builder(TransportZones.class).build();
-        Optional<TransportZones> 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<SubnetObject, List<Vteps>> 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<SubnetObject, List<Vteps>> subVtepMapTemp = (Map<SubnetObject, List<Vteps>>) tZones.get(tzone);
+            Map<SubnetObject, List<Vteps>> subVtepMapTemp = tZones.get(tzone);
             for (SubnetObject subOb : subVtepMapTemp.keySet()) {
                 List<Vteps> 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<SubnetObject, List<Vteps>> subVtepMapTemp = (Map<SubnetObject, List<Vteps>>) tZones.get(tZ);
+                    Map<SubnetObject, List<Vteps>> subVtepMapTemp = tZones.get(tZ);
                     for (SubnetObject subOb : subVtepMapTemp.keySet()) {
                         LOG.debug("subnets" + subOb.get_prefix());
                         List<Vteps> 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<Object> 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<InternalTunnel> tunnelLists = tunnels.getInternalTunnel();
+    public void showState(List<StateTunnelList> 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<org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface> ifStateId =
-                    ItmUtils.buildStateInterfaceId(tunnelInterfaceName);
-            Optional<org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.state.Interface> 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<Interface> trunkIdentifier = ItmUtils.buildId(tunnelInterfaceName);
-            Optional<Interface> 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<? extends TunnelTypeBase> 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<? extends TunnelTypeBase> 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<SubnetObject, List<Vteps>> subVtepMapTemp = (Map<SubnetObject, List<Vteps>>) tZones.get(transportZone);
+            Map<SubnetObject, List<Vteps>> subVtepMapTemp = tZones.get(transportZone);
             if (subVtepMapTemp.containsKey(subObCli)) { // if Subnet exists
-                List<Vteps> vtepListTemp = (List<Vteps>) subVtepMapTemp.get(subObCli);
+                List<Vteps> 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);
             }
         }