[spp] [PATCH 7/7] spp/shared: refactor printing port status

ogawa.yasufumi at lab.ntt.co.jp ogawa.yasufumi at lab.ntt.co.jp
Wed Dec 6 09:18:26 CET 2017


From: Yasufumi Ogawa <ogawa.yasufumi at lab.ntt.co.jp>

Port status of each of clients is printed with print_active_ports().
It is defined in both of spp_nfv and spp_vm. It is redundant and should
be changed to be a common library function.

This update is to move print_active_ports() in shared/common.c as common
library. This update also following changes.
* client_id, ports_fwd_array and port_map are added as arguments
  of this function to be enable them referred.
* Print 'none' instead of port_id if port is unassigned.

Signed-off-by: Yasufumi Ogawa <ogawa.yasufumi at lab.ntt.co.jp>
---
 src/nfv/nfv.c       | 53 +-------------------------------------------
 src/shared/common.c | 63 +++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/shared/common.h |  4 ++++
 src/vm/main.c       | 52 +------------------------------------------
 4 files changed, 69 insertions(+), 103 deletions(-)

diff --git a/src/nfv/nfv.c b/src/nfv/nfv.c
index 9edf06d..5972657 100644
--- a/src/nfv/nfv.c
+++ b/src/nfv/nfv.c
@@ -232,57 +232,6 @@ forward_array_reset(void)
 	}
 }
 
-/* print forward array active port*/
-static void
-print_active_ports(char *str)
-{
-	unsigned int i;
-
-	sprintf(str, "%d\n", client_id);
-
-	/* every elements value*/
-	for (i = 0; i < RTE_MAX_ETHPORTS; i++) {
-		if (ports_fwd_array[i].in_port_id == PORT_RESET)
-			continue;
-
-		RTE_LOG(INFO, APP, "Port ID %d\n", i);
-		RTE_LOG(INFO, APP, "Status %d\n",
-			ports_fwd_array[i].in_port_id);
-
-		sprintf(str + strlen(str), "port id: %d,", i);
-		if (ports_fwd_array[i].in_port_id != PORT_RESET)
-			sprintf(str + strlen(str), "on,");
-		else
-			sprintf(str + strlen(str), "off,");
-
-		switch (port_map[i].port_type) {
-		case PHY:
-			RTE_LOG(INFO, APP, "Type: PHY\n");
-			sprintf(str + strlen(str), "PHY,");
-			break;
-		case RING:
-			RTE_LOG(INFO, APP, "Type: RING\n");
-			sprintf(str + strlen(str), "RING(%u),",
-				port_map[i].id);
-			break;
-		case VHOST:
-			RTE_LOG(INFO, APP, "Type: VHOST\n");
-			sprintf(str + strlen(str), "VHOST(%u),",
-				port_map[i].id);
-			break;
-		case UNDEF:
-			RTE_LOG(INFO, APP, "Type: UDF\n");
-			sprintf(str + strlen(str), "UDF,");
-			break;
-		}
-
-		RTE_LOG(INFO, APP, "Out Port ID %d\n",
-			ports_fwd_array[i].out_port_id);
-		sprintf(str + strlen(str), "outport: %d\n",
-			ports_fwd_array[i].out_port_id);
-	}
-}
-
 static int
 do_send(int *connected, int *sock, char *str)
 {
@@ -560,7 +509,7 @@ parse_command(char *str)
 			i = sprintf(str, "Client ID %d Running\n", client_id);
 		else
 			i = sprintf(str, "Client ID %d Idling\n", client_id);
-		print_active_ports(str + i);
+		print_active_ports(str + i, client_id, ports_fwd_array, port_map);
 
 	} else if (!strcmp(token_list[0], "_get_client_id")) {
 		memset(str, '\0', MSG_SIZE);
diff --git a/src/shared/common.c b/src/shared/common.c
index dd1f88c..5b87385 100644
--- a/src/shared/common.c
+++ b/src/shared/common.c
@@ -250,3 +250,66 @@ spp_atoi(const char *str, int *val)
 
 	return 0;
 }
+
+/*
+ * Print port status in forward array
+ *
+ * Each of port status is formatted as
+ * "port_id:[PORT_ID],[IN_PORT_STAT],[TYPE],output:[OUTPORT_STAT]"
+ */
+void
+print_active_ports(char *str, uint16_t client_id,
+		struct port *ports_fwd_array,
+		struct port_map *port_map)
+{
+	unsigned int i;
+
+	sprintf(str, "clinet_id:%d\n", client_id);
+
+	/* Every elements value */
+	for (i = 0; i < RTE_MAX_ETHPORTS; i++) {
+		if (ports_fwd_array[i].in_port_id == PORT_RESET)
+			continue;
+
+		RTE_LOG(INFO, APP, "Port ID %d\n", i);
+		RTE_LOG(INFO, APP, "Status %d\n",
+			ports_fwd_array[i].in_port_id);
+
+		sprintf(str + strlen(str), "port_id:%d,", i);
+		/* in_port_id is same value as port_id */
+		if (ports_fwd_array[i].in_port_id != PORT_RESET)
+			sprintf(str + strlen(str), "on,");
+		else
+			sprintf(str + strlen(str), "off,");
+
+		switch (port_map[i].port_type) {
+		case PHY:
+			RTE_LOG(INFO, APP, "Type: PHY\n");
+			sprintf(str + strlen(str), "PHY,");
+			break;
+		case RING:
+			RTE_LOG(INFO, APP, "Type: RING\n");
+			sprintf(str + strlen(str), "RING(%u),",
+				port_map[i].id);
+			break;
+		case VHOST:
+			RTE_LOG(INFO, APP, "Type: VHOST\n");
+			sprintf(str + strlen(str), "VHOST(%u),",
+				port_map[i].id);
+			break;
+		case UNDEF:
+			RTE_LOG(INFO, APP, "Type: UDF\n");
+			sprintf(str + strlen(str), "UDF,");
+			break;
+		}
+
+		RTE_LOG(INFO, APP, "Out Port ID %d\n",
+				ports_fwd_array[i].out_port_id);
+		if (ports_fwd_array[i].out_port_id == PORT_RESET) {
+			sprintf(str + strlen(str), "outport:%s\n", "none");
+		} else {
+			sprintf(str + strlen(str), "outport:%d\n",
+					ports_fwd_array[i].out_port_id);
+		}
+	}
+}
diff --git a/src/shared/common.h b/src/shared/common.h
index e29c7b9..5defbb0 100644
--- a/src/shared/common.h
+++ b/src/shared/common.h
@@ -196,6 +196,10 @@ int parse_portmask(struct port_info *ports, uint16_t max_ports,
 int parse_num_clients(uint16_t *num_clients, const char *clients);
 int parse_server(char **server_ip, int *server_port, char *server_addr);
 
+void print_active_ports(char *str, uint16_t client_id,
+		struct port *ports_fwd_array,
+		struct port_map *port_map);
+
 int spp_atoi(const char *str, int *val);
 
 #define RTE_LOGTYPE_APP RTE_LOGTYPE_USER1
diff --git a/src/vm/main.c b/src/vm/main.c
index 7095446..c9f1571 100644
--- a/src/vm/main.c
+++ b/src/vm/main.c
@@ -191,56 +191,6 @@ forward_array_reset(void)
 	}
 }
 
-/* print forward array active port */
-static void
-print_active_ports(char *str)
-{
-	unsigned int i;
-
-	sprintf(str, "%d\n", client_id);
-	/* every elements value */
-	for (i = 0; i < RTE_MAX_ETHPORTS; i++) {
-		if (ports_fwd_array[i].in_port_id == PORT_RESET)
-			continue;
-
-		RTE_LOG(INFO, APP, "Port ID %d\n", i);
-		RTE_LOG(INFO, APP, "Status %d\n",
-			ports_fwd_array[i].in_port_id);
-
-		sprintf(str + strlen(str), "port id: %d,", i);
-		if (ports_fwd_array[i].in_port_id != PORT_RESET)
-			sprintf(str + strlen(str), "on,");
-		else
-			sprintf(str + strlen(str), "off,");
-
-		switch (port_map[i].port_type) {
-		case PHY:
-			RTE_LOG(INFO, APP, "Type: PHY\n");
-			sprintf(str + strlen(str), "PHY,");
-			break;
-		case RING:
-			RTE_LOG(INFO, APP, "Type: RING\n");
-			sprintf(str + strlen(str), "RING(%u),",
-				port_map[i].id);
-			break;
-		case VHOST:
-			RTE_LOG(INFO, APP, "Type: VHOST\n");
-			sprintf(str + strlen(str), "VHOST(%u),",
-				port_map[i].id);
-			break;
-		case UNDEF:
-			RTE_LOG(INFO, APP, "Type: UDF\n");
-			sprintf(str + strlen(str), "UDF,");
-			break;
-		}
-
-		RTE_LOG(INFO, APP, "Out Port ID %d\n",
-			ports_fwd_array[i].out_port_id);
-		sprintf(str + strlen(str), "outport: %d\n",
-			ports_fwd_array[i].out_port_id);
-	}
-}
-
 static void
 forward_array_remove(int port_id)
 {
@@ -456,7 +406,7 @@ parse_command(char *str)
 			i = sprintf(str, "Client ID %d Running\n", client_id);
 		else
 			i = sprintf(str, "Client ID %d Idling\n", client_id);
-		print_active_ports(str + i);
+		print_active_ports(str + i, client_id, ports_fwd_array, port_map);
 
 	} else if (!strcmp(token_list[0], "_get_client_id")) {
 		memset(str, '\0', MSG_SIZE);
-- 
2.13.1



More information about the spp mailing list