From patchwork Mon Dec 23 12:07:12 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Allen Chen X-Patchwork-Id: 2027134 X-Patchwork-Delegate: ktraynor@redhat.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=jaguarmicro.com header.i=@jaguarmicro.com header.a=rsa-sha256 header.s=selector2 header.b=dRKqVXXd; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=openvswitch.org (client-ip=140.211.166.138; helo=smtp1.osuosl.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver=patchwork.ozlabs.org) Received: from smtp1.osuosl.org (smtp1.osuosl.org [140.211.166.138]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4YGxbx3wc2z1yRg for ; Mon, 23 Dec 2024 23:07:41 +1100 (AEDT) Received: from localhost (localhost [127.0.0.1]) by smtp1.osuosl.org (Postfix) with ESMTP id EBF9D8139F; Mon, 23 Dec 2024 12:07:38 +0000 (UTC) X-Virus-Scanned: amavis at osuosl.org Received: from smtp1.osuosl.org ([127.0.0.1]) by localhost (smtp1.osuosl.org [127.0.0.1]) (amavis, port 10024) with ESMTP id 1eyIxDGaCzNM; Mon, 23 Dec 2024 12:07:37 +0000 (UTC) X-Comment: SPF check N/A for local connections - client-ip=140.211.9.56; helo=lists.linuxfoundation.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver= DKIM-Filter: OpenDKIM Filter v2.11.0 smtp1.osuosl.org 6B94581378 Authentication-Results: smtp1.osuosl.org; dkim=fail reason="signature verification failed" (2048-bit key, unprotected) header.d=jaguarmicro.com header.i=@jaguarmicro.com header.a=rsa-sha256 header.s=selector2 header.b=dRKqVXXd Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [140.211.9.56]) by smtp1.osuosl.org (Postfix) with ESMTPS id 6B94581378; Mon, 23 Dec 2024 12:07:37 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id 39805C0889; Mon, 23 Dec 2024 12:07:37 +0000 (UTC) X-Original-To: ovs-dev@openvswitch.org Delivered-To: ovs-dev@lists.linuxfoundation.org Received: from smtp3.osuosl.org (smtp3.osuosl.org [140.211.166.136]) by lists.linuxfoundation.org (Postfix) with ESMTP id 82CEBC02A4 for ; Mon, 23 Dec 2024 12:07:36 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp3.osuosl.org (Postfix) with ESMTP id 7758D60656 for ; Mon, 23 Dec 2024 12:07:36 +0000 (UTC) X-Virus-Scanned: amavis at osuosl.org Received: from smtp3.osuosl.org ([127.0.0.1]) by localhost (smtp3.osuosl.org [127.0.0.1]) (amavis, port 10024) with ESMTP id I0phC4yN5Y-I for ; Mon, 23 Dec 2024 12:07:35 +0000 (UTC) Received-SPF: Pass (mailfrom) identity=mailfrom; client-ip=2a01:111:f403:c400::; helo=hk2pr02cu002.outbound.protection.outlook.com; envelope-from=allen.chen@jaguarmicro.com; receiver= DMARC-Filter: OpenDMARC Filter v1.4.2 smtp3.osuosl.org 48841605DD Authentication-Results: smtp3.osuosl.org; dmarc=pass (p=quarantine dis=none) header.from=jaguarmicro.com DKIM-Filter: OpenDKIM Filter v2.11.0 smtp3.osuosl.org 48841605DD Authentication-Results: smtp3.osuosl.org; dkim=pass (2048-bit key, unprotected) header.d=jaguarmicro.com header.i=@jaguarmicro.com header.a=rsa-sha256 header.s=selector2 header.b=dRKqVXXd Received: from HK2PR02CU002.outbound.protection.outlook.com (mail-eastasiaazlp170100000.outbound.protection.outlook.com [IPv6:2a01:111:f403:c400::]) by smtp3.osuosl.org (Postfix) with ESMTPS id 48841605DD for ; Mon, 23 Dec 2024 12:07:33 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=r+ru+21pZ19tQXb/WsGCh42XMzeYGDa8pwiFAp4DBqS1DV5Z+IP9jIqjgjbO3Aq74j1LOtGm2ZCeJzPYi0GUxKzzakZBRxUjQ2nmcxZTrTF46YN/KxTgP4OHrEsLV7FELkcfOrP13nNg5r45c3Shc1zLRqF1BhPMm7+aTkE+u7XpSocBHvXdsnErUCJCwZQsyAvtruJ+SJuSyfhfcWVT9fSP33QkH3Mg7XVHe1z6C9XrDrXZtvomarW0TtG+bmVgu0v+ADDESqSDPAS/6sejLDgzDm6ciQUHcESR5weGtO/X1MkINgPBLdba4YSHrTjhdX8Ge3GDc3Jxv4n8ZOXs8A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=jCBCN0olHiREiKStneQPW1+jraQ724rRzc8j4IXuCDI=; b=NcXTR7sxsc/sZpB2K2Z83+Ian9qLAiGD8C1mZW6iqkqaLIM/Z+0dF0Ipp0gHZEioYRfCuoepMOHKNhLzSDlhEaOs6x0P8+EkLvurJPLmYGqab2JogSnjleuu/JkHaD7nclGoBcXyr1gGCyOnoxXlSQACd2+QY7Cree09QFNiPcHOdw6I4H3cCA4b9Jiafq3Rhz93I0EC5W4Z278/gqVl9kN+4CZq98RGXx2S0T947vNVo1kb0g4IGtTzxxHBp3hAX2DzDbkSBzUWpBWxzMNHBoWQ9NQ0oHX+XfaU3eZ9wd8Zp/ibqW1pip8+JQjHZ3hNU4oRFGg+aeSR/k9/u+UxzQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=jaguarmicro.com; dmarc=pass action=none header.from=jaguarmicro.com; dkim=pass header.d=jaguarmicro.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=jaguarmicro.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=jCBCN0olHiREiKStneQPW1+jraQ724rRzc8j4IXuCDI=; b=dRKqVXXdbE4lZrZIw18bC4KntzOKE/H+ioTC6jWbdEcvHl/thGlHT4eNa6OYOlehNOcq7FQFIjq4icQYv+qwUYe+QI1UDfLKeh1Upyw7SyG10Je+S1dejsg9MI4P7la6aSZpxVrgPBaM913/HiMiQbrce6BoDu8I/abkrNpe1Yi2vESu8s3AKr2AvlE2vnWD21eAJ4z0MQ++Iu3dDHcr8PSx/49Lwud9kr4/E8gfAoEp4TFrOJ4NSvf35IYlSmNtxIIkKzddGC6OG8mfP8q8t6qqNvz4IDgBGzE+dYFW5Trgn5lT91RmPWX5Stc9Eb//WqMoNfiTITRrmPtB43n+kw== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=jaguarmicro.com; Received: from TYZPR06MB7170.apcprd06.prod.outlook.com (2603:1096:405:b4::8) by SEYPR06MB5278.apcprd06.prod.outlook.com (2603:1096:101:83::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8293.9; Mon, 23 Dec 2024 12:07:26 +0000 Received: from TYZPR06MB7170.apcprd06.prod.outlook.com ([fe80::7c1f:9482:dd43:eb1b]) by TYZPR06MB7170.apcprd06.prod.outlook.com ([fe80::7c1f:9482:dd43:eb1b%5]) with mapi id 15.20.8293.000; Mon, 23 Dec 2024 12:07:26 +0000 To: ovs-dev@openvswitch.org Date: Mon, 23 Dec 2024 20:07:12 +0800 Message-Id: <20241223120712.1907-1-allen.chen@jaguarmicro.com> X-Mailer: git-send-email 2.33.0.windows.2 X-ClientProxiedBy: TYWPR01CA0047.jpnprd01.prod.outlook.com (2603:1096:400:17f::12) To TYZPR06MB7170.apcprd06.prod.outlook.com (2603:1096:405:b4::8) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TYZPR06MB7170:EE_|SEYPR06MB5278:EE_ X-MS-Office365-Filtering-Correlation-Id: b070e053-5592-4520-5ec5-08dd234a5da8 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|366016|376014|1800799024|52116014|38350700014; X-Microsoft-Antispam-Message-Info: ulSjRs54B8zbk4x1dlnnyZgk12mWjSm5EE92AJyXTMv5X+k/inI6FEO14XRmMfqQ/kQw5PBL36xT6+S1FcMn4bP6KAZ/I00m2igM7hCmgcQP75YbGVQeak36iTjzkgZNjCLfPX+s5GUy/gbydaoUL1EqUiHB6ILgO4QYGWQkGWLE8XCtyY9xGquksmOWD9vmihocZYDFMqRumHu76AC34xrkCUzzUceWvyd3DBD2vHWY49kSzNq3oWcu/NQMMxfpAUi93acuOiNFXMpH7GPeWnkvmNgSr131mHZdUT1NjEQupzZRXEBlziOEwtj/bLXN5viLoD0lPdsYwl3xGpeRLLUz4/BtpbCp4yEd94m0Kg0wj82i25KtJZxL9uxUNnWmTriFcoFIRL4/mnjePqyht40XKGmo3AEi6DuuBmTXWCEoIyav9iXUBwP63Y6/2lXMVGljr3yF0wDTA6L+C7YaQl0nRgAOzteJsCmpDQ/XeYcnrgavpRA/IkjWi8tggbFoDuq4snyrWo+jcuGvHfehIxLxEVikdeboZG5P8eDjlMHJnCW18XjGc1dEzllbDKmAynbpih13R3IMKCv01kSLQmBYAiZelqvlnMn5tpxt2Gy5NW0ofRAPAsO6VZ2JzxLFD+voKsWChmwvBrHq9qPuCYWfrzg3Ec9xMV07/KWhfHgbOw+ojJWTxHg2UX0jLUx8hGaW2TyZOLzpZ31zo37EngU3q5e8Ng745z9wyqA9U1GzUxcHeX8prbbtE1w+NBe1gUCrhzDxEov1bSWm522W7bl4ZtmK7Y4zQwLYR7WZE35JnaJ02LW+H5BVtcP+QVs0sh+fRc0r6s4bw9wH9NsX+UJmhZfzb24kghJaJn84bGYFwbd1dLKJeicqnQRgnR1MYtKxxAu+d5RaDezavYVChmDqQ7sU3C3Df84OIw9hH+keIMkx0sW2rP0qrE847qsBfLKb4wG6V3iMWfzy0eqJ5xSuXSUtvWaXJeqreNnOHn/lA05rlcg4cjgJcz9EURFfPKu1tGUl6CshIF20h0REyXsz3cSdHx1DuTV4uBLnjS4HCqnRqaSI80Ta7cTB586ROBBmR0+FTRvvOXq9tkegLZkruXI6Lgj4Dp61rn7HfjUq0TLu1QuXnkopJZIbiGcqHibJU7i12HBOT/FIfM1Y3CMCiLimlphb8RQ4t5NbeicGN6fun79wY7lE3efnkmiKqocKvqRZY6Hegy4neZ58YQ+zX60BHoxm9VSKMiYr+9CY3XMUgbqzVYdTwyflYWqvdGReCbBpcTqCdHgnMw4NJAQaoz0QQFmC2OB8EdCZzD2pBvqlDUhGXTXoRI9oHBv3HcTzCj3Mq4Fl3xfgrDCyny6fiEAjJ5i9mbtjF+lVWIV66TeELsdcc6PW/l9EK3MYEWPfvvPEI2AokctaoySvRzFF96zt+DhyuaX8f0RPgs90M4R7Drbaz0gSzLo5Mmkf X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:TYZPR06MB7170.apcprd06.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(366016)(376014)(1800799024)(52116014)(38350700014); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 6R2k9AzQQPUzXk+67s7IFU6oUz37FiH6KILegBBgYRKEEDsQ5Hzav/HnJI2mkn+SkhSLhiU/X9bPWUC9r0X+ep25VoTtnLf35kpK68KRoK87HvmMU2Pto8HJoU+4jpZo5Bip78xwIL65/9ZPM56ORCauv6lOvUflfPjICbqOShWJ14hISye5bpyClMxklhra99HP2T2vCNWBWCrY4pXqYi/9XUwbqm9SeatSnkE0g75LjmWwqGk0ZzAgW6FEPKN8q9W2bF5di3yP6Xa472kqt2sUHFFhEixb6k2q8beenpFLGE5XRFYmKnSVDJqe3J86SynYm1fCaRjpMU/qfL3V62hOiUG6QqeVkKe3B1fNnqm05K3+m3SLObRkO7NiHoXNojwjiiWUDnw2GD4Z/pWUN/BeL5sbhMgfifyALuqCH9ojq9CIwaIl98Fbg2HsBrD4JSMe+ZdpRrwDMaClv/9IhxFKwfLsI5zxsH3cbOe3hzbsy/2gPqxv+VXhwQFzrhqrWq7gj4MvDTlxezfdJh3eL4ZcdnjNchsC27+DiLdzdaEjt8H81tQ8fPvpKRNI+dcWvcUfH2qoM7RUESZ0rhtum7oKg87flz9ro+apxZDSJdc+ubA0tGsId+vBqDLP5ayZ228lQInQs2EmtP7wwcmDTVYGskXYYNgugkkM67tYUa1D7gBmYudkE9JSwhqXVGXbV9lZurDHgKaybCS98KbIcQJBlRKxnPwbMi2yqdHoBKIR+LkBDXsvxmLnQ4KSsHgXYwTZVcgjbyZvuywdiyUyAlkW8Rqw/3/Buzbd0lyqaoetiLrozEm75fc5jO2Z3LKixCAcacuMosmEQvLjnRwQD9H5MVedcY8MoA545gU1HyIYy6vEiUoUYL/ZwQAYlNfF+Vx/N2+nOZfM4/FtDFOSXBq984hbIPWxiXVSy5oOz8thjI/6g65qMuNnnRpirrdE0ijfgE6PZ96bFBBaSVZXZ6i9X4VtnEyWRZRG/UWSlo4YVmwPl5rqzZt6AuVtZ1omSxz+uViCQJR/SndMD4hM9IIoW5mnFhpAX+1+yxBw8jN/Df/ktjF46kjA/cqKsqugvRnyU1JwJzaT9pExfVWh9kgoXbb9XPOxDmU6q/prcxJdob+AhGhCnXy1uJpfXNBZC+wmOVi6f1MO2nlVKzgHzLZhPpvXFQBtjiGXCLbbjYt0eFzhNkFTyZGt1pII306bMiAoddOszHIBB1oBiSmVWIMiz3r5XQmpMbctdVsjRGW+hNNcPVf2PRcIJyF5NKy2YfeIlOa7Xn7Zaj+ZughnBRemiz+z/PSJf8DBLY2DG5q2xz6S2QYt4mC4cqHKk6MmN4fv5BYqoWSczvl676gfsfhcXqLtWEwEzWr4VInp9mewYHzPRjmmgGWYIYUD3ZTva/v1BZyVMlJZ8VVy6YJzhTlSCa53LOXOAwosHKsz/kHTsR1fqFFVkIWSkzb8CfPo8Cbjvw3/kxIvMrtWvzVfqpH4SEtkZfjLC8owVzybPlO2w6lV+xMash2qlrZxKJr+m2kc5SNJXgC+F9nuPZHkzQmqoRKtvekRu87VKcsjKFifo+8nLePgRFEeaeKashID4pg6mZXAnUYto+h71yft8A== X-OriginatorOrg: jaguarmicro.com X-MS-Exchange-CrossTenant-Network-Message-Id: b070e053-5592-4520-5ec5-08dd234a5da8 X-MS-Exchange-CrossTenant-AuthSource: TYZPR06MB7170.apcprd06.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Dec 2024 12:07:26.4445 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 1e45a5c2-d3e1-46b3-a0e6-c5ebf6d8ba7b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: jflvrhHGJ+2i+ciW68kT5hz6VqESJuD6dh5xQvjd4h5fNtB3MFMsVyLKqET+OxVrxak42nUEZrIlZ3WALwOwOh89M1KZPj8WrVR8yEnxwf4= X-MS-Exchange-Transport-CrossTenantHeadersStamped: SEYPR06MB5278 Subject: [ovs-dev] [PATCH v2] netdev-offload-dpdk: Support QinQ offload. X-BeenThere: ovs-dev@openvswitch.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Allen Chen via dev From: Allen Chen Reply-To: Allen Chen Errors-To: ovs-dev-bounces@openvswitch.org Sender: "dev" Support QinQ offload Signed-off-by: Allen Chen --- /*step 1*/add ovs flow table [root@localhost ~]# ovs-ofctl add-flow br-jmnd in_port=dpdk0,dl_dst=00:00:00:13:40:20,nw_dst=192.168.0.10,action=pop_vlan,output:dpdk1 2018-06-23T02:26:05Z|00001|ofp_match|INFO|normalization changed ofp_match, details: 2018-06-23T02:26:05Z|00002|ofp_match|INFO| pre: in_port=1,dl_dst=00:00:00:13:40:20,nw_dst=192.168.0.10 2018-06-23T02:26:05Z|00003|ofp_match|INFO|post: in_port=1,dl_dst=00:00:00:13:40:20 /*step 2*/dump ovs flow table [root@localhost ~]# ovs-ofctl dump-flows br-jmnd cookie=0x0, duration=9.404s, table=0, n_packets=0, n_bytes=0, in_port=dpdk0,dl_dst=00:00:00:13:40:20 actions=strip_vlan,output:dpdk1 /*step 3*/ set 'ovs-appctl vlog/set netdev_offload_dpdk:dbg' and 'ovs-vsctl set Open_vSwitch . other_config:vlan-limit=2' /*step 4*/send packet(eth/vlan/vlan/ipv4) /*step 5*/gdb info [Thread debugging using libthread_db enabled] Using host libthread_db library "/lib64/libthread_db.so.1". b0x0000ffff882ba8dc in poll () from /lib64/libc.so.6 (gdb) b jmnd_flow_add Breakpoint 1 at 0xbdbc8c: file ../drivers/net/jmnd/jmnd_flow/jmnd_flow.c, line 629. (gdb) c Continuing. [Switching to Thread 0xffff8228e500 (LWP 981115)] Thread 10 "hw_offload5" hit Breakpoint 1, jmnd_flow_add (dev=0x6293740 , attr=0xffff8228d748, patterns=0xfffe68001ee0, actions=0xfffe680034c0, flow=0x10037bac0, error=0xffff8228d6e8) at ../drivers/net/jmnd/jmnd_flow/jmnd_flow.c:629 629 ../drivers/net/jmnd/jmnd_flow/jmnd_flow.c: No such file or directory. (gdb) p patterns[0] $1 = {type = RTE_FLOW_ITEM_TYPE_ETH, spec = 0xfffe68001a50, last = 0x0, mask = 0xfffe68002570} (gdb) p patterns[1] $2 = {type = RTE_FLOW_ITEM_TYPE_VLAN, spec = 0xfffe680020e0, last = 0x0, mask = 0xfffe68001b80} (gdb) p patterns[2] $3 = {type = RTE_FLOW_ITEM_TYPE_VLAN, spec = 0xfffe68001ba0, last = 0x0, mask = 0xfffe68001de0} (gdb) p patterns[3] $4 = {type = RTE_FLOW_ITEM_TYPE_IPV4, spec = 0xfffe68001e00, last = 0x0, mask = 0xfffe680029e0} (gdb) p patterns[4] $5 = {type = RTE_FLOW_ITEM_TYPE_END, spec = 0x0, last = 0x0, mask = 0x0} (gdb) p/x *(struct rte_flow_item_eth *)0xfffe68001a50 $6 = {{{dst = {addr_bytes = {0x0, 0x0, 0x0, 0x13, 0x40, 0x20}}, src = {addr_bytes = {0x0, 0x1, 0x0, 0x0, 0x0, 0x2}}, type = 0x81}, hdr = {dst_addr = {addr_bytes = {0x0, 0x0, 0x0, 0x13, 0x40, 0x20}}, src_addr = {addr_bytes = {0x0, 0x1, 0x0, 0x0, 0x0, 0x2}}, ether_type = 0x81}}, has_vlan = 0x1, reserved = 0x0} (gdb) p/x *(struct rte_flow_item_eth *)0xfffe68002570 $7 = {{{dst = {addr_bytes = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff}}, src = {addr_bytes = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, type = 0xffff}, hdr = {dst_addr = {addr_bytes = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff}}, src_addr = {addr_bytes = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}, ether_type = 0xffff}}, has_vlan = 0x1, reserved = 0x0} (gdb) p/x *(struct rte_flow_item_vlan *)0xfffe680020e0 $8 = {{{tci = 0xe903, inner_type = 0x81}, hdr = {vlan_tci = 0xe903, eth_proto = 0x81}}, has_more_vlan = 0x1, reserved = 0x0} (gdb) p/x *(struct rte_flow_item_vlan *)0xfffe68001b80 $9 = {{{tci = 0xffef, inner_type = 0xffff}, hdr = {vlan_tci = 0xffef, eth_proto = 0xffff}}, has_more_vlan = 0x1, reserved = 0x0} (gdb) p/x *(struct rte_flow_item_vlan *)0xfffe68001ba0 $10 = {{{tci = 0xd207, inner_type = 0x8}, hdr = {vlan_tci = 0xd207, eth_proto = 0x8}}, has_more_vlan = 0x0, reserved = 0x0} (gdb) p/x *(struct rte_flow_item_vlan *)0xfffe68001de0 $11 = {{{tci = 0xffef, inner_type = 0xffff}, hdr = {vlan_tci = 0xffef, eth_proto = 0xffff}}, has_more_vlan = 0x0, reserved = 0x0} (gdb) p/x *(struct rte_flow_item_ipv4 *)0xfffe68001e00 $12 = {hdr = {{version_ihl = 0x0, {ihl = 0x0, version = 0x0}}, type_of_service = 0x0, total_length = 0x0, packet_id = 0x0, fragment_offset = 0x0, time_to_live = 0x80, next_proto_id = 0xfd, hdr_checksum = 0x0, src_addr = 0x200a8c0, dst_addr = 0xa00a8c0}} (gdb) p/x *(struct rte_flow_item_ipv4 *)0xfffe680029e0 $13 = {hdr = {{version_ihl = 0x0, {ihl = 0x0, version = 0x0}}, type_of_service = 0x0, total_length = 0x0, packet_id = 0x0, fragment_offset = 0xff3f, time_to_live = 0x0, next_proto_id = 0x0, hdr_checksum = 0x0, src_addr = 0x0, dst_addr = 0x0}} (gdb) p actions[0] $14 = {type = RTE_FLOW_ACTION_TYPE_COUNT, conf = 0xfffe68002a00} (gdb) p actions[1] $15 = {type = RTE_FLOW_ACTION_TYPE_OF_POP_VLAN, conf = 0x0} (gdb) p actions[2] $16 = {type = RTE_FLOW_ACTION_TYPE_PORT_ID, conf = 0xfffe68002a20} (gdb) p actions[3] $17 = {type = RTE_FLOW_ACTION_TYPE_END, conf = 0x0} (gdb) bt at ../drivers/net/jmnd/jmnd_flow/jmnd_flow.c:629 at ../drivers/net/jmnd/jmnd_flow/jmnd_flow.c:1781 at lib/netdev-offload-dpdk.c:1277 act_vars=0xffff8228d818) at lib/netdev-offload-dpdk.c:2828 at lib/netdev-offload-dpdk.c:2873 at lib/netdev-offload-dpdk.c:3007 at lib/netdev-offload.c:264 (gdb) /*step 6*/cat /var/log/openvswitch/ovs-vswitchd.log 2018-06-23T02:27:02.177Z|00028|netdev_offload_dpdk(hw_offload5)|DBG|dpdk0: rte_flow 0x10037b980 flow create 0 priority 0 group 0 transfer pattern eth dst is 00:00:00:13:40:20 type is 0x8100 has_vlan is 1 / vlan inner_type is 0x8100 tci spec 0x3e9 tci mask 0xefff / vlan inner_type is 0x800 tci spec 0x7d2 tci mask 0xefff / ipv4 fragment_offset is 0x0 / end actions count / of_pop_vlan / port_id original 0 id 1 / end 2018-06-23T02:27:02.177Z|00029|netdev_offload_dpdk(hw_offload5)|DBG|dpdk0/dpdk0: installed flow 0x10037b980 by ufid 94a50841-30e3-49e1-b2b0-81684ec56a8b /*step 7*/confirm the flow is offloaded [root@localhost ~]# ovs-appctl dpctl/dump-flows -m | grep offloaded ufid:0303692c-8c6e-4428-b169-1745bc313d57, mega_ufid:94a50841-30e3-49e1-b2b0-81684ec56a8b, skb_priority(0/0),skb_mark(0/0),ct_state(0/0),ct_zone(0/0),ct_mark(0/0),ct_label(0/0),recirc_id(0),dp_hash(0/0),in_port(dpdk0),packet_type(ns=0,id=0),eth(src=00:01:00:00:00:02/00:00:00:00:00:00,dst=00:00:00:13:40:20),eth_type(0x8100),vlan(vid=1001,pcp=0),encap(eth_type(0x8100),vlan(vid=2002,pcp=0),encap(eth_type(0x0800),ipv4(src=192.168.0.2/0.0.0.0,dst=192.168.0.10/0.0.0.0,proto=253/0,tos=0/0,ttl=128/0,frag=no))), packets:46, bytes:5704, dpe_packets:46, dpe_bytes:5704,used:8.926s, offloaded:yes, dp:dpdk, actions:pop_vlan,dpdk1, dp-extra-info:miniflow_bits(5,1) /*step 8*/check receive packet(eth/vlan/ipv4) /*test cases*/all test cases listed below 1.eth.vlan.vlan.ipv4.icmp action:pop_vlan&port_id 2.eth.vlan.vlan.ipv4.tcp action:pop_vlan&port_id 3.eth.vlan.vlan.ipv4.udp action:pop_vlan&port_id 4.eth.vlan.ipv4.icmp action:pop_vlan&port_id 5.eth.vlan.ipv4.tcp action:pop_vlan&port_id 6.eth.vlan.ipv4.udp action:pop_vlan&port_id 7.eth.ipv4.icmp action:push_vlan&port_id 8.eth.ipv4.tcp action:push_vlan&port_id 9.eth.ipv4.udp action:push_vlan&port_id 10.eth.vlan.ipv4.icmp action:push_vlan&port_id 11.eth.vlan.ipv4.tcp action:push_vlan&port_id 12.eth.vlan.ipv4.udp action:push_vlan&port_id 13.eth.ipv4.udp.vxlan.eth.ipv4 action:vxlan_dacap&port_id 14.eth.vlan.ipv4.udp.vxlan.eth.vlan.ipv4.udp action:vxlan_dacap&pop_vlan&port_id 15.eth.ipv4.udp.vxlan.eth.vlan.ipv4.udp action:vxlan_dacap&pop_vlan&port_id 16.eth.vlan.ipv4.udp.vxlan.eth.vlan.ipv4.tcp action:vxlan_dacap&pop_vlan&port_id 17.eth.ipv4.udp.vxlan.eth.vlan.ipv4.tcp action:vxlan_dacap&pop_vlan&port_id 18.eth.vlan.ipv4.udp.vxlan.eth.vlan.ipv4.icmp action:vxlan_dacap&pop_vlan&port_id 19.eth.ipv4.udp.vxlan.eth.vlan.ipv4.icmp action:vxlan_dacap&pop_vlan&port_id 20.eth.vlan.ipv4.udp.vxlan.eth.vlan.vlan.ipv4.udp action:vxlan_dacap&pop_vlan&port_id 21.eth.vlan.vlan.ipv4.udp.vxlan.eth.vlan.vlan.ipv4.udp action:vxlan_dacap&pop_vlan&port_id 22.eth.ipv4 action:vxlan_encap&port_id 23.eth.ipv4 action:push_vlan&vxlan_encap&port_id 24.eth.vlan.ipv4 action:push_vlan&vxlan_encap&port_id 25.eth.ipv4 action:vxlan_encap&push_vlan&port_id 26.eth.ipv4 action:push_vlan&vxlan_encap&push_vlan&port_id 27.eth.vlan.vlan.ipv4 action:pop_vlan&port_id --- NEWS | 4 ++++ lib/netdev-offload-dpdk.c | 31 +++++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+) diff --git a/NEWS b/NEWS index 6e3f56d73..22218e966 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,7 @@ +v3.4.0 - 11 Dec 2024 +--------------------- + - Add support for QinQ offload + Post-v3.4.0 -------------------- - The limit on the number of fields for address prefix tracking in flow diff --git a/lib/netdev-offload-dpdk.c b/lib/netdev-offload-dpdk.c index 1a6e100ff..7a519cd68 100644 --- a/lib/netdev-offload-dpdk.c +++ b/lib/netdev-offload-dpdk.c @@ -1379,6 +1379,7 @@ parse_flow_match(struct netdev *netdev, struct match *match) { struct rte_flow_item_eth *eth_spec = NULL, *eth_mask = NULL; + struct rte_flow_item_vlan *vlan_spec = NULL, *vlan_mask = NULL; struct flow *consumed_masks; uint8_t proto = 0; @@ -1451,6 +1452,9 @@ parse_flow_match(struct netdev *netdev, eth_mask->type = match->wc.masks.vlans[0].tpid; } + vlan_spec = spec; + vlan_mask = mask; + add_flow_pattern(patterns, RTE_FLOW_ITEM_TYPE_VLAN, spec, mask, NULL); } /* For untagged matching match->wc.masks.vlans[0].tci is 0xFFFF and @@ -1459,6 +1463,33 @@ parse_flow_match(struct netdev *netdev, */ memset(&consumed_masks->vlans[0], 0, sizeof consumed_masks->vlans[0]); + /* VLAN */ + if (match->wc.masks.vlans[1].tci && match->flow.vlans[1].tci) { + struct rte_flow_item_vlan *spec, *mask; + + spec = xzalloc(sizeof *spec); + mask = xzalloc(sizeof *mask); + + spec->tci = match->flow.vlans[1].tci & ~htons(VLAN_CFI); + mask->tci = match->wc.masks.vlans[1].tci & ~htons(VLAN_CFI); + + if (vlan_spec && vlan_mask) { + vlan_spec->has_more_vlan = 1; + vlan_mask->has_more_vlan = 1; + spec->inner_type = vlan_spec->inner_type; + mask->inner_type = vlan_mask->inner_type; + vlan_spec->inner_type = match->flow.vlans[1].tpid; + vlan_mask->inner_type = match->wc.masks.vlans[1].tpid; + } + + add_flow_pattern(patterns, RTE_FLOW_ITEM_TYPE_VLAN, spec, mask, NULL); + } + /* For untagged matching match->wc.masks.vlans[0].tci is 0xFFFF and + * match->flow.vlans[0].tci is 0. Consuming is needed outside of the if + * scope to handle that. + */ + memset(&consumed_masks->vlans[1], 0, sizeof consumed_masks->vlans[1]); + /* IP v4 */ if (match->flow.dl_type == htons(ETH_TYPE_IP)) { struct rte_flow_item_ipv4 *spec, *mask, *last = NULL;