[spp] [PATCH 48/57] spp_vf: refactor for commnets in spp_vf.c

x-fn-spp at sl.ntt-tx.co.jp x-fn-spp at sl.ntt-tx.co.jp
Thu Dec 28 05:55:55 CET 2017


From: Hiroyuki Nakamura <nakamura.hioryuki at po.ntt-tx.co.jp>

* Update remaining Japanese to English.
* Remove meaningless comments, for instance, 'Get client ID' for
  spp_get_client_id() or 'initialize' for init functions.
* Add suplementary comments for more understandable
* Add TODOs for futher revising.

Signed-off-by: Yasufumi Ogawa <ogawa.yasufumi at lab.ntt.co.jp>
---
 src/vf/spp_vf.c | 297 ++++++++++++++++++++++++++++----------------------------
 1 file changed, 147 insertions(+), 150 deletions(-)

diff --git a/src/vf/spp_vf.c b/src/vf/spp_vf.c
index 20a3b40..33373f5 100644
--- a/src/vf/spp_vf.c
+++ b/src/vf/spp_vf.c
@@ -12,7 +12,7 @@
 #include "spp_forward.h"
 #include "command_proc.h"
 
-/* define */
+/* TODO(yasufum) add desc how there are used */
 #define SPP_CORE_STATUS_CHECK_MAX 5
 #define SPP_RING_LATENCY_STATS_SAMPLING_INTERVAL 1000000
 
@@ -21,13 +21,13 @@ enum SPP_LONGOPT_RETVAL {
 	SPP_LONGOPT_RETVAL__ = 127,
 
 	/* add below */
-
+	/* TODO(yasufum) add description what and why add below */
 	SPP_LONGOPT_RETVAL_CONFIG,
 	SPP_LONGOPT_RETVAL_CLIENT_ID,
 	SPP_LONGOPT_RETVAL_VHOST_CLIENT
 };
 
-/* struct */
+/* Manage given options as global variable */
 struct startup_param {
 	int client_id;
 	char server_ip[INET_ADDRSTRLEN];
@@ -35,9 +35,10 @@ struct startup_param {
 	int vhost_client;
 };
 
+/* Status of patch and its cores, mac address assinged for it and port info */
 struct patch_info {
 	int      use_flg;
-	int      dpdk_port;
+	int      dpdk_port;  /* TODO(yasufum) add desc for what is this */
 	int      rx_core_no;
 	int      tx_core_no;
 	char     mac_addr_str[SPP_CONFIG_STR_LEN];
@@ -46,6 +47,8 @@ struct patch_info {
 	struct   spp_core_port_info *tx_core;
 };
 
+/* Manage number of interfaces and patch information  as global variable */
+/* TODO(yasufum) refactor, change if to iface */
 struct if_info {
 	int num_nic;
 	int num_vhost;
@@ -55,17 +58,16 @@ struct if_info {
 	struct patch_info ring_patchs[RTE_MAX_ETHPORTS];
 };
 
+/* Declare global variables */
 static struct spp_config_area	g_config;
 static struct startup_param	g_startup_param;
 static struct if_info		g_if_info;
 static struct spp_core_info	g_core_info[SPP_CONFIG_CORE_MAX];
-static int 			g_change_core[SPP_CONFIG_CORE_MAX];
+static int 			g_change_core[SPP_CONFIG_CORE_MAX];  /* TODO(yasufum) add desc how it is used and why changed core is kept */
 
 static char config_file_path[PATH_MAX];
 
-/*
- * print a usage message
- */
+/* Print help message */
 static void
 usage(const char *progname)
 {
@@ -81,16 +83,13 @@ usage(const char *progname)
 			, progname);
 }
 
-/*
- * Set RING PMD
- */
 static int
 add_ring_pmd(int ring_id)
 {
 	struct rte_ring *ring;
 	int ring_port_id;
 
-	/* look up ring, based on user's provided id*/
+	/* Lookup ring of given id */
 	ring = rte_ring_lookup(get_rx_queue_name(ring_id));
 	if (unlikely(ring == NULL)) {
 		RTE_LOG(ERR, APP,
@@ -98,16 +97,13 @@ add_ring_pmd(int ring_id)
 		return -1;
 	}
 
-	/* create ring pmd*/
+	/* Create ring pmd */
 	ring_port_id = rte_eth_from_ring(ring);
 	RTE_LOG(DEBUG, APP, "ring port id %d\n", ring_port_id);
 
 	return ring_port_id;
 }
 
-/*
- * Set VHOST PMD
- */
 static int
 add_vhost_pmd(int index, int client)
 {
@@ -187,27 +183,31 @@ add_vhost_pmd(int index, int client)
 	return vhost_port_id;
 }
 
-/*
- * Check core status
+/**
+ * Check status of all of cores is same as given
+ *
+ * It returns -1 as status mismatch if status is not same.
+ * If status is SPP_CONFIG_UNUSE, check is skipped.
  */
 static int
 check_core_status(enum spp_core_status status)
 {
-	int cnt;
+	int cnt;  /* increment core id */
 	for (cnt = 0; cnt < SPP_CONFIG_CORE_MAX; cnt++) {
 		if (g_core_info[cnt].type == SPP_CONFIG_UNUSE) {
 			continue;
 		}
 		if (g_core_info[cnt].status != status) {
-			/* Status mismatch */
+			/* Status is mismatched */
 			return -1;
 		}
 	}
 	return 0;
 }
 
-/*
- * Wait for core status check
+/**
+ * Run check_core_status() for SPP_CORE_STATUS_CHECK_MAX times with
+ * interval time (1sec)
  */
 static int
 check_core_status_wait(enum spp_core_status status)
@@ -225,34 +225,35 @@ check_core_status_wait(enum spp_core_status status)
 	return -1;
 }
 
-/*
- * Set core status
- */
+/* Set all core to given status */
 static void
 set_core_status(enum spp_core_status status)
 {
-	int core_cnt = 0;
+	int core_cnt = 0;  /* increment core id */
 	for(core_cnt = 0; core_cnt < SPP_CONFIG_CORE_MAX; core_cnt++) {
 		g_core_info[core_cnt].status = status;
 	}
 }
 
-/*
- * Process stop
+/**
+ * Set all of core status to SPP_CORE_STOP_REQUEST if received signal
+ * is SIGTERM or SIGINT
  */
 static void
 stop_process(int signal) {
 	if (unlikely(signal != SIGTERM) &&
 			unlikely(signal != SIGINT)) {
-		/* Other signals */
 		return;
 	}
 
 	set_core_status(SPP_CORE_STOP_REQUEST);
 }
 
-/*
- * Parses the client ID of the application argument.
+/**
+ * Convert string of given client id to inteter
+ *
+ * If succeeded, client id of interger is assigned to client_id and
+ * reuturn 0. Or return -1 if failed.
  */
 static int
 parse_app_client_id(const char *client_id_str, int *client_id)
@@ -272,9 +273,7 @@ parse_app_client_id(const char *client_id_str, int *client_id)
 	return 0;
 }
 
-/*
- * Parses server information of application arguments.
- */
+/* Parse options for server ip and port */
 static int
 parse_app_server(const char *server_str, char *server_ip, int *server_port)
 {
@@ -299,9 +298,7 @@ parse_app_server(const char *server_str, char *server_ip, int *server_port)
 	return 0;
 }
 
-/*
- * Parse the application arguments to the client app.
- */
+/* Parse options for client app */
 static int
 parse_app_args(int argc, char *argv[])
 {
@@ -319,7 +316,10 @@ parse_app_args(int argc, char *argv[])
 			{ 0 },
 	};
 
-	/* getoptを使用するとargvが並び変わるみたいなので、コピーを実施 */
+	/**
+	 * Save argv to argvopt to aovid loosing the order of options
+	 * by getopt_long()
+	 */
 	for (cnt = 0; cnt < argcopt; cnt++) {
 		argvopt[cnt] = argv[cnt];
 	}
@@ -327,7 +327,7 @@ parse_app_args(int argc, char *argv[])
 	/* Clear startup parameters */
 	memset(&g_startup_param, 0x00, sizeof(g_startup_param));
 
-	/* Check application parameter */
+	/* Check options of application */
 	optind = 0;
 	opterr = 0;
 	while ((opt = getopt_long(argc, argvopt, "s:", lgopts,
@@ -370,7 +370,8 @@ parse_app_args(int argc, char *argv[])
 		usage(progname);
 		return -1;
 	}
-	RTE_LOG(INFO, APP, "application arguments value. (client id = %d, config = %s, server = %s:%d, vhost client = %d)\n",
+	RTE_LOG(INFO, APP,
+			"app opts (client_id=%d,config=%s,server=%s:%d,vhost_client=%d)\n",
 			g_startup_param.client_id,
 			config_file_path,
 			g_startup_param.server_ip,
@@ -379,8 +380,13 @@ parse_app_args(int argc, char *argv[])
 	return 0;
 }
 
-/*
- * IF種別&IF番号のIF情報の領域取得
+/**
+ * Return patch info of given type and num of interface
+ *
+ * It returns NULL value if given type is invalid.
+ * TODO(yasufum) refactor name of func to be more understandable (area?)
+ * TODO(yasufum) refactor, change if to iface.
+ * TODO(yasufum) confirm why it returns not -1 but NULL.
  */
 static struct patch_info *
 get_if_area(enum port_type if_type, int if_no)
@@ -396,19 +402,20 @@ get_if_area(enum port_type if_type, int if_no)
 		return &g_if_info.ring_patchs[if_no];
 		break;
 	default:
-		/* エラー出力は呼び元でチェック */
 		return NULL;
 		break;
 	}
 }
 
-/*
- * IF情報初期化
+/**
+ * Initialize all of patch info by assingning -1
+ *
+ * TODO(yasufum) refactor, change if to iface.
  */
 static void
 init_if_info(void)
 {
-	int port_cnt;
+	int port_cnt;  /* increment ether ports */
 	memset(&g_if_info, 0x00, sizeof(g_if_info));
 	for (port_cnt = 0; port_cnt < RTE_MAX_ETHPORTS; port_cnt++) {
 		g_if_info.nic_patchs[port_cnt].rx_core_no   = -1;
@@ -420,8 +427,11 @@ init_if_info(void)
 	}
 }
 
-/*
- * CORE情報初期化
+/**
+ * Initialize g_core_info and its port info
+ *
+ * Clear g_core_info and set interface type of its port info to UNDEF.
+ * TODO(yasufum) refactor, change if to iface.
  */
 static void
 init_core_info(void)
@@ -438,13 +448,15 @@ init_core_info(void)
 	memset(g_change_core, 0x00, sizeof(g_change_core));
 }
 
-/*
- * Configのプロセス情報から管理情報に設定
+/**
+ * Set properties of g_core_info from config
+ *
+ * TODO(yasufum) refactor, change if to iface.
+ * TODO(yasufum) confirm meaning of funciton name and is typo ?
  */
 static int
 set_form_proc_info(struct spp_config_area *config)
 {
-	/* Configのproc_infoから内部管理情報へ設定 */
 	int core_cnt, rx_start, rx_cnt, tx_start, tx_cnt;
 	enum port_type if_type;
 	int if_no;
@@ -459,17 +471,17 @@ set_form_proc_info(struct spp_config_area *config)
 			continue;
 		}
 
-		/* Forwardをまとめる事は可、他種別は不可 */
-		if ((core_info->type != SPP_CONFIG_UNUSE) &&
-				((core_info->type != SPP_CONFIG_FORWARD) ||
-				(core_func->type != SPP_CONFIG_FORWARD))) {
-			RTE_LOG(ERR, APP, "Core in use. (core = %d, type = %d/%d)\n",
-					core_func->core_no,
-					core_func->type, core_info->type);
-			return -1;
-		}
+    /* Forwardをまとめる事は可、他種別は不可 */
+    /* TODO(yasufum) confirm what is the purpose and meaning */
+    if ((core_info->type != SPP_CONFIG_UNUSE) &&
+        ((core_info->type != SPP_CONFIG_FORWARD) ||
+         (core_func->type != SPP_CONFIG_FORWARD))) {
+      RTE_LOG(ERR, APP, "Core in use. (core = %d, type = %d/%d)\n",
+          core_func->core_no,
+          core_func->type, core_info->type);
+      return -1;
+    }
 
-		/* Set CORE type */
 		core_info->type = core_func->type;
 		if (!rte_lcore_is_enabled(core_func->core_no)) {
 			/* CPU mismatch */
@@ -478,7 +490,6 @@ set_form_proc_info(struct spp_config_area *config)
 			return -1;
 		}
 
-		/* Set RX port */
 		rx_start = core_info->num_rx_port;
 		core_info->num_rx_port += core_func->num_rx_port;
 		for (rx_cnt = 0; rx_cnt < core_func->num_rx_port; rx_cnt++) {
@@ -488,7 +499,7 @@ set_form_proc_info(struct spp_config_area *config)
 			core_info->rx_ports[rx_start + rx_cnt].if_type = if_type;
 			core_info->rx_ports[rx_start + rx_cnt].if_no   = if_no;
 
-			/* IF種別とIF番号に対応するIF情報の領域取得 */
+			/* Retrieve patch corresponding to type and number of the interface */
 			patch_info = get_if_area(if_type, if_no);
 
 			patch_info->use_flg = 1;
@@ -499,6 +510,7 @@ set_form_proc_info(struct spp_config_area *config)
 			}
 
 			/* IF情報からCORE情報を変更する場合用に設定 */
+      /* TODO(yasufum) confirm the meaning of this comment */
 			patch_info->rx_core_no = core_func->core_no;
 			patch_info->rx_core    = &core_info->rx_ports[rx_start + rx_cnt];
 		}
@@ -513,7 +525,6 @@ set_form_proc_info(struct spp_config_area *config)
 			core_info->tx_ports[tx_start + tx_cnt].if_type = if_type;
 			core_info->tx_ports[tx_start + tx_cnt].if_no   = if_no;
 
-			/* IF種別とIF番号に対応するIF情報の領域取得 */
 			patch_info = get_if_area(if_type, if_no);
 
 			patch_info->use_flg = 1;
@@ -524,6 +535,7 @@ set_form_proc_info(struct spp_config_area *config)
 			}
 
 			/* IF情報からCORE情報を変更する場合用に設定 */
+      /* TODO(yasufum) confirm the meaning of this comment */
 			patch_info->tx_core_no = core_func->core_no;
 			patch_info->tx_core    = &core_info->tx_ports[tx_start + tx_cnt];
 		}
@@ -532,13 +544,15 @@ set_form_proc_info(struct spp_config_area *config)
 	return 0;
 }
 
-/*
- * ConfigのMACテーブル情報から管理情報に設定
+/**
+ * Load mac table entries from config and setup patches
+ *
+ * TODO(yasufum) refactor, change if to iface.
+ * TODO(yasufum) confirm if additional description for the structure of mac table is needed.
  */
 static int
 set_from_classifier_table(struct spp_config_area *config)
 {
-	/* MAC table */
 	enum port_type if_type;
 	int if_no = 0;
 	int mac_cnt = 0;
@@ -550,7 +564,7 @@ set_from_classifier_table(struct spp_config_area *config)
 		if_type = mac_table->port.if_type;
 		if_no   = mac_table->port.if_no;
 
-		/* IF種別とIF番号に対応するIF情報の領域取得 */
+    /* Retrieve patch corresponding to type and number of the interface */
 		patch_info = get_if_area(if_type, if_no);
 
 		if (unlikely(patch_info->use_flg == 0)) {
@@ -559,8 +573,7 @@ set_from_classifier_table(struct spp_config_area *config)
 			return -1;
 		}
 
-		/* CORE情報側にもMACアドレスの情報設定 */
-		/* MACアドレスは送信側のみに影響する為、送信側のみ設定 */
+    /* Set mac address from the table for destination tx, not need for rx */
 		patch_info->mac_addr = mac_table->mac_addr;
 		strcpy(patch_info->mac_addr_str, mac_table->mac_addr_str);
 		if (unlikely(patch_info->tx_core != NULL)) {
@@ -571,8 +584,10 @@ set_from_classifier_table(struct spp_config_area *config)
 	return 0;
 }
 
-/*
- * NIC用の情報設定
+/**
+ * Setup patch info of port on host
+ *
+ * TODO(yasufum) refactor, change if to iface.
  */
 static int
 set_nic_interface(struct spp_config_area *config __attribute__ ((unused)))
@@ -587,15 +602,14 @@ set_nic_interface(struct spp_config_area *config __attribute__ ((unused)))
 	struct patch_info *patch_info = NULL;
 	for (nic_cnt = 0; nic_cnt < RTE_MAX_ETHPORTS; nic_cnt++) {
 		patch_info = &g_if_info.nic_patchs[nic_cnt];
-		/* Set DPDK port */
 		patch_info->dpdk_port = nic_cnt;
 
+    /* TODO(yasufum) confirm why it is needed */
 		if (patch_info->use_flg == 0) {
 			/* Not Used */
 			continue;
 		}
 
-		/* CORE情報側にもDPDKポート番号の情報設定 */
 		if (patch_info->rx_core != NULL) {
 			patch_info->rx_core->dpdk_port = nic_cnt;
 		}
@@ -603,7 +617,6 @@ set_nic_interface(struct spp_config_area *config __attribute__ ((unused)))
 			patch_info->tx_core->dpdk_port = nic_cnt;
 		}
 
-		/* NICの設定数カウント */
 		nic_num++;
 	}
 
@@ -612,17 +625,18 @@ set_nic_interface(struct spp_config_area *config __attribute__ ((unused)))
 				nic_num, g_if_info.num_nic);
 		return -1;
 	}
-	
+
 	return 0;
 }
 
-/*
- * VHOST用の情報設定
+/**
+ * Setup vhost interfaces from config
+ *
+ * TODO(yasufum) refactor, change if to iface.
  */
 static int
 set_vhost_interface(struct spp_config_area *config)
 {
-	/* VHOST Setting */
 	int vhost_cnt, vhost_num = 0;
 	g_if_info.num_vhost = config->proc.num_vhost;
 	struct patch_info *patch_info = NULL;
@@ -633,7 +647,6 @@ set_vhost_interface(struct spp_config_area *config)
 			continue;
 		}
 
-		/* Set DPDK port */
 		int dpdk_port = add_vhost_pmd(vhost_cnt, g_startup_param.vhost_client);
 		if (unlikely(dpdk_port < 0)) {
 			RTE_LOG(ERR, APP, "VHOST add failed. (no = %d)\n",
@@ -642,7 +655,6 @@ set_vhost_interface(struct spp_config_area *config)
 		}
 		patch_info->dpdk_port = dpdk_port;
 
-		/* CORE情報側にもDPDKポート番号の情報設定 */
 		if (patch_info->rx_core != NULL) {
 			patch_info->rx_core->dpdk_port = dpdk_port;
 		}
@@ -659,24 +671,26 @@ set_vhost_interface(struct spp_config_area *config)
 	return 0;
 }
 
-/*
- * RING用の情報設定
+/**
+ * Setup ring interfaces from config
+ *
+ * TODO(yasufum) refactor, change if to iface.
  */
 static int
 set_ring_interface(struct spp_config_area *config)
 {
-	/* RING Setting */
 	int ring_cnt, ring_num = 0;
 	g_if_info.num_ring = config->proc.num_ring;
 	struct patch_info *patch_info = NULL;
 	for (ring_cnt = 0; ring_cnt < RTE_MAX_ETHPORTS; ring_cnt++) {
 		patch_info = &g_if_info.ring_patchs[ring_cnt];
+
+    /* TODO(yasufum) confirm why it is needed */
 		if (patch_info->use_flg == 0) {
 			/* Not Used */
 			continue;
 		}
 
-		/* Set DPDK port */
 		int dpdk_port = add_ring_pmd(ring_cnt);
 		if (unlikely(dpdk_port < 0)) {
 			RTE_LOG(ERR, APP, "RING add failed. (no = %d)\n",
@@ -685,7 +699,6 @@ set_ring_interface(struct spp_config_area *config)
 		}
 		patch_info->dpdk_port = dpdk_port;
 
-		/* CORE情報側にもDPDKポート番号の情報設定 */
 		if (patch_info->rx_core != NULL) {
 			patch_info->rx_core->dpdk_port = dpdk_port;
 		}
@@ -702,60 +715,61 @@ set_ring_interface(struct spp_config_area *config)
 	return 0;
 }
 
-/*
- * 管理データ初期設定
+/**
+ * Setup management info for spp_vf
+ *
+ * TODO(yasufum) refactor, change if to iface.
+ * TODO(yasufum) refactor, change function name from manage to mng or management
  */
 static int
 init_manage_data(struct spp_config_area *config)
 {
-	/* Initialize */
+	/* Initialize interface and core infomation */
 	init_if_info();
 	init_core_info();
 
-	/* Set config data */
+  /* Load config for resource assingment and network configuration */
 	int ret_proc = set_form_proc_info(config);
 	if (unlikely(ret_proc != 0)) {
-		/* 関数内でログ出力済みなので、省略 */
 		return -1;
 	}
 	int ret_classifier = set_from_classifier_table(config);
 	if (unlikely(ret_classifier != 0)) {
-		/* 関数内でログ出力済みなので、省略 */
 		return -1;
 	}
 
-	/* Set interface data */
 	int ret_nic = set_nic_interface(config);
 	if (unlikely(ret_nic != 0)) {
-		/* 関数内でログ出力済みなので、省略 */
 		return -1;
 	}
 
 	int ret_vhost = set_vhost_interface(config);
 	if (unlikely(ret_vhost != 0)) {
-		/* 関数内でログ出力済みなので、省略 */
 		return -1;
 	}
 
 	int ret_ring = set_ring_interface(config);
 	if (unlikely(ret_ring != 0)) {
-		/* 関数内でログ出力済みなので、省略 */
 		return -1;
 	}
 
 	return 0;
 }
 
-#ifdef SPP_RINGLATENCYSTATS_ENABLE /* RING滞留時間 */
+#ifdef SPP_RINGLATENCYSTATS_ENABLE
+/**
+ * Print statistics of time for packet processing in ring interface
+ *
+ * TODO(yasufum) refactor, change if to iface.
+ */
 static void
 print_ring_latency_stats(void)
 {
-	/* Clear screen and move to top left */
+	/* Clear screen and move cursor to top left */
 	const char topLeft[] = { 27, '[', '1', ';', '1', 'H', '\0' };
 	const char clr[] = { 27, '[', '2', 'J', '\0' };
 	printf("%s%s", clr, topLeft);
 
-	/* Print per RING */
 	int ring_cnt, stats_cnt;
 	struct spp_ringlatencystats_ring_latency_stats stats[RTE_MAX_ETHPORTS];
 	memset(&stats, 0x00, sizeof(stats));
@@ -787,32 +801,30 @@ print_ring_latency_stats(void)
 }
 #endif /* SPP_RINGLATENCYSTATS_ENABLE */
 
-/*
- * VHOST用ソケットファイル削除
+/**
+ * Remove sock file
  */
 static void
 del_vhost_sockfile(struct patch_info *vhost_patchs)
 {
 	int cnt;
 
-	/* Do not delete for vhost client. */
+	/* Do not rmeove for if it is running in vhost-client mode. */
 	if (g_startup_param.vhost_client != 0)
 		return;
 
 	for (cnt = 0; cnt < RTE_MAX_ETHPORTS; cnt++) {
 		if (likely(vhost_patchs[cnt].use_flg == 0)) {
-			/* VHOST未使用はスキップ */
+			/* Skip removing if it is not using vhost */
 			continue;
 		}
 
-		/* 使用していたVHOSTについて削除を行う */
 		remove(get_vhost_iface_name(cnt));
 	}
 }
 
-/*
- * main
- */
+/* TODO(yasufum) refactor, change if to iface. */
+/* TODO(yasufum) change test using ut_main(), or add desccription for what and why use it */
 int
 #ifndef USE_UT_SPP_VF
 main(int argc, char *argv[])
@@ -834,25 +846,23 @@ ut_main(int argc, char *argv[])
 	signal(SIGTERM, stop_process);
 	signal(SIGINT,  stop_process);
 
-	/* set default config file path */
+	/* Setup config wiht default file path */
 	strcpy(config_file_path, SPP_CONFIG_FILE_PATH);
 
 	unsigned int main_lcore_id = 0xffffffff;
 	while(1) {
-		/* DPDK initialize */
 		int ret_dpdk = rte_eal_init(argc, argv);
 		if (unlikely(ret_dpdk < 0)) {
 			break;
 		}
 
-		/* Skip dpdk parameters */
 		argc -= ret_dpdk;
 		argv += ret_dpdk;
 
 		/* Set log level  */
 		rte_log_set_global_level(RTE_LOG_LEVEL);
 
-		/* Parse application parameters */
+		/* Parse spp_vf specific parameters */
 		int ret_parse = parse_app_args(argc, argv);
 		if (unlikely(ret_parse != 0)) {
 			break;
@@ -860,30 +870,25 @@ ut_main(int argc, char *argv[])
 
 		RTE_LOG(INFO, APP, "Load config file(%s)\n", config_file_path);
 
-		/* Load config */
 		int ret_config = spp_config_load_file(config_file_path, 0, &g_config);
 		if (unlikely(ret_config != 0)) {
 			break;
 		}
 
-		/* Get core id. */
+		/* Get lcore id of main thread to set its status after */
 		main_lcore_id = rte_lcore_id();
 
-		/* 起動パラメータとコンフィグチェック */
-		/* 各IF情報設定 */
 		int ret_manage = init_manage_data(&g_config);
 		if (unlikely(ret_manage != 0)) {
 			break;
 		}
 
-		/* 他機能部初期化 */
-		/* MAC振分初期化 */
 		int ret_classifier_mac_init = spp_classifier_mac_init();
 		if (unlikely(ret_classifier_mac_init != 0)) {
 			break;
 		}
 
-		/* コマンド機能部初期化 */
+    /* Setup connection for accepting commands from controller */
 		int ret_command_init = spp_command_proc_init(
 				g_startup_param.server_ip,
 				g_startup_param.server_port);
@@ -891,7 +896,7 @@ ut_main(int argc, char *argv[])
 			break;
 		}
 
-#ifdef SPP_RINGLATENCYSTATS_ENABLE /* RING滞留時間 */
+#ifdef SPP_RINGLATENCYSTATS_ENABLE
 		int ret_ringlatency = spp_ringlatencystats_init(
 				SPP_RING_LATENCY_STATS_SAMPLING_INTERVAL, g_if_info.num_ring);
 		if (unlikely(ret_ringlatency != 0)) {
@@ -899,7 +904,7 @@ ut_main(int argc, char *argv[])
 		}
 #endif /* SPP_RINGLATENCYSTATS_ENABLE */
 
-		/* Start  thread */
+		/* Start worker threads of classifier and forwarder */
 		unsigned int lcore_id = 0;
 		RTE_LCORE_FOREACH_SLAVE(lcore_id) {
 			if (g_core_info[lcore_id].type == SPP_CONFIG_CLASSIFIER_MAC) {
@@ -913,50 +918,48 @@ ut_main(int argc, char *argv[])
 			}
 		}
 
-		/* スレッド状態確認 */
+    /* Set the status of main thread to idle */
 		g_core_info[main_lcore_id].status = SPP_CORE_IDLE;
 		int ret_wait = check_core_status_wait(SPP_CORE_IDLE);
 		if (unlikely(ret_wait != 0)) {
 			break;
 		}
 
-		/* Start forward */
+		/* Start forwarding */
 		set_core_status(SPP_CORE_FORWARD);
 		RTE_LOG(INFO, APP, "My ID %d start handling message\n", 0);
 		RTE_LOG(INFO, APP, "[Press Ctrl-C to quit ...]\n");
 
-		/* loop */
+		/* Enter loop for accepting commands */
 		int ret_do = 0;
 #ifndef USE_UT_SPP_VF
 		while(likely(g_core_info[main_lcore_id].status != SPP_CORE_STOP_REQUEST)) {
 #else
 		{
 #endif
-			/* コマンド受付 */
+      /* Receive command */
 			ret_do = spp_command_proc_do();
 			if (unlikely(ret_do != 0)) {
 				break;
 			}
 
-			/* CPUを占有しない様に1秒スリープ */
 			sleep(1);
 
-#ifdef SPP_RINGLATENCYSTATS_ENABLE /* RING滞留時間 */
+#ifdef SPP_RINGLATENCYSTATS_ENABLE
 			print_ring_latency_stats();
 #endif /* SPP_RINGLATENCYSTATS_ENABLE */
 		}
 
-		/* エラー終了 */
+    /* TODO(yasufum) confirm, add why this check is needed because it is same the case of "ret = 0", or remove */
 		if (unlikely(ret_do != 0)) {
 			break;
 		}
 
-		/* 正常終了 */
 		ret = 0;
 		break;
 	}
 
-	/* exit */
+	/* Finalize to exit */
 	if (main_lcore_id == rte_lcore_id())
 	{
 		g_core_info[main_lcore_id].status = SPP_CORE_STOP;
@@ -965,29 +968,29 @@ ut_main(int argc, char *argv[])
 			RTE_LOG(ERR, APP, "Core did not stop.\n");
 		}
 
-		/* 使用していたVHOSTのソケットファイルを削除 */
+		/* Remove vhost sock file if it is not running in vhost-client mode */
 		del_vhost_sockfile(g_if_info.vhost_patchs);
 	}
 
-	/* 他機能部終了処理 */
-#ifdef SPP_RINGLATENCYSTATS_ENABLE /* RING滞留時間 */
+#ifdef SPP_RINGLATENCYSTATS_ENABLE
 	spp_ringlatencystats_uninit();
 #endif /* SPP_RINGLATENCYSTATS_ENABLE */
+
 	RTE_LOG(INFO, APP, "spp_vf exit.\n");
 	return ret;
 }
 
-/*
- * Get client ID
- */
 int
 spp_get_client_id(void)
 {
 	return g_startup_param.client_id;
 }
 
-/*
- * Check the MAC address used on the interface
+/**
+ * Check mac address used on the interface
+ *
+ * TODO(yasufum) refactor, change if to iface.
+ * TODO(yasufum) confirm, add the reason why this check is needed
  */
 static int
 check_mac_used_interface(uint64_t mac_addr, enum port_type *if_type, int *if_no)
@@ -1013,9 +1016,6 @@ check_mac_used_interface(uint64_t mac_addr, enum port_type *if_type, int *if_no)
 	return -1;
 }
 
-/*
- * Update Classifier_table
- */
 int
 spp_update_classifier_table(
 		enum spp_classifier_type type,
@@ -1103,18 +1103,16 @@ spp_update_classifier_table(
 		}
 	}
 
-	/* 更新コマンドで設定した場合、コア毎に変更有無を保持 */
+  /* TODO(yasufum) add desc how it is used and why changed core is kept */
 	g_change_core[patch_info->tx_core_no] = 1;
 	return SPP_RET_OK;
 }
 
-/*
- * Flush SPP component
- */
+/* Flush command to execute it */
 int
 spp_flush(void)
 {
-	int core_cnt = 0;
+	int core_cnt = 0;  /* increment core id */
 	int ret_classifier = 0;
 	struct spp_core_info *core_info = NULL;
 
@@ -1132,15 +1130,14 @@ spp_flush(void)
 		}
 	}
 
-	/* 更新完了により変更したコアをクリア */
+	/* Finally, zero-clear g_change_core */
 	memset(g_change_core, 0x00, sizeof(g_change_core));
 	return SPP_RET_OK;
 }
 
-/*
- * Iterate Classifier_table
- */
-int spp_iterate_classifier_table(struct spp_iterate_classifier_table_params *params)
+int
+spp_iterate_classifier_table(
+		struct spp_iterate_classifier_table_params *params)
 {
 	int ret;
 
-- 
1.9.1



More information about the spp mailing list