From patchwork Mon Sep 23 08:55:59 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sunyang Wu X-Patchwork-Id: 1988444 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=RRU8N3lT; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=openvswitch.org (client-ip=2605:bc80:3010::137; helo=smtp4.osuosl.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver=patchwork.ozlabs.org) Received: from smtp4.osuosl.org (smtp4.osuosl.org [IPv6:2605:bc80:3010::137]) (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 4XBxgF5S8Gz1xsM for ; Mon, 23 Sep 2024 18:56:25 +1000 (AEST) Received: from localhost (localhost [127.0.0.1]) by smtp4.osuosl.org (Postfix) with ESMTP id D765C40664; Mon, 23 Sep 2024 08:56:23 +0000 (UTC) X-Virus-Scanned: amavis at osuosl.org Received: from smtp4.osuosl.org ([127.0.0.1]) by localhost (smtp4.osuosl.org [127.0.0.1]) (amavis, port 10024) with ESMTP id 0DuPl9qynhEB; Mon, 23 Sep 2024 08:56:22 +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 smtp4.osuosl.org 6CC6D40652 Authentication-Results: smtp4.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=RRU8N3lT Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [140.211.9.56]) by smtp4.osuosl.org (Postfix) with ESMTPS id 6CC6D40652; Mon, 23 Sep 2024 08:56:22 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id 2AB34C0012; Mon, 23 Sep 2024 08:56:22 +0000 (UTC) X-Original-To: ovs-dev@openvswitch.org Delivered-To: ovs-dev@lists.linuxfoundation.org Received: from smtp2.osuosl.org (smtp2.osuosl.org [140.211.166.133]) by lists.linuxfoundation.org (Postfix) with ESMTP id 89464C0011 for ; Mon, 23 Sep 2024 08:56:20 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp2.osuosl.org (Postfix) with ESMTP id 6AF9D40458 for ; Mon, 23 Sep 2024 08:56:20 +0000 (UTC) X-Virus-Scanned: amavis at osuosl.org Received: from smtp2.osuosl.org ([127.0.0.1]) by localhost (smtp2.osuosl.org [127.0.0.1]) (amavis, port 10024) with ESMTP id oMY4dUK3xTu8 for ; Mon, 23 Sep 2024 08:56:19 +0000 (UTC) Received-SPF: Pass (mailfrom) identity=mailfrom; client-ip=2a01:111:f400:feab::711; helo=apc01-sg2-obe.outbound.protection.outlook.com; envelope-from=sunyang.wu@jaguarmicro.com; receiver= DMARC-Filter: OpenDMARC Filter v1.4.2 smtp2.osuosl.org 1E06A400C8 Authentication-Results: smtp2.osuosl.org; dmarc=pass (p=quarantine dis=none) header.from=jaguarmicro.com DKIM-Filter: OpenDKIM Filter v2.11.0 smtp2.osuosl.org 1E06A400C8 Authentication-Results: smtp2.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=RRU8N3lT Received: from APC01-SG2-obe.outbound.protection.outlook.com (mail-sgaapc01on20711.outbound.protection.outlook.com [IPv6:2a01:111:f400:feab::711]) by smtp2.osuosl.org (Postfix) with ESMTPS id 1E06A400C8 for ; Mon, 23 Sep 2024 08:56:17 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=J2yV2ioAosWsHQKLnctFZ9lO8P2ZDRyZHDxL5b4GPjvUutk/Ym8wt37D9t9AgbFVt0efaSQdSTFPFxyQmlzsSvMkt2NLW/hTIp9TDboDMVY+2+P+ScF+/gvOpzmH682RcC10m3M34QyIEbakvl4trsa9j9j4DgYQcLr085SNYeICDSt5Jz388y/pqdOYO1ypZ0akyAwGI79831l1Y3XA6pZXsKrCH9KpJNItuiVYiQtE0zOqXXTLyYFznM3LbTgW6H1VpxvDgFQg4cG4+XoEggtcz8TbyUgiVMQhaG3BHEqeURgqA18J2SV9NQbsBrduw9FkQCjd8AiJatydqLweug== 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=+zb8TFAE/Zj16ZPW888ltqF/Tsle3ppKhkL5ytOghoE=; b=qvazwZecqn0rs2uTW0t1G4d0lW3W71p2ojtZtGjN6+AJ3AJZRvBW8lqkAcWKLNfA83dqrTfd6V7wM2yThcmS6WhE9izpF+agvhGF1P0Wl7F61bgnR0p9iTvWkfdnQqR+QTiN68QjU0YVh7nmXzBtDcL+LluRh0nIW2QgKowOvGwSGdPEMkFTJIb7rquR8R+wbqtqK8Hmq7PcQ7EKiJbzqz6muwjeQmHfAMZhceeuYl7mdkAqlfFMoiJFlfyX6qinN50WMBSM89MSiwY1hi0Gw845b8OETLmUHHEp5LMfZH8O0WVccYqNyASi0ri0gc1AuHX8bN/OR4QP9vltmNhccQ== 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=+zb8TFAE/Zj16ZPW888ltqF/Tsle3ppKhkL5ytOghoE=; b=RRU8N3lTz8ZLwc/71D/Xd5aVCZxA0q5Eui928PTXPuhUPsPukS0dHQRTdMKk1y2uy6KyuPuqkzEnJi87Vcos2gPADmxf/zyZhXtsoPRz52k5L3IeNrBbWqsxnv4GY5btJWCrbm8GLjRU0yysNesSB8zEwQDHggyL6/v75t6WVwCH2wGvbQNWwcWsiC/2VtAliswXEPAUU3Xma1XMXYbeUSMTF7FnH2A1sMqZP0aZF38YcG3M3hJHlgqCjlZQ2cLwlYtUuYzczegVfIryaPw3VmRnFxlE5D/hxS46mZrKfkhBPA/8Y5VUwyZqgN/cdPMdy70t1gwBQUhAuAguJ9PRrw== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=jaguarmicro.com; Received: from KL1PR0601MB5567.apcprd06.prod.outlook.com (2603:1096:820:c5::14) by SEYPR06MB6613.apcprd06.prod.outlook.com (2603:1096:101:169::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7939.24; Mon, 23 Sep 2024 08:56:08 +0000 Received: from KL1PR0601MB5567.apcprd06.prod.outlook.com ([fe80::3ad3:b4d9:7e69:85cb]) by KL1PR0601MB5567.apcprd06.prod.outlook.com ([fe80::3ad3:b4d9:7e69:85cb%6]) with mapi id 15.20.7982.022; Mon, 23 Sep 2024 08:56:08 +0000 To: ovs-dev@openvswitch.org Date: Mon, 23 Sep 2024 16:55:59 +0800 Message-Id: <20240923085559.45228-1-sunyang.wu@jaguarmicro.com> X-Mailer: git-send-email 2.19.0.rc0.windows.1 X-ClientProxiedBy: SI1PR02CA0053.apcprd02.prod.outlook.com (2603:1096:4:1f5::8) To KL1PR0601MB5567.apcprd06.prod.outlook.com (2603:1096:820:c5::14) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: KL1PR0601MB5567:EE_|SEYPR06MB6613:EE_ X-MS-Office365-Filtering-Correlation-Id: 0e3b0f03-9828-46db-c5f1-08dcdbad90e6 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|376014|1800799024|366016|52116014|38350700014; X-Microsoft-Antispam-Message-Info: vWXXaYtOtJ+TiV3rxucShL3l1s3xQlS2VoYSLDe9hj4rF96x4RTt2m4ZD4uEx9z9sdtUV9Pcf/MUmLJFp0o9LRovaMSKbljzjufKXZUBB0kaLNtbW9vHrLgIEqFEuFhoiqfAELB2WQdxZ7VdLaQhc0Rh23lkx0UJHWYEvajNSQoFdgYNHKPfkaxdM9WDfjiKwF035q6NUuz3TOXSsVToeznPGPAn37ypzH4INaJ7+LKPvz1WjZIeqp0xpCKsr/pWOe6xt1jDr9W0sV/Ggndv9gNSzZxNm/SP6OY8VMX1i75m3q54SCE3HTuau5i3j6CkBKcWDQbelfR+W1qL0bpaDR9pffbNMA2Use6kmW7tIz1RlmO7cjmjjYqC5rXr8P6uTIKOaTkzqiUzXgVWRfxeeXpFdCnFV0mevHt5dRTgS2m94wOQaKHe6nIyvP1JypOdtzMZJtT2XkK0nhbG0Ak2SmcDiouFDmHc4F4JlK4t9cc718ogrItdTXyQ7RPgyzxjB6Htu52nv2DoGX02KHUApTqKvWzfaXTqiKzDA90lfWMWhuICFjqpud7HRziu0JVDslpZdACHUnWYTpLfgo26DGeYbD6LTtTwoo07J5rjUuXFxjNpn5kpPFAWb0rL1fyNXcyMFHJ/xFTooQZAJKIG+3BeemRm4hjsvGEsjIWF/5mplROJE9b1879doMnQtXowBKx4v2WCurYLhP0/Kpnz2m2e+JgrBB7OjhQ5KPQcLwGTLqik6BfTjoLOdcyMA0fV577H0f1oWs+drYrP818aw1wLBPRxoTdmwJ3eVf4EJZRlbHfOTNxOO0QnuZIWc2dwJerrN1ewiMm6uwEP85NFPmRXR1Tk4kDHxQI9Hl8GiDI8uqgeGcUg2EN+3pGwas2783JEIlfTLH3+8qCC08fZU2cN0DKR+B5IYV7zcOScXy3fgkj2oZAjo+P2JmrQYnmNvOkR4ydnMHJGY3KWtXoTgFKzr3dTsdIGBEFUttfilDotlSXKPC7xuYNXKnpq0Jc0YnmXnXSd81wxoRlJPmb7AkLqNkORPlLa6q8wBTU6L1qzAV84w3uplVTGiAGeISL6tBw/SAXrhlaGuMChRDLPz76CbL5u27GZ4JhDvLG+uJ9E+Y8Zm2tKAdI+/OzMrqDC3LLcNmbaz82PLVQ7n6TwDZdSyhznyR47hc4+7AGd3DvHhH2KYnmnys/S4nelE+dZWEk8gXHrEhp8zYjWiKo9KdC0WMija/Rgld5djsJ4dZ1QCRFMuo/a4iBU7NSweYmtMwdwtqpyYqVLIABo49lRo2//IyE1fj8afzOw4Xg0aNxM4GTuKeDOEp/Qd/gtExjrFqbeLsDIa5Izv7f8ETJwq8sOdUp0+A95KaGYai7HbSCKMrBOngaIfCAUqbU4BIfeUi04IbWA8xrNuzE/FrqTKA== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:KL1PR0601MB5567.apcprd06.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(376014)(1800799024)(366016)(52116014)(38350700014); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: Xak+adxJ1uLIJy7OWb8W2blOjbznqUKvvMDuvQxynymFsi/sTc6qaMUSsPP100vseWEcSc+VlSYLj3b1O99OH/tSH66Uar078n3ecj8GSB0AeZuetq6O2EufmzekAxXJDm5tLeubUQdRKf2FA2ns7W5v0h2/iXkPdcJZvI0T1XWLdaz6rXKOQu8srZ5Whp3Wp/EZ1wtdrQrVQ5lEcghHda4FnpuW7/GZoRWNoT3JwW9+2gqFDQRr7O2/skrt6DwgDX3cmxGlW6ndow68XkqIxdMttRBzh4v6edvyJAjSA3+8RuM7NmIgBYAYd/t/gHzAyNSSdN3QUpKQ+yElxrQO+egatoXC+Gc04mvEb7ZfiqDBmfJqUya19IZ9WvAZdj5jYP3mrCMOqrrWkfEelMM5deaKg5ZIOZyYwaDdbJfnwcC3VzSx+HqWeDVbjFffzytPJeICklIBk1TqrH6Tu6cOIqHatfCJ+Zjyw+ani4vPzRMKIs7sjKYgy48DSo24KjOHRUE/PmUJTIB5Qy0Kddj49+aHT2noS0h/BPrabotSBcia8XguGWEQ1QluzCj+aM+H5/jKcLfITfD2/yi1VBiHTFeuhrgydfSG7WGJQI9dll+qoDYE94Uf8Y3Umk5HkXo5kBsJew1zbwPAqT7kA9CWchUVkhYRWQcI7SdnyivTW5uBazhmfJVXRK08SZ9gWk4c8Kj3tan0v0iTIpkH6eIfs+O6F+QmvQNnbOPdL2NBG4Quy7a5bUmYlIFxSZ2LpTSbVTFW1g7BaXVCm78WzBQ0NNe5RoOwuvdudpmCH4LAQrvIHY80cS+3bjF1SP8oCVMGzAYhZrMKOWNkh/AUrAznvIDOxxXFkwvfQG21n7rDALy6cC3eVDcOENl2fwpNBMax7mJFDp5it9m3v1s9guM1yOEYnMAJp6YRBmOF5UkrvkdLqU/0cHvAw4efilgTF6oDV1Pr3ooQKcJ7kxlQIgbCsFPbc+/GTsT5l4x83YjmqCzyzwJxLYG1eLk0gy02q+o/Wjy70jTVLH8840QArYgh0jDKPki2H4sueXGxbFK5E8AjzDIj6H/JmTn5BUEjTDLw1Z55G1xb0Zks2upuNqL39HYp0xxTGJ1d6BNQCYOuw2EEsgbU0+Q9RCln+9TtDsKWLCdKwtWMRjmNeMsKkTZL/Vvr40+j/Fgu3j539mcLlL+3afMyIksqlwoguD4mKNJQuYdXW8LvlmnQzvAD1/3qsfcN9yq93O4KYJY4mxYrGiVvvPmijhO9E+2Y7xXYD6Bhp9nM4rF1y+YPADPikEkfx4xlFZhkvWdF4tjPAo+uXYIpEo+6zWL1jIE4xnj8iJr8Eyle1wRlTLYZ8SelIHKZ8Zg5ttc0PZ5I+tc5c6Qw74tzQXsYLTvAbIhtUjCY5ZN8YfPGCQCD8xorgHUWNw2Nnk0BzWlEJx7WIev4CXChHnbO5N5cbVSYwVM8D2f3IE2V2yY+8fF3atYMBMAuj2y/wAGZW4Y2qHJmsZ7RTyEWeyZPI1BegXKI1S2kIDWtf2e7BmLIyujaNGa/8/C+22Uppvdw0Ra0lJwPfQUFwiePNBMYXc7NWq3tsgm0EVlQ8Cpd46MzFV8R0T9UHNXucDh2jw== X-OriginatorOrg: jaguarmicro.com X-MS-Exchange-CrossTenant-Network-Message-Id: 0e3b0f03-9828-46db-c5f1-08dcdbad90e6 X-MS-Exchange-CrossTenant-AuthSource: KL1PR0601MB5567.apcprd06.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 Sep 2024 08:56:08.8323 (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: v5WNW2Qo0dZ0LjruqAdIvHH3bdaE4sjIsUYGP+YdGYZiH5Ev+FotfJ5Lagk339+kALuCY7slyiVmG9VXTy0xRojSloW/kzUTomGVZuUfRM0= X-MS-Exchange-Transport-CrossTenantHeadersStamped: SEYPR06MB6613 Subject: [ovs-dev] [PATCH v2] netdev-linux: Fix the bug when sending packets with multi segments. 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: Sunyang Wu via dev From: Sunyang Wu Reply-To: Sunyang Wu Errors-To: ovs-dev-bounces@openvswitch.org Sender: "dev" When sending a packet with multiple segments, we use the length of the entire message as the transmission length and the base address of the first segment as the base address for the entire message. As a result, the packet sent to the network device is incorrect, containing only the content of the first segment. Fixes: d19cf8bb798ff ("Replace sendmsg with sendmmsg in netdev_linux_send") Signed-off-by: Sunyang Wu --- lib/dp-packet.h | 39 +++++++++++++++++++++++++++++++++++++++ lib/netdev-linux.c | 28 ++++++++++++++++++++++++++-- 2 files changed, 65 insertions(+), 2 deletions(-) diff --git a/lib/dp-packet.h b/lib/dp-packet.h index 4afbbe722..10ae91145 100644 --- a/lib/dp-packet.h +++ b/lib/dp-packet.h @@ -699,6 +699,24 @@ dp_packet_size(const struct dp_packet *b) return b->mbuf.pkt_len; } +static inline uint16_t +dp_packet_nb_segs(const struct dp_packet *b) +{ + return b->mbuf.nb_segs; +} + +static inline uint16_t +dp_packet_data_size(const struct dp_packet *b) +{ + return b->mbuf.data_len; +} + +static inline struct dp_packet * +dp_packet_next(const struct dp_packet *b ) +{ + return (struct dp_packet *)(b->mbuf.next); +} + static inline void dp_packet_set_size(struct dp_packet *b, uint32_t v) { @@ -778,6 +796,27 @@ dp_packet_size(const struct dp_packet *b) return b->size_; } +static inline uint16_t +dp_packet_nb_segs(const struct dp_packet *b) +{ + return 1; +} + +static inline struct dp_packet * +dp_packet_next(const struct dp_packet *b ) +{ + return NULL; +} + +/* + only for compile +*/ +static inline uint16_t +dp_packet_data_size(const struct dp_packet *b) +{ + return b->size_; +} + static inline void dp_packet_set_size(struct dp_packet *b, uint32_t v) { diff --git a/lib/netdev-linux.c b/lib/netdev-linux.c index 0cd0850a3..e26ebb6c0 100644 --- a/lib/netdev-linux.c +++ b/lib/netdev-linux.c @@ -1690,8 +1690,32 @@ netdev_linux_tap_batch_send(struct netdev *netdev_, int mtu, size = dp_packet_size(packet); do { - retval = write(netdev->tap_fd, dp_packet_data(packet), size); - error = retval < 0 ? errno : 0; + if (dp_packet_nb_segs(packet) > 1) { + int data_size = 0; + struct dp_packet *tmp_packet = packet; + void *buf = NULL; + + while (tmp_packet) { + data_size += dp_packet_data_size(tmp_packet); + tmp_packet = dp_packet_next(tmp_packet); + } + + buf = xmalloc(data_size); + data_size = 0; + while (packet) { + memcpy(buf + data_size, + dp_packet_data(packet), + dp_packet_data_size(packet)); + data_size += dp_packet_data_size(packet); + packet = dp_packet_next(packet); + } + retval = write(netdev->tap_fd, buf, data_size); + error = retval < 0 ? errno : 0; + free(buf); + } else { + retval = write(netdev->tap_fd, dp_packet_data(packet), size); + error = retval < 0 ? errno : 0; + } } while (error == EINTR); if (error) {