From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 11317A046B for ; Thu, 25 Jul 2019 13:25:08 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 076131BED4; Thu, 25 Jul 2019 13:25:08 +0200 (CEST) Received: from mail-pl1-f172.google.com (mail-pl1-f172.google.com [209.85.214.172]) by dpdk.org (Postfix) with ESMTP id A896A1BD62 for ; Thu, 25 Jul 2019 13:25:06 +0200 (CEST) Received: by mail-pl1-f172.google.com with SMTP id b3so23318254plr.4 for ; Thu, 25 Jul 2019 04:25:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id; bh=WwCCL4HC3uvY7C/hmj/Rg+Bj6uXz7owW1tFg9uPaqXs=; b=M9SKPeW4hIQyHJJxfzI1tUYZHvhDGGPQiZ2d/joiXMQp/plysnOA6A60YLjK5VC3f2 pKVuKlT3OEo7cLiS9iVhC2QUVU1RKc5x5pgsq4UAvHZNPYxQ1bMj5OPRdo9IAqB70xqu um+8T/vNgqRslnLU1sDrdUs+YcY5kwH5AYSCmE9mMCglBq23JD6OZ74mOy5/QsTTNTlY Wpw4ZvTcaSk8JPltzf26CuG6aLulYfi/9qVH8CxAeCIDM0EAvwfvtt8xOZwn1jGBN2Gx 9U9N7IreB/jjiZnqliVKrCq0xT0fUSoegJvcQxEJs8PZlE2k3Qr0dFBFYu+veTGk9KrI OK6g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id; bh=WwCCL4HC3uvY7C/hmj/Rg+Bj6uXz7owW1tFg9uPaqXs=; b=KcN9RJoqtf7gQk3kcT088sarNRgLs/NKSqTeci5x/PWNhY6uznV11avHO8AMgNR0pm 6+My3q3WoE1aFXnPdP/5x6AXGP3+yRxkUCfrumLobBgHlnTLq/SbV6DFMenV7+GQNJSf t09NKY8ValeYybSlEJ4rSGgO5b9/1sCeviKWB7W4UTWozEdXxGZkqImTAmQRTdrB818l uAzVvOXuHXPauRcTTs5yj0xerKA+lmtfld9SNlu5sUN+LD1cbUfhAU1FVAYrLvSwDHZX zrF1S1IivjDFmRjtyC4EUWECDbqb7ABLz0bE5Gknmuwt2CRSHahUg8MNX2xn9e3uBwhC NJTg== X-Gm-Message-State: APjAAAUKI8UepSzillsSkSHf3phcSyTEtnuOirBad9HBUScneTA9VL98 I0Si3K9pv+k8Subpv3EAI4u/gZgA X-Google-Smtp-Source: APXvYqys7CT/3Q39OtkKh20WR5BGFL2MdNk8RGJpnlSAP36uMaVGfbL6bNXWq9U9hVhEb+/vO3l8Pg== X-Received: by 2002:a17:902:7288:: with SMTP id d8mr6699195pll.133.1564053905371; Thu, 25 Jul 2019 04:25:05 -0700 (PDT) Received: from localhost.localdomain ([192.47.164.146]) by smtp.gmail.com with ESMTPSA id q19sm54330395pfc.62.2019.07.25.04.25.03 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 25 Jul 2019 04:25:04 -0700 (PDT) From: yasufum.o@gmail.com To: spp@dpdk.org, ferruh.yigit@intel.com, yasufum.o@gmail.com Date: Thu, 25 Jul 2019 20:25:00 +0900 Message-Id: <20190725112500.27208-1-yasufum.o@gmail.com> X-Mailer: git-send-email 2.17.1 Subject: [spp] [PATCH] shared/sec: move data types from cmd_utils X-BeenThere: spp@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: Soft Patch Panel List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: spp-bounces@dpdk.org Sender: "spp" From: Yasufumi Ogawa In `cmd_utils.h`, the rest of enums, structs or functions which are not included in other specific groups, such as parser or formatter, are defined temporarily. The term `utils` means as same as `others`. This update is to move enums and structs roughly grouped in `cmd_utils.h` to `data_types.h`. This file is to define common data types among SPP worker processes, but specific data for spp_vf are still remained actually. Specific data types are moved to outside of shared directory in future patches. Signed-off-by: Yasufumi Ogawa --- src/mirror/mir_cmd_runner.c | 10 +- src/mirror/spp_mirror.c | 9 + src/pcap/cmd_utils.c | 17 +- src/pcap/cmd_utils.h | 173 +----------------- src/pcap/data_types.h | 22 +++ src/pcap/spp_pcap.c | 16 +- .../spp_worker_th/cmd_res_formatter.c | 6 +- .../secondary/spp_worker_th/cmd_utils.h | 154 +--------------- .../secondary/spp_worker_th/data_types.h | 150 +++++++++++++++ .../secondary/spp_worker_th/port_capability.c | 10 +- src/vf/spp_vf.c | 9 + src/vf/vf_cmd_runner.c | 10 +- 12 files changed, 240 insertions(+), 346 deletions(-) create mode 100644 src/pcap/data_types.h create mode 100644 src/shared/secondary/spp_worker_th/data_types.h diff --git a/src/mirror/mir_cmd_runner.c b/src/mirror/mir_cmd_runner.c index 572fb43..4e6708b 100644 --- a/src/mirror/mir_cmd_runner.c +++ b/src/mirror/mir_cmd_runner.c @@ -178,11 +178,11 @@ update_port(enum sppwk_action wk_action, /* registered */ /* TODO(yasufum) confirm it is needed for spp_mirror. */ if (port_attrs->ops == SPPWK_PORT_OPS_ADD_VLAN) { - while ((cnt < PORT_ABL_MAX) && + while ((cnt < PORT_CAPABL_MAX) && (port_info->port_attrs[cnt].ops != SPPWK_PORT_OPS_ADD_VLAN)) cnt++; - if (cnt >= PORT_ABL_MAX) { + if (cnt >= PORT_CAPABL_MAX) { RTE_LOG(ERR, MIR_CMD_RUNNER, "update VLAN tag " "Non-registratio\n"); return SPPWK_RET_NG; @@ -203,12 +203,12 @@ update_port(enum sppwk_action wk_action, } if (port_attrs->ops != SPPWK_PORT_OPS_NONE) { - while ((cnt < PORT_ABL_MAX) && + while ((cnt < PORT_CAPABL_MAX) && (port_info->port_attrs[cnt].ops != SPPWK_PORT_OPS_NONE)) { cnt++; } - if (cnt >= PORT_ABL_MAX) { + if (cnt >= PORT_CAPABL_MAX) { RTE_LOG(ERR, MIR_CMD_RUNNER, "No space of port port_attrs.\n"); return SPPWK_RET_NG; @@ -225,7 +225,7 @@ update_port(enum sppwk_action wk_action, break; case SPPWK_ACT_DEL: - for (cnt = 0; cnt < PORT_ABL_MAX; cnt++) { + for (cnt = 0; cnt < PORT_CAPABL_MAX; cnt++) { if (port_info->port_attrs[cnt].ops == SPPWK_PORT_OPS_NONE) continue; diff --git a/src/mirror/spp_mirror.c b/src/mirror/spp_mirror.c index f5cdefb..c7f00e6 100644 --- a/src/mirror/spp_mirror.c +++ b/src/mirror/spp_mirror.c @@ -34,6 +34,15 @@ #define MIR_RX_DESC_DEFAULT 1024 #define MIR_TX_DESC_DEFAULT 1024 +/* getopt_long return value for long option */ +enum SPP_LONGOPT_RETVAL { + SPP_LONGOPT_RETVAL__ = 127, + + /* Return value definition for getopt_long(). Only for long option. */ + SPP_LONGOPT_RETVAL_CLIENT_ID, /* For `--client-id` */ + SPP_LONGOPT_RETVAL_VHOST_CLIENT /* For `--vhost-client` */ +}; + /* A set of port info of rx and tx */ struct mirror_rxtx { struct sppwk_port_info rx; /* rx port */ diff --git a/src/pcap/cmd_utils.c b/src/pcap/cmd_utils.c index 3cfc609..88514c8 100644 --- a/src/pcap/cmd_utils.c +++ b/src/pcap/cmd_utils.c @@ -15,10 +15,10 @@ /* Manage data to addoress */ struct mng_data_info { - struct iface_info *p_iface_info; - struct core_mng_info *p_core_info; - int *p_capture_request; - int *p_capture_status; + struct iface_info *p_iface_info; + struct spp_pcap_core_mng_info *p_core_info; + int *p_capture_request; + int *p_capture_status; }; /* Declare global variables */ @@ -192,9 +192,10 @@ init_iface_info(void) static void init_core_info(void) { - struct core_mng_info *p_core_info = g_mng_data_addr.p_core_info; + struct spp_pcap_core_mng_info *p_core_info = + g_mng_data_addr.p_core_info; memset(p_core_info, 0x00, - sizeof(struct core_mng_info)*RTE_MAX_LCORE); + sizeof(struct spp_pcap_core_mng_info)*RTE_MAX_LCORE); set_all_core_status(SPPWK_LCORE_STOPPED); *g_mng_data_addr.p_capture_request = SPP_CAPTURE_IDLE; *g_mng_data_addr.p_capture_status = SPP_CAPTURE_IDLE; @@ -284,7 +285,7 @@ int spp_format_port_string(char *port, enum port_type iface_type, int iface_no) /* Set mange data address */ int spp_set_mng_data_addr(struct iface_info *iface_p, - struct core_mng_info *core_mng_p, + struct spp_pcap_core_mng_info *core_mng_p, int *capture_request_p, int *capture_status_p) { @@ -303,7 +304,7 @@ int spp_set_mng_data_addr(struct iface_info *iface_p, /* Get manage data address */ void spp_get_mng_data_addr(struct iface_info **iface_p, - struct core_mng_info **core_mng_p, + struct spp_pcap_core_mng_info **core_mng_p, int **capture_request_p, int **capture_status_p) { diff --git a/src/pcap/cmd_utils.h b/src/pcap/cmd_utils.h index d7ad57f..1fb8d14 100644 --- a/src/pcap/cmd_utils.h +++ b/src/pcap/cmd_utils.h @@ -11,6 +11,8 @@ #ifndef _SPPWK_CMD_UTILS_H_ #define _SPPWK_CMD_UTILS_H_ +#include "data_types.h" + /** * @file cmd_utils.h * @@ -32,161 +34,6 @@ /* Max number of core status check */ #define SPP_CORE_STATUS_CHECK_MAX 5 -/* TODO(yasufum) merge it to the same definition in shared/.../cmd_utils.h */ -/* Status of a component on lcore. */ -enum sppwk_lcore_status { - SPPWK_LCORE_UNUSED, - SPPWK_LCORE_STOPPED, - SPPWK_LCORE_IDLING, - SPPWK_LCORE_RUNNING, - SPPWK_LCORE_REQ_STOP /**< Request for stopping. */ -}; - -/* State on capture */ -enum sppwk_capture_status { - SPP_CAPTURE_IDLE, /* Idling */ - SPP_CAPTURE_RUNNING /* Running */ -}; - -/* Direction of RX or TX on a port. */ -enum sppwk_port_dir { - SPPWK_PORT_DIR_NONE, /**< None */ - SPPWK_PORT_DIR_RX, /**< RX port */ - SPPWK_PORT_DIR_TX, /**< TX port */ - SPPWK_PORT_DIR_BOTH, /**< Both of RX and TX */ -}; - -/* TODO(yasufum) merge it to the same definition in shared/.../cmd_utils.h */ -/* Type of SPP worker thread. */ -enum sppwk_worker_type { - SPPWK_TYPE_NONE, /**< Not used */ - SPPWK_TYPE_CLS, /**< Classifier_mac */ - SPPWK_TYPE_MRG, /**< Merger */ - SPPWK_TYPE_FWD, /**< Forwarder */ - SPPWK_TYPE_MIR, /**< Mirror */ -}; - -/** - * Port ability operation which indicates vlan tag operation on the port - * (e.g. add vlan tag or delete vlan tag) - */ -enum sppwk_port_ops { - SPPWK_PORT_OPS_NONE, - SPPWK_PORT_OPS_ADD_VLAN, /* Add vlan tag. */ - SPPWK_PORT_OPS_DEL_VLAN, /* Delete vlan tag. */ -}; - -/* getopt_long return value for long option */ -enum SPP_LONGOPT_RETVAL { - SPP_LONGOPT_RETVAL__ = 127, - - /* - * Return value definition for getopt_long() - * Only for long option - */ - SPP_LONGOPT_RETVAL_CLIENT_ID, /* --client-id */ - SPP_LONGOPT_RETVAL_OUT_DIR, /* --out-dir */ - SPP_LONGOPT_RETVAL_FILE_SIZE /* --fsize */ -}; - -/** VLAN tag information */ -struct sppwk_vlan_tag { - int vid; /**< VLAN ID */ - int pcp; /**< Priority Code Point */ - int tci; /**< Tag Control Information */ -}; - -/* Ability for vlantag for a port. */ -union sppwk_port_capability { - /** VLAN tag information */ - struct sppwk_vlan_tag vlantag; -}; - -/* Port attributes of SPP worker processes. */ -struct sppwk_port_attrs { - enum sppwk_port_ops ops; /**< Port capability Operations */ - enum sppwk_port_dir dir; /**< Direction of RX, TX or both */ - union sppwk_port_capability capability; /**< Port capability */ -}; - -/* TODO(yasufum) confirm why vlantag is required for spp_pcap. */ -/* Attributes for classifying . */ -struct sppwk_cls_attrs { - uint64_t mac_addr; /**< Mac address (binary) */ - char mac_addr_str[STR_LEN_SHORT]; /**< Mac address (text) */ - struct sppwk_vlan_tag vlantag; /**< VLAN tag information */ -}; - -/* Interface information structure */ -struct sppwk_port_idx { - enum port_type iface_type; /**< phy, vhost or ring. */ - int iface_no; -}; - -/* Define detailed port params in addition to `sppwk_port_idx`. */ -struct sppwk_port_info { - enum port_type iface_type; /**< phy, vhost or ring */ - int iface_no; - int ethdev_port_id; /**< Consistent ID of ethdev */ - struct sppwk_cls_attrs cls_attrs; - struct sppwk_port_attrs port_attrs[PORT_ABL_MAX]; -}; - -/* TODO(yasufum) merge it to the same definition in shared/.../cmd_utils.h */ -/* Attributes of SPP worker thread named as `component`. */ -struct sppwk_comp_info { - char name[STR_LEN_NAME]; /**< Component name */ - enum sppwk_worker_type wk_type; /**< Type of worker thread */ - unsigned int lcore_id; - int comp_id; /**< Component ID */ - int nof_rx; /**< The number of rx ports */ - int nof_tx; /**< The number of tx ports */ - struct sppwk_port_info *rx_ports[RTE_MAX_ETHPORTS]; /**< rx ports */ - struct sppwk_port_info *tx_ports[RTE_MAX_ETHPORTS]; /**< tx ports */ -}; - -/* Manage interfaces and port information as global variable */ -struct iface_info { - struct sppwk_port_info phy[RTE_MAX_ETHPORTS]; - struct sppwk_port_info ring[RTE_MAX_ETHPORTS]; -}; - -/* Manage core status and component information as global variable */ -struct core_mng_info { - /* Status of cpu core */ - volatile enum sppwk_lcore_status status; -}; - -/* TODO(yasufum) refactor name of func and vars, and comments. */ -/* TODO(yasufum) confirm this var is used in spp_pcap. */ -/* TODO(yasufum) if so, consider to merge to shared. */ -struct spp_iterate_core_params; -/** - * Define func to iterate lcore to list core information for showing status - * or so, as a member of struct `spp_iterate_core_params`. - */ -typedef int (*spp_iterate_core_element_proc)( - struct spp_iterate_core_params *params, - const unsigned int lcore_id, - const char *wk_name, - const char *wk_type, - const int nof_rx, - const struct sppwk_port_idx *rx_ports, - const int nof_tx, - const struct sppwk_port_idx *tx_ports); - -/** - * iterate core table parameters used to list content of lcore table for. - * showing status or so. - */ -/* TODO(yasufum) consider to merge to shared. */ -/* TODO(yasufum) refactor name of func and vars, and comments. */ -struct spp_iterate_core_params { - char *output; /* Buffer used for output */ - /** The function for creating core information */ - spp_iterate_core_element_proc element_proc; -}; - /** * Add ring pmd for owned proccess or thread. * @@ -260,18 +107,6 @@ get_iface_info(enum port_type iface_type, int iface_no); */ int init_mng_data(void); -/** - * Get component type of target core - * - * @param lcore_id - * Logical core ID. - * - * @return - * Type of component executed on specified logical core - */ -enum spp_component_type -spp_get_component_type(unsigned int lcore_id); - /* Get core information which is in use */ struct core_info *get_core_info(unsigned int lcore_id); @@ -315,7 +150,7 @@ spp_format_port_string(char *port, enum port_type iface_type, int iface_no); * @retval SPPWK_RET_NG If failed. */ int spp_set_mng_data_addr(struct iface_info *iface_p, - struct core_mng_info *core_mng_p, + struct spp_pcap_core_mng_info *core_mng_p, int *capture_request_p, int *capture_status_p); @@ -328,7 +163,7 @@ int spp_set_mng_data_addr(struct iface_info *iface_p, * @param capture_status_p Pointer to req of pcap. */ void spp_get_mng_data_addr(struct iface_info **iface_p, - struct core_mng_info **core_mng_p, + struct spp_pcap_core_mng_info **core_mng_p, int **capture_request_p, int **capture_status_p); diff --git a/src/pcap/data_types.h b/src/pcap/data_types.h new file mode 100644 index 0000000..5555a8d --- /dev/null +++ b/src/pcap/data_types.h @@ -0,0 +1,22 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright(c) 2019 Nippon Telegraph and Telephone Corporation + */ + +#ifndef __SPP_PCAP_DATA_TYPES_H__ +#define __SPP_PCAP_DATA_TYPES_H__ + +#include "shared/secondary/spp_worker_th/data_types.h" + +/* State on capture */ +enum sppwk_capture_status { + SPP_CAPTURE_IDLE, /* Idling */ + SPP_CAPTURE_RUNNING /* Running */ +}; + +/* Manage core status and component information as global variable */ +struct spp_pcap_core_mng_info { + /* Status of cpu core */ + volatile enum sppwk_lcore_status status; +}; + +#endif /* __SPP_PCAP_DATA_TYPES_H__ */ diff --git a/src/pcap/spp_pcap.c b/src/pcap/spp_pcap.c index 9170d35..e6ae01a 100644 --- a/src/pcap/spp_pcap.c +++ b/src/pcap/spp_pcap.c @@ -13,6 +13,7 @@ #include #include "shared/common.h" +#include "data_types.h" #include "cmd_utils.h" #include "spp_pcap.h" #include "cmd_runner.h" @@ -53,6 +54,19 @@ /* Ensure snaplen not to be over the maximum size */ #define TRANCATE_SNAPLEN(a, b) (((a) < (b))?(a):(b)) +/* getopt_long return value for long option */ +enum SPP_LONGOPT_RETVAL { + SPP_LONGOPT_RETVAL__ = 127, + + /* + * Return value definition for getopt_long() + * Only for long option + */ + SPP_LONGOPT_RETVAL_CLIENT_ID, /* --client-id */ + SPP_LONGOPT_RETVAL_OUT_DIR, /* --out-dir */ + SPP_LONGOPT_RETVAL_FILE_SIZE /* --fsize */ +}; + /* capture thread type */ enum worker_thread_type { PCAP_UNUSE, /* Not used */ @@ -138,7 +152,7 @@ struct pcap_status_info { static struct iface_info g_iface_info; /* Core management information */ -static struct core_mng_info g_core_info[RTE_MAX_LCORE]; +static struct spp_pcap_core_mng_info g_core_info[RTE_MAX_LCORE]; /* Packet capture request information */ static int g_capture_request; diff --git a/src/shared/secondary/spp_worker_th/cmd_res_formatter.c b/src/shared/secondary/spp_worker_th/cmd_res_formatter.c index eb04241..c6a9e3c 100644 --- a/src/shared/secondary/spp_worker_th/cmd_res_formatter.c +++ b/src/shared/secondary/spp_worker_th/cmd_res_formatter.c @@ -156,7 +156,7 @@ append_vlan_block(const char *name, char **output, } sppwk_get_port_attrs(&port_attrs, port_id, dir); - for (i = 0; i < PORT_ABL_MAX; i++) { + for (i = 0; i < PORT_CAPABL_MAX; i++) { switch (port_attrs[i].ops) { case SPPWK_PORT_OPS_ADD_VLAN: case SPPWK_PORT_OPS_DEL_VLAN: @@ -171,14 +171,14 @@ append_vlan_block(const char *name, char **output, * An if statement after loop termination is false * by "maximum+1 ". */ - i = PORT_ABL_MAX + 1; + i = PORT_CAPABL_MAX + 1; break; default: /* not used */ break; } } - if (i == PORT_ABL_MAX) { + if (i == PORT_CAPABL_MAX) { ret = append_vlan_value(&tmp_buff, SPPWK_PORT_OPS_NONE, 0, 0); if (unlikely(ret < SPPWK_RET_OK)) diff --git a/src/shared/secondary/spp_worker_th/cmd_utils.h b/src/shared/secondary/spp_worker_th/cmd_utils.h index 6e9695c..0e67357 100644 --- a/src/shared/secondary/spp_worker_th/cmd_utils.h +++ b/src/shared/secondary/spp_worker_th/cmd_utils.h @@ -2,8 +2,8 @@ * Copyright(c) 2018-2019 Nippon Telegraph and Telephone Corporation */ -#ifndef _SPPWK_CMD_UTILS_H_ -#define _SPPWK_CMD_UTILS_H_ +#ifndef __SPPWK_CMD_UTILS_H__ +#define __SPPWK_CMD_UTILS_H__ /** * @file cmd_utils.h @@ -12,6 +12,7 @@ */ #include +#include "data_types.h" #include "shared/common.h" /** @@ -40,12 +41,6 @@ */ #define TWO_SIDES 2 -#define STR_LEN_SHORT 32 /* Size of short string. */ -#define STR_LEN_NAME 128 /* Size of string for names. */ - -/* TODO(yasufum) confirm usage of this value and why it is 4. */ -#define PORT_ABL_MAX 4 /* Max num of port abilities. */ - /** Maximum VLAN PCP, used only for spp_vf. */ #define SPP_VLAN_PCP_MAX 7 @@ -74,25 +69,6 @@ #define CORE_TYPE_FORWARD_STR "forward" #define CORE_TYPE_MIRROR_STR "mirror" -/* Status of a component on lcore. */ -enum sppwk_lcore_status { - SPPWK_LCORE_UNUSED, - SPPWK_LCORE_STOPPED, - SPPWK_LCORE_IDLING, - SPPWK_LCORE_RUNNING, - SPPWK_LCORE_REQ_STOP /**< Request for stopping. */ -}; - -/* Type of SPP worker thread. */ -/* TODO(yasufum) it should be separated into each process. */ -enum sppwk_worker_type { - SPPWK_TYPE_NONE, /**< Not used */ - SPPWK_TYPE_CLS, /**< Classifier_mac */ - SPPWK_TYPE_MRG, /**< Merger */ - SPPWK_TYPE_FWD, /**< Forwarder */ - SPPWK_TYPE_MIR, /**< Mirror */ -}; - /* Classifier Type */ enum sppwk_cls_type { SPPWK_CLS_TYPE_NONE, @@ -100,33 +76,6 @@ enum sppwk_cls_type { SPPWK_CLS_TYPE_VLAN }; -/* Direction of RX or TX on a port. */ -enum sppwk_port_dir { - SPPWK_PORT_DIR_NONE, /**< None */ - SPPWK_PORT_DIR_RX, /**< RX port */ - SPPWK_PORT_DIR_TX, /**< TX port */ - SPPWK_PORT_DIR_BOTH, /**< Both of RX and TX */ -}; - -/** - * Port ability operation which indicates vlan tag operation on the port - * (e.g. add vlan tag or delete vlan tag) - */ -enum sppwk_port_ops { - SPPWK_PORT_OPS_NONE, - SPPWK_PORT_OPS_ADD_VLAN, /* Add vlan tag. */ - SPPWK_PORT_OPS_DEL_VLAN, /* Delete vlan tag. */ -}; - -/* getopt_long return value for long option */ -enum SPP_LONGOPT_RETVAL { - SPP_LONGOPT_RETVAL__ = 127, - - /* Return value definition for getopt_long(). Only for long option. */ - SPP_LONGOPT_RETVAL_CLIENT_ID, /* For `--client-id` */ - SPP_LONGOPT_RETVAL_VHOST_CLIENT /* For `--vhost-client` */ -}; - /* Flag of processing type to copy management information */ /* TODO(yasufum) add comments for each of members. */ enum copy_mng_flg { @@ -135,74 +84,6 @@ enum copy_mng_flg { COPY_MNG_FLG_ALLCOPY, }; -/** VLAN tag information */ -struct sppwk_vlan_tag { - int vid; /**< VLAN ID */ - int pcp; /**< Priority Code Point */ - int tci; /**< Tag Control Information */ -}; - -/* Ability for vlantag for a port. */ -union sppwk_port_capability { - /** VLAN tag information */ - struct sppwk_vlan_tag vlantag; -}; - -/* Port attributes of SPP worker processes. */ -struct sppwk_port_attrs { - enum sppwk_port_ops ops; /**< Port capability Operations */ - enum sppwk_port_dir dir; /**< Direction of RX, TX or both */ - union sppwk_port_capability capability; /**< Port capability */ -}; - -/* Attributes for classifying. */ -struct sppwk_cls_attrs { - uint64_t mac_addr; /**< Mac address (binary) */ - char mac_addr_str[STR_LEN_SHORT]; /**< Mac address (text) */ - struct sppwk_vlan_tag vlantag; /**< VLAN tag information */ -}; - -/** - * Simply define type and index of resource UID such as phy:0. For detailed - * attributions, use `sppwk_port_info` which has additional port params. - */ -struct sppwk_port_idx { - enum port_type iface_type; /**< phy, vhost or ring. */ - int iface_no; -}; - -/* Define detailed port params in addition to `sppwk_port_idx`. */ -struct sppwk_port_info { - enum port_type iface_type; /**< phy, vhost or ring */ - int iface_no; - int ethdev_port_id; /**< Consistent ID of ethdev */ - struct sppwk_cls_attrs cls_attrs; - struct sppwk_port_attrs port_attrs[PORT_ABL_MAX]; -}; - -/* Attributes of SPP worker thread named as `component`. */ -struct sppwk_comp_info { - char name[STR_LEN_NAME]; /**< Component name */ - enum sppwk_worker_type wk_type; /**< Type of worker thread */ - unsigned int lcore_id; - int comp_id; /**< Component ID */ - int nof_rx; /**< The number of rx ports */ - int nof_tx; /**< The number of tx ports */ - struct sppwk_port_info *rx_ports[RTE_MAX_ETHPORTS]; /**< rx ports */ - struct sppwk_port_info *tx_ports[RTE_MAX_ETHPORTS]; /**< tx ports */ -}; - -/* Manage number of interfaces and port information as global variable. */ -/** - * TODO(yasufum) confirm why having arrays of types. it seems OK having - * just one array. - */ -struct iface_info { - struct sppwk_port_info phy[RTE_MAX_ETHPORTS]; - struct sppwk_port_info vhost[RTE_MAX_ETHPORTS]; - struct sppwk_port_info ring[RTE_MAX_ETHPORTS]; -}; - /* Manage component running in core as global variable. */ struct core_info { int num; /* Number of IDs below */ @@ -227,33 +108,6 @@ struct cancel_backup_info { struct iface_info interface; }; -/* TODO(yasufum) revise using term `iterate`, or comments. */ -struct spp_iterate_core_params; -/** - * Define func to iterate lcore to list core information for showing status - * or so, as a member of struct `spp_iterate_core_params`. - */ -typedef int (*spp_iterate_core_element_proc)( - struct spp_iterate_core_params *params, - const unsigned int lcore_id, - const char *wk_name, /* Name of worker named as component. */ - const char *wk_type, /* Type of worker named as component. */ - const int nof_rx, /* Number of RX ports */ - const struct sppwk_port_idx *rx_ports, - const int nof_tx, /* Number of TX ports */ - const struct sppwk_port_idx *tx_ports); - -/** - * iterate core table parameters used to list content of lcore table for. - * showing status or so. - */ -/* TODO(yasufum) refactor name of func and vars, and comments. */ -struct spp_iterate_core_params { - char *output; /* Buffer used for output */ - /** The function for creating core information */ - spp_iterate_core_element_proc element_proc; -}; - struct spp_iterate_classifier_table_params; /** * Define func to iterate classifier for showing status or so, as a member @@ -535,4 +389,4 @@ void sppwk_get_mng_data(struct iface_info **iface_p, int **change_component_p, struct cancel_backup_info **backup_info_p); -#endif /* _SPPWK_CMD_UTILS_H_ */ +#endif /* __SPPWK_CMD_UTILS_H__ */ diff --git a/src/shared/secondary/spp_worker_th/data_types.h b/src/shared/secondary/spp_worker_th/data_types.h new file mode 100644 index 0000000..7b24df3 --- /dev/null +++ b/src/shared/secondary/spp_worker_th/data_types.h @@ -0,0 +1,150 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright(c) 2019 Nippon Telegraph and Telephone Corporation + */ + +#ifndef __SPPWK_DATA_TYPES_H__ +#define __SPPWK_DATA_TYPES_H__ + +#include "shared/common.h" + +#define STR_LEN_SHORT 32 /* Size of short string. */ +#define STR_LEN_NAME 128 /* Size of string for names. */ + +/* TODO(yasufum) confirm usage of this value and why it is 4. */ +#define PORT_CAPABL_MAX 4 /* Max num of port abilities. */ + +/* Status of a component on lcore. */ +enum sppwk_lcore_status { + SPPWK_LCORE_UNUSED, + SPPWK_LCORE_STOPPED, + SPPWK_LCORE_IDLING, + SPPWK_LCORE_RUNNING, + SPPWK_LCORE_REQ_STOP /**< Request for stopping. */ +}; + +/* Direction of RX or TX on a port. */ +enum sppwk_port_dir { + SPPWK_PORT_DIR_NONE, /**< None */ + SPPWK_PORT_DIR_RX, /**< RX port */ + SPPWK_PORT_DIR_TX, /**< TX port */ + SPPWK_PORT_DIR_BOTH, /**< Both of RX and TX */ +}; + +/** + * Port ability operation which indicates vlan tag operation on the port + * (e.g. add vlan tag or delete vlan tag) + */ +enum sppwk_port_ops { + SPPWK_PORT_OPS_NONE, + SPPWK_PORT_OPS_ADD_VLAN, /* Add vlan tag. */ + SPPWK_PORT_OPS_DEL_VLAN, /* Delete vlan tag. */ +}; + +/** VLAN tag information */ +struct sppwk_vlan_tag { + int vid; /**< VLAN ID */ + int pcp; /**< Priority Code Point */ + int tci; /**< Tag Control Information */ +}; + +/* Ability for vlantag for a port. */ +union sppwk_port_capability { + /** VLAN tag information */ + struct sppwk_vlan_tag vlantag; +}; + +/* Port attributes of SPP worker processes. */ +struct sppwk_port_attrs { + enum sppwk_port_ops ops; /**< Port capability Operations */ + enum sppwk_port_dir dir; /**< Direction of RX, TX or both */ + union sppwk_port_capability capability; /**< Port capability */ +}; + +/* Type of SPP worker thread. */ +/* TODO(yasufum) it should be separated into each process. */ +enum sppwk_worker_type { + SPPWK_TYPE_NONE, /**< Not used */ + SPPWK_TYPE_CLS, /**< Classifier_mac */ + SPPWK_TYPE_MRG, /**< Merger */ + SPPWK_TYPE_FWD, /**< Forwarder */ + SPPWK_TYPE_MIR, /**< Mirror */ +}; + +/* Attributes for classifying. */ +struct sppwk_cls_attrs { + uint64_t mac_addr; /**< Mac address (binary) */ + char mac_addr_str[STR_LEN_SHORT]; /**< Mac address (text) */ + struct sppwk_vlan_tag vlantag; /**< VLAN tag information */ +}; + +/** + * Simply define type and index of resource UID such as phy:0. For detailed + * attributions, use `sppwk_port_info` which has additional port params. + */ +struct sppwk_port_idx { + enum port_type iface_type; /**< phy, vhost or ring. */ + int iface_no; +}; + +/* Define detailed port params in addition to `sppwk_port_idx`. */ +struct sppwk_port_info { + enum port_type iface_type; /**< phy, vhost or ring */ + int iface_no; + int ethdev_port_id; /**< Consistent ID of ethdev */ + struct sppwk_cls_attrs cls_attrs; + struct sppwk_port_attrs port_attrs[PORT_CAPABL_MAX]; +}; + +/* Attributes of SPP worker thread named as `component`. */ +struct sppwk_comp_info { + char name[STR_LEN_NAME]; /**< Component name */ + enum sppwk_worker_type wk_type; /**< Type of worker thread */ + unsigned int lcore_id; + int comp_id; /**< Component ID */ + int nof_rx; /**< The number of rx ports */ + int nof_tx; /**< The number of tx ports */ + struct sppwk_port_info *rx_ports[RTE_MAX_ETHPORTS]; /**< rx ports */ + struct sppwk_port_info *tx_ports[RTE_MAX_ETHPORTS]; /**< tx ports */ +}; + +/* Manage number of interfaces and port information as global variable. */ +/** + * TODO(yasufum) confirm why having arrays of types. it seems OK having + * just one array. + * TODO(yasufum) spp_pcap does not support vhost currently, consider support + * or not. + */ +struct iface_info { + struct sppwk_port_info phy[RTE_MAX_ETHPORTS]; + struct sppwk_port_info vhost[RTE_MAX_ETHPORTS]; + struct sppwk_port_info ring[RTE_MAX_ETHPORTS]; +}; + +/* TODO(yasufum) revise using term `iterate`, or comments. */ +struct spp_iterate_core_params; +/** + * Define func to iterate lcore to list core information for showing status + * or so, as a member of struct `spp_iterate_core_params`. + */ +typedef int (*spp_iterate_core_element_proc)( + struct spp_iterate_core_params *params, + const unsigned int lcore_id, + const char *wk_name, /* Name of worker named as component. */ + const char *wk_type, /* Type of worker named as component. */ + const int nof_rx, /* Number of RX ports */ + const struct sppwk_port_idx *rx_ports, + const int nof_tx, /* Number of TX ports */ + const struct sppwk_port_idx *tx_ports); + +/** + * iterate core table parameters used to list content of lcore table for. + * showing status or so. + */ +/* TODO(yasufum) refactor name of func and vars, and comments. */ +struct spp_iterate_core_params { + char *output; /* Buffer used for output */ + /** The function for creating core information */ + spp_iterate_core_element_proc element_proc; +}; + +#endif /* __SPPWK_DATA_TYPES_H__ */ diff --git a/src/shared/secondary/spp_worker_th/port_capability.c b/src/shared/secondary/spp_worker_th/port_capability.c index 43dda54..d4276f1 100644 --- a/src/shared/secondary/spp_worker_th/port_capability.c +++ b/src/shared/secondary/spp_worker_th/port_capability.c @@ -34,8 +34,8 @@ struct port_capabl_mng_info { volatile int upd_index; /* Flag to indicate using update side. */ /* A set of attrs including sppwk_port_capability. */ - /* TODO(yasufum) confirm why using PORT_ABL_MAX. */ - struct sppwk_port_attrs port_attrs[TWO_SIDES][PORT_ABL_MAX]; + /* TODO(yasufum) confirm why using PORT_CAPABL_MAX. */ + struct sppwk_port_attrs port_attrs[TWO_SIDES][PORT_CAPABL_MAX]; }; /* Port ability port information */ @@ -284,8 +284,8 @@ update_port_attrs(struct sppwk_port_info *port, port_attrs_out = mng->port_attrs[mng->upd_index]; memset(port_attrs_out, 0x00, sizeof(struct sppwk_port_attrs) - * PORT_ABL_MAX); - for (in_cnt = 0; in_cnt < PORT_ABL_MAX; in_cnt++) { + * PORT_CAPABL_MAX); + for (in_cnt = 0; in_cnt < PORT_CAPABL_MAX; in_cnt++) { if (port_attrs_in[in_cnt].dir != dir) continue; @@ -356,7 +356,7 @@ vlan_operation(uint16_t port_id, struct rte_mbuf **pkts, const uint16_t nb_pkts, if (unlikely(port_attrs[0].ops == SPPWK_PORT_OPS_NONE)) return nb_pkts; - for (cnt = 0; cnt < PORT_ABL_MAX; cnt++) { + for (cnt = 0; cnt < PORT_CAPABL_MAX; cnt++) { /* Do nothing if the port is assigned no VLAN feature. */ if (port_attrs[cnt].ops == SPPWK_PORT_OPS_NONE) break; diff --git a/src/vf/spp_vf.c b/src/vf/spp_vf.c index c05ba5e..caf4678 100644 --- a/src/vf/spp_vf.c +++ b/src/vf/spp_vf.c @@ -21,6 +21,15 @@ #include "shared/secondary/spp_worker_th/ringlatencystats.h" #endif +/* getopt_long return value for long option */ +enum SPP_LONGOPT_RETVAL { + SPP_LONGOPT_RETVAL__ = 127, + + /* Return value definition for getopt_long(). Only for long option. */ + SPP_LONGOPT_RETVAL_CLIENT_ID, /* For `--client-id` */ + SPP_LONGOPT_RETVAL_VHOST_CLIENT /* For `--vhost-client` */ +}; + /* Declare global variables */ /* Interface management information */ static struct iface_info g_iface_info; diff --git a/src/vf/vf_cmd_runner.c b/src/vf/vf_cmd_runner.c index aa698c2..16328f4 100644 --- a/src/vf/vf_cmd_runner.c +++ b/src/vf/vf_cmd_runner.c @@ -299,11 +299,11 @@ update_port(enum sppwk_action wk_action, if (port_idx >= SPPWK_RET_OK) { /* registered */ if (port_attrs->ops == SPPWK_PORT_OPS_ADD_VLAN) { - while ((cnt < PORT_ABL_MAX) && + while ((cnt < PORT_CAPABL_MAX) && (port_info->port_attrs[cnt].ops != SPPWK_PORT_OPS_ADD_VLAN)) cnt++; - if (cnt >= PORT_ABL_MAX) { + if (cnt >= PORT_CAPABL_MAX) { RTE_LOG(ERR, VF_CMD_RUNNER, "update VLAN tag " "Non-registratio\n"); return SPPWK_RET_NG; @@ -324,12 +324,12 @@ update_port(enum sppwk_action wk_action, } if (port_attrs->ops != SPPWK_PORT_OPS_NONE) { - while ((cnt < PORT_ABL_MAX) && + while ((cnt < PORT_CAPABL_MAX) && (port_info->port_attrs[cnt].ops != SPPWK_PORT_OPS_NONE)) { cnt++; } - if (cnt >= PORT_ABL_MAX) { + if (cnt >= PORT_CAPABL_MAX) { RTE_LOG(ERR, VF_CMD_RUNNER, "No space of port ability.\n"); return SPPWK_RET_NG; @@ -346,7 +346,7 @@ update_port(enum sppwk_action wk_action, break; case SPPWK_ACT_DEL: - for (cnt = 0; cnt < PORT_ABL_MAX; cnt++) { + for (cnt = 0; cnt < PORT_CAPABL_MAX; cnt++) { if (port_info->port_attrs[cnt].ops == SPPWK_PORT_OPS_NONE) continue; -- 2.17.1