From: Dekel Peled <dekelp@nvidia.com> To: orika@nvidia.com, thomas@monjalon.net, ferruh.yigit@intel.com, arybchenko@solarflare.com, konstantin.ananyev@intel.com, olivier.matz@6wind.com, wenzhuo.lu@intel.com, beilei.xing@intel.com, bernard.iremonger@intel.com, matan@nvidia.com, shahafs@nvidia.com, viacheslavo@nvidia.com Cc: dev@dpdk.org Subject: [dpdk-dev] [PATCH v4 09/11] net/mlx5: support match on IPv6 fragment ext. item Date: Wed, 7 Oct 2020 13:54:08 +0300 Message-ID: <e55d04c31e1b5b3c02bc55e5da91122b53b4c318.1602064141.git.dekelp@nvidia.com> (raw) In-Reply-To: <cover.1602064141.git.dekelp@nvidia.com> rte_flow update, following RFC [1], added to ethdev the rte_flow item ipv6_frag_ext. This patch adds to MLX5 PMD the option to match on this item type. [1] http://mails.dpdk.org/archives/dev/2020-March/160255.html Signed-off-by: Dekel Peled <dekelp@nvidia.com> Acked-by: Ori Kam <orika@nvidia.com> --- drivers/net/mlx5/mlx5_flow.h | 4 + drivers/net/mlx5/mlx5_flow_dv.c | 209 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 213 insertions(+) diff --git a/drivers/net/mlx5/mlx5_flow.h b/drivers/net/mlx5/mlx5_flow.h index 1e30c93..376519f 100644 --- a/drivers/net/mlx5/mlx5_flow.h +++ b/drivers/net/mlx5/mlx5_flow.h @@ -122,6 +122,10 @@ enum mlx5_feature_name { /* Pattern eCPRI Layer bit. */ #define MLX5_FLOW_LAYER_ECPRI (UINT64_C(1) << 29) +/* IPv6 Fragment Extension Header bit. */ +#define MLX5_FLOW_LAYER_OUTER_L3_IPV6_FRAG_EXT (1u << 30) +#define MLX5_FLOW_LAYER_INNER_L3_IPV6_FRAG_EXT (1u << 31) + /* Outer Masks. */ #define MLX5_FLOW_LAYER_OUTER_L3 \ (MLX5_FLOW_LAYER_OUTER_L3_IPV4 | MLX5_FLOW_LAYER_OUTER_L3_IPV6) diff --git a/drivers/net/mlx5/mlx5_flow_dv.c b/drivers/net/mlx5/mlx5_flow_dv.c index 4403abc..eb1db12 100644 --- a/drivers/net/mlx5/mlx5_flow_dv.c +++ b/drivers/net/mlx5/mlx5_flow_dv.c @@ -1901,6 +1901,120 @@ struct field_modify_info modify_tcp[] = { } /** + * Validate IPV6 fragment extension item. + * + * @param[in] item + * Item specification. + * @param[in] item_flags + * Bit-fields that holds the items detected until now. + * @param[out] error + * Pointer to error structure. + * + * @return + * 0 on success, a negative errno value otherwise and rte_errno is set. + */ +static int +flow_dv_validate_item_ipv6_frag_ext(const struct rte_flow_item *item, + uint64_t item_flags, + struct rte_flow_error *error) +{ + const struct rte_flow_item_ipv6_frag_ext *spec = item->spec; + const struct rte_flow_item_ipv6_frag_ext *last = item->last; + const struct rte_flow_item_ipv6_frag_ext *mask = item->mask; + rte_be16_t frag_data_spec = 0; + rte_be16_t frag_data_last = 0; + const int tunnel = !!(item_flags & MLX5_FLOW_LAYER_TUNNEL); + const uint64_t l4m = tunnel ? MLX5_FLOW_LAYER_INNER_L4 : + MLX5_FLOW_LAYER_OUTER_L4; + int ret = 0; + struct rte_flow_item_ipv6_frag_ext nic_mask = { + .hdr = { + .next_header = 0xff, + .frag_data = RTE_BE16(0xffff), + }, + }; + + if (item_flags & l4m) + return rte_flow_error_set(error, EINVAL, + RTE_FLOW_ERROR_TYPE_ITEM, item, + "ipv6 fragment extension item cannot " + "follow L4 item."); + if ((tunnel && !(item_flags & MLX5_FLOW_LAYER_INNER_L3_IPV6)) || + (!tunnel && !(item_flags & MLX5_FLOW_LAYER_OUTER_L3_IPV6))) + return rte_flow_error_set(error, EINVAL, + RTE_FLOW_ERROR_TYPE_ITEM, item, + "ipv6 fragment extension item must " + "follow ipv6 item"); + if (spec && mask) + frag_data_spec = spec->hdr.frag_data & mask->hdr.frag_data; + if (!frag_data_spec) + return 0; + /* + * spec and mask are valid, enforce using full mask to make sure the + * complete value is used correctly. + */ + if ((mask->hdr.frag_data & RTE_BE16(RTE_IPV6_FRAG_USED_MASK)) != + RTE_BE16(RTE_IPV6_FRAG_USED_MASK)) + return rte_flow_error_set(error, EINVAL, + RTE_FLOW_ERROR_TYPE_ITEM_MASK, + item, "must use full mask for" + " frag_data"); + /* + * Match on frag_data 0x00001 means M is 1 and frag-offset is 0. + * This is 1st fragment of fragmented packet. + */ + if (frag_data_spec == RTE_BE16(RTE_IPV6_EHDR_MF_MASK)) + return rte_flow_error_set(error, ENOTSUP, + RTE_FLOW_ERROR_TYPE_ITEM, item, + "match on first fragment not " + "supported"); + if (frag_data_spec && !last) + return rte_flow_error_set(error, EINVAL, + RTE_FLOW_ERROR_TYPE_ITEM, item, + "specified value not supported"); + ret = mlx5_flow_item_acceptable + (item, (const uint8_t *)mask, + (const uint8_t *)&nic_mask, + sizeof(struct rte_flow_item_ipv6_frag_ext), + MLX5_ITEM_RANGE_ACCEPTED, error); + if (ret) + return ret; + /* spec and last are valid, validate the specified range. */ + frag_data_last = last->hdr.frag_data & mask->hdr.frag_data; + /* + * Match on frag_data spec 0x0009 and last 0xfff9 + * means M is 1 and frag-offset is > 0. + * This packet is fragment 2nd and onward, excluding last. + * This is not yet supported in MLX5, return appropriate + * error message. + */ + if (frag_data_spec == RTE_BE16(RTE_IPV6_EHDR_FO_ALIGN | + RTE_IPV6_EHDR_MF_MASK) && + frag_data_last == RTE_BE16(RTE_IPV6_FRAG_USED_MASK)) + return rte_flow_error_set(error, ENOTSUP, + RTE_FLOW_ERROR_TYPE_ITEM_LAST, + last, "match on following " + "fragments not supported"); + /* + * Match on frag_data spec 0x0008 and last 0xfff8 + * means M is 0 and frag-offset is > 0. + * This packet is last fragment of fragmented packet. + * This is not yet supported in MLX5, return appropriate + * error message. + */ + if (frag_data_spec == RTE_BE16(RTE_IPV6_EHDR_FO_ALIGN) && + frag_data_last == RTE_BE16(RTE_IPV6_EHDR_FO_MASK)) + return rte_flow_error_set(error, ENOTSUP, + RTE_FLOW_ERROR_TYPE_ITEM_LAST, + last, "match on last " + "fragment not supported"); + /* Other range values are invalid and rejected. */ + return rte_flow_error_set(error, EINVAL, + RTE_FLOW_ERROR_TYPE_ITEM_LAST, last, + "specified range not supported"); +} + +/** * Validate the pop VLAN action. * * @param[in] dev @@ -5349,6 +5463,29 @@ struct field_modify_info modify_tcp[] = { next_protocol = 0xff; } break; + case RTE_FLOW_ITEM_TYPE_IPV6_FRAG_EXT: + ret = flow_dv_validate_item_ipv6_frag_ext(items, + item_flags, + error); + if (ret < 0) + return ret; + last_item = tunnel ? + MLX5_FLOW_LAYER_INNER_L3_IPV6_FRAG_EXT : + MLX5_FLOW_LAYER_OUTER_L3_IPV6_FRAG_EXT; + if (items->mask != NULL && + ((const struct rte_flow_item_ipv6_frag_ext *) + items->mask)->hdr.next_header) { + next_protocol = + ((const struct rte_flow_item_ipv6_frag_ext *) + items->spec)->hdr.next_header; + next_protocol &= + ((const struct rte_flow_item_ipv6_frag_ext *) + items->mask)->hdr.next_header; + } else { + /* Reset for inner layer. */ + next_protocol = 0xff; + } + break; case RTE_FLOW_ITEM_TYPE_TCP: ret = mlx5_flow_validate_item_tcp (items, item_flags, @@ -6527,6 +6664,57 @@ struct field_modify_info modify_tcp[] = { } /** + * Add IPV6 fragment extension item to matcher and to the value. + * + * @param[in, out] matcher + * Flow matcher. + * @param[in, out] key + * Flow matcher value. + * @param[in] item + * Flow pattern to translate. + * @param[in] inner + * Item is inner pattern. + */ +static void +flow_dv_translate_item_ipv6_frag_ext(void *matcher, void *key, + const struct rte_flow_item *item, + int inner) +{ + const struct rte_flow_item_ipv6_frag_ext *ipv6_frag_ext_m = item->mask; + const struct rte_flow_item_ipv6_frag_ext *ipv6_frag_ext_v = item->spec; + const struct rte_flow_item_ipv6_frag_ext nic_mask = { + .hdr = { + .next_header = 0xff, + .frag_data = RTE_BE16(0xffff), + }, + }; + void *headers_m; + void *headers_v; + + if (inner) { + headers_m = MLX5_ADDR_OF(fte_match_param, matcher, + inner_headers); + headers_v = MLX5_ADDR_OF(fte_match_param, key, inner_headers); + } else { + headers_m = MLX5_ADDR_OF(fte_match_param, matcher, + outer_headers); + headers_v = MLX5_ADDR_OF(fte_match_param, key, outer_headers); + } + /* IPv6 fragment extension item exists, so packet is IP fragment. */ + MLX5_SET(fte_match_set_lyr_2_4, headers_m, frag, 1); + MLX5_SET(fte_match_set_lyr_2_4, headers_v, frag, 1); + if (!ipv6_frag_ext_v) + return; + if (!ipv6_frag_ext_m) + ipv6_frag_ext_m = &nic_mask; + MLX5_SET(fte_match_set_lyr_2_4, headers_m, ip_protocol, + ipv6_frag_ext_m->hdr.next_header); + MLX5_SET(fte_match_set_lyr_2_4, headers_v, ip_protocol, + ipv6_frag_ext_v->hdr.next_header & + ipv6_frag_ext_m->hdr.next_header); +} + +/** * Add TCP item to matcher and to the value. * * @param[in, out] matcher @@ -8868,6 +9056,27 @@ struct field_modify_info modify_tcp[] = { next_protocol = 0xff; } break; + case RTE_FLOW_ITEM_TYPE_IPV6_FRAG_EXT: + flow_dv_translate_item_ipv6_frag_ext(match_mask, + match_value, + items, tunnel); + last_item = tunnel ? + MLX5_FLOW_LAYER_INNER_L3_IPV6_FRAG_EXT : + MLX5_FLOW_LAYER_OUTER_L3_IPV6_FRAG_EXT; + if (items->mask != NULL && + ((const struct rte_flow_item_ipv6_frag_ext *) + items->mask)->hdr.next_header) { + next_protocol = + ((const struct rte_flow_item_ipv6_frag_ext *) + items->spec)->hdr.next_header; + next_protocol &= + ((const struct rte_flow_item_ipv6_frag_ext *) + items->mask)->hdr.next_header; + } else { + /* Reset for inner layer. */ + next_protocol = 0xff; + } + break; case RTE_FLOW_ITEM_TYPE_TCP: flow_dv_translate_item_tcp(match_mask, match_value, items, tunnel); -- 1.8.3.1
next prev parent reply other threads:[~2020-10-07 10:57 UTC|newest] Thread overview: 101+ messages / expand[flat|nested] mbox.gz Atom feed top 2020-09-30 14:10 [dpdk-dev] [PATCH 00/10] support match on L3 fragmented packets Dekel Peled 2020-09-30 14:10 ` [dpdk-dev] [PATCH 01/10] ethdev: add extensions attributes to IPv6 item Dekel Peled 2020-09-30 14:54 ` Ori Kam 2020-09-30 14:10 ` [dpdk-dev] [PATCH 02/10] ethdev: add IPv6 fragment extension header item Dekel Peled 2020-09-30 14:55 ` Ori Kam 2020-09-30 14:10 ` [dpdk-dev] [PATCH 03/10] app/testpmd: support IPv4 fragments Dekel Peled 2020-09-30 14:54 ` Ori Kam 2020-09-30 14:10 ` [dpdk-dev] [PATCH 04/10] app/testpmd: support IPv6 fragments Dekel Peled 2020-09-30 14:10 ` [dpdk-dev] [PATCH 05/10] app/testpmd: support IPv6 fragment extension item Dekel Peled 2020-09-30 14:56 ` Ori Kam 2020-09-30 14:10 ` [dpdk-dev] [PATCH 06/10] net/mlx5: remove handling of ICMP fragmented packets Dekel Peled 2020-09-30 14:10 ` [dpdk-dev] [PATCH 07/10] net/mlx5: support match on IPv4 fragment packets Dekel Peled 2020-09-30 14:10 ` [dpdk-dev] [PATCH 08/10] net/mlx5: support match on IPv6 " Dekel Peled 2020-09-30 14:10 ` [dpdk-dev] [PATCH 09/10] net/mlx5: support match on IPv6 fragment ext. item Dekel Peled 2020-09-30 14:10 ` [dpdk-dev] [PATCH 10/10] doc: update release notes for MLX5 L3 frag support Dekel Peled 2020-10-01 21:14 ` [dpdk-dev] [PATCH v2 00/11] support match on L3 fragmented packets Dekel Peled 2020-10-01 21:14 ` [dpdk-dev] [PATCH v2 01/11] ethdev: add extensions attributes to IPv6 item Dekel Peled 2020-10-04 13:45 ` Ori Kam 2020-10-01 21:14 ` [dpdk-dev] [PATCH v2 02/11] ethdev: add IPv6 fragment extension header item Dekel Peled 2020-10-01 21:27 ` Stephen Hemminger 2020-10-01 21:15 ` [dpdk-dev] [PATCH v2 03/11] app/testpmd: support IPv4 fragments Dekel Peled 2020-10-04 13:47 ` Ori Kam 2020-10-01 21:15 ` [dpdk-dev] [PATCH v2 04/11] app/testpmd: support IPv6 fragments Dekel Peled 2020-10-04 13:49 ` Ori Kam 2020-10-01 21:15 ` [dpdk-dev] [PATCH v2 05/11] app/testpmd: support IPv6 fragment extension item Dekel Peled 2020-10-04 13:47 ` Ori Kam 2020-10-01 21:15 ` [dpdk-dev] [PATCH v2 06/11] net/mlx5: remove handling of ICMP fragmented packets Dekel Peled 2020-10-04 13:49 ` Ori Kam 2020-10-01 21:15 ` [dpdk-dev] [PATCH v2 07/11] net/mlx5: support match on IPv4 fragment packets Dekel Peled 2020-10-04 13:48 ` Ori Kam 2020-10-01 21:15 ` [dpdk-dev] [PATCH v2 08/11] net/mlx5: support match on IPv6 " Dekel Peled 2020-10-01 21:15 ` [dpdk-dev] [PATCH v2 09/11] net/mlx5: support match on IPv6 fragment ext. item Dekel Peled 2020-10-04 13:51 ` Ori Kam 2020-10-01 21:15 ` [dpdk-dev] [PATCH v2 10/11] doc: update release notes for MLX5 L3 frag support Dekel Peled 2020-10-04 13:55 ` Ori Kam 2020-10-01 21:15 ` [dpdk-dev] [PATCH v2 11/11] net/mlx5: enforce limitation on IPv6 next proto Dekel Peled 2020-10-04 13:55 ` Ori Kam 2020-10-05 8:35 ` [dpdk-dev] [PATCH v3 00/11] support match on L3 fragmented packets Dekel Peled 2020-10-05 8:35 ` [dpdk-dev] [PATCH v3 01/11] ethdev: add extensions attributes to IPv6 item Dekel Peled 2020-10-06 23:43 ` Ajit Khaparde 2020-10-07 6:59 ` Dekel Peled 2020-10-05 8:35 ` [dpdk-dev] [PATCH v3 02/11] ethdev: add IPv6 fragment extension header item Dekel Peled 2020-10-05 8:50 ` Ori Kam 2020-10-05 8:35 ` [dpdk-dev] [PATCH v3 03/11] app/testpmd: support IPv4 fragments Dekel Peled 2020-10-05 8:35 ` [dpdk-dev] [PATCH v3 04/11] app/testpmd: support IPv6 fragments Dekel Peled 2020-10-05 8:35 ` [dpdk-dev] [PATCH v3 05/11] app/testpmd: support IPv6 fragment extension item Dekel Peled 2020-10-05 8:35 ` [dpdk-dev] [PATCH v3 06/11] net/mlx5: remove handling of ICMP fragmented packets Dekel Peled 2020-10-05 8:35 ` [dpdk-dev] [PATCH v3 07/11] net/mlx5: support match on IPv4 fragment packets Dekel Peled 2020-10-05 8:35 ` [dpdk-dev] [PATCH v3 08/11] net/mlx5: support match on IPv6 " Dekel Peled 2020-10-05 8:51 ` Ori Kam 2020-10-05 8:35 ` [dpdk-dev] [PATCH v3 09/11] net/mlx5: support match on IPv6 fragment ext. item Dekel Peled 2020-10-05 8:35 ` [dpdk-dev] [PATCH v3 10/11] doc: update release notes for MLX5 L3 frag support Dekel Peled 2020-10-05 8:35 ` [dpdk-dev] [PATCH v3 11/11] net/mlx5: enforce limitation on IPv6 next proto Dekel Peled 2020-10-07 10:53 ` [dpdk-dev] [PATCH v4 00/11] support match on L3 fragmented packets Dekel Peled 2020-10-07 10:54 ` [dpdk-dev] [PATCH v4 01/11] ethdev: add extensions attributes to IPv6 item Dekel Peled 2020-10-08 3:14 ` Ajit Khaparde 2020-10-08 7:03 ` Dekel Peled 2020-10-08 18:28 ` Ajit Khaparde 2020-10-07 10:54 ` [dpdk-dev] [PATCH v4 02/11] ethdev: add IPv6 fragment extension header item Dekel Peled 2020-10-07 10:54 ` [dpdk-dev] [PATCH v4 03/11] app/testpmd: support IPv4 fragments Dekel Peled 2020-10-07 10:54 ` [dpdk-dev] [PATCH v4 04/11] app/testpmd: support IPv6 fragments Dekel Peled 2020-10-07 10:54 ` [dpdk-dev] [PATCH v4 05/11] app/testpmd: support IPv6 fragment extension item Dekel Peled 2020-10-07 10:54 ` [dpdk-dev] [PATCH v4 06/11] net/mlx5: remove handling of ICMP fragmented packets Dekel Peled 2020-10-07 10:54 ` [dpdk-dev] [PATCH v4 07/11] net/mlx5: support match on IPv4 fragment packets Dekel Peled 2020-10-07 10:54 ` [dpdk-dev] [PATCH v4 08/11] net/mlx5: support match on IPv6 " Dekel Peled 2020-10-07 10:54 ` Dekel Peled [this message] 2020-10-07 10:54 ` [dpdk-dev] [PATCH v4 10/11] doc: update release notes for MLX5 L3 frag support Dekel Peled 2020-10-07 10:54 ` [dpdk-dev] [PATCH v4 11/11] net/mlx5: enforce limitation on IPv6 next proto Dekel Peled 2020-10-07 11:15 ` [dpdk-dev] [PATCH v4 00/11] support match on L3 fragmented packets Ori Kam 2020-10-12 10:42 ` [dpdk-dev] [PATCH v5 " Dekel Peled 2020-10-12 10:43 ` [dpdk-dev] [PATCH v5 01/11] ethdev: add extensions attributes to IPv6 item Dekel Peled 2020-10-12 20:41 ` Thomas Monjalon 2020-10-13 8:22 ` Dekel Peled 2020-10-12 10:43 ` [dpdk-dev] [PATCH v5 02/11] ethdev: add IPv6 fragment extension header item Dekel Peled 2020-10-12 20:50 ` Thomas Monjalon 2020-10-13 8:11 ` Dekel Peled 2020-10-12 10:43 ` [dpdk-dev] [PATCH v5 03/11] app/testpmd: support IPv4 fragments Dekel Peled 2020-10-12 10:43 ` [dpdk-dev] [PATCH v5 04/11] app/testpmd: support IPv6 fragments Dekel Peled 2020-10-12 10:43 ` [dpdk-dev] [PATCH v5 05/11] app/testpmd: support IPv6 fragment extension item Dekel Peled 2020-10-12 10:43 ` [dpdk-dev] [PATCH v5 06/11] net/mlx5: remove handling of ICMP fragmented packets Dekel Peled 2020-10-12 10:43 ` [dpdk-dev] [PATCH v5 07/11] net/mlx5: support match on IPv4 fragment packets Dekel Peled 2020-10-12 10:43 ` [dpdk-dev] [PATCH v5 08/11] net/mlx5: support match on IPv6 " Dekel Peled 2020-10-12 10:43 ` [dpdk-dev] [PATCH v5 09/11] net/mlx5: support match on IPv6 fragment ext. item Dekel Peled 2020-10-12 10:43 ` [dpdk-dev] [PATCH v5 10/11] doc: update release notes for MLX5 L3 frag support Dekel Peled 2020-10-12 19:29 ` Thomas Monjalon 2020-10-12 10:43 ` [dpdk-dev] [PATCH v5 11/11] net/mlx5: enforce limitation on IPv6 next proto Dekel Peled 2020-10-13 13:32 ` [dpdk-dev] [PATCH v6 0/5] support match on L3 fragmented packets Dekel Peled 2020-10-13 13:32 ` [dpdk-dev] [PATCH v6 1/5] ethdev: add extensions attributes to IPv6 item Dekel Peled 2020-10-14 10:36 ` Thomas Monjalon 2020-10-13 13:32 ` [dpdk-dev] [PATCH v6 2/5] ethdev: add IPv6 fragment extension header item Dekel Peled 2020-10-14 10:37 ` Thomas Monjalon 2020-10-13 13:32 ` [dpdk-dev] [PATCH v6 3/5] app/testpmd: support IPv4 fragments Dekel Peled 2020-10-13 13:32 ` [dpdk-dev] [PATCH v6 4/5] app/testpmd: support IPv6 fragments Dekel Peled 2020-10-13 13:32 ` [dpdk-dev] [PATCH v6 5/5] app/testpmd: support IPv6 fragment extension item Dekel Peled 2020-10-14 16:35 ` [dpdk-dev] [PATCH v7 0/5] support match on L3 fragmented packets Dekel Peled 2020-10-14 16:35 ` [dpdk-dev] [PATCH v7 1/5] ethdev: add extensions attributes to IPv6 item Dekel Peled 2020-10-14 16:35 ` [dpdk-dev] [PATCH v7 2/5] ethdev: add IPv6 fragment extension header item Dekel Peled 2020-10-14 16:35 ` [dpdk-dev] [PATCH v7 3/5] app/testpmd: support IPv4 fragments Dekel Peled 2020-10-14 16:35 ` [dpdk-dev] [PATCH v7 4/5] app/testpmd: support IPv6 fragments Dekel Peled 2020-10-14 16:35 ` [dpdk-dev] [PATCH v7 5/5] app/testpmd: support IPv6 fragment extension item Dekel Peled 2020-10-14 17:18 ` [dpdk-dev] [PATCH v7 0/5] support match on L3 fragmented packets Ferruh Yigit
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=e55d04c31e1b5b3c02bc55e5da91122b53b4c318.1602064141.git.dekelp@nvidia.com \ --to=dekelp@nvidia.com \ --cc=arybchenko@solarflare.com \ --cc=beilei.xing@intel.com \ --cc=bernard.iremonger@intel.com \ --cc=dev@dpdk.org \ --cc=ferruh.yigit@intel.com \ --cc=konstantin.ananyev@intel.com \ --cc=matan@nvidia.com \ --cc=olivier.matz@6wind.com \ --cc=orika@nvidia.com \ --cc=shahafs@nvidia.com \ --cc=thomas@monjalon.net \ --cc=viacheslavo@nvidia.com \ --cc=wenzhuo.lu@intel.com \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
DPDK patches and discussions This inbox may be cloned and mirrored by anyone: git clone --mirror https://inbox.dpdk.org/dev/0 dev/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 dev dev/ https://inbox.dpdk.org/dev \ dev@dpdk.org public-inbox-index dev Example config snippet for mirrors. Newsgroup available over NNTP: nntp://inbox.dpdk.org/inbox.dpdk.dev AGPL code for this site: git clone https://public-inbox.org/public-inbox.git