From patchwork Tue May 23 03:58:21 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nobuhiro MIKI X-Patchwork-Id: 1784799 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=140.211.166.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=WR1fjSFD; dkim-atps=neutral Received: from smtp4.osuosl.org (smtp4.osuosl.org [140.211.166.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 4QQLCr0rQrz20Pb for ; Tue, 23 May 2023 13:59:03 +1000 (AEST) Received: from localhost (localhost [127.0.0.1]) by smtp4.osuosl.org (Postfix) with ESMTP id 8666C417CC; Tue, 23 May 2023 03:59:00 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp4.osuosl.org 8666C417CC 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=WR1fjSFD 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 kLO5zMdStagc; Tue, 23 May 2023 03:58:59 +0000 (UTC) Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [140.211.9.56]) by smtp4.osuosl.org (Postfix) with ESMTPS id 07C5E41800; Tue, 23 May 2023 03:58:57 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp4.osuosl.org 07C5E41800 Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id 3AE12C0092; Tue, 23 May 2023 03:58:55 +0000 (UTC) X-Original-To: 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 AEC55C007C for ; Tue, 23 May 2023 03:58:53 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp3.osuosl.org (Postfix) with ESMTP id 5DB6660D88 for ; Tue, 23 May 2023 03:58:53 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp3.osuosl.org 5DB6660D88 Authentication-Results: smtp3.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=WR1fjSFD X-Virus-Scanned: amavisd-new at osuosl.org Received: from smtp3.osuosl.org ([127.0.0.1]) by localhost (smtp3.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id S23ETxCrQYbH for ; Tue, 23 May 2023 03:58:51 +0000 (UTC) X-Greylist: from auto-whitelisted by SQLgrey-1.8.0 DKIM-Filter: OpenDKIM Filter v2.11.0 smtp3.osuosl.org EF0B360AEC Received: from corp-ob08.yahoo-corp.jp (corp-ob08.yahoo-corp.jp [183.79.94.93]) by smtp3.osuosl.org (Postfix) with ESMTPS id EF0B360AEC for ; Tue, 23 May 2023 03:58:50 +0000 (UTC) Received: from JPN01-OS0-obe.outbound.protection.outlook.com (mail-os0jpn01lp2111.outbound.protection.outlook.com [104.47.23.111]) by corp-ob08.yahoo-corp.jp (Postfix) with ESMTPS id C574D19FB180 for ; Tue, 23 May 2023 12:58:48 +0900 (JST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=BTkvxpU+ggP5XsfjI2tn7YZKcB4f0gS8og1QLn9Gfk0YMlQBbaHmRutMysseUANELrx2dMlZ/tdb05WlQwkjBRZ5CJTogagaiDej5rlItOqDaeFbsVASXV61HtSjlA8ML98eWWKg078+bRTWLxVbiYZlvjS+OrYmwwjVcAqcYogRmZU+DQgFccZXFLEpCX3Ak8qQOCIe5VABDsWtuhVkX8TLvLEIRbuQmhazdmJvsp80avWdTXE0ZGV2xpqY0dJGdPT7dMrqeFmC3QfWqWdq7vErw5afmS98Zj0xXaf0SIUZPQe2a7fP1ZmASdaaTmCCe2A9Z4tVDW9xyF1YGCy4QQ== 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=Vi33oXrqcc4xqTncU1K1QqgBXlpa2EA++LYxvZkU5U8=; b=gpRa8YU5Bn141ZeSgq8caweI2ORAPtlOKBmQ8FxKX2jsVa9lj/xPXxZ/3ie3SU+n9Hcp+c+v1CffBdqmQUQU4r7VcXOraCuLabD2oAm81YWi4F3TJGXp0XTjaf7piP4IWHNB2D1/kwBf+9UQFE8umBPxBotAS1yd3yxdG3C3sDUgIgKNCV1SPeRhxy3bRcyEoHmGsTmJRX1MRqAIHWxwhPXGBeYF1ROrx2V93vrp8UBBFQv0+6Yg3mfWKLs8YYGhQRwdAjBRyynT7a/9ULVLZech3GZjEiW6JVYAKUZgQ/WIQXR6rGJLIv2zaVl57YSz6QMNUEM8ZyxGKHy6HuGvww== 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=Vi33oXrqcc4xqTncU1K1QqgBXlpa2EA++LYxvZkU5U8=; b=WR1fjSFD/+ykqC2PbZ38fLj+EdM6yOh/6dTQpuIxmYYFtZC5G963mo58IeIq9KOmwjxv77TO62PyR4LNaPICoOEgrKxqtgug4f21qKWULmae4R1AhP/2mTpKdPc6c9ktnXdZtj1793k7XojopWVgm/4Pt2vIlaiZQlTzuCp3Xq0= 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 TYCPR01MB8803.jpnprd01.prod.outlook.com (2603:1096:400:188::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6411.29; Tue, 23 May 2023 03:58:47 +0000 Received: from TY2PR01MB4107.jpnprd01.prod.outlook.com ([fe80::6e16:2bc5:f889:3826]) by TY2PR01MB4107.jpnprd01.prod.outlook.com ([fe80::6e16:2bc5:f889:3826%5]) with mapi id 15.20.6411.029; Tue, 23 May 2023 03:58:47 +0000 From: Nobuhiro MIKI To: dev@openvswitch.org Date: Tue, 23 May 2023 12:58:21 +0900 Message-Id: <20230523035823.32640-2-nmiki@yahoo-corp.jp> X-Mailer: git-send-email 2.38.1 In-Reply-To: <20230523035823.32640-1-nmiki@yahoo-corp.jp> References: <20230523035823.32640-1-nmiki@yahoo-corp.jp> X-ClientProxiedBy: TYCP301CA0008.JPNP301.PROD.OUTLOOK.COM (2603:1096:400:386::6) To TY2PR01MB4107.jpnprd01.prod.outlook.com (2603:1096:404:d8::23) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TY2PR01MB4107:EE_|TYCPR01MB8803:EE_ X-MS-Office365-Filtering-Correlation-Id: b757646d-bb7d-4562-41c6-08db5b4202ae X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: QJJ0irz3GdGnL7IZSEpJRck5pBq36hZtUmHacpUnuX+wO0ipvzVOociXw0MYOiaLXN1s51AJAysuep+J8mBkezcFZ/37G39130OXYCn/gKGAnW/hGdPO0oHBm9iGx06QWGFwgkQYt0FQyXrzlnVOdpD3G6FKZtm62qOXugW0OEJYKpcHQ5Br7tB/rQcVS/TN8Db+CEULkFX6TOgga9Z8it/mnThVyvCzbAjezELkf/oSvLIRhaUBxMuPWrH9561imfrd6ckdPAk+oMF1IxQCVIB1RZIiNcFlmFV0iziFvK7WFT1oAGf2bEG2aEqNrSop7snQlVcPdS9F+/ydHcm/GKzWknUTUakIuN/sVSABTt2/0cvhx6snGVsoBZnfY0vEwLP2kL6VYP0EBqRUR7GsugoHQ4oTe9wNhsNkhY020FO1JqX4U5KzwJMC3Y3kMWHU9zcOrN+xRk91zwVWpRWIJ117blSGGziDa/Xf5b4CKKIP8sg0XbUWl5tuGeFopsZbiiLR78CYWLIpwtTk69tLlYnJtNpvu2SIAl06IN5vtopyLPbNudnvYHrHu86ItMPpIEMTKRsyO9DUL48rlD0YxXkZ215TIaEp+ebSqONwLT0dhALD9wf4ZLOp24YHAO/2 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)(39860400002)(136003)(396003)(366004)(346002)(376002)(451199021)(5660300002)(8676002)(8936002)(86362001)(1076003)(2906002)(6506007)(26005)(6512007)(36756003)(83380400001)(2616005)(186003)(107886003)(4326008)(66946007)(66556008)(66476007)(6916009)(82960400001)(316002)(478600001)(38100700002)(38350700002)(41300700001)(52116002)(6486002)(6666004); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: zv4CUFniyAYv/fqgW+IkvFJoGTvmJuVhoih6UpsZX/irmbjLzbAk1/1kq7eOQzJLza/z8CAJ59l6SBWz8CA46cF2T0dPEOiBMvwwmmuk94Atutj4ERQidfsYi53O1Ow1393I8oKVfP0qjHsQL+uL8MFMpkKyQHV54CoqDN03PnGu9NEj8WQemYDn9j4pxqoZazaTciAmiqu4CI7e7KndarzVkqCTjDP9++IjJtASpDGLJbJefOpMA8FSv2Wn3H8QZ6f4RPeEeZyRA4VJlYNKtjOX+JfafEDBxw8rPSX+YbDGvrILavFGjeJtdLvuDb9lk4Hx8eOiiP6eaD3TsI9AzynoiHAPl500SAALFbZuTY/p24JNO+hi9waM5HpqX0uA1qZ1vyuf18bjgrPgKlu2SWlSiu7KdMvSCa83TApPC5gcJSi+XDJ2HcfKa8zXlN0NB+g/VTdFtPQ4R4hgA8LuhtCULkys4iJUGKbrU3oOuosMXaWidRfD/2D+bklh1ZknC0XhZ4D8FM0mWH9h1qnT0XdrITC2lTUyywq/i8DSxaZZy8ENaAgo8UNYrFV0l3aW2HdB5q08ww8gqTbUl77LB519Hlct2boCBh/555QooBCU16Oz2aEQ6GWeMKCp1QY5o/dSj9jJW7WpRu0tDoIrLXt+PSdKKzGN8WhvNilhqFmhkCwWhSXiNtlCPh025unCyed0zRtbhgVmi6JltkSDKtG824xOM+n520fXSTtfn38LhoKa7C+Z+4Lc0HMEpIUcpd+h+fDTPXGNPrTkrn+cd+z3283+Fl8MeirYf/Aw+NcdYDJuBwBXC8UFt7+HTUzGl7MqI1PRBuMF78gM6AZs60ggIZzjinqDlWUMVvEi4QJi2PZt+Ggzst4Y18FUyFVR9uEr3NTnjQhRHlU99VNQ50aqJivnJ2EsFf7s8fFB84RFJWhzjYdv/cLp6CJeiSIwTJKnsnn+Yzh8dDx7/VPu+3ercZr6a9xj/O1koaVni1hIUkc3C9a6AAKvW4tVrXJQxpA4KyFY1w3g0SPo9zacfl3/MTHp2Pu9KFh5ezQTsx6PNEaSzPHccNwbDZ5QKOtIgJDHnTGl1Ju6UWdubRCmmWAPiHtHZTGAWluHjDmUkK5XhLJmd543Fwv5n5SFTuJsm34zYzD0My4krHhUNaASVevXslvmba+33vLSEE8Z87XcnH8JMAC898MAaYL5odYz6Lj4hRMsTfPoyGhajYSpgB9gEeNHeiElLs6BUg68YIBAuKNQERyFlCHJA4xi1DAxYzuHDmtOnoHihSXOWs//6PER+dhZ9WXEHwmFJ++QIbQkeh3a850UiOzU/7MF7QihmNoJPdUzeaa7hv1j3YAQN2cSm76MLLtW4T3eW9fMLY+XLg724Kc0YINbQ6X5lZb94DRWuN834i7oBdT01/AVTfhvB1WFBU9UNO1jNcBwkl7inaemrDICgTqAlExMrwbGcYbjhg0CPptIXfTXS9I0I5G7HSjYDlVTm1Q4xpjlAkN/23E/G41u6+mUFt7S5hF587RveZET1qZq68JDIPDAnZkGc/CpAjIinmVA6Y3ppd7KMIdcxuLXqJVLtqfGqhby X-OriginatorOrg: yahoo-corp.jp X-MS-Exchange-CrossTenant-Network-Message-Id: b757646d-bb7d-4562-41c6-08db5b4202ae X-MS-Exchange-CrossTenant-AuthSource: TY2PR01MB4107.jpnprd01.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 May 2023 03:58:47.5641 (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: pVOzQBPqQVWd9EHLrpHVWl5NPIJBB9fghQmRMO0YR/KSQk0NvY7mlkUoJAE2FznH05lcr2bWbOzcTgJdzm9B0g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYCPR01MB8803 Subject: [ovs-dev] [PATCH v5 1/3] netdev-native-tnl: Add ipv6_label param in netdev_tnl_push_ip_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 | 23 +++++++++++++---------- lib/netdev-native-tnl.h | 4 ++-- lib/packets.c | 2 +- lib/packets.h | 2 ++ 4 files changed, 18 insertions(+), 13 deletions(-) diff --git a/lib/netdev-native-tnl.c b/lib/netdev-native-tnl.c index 9abdf51076a8..db1c4c6d9bfc 100644 --- a/lib/netdev-native-tnl.c +++ b/lib/netdev-native-tnl.c @@ -146,8 +146,8 @@ netdev_tnl_ip_extract_tnl_md(struct dp_packet *packet, struct flow_tnl *tnl, * * Return pointer to the L4 header added to 'packet'. */ void * -netdev_tnl_push_ip_header(struct dp_packet *packet, - const void *header, int size, int *ip_tot_size) +netdev_tnl_push_ip_header(struct dp_packet *packet, const void *header, + int size, int *ip_tot_size, ovs_be32 ipv6_label) { struct eth_header *eth; struct ip_header *ip; @@ -166,6 +166,7 @@ netdev_tnl_push_ip_header(struct dp_packet *packet, ip6 = netdev_tnl_ipv6_hdr(eth); *ip_tot_size -= IPV6_HEADER_LEN; ip6->ip6_plen = htons(*ip_tot_size); + packet_set_ipv6_flow_label(&ip6->ip6_flow, ipv6_label); packet->l4_ofs = dp_packet_size(packet) - *ip_tot_size; return ip6 + 1; } else { @@ -245,7 +246,8 @@ netdev_tnl_push_udp_header(const struct netdev *netdev OVS_UNUSED, struct udp_header *udp; int ip_tot_size; - udp = netdev_tnl_push_ip_header(packet, data->header, data->header_len, &ip_tot_size); + udp = netdev_tnl_push_ip_header(packet, data->header, data->header_len, + &ip_tot_size, 0); /* set udp src port */ udp->udp_src = netdev_tnl_get_src_port(packet); @@ -456,7 +458,8 @@ netdev_gre_push_header(const struct netdev *netdev, struct gre_base_hdr *greh; int ip_tot_size; - greh = netdev_tnl_push_ip_header(packet, data->header, data->header_len, &ip_tot_size); + greh = netdev_tnl_push_ip_header(packet, data->header, data->header_len, + &ip_tot_size, 0); if (greh->flags & htons(GRE_CSUM)) { ovs_be16 *csum_opt = (ovs_be16 *) (greh + 1); @@ -611,8 +614,8 @@ netdev_erspan_push_header(const struct netdev *netdev, struct erspan_md2 *md2; int ip_tot_size; - greh = netdev_tnl_push_ip_header(packet, data->header, - data->header_len, &ip_tot_size); + greh = netdev_tnl_push_ip_header(packet, data->header, data->header_len, + &ip_tot_size, 0); /* update GRE seqno */ tnl_cfg = &dev->tnl_cfg; @@ -793,8 +796,8 @@ netdev_gtpu_push_header(const struct netdev *netdev, unsigned int payload_len; payload_len = dp_packet_size(packet); - udp = netdev_tnl_push_ip_header(packet, data->header, - data->header_len, &ip_tot_size); + udp = netdev_tnl_push_ip_header(packet, data->header, data->header_len, + &ip_tot_size, 0); udp->udp_src = netdev_tnl_get_src_port(packet); udp->udp_len = htons(ip_tot_size); netdev_tnl_calc_udp_csum(udp, packet, ip_tot_size); @@ -921,8 +924,8 @@ netdev_srv6_push_header(const struct netdev *netdev OVS_UNUSED, { int ip_tot_size; - netdev_tnl_push_ip_header(packet, data->header, - data->header_len, &ip_tot_size); + netdev_tnl_push_ip_header(packet, data->header, data->header_len, + &ip_tot_size, 0); } struct dp_packet * diff --git a/lib/netdev-native-tnl.h b/lib/netdev-native-tnl.h index 4dad8f978cc6..3311d796ed85 100644 --- a/lib/netdev-native-tnl.h +++ b/lib/netdev-native-tnl.h @@ -138,8 +138,8 @@ void * netdev_tnl_ip_extract_tnl_md(struct dp_packet *packet, struct flow_tnl *tnl, unsigned int *hlen); void * -netdev_tnl_push_ip_header(struct dp_packet *packet, - const void *header, int size, int *ip_tot_size); +netdev_tnl_push_ip_header(struct dp_packet *packet, const void *header, + int size, int *ip_tot_size, ovs_be32 ipv6_label); void netdev_tnl_egress_port_range(struct unixctl_conn *conn, int argc, const char *argv[], void *aux OVS_UNUSED); diff --git a/lib/packets.c b/lib/packets.c index 06f516cb1af4..7e5a52fd40ed 100644 --- a/lib/packets.c +++ b/lib/packets.c @@ -1274,7 +1274,7 @@ packet_set_ipv6_addr(struct dp_packet *packet, uint8_t proto, pkt_metadata_init_conn(&packet->md); } -static void +void packet_set_ipv6_flow_label(ovs_16aligned_be32 *flow_label, ovs_be32 flow_key) { ovs_be32 old_label = get_16aligned_be32(flow_label); diff --git a/lib/packets.h b/lib/packets.h index 9465bec16c9c..ac4c28e471e6 100644 --- a/lib/packets.h +++ b/lib/packets.h @@ -1622,6 +1622,8 @@ void packet_set_ipv6_addr(struct dp_packet *packet, uint8_t proto, ovs_16aligned_be32 addr[4], const struct in6_addr *new_addr, bool recalculate_csum); +void packet_set_ipv6_flow_label(ovs_16aligned_be32 *flow_label, + ovs_be32 flow_key); void packet_set_tcp_port(struct dp_packet *, ovs_be16 src, ovs_be16 dst); void packet_set_udp_port(struct dp_packet *, ovs_be16 src, ovs_be16 dst); void packet_set_sctp_port(struct dp_packet *, ovs_be16 src, ovs_be16 dst); From patchwork Tue May 23 03:58:22 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nobuhiro MIKI X-Patchwork-Id: 1784798 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::136; helo=smtp3.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=mhQMdsL9; dkim-atps=neutral Received: from smtp3.osuosl.org (smtp3.osuosl.org [IPv6:2605:bc80:3010::136]) (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 4QQLCn49RGz20Q6 for ; Tue, 23 May 2023 13:59:01 +1000 (AEST) Received: from localhost (localhost [127.0.0.1]) by smtp3.osuosl.org (Postfix) with ESMTP id A36D3611BA; Tue, 23 May 2023 03:58:58 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp3.osuosl.org A36D3611BA Authentication-Results: smtp3.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=mhQMdsL9 X-Virus-Scanned: amavisd-new at osuosl.org Received: from smtp3.osuosl.org ([127.0.0.1]) by localhost (smtp3.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id uVzTXWodJD4b; Tue, 23 May 2023 03:58:57 +0000 (UTC) Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [IPv6:2605:bc80:3010:104::8cd3:938]) by smtp3.osuosl.org (Postfix) with ESMTPS id 9F43960F51; Tue, 23 May 2023 03:58:56 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp3.osuosl.org 9F43960F51 Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id 7F54EC008F; Tue, 23 May 2023 03:58:54 +0000 (UTC) X-Original-To: dev@openvswitch.org Delivered-To: ovs-dev@lists.linuxfoundation.org Received: from smtp4.osuosl.org (smtp4.osuosl.org [140.211.166.137]) by lists.linuxfoundation.org (Postfix) with ESMTP id 2E24EC002A for ; Tue, 23 May 2023 03:58:52 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp4.osuosl.org (Postfix) with ESMTP id EDD67416D8 for ; Tue, 23 May 2023 03:58:51 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp4.osuosl.org EDD67416D8 Authentication-Results: smtp4.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=mhQMdsL9 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 VOGQZvC-MOPb for ; Tue, 23 May 2023 03:58:51 +0000 (UTC) X-Greylist: from auto-whitelisted by SQLgrey-1.8.0 DKIM-Filter: OpenDKIM Filter v2.11.0 smtp4.osuosl.org B69E541688 Received: from corp-ob07.yahoo-corp.jp (corp-ob07.yahoo-corp.jp [183.79.94.94]) by smtp4.osuosl.org (Postfix) with ESMTPS id B69E541688 for ; Tue, 23 May 2023 03:58:50 +0000 (UTC) Received: from JPN01-OS0-obe.outbound.protection.outlook.com (mail-os0jpn01lp2106.outbound.protection.outlook.com [104.47.23.106]) by corp-ob07.yahoo-corp.jp (Postfix) with ESMTPS id 3401919FB181 for ; Tue, 23 May 2023 12:58:49 +0900 (JST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=YEtevoRNncbDrgCIqxHnzJsEjtYZif1koZk1ekqCoPdTolfvhzQ9ef/ftf9UKo8hWhJhh6+8Ar3yFWaNE9WoePKyG0Oiz9BpfBrL3PwvjS8210GHgRFVM/HzhNwRk3NpLshbu/WP1MBl0lmI6Pu/VaH/4tCKjLzWEP6Q76Ct6E76aS0j0QfWg7WM3V1SZK0mP1kMoiPlWSzxO/eqVuPcGnahNkD9wpOVuuXapxYttMtkGnLBZ2h2X8vzyRNVhzFvpaqXLMRc6zXU6vRU1Q/nJiAwHS8YPzeLUO77wrdqqyXmTcnoN3WnA8bjsA8npY8lbM/4sOKd8SHrUONeRGJagQ== 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=QlbyAquFqUPGL1iK8AqhvVHBEiC54ZNP8/qBS8tUuso=; b=m4fCkOGwSPPGpFzpqr62cMNDOqRo1gN/j4jAcyS1Cb5i1pr3dknAU11grwb4zy4pH7d+KM7Eq/CK0KToJarwupzr5iUT7nPN4Dk6h+LlT/Ogpl0eDLTJfM9JYhU1zE7kl2/qkwxn1nPrLF6outzAzS9Twscf2Y+aoQV75OFY6v/+9AdAMmJvAfFg28YeD3WX3QSWeX+m00SfsS6QhWVxCX8m1M1oAq+vF7ZeShunD71M4O9Ug7oTs6/f28WYJGjZt64lidKWs8/6YnDXZoqD8q3M/BwolpKpxG7qbxyjwFqDCojeeZ6/AJISwPDY2Khlp0mRHBtIWbG4u79cNoKmOw== 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=QlbyAquFqUPGL1iK8AqhvVHBEiC54ZNP8/qBS8tUuso=; b=mhQMdsL93Yc5+hVyaTWFWfkV5W50yfTvM8De91sgqCnxONu8hJ2gqa+cKaMbeDZX4EMyOTAKtcKBldJn3DYVy651rxzShkV/o1bUoiUGXDarj2nanAG67CYlGoUtMkpgrBu0Y7xwAwvkWrmu6mbKCRLmB99pJoktezxNVNZQE2U= 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 TYCPR01MB8803.jpnprd01.prod.outlook.com (2603:1096:400:188::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6411.29; Tue, 23 May 2023 03:58:48 +0000 Received: from TY2PR01MB4107.jpnprd01.prod.outlook.com ([fe80::6e16:2bc5:f889:3826]) by TY2PR01MB4107.jpnprd01.prod.outlook.com ([fe80::6e16:2bc5:f889:3826%5]) with mapi id 15.20.6411.029; Tue, 23 May 2023 03:58:48 +0000 From: Nobuhiro MIKI To: dev@openvswitch.org Date: Tue, 23 May 2023 12:58:22 +0900 Message-Id: <20230523035823.32640-3-nmiki@yahoo-corp.jp> X-Mailer: git-send-email 2.38.1 In-Reply-To: <20230523035823.32640-1-nmiki@yahoo-corp.jp> References: <20230523035823.32640-1-nmiki@yahoo-corp.jp> X-ClientProxiedBy: TYCP301CA0008.JPNP301.PROD.OUTLOOK.COM (2603:1096:400:386::6) To TY2PR01MB4107.jpnprd01.prod.outlook.com (2603:1096:404:d8::23) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TY2PR01MB4107:EE_|TYCPR01MB8803:EE_ X-MS-Office365-Filtering-Correlation-Id: a6cf41bb-fc4b-49d4-2b5a-08db5b4202d9 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: WpbKu7xRwv372ukHHGTtDTWt/BQrsxkOq0NpA5wAn8YrMy5BvYqifgS0Lg7W1mHsgPGh3EKpvXu0b8R9x/Dg5yupnBhGXTx3GWMBpcQLU74Zn/OI47v3umMvcGCdx/19ur9TKwyd8XQSVOJ6Md0pEbpYZPiRxzZu3tiPubfUh0wWyRASwChtdYx9RzJYsF8IamsFAI0Hz3Iw1j6pHU3sO6fqdQBZJEGmmxygACf5HxeTuCWIu7viXxDMUh1DYwQi1VRUdVpqypjVmIocC9LsZ9xC8IbHWxWNMPlQF+eeqnCeBkXWvuLTGYRwP7eELaFDCSBY/RqHL0gYEFn58f0OnPlkbrdrV6mtZLglbrVUTtaRlj121fAxfiAuR9ip0Nj4sK38jQijOWcjS51DaJ7cHg75hqOe1RK6s493absAxbvZHoQljpRXEIYepi6dzeSp0qa7jkpXsCyHlU2DYYCSI5w12mqAyFz0PnEK5sGIwrcQdRr4qGcHL+K328E50M/7NEfVP52o9ssCO3gxo2Ei45XN1DCwOuzcWzcYRCJHpd7x4wk6T/y0kRXv5YckD3WE/xgNAwF4GWMtGNpkwI1mD1P/HuA0Cvzx9ZrNAxtMO0plyu//mFJ+XmTK/XzJDzbxlLDrt8oZmSHisVz77R800w== 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)(39860400002)(136003)(396003)(366004)(346002)(376002)(451199021)(5660300002)(8676002)(8936002)(86362001)(1076003)(2906002)(6506007)(26005)(6512007)(36756003)(83380400001)(2616005)(186003)(107886003)(4326008)(66946007)(66556008)(66476007)(6916009)(82960400001)(316002)(478600001)(38100700002)(38350700002)(41300700001)(52116002)(6486002)(6666004)(21314003); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 78uPYzuxniLnoeCRPK1GGkld2CbRwVKXkAqKlk21v1DZJ3+EJAKG3BzjykVqiAYdtdvemfywxcZX3m9mcYBmTmJa/INNABt6n3RyVHu+NtbBh+92IbCdjZHywpMY7EVxyISuFrmzVkQAbIZR9K1OGMaytUQeGIJ7hEF8S4OOOeHdhqneiC6dVGem8iAp9K8CRAszmxYMAWrGya3DBd2dfBUyolmEYkPMr4LxmI8N/uKWBlRAvtQ8CllPkC7utLKBOu6rnUgIgC6+3qvDM80EFDr0wFHemByDmb/CIemx0YW6u0GCxhCYcPlZEVDqvB1+y9NxUpCLUpDgCGjawiPytnKd7DjPtvC1jgz9yZPXE/vIybABesM4YN2QWs/OJhD7mkD5oMeTDiHP9lpQBEtDHvErze6omllzj+nESpXJ+/gqQ2tKRDmvPtevmhdL2C+YtTFKwo7aPeAmQlrBfHV2x7sFsMpQ6LMne1iAnq0+skkK8Ueeo2HfqTv6xieH+b/2KnY1ZV4QvQnm8vWq2gYdqP4RhaTUTqiKJoqdlsNzdF191RAuWpauZvWlmU2tEx4qmrtVMqBy3+D0F9TkG4Noq9IKDOvtfLFIpmHoqEorVMigUXwpsDQXsDeZ8QWWFbC5LByBk1YtT34oVgqwy3vWjPT3+95ALnybusMHaOMWIjc1oLoPoESfKx9G9sgSBGiRp0rl2UW8I5c71dyRrG7m+bu1ACBCoycpvLg889Tf2jSQpQ0rFj0w68oNoCj9h/E4O9fW2KcxHTzZI6chpoy7BcogzIjhBhWisOB0hna8QCzoOO28CC8Jbu+RvCD3xTC8eIIu4F3PoZEgaasLif5EM6RofXzfTtl4gA6yoecFGwPC2/H5pHTg/Lo7ql+WXP0lTNgLGuMJioLiCwneNlqI/gjOrX4Ygx/yQxt8woV9Nw3P+96o3N5MrjRmGHyWhbX3a0r9jOZsqBVSe+AXByrgxtBgj8XeqEKfCwMW44tK4taWqW8AILMIgoAtzFrLbBMX2faF/sNpgjWVgzljQRgAFyqclKRA461kRPQEMpzz7ggHgYq2Tntum075DXiiDV17RXFNcaO8dhDlz5pAzyGPMPAYtkWb9mTjgBNL54tYDEXwvjYkqk7BS1ERjQTtI6TE8tKgJHLKJqg1SB7MV1jxyRwQ3NsmdKai6hYzyjTswOZRBGlPpQTfQZzmeCYgRCCbuDTIW5ahg9q4rSzsoYi3BnI/pXSOnkh8RCs3OLC1KMWe/TdGQA8W4yDNthZHAuCWO0phNWp1XgSM0O0KktUxDIU0BZWVcmr5dRkM+eTqFdz9BtveAkEaamEKJB4DfR2XK1FQF7nnSrckwxYpD3pRs1OE2xe+nQlHqSl4HnNKDux7zpb1hD96wCxsp1+p/hD4uYP6CC9T3CSg09tsB0vTNwITDCqUXQal4oc6YnrOFQq7B/IKo/JH7QsS4PueFqlzriQlOfA8lEiJ0ArvE3pOB0YVYTWxv6JD7+mGkI//cxkShw66R9eHMAPM3kvtCZT90/aEP+jBLxWdt561CT8/02ttaSLxOCsWITkeAb9OisephcZLCoJfMzaDznrwVWZF X-OriginatorOrg: yahoo-corp.jp X-MS-Exchange-CrossTenant-Network-Message-Id: a6cf41bb-fc4b-49d4-2b5a-08db5b4202d9 X-MS-Exchange-CrossTenant-AuthSource: TY2PR01MB4107.jpnprd01.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 May 2023 03:58:47.8603 (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: 94BXgK+C2LWdEcaNb/ZxjK4TZAXlYIPyQ1QzRg4/NcQcxyPuQ2cvtWfxhQCaGQ61IIzp5WXLfiIuwFxeCGtnZA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYCPR01MB8803 Subject: [ovs-dev] [PATCH v5 2/3] 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 | 13 +++++++------ lib/netdev-native-tnl.h | 2 +- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/lib/netdev-native-tnl.c b/lib/netdev-native-tnl.c index db1c4c6d9bfc..b244e73eb9cb 100644 --- a/lib/netdev-native-tnl.c +++ b/lib/netdev-native-tnl.c @@ -278,7 +278,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, ovs_be32 ipv6_label) { void *l3; @@ -310,7 +310,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) | + (ipv6_label & htonl(IPV6_LABEL_MASK))); ip6->ip6_hlim = params->flow->tunnel.ip_ttl; ip6->ip6_nxt = next_proto; memcpy(&ip6->ip6_src, params->s_ip, sizeof(ovs_be32[4])); @@ -328,7 +329,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) { @@ -491,7 +492,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); @@ -647,7 +648,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)); @@ -883,7 +884,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 3311d796ed85..eb55dd0417a8 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, ovs_be32 ipv6_label); extern uint16_t tnl_udp_port_min; extern uint16_t tnl_udp_port_max; From patchwork Tue May 23 03:58:23 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nobuhiro MIKI X-Patchwork-Id: 1784800 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::138; helo=smtp1.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=Q9+jfvVU; dkim-atps=neutral Received: from smtp1.osuosl.org (smtp1.osuosl.org [IPv6:2605:bc80:3010::138]) (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 4QQLCs4Tfhz20Pb for ; Tue, 23 May 2023 13:59:05 +1000 (AEST) Received: from localhost (localhost [127.0.0.1]) by smtp1.osuosl.org (Postfix) with ESMTP id 2A3C083542; Tue, 23 May 2023 03:59:03 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp1.osuosl.org 2A3C083542 Authentication-Results: smtp1.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=Q9+jfvVU 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 boJfadOoGTbb; Tue, 23 May 2023 03:59:01 +0000 (UTC) Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [IPv6:2605:bc80:3010:104::8cd3:938]) by smtp1.osuosl.org (Postfix) with ESMTPS id 107E882F13; Tue, 23 May 2023 03:59:00 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp1.osuosl.org 107E882F13 Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id 6E6BFC009C; Tue, 23 May 2023 03:58:56 +0000 (UTC) X-Original-To: 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 460A5C002A for ; Tue, 23 May 2023 03:58:54 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp3.osuosl.org (Postfix) with ESMTP id 12B7B60D88 for ; Tue, 23 May 2023 03:58:54 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp3.osuosl.org 12B7B60D88 Authentication-Results: smtp3.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=Q9+jfvVU X-Virus-Scanned: amavisd-new at osuosl.org Received: from smtp3.osuosl.org ([127.0.0.1]) by localhost (smtp3.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id XjY9smuixwfP for ; Tue, 23 May 2023 03:58:52 +0000 (UTC) X-Greylist: from auto-whitelisted by SQLgrey-1.8.0 DKIM-Filter: OpenDKIM Filter v2.11.0 smtp3.osuosl.org 9F88560774 Received: from corp-ob08.yahoo-corp.jp (corp-ob08.yahoo-corp.jp [183.79.94.93]) by smtp3.osuosl.org (Postfix) with ESMTPS id 9F88560774 for ; Tue, 23 May 2023 03:58:51 +0000 (UTC) Received: from JPN01-OS0-obe.outbound.protection.outlook.com (mail-os0jpn01lp2111.outbound.protection.outlook.com [104.47.23.111]) by corp-ob08.yahoo-corp.jp (Postfix) with ESMTPS id 947EA19FB185 for ; Tue, 23 May 2023 12:58:49 +0900 (JST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=lwoyStY9/+cB+iouPW+F622HVgZrtf24bf+Yrg+CEaJ0ZuWTWhnKcEQAFdjbY6xNnt6rfaOoOD5oTUs1k8aQkaAMWPvsEw6hD8mjyeY0535STawortKrLpbTdaYovAqsgRey9otnRsy9W9Lu4BxzPzWwNuAulByPRKQ61kSrjlNiubmN5/r9szd24zsGHZ5rCgSXo8/2xhQ6LnET/LL83XLYOwucLOVSOgC/N7D1ZVmPlUuH6Q86PhTbncGmIbxqfgK6VuXd//qFN1MjVuFNvn2i7QDwE8GfQz9EBxhieqSdnV2uoi1UL67tvV+D9N/rv5L4J2sk+lzz5uu6EVKIKQ== 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=A5e+7tdUVhp6buLUnIMjVDztw8FfdondOSgC3JKyFm4=; b=g4wWhbpvSTAXOIUX5ffhdo+aS0txqsyW0YD0snjT20D8WtLkpjPqrjGOk4+ErEytsVaQtBpNG2IwCoA7E+Cnhu7lEiyIP/zfjsFLq8gjeJOIoCbi5wJFlrgMxI/LILftQnWc+Bs5gyITR+/y8KQHicgCC1y/36d+kp3If+Lps2vS+Sj4c8DAU4k7PqOi2xRQyqPynlaDrutsXhYSUONxqkqHIDzARSNqZZCuNxLehxpjQfZ0COCTUrriomhNwl+a+cey9MmG8XeFRyxA7KsApO3dRDrX/eu6ERrtFIW0jalqnSx34pfvFePH0jnIToE3Gkn5ak7Fvj8v+PK5sYZSNQ== 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=A5e+7tdUVhp6buLUnIMjVDztw8FfdondOSgC3JKyFm4=; b=Q9+jfvVU3UjPbdfP0ntrSx+eCSrdze6IDVVBc7WQ9qGXgUZyzGewJH940yi7RwyWjLgVuXI/9PWgRNBRpj3sH6ii6ebiWPsVynBJ61dOff2eduqm7ok7BDmV/xUTJWLcZwWsNZnnzg3Swuhs6odri/OmeDLvhka+u2S0/LnzfUI= 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 TYCPR01MB8803.jpnprd01.prod.outlook.com (2603:1096:400:188::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6411.29; Tue, 23 May 2023 03:58:48 +0000 Received: from TY2PR01MB4107.jpnprd01.prod.outlook.com ([fe80::6e16:2bc5:f889:3826]) by TY2PR01MB4107.jpnprd01.prod.outlook.com ([fe80::6e16:2bc5:f889:3826%5]) with mapi id 15.20.6411.029; Tue, 23 May 2023 03:58:48 +0000 From: Nobuhiro MIKI To: dev@openvswitch.org Date: Tue, 23 May 2023 12:58:23 +0900 Message-Id: <20230523035823.32640-4-nmiki@yahoo-corp.jp> X-Mailer: git-send-email 2.38.1 In-Reply-To: <20230523035823.32640-1-nmiki@yahoo-corp.jp> References: <20230523035823.32640-1-nmiki@yahoo-corp.jp> X-ClientProxiedBy: TYCP301CA0008.JPNP301.PROD.OUTLOOK.COM (2603:1096:400:386::6) To TY2PR01MB4107.jpnprd01.prod.outlook.com (2603:1096:404:d8::23) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TY2PR01MB4107:EE_|TYCPR01MB8803:EE_ X-MS-Office365-Filtering-Correlation-Id: a9cc824c-0fac-47be-d997-08db5b420308 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: JVMhALtxs3ptw1xJjYXmYE6fQqqvLuAp5+230rFMeiMG0fl8HqHfhxmkvOLo6vBn83yJEUtVoYdvSwmj8677RT43hxpLNSHR0lqsldaF9lNVGG70Gdrz2DD0aygiyvC0xUhmPQOaesr3MXVqF7gO60kck8VLs7FliXnR1ScGm/xQm7PmwqHezT4/B4d0cfjmxP4caVlCr2WlMTmkp6wEBSZ104JLm7Dsr9jNwU57myiVX0nmxiPeE/Th8oz74itPfuYJDNd/Pqkx/YqYvNGb2VB4LYYVi0GaSuCi1AQDHgV06tt1Yt9Buj71leJQwoRGXrhkfO02s3rENyLKZLvSK6piQU40VszL/HZFRmd2QJ0T7mA97fpobMlLujW3ymw/Xg2otHIaDJ5fpOiV8F0EpRxrowm0Y8PsedRoZLDc+5OOpl90PUBfsYXGVKYRfCmWYLcN6KTjMuXMcPknqwzoRnjmvY+qR9a1iT9LMw5VzlEHG2ML6bqfio0sWr+aTcpqWy+9FjDbZbuLmz9M4CfEx3OqJuqD166WIiMgH2xaqPgZ9HhsxWD7hCw6IzD8CJuJ+vdM+0gh575757NrbZC/p9B5zAy1ELIz9J8yE1jq5RU= 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)(39860400002)(136003)(396003)(366004)(346002)(376002)(451199021)(5660300002)(8676002)(8936002)(966005)(86362001)(1076003)(2906002)(6506007)(26005)(6512007)(36756003)(83380400001)(2616005)(186003)(30864003)(107886003)(4326008)(66946007)(66556008)(66476007)(6916009)(82960400001)(316002)(478600001)(38100700002)(38350700002)(41300700001)(52116002)(6486002)(6666004); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: BcaPYN3yeYnJ/N8qcNBhtUhB6NNsorRwhP1frsbArVMoPTvQP+8/FSoeYXXPkGl9d0xEyHaCpRjtQT50u017oi+coy9F3T+YIHKANqSybNnuZ3g1JTcvQ3uTUoSQjyRYoGwbyshuaavE+rzerbgvI/KuWj0U4xUFadht6xNCTCrsp4LLqguKJwNBF1E3ZWwsKwfrj6VZ+OODNC0iTbZlzdA8o+OmsFKCkS05pcaV/t1aSWMmhAc6KpuDvkOhRSpyrBNxizj3GRyzcpcJ5GprGoO5J6+IrCR9PG1M9xMzKiZh8aafCzNFoOSP1maWde1Qu/RB3zRORzHiBJ9TpE/IQ1eIgtMdu/FjjLHnaN3sCEYGhliQHbvZRBnbNshcaNhEX6YZP41C0YC6NoT9F7MEeckPddQuKSJiaTe16n+tB0k2ARfaV93jgG/m0Aho9+QBJmXlMeODK1YsDUlOeVvkEZX0yGpbh3t1nPRZ6uhuEJ2K65ysKceI7vbmrMn1TOjmwIx+4u8PBbChJU2fHXLnBhlrOGzBf92odEWz6bQ47aMpZ/+AXtzDtpAcI7wDtMaOc5nKaH+gin0LA47Zo+f2afLMVqSoOdoazhVjMlbOizLlxeyisiY6KRrdP3hzafjRoq1u87mxLpLaSSwEw+aJS6Rpfc6ir+4LEJDyZjaYc2G/BK9uZ+XBwW+y9HWHwa1+1QFwiM03gk+tzl/w8PSBg+fC3fTtHubOI67nF2xx6NwsLYxVZ4TIw02DJIijenTbuL30H43uFSSSNBgxeHXqoa0JyAwFlIgmH5aJXoLfBIRUXCMf6+IYJ1TJuYd+yyJj/BsH6ruxMIsbSH1Ylm5x6XQmn6VXOmDLjOYNmd6i2ifiMOEcTrxQ92IuRaHboJVnjpHyUx+ztG+sLm0MBB3CWQFYCBBXqnN2Z5IHYP3pTsoyh5zK5IWqG+0+WhKEgPY5lE4xVT/quo8PJFklfDqyH0XpAGHsScrIgJGh7ZzsOtHzPkQEJMVnjh6NFx+OKVlDI4KG5/Gt5E9ZRXCivd90sZPG4/PQYoAM/u9dXuyF7eBwYCNfczxWG5Aeo3LPZz7r+E47V5hV+NznGW41aBn0iDjKVr2uqKZ/wTb5UyXiwmsBQMVbAzkm9G6zk69clqiKk1iA4ljJ6IXs9PbCwVBKRVG5aVihkV5OGbqCzuiKswOWVXjjWlGjzNuKZKFVhRlo67dmlZwGSI/ypKL8Wzw5BWdAj/lgbY5V7j3CCZAk8f6T4atQEa/fG8oio7XaJx/fYaLGjZYpVTEPGMyapvV1YTxQTEwFxJ9XtuRVpThZJCpwPkGSC0j+Q0hPQbYix6LGH2MVjR3W+lpbd4Esxu3QmIPkqIjPHh6NgLyyQTfUPA8Zpwmqt3a/ApmIzBkePFP93NBkJ2yex+fCAX/jEkTLDVsFOX6luC0tUi6DFvIbikVXD5TGoVtCXLxvDuWr3kxE4YBSSiF40YcGuftYqhyK/xX8R+Cvnjdp50sOIogAmFNO+o4diqaH3wuPtuN4Kp14//XLMruydkuhsbogZfJkGoVE+qLaTXKqkspDISMoEtT+m7cFIEafHWBYyfvD7BKi X-OriginatorOrg: yahoo-corp.jp X-MS-Exchange-CrossTenant-Network-Message-Id: a9cc824c-0fac-47be-d997-08db5b420308 X-MS-Exchange-CrossTenant-AuthSource: TY2PR01MB4107.jpnprd01.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 23 May 2023 03:58:48.1565 (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: Y8iKx/XTkgLrYpKNyK8SKr2OZW/V8BcuRLQ+BuVNp50aeY/umjppdUCcMu1HZ/NRDV8zl8YTVflUUIDNFDk1LA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYCPR01MB8803 Subject: [ovs-dev] [PATCH v5 3/3] 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/netdev-native-tnl.c | 35 ++++++++++++-- lib/netdev-vport.c | 8 ++++ lib/netdev.h | 12 +++++ tests/tunnel-push-pop-ipv6.at | 86 +++++++++++++++++++++++++++++++++++ vswitchd/vswitch.xml | 26 +++++++++++ 5 files changed, 164 insertions(+), 3 deletions(-) diff --git a/lib/netdev-native-tnl.c b/lib/netdev-native-tnl.c index b244e73eb9cb..0dcabac55eca 100644 --- a/lib/netdev-native-tnl.c +++ b/lib/netdev-native-tnl.c @@ -884,7 +884,12 @@ netdev_srv6_build_header(const struct netdev *netdev, goto out; } - srh = netdev_tnl_ip_build_header(data, params, IPPROTO_ROUTING, 0); + /* Writes the netdev_srv6_flowlabel enum value to the ipv6 + * flowlabel field. It must later be replaced by a valid value + * in the header push. */ + srh = netdev_tnl_ip_build_header(data, params, IPPROTO_ROUTING, + htonl(tnl_cfg->srv6_flowlabel)); + srh->rt_hdr.segments_left = nr_segs - 1; srh->rt_hdr.type = IPV6_SRCRT_TYPE_4; srh->rt_hdr.hdrlen = 2 * nr_segs; @@ -923,10 +928,34 @@ netdev_srv6_push_header(const struct netdev *netdev OVS_UNUSED, struct dp_packet *packet, const struct ovs_action_push_tnl *data) { + struct ovs_16aligned_ip6_hdr *inner_ip6, *outer_ip6; + enum netdev_srv6_flowlabel srv6_flowlabel; + ovs_be32 ipv6_label = 0; int ip_tot_size; + uint32_t flow; - netdev_tnl_push_ip_header(packet, data->header, data->header_len, - &ip_tot_size, 0); + inner_ip6 = dp_packet_l3(packet); + outer_ip6 = netdev_tnl_ipv6_hdr((void *) data->header); + srv6_flowlabel = ntohl(get_16aligned_be32(&outer_ip6->ip6_flow)) & + IPV6_LABEL_MASK; + + switch (srv6_flowlabel) { + case SRV6_FLOWLABEL_COPY: + flow = ntohl(get_16aligned_be32(&inner_ip6->ip6_flow)); + ipv6_label = (flow >> 28) == 6 ? htonl(flow & IPV6_LABEL_MASK) : 0; + break; + + case SRV6_FLOWLABEL_ZERO: + ipv6_label = 0; + break; + + case SRV6_FLOWLABEL_COMPUTE: + ipv6_label = htonl(dp_packet_get_rss_hash(packet) & IPV6_LABEL_MASK); + break; + } + + netdev_tnl_push_ip_header(packet, data->header, + data->header_len, &ip_tot_size, ipv6_label); } struct dp_packet * 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..3d339fe12ae9 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 of inner packet. */ + SRV6_FLOWLABEL_COPY, + + /* Simply set flowlabel to 0. */ + SRV6_FLOWLABEL_ZERO, + + /* Set flowlabel to a hash over L3/L4 fields of the inner packet. */ + 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..eb55c88f0a9e 100644 --- a/tests/tunnel-push-pop-ipv6.at +++ b/tests/tunnel-push-pop-ipv6.at @@ -1,5 +1,91 @@ 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 options:pcap=p0.pcap]) +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 netdev-dummy/receive int-br1 'in_port(2),eth(src=f8:bc:12:44:34:b6,dst=aa:55:aa:55:00:00),eth_type(0x0800),ipv4(src=10.0.0.1,dst=10.0.0.2,proto=6,tos=0,ttl=64,frag=no),tcp(src=100,dst=200),tcp_flags(0x001)']) +AT_CHECK([ovs-appctl netdev-dummy/receive int-br1 'in_port(2),eth(src=f8:bc:12:44:34:b6,dst=aa:55:aa:55:00:00),eth_type(0x0800),ipv4(src=10.0.0.1,dst=10.0.0.3,proto=6,tos=0,ttl=64,frag=no),tcp(src=100,dst=200),tcp_flags(0x001)']) +AT_CHECK([ovs-appctl netdev-dummy/receive int-br1 '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=2,proto=6,tclass=0x0,hlimit=64),tcp(src=100,dst=200),tcp_flags(0x001)']) +AT_CHECK([ovs-appctl netdev-dummy/receive int-br1 '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::3,label=3,proto=6,tclass=0x0,hlimit=64),tcp(src=100,dst=200),tcp_flags(0x001)']) +AT_CHECK([ovs-ofctl parse-pcap p0.pcap | tail -n 4 | grep -o 'ipv6_label=0x[[0-9a-f]]*'], [0], [dnl +ipv6_label=0x00000 +ipv6_label=0x00000 +ipv6_label=0x00002 +ipv6_label=0x00003 +]) + +dnl Check "srv6_flowlabel=zero". +AT_CHECK([ovs-appctl netdev-dummy/receive int-br2 'in_port(3),eth(src=f8:bc:12:44:34:b6,dst=aa:55:aa:55:00:00),eth_type(0x0800),ipv4(src=10.0.0.1,dst=10.0.0.2,proto=6,tos=0,ttl=64,frag=no),tcp(src=100,dst=200),tcp_flags(0x001)']) +AT_CHECK([ovs-appctl netdev-dummy/receive int-br2 'in_port(3),eth(src=f8:bc:12:44:34:b6,dst=aa:55:aa:55:00:00),eth_type(0x0800),ipv4(src=10.0.0.1,dst=10.0.0.3,proto=6,tos=0,ttl=64,frag=no),tcp(src=100,dst=200),tcp_flags(0x001)']) +AT_CHECK([ovs-appctl netdev-dummy/receive int-br2 '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=2,proto=6,tclass=0x0,hlimit=64),tcp(src=100,dst=200),tcp_flags(0x001)']) +AT_CHECK([ovs-appctl netdev-dummy/receive int-br2 '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::3,label=3,proto=6,tclass=0x0,hlimit=64),tcp(src=100,dst=200),tcp_flags(0x001)']) +AT_CHECK([ovs-ofctl parse-pcap p0.pcap | tail -n 4 | grep -o 'ipv6_label=0x[[0-9a-f]]*'], [0], [dnl +ipv6_label=0x00000 +ipv6_label=0x00000 +ipv6_label=0x00000 +ipv6_label=0x00000 +]) + +dnl dnl Check "srv6_flowlabel=compute" for different flows. +AT_CHECK([ovs-appctl netdev-dummy/receive int-br3 'in_port(4),eth(src=f8:bc:12:44:34:b6,dst=aa:55:aa:55:00:00),eth_type(0x0800),ipv4(src=10.0.0.1,dst=10.0.0.2,proto=6,tos=0,ttl=64,frag=no),tcp(src=100,dst=200),tcp_flags(0x001)']) +AT_CHECK([ovs-appctl netdev-dummy/receive int-br3 'in_port(4),eth(src=f8:bc:12:44:34:b6,dst=aa:55:aa:55:00:00),eth_type(0x0800),ipv4(src=10.0.0.1,dst=10.0.0.3,proto=6,tos=0,ttl=64,frag=no),tcp(src=100,dst=200),tcp_flags(0x001)']) +AT_CHECK([ovs-appctl netdev-dummy/receive int-br3 '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=2,proto=6,tclass=0x0,hlimit=64),tcp(src=100,dst=200),tcp_flags(0x001)']) +AT_CHECK([ovs-appctl netdev-dummy/receive int-br3 '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=3,proto=6,tclass=0x0,hlimit=64),tcp(src=100,dst=200),tcp_flags(0x001)']) +AT_CHECK([ovs-ofctl parse-pcap p0.pcap | tail -n 4 | grep -o 'ipv6_label=0x[[0-9a-f]]*'| sort | uniq -c | wc -l], [0], [dnl +4 +]) + +dnl dnl Check "srv6_flowlabel=compute" for same IPv4/TCP flow. +AT_CHECK([ovs-appctl netdev-dummy/receive int-br3 'in_port(4),eth(src=f8:bc:12:44:34:b6,dst=aa:55:aa:55:00:00),eth_type(0x0800),ipv4(src=10.0.0.1,dst=10.0.0.2,proto=6,tos=0,ttl=64,frag=no),tcp(src=100,dst=200),tcp_flags(0x001)']) +AT_CHECK([ovs-appctl netdev-dummy/receive int-br3 'in_port(4),eth(src=f8:bc:12:44:34:b6,dst=aa:55:aa:55:00:00),eth_type(0x0800),ipv4(src=10.0.0.1,dst=10.0.0.2,proto=6,tos=0,ttl=64,frag=no),tcp(src=100,dst=200),tcp_flags(0x002)']) +AT_CHECK([ovs-ofctl parse-pcap p0.pcap | tail -n 2 | grep -o 'ipv6_label=0x[[0-9a-f]]*' | sort | uniq -c | wc -l], [0], [dnl +1 +]) + +dnl dnl Check "srv6_flowlabel=compute" for same IPv6/TCP flow. +AT_CHECK([ovs-appctl netdev-dummy/receive int-br3 '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=2,proto=6,tclass=0x0,hlimit=64),tcp(src=100,dst=200),tcp_flags(0x001)']) +AT_CHECK([ovs-appctl netdev-dummy/receive int-br3 '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=3,proto=6,tclass=0x0,hlimit=64),tcp(src=100,dst=200),tcp_flags(0x002)']) +AT_CHECK([ovs-ofctl parse-pcap p0.pcap | tail -n 2 | grep -o 'ipv6_label=0x[[0-9a-f]]*' | sort | uniq -c | wc -l], [0], [dnl +1 +]) + +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..59c404bbbc7a 100644 --- a/vswitchd/vswitch.xml +++ b/vswitchd/vswitch.xml @@ -3287,6 +3287,32 @@ .

+ +

+ Optional. + This option controls how flowlabel in outer IPv6 header is + configured. It gives the benefit of IPv6 flow label based + load balancing, which is supported by some popular vendor + appliances. Like net.ipv6.seg6_flowlabel sysconfig, it is + one of the three values below: +

+
    +
  • + 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, set flowlabel to a hash + over the L3/L4 fields of the inner packet. +
  • +
+