[v3,1/9] net/cpfl: parse flow parser file in devargs

Message ID 20230906093407.3635038-2-wenjing.qiao@intel.com (mailing list archive)
State Superseded, archived
Delegated to: Qi Zhang
Headers
Series add rte flow support for cpfl |

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/loongarch-compilation warning apply patch failure
ci/iol-testing warning apply patch failure

Commit Message

Wenjing Qiao Sept. 6, 2023, 9:33 a.m. UTC
  Add devargs "flow_parser" for rte_flow json parser.

Signed-off-by: Wenjing Qiao <wenjing.qiao@intel.com>
---
 doc/guides/nics/cpfl.rst       | 32 ++++++++++++++++++++++++++++
 drivers/net/cpfl/cpfl_ethdev.c | 38 +++++++++++++++++++++++++++++++++-
 drivers/net/cpfl/cpfl_ethdev.h |  3 +++
 drivers/net/cpfl/meson.build   |  6 ++++++
 4 files changed, 78 insertions(+), 1 deletion(-)
  

Comments

Jingjing Wu Sept. 11, 2023, 12:48 a.m. UTC | #1
> -----Original Message-----
> From: Qiao, Wenjing <wenjing.qiao@intel.com>
> Sent: Wednesday, September 6, 2023 5:34 PM
> To: Zhang, Yuying <yuying.zhang@intel.com>; dev@dpdk.org; Zhang, Qi Z
> <qi.z.zhang@intel.com>; Wu, Jingjing <jingjing.wu@intel.com>; Xing, Beilei
> <beilei.xing@intel.com>
> Cc: Liu, Mingxia <mingxia.liu@intel.com>; Qiao, Wenjing
> <wenjing.qiao@intel.com>
> Subject: [PATCH v3 1/9] net/cpfl: parse flow parser file in devargs
> 
> Add devargs "flow_parser" for rte_flow json parser.
> 
> Signed-off-by: Wenjing Qiao <wenjing.qiao@intel.com>
> ---
>  doc/guides/nics/cpfl.rst       | 32 ++++++++++++++++++++++++++++
>  drivers/net/cpfl/cpfl_ethdev.c | 38
> +++++++++++++++++++++++++++++++++-
>  drivers/net/cpfl/cpfl_ethdev.h |  3 +++
>  drivers/net/cpfl/meson.build   |  6 ++++++
>  4 files changed, 78 insertions(+), 1 deletion(-)
> 
> diff --git a/doc/guides/nics/cpfl.rst b/doc/guides/nics/cpfl.rst
> index c20334230b..7032dd1a1a 100644
> --- a/doc/guides/nics/cpfl.rst
> +++ b/doc/guides/nics/cpfl.rst
> @@ -128,12 +128,24 @@ Runtime Configuration
> 
>      -a BDF,representor=vf[0-3],representor=c1pf1
> 
> +- ``flow_parser`` (default ``not enabled``)
> +
> +  The PMD supports using a JSON file to parse rte_flow tokens into low level
> hardware
> +  resources defined in a DDP package file.
> +
> +  The user can specify the path of json file, for example::
> +
> +    -a ca:00.0,flow_parser="refpkg.json"
> +
> +  Then the PMD will load json file for device ``ca:00.0``.
> +  The parameter is optional.
> 
>  Driver compilation and testing
>  ------------------------------
> 
>  Refer to the document :doc:`build_and_test` for details.
> 
> +Rte flow need to install json-c library.
> 
>  Features
>  --------
> @@ -164,3 +176,23 @@ Hairpin queue
>  E2100 Series can loopback packets from RX port to TX port.
>  This feature is called port-to-port or hairpin.
>  Currently, the PMD only supports single port hairpin.
> +
> +Rte_flow
> +~~~~~~~~~~~~~
> +
> +Rte_flow uses a json file to direct CPF PMD to parse rte_flow tokens into
> +low level hardware resources defined in a DDP package file.
> +
> +#. install json-c library::
> +
> +   .. code-block:: console
> +
> +   git clone https://github.com/json-c/json-c.git
> +   cd json-c
> +   git checkout 777dd06be83ef7fac71c2218b565557cd068a714
> +
Json-c is the dependency, we can install by package management tool, such as apt, can you add that refer?
If we need to install from source code, version number might be better that commit id.
  

Patch

diff --git a/doc/guides/nics/cpfl.rst b/doc/guides/nics/cpfl.rst
index c20334230b..7032dd1a1a 100644
--- a/doc/guides/nics/cpfl.rst
+++ b/doc/guides/nics/cpfl.rst
@@ -128,12 +128,24 @@  Runtime Configuration
 
     -a BDF,representor=vf[0-3],representor=c1pf1
 
+- ``flow_parser`` (default ``not enabled``)
+
+  The PMD supports using a JSON file to parse rte_flow tokens into low level hardware
+  resources defined in a DDP package file.
+
+  The user can specify the path of json file, for example::
+
+    -a ca:00.0,flow_parser="refpkg.json"
+
+  Then the PMD will load json file for device ``ca:00.0``.
+  The parameter is optional.
 
 Driver compilation and testing
 ------------------------------
 
 Refer to the document :doc:`build_and_test` for details.
 
+Rte flow need to install json-c library.
 
 Features
 --------
@@ -164,3 +176,23 @@  Hairpin queue
 E2100 Series can loopback packets from RX port to TX port.
 This feature is called port-to-port or hairpin.
 Currently, the PMD only supports single port hairpin.
+
+Rte_flow
+~~~~~~~~~~~~~
+
+Rte_flow uses a json file to direct CPF PMD to parse rte_flow tokens into
+low level hardware resources defined in a DDP package file.
+
+#. install json-c library::
+
+   .. code-block:: console
+
+   git clone https://github.com/json-c/json-c.git
+   cd json-c
+   git checkout 777dd06be83ef7fac71c2218b565557cd068a714
+
+#. run testpmd with the json file::
+
+   .. code-block:: console
+
+   dpdk-testpmd -c 0x3 -n 4 -a 0000:af:00.6,vport=[0],flow_parser="refpkg.json" -- -i
diff --git a/drivers/net/cpfl/cpfl_ethdev.c b/drivers/net/cpfl/cpfl_ethdev.c
index 88c1479f3a..3c4a6a4724 100644
--- a/drivers/net/cpfl/cpfl_ethdev.c
+++ b/drivers/net/cpfl/cpfl_ethdev.c
@@ -21,6 +21,10 @@ 
 #define CPFL_RX_SINGLE_Q	"rx_single"
 #define CPFL_VPORT		"vport"
 
+#ifdef CPFL_FLOW_JSON_SUPPORT
+#define CPFL_FLOW_PARSER	"flow_parser"
+#endif
+
 rte_spinlock_t cpfl_adapter_lock;
 /* A list for all adapters, one adapter matches one PCI device */
 struct cpfl_adapter_list cpfl_adapter_list;
@@ -31,6 +35,9 @@  static const char * const cpfl_valid_args_first[] = {
 	CPFL_TX_SINGLE_Q,
 	CPFL_RX_SINGLE_Q,
 	CPFL_VPORT,
+#ifdef CPFL_FLOW_JSON_SUPPORT
+	CPFL_FLOW_PARSER,
+#endif
 	NULL
 };
 
@@ -1537,6 +1544,24 @@  parse_repr(const char *key __rte_unused, const char *value, void *args)
 	return 0;
 }
 
+#ifdef CPFL_FLOW_JSON_SUPPORT
+static int
+parse_file(const char *key, const char *value, void *args)
+{
+	char *name = args;
+
+	if (strlen(value) > CPFL_FLOW_FILE_LEN - 1) {
+		PMD_DRV_LOG(ERR, "file path(%s) is too long.", value);
+		return -1;
+	}
+
+	PMD_DRV_LOG(DEBUG, "value:\"%s\" for key:\"%s\"", value, key);
+	strlcpy(name, value, CPFL_FLOW_FILE_LEN);
+
+	return 0;
+}
+#endif
+
 static int
 cpfl_parse_devargs(struct rte_pci_device *pci_dev, struct cpfl_adapter_ext *adapter, bool first)
 {
@@ -1585,7 +1610,18 @@  cpfl_parse_devargs(struct rte_pci_device *pci_dev, struct cpfl_adapter_ext *adap
 				 &adapter->base.is_rx_singleq);
 	if (ret != 0)
 		goto fail;
-
+#ifdef CPFL_FLOW_JSON_SUPPORT
+	if (rte_kvargs_get(kvlist, CPFL_FLOW_PARSER)) {
+		ret = rte_kvargs_process(kvlist, CPFL_FLOW_PARSER,
+					 &parse_file, cpfl_args->flow_parser);
+		if (ret) {
+			PMD_DRV_LOG(ERR, "Failed to parser flow_parser, ret: %d", ret);
+			goto fail;
+		}
+	} else {
+		cpfl_args->flow_parser[0] = '\0';
+	}
+#endif
 fail:
 	rte_kvargs_free(kvlist);
 	return ret;
diff --git a/drivers/net/cpfl/cpfl_ethdev.h b/drivers/net/cpfl/cpfl_ethdev.h
index a891bd8df9..ed730cc0e9 100644
--- a/drivers/net/cpfl/cpfl_ethdev.h
+++ b/drivers/net/cpfl/cpfl_ethdev.h
@@ -87,6 +87,8 @@ 
 #define ACC_LCE_ID	15
 #define IMC_MBX_EFD_ID	0
 
+#define CPFL_FLOW_FILE_LEN 100
+
 struct cpfl_vport_param {
 	struct cpfl_adapter_ext *adapter;
 	uint16_t devarg_id; /* arg id from user */
@@ -100,6 +102,7 @@  struct cpfl_devargs {
 	uint16_t req_vport_nb;
 	uint8_t repr_args_num;
 	struct rte_eth_devargs repr_args[CPFL_REPR_ARG_NUM_MAX];
+	char flow_parser[CPFL_FLOW_FILE_LEN];
 };
 
 struct p2p_queue_chunks_info {
diff --git a/drivers/net/cpfl/meson.build b/drivers/net/cpfl/meson.build
index fb075c6860..0be25512c3 100644
--- a/drivers/net/cpfl/meson.build
+++ b/drivers/net/cpfl/meson.build
@@ -38,3 +38,9 @@  if arch_subdir == 'x86'
         cflags += ['-DCC_AVX512_SUPPORT']
     endif
 endif
+
+js_dep = dependency('json-c', required: false, method : 'pkg-config')
+if js_dep.found()
+    dpdk_conf.set('CPFL_FLOW_JSON_SUPPORT', true)
+    ext_deps += js_dep
+endif
\ No newline at end of file