From patchwork Tue May 9 03:45:29 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nobuhiro MIKI X-Patchwork-Id: 1778740 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org 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=) Authentication-Results: legolas.ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=yahoo-corp.jp header.i=@yahoo-corp.jp header.a=rsa-sha256 header.s=selector1 header.b=lEttC1nW; dkim-atps=neutral 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 (P-384) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4QFkbW1JkHz214c for ; Tue, 9 May 2023 13:46:14 +1000 (AEST) Received: from localhost (localhost [127.0.0.1]) by smtp4.osuosl.org (Postfix) with ESMTP id ABACD4285B; Tue, 9 May 2023 03:46:08 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp4.osuosl.org ABACD4285B Authentication-Results: smtp4.osuosl.org; dkim=fail reason="signature verification failed" (1024-bit key, unprotected) header.d=yahoo-corp.jp header.i=@yahoo-corp.jp header.a=rsa-sha256 header.s=selector1 header.b=lEttC1nW X-Virus-Scanned: amavisd-new at osuosl.org Received: from smtp4.osuosl.org ([127.0.0.1]) by localhost (smtp4.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 6xaXFNf9BPfC; Tue, 9 May 2023 03:46:07 +0000 (UTC) Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [140.211.9.56]) by smtp4.osuosl.org (Postfix) with ESMTPS id C4B3641FFB; Tue, 9 May 2023 03:46:05 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp4.osuosl.org C4B3641FFB Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id ACD8AC008E; Tue, 9 May 2023 03:46:03 +0000 (UTC) X-Original-To: dev@openvswitch.org Delivered-To: ovs-dev@lists.linuxfoundation.org Received: from smtp4.osuosl.org (smtp4.osuosl.org [IPv6:2605:bc80:3010::137]) by lists.linuxfoundation.org (Postfix) with ESMTP id 6853BC0037 for ; Tue, 9 May 2023 03:46:01 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp4.osuosl.org (Postfix) with ESMTP id 2DE9041EC1 for ; Tue, 9 May 2023 03:46:01 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp4.osuosl.org 2DE9041EC1 X-Virus-Scanned: amavisd-new at osuosl.org Received: from smtp4.osuosl.org ([127.0.0.1]) by localhost (smtp4.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id sUUPF6FUusDX for ; Tue, 9 May 2023 03:45:57 +0000 (UTC) X-Greylist: from auto-whitelisted by SQLgrey-1.8.0 DKIM-Filter: OpenDKIM Filter v2.11.0 smtp4.osuosl.org 481FC41E89 Received: from corp-ob07.yahoo-corp.jp (corp-ob07.yahoo-corp.jp [183.79.94.94]) by smtp4.osuosl.org (Postfix) with ESMTPS id 481FC41E89 for ; Tue, 9 May 2023 03:45:57 +0000 (UTC) Received: from JPN01-OS0-obe.outbound.protection.outlook.com (mail-os0jpn01lp2113.outbound.protection.outlook.com [104.47.23.113]) by corp-ob07.yahoo-corp.jp (Postfix) with ESMTPS id E04A619FB180 for ; Tue, 9 May 2023 12:45:54 +0900 (JST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=EBH0+RSluHoGKq2j89F88wpEBKu3GRfxHVatdCLoO42IJe688+f/+rSXL8INYa3yMDLzV+goNFobLhSKTdBXcC4+vnlKP+mYDHE6WM6Y/bMxVcCe90Mxu2+MFfjuIWEid68AzuKo1A0s7krd3wOKXcHQCxvIUV37P3v10FpQWCXQlA66u+hCDKXkss4wf/sZD0uFzJc5DJWkitjZIyLADCv+vauxP3NAlFZKtlryIuBPaMJE4NL3Ejj5K9FjZeCtJvyChYYUZOj6vHAh86GLV7rPpmI73bW4OlAbLLbp+IuOwBHN/7IuxSMO2reaSGoLYGqjrF6uG/jovwHD8+v88A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=7RWlKZzLJydz0L/XJdNzL8cxkJRR5WS7JPJ7/QhE4Uc=; b=fLtj0Hklj6iHONejSbmVuCSlfc5zqEMpAQ+9V2SfnKEMwnSdefUEYPCwXZJ5x/NbWs/LZEUOs4j4Hz1INsW5hS2RKytgDYJw4tNMVfGuAmaw7ZhYGQT75d6SGl8gb/4p7ARLPVGBOF/WeKpgB4EYAZF2r3TB9Sxlq3wzZviWEPcCnX9gU51TVIszz7hWtLGTcJ4qjWQMjqRWp+Ahe6QIpLKQhG2F1d3BLra1MD33TldmvUv1ycZGsq9dRERiyuEOvjB83DUqUYgaU/t/PzB2coGttZa+UaX63wCHBvNhKqdPM/xyI8Zs4CkAKYhQ8z2ik1Tv3aSuRqCyLxNy72fX7g== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=yahoo-corp.jp; dmarc=pass action=none header.from=yahoo-corp.jp; dkim=pass header.d=yahoo-corp.jp; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo-corp.jp; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=7RWlKZzLJydz0L/XJdNzL8cxkJRR5WS7JPJ7/QhE4Uc=; b=lEttC1nW3zrLrY28esKItPAQDsi/xVf1/tUaYDT1mNDcnh0H6IXQKSZDpKKoHItgVjMt+zVNMFQawlBywCgumNVyTcaY2IXaY5CMeSL/eG475An2G2K0jOk6qh8/uh5y8vtr4DLhG+Ory6s+L3J3W54fLqui2YB7tGyEgmCaCrw= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=yahoo-corp.jp; Received: from TY2PR01MB4107.jpnprd01.prod.outlook.com (2603:1096:404:d8::23) by TYCPR01MB10118.jpnprd01.prod.outlook.com (2603:1096:400:1ee::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6363.33; Tue, 9 May 2023 03:45:54 +0000 Received: from TY2PR01MB4107.jpnprd01.prod.outlook.com ([fe80::316c:fe30:7d04:4f2b]) by TY2PR01MB4107.jpnprd01.prod.outlook.com ([fe80::316c:fe30:7d04:4f2b%5]) with mapi id 15.20.6363.033; Tue, 9 May 2023 03:45:54 +0000 From: Nobuhiro MIKI To: dev@openvswitch.org Date: Tue, 9 May 2023 12:45:29 +0900 Message-Id: <20230509034530.35553-2-nmiki@yahoo-corp.jp> X-Mailer: git-send-email 2.38.1 In-Reply-To: <20230509034530.35553-1-nmiki@yahoo-corp.jp> References: <20230509034530.35553-1-nmiki@yahoo-corp.jp> X-ClientProxiedBy: TY2PR01CA0023.jpnprd01.prod.outlook.com (2603:1096:404:a::35) To TY2PR01MB4107.jpnprd01.prod.outlook.com (2603:1096:404:d8::23) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TY2PR01MB4107:EE_|TYCPR01MB10118:EE_ X-MS-Office365-Filtering-Correlation-Id: afb5f873-d6ef-4c89-b683-08db503fe3a7 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 0OTx2XiKZ3QjfpDt/Wj/aMZkUPvDlgr/tGqUDFo5lwPOFlUXNVy+vgQK+PUj8jQ5saYVFIozdokM0MG4g/XfszXhMTGKP7/wMX9pG8ffRwvTDrthJ6qJvwz08thy4znRJ3eNTfflIMTobl0FHMOOqj8jQKSwOkJRLAmFMzNI8Qqd9jUjcHyVpLwlrAXX8S4afmYNaUNXBuHWSTVExsO5/b4Op3dgKt7xMAQlgN1bqGDAR+xSyEKquz5NNhFcUC+uHcVlnvxCZ4SBepffkpQTJbVWG9G/81yWgqNEAfY93TkZ8+M5EBHijp2eYfYlK7BPss9hl5C/kjACq2QIV1DN+WbL3jQKPgtGQMpJYxRR7TaDF/SomzZNzZhINR7wCIryz18smM0PXV8od1XKSmYQxzyXdbWRYjJlaOdmh/x9AJ3WTdCOyoq+yiuJ5Y/mmViA7djEEP0e6XT/eekt7VYqMwtL6LmFDygYCWqXOGuv46B0NNJJa+SBUzqRSt55H/Gg4OfuOOtkERITuC0AuNRE4BHiNQZ1vgEFQhIMRQ8QkaAVWbBPmmaTLe1GA/0cELrEu6f0wE8Wr+TElv2zye99nvRqDncAJYFyzUROPcTB/IuoRdICdGoz55P0VnK3GdoclDiSK1XiSbUql7/auoBWJg== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:TY2PR01MB4107.jpnprd01.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230028)(4636009)(136003)(396003)(346002)(376002)(366004)(39860400002)(451199021)(2906002)(186003)(38350700002)(6512007)(26005)(6506007)(1076003)(36756003)(107886003)(38100700002)(83380400001)(2616005)(82960400001)(316002)(6486002)(6666004)(6916009)(41300700001)(66946007)(66556008)(66476007)(4326008)(86362001)(52116002)(478600001)(8676002)(8936002)(5660300002)(21314003); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: ujQYKJfhs4uoVKDtgHrjz6knSc/iRRieduAlQNXl9mfInbC2XH3FLQpqr7dp8QwTM7poSBD04zVP9ALCIwevwXffTL07HRTfiawX0jwIxzwNEspFuo2rprdvG8kU+xWqeOuVo5TWUvERWJk+7g//KvEf6p9d4qmRx1srRUALFZfC+5KNvu8CfH16GTpP3nb5b46HerQvySgMx8makuIS9wUuo1VspD+8cQiH2xbGAyNRQ5ExwxfXed3vsDWUhIXW46jGKlj+9sNhcIN6OvhK6/akHFYPFhNVUpVFABxwqZwbkOyLUmTF8TS0zQ53ZXdyVXFcQrWid2dIEUo2gqOLL65NdqCFg/0X1y3cBnJmAgpFl85ZW1r5M94CzwIoZ+OFTs8WvxZslWUxmOP7h+5vrF9mRdI42sHLzApkBR2Xry9I9zbEzH/E0JMqAT014ouHpNbRbyv2DM+NK6KGticKSlIIXG2ssw/tl32cG4usTMF5+ihtGVyymf+mt/mfh+mGmTKGNP7MLbeqJHt66p3pQ6mEIbYMaHjMt5QDMOJtMhw9hWEM67xSxgsDJXKBDF056qMC8Z74NkH3BiBPBxnrEeburMxKTDnydUf1bfCRQ9SFCJ+6b24h0vramwhxTQsd4PggiYawg7tvKGS63MSYI3h6VB9+F4A9In7P6L6VqZ7lbH7oGN50nufuSGH8cqJ6twv+dD9Rc9nN3rFw/LG8t45gQeEGcyqzifq12cIlNU/Yv5e67wsyZsA0ca7NQn6bfR1KzDP+7obMygwARw2G8C9UOwC3c/blD1WMW4DU41TjZ2UTlhI474s1sPOPU/10GgGT9Wz+YV12G05jTfFrQrDr3Eh3el3xrUIwPpu8JYIPCUljm8Mg9rOggF/JVZOVHuiZzwlOLAUPDj8GEwIowZj9qocUVDbonYTuoqKpJ3ff71VLmm1EysRimCS0Ox/bDWua2m/joU2K0iYgVfZbtTzmROoAp6Y1qCo5feq3sISrRSvrKDIV7xuGKns7lBOGtdnAnmrXED6SWDJ4l/2gpnMXnYlPoAMSkQ4PE/zxdlQHVqAh49Fxp8UqHleaPcHBY56HKokvVmAWJb7hjZjntddVqR1+c7rGcEuZGgkFsVU/rz8+cKkcK0CPe4UqYVPVyfliCQNtVNuEfZKI5rrjZHR6ttdubQPwCj9yrMBLDdN/hbVR3ULkPf8T0KSM38zBSOj4iewBhnyQ6QAOHGnHFJmFkKwkxWA0TescFmubth0DlHET+4PAJekL2ojpky9Uc3WyK7Fyri4ys8s32tYnvD6dxAFpAadDx12dL43bDznmyl1yhUdPWp3V4qt+Y8SOMknKrEf/PEMS0QKaMVkhV4NLHqKa7dOy2SZQqBINwX332QIkcXi3TpLKYvUv4mcLaPUe7VY8D7Odw8FuL9qiKdKJY6qmZlvbmaU5LAKF0x/s6w/r6+yQanyz6ybaBaB/yc7KOm+60m84zPUIL8o+8MEhwwNbFHa3ioItshx1n2GrtIiKUiwfyvohFf0uJI+/+GBINLrU8Bv1V/HGdABRiKkVxQF/GvHOSPY5+v32P26I6rca6pf3+XlhKpeOmt61 X-OriginatorOrg: yahoo-corp.jp X-MS-Exchange-CrossTenant-Network-Message-Id: afb5f873-d6ef-4c89-b683-08db503fe3a7 X-MS-Exchange-CrossTenant-AuthSource: TY2PR01MB4107.jpnprd01.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 May 2023 03:45:53.8811 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: a208d369-cd4e-4f87-b119-98eaf31df2c3 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: qd65ChNKCUmg56GWy4jeeecJCLw2/8MuL4w7bcnSWoxPCv0kusuxBrKHZ3scWdQFnOIHifXY/nYVk3fsB3c7CA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYCPR01MB10118 Subject: [ovs-dev] [PATCH 1/2] netdev-native-tnl: Add ipv6_label param in netdev_tnl_ip_build_header. X-BeenThere: ovs-dev@openvswitch.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: ovs-dev-bounces@openvswitch.org Sender: "dev" For tunnels such as SRv6, some popular vendor appliances support IPv6 flowlabel based load balancing. In preparation for OVS to support it, this patch modifies the encapsulation to allow IPv6 flowlabel to be configured. Signed-off-by: Nobuhiro MIKI --- lib/netdev-native-tnl.c | 14 ++++++++------ lib/netdev-native-tnl.h | 2 +- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/lib/netdev-native-tnl.c b/lib/netdev-native-tnl.c index 9abdf51076a8..55e1bd567fa1 100644 --- a/lib/netdev-native-tnl.c +++ b/lib/netdev-native-tnl.c @@ -35,6 +35,7 @@ #include "byte-order.h" #include "csum.h" #include "dp-packet.h" +#include "flow.h" #include "netdev.h" #include "netdev-vport.h" #include "netdev-vport-private.h" @@ -276,7 +277,7 @@ eth_build_header(struct ovs_action_push_tnl *data, void * netdev_tnl_ip_build_header(struct ovs_action_push_tnl *data, const struct netdev_tnl_build_header_params *params, - uint8_t next_proto) + uint8_t next_proto, uint32_t ipv6_label) { void *l3; @@ -308,7 +309,8 @@ netdev_tnl_ip_build_header(struct ovs_action_push_tnl *data, ip6 = (struct ovs_16aligned_ip6_hdr *) l3; put_16aligned_be32(&ip6->ip6_flow, htonl(6 << 28) | - htonl(params->flow->tunnel.ip_tos << 20)); + htonl(params->flow->tunnel.ip_tos << 20) | + htonl(ipv6_label & 0xfffff)); ip6->ip6_hlim = params->flow->tunnel.ip_ttl; ip6->ip6_nxt = next_proto; memcpy(&ip6->ip6_src, params->s_ip, sizeof(ovs_be32[4])); @@ -326,7 +328,7 @@ udp_build_header(struct netdev_tunnel_config *tnl_cfg, { struct udp_header *udp; - udp = netdev_tnl_ip_build_header(data, params, IPPROTO_UDP); + udp = netdev_tnl_ip_build_header(data, params, IPPROTO_UDP, 0); udp->udp_dst = tnl_cfg->dst_port; if (params->is_ipv6 || params->flow->tunnel.flags & FLOW_TNL_F_CSUM) { @@ -488,7 +490,7 @@ netdev_gre_build_header(const struct netdev *netdev, ovs_mutex_lock(&dev->mutex); tnl_cfg = &dev->tnl_cfg; - greh = netdev_tnl_ip_build_header(data, params, IPPROTO_GRE); + greh = netdev_tnl_ip_build_header(data, params, IPPROTO_GRE, 0); if (params->flow->packet_type == htonl(PT_ETH)) { greh->protocol = htons(ETH_TYPE_TEB); @@ -644,7 +646,7 @@ netdev_erspan_build_header(const struct netdev *netdev, /* XXX: RCUfy tnl_cfg. */ ovs_mutex_lock(&dev->mutex); tnl_cfg = &dev->tnl_cfg; - greh = netdev_tnl_ip_build_header(data, params, IPPROTO_GRE); + greh = netdev_tnl_ip_build_header(data, params, IPPROTO_GRE, 0); ersh = ERSPAN_HDR(greh); tun_id = ntohl(be64_to_be32(params->flow->tunnel.tun_id)); @@ -880,7 +882,7 @@ netdev_srv6_build_header(const struct netdev *netdev, goto out; } - srh = netdev_tnl_ip_build_header(data, params, IPPROTO_ROUTING); + srh = netdev_tnl_ip_build_header(data, params, IPPROTO_ROUTING, 0); srh->rt_hdr.segments_left = nr_segs - 1; srh->rt_hdr.type = IPV6_SRCRT_TYPE_4; srh->rt_hdr.hdrlen = 2 * nr_segs; diff --git a/lib/netdev-native-tnl.h b/lib/netdev-native-tnl.h index 4dad8f978cc6..b06e7bbf2a72 100644 --- a/lib/netdev-native-tnl.h +++ b/lib/netdev-native-tnl.h @@ -118,7 +118,7 @@ netdev_tnl_ipv6_hdr(void *eth) void * netdev_tnl_ip_build_header(struct ovs_action_push_tnl *data, const struct netdev_tnl_build_header_params *params, - uint8_t next_proto); + uint8_t next_proto, uint32_t ipv6_label); extern uint16_t tnl_udp_port_min; extern uint16_t tnl_udp_port_max; From patchwork Tue May 9 03:45:30 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nobuhiro MIKI X-Patchwork-Id: 1778739 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=openvswitch.org (client-ip=2605:bc80:3010::133; helo=smtp2.osuosl.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver=) Authentication-Results: legolas.ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=yahoo-corp.jp header.i=@yahoo-corp.jp header.a=rsa-sha256 header.s=selector1 header.b=Yg3UmzTZ; dkim-atps=neutral Received: from smtp2.osuosl.org (smtp2.osuosl.org [IPv6:2605:bc80:3010::133]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-384) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4QFkbV6JSgz20fl for ; Tue, 9 May 2023 13:46:14 +1000 (AEST) Received: from localhost (localhost [127.0.0.1]) by smtp2.osuosl.org (Postfix) with ESMTP id 3D87541D1D; Tue, 9 May 2023 03:46:10 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp2.osuosl.org 3D87541D1D Authentication-Results: smtp2.osuosl.org; dkim=fail reason="signature verification failed" (1024-bit key, unprotected) header.d=yahoo-corp.jp header.i=@yahoo-corp.jp header.a=rsa-sha256 header.s=selector1 header.b=Yg3UmzTZ X-Virus-Scanned: amavisd-new at osuosl.org Received: from smtp2.osuosl.org ([127.0.0.1]) by localhost (smtp2.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id hJHsT42PUWbE; Tue, 9 May 2023 03:46:08 +0000 (UTC) Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [140.211.9.56]) by smtp2.osuosl.org (Postfix) with ESMTPS id 2C4A141DB5; Tue, 9 May 2023 03:46:07 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp2.osuosl.org 2C4A141DB5 Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id 5E8C7C0092; Tue, 9 May 2023 03:46:04 +0000 (UTC) X-Original-To: dev@openvswitch.org Delivered-To: ovs-dev@lists.linuxfoundation.org Received: from smtp1.osuosl.org (smtp1.osuosl.org [140.211.166.138]) by lists.linuxfoundation.org (Postfix) with ESMTP id 7BC8EC002A for ; Tue, 9 May 2023 03:46:01 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp1.osuosl.org (Postfix) with ESMTP id 2B53D8450C for ; Tue, 9 May 2023 03:46:01 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp1.osuosl.org 2B53D8450C Authentication-Results: smtp1.osuosl.org; dkim=pass (1024-bit key, unprotected) header.d=yahoo-corp.jp header.i=@yahoo-corp.jp header.a=rsa-sha256 header.s=selector1 header.b=Yg3UmzTZ X-Virus-Scanned: amavisd-new at osuosl.org Received: from smtp1.osuosl.org ([127.0.0.1]) by localhost (smtp1.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id iK94kYo-TZHx for ; Tue, 9 May 2023 03:45:58 +0000 (UTC) X-Greylist: from auto-whitelisted by SQLgrey-1.8.0 DKIM-Filter: OpenDKIM Filter v2.11.0 smtp1.osuosl.org 0875E84466 Received: from corp-ob08.yahoo-corp.jp (corp-ob08.yahoo-corp.jp [183.79.94.93]) by smtp1.osuosl.org (Postfix) with ESMTPS id 0875E84466 for ; Tue, 9 May 2023 03:45:57 +0000 (UTC) Received: from JPN01-OS0-obe.outbound.protection.outlook.com (mail-os0jpn01lp2107.outbound.protection.outlook.com [104.47.23.107]) by corp-ob08.yahoo-corp.jp (Postfix) with ESMTPS id 9EEFE19FB184 for ; Tue, 9 May 2023 12:45:55 +0900 (JST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Bu4h/sCh5ziEaIze3GwFV5laUyn4n0A8z/kwXSScyyUl74tyy/rAjRnP1Lj8NzuTk88tbuqzlgnR3zZGpxXKLLyaEFsW4CT2i335qcNTv8L9tacDzyUbpXDDlU1qyqSMCAW8+EewMqlY4PxwFjhvqauPZLOigQmgn5wWMegHnsFEMUESUfn8g1RNw8e7pQF7A/kmklv5BnJGk7ntuSl9esHusx4i2opeYLs/lBXngkKu7uPRp+SRFYLDpOJOUQBzGAinU95nWyyWpsQhP4xc7y5ped9A5TbVd6uIT6Zm4CTZQ9D+TrjMC9pijvhrID2zc3WVvcpnScv4/3YJtzQNWQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=fh5/qaR4ey/gjLej4t1Vtz4KeMSPGhm355x0VLQO7Hk=; b=PPSw4SOI8WvVZB40P4CYSYyKgWjsiTnqHBAqlb2rhGBJPMcfO3wsrIXfe97XHxS43qgR2LSayX6EJAYZfMJA7DYM0+QCUutLHB7Rs4i5XThWmSFipUx6IqBIiWlIQsU/iHN/IbdXTdI+YcB8TGzvy3Sr2+JZ/JtOL3aHOVr3X4IHsAJCakFLLHpJNNxALZP6IvhqDuqzwjjNVafGqxaVZySYAt4voHUzIzUrLdfREKGt0T+QsFBIFekP8ZOxYOoIj4DwwQr/4Pi1zNIINiheJgfF6yGGUrMgybaq+xDwkdTqaD00CFKi9SMZH1tsB9T3PqNH7j2LPIr5W5mOOJgdow== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=yahoo-corp.jp; dmarc=pass action=none header.from=yahoo-corp.jp; dkim=pass header.d=yahoo-corp.jp; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo-corp.jp; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=fh5/qaR4ey/gjLej4t1Vtz4KeMSPGhm355x0VLQO7Hk=; b=Yg3UmzTZcaF/WouazGjoitj/1q1kiAqVqHlPZbpJrUGe/Ljzory8Hz33rnOwtGVuJf1ZojKrtZ+xjLY4jplA4ZZTKp6WApRe3JJiTiwwofW+PKGZJi/bZe0etfbB+/FkIwyMgy5nUG8FpCA908ATiGyD9E8JqBYZTedQd5crB1w= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=yahoo-corp.jp; Received: from TY2PR01MB4107.jpnprd01.prod.outlook.com (2603:1096:404:d8::23) by TYCPR01MB10118.jpnprd01.prod.outlook.com (2603:1096:400:1ee::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6363.33; Tue, 9 May 2023 03:45:54 +0000 Received: from TY2PR01MB4107.jpnprd01.prod.outlook.com ([fe80::316c:fe30:7d04:4f2b]) by TY2PR01MB4107.jpnprd01.prod.outlook.com ([fe80::316c:fe30:7d04:4f2b%5]) with mapi id 15.20.6363.033; Tue, 9 May 2023 03:45:54 +0000 From: Nobuhiro MIKI To: dev@openvswitch.org Date: Tue, 9 May 2023 12:45:30 +0900 Message-Id: <20230509034530.35553-3-nmiki@yahoo-corp.jp> X-Mailer: git-send-email 2.38.1 In-Reply-To: <20230509034530.35553-1-nmiki@yahoo-corp.jp> References: <20230509034530.35553-1-nmiki@yahoo-corp.jp> X-ClientProxiedBy: TY2PR01CA0023.jpnprd01.prod.outlook.com (2603:1096:404:a::35) To TY2PR01MB4107.jpnprd01.prod.outlook.com (2603:1096:404:d8::23) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TY2PR01MB4107:EE_|TYCPR01MB10118:EE_ X-MS-Office365-Filtering-Correlation-Id: 1cc8e895-004e-471a-39e5-08db503fe40e X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: T5qqDgX5hqhy0aQLiOE1uiwsB1tdZevluG9JD8wXvy+lM8xMN6JN0VU8iy14p5JkM+qPKW1wOeVV0bT44mEjJuXvu5BrwRLcstm4sZCgzatbJOJLX7w2GEHyuPjVlMrPvWcsAFdDxvMvmYKsnqfITJTr4S68k7SMay17apnXbz1Alok2dhHn+MT1d8Iz+DdkXQBjT6lDg4Txge/c5gh5hVFpMZoJ+/oZrlaheZEBzYvNgPFNXZ5g6rsQhnn276X1QGuXtkqNl4i+MlnT6e5r9A/fzzIB+ng9SWHegSA3P5niztM/ULXp/wzYZsiYIOp9O9vq1mu7Nju7EEyzez/LEgmnWefFkpemcemUUJiKf1igdAbRZE3G9OZWBdku9qE1nc0RkeZrC3kpmVKzxENnD3adHNkX+M2NAgTPS+DAWLpBKQSA6R5L30w+Ui5lGkXcG/tFSU7CDtIjpvXI23kzSplbEYLZh2EsJIzlwzKyh83EEx6KDiBA04BCLgLDiNHpr6roejpD4QHQEmrj4dW4YraIw13cQVVPrTd6gdr/DpcBmKevsWxVL5HMfw3bY/6CORyYyl78kTHh0Ckrtph3hR1IFjn68pcPnIS60Q34zUs0uQXViJDoyFNIARPooEgz X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:TY2PR01MB4107.jpnprd01.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230028)(4636009)(136003)(396003)(346002)(376002)(366004)(39860400002)(451199021)(30864003)(2906002)(186003)(38350700002)(6512007)(26005)(6506007)(1076003)(36756003)(107886003)(38100700002)(83380400001)(2616005)(82960400001)(316002)(6486002)(6666004)(6916009)(41300700001)(66946007)(66556008)(66476007)(4326008)(966005)(86362001)(52116002)(478600001)(8676002)(8936002)(5660300002)(461764006); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: NAtGxt9e7qmOMSHATp/fE1jVzOJjtwQh7Bn5RqAVM/W4/W2WbYJN/PwvNO3ll857+OkIjsdaWlQQ5tFQ6/vnQ21SjfIBEGHGhKx5P6eOHaZ8bzT1CwanrxrcJhuFZORo4PQX4eBbJljJSJb0fC2vas3uGlqUZiJGltRyLQiuIl/c9FoKOiH5V9Vx1jJsRsF4FpcsCKTBhwR6YSPfkOO/SHhFJjk5cvBVVSsVBw3pvz8f/mSmDG9EQa2LrAzZQQGxBJlZkDclnDYzfwCMDbfDwhcQTzCk3BC6BLZj+DSNwrcDh35G2mzmDurH4NV5UiI/mAMV5gEaDrNavvOEvViV5F/tXKYcDfJjj3dzGh62NM9/YaTRvhmmNcds+W2CwPG/tKYp8Q1HSCup4G+QSiT8NzDU0rAWnvju+QuIYgGu1Bj+LSwTfkLiV5n5VxUvzmqTccFc+FKCRd72E6uaB8KvRkWaE8CIEV2TdN3QWpUV2sfXeZd1Wy2cDPvZjsd19toDG68Q4VyBBV2DEUAhyguPhrIrPqH3ivaHMRTZZ603NMOxUZ3OcO3xcgbG8a3YPhM+YU5c0c0FM35Xni1E/p9AL8igEkWZSRxW1PfVGjERSDcXCnceZODfUwNHySihL1UgYRXOC/BL8X07dWzorU2N+BKOWQHTVPYIvZsZvzoBioEhpLr1PIIdaSf0A/9/glUUB0XLMW7lxLhEUHtITcDRiOu7PEEPLTNbh7glJDLk9RZ+Dg7U6H4tc7MC5zjgvmJLVXe5eCj01nYAi3+qdRe2zothJGqEYgm8rAi03OdGTp+Tn+UqVnVrspwDVM6armD6usGlfw137LZb27oPt+xCdE/8FJd45dAqvRsYouNr4QqW/9WZKjzjMZbZGi/o1rj5JIHDKviiYibKFULchrDRXHbz7j7+2LJA6sie7l0/jhVxQ7mswarGE1B38/SxWBQZ6No+li3ysv/S+cUEqyG4q5no1D/21y1rxQ6sLNNV8vhc6dbwBA+g54smQ/RMYfepj+UY8/bR9wUGHwrrVad5E3z8sp5rcgCtg4h9QOMCenoGDeo/bKEmO95Zs3B3v4ofsgHwxow7uKtOUJiWnJjyzXrqzRQMpC2TwZDGOaHZnatHhe+c02vuqOt0g0AdUTlPWTny4UFfoKgkaPkWzIJtmX61AYqmdoeXtHAOBjoMwTTi/h0OJE3Uqj/K+0ZO1oSeON2WEXhD9XggbvSRPPcHABmnH8A/Qy5SQ7mNBfuB3V54JVm7DKsxUQLdW6wA1800LrRVG/ul9lyozZ890OyKigad4VrId4XplnOfQpJtVJiGDHCzYiHeInGWxNbfjNccp+gKy5HXwxuEVPF42/bvzlT/w45l21iW6JT48wSdIRGLG9cmopt5phDR30tig6TO4zQY3BwrbOjFTFRBrsujzR22w40ig+BxTgDFCxYG/9KYmcwC2ebBrCUKumOXLVk/AaMAdh9GKPDhnDGK9HyReXHddBXWJlRAlwiVJwzty8QuwaUtuxn4gfWYqTuKPnQPyy7jCxlkNK+qkI0xetsdyM5LiMCONGVMifF9h38fdg6tn1UYJGDq1uXLu5jBfXMB X-OriginatorOrg: yahoo-corp.jp X-MS-Exchange-CrossTenant-Network-Message-Id: 1cc8e895-004e-471a-39e5-08db503fe40e X-MS-Exchange-CrossTenant-AuthSource: TY2PR01MB4107.jpnprd01.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 May 2023 03:45:54.4731 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: a208d369-cd4e-4f87-b119-98eaf31df2c3 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: Wq0UuqA0xrq+tp45YzodLcm2W/DW0vr963chgDxZdQLsUjKbqBQmAZsGv6DvoByi8sce/dAlss6//iWgUc/VrA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYCPR01MB10118 Subject: [ovs-dev] [PATCH 2/2] userspace: Add new option srv6_flowlabel in SRv6 tunnel. X-BeenThere: ovs-dev@openvswitch.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: ovs-dev-bounces@openvswitch.org Sender: "dev" It supports flowlabel based load balancing by controlling the flowlabel of outer IPv6 header, which is already implemented in Linux kernel as seg6_flowlabel sysctl [1]. [1]: https://docs.kernel.org/networking/seg6-sysctl.html Signed-off-by: Nobuhiro MIKI --- lib/flow.c | 26 ++++++++++++ lib/flow.h | 1 + lib/netdev-native-tnl.c | 22 +++++++++- lib/netdev-vport.c | 8 ++++ lib/netdev.h | 12 ++++++ tests/tunnel-push-pop-ipv6.at | 79 +++++++++++++++++++++++++++++++++++ vswitchd/vswitch.xml | 29 +++++++++++++ 7 files changed, 176 insertions(+), 1 deletion(-) diff --git a/lib/flow.c b/lib/flow.c index 9501a259e9d4..f0bfe79b3265 100644 --- a/lib/flow.c +++ b/lib/flow.c @@ -2734,6 +2734,32 @@ flow_hash_in_wildcards(const struct flow *flow, return hash_finish(hash, 8 * FLOW_U64S); } +uint32_t +flow_hash_srv6_flowlabel(const struct flow *flow, uint32_t basis) +{ + uint32_t hash; + + if (flow->dl_type == htons(ETH_TYPE_IPV6)) { + const uint64_t *flow_u64 = (const uint64_t *) flow; + int ofs = offsetof(struct flow, ipv6_src) / 8; + int end = ofs + 2 * sizeof flow->ipv6_src / 8; + + hash = basis; + + for (;ofs < end; ofs++) { + hash = hash_add64(hash, flow_u64[ofs]); + } + + hash = hash_add(hash, flow->nw_proto); + hash = hash_add(hash, flow->ipv6_label); + } else if (flow->dl_type == htons(ETH_TYPE_IP) + || flow->dl_type == htons(ETH_TYPE_ARP)) { + hash = flow_hash_5tuple(flow, basis); + } + + return hash_finish(hash, 42) & IPV6_LABEL_MASK; /* Arbitrary number. */ +} + /* Sets the VLAN VID that 'flow' matches to 'vid', which is interpreted as an * OpenFlow 1.0 "dl_vlan" value: * diff --git a/lib/flow.h b/lib/flow.h index a9d026e1ce3b..7b8ef5164465 100644 --- a/lib/flow.h +++ b/lib/flow.h @@ -258,6 +258,7 @@ bool flow_hash_fields_valid(enum nx_hash_fields); uint32_t flow_hash_in_wildcards(const struct flow *, const struct flow_wildcards *, uint32_t basis); +uint32_t flow_hash_srv6_flowlabel(const struct flow *, uint32_t basis); bool flow_equal_except(const struct flow *a, const struct flow *b, const struct flow_wildcards *); diff --git a/lib/netdev-native-tnl.c b/lib/netdev-native-tnl.c index 55e1bd567fa1..18bd9df57175 100644 --- a/lib/netdev-native-tnl.c +++ b/lib/netdev-native-tnl.c @@ -856,6 +856,7 @@ netdev_srv6_build_header(const struct netdev *netdev, struct netdev_tunnel_config *tnl_cfg; const struct in6_addr *segs; struct srv6_base_hdr *srh; + uint32_t ipv6_label = 0; struct in6_addr *s; ovs_be16 dl_type; int err = 0; @@ -882,7 +883,26 @@ netdev_srv6_build_header(const struct netdev *netdev, goto out; } - srh = netdev_tnl_ip_build_header(data, params, IPPROTO_ROUTING, 0); + switch (tnl_cfg->srv6_flowlabel) { + case SRV6_FLOWLABEL_COPY: + ipv6_label = ntohl(params->flow->ipv6_label); + break; + + case SRV6_FLOWLABEL_ZERO: + ipv6_label = 0; + break; + + case SRV6_FLOWLABEL_COMPUTE: + ipv6_label = flow_hash_srv6_flowlabel(params->flow, 0); + break; + + default: + err = EINVAL; + goto out; + } + + srh = netdev_tnl_ip_build_header(data, params, IPPROTO_ROUTING, + ipv6_label); srh->rt_hdr.segments_left = nr_segs - 1; srh->rt_hdr.type = IPV6_SRCRT_TYPE_4; srh->rt_hdr.hdrlen = 2 * nr_segs; diff --git a/lib/netdev-vport.c b/lib/netdev-vport.c index 663ee8606c3b..2141621cf23e 100644 --- a/lib/netdev-vport.c +++ b/lib/netdev-vport.c @@ -792,6 +792,14 @@ set_tunnel_config(struct netdev *dev_, const struct smap *args, char **errp) name, node->value); break; } + } else if (!strcmp(node->key, "srv6_flowlabel")) { + if (!strcmp(node->value, "zero")) { + tnl_cfg.srv6_flowlabel = SRV6_FLOWLABEL_ZERO; + } else if (!strcmp(node->value, "compute")) { + tnl_cfg.srv6_flowlabel = SRV6_FLOWLABEL_COMPUTE; + } else { + tnl_cfg.srv6_flowlabel = SRV6_FLOWLABEL_COPY; + } } else if (!strcmp(node->key, "payload_type")) { if (!strcmp(node->value, "mpls")) { tnl_cfg.payload_ethertype = htons(ETH_TYPE_MPLS); diff --git a/lib/netdev.h b/lib/netdev.h index ff207f56c28c..743a56ca1629 100644 --- a/lib/netdev.h +++ b/lib/netdev.h @@ -97,6 +97,17 @@ enum netdev_pt_mode { NETDEV_PT_LEGACY_L3, }; +enum netdev_srv6_flowlabel { + /* Copy the flowlabel from inner packet. */ + SRV6_FLOWLABEL_COPY, + + /* Simply set flowlabel to 0. */ + SRV6_FLOWLABEL_ZERO, + + /* Calculate a hash for some fields and set the result to flowlabel. */ + SRV6_FLOWLABEL_COMPUTE, +}; + /* Configuration specific to tunnels. */ struct netdev_tunnel_config { ovs_be64 in_key; @@ -144,6 +155,7 @@ struct netdev_tunnel_config { uint8_t srv6_num_segs; #define SRV6_MAX_SEGS 6 struct in6_addr srv6_segs[SRV6_MAX_SEGS]; + enum netdev_srv6_flowlabel srv6_flowlabel; }; void netdev_run(void); diff --git a/tests/tunnel-push-pop-ipv6.at b/tests/tunnel-push-pop-ipv6.at index e300fe3a0d26..33edc8319eed 100644 --- a/tests/tunnel-push-pop-ipv6.at +++ b/tests/tunnel-push-pop-ipv6.at @@ -1,5 +1,84 @@ AT_BANNER([tunnel_push_pop_ipv6]) +AT_SETUP([tunnel_push_pop_ipv6 - srv6]) + +OVS_VSWITCHD_START([add-port br0 p0 -- set Interface p0 type=dummy ofport_request=1 other-config:hwaddr=aa:55:aa:55:00:00]) +AT_CHECK([ovs-vsctl add-br int-br1 -- set bridge int-br1 datapath_type=dummy], [0]) +AT_CHECK([ovs-vsctl add-br int-br2 -- set bridge int-br2 datapath_type=dummy], [0]) +AT_CHECK([ovs-vsctl add-br int-br3 -- set bridge int-br3 datapath_type=dummy], [0]) +AT_CHECK([ovs-vsctl add-port int-br1 t1 -- set Interface t1 type=srv6 \ + options:remote_ip=2001:cafe::91 ofport_request=2 \ + options:srv6_flowlabel=copy \ + ], [0]) +AT_CHECK([ovs-vsctl add-port int-br2 t2 -- set Interface t2 type=srv6 \ + options:remote_ip=2001:cafe::92 ofport_request=3 \ + options:srv6_flowlabel=zero \ + ], [0]) +AT_CHECK([ovs-vsctl add-port int-br3 t3 -- set Interface t3 type=srv6 \ + options:remote_ip=2001:cafe::93 ofport_request=4 \ + options:srv6_flowlabel=compute \ + ], [0]) + +dnl First setup dummy interface IP address, then add the route +dnl so that tnl-port table can get valid IP address for the device. +AT_CHECK([ovs-appctl netdev-dummy/ip6addr br0 2001:cafe::88/24], [0], [OK +]) +AT_CHECK([ovs-appctl ovs/route/add 2001:cafe::0/24 br0], [0], [OK +]) +AT_CHECK([ovs-appctl tnl/neigh/set br0 2001:cafe::91 aa:55:aa:55:00:01], [0], [OK +]) +AT_CHECK([ovs-appctl tnl/neigh/set br0 2001:cafe::92 aa:55:aa:55:00:02], [0], [OK +]) +AT_CHECK([ovs-appctl tnl/neigh/set br0 2001:cafe::93 aa:55:aa:55:00:03], [0], [OK +]) +AT_CHECK([ovs-ofctl add-flow br0 action=1]) +AT_CHECK([ovs-ofctl add-flow int-br1 action=2]) +AT_CHECK([ovs-ofctl add-flow int-br2 action=3]) +AT_CHECK([ovs-ofctl add-flow int-br3 action=4]) + +dnl Check "srv6_flowlabel=copy". +AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(2),eth(src=f8:bc:12:44:34:b6,dst=aa:55:aa:55:00:00),eth_type(0x86dd),ipv6(src=2001:beef::1,dst=2001:beef::2,label=12345,proto=47,tclass=0x0,hlimit=64)'], [0], [stdout]) +cat stdout +AT_CHECK([tail -1 stdout | grep -o 'label=[[0-9]]*'], [0], [dnl +label=12345 +]) + +dnl Check "srv6_flowlabel=zero". +AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(3),eth(src=f8:bc:12:44:34:b6,dst=aa:55:aa:55:00:00),eth_type(0x86dd),ipv6(src=2001:beef::1,dst=2001:beef::2,label=12345,proto=47,tclass=0x0,hlimit=64)'], [0], [stdout]) +AT_CHECK([tail -1 stdout | grep -o 'label=[[0-9]]*'], [0], [dnl +label=0 +]) + +dnl Check "srv6_flowlabel=compute" for IPv4 in IPv6 tunnels. +AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(4),eth(src=f8:bc:12:44:34:b6,dst=aa:55:aa:55:00:00),eth_type(0x0800),ipv4(src=1.1.3.88,dst=1.1.3.112,proto=6,tos=0,ttl=64,frag=no),tcp(src=8,dst=9)'], [0], [stdout]) +AT_CHECK([tail -1 stdout | grep -o 'label=[[0-9]]*'], [0], [dnl +label=944785 +]) + +AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(4),eth(src=f8:bc:12:44:34:b6,dst=aa:55:aa:55:00:00),eth_type(0x0800),ipv4(src=1.1.3.88,dst=1.1.3.112,proto=6,tos=0,ttl=64,frag=no),tcp(src=800,dst=900)'], [0], [stdout]) +AT_CHECK([tail -1 stdout | grep -o 'label=[[0-9]]*'], [0], [dnl +label=772289 +]) + +dnl Check "srv6_flowlabel=compute" for IPv6 in IPv6 tunnels. +AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(4),eth(src=f8:bc:12:44:34:b6,dst=aa:55:aa:55:00:00),eth_type(0x86dd),ipv6(src=2001:beef::1,dst=2001:beef::2,label=0,proto=47,tclass=0x0,hlimit=64)'], [0], [stdout]) +AT_CHECK([tail -1 stdout | grep -o 'label=[[0-9]]*'], [0], [dnl +label=468935 +]) + +AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(4),eth(src=f8:bc:12:44:34:b6,dst=aa:55:aa:55:00:00),eth_type(0x86dd),ipv6(src=2001:beef::1,dst=2001:beef::2,label=12345,proto=47,tclass=0x0,hlimit=64)'], [0], [stdout]) +AT_CHECK([tail -1 stdout | grep -o 'label=[[0-9]]*'], [0], [dnl +label=1012207 +]) + +AT_CHECK([ovs-appctl ofproto/trace ovs-dummy 'in_port(4),eth(src=f8:bc:12:44:34:b6,dst=aa:55:aa:55:00:00),eth_type(0x86dd),ipv6(src=2001:beef::1,dst=2001:beef::3,label=0,proto=47,tclass=0x0,hlimit=64)'], [0], [stdout]) +AT_CHECK([tail -1 stdout | grep -o 'label=[[0-9]]*'], [0], [dnl +label=629290 +]) + +OVS_VSWITCHD_STOP +AT_CLEANUP + AT_SETUP([tunnel_push_pop_ipv6 - ip6gre]) OVS_VSWITCHD_START([add-port br0 p0 -- set Interface p0 type=dummy ofport_request=1 other-config:hwaddr=aa:55:aa:55:00:00]) diff --git a/vswitchd/vswitch.xml b/vswitchd/vswitch.xml index edb5eafa04c3..7a0682503233 100644 --- a/vswitchd/vswitch.xml +++ b/vswitchd/vswitch.xml @@ -3287,6 +3287,35 @@ .

+ +

+ Optional. + This option controls how flowlabel in outer IPv6 header is + configured. This would give you the benefit of IPv6 flow label + based load balancing, which is supported by some popular vendor + appliances. You can choose from the following three types, as + in net.ipv6.seg6_flowlabel syscall. +

+
    +
  • + By default, or if this option is copy, copy the + flowlabel of inner IPv6 header to the flowlabel of outer IPv6 + header. If inner header is not IPv6, it is set to 0. +
  • +
  • + If this option is zero, simply set flowlabel to 0. +
  • +
  • + If this option is compute, calculate a hash for + some fields in inner header and set the result to flowlabel. + If inner packet is IPv6, src_ip, dst_ip, L4 proto, and + flowlabel are the targets of hash calculation. If it is IPv4, + src_ip, dst_ip, L4 proto, src_port, and dst_port are the targets. +
  • +
+