From: Ori Kam <orika@mellanox.com>
To: Shahaf Shuler <shahafs@mellanox.com>, Yongseok Koh <yskoh@mellanox.com>
Cc: "dev@dpdk.org" <dev@dpdk.org>
Subject: Re: [dpdk-dev] [PATCH 4/5] net/mlx5: fix wildcard item for Direct Verbs
Date: Tue, 23 Oct 2018 15:25:15 +0000 [thread overview]
Message-ID: <AM4PR05MB3425F109785152993399D3D8DBF50@AM4PR05MB3425.eurprd05.prod.outlook.com> (raw)
In-Reply-To: <DB7PR05MB4426CEE2D8B2B9131647B81EC3F50@DB7PR05MB4426.eurprd05.prod.outlook.com>
PSB
> -----Original Message-----
> From: Shahaf Shuler
> Sent: Tuesday, October 23, 2018 10:42 AM
> To: Yongseok Koh <yskoh@mellanox.com>
> Cc: dev@dpdk.org; Ori Kam <orika@mellanox.com>
> Subject: RE: [PATCH 4/5] net/mlx5: fix wildcard item for Direct Verbs
>
> Wednesday, October 17, 2018 5:08 AM, Yongseok Koh:
> > Subject: [PATCH 4/5] net/mlx5: fix wildcard item for Direct Verbs
> >
> > If a network layer is specified with no spec, it means wildcard match.
> > flow_dv_translate_item_*() returns without writing anything if spec is null
> > and it causes creation of wrong flow. E.g., the following flow has to patch
> > with any ipv4 packet.
> >
> > flow create 0 ingress pattern eth / ipv4 / end actions ...
> >
> > But, with the current code, it matches any packet because PMD doesn't write
> > anything about IPv4. The matcher value and mask becomes completely zero.
> > It should have written the IP version at least. It is same for the rest of items.
> >
> > Even if the spec is null, PMD has to write constant fields before return, e.g. IP
> > version and IP protocol number.
> >
> > Fixes: fc2c498ccb94 ("net/mlx5: add Direct Verbs translate items")
> > Cc: orika@mellanox.com
> >
> > Signed-off-by: Yongseok Koh <yskoh@mellanox.com>
> > Acked-by: Ori Kam <orika@mellanox.com>
>
> [...]
>
> > #include <sys/queue.h>
> > #include <stdalign.h>
> > #include <stdint.h>
> > @@ -474,10 +473,6 @@ flow_dv_translate_item_ipv4(void *matcher, void
> > *key,
> > char *l24_v;
> > uint8_t tos;
> >
> > - if (!ipv4_v)
> > - return;
> > - if (!ipv4_m)
> > - ipv4_m = &nic_mask;
> > if (inner) {
> > headers_m = MLX5_ADDR_OF(fte_match_param, matcher,
> > inner_headers);
> > @@ -489,6 +484,10 @@ flow_dv_translate_item_ipv4(void *matcher, void
> > *key,
> > }
> > MLX5_SET(fte_match_set_lyr_2_4, headers_m, ip_version, 0xf);
> > MLX5_SET(fte_match_set_lyr_2_4, headers_v, ip_version, 4);
>
> Is matching on the ip version is enough? Don't we need to match also the
> ethertype?
> Meaning maybe the value on the IP offset can be 4 even though it is not a IPv4
> header.
>
> Same question for IPv6.
I think you are correct,
We should also test the ethertype.
>
> > + if (!ipv4_v)
> > + return;
> > + if (!ipv4_m)
> > + ipv4_m = &nic_mask;
> > l24_m = MLX5_ADDR_OF(fte_match_set_lyr_2_4, headers_m,
> > dst_ipv4_dst_ipv6.ipv4_layout.ipv4);
> > l24_v = MLX5_ADDR_OF(fte_match_set_lyr_2_4, headers_v, @@ -
> > 557,10 +556,6 @@ flow_dv_translate_item_ipv6(void *matcher, void *key,
> > int i;
> > int size;
> >
> > - if (!ipv6_v)
> > - return;
> > - if (!ipv6_m)
> > - ipv6_m = &nic_mask;
> > if (inner) {
> > headers_m = MLX5_ADDR_OF(fte_match_param, matcher,
> > inner_headers);
> > @@ -570,6 +565,12 @@ flow_dv_translate_item_ipv6(void *matcher, void
> > *key,
> > outer_headers);
> > headers_v = MLX5_ADDR_OF(fte_match_param, key,
> > outer_headers);
> > }
> > + MLX5_SET(fte_match_set_lyr_2_4, headers_m, ip_version, 0xf);
> > + MLX5_SET(fte_match_set_lyr_2_4, headers_v, ip_version, 6);
> > + if (!ipv6_v)
> > + return;
> > + if (!ipv6_m)
> > + ipv6_m = &nic_mask;
> > size = sizeof(ipv6_m->hdr.dst_addr);
> > l24_m = MLX5_ADDR_OF(fte_match_set_lyr_2_4, headers_m,
> > dst_ipv4_dst_ipv6.ipv6_layout.ipv6);
> > @@ -585,8 +586,6 @@ flow_dv_translate_item_ipv6(void *matcher, void
> > *key,
> > memcpy(l24_m, ipv6_m->hdr.src_addr, size);
> > for (i = 0; i < size; ++i)
> > l24_v[i] = l24_m[i] & ipv6_v->hdr.src_addr[i];
> > - MLX5_SET(fte_match_set_lyr_2_4, headers_m, ip_version, 0xf);
> > - MLX5_SET(fte_match_set_lyr_2_4, headers_v, ip_version, 6);
> > /* TOS. */
> > vtc_m = rte_be_to_cpu_32(ipv6_m->hdr.vtc_flow);
> > vtc_v = rte_be_to_cpu_32(ipv6_m->hdr.vtc_flow & ipv6_v-
> > >hdr.vtc_flow); @@ -635,10 +634,6 @@ flow_dv_translate_item_tcp(void
> > *matcher, void *key,
> > void *headers_m;
> > void *headers_v;
> >
> > - if (!tcp_v)
> > - return;
> > - if (!tcp_m)
> > - tcp_m = &rte_flow_item_tcp_mask;
> > if (inner) {
> > headers_m = MLX5_ADDR_OF(fte_match_param, matcher,
> > inner_headers);
> > @@ -650,6 +645,10 @@ flow_dv_translate_item_tcp(void *matcher, void
> > *key,
> > }
> > MLX5_SET(fte_match_set_lyr_2_4, headers_m, ip_protocol, 0xff);
> > MLX5_SET(fte_match_set_lyr_2_4, headers_v, ip_protocol,
> > IPPROTO_TCP);
> > + if (!tcp_v)
> > + return;
> > + if (!tcp_m)
> > + tcp_m = &rte_flow_item_tcp_mask;
> > MLX5_SET(fte_match_set_lyr_2_4, headers_m, tcp_sport,
> > rte_be_to_cpu_16(tcp_m->hdr.src_port));
> > MLX5_SET(fte_match_set_lyr_2_4, headers_v, tcp_sport, @@ -
> > 682,10 +681,6 @@ flow_dv_translate_item_udp(void *matcher, void *key,
> > void *headers_m;
> > void *headers_v;
> >
> > - if (!udp_v)
> > - return;
> > - if (!udp_m)
> > - udp_m = &rte_flow_item_udp_mask;
> > if (inner) {
> > headers_m = MLX5_ADDR_OF(fte_match_param, matcher,
> > inner_headers);
> > @@ -697,6 +692,10 @@ flow_dv_translate_item_udp(void *matcher, void
> > *key,
> > }
> > MLX5_SET(fte_match_set_lyr_2_4, headers_m, ip_protocol, 0xff);
> > MLX5_SET(fte_match_set_lyr_2_4, headers_v, ip_protocol,
> > IPPROTO_UDP);
> > + if (!udp_v)
> > + return;
> > + if (!udp_m)
> > + udp_m = &rte_flow_item_udp_mask;
> > MLX5_SET(fte_match_set_lyr_2_4, headers_m, udp_sport,
> > rte_be_to_cpu_16(udp_m->hdr.src_port));
> > MLX5_SET(fte_match_set_lyr_2_4, headers_v, udp_sport, @@ -
> > 731,10 +730,6 @@ flow_dv_translate_item_gre(void *matcher, void *key,
> > void *misc_m = MLX5_ADDR_OF(fte_match_param, matcher,
> > misc_parameters);
> > void *misc_v = MLX5_ADDR_OF(fte_match_param, key,
> > misc_parameters);
> >
> > - if (!gre_v)
> > - return;
> > - if (!gre_m)
> > - gre_m = &rte_flow_item_gre_mask;
> > if (inner) {
> > headers_m = MLX5_ADDR_OF(fte_match_param, matcher,
> > inner_headers);
> > @@ -746,6 +741,10 @@ flow_dv_translate_item_gre(void *matcher, void
> > *key,
> > }
> > MLX5_SET(fte_match_set_lyr_2_4, headers_m, ip_protocol, 0xff);
> > MLX5_SET(fte_match_set_lyr_2_4, headers_v, ip_protocol,
> > IPPROTO_GRE);
> > + if (!gre_v)
> > + return;
> > + if (!gre_m)
> > + gre_m = &rte_flow_item_gre_mask;
> > MLX5_SET(fte_match_set_misc, misc_m, gre_protocol,
> > rte_be_to_cpu_16(gre_m->protocol));
> > MLX5_SET(fte_match_set_misc, misc_v, gre_protocol, @@ -780,6
> > +779,7 @@ flow_dv_translate_item_nvgre(void *matcher, void *key,
> > int size;
> > int i;
> >
> > + flow_dv_translate_item_gre(matcher, key, item, inner);
> > if (!nvgre_v)
> > return;
> > if (!nvgre_m)
> > @@ -790,7 +790,6 @@ flow_dv_translate_item_nvgre(void *matcher, void
> > *key,
> > memcpy(gre_key_m, tni_flow_id_m, size);
> > for (i = 0; i < size; ++i)
> > gre_key_v[i] = gre_key_m[i] & tni_flow_id_v[i];
> > - flow_dv_translate_item_gre(matcher, key, item, inner);
> > }
> >
> > /**
> > @@ -822,10 +821,6 @@ flow_dv_translate_item_vxlan(void *matcher, void
> > *key,
> > int size;
> > int i;
> >
> > - if (!vxlan_v)
> > - return;
> > - if (!vxlan_m)
> > - vxlan_m = &rte_flow_item_vxlan_mask;
> > if (inner) {
> > headers_m = MLX5_ADDR_OF(fte_match_param, matcher,
> > inner_headers);
> > @@ -841,6 +836,10 @@ flow_dv_translate_item_vxlan(void *matcher, void
> > *key,
> > MLX5_SET(fte_match_set_lyr_2_4, headers_m, udp_dport,
> > 0xFFFF);
> > MLX5_SET(fte_match_set_lyr_2_4, headers_v, udp_dport,
> > dport);
> > }
> > + if (!vxlan_v)
> > + return;
> > + if (!vxlan_m)
> > + vxlan_m = &rte_flow_item_vxlan_mask;
> > size = sizeof(vxlan_m->vni);
> > vni_m = MLX5_ADDR_OF(fte_match_set_misc, misc_m, vxlan_vni);
> > vni_v = MLX5_ADDR_OF(fte_match_set_misc, misc_v, vxlan_vni);
> > --
> > 2.11.0
next prev parent reply other threads:[~2018-10-23 15:25 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-10-17 2:07 [dpdk-dev] [PATCH 1/5] net/mlx5: add warning message for Direct Verbs flow Yongseok Koh
2018-10-17 2:07 ` [dpdk-dev] [PATCH 2/5] net/mlx5: fix UDP hash field flag in Direct Verbs Yongseok Koh
2018-10-17 5:11 ` Ori Kam
2018-10-17 2:07 ` [dpdk-dev] [PATCH 3/5] net/mlx5: fix item validation " Yongseok Koh
2018-10-17 2:07 ` [dpdk-dev] [PATCH 4/5] net/mlx5: fix wildcard item for " Yongseok Koh
2018-10-23 7:42 ` Shahaf Shuler
2018-10-23 15:25 ` Ori Kam [this message]
2018-10-23 17:22 ` Yongseok Koh
2018-10-17 2:07 ` [dpdk-dev] [PATCH 5/5] net/mlx5: fix flow mark ID conversion in " Yongseok Koh
2018-10-17 5:15 ` Ori Kam
2018-10-17 5:11 ` [dpdk-dev] [PATCH 1/5] net/mlx5: add warning message for Direct Verbs flow Ori Kam
2018-10-23 16:52 ` [dpdk-dev] [PATCH v2 0/5] net/mlx5: fixes " Yongseok Koh
2018-10-23 16:52 ` [dpdk-dev] [PATCH v2 1/5] net/mlx5: add warning message " Yongseok Koh
2018-10-23 16:52 ` [dpdk-dev] [PATCH v2 2/5] net/mlx5: fix UDP hash field flag in Direct Verbs Yongseok Koh
2018-10-23 16:52 ` [dpdk-dev] [PATCH v2 3/5] net/mlx5: fix item validation " Yongseok Koh
2018-10-23 16:52 ` [dpdk-dev] [PATCH v2 4/5] net/mlx5: fix wildcard item for " Yongseok Koh
2018-10-23 16:52 ` [dpdk-dev] [PATCH v2 5/5] net/mlx5: fix flow mark ID conversion in " Yongseok Koh
2018-10-24 12:30 ` [dpdk-dev] [PATCH v2 0/5] net/mlx5: fixes for Direct Verbs flow Shahaf Shuler
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=AM4PR05MB3425F109785152993399D3D8DBF50@AM4PR05MB3425.eurprd05.prod.outlook.com \
--to=orika@mellanox.com \
--cc=dev@dpdk.org \
--cc=shahafs@mellanox.com \
--cc=yskoh@mellanox.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
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).