From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR04-HE1-obe.outbound.protection.outlook.com (mail-eopbgr70075.outbound.protection.outlook.com [40.107.7.75]) by dpdk.org (Postfix) with ESMTP id 06AC41B20E for ; Tue, 23 Oct 2018 09:42:27 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Mellanox.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=+ONnZ0lMDPft+XKZIs3yYmx26SNqO5X0fFJnV2QDCs0=; b=WFOQtSifgLmqyFQElLZgIXHtVlc3fltU6BxCMFsvYHbERLeSAm2trnqA56slgPNthZ3oMZb2DnC4Bwe6aueXsz2JN963DVt00khmOh6+1ACbbli4MT1Aea1r+ACcSfb/1L1rF3wSewjGg/x1fazRpTYU+KBf/MOpbxdaQ326IDU= Received: from DB7PR05MB4426.eurprd05.prod.outlook.com (52.134.109.15) by DB7PR05MB4875.eurprd05.prod.outlook.com (20.176.235.95) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1250.30; Tue, 23 Oct 2018 07:42:26 +0000 Received: from DB7PR05MB4426.eurprd05.prod.outlook.com ([fe80::80e:e6b:baf2:d973]) by DB7PR05MB4426.eurprd05.prod.outlook.com ([fe80::80e:e6b:baf2:d973%3]) with mapi id 15.20.1250.028; Tue, 23 Oct 2018 07:42:26 +0000 From: Shahaf Shuler To: Yongseok Koh CC: "dev@dpdk.org" , Ori Kam Thread-Topic: [PATCH 4/5] net/mlx5: fix wildcard item for Direct Verbs Thread-Index: AQHUZb45r0k1HZlMZkmF6LOouCD8j6Use+7Q Date: Tue, 23 Oct 2018 07:42:26 +0000 Message-ID: References: <20181017020739.11203-1-yskoh@mellanox.com> <20181017020739.11203-4-yskoh@mellanox.com> In-Reply-To: <20181017020739.11203-4-yskoh@mellanox.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: spf=none (sender IP is ) smtp.mailfrom=shahafs@mellanox.com; x-originating-ip: [31.154.10.105] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; DB7PR05MB4875; 6:U77PGXZGpTilQmaeotb/PnWsj/Q1Uvn9enQYDiFe4E/bjY10bSNMdyNMtF3g+FyUSWeNioDnkeCllgiYt8GXZ/QzpDCgKl5Q1Ao87IGjxPGftb5FHlqSlmd+DMr0gae73QU6JBEBKHgj9As9mPVy2XyYc9embSmddQinhFibqiEihklVgpR3LN3m2G3C3SGHNkWWvtcf//ngX62nso8qHHByE9g9wfXWGn3mNw76jsvMlH1fh4Ei7eRMIuGIhe7CCc2/Zip4VZwS5w0D0yd6+j2rXH2onf/G73rLNeUseUdOhynJWRWIqbCGMeqzVsO90qkAdBiFOObKgEE32sRPAgOPF9km3HDBD7daRKRV0diZIGvEJk3xQtDew75zuckM5IYTMbIPJ6xkvHUphjUG44uPyvVfRnPS5TqEV8i7RbDD84TUwsQroQnzrLllZTHL6u2NZ1e4yr3zH5SkUGKpQw==; 5:A+gJoeNeYfhMDxS7SuOKOpgwKDy9EgNz20Q8eJza5ydHCUZgnrGx31W47mGD3CvutysiVtiKEfAjIHVdhYepjuaTEx/fg2zyTl6hKwyONoq0rzikLW8aUdgwX9dKFmBohekh3q27G23IkEKTkeK9JuBp/ZT+164XwIgqRAE2g7Y=; 7:sghUp2cXl+6tzlUbw0Uh0/fad0ySCsaFCyfNRvYDOAFFGL9WNQf90iWuzYKwjqZl9Fq36NKsAV1Z4LdTcJep2eSTg1LmMfgO9mEVRIFzvP8BiLqwfArdi5NXv0mhA0Uvfyy3l6buJSi7w7wiKHnBipUQnajJ1+MVOTgfbyXFIcFbUBMYmlIrgOGXetcQhfeH5AmvNZuEF6yC6QJzk+QKNThhEdgKzFpRmHO1tMptT3c4ZPUW6zIqT4XTPijkL3Mz x-ms-exchange-antispam-srfa-diagnostics: SOS; x-ms-office365-filtering-correlation-id: 50de5c12-3109-4c6d-a54c-08d638bb13ec x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0; PCL:0; RULEID:(7020095)(4652040)(8989299)(5600074)(711020)(4618075)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328)(7153060)(7193020); SRVR:DB7PR05MB4875; x-ms-traffictypediagnostic: DB7PR05MB4875: x-microsoft-antispam-prvs: x-exchange-antispam-report-test: UriScan:; x-ms-exchange-senderadcheck: 1 x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(8121501046)(5005006)(3002001)(3231355)(944501410)(52105095)(10201501046)(93006095)(93001095)(6055026)(148016)(149066)(150057)(6041310)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123562045)(20161123560045)(20161123558120)(20161123564045)(201708071742011)(7699051)(76991095); SRVR:DB7PR05MB4875; BCL:0; PCL:0; RULEID:; SRVR:DB7PR05MB4875; x-forefront-prvs: 0834BAF534 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(136003)(346002)(366004)(396003)(376002)(39860400002)(199004)(189003)(7696005)(5250100002)(106356001)(105586002)(76176011)(478600001)(316002)(54906003)(97736004)(2900100001)(6436002)(2906002)(71200400001)(4326008)(55016002)(71190400001)(25786009)(256004)(53936002)(14454004)(74316002)(305945005)(486006)(7736002)(6506007)(6246003)(68736007)(6862004)(476003)(11346002)(446003)(9686003)(102836004)(5660300001)(186003)(6636002)(3846002)(26005)(8936002)(229853002)(66066001)(33656002)(107886003)(6116002)(8676002)(86362001)(81156014)(81166006)(99286004); DIR:OUT; SFP:1101; SCL:1; SRVR:DB7PR05MB4875; H:DB7PR05MB4426.eurprd05.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; received-spf: None (protection.outlook.com: mellanox.com does not designate permitted sender hosts) x-microsoft-antispam-message-info: M3HxPDhuOejMI0zR6WPjD4co4MFyOtNAZ5eYLGvFebApPEAQwlmkF4bRs3w84sAMt5cRM0jm1nQoKBssWecH122osrSSUMo7SHekK9YXoCE/Bswt9BKt+MiWCFNJ20YROf2BL4rSK8Kq6sXCphww0z01RYsEhAGRtcyl+hPx1nNXKXMhfHQST226U+eqWhIJRMtl7Q3ixIQ1NjFVIisAJhIMmmXIm3CbLvSyMsui4YXtjnAD6wXtCgAMCY0u7QeXoZI45Y9iiedesKdndK23KqG0u1Pemi6G7ifIryATPYmfu1nxPUXprdHS729YcV9Fra5VlZbIiPNcP7KPVdt4I+cYTbCgrEkwCxzFeXx+s4U= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-Network-Message-Id: 50de5c12-3109-4c6d-a54c-08d638bb13ec X-MS-Exchange-CrossTenant-originalarrivaltime: 23 Oct 2018 07:42:26.2038 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB7PR05MB4875 Subject: Re: [dpdk-dev] [PATCH 4/5] net/mlx5: fix wildcard item for Direct Verbs X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 23 Oct 2018 07:42:28 -0000 Wednesday, October 17, 2018 5:08 AM, Yongseok Koh: > Subject: [PATCH 4/5] net/mlx5: fix wildcard item for Direct Verbs >=20 > If a network layer is specified with no spec, it means wildcard match. > flow_dv_translate_item_*() returns without writing anything if spec is nu= ll > and it causes creation of wrong flow. E.g., the following flow has to pat= ch > with any ipv4 packet. >=20 > flow create 0 ingress pattern eth / ipv4 / end actions ... >=20 > But, with the current code, it matches any packet because PMD doesn't wri= te > 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 o= f items. >=20 > Even if the spec is null, PMD has to write constant fields before return,= e.g. IP > version and IP protocol number. >=20 > Fixes: fc2c498ccb94 ("net/mlx5: add Direct Verbs translate items") > Cc: orika@mellanox.com >=20 > Signed-off-by: Yongseok Koh > Acked-by: Ori Kam [...] > #include > #include > #include > @@ -474,10 +473,6 @@ flow_dv_translate_item_ipv4(void *matcher, void > *key, > char *l24_v; > uint8_t tos; >=20 > - if (!ipv4_v) > - return; > - if (!ipv4_m) > - ipv4_m =3D &nic_mask; > if (inner) { > headers_m =3D 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 et= hertype?=20 Meaning maybe the value on the IP offset can be 4 even though it is not a I= Pv4 header. =20 Same question for IPv6.=20 > + if (!ipv4_v) > + return; > + if (!ipv4_m) > + ipv4_m =3D &nic_mask; > l24_m =3D MLX5_ADDR_OF(fte_match_set_lyr_2_4, headers_m, > dst_ipv4_dst_ipv6.ipv4_layout.ipv4); > l24_v =3D 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; >=20 > - if (!ipv6_v) > - return; > - if (!ipv6_m) > - ipv6_m =3D &nic_mask; > if (inner) { > headers_m =3D 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 =3D 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 =3D &nic_mask; > size =3D sizeof(ipv6_m->hdr.dst_addr); > l24_m =3D 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 =3D 0; i < size; ++i) > l24_v[i] =3D 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 =3D rte_be_to_cpu_32(ipv6_m->hdr.vtc_flow); > vtc_v =3D 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; >=20 > - if (!tcp_v) > - return; > - if (!tcp_m) > - tcp_m =3D &rte_flow_item_tcp_mask; > if (inner) { > headers_m =3D 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 =3D &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; >=20 > - if (!udp_v) > - return; > - if (!udp_m) > - udp_m =3D &rte_flow_item_udp_mask; > if (inner) { > headers_m =3D 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 =3D &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 =3D MLX5_ADDR_OF(fte_match_param, matcher, > misc_parameters); > void *misc_v =3D MLX5_ADDR_OF(fte_match_param, key, > misc_parameters); >=20 > - if (!gre_v) > - return; > - if (!gre_m) > - gre_m =3D &rte_flow_item_gre_mask; > if (inner) { > headers_m =3D 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 =3D &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; >=20 > + 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 =3D 0; i < size; ++i) > gre_key_v[i] =3D gre_key_m[i] & tni_flow_id_v[i]; > - flow_dv_translate_item_gre(matcher, key, item, inner); > } >=20 > /** > @@ -822,10 +821,6 @@ flow_dv_translate_item_vxlan(void *matcher, void > *key, > int size; > int i; >=20 > - if (!vxlan_v) > - return; > - if (!vxlan_m) > - vxlan_m =3D &rte_flow_item_vxlan_mask; > if (inner) { > headers_m =3D 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 =3D &rte_flow_item_vxlan_mask; > size =3D sizeof(vxlan_m->vni); > vni_m =3D MLX5_ADDR_OF(fte_match_set_misc, misc_m, vxlan_vni); > vni_v =3D MLX5_ADDR_OF(fte_match_set_misc, misc_v, vxlan_vni); > -- > 2.11.0