verify L2/L3 configuration cannot be done under traffic 73/5173/1
authorimarom <[email protected]>
Mon, 19 Dec 2016 06:52:08 +0000 (08:52 +0200)
committerimarom <[email protected]>
Mon, 19 Dec 2016 06:52:37 +0000 (08:52 +0200)
also ping and arp

Signed-off-by: imarom <[email protected]>
scripts/automation/trex_control_plane/stl/trex_stl_lib/trex_stl_client.py
scripts/automation/trex_control_plane/stl/trex_stl_lib/trex_stl_port.py
src/rpc-server/commands/trex_rpc_cmd_general.cpp
src/stateless/cp/trex_stateless_port.cpp

index 945aacd..743ff27 100755 (executable)
@@ -2973,11 +2973,6 @@ class STLClient(object):
         ports = ports if ports is not None else self.get_resolvable_ports()
         ports = self._validate_port_list(ports)
             
-        active_ports = list_intersect(ports, self.get_active_ports())
-        if active_ports:
-            raise STLError('Port(s) {0} are active, please stop them before resolving'.format(active_ports))
-                     
-        
         self.logger.pre_cmd('Resolving destination on port(s) {0}:'.format(ports))
         with self.logger.supress():
             rc = self.__resolve(ports, retries)
index 487f305..66d8be2 100644 (file)
@@ -114,7 +114,7 @@ class Port(object):
                 return port.err("{0} - port is not owned".format(func.__name__))
 
             if not port.is_writeable():
-                return port.err("{0} - port is not in a writeable state".format(func.__name__))
+                return port.err("{0} - port is active, please stop the port before executing command".format(func.__name__))
 
             return func(*args, **kwargs)
 
@@ -123,7 +123,7 @@ class Port(object):
 
 
     def err(self, msg):
-        return RC_ERR("port {0} : {1}\n".format(self.port_id, msg))
+        return RC_ERR("port {0} : *** {1}".format(self.port_id, msg))
 
     def ok(self, data = ""):
         return RC_OK(data)
@@ -519,7 +519,7 @@ class Port(object):
 
         return self.ok()
      
-    @owned
+    @writeable
     def set_l2_mode (self, dst_mac):
         if not self.is_service_mode_on():
             return self.err('port service mode must be enabled for configuring L2 mode. Please enable service mode')
@@ -535,7 +535,7 @@ class Port(object):
         return self.sync()
         
         
-    @owned
+    @writeable
     def set_l3_mode (self, src_addr, dest_addr, resolved_mac = None):
         if not self.is_service_mode_on():
             return self.err('port service mode must be enabled for configuring L3 mode. Please enable service mode')
index c8b4841..f936f94 100644 (file)
@@ -799,7 +799,11 @@ TrexRpcCmdSetL2::_run(const Json::Value &params, Json::Value &result) {
         generate_parse_err(result, ss.str());
     }
     
-    port->set_l2_mode(dst_mac);
+    try {
+        port->set_l2_mode(dst_mac);
+    } catch (const TrexException &ex) {
+        generate_execute_err(result, ex.what());
+    }
     
     return (TREX_RPC_CMD_OK);
 }
@@ -844,11 +848,19 @@ TrexRpcCmdSetL3::_run(const Json::Value &params, Json::Value &result) {
             generate_parse_err(result, ss.str());
         } 
     
-        port->set_l3_mode(src_ipv4, dst_ipv4, mac);
+        try {
+            port->set_l3_mode(src_ipv4, dst_ipv4, mac);
+        } catch (const TrexException &ex) {
+            generate_execute_err(result, ex.what());
+        }
         
     } else {
+        try {
+            port->set_l3_mode(src_ipv4, dst_ipv4);
+        } catch (const TrexException &ex) {
+            generate_execute_err(result, ex.what());
+        }
         
-        port->set_l3_mode(src_ipv4, dst_ipv4);
     }
     
     return (TREX_RPC_CMD_OK);    
index e41cc88..3a4db19 100644 (file)
@@ -1004,6 +1004,9 @@ TrexStatelessPort::get_rx_queue_pkts() {
 void
 TrexStatelessPort::set_l2_mode(const uint8_t *dest_mac) {
     
+    /* not valid under traffic */
+    verify_state(PORT_STATE_IDLE | PORT_STATE_STREAMS, "set_l2_mode");
+    
     /* no IPv4 src */
     getPortAttrObj()->set_src_ipv4(0);
     
@@ -1020,6 +1023,9 @@ TrexStatelessPort::set_l2_mode(const uint8_t *dest_mac) {
 void
 TrexStatelessPort::set_l3_mode(uint32_t src_ipv4, uint32_t dest_ipv4) {
     
+    /* not valid under traffic */
+    verify_state(PORT_STATE_IDLE | PORT_STATE_STREAMS, "set_l3_mode");
+    
     /* set src IPv4 */
     getPortAttrObj()->set_src_ipv4(src_ipv4);
     
@@ -1041,6 +1047,8 @@ TrexStatelessPort::set_l3_mode(uint32_t src_ipv4, uint32_t dest_ipv4) {
 void
 TrexStatelessPort::set_l3_mode(uint32_t src_ipv4, uint32_t dest_ipv4, const uint8_t *resolved_mac) {
     
+    verify_state(PORT_STATE_IDLE | PORT_STATE_STREAMS, "set_l3_mode");
+    
     /* set src IPv4 */
     getPortAttrObj()->set_src_ipv4(src_ipv4);