[v3,1/9] net/cpfl: parse flow parser file in devargs
Checks
Commit Message
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
> -----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.
@@ -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
@@ -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;
@@ -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 {
@@ -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