[spp] [PATCH 05/57] spp_vf: add procedure that mac address is null

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


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

spp_vf supports command for modifying classifier table.

* Add procedure that MAC address is null.
* Refactor classifier table initialization.
* Refactor classifier table switching.

Signed-off-by: Daiki Yamashita <yamashita.daiki.z01 at as.ntt-tx.co.jp>
Signed-off-by: Yasufum Ogawa <ogawa.yasufumi at lab.ntt.co.jp>
---
 src/vf/classifier_mac.c | 55 ++++++++++++++++++++++++++-----------------------
 src/vf/classifier_mac.h |  4 ++++
 2 files changed, 33 insertions(+), 26 deletions(-)

diff --git a/src/vf/classifier_mac.c b/src/vf/classifier_mac.c
index 6d8b222..6808062 100644
--- a/src/vf/classifier_mac.c
+++ b/src/vf/classifier_mac.c
@@ -104,6 +104,10 @@ init_classifier_table(struct rte_hash **classifier_table,
 	rte_hash_reset(*classifier_table);
 
 	for (i = 0; i < core_info->num_tx_port; i++) {
+		if (core_info->tx_ports[i].mac_addr == 0) {
+			continue;
+		}
+
 		rte_memcpy(&eth_addr, &core_info->tx_ports[i].mac_addr, ETHER_ADDR_LEN);
 
 		/* add entry to classifier mac table */
@@ -188,25 +192,15 @@ init_classifier(const struct spp_core_info *core_info,
 	classifier_mac_table = &classifier_mng_info->info[classifier_mng_info->ref_index].
 			classifier_table;
 
-	for (i = 0; i < core_info->num_tx_port; i++) {
-		rte_memcpy(&eth_addr, &core_info->tx_ports[i].mac_addr, ETHER_ADDR_LEN);
-
-		/* TODO:when modify this code, consider to use init_classifier_table function */
-
-		/* add entry to classifier mac table */
-		ret = rte_hash_add_key_data(*classifier_mac_table,
-				(void*)&eth_addr, (void*)(long)i);
-		if (unlikely(ret < 0)) {
-			ether_format_addr(mac_addr_str, sizeof(mac_addr_str), &eth_addr);
-			RTE_LOG(ERR, SPP_CLASSIFIER_MAC,
-					"Cannot add entry to classifier mac table. "
-					"ret=%d, mac_addr=%s\n", ret, mac_addr_str);
-			rte_hash_free(*classifier_mac_table);
-			*classifier_mac_table = NULL;
-			return -1;
-		}
+	ret = init_classifier_table(classifier_mac_table, core_info);
+	if (unlikely(ret != 0)) {
+		RTE_LOG(ERR, SPP_CLASSIFIER_MAC,
+				"Cannot initialize classifer mac table. ret=%d\n", ret);
+		return -1;
+	}
 
-		/* set value */
+	/* store ports information */
+	for (i = 0; i < core_info->num_tx_port; i++) {
 		classified_data[i].if_type = core_info->tx_ports[i].if_type;
 		classified_data[i].if_no   = i;
 		classified_data[i].tx_port = core_info->tx_ports[i].dpdk_port;
@@ -301,6 +295,19 @@ classify_packet(struct rte_mbuf **rx_pkts, uint16_t n_rx,
 	}
 }
 
+static inline void
+change_update_index(struct classifier_mac_mng_info *classifier_mng_info, unsigned int lcore_id)
+{
+	if (unlikely(classifier_mng_info->ref_index == 
+			classifier_mng_info->upd_index)) {
+		RTE_LOG(DEBUG, SPP_CLASSIFIER_MAC,
+				"Core[%u] Change update index.", lcore_id);
+		classifier_mng_info->upd_index = 
+				(classifier_mng_info->upd_index + 1) % 
+				NUM_CLASSIFIER_MAC_INFO;
+	}
+}
+
 /* classifier(mac address) update component info. */
 int
 spp_classifier_mac_update(struct spp_core_info *core_info)
@@ -375,14 +382,7 @@ spp_classifier_mac_do(void *arg)
 
 		while(likely(core_info->status == SPP_CORE_FORWARD)) {
 			/* change index of update side */
-			if (unlikely(classifier_mng_info->ref_index == 
-					classifier_mng_info->upd_index)) {
-				RTE_LOG(DEBUG, SPP_CLASSIFIER_MAC,
-						"Core[%u] Change update index.", lcore_id);
-				classifier_mng_info->upd_index = 
-						(classifier_mng_info->upd_index + 1) % 
-						NUM_CLASSIFIER_MAC_INFO;
-			}
+			change_update_index(classifier_mng_info, lcore_id);
 
 			/* decide classifier infomation of the current cycle */
 			classifier_info = classifier_mng_info->info + 
@@ -424,6 +424,9 @@ spp_classifier_mac_do(void *arg)
 		}
 	}
 
+	/* just in case */
+	change_update_index(classifier_mng_info, lcore_id);
+
 	/* uninitialize */
 	uninit_classifier(classifier_mng_info);
 
diff --git a/src/vf/classifier_mac.h b/src/vf/classifier_mac.h
index 6bbdb15..98f47a5 100644
--- a/src/vf/classifier_mac.h
+++ b/src/vf/classifier_mac.h
@@ -1,6 +1,7 @@
 #ifndef _CLASSIFIER_MAC_H_
 #define _CLASSIFIER_MAC_H_
 
+/* forward declaration */
 struct spp_core_info;
 
 /**
@@ -8,6 +9,9 @@ struct spp_core_info;
  *
  * @param core_info
  *  point to struct spp_core_info.
+ *
+ * @ret_val 0  succeeded.
+ * @ret_val -1 failed.
  */
 int spp_classifier_mac_update(struct spp_core_info *core_info);
 
-- 
1.9.1



More information about the spp mailing list