From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR03-DB5-obe.outbound.protection.outlook.com (mail-eopbgr40067.outbound.protection.outlook.com [40.107.4.67]) by dpdk.org (Postfix) with ESMTP id EC4CB58CB for ; Sat, 3 Nov 2018 07:18:38 +0100 (CET) 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=A3fDT7LVMzpOFlQBwu1Jd6d4qbAZjdrhzc7oTGTg90s=; b=xBqH//7uMJVy0BVU/rPM+fIJiHu+jek0oa2CyKRVJ2JRLDcS+eSwhkbBccDbekNBEd5iEOk8p+O76STOnzweW1ugaNi7WVE9Y+rsIQr6I7yWsoy7KWdvVmldPe6TefCArgYxfmTDQ29eDVsYXkN+qTFQqIKLFckBoqPrZJ5uO/A= Received: from AM4PR05MB3265.eurprd05.prod.outlook.com (10.171.186.150) by AM4PR05MB1620.eurprd05.prod.outlook.com (10.165.245.139) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1250.30; Sat, 3 Nov 2018 06:18:38 +0000 Received: from AM4PR05MB3265.eurprd05.prod.outlook.com ([fe80::544b:a68d:e6a5:ba6e]) by AM4PR05MB3265.eurprd05.prod.outlook.com ([fe80::544b:a68d:e6a5:ba6e%2]) with mapi id 15.20.1294.027; Sat, 3 Nov 2018 06:18:38 +0000 From: Slava Ovsiienko To: Shahaf Shuler CC: "dev@dpdk.org" , Yongseok Koh , Slava Ovsiienko Thread-Topic: [PATCH v5 04/13] net/mlx5: add necessary structures for E-Switch VXLAN Thread-Index: AQHUcz0O6S/crkHHIUeKTzjhyxqYKA== Date: Sat, 3 Nov 2018 06:18:37 +0000 Message-ID: <1541225876-8817-5-git-send-email-viacheslavo@mellanox.com> References: <1541181152-15788-2-git-send-email-viacheslavo@mellanox.com> <1541225876-8817-1-git-send-email-viacheslavo@mellanox.com> In-Reply-To: <1541225876-8817-1-git-send-email-viacheslavo@mellanox.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: CWLP123CA0088.GBRP123.PROD.OUTLOOK.COM (2603:10a6:401:5b::28) To AM4PR05MB3265.eurprd05.prod.outlook.com (2603:10a6:205:4::22) authentication-results: spf=none (sender IP is ) smtp.mailfrom=viacheslavo@mellanox.com; x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [37.142.13.130] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; AM4PR05MB1620; 6:kh+wzgTXpKU6L+IWHziiNppazDm/cADAvurvbdoSyoA7GrCJhFVEg20XiWth7z9v0sRmXFAcAGTtIGBbpOXWsADzWnNSGJgM52BBowuU0rDPVBRHWJXHLJmqVTWEF5TzHCJklwo4+/vMI1/+O9//waBQb5g4QNgn4oQxYorfIRZ7ymTtLCGqy87GhACpegWfzGxB6AHKFbZVlDHd8VnHGHa7NWi+fYcCEqSLXc9qw8szkxKJfky/FGXNBr+zcy1bp7inY8GXrOo4psNJxVMz8vbctMcRDxdNoDdKxu8AUVmKWEhl5rJZ550qn3xWBCwB68IrWQ62EZQnVSGKCtOw0jkj6IkfbbWZiZMybAPxXWg5rRtKcAx/6wZxjMiSFKotOqyPEMcGiojGP5qSqVBziqqgnY9dtNZpKXs6/qzjmhv+dJiN0ptBC8w+7B6zdToas8L/4R0pQGyZHDsUW4JJeA==; 5:5iGODamE9HRsqX46qV3wJ3IrL4Vzjzh4LfKl0R/Rt/OGTlXlccVFUIZQUOYKJV61CFj/yqJceRCoPRO7wbMyLfIJveXD9TxcG/mDB3b+M3y7Xxflr0rn/QxyGDbh7nTamsBFbNeXsfCdxhuZlQWiSmaz7HK97RQ+t5JKrSCAUKQ=; 7:YnbUINgipbdLBpzABqZMJOaIkD+uFzeE0qwQnzCl2kJmZPFhUHgTXxiI0fam0Y8rwkCMnYWa3l9ePXCLxs8Xx+E0RYeWNJH7M/wqj6WPb1J9x/mfNduuoBJCH5BkyABK0krO1Pe75J3mDIFGhdVXjzBCneQaZUJK20YOGEeRg+dWG/IWpHQrmCfHpyDPDeTIIvMFZ5am1UugCsntmOdTZRF1U56rt96i3JSXzLBTpnFNgxCkvKonwNaMWOQT0XZj x-ms-office365-filtering-correlation-id: 6cd3c40f-05c6-4b41-32fc-08d641543115 x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0; PCL:0; RULEID:(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600074)(711020)(4618075)(2017052603328)(7153060)(7193020); SRVR:AM4PR05MB1620; x-ms-traffictypediagnostic: AM4PR05MB1620: 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)(5005006)(8121501046)(93006095)(93001095)(3231382)(944501410)(52105095)(10201501046)(3002001)(6055026)(148016)(149066)(150057)(6041310)(20161123558120)(20161123560045)(20161123562045)(20161123564045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(201708071742011)(7699051)(76991095); SRVR:AM4PR05MB1620; BCL:0; PCL:0; RULEID:; SRVR:AM4PR05MB1620; x-forefront-prvs: 08457955C4 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(396003)(39860400002)(366004)(346002)(376002)(136003)(199004)(189003)(6636002)(14444005)(52116002)(36756003)(486006)(5024004)(102836004)(386003)(6506007)(6116002)(2906002)(86362001)(25786009)(2900100001)(476003)(71190400001)(106356001)(26005)(305945005)(2616005)(76176011)(3846002)(256004)(53936002)(66066001)(4326008)(107886003)(11346002)(14454004)(105586002)(6436002)(8936002)(446003)(81166006)(97736004)(6512007)(8676002)(316002)(54906003)(6486002)(186003)(68736007)(7736002)(5660300001)(6862004)(71200400001)(37006003)(478600001)(81156014)(99286004); DIR:OUT; SFP:1101; SCL:1; SRVR:AM4PR05MB1620; H:AM4PR05MB3265.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: nRnVKhmJn/EU1eN4eYm69VIKSJN2IeET3eK/byKSJDyssKSZ+ktZ2IyxuzWb979OISBgBYgH+aUdHi1vX2N/Ajoqp1r464zdLcsbnEv0Tq+38sRyDICshQE0czqf4jtnXk3n0487DHmuFMksX8cAdz95sT7jIR2SB3a/uFm9bnhQS2FCxSDTlliEHcLVSNH3ssytUu9cFz4y7NVWKop9P1//enzD+gmokJ9tuxTC6rdNXjahvPQ8xS9JmIkmaRLfDbnyoo4gk8BLnx7VBphb7QzW85te6E355kcG+FJel80FhnlniPk77amxDQ+zYjaFKirMVkih0DpP5CXIFlnO7L9kvB7YGm+wElf8TbeRPo4= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-Network-Message-Id: 6cd3c40f-05c6-4b41-32fc-08d641543115 X-MS-Exchange-CrossTenant-originalarrivaltime: 03 Nov 2018 06:18:37.8917 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM4PR05MB1620 Subject: [dpdk-dev] [PATCH v5 04/13] net/mlx5: add necessary structures for E-Switch VXLAN 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: Sat, 03 Nov 2018 06:18:39 -0000 This patch introduces the data structures needed to implement VXLAN encapsulation/decapsulation hardware offload support for E-Switch. Suggested-by: Adrien Mazarguil Signed-off-by: Viacheslav Ovsiienko Acked-by: Yongseok Koh --- drivers/net/mlx5/mlx5_flow.h | 9 ++++ drivers/net/mlx5/mlx5_flow_tcf.c | 99 ++++++++++++++++++++++++++++++++++++= ++++ 2 files changed, 108 insertions(+) diff --git a/drivers/net/mlx5/mlx5_flow.h b/drivers/net/mlx5/mlx5_flow.h index fadde55..2a3ce44 100644 --- a/drivers/net/mlx5/mlx5_flow.h +++ b/drivers/net/mlx5/mlx5_flow.h @@ -219,6 +219,15 @@ struct mlx5_flow_dv { struct mlx5_flow_tcf { struct nlmsghdr *nlh; struct tcmsg *tcm; + union { /**< Tunnel encap/decap descriptor. */ + struct flow_tcf_tunnel_hdr *tunnel; + struct flow_tcf_vxlan_decap *vxlan_decap; + struct flow_tcf_vxlan_encap *vxlan_encap; + }; + uint32_t applied:1; /**< Whether rule is currently applied. */ +#ifndef NDEBUG + uint32_t nlsize; /**< Size of NL message buffer for debug check. */ +#endif }; =20 /* Verbs specification header. */ diff --git a/drivers/net/mlx5/mlx5_flow_tcf.c b/drivers/net/mlx5/mlx5_flow_= tcf.c index 4d54112..55c77e3 100644 --- a/drivers/net/mlx5/mlx5_flow_tcf.c +++ b/drivers/net/mlx5/mlx5_flow_tcf.c @@ -348,6 +348,100 @@ struct mlx5_flow_tcf_context { uint8_t *buf; /* Message buffer. */ }; =20 +/** + * Neigh rule structure. The neigh rule is applied via Netlink to + * outer tunnel iface in order to provide destination MAC address + * for the VXLAN encapsultion. The neigh rule is implicitly related + * to the Flow itself and can be shared by multiple Flows. + */ +struct tcf_neigh_rule { + LIST_ENTRY(tcf_neigh_rule) next; + uint32_t refcnt; + struct ether_addr eth; + uint16_t mask; + union { + struct { + rte_be32_t dst; + } ipv4; + struct { + uint8_t dst[IPV6_ADDR_LEN]; + } ipv6; + }; +}; + +/** + * Local rule structure. The local rule is applied via Netlink to + * outer tunnel iface in order to provide local and peer IP addresses + * of the VXLAN tunnel for encapsulation. The local rule is implicitly + * related to the Flow itself and can be shared by multiple Flows. + */ +struct tcf_local_rule { + LIST_ENTRY(tcf_local_rule) next; + uint32_t refcnt; + uint16_t mask; + union { + struct { + rte_be32_t dst; + rte_be32_t src; + } ipv4; + struct { + uint8_t dst[IPV6_ADDR_LEN]; + uint8_t src[IPV6_ADDR_LEN]; + } ipv6; + }; +}; + +/** VXLAN virtual netdev. */ +struct tcf_vtep { + LIST_ENTRY(tcf_vtep) next; + LIST_HEAD(, tcf_neigh_rule) neigh; + LIST_HEAD(, tcf_local_rule) local; + uint32_t refcnt; + unsigned int ifindex; /**< Own interface index. */ + unsigned int ifouter; /**< Index of device attached to. */ + uint16_t port; + uint8_t created; +}; + +/** Tunnel descriptor header, common for all tunnel types. */ +struct flow_tcf_tunnel_hdr { + uint32_t type; /**< Tunnel action type. */ + struct tcf_vtep *vtep; /**< Virtual tunnel endpoint device. */ + unsigned int ifindex_org; /**< Original dst/src interface */ + unsigned int *ifindex_ptr; /**< Interface ptr in message. */ +}; + +struct flow_tcf_vxlan_decap { + struct flow_tcf_tunnel_hdr hdr; + uint16_t udp_port; +}; + +struct flow_tcf_vxlan_encap { + struct flow_tcf_tunnel_hdr hdr; + uint32_t mask; + struct { + struct ether_addr dst; + struct ether_addr src; + } eth; + union { + struct { + rte_be32_t dst; + rte_be32_t src; + } ipv4; + struct { + uint8_t dst[IPV6_ADDR_LEN]; + uint8_t src[IPV6_ADDR_LEN]; + } ipv6; + }; +struct { + rte_be16_t src; + rte_be16_t dst; + } udp; + struct { + uint8_t vni[3]; + } vxlan; +}; + /** Structure used when extracting the values of a flow counters * from a netlink message. */ @@ -365,6 +459,7 @@ struct flow_tcf_stats_basic { struct rte_flow_item_ipv6 ipv6; struct rte_flow_item_tcp tcp; struct rte_flow_item_udp udp; + struct rte_flow_item_vxlan vxlan; } flow_tcf_mask_empty; =20 /** Supported masks for known item types. */ @@ -376,6 +471,7 @@ struct flow_tcf_stats_basic { struct rte_flow_item_ipv6 ipv6; struct rte_flow_item_tcp tcp; struct rte_flow_item_udp udp; + struct rte_flow_item_vxlan vxlan; } flow_tcf_mask_supported =3D { .port_id =3D { .id =3D 0xffffffff, @@ -413,6 +509,9 @@ struct flow_tcf_stats_basic { .src_port =3D RTE_BE16(0xffff), .dst_port =3D RTE_BE16(0xffff), }, + .vxlan =3D { + .vni =3D "\xff\xff\xff", + }, }; =20 #define SZ_NLATTR_HDR MNL_ALIGN(sizeof(struct nlattr)) --=20 1.8.3.1