From patchwork Tue May 16 05:33:36 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nobuhiro MIKI X-Patchwork-Id: 1781783 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=EJvOe1Hh; 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 4QL4fr5Mtkz20dX for ; Tue, 16 May 2023 15:34:12 +1000 (AEST) Received: from localhost (localhost [127.0.0.1]) by smtp3.osuosl.org (Postfix) with ESMTP id 5A0506122E; Tue, 16 May 2023 05:34:10 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp3.osuosl.org 5A0506122E 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=EJvOe1Hh 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 0Ob9vP9uXJSI; Tue, 16 May 2023 05:34:08 +0000 (UTC) Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [140.211.9.56]) by smtp3.osuosl.org (Postfix) with ESMTPS id 2552360BAB; Tue, 16 May 2023 05:34:07 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp3.osuosl.org 2552360BAB Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id 60948C008B; Tue, 16 May 2023 05:34:06 +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 8C9F6C0037 for ; Tue, 16 May 2023 05:34:04 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp3.osuosl.org (Postfix) with ESMTP id 8995C60F16 for ; Tue, 16 May 2023 05:34:03 +0000 (UTC) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp3.osuosl.org 8995C60F16 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 2p-p6aMNXNTg for ; Tue, 16 May 2023 05:34:00 +0000 (UTC) X-Greylist: from auto-whitelisted by SQLgrey-1.8.0 DKIM-Filter: OpenDKIM Filter v2.11.0 smtp3.osuosl.org 743FD60BAB Received: from corp-ob09.yahoo-corp.jp (corp-ob09.yahoo-corp.jp [182.22.125.216]) by smtp3.osuosl.org (Postfix) with ESMTPS id 743FD60BAB for ; Tue, 16 May 2023 05:33:59 +0000 (UTC) Received: from JPN01-TYC-obe.outbound.protection.outlook.com (mail-tycjpn01lp2169.outbound.protection.outlook.com [104.47.23.169]) by corp-ob09.yahoo-corp.jp (Postfix) with ESMTPS id 3608419FB187 for ; Tue, 16 May 2023 14:33:57 +0900 (JST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=MeQPRzEIHTkVTNvaDQUFdIdQgXT9z4s4FN/AsZCl7q3deK8je6FqiDX4x0GIeT+G2lu7wAJoMeyZFlkZT+nBE5twE1KE4zy6xKJ/dU6hDtI5mFiL+eJUZURYaLmJFmJWikPWFtxi9oNsppe/KOMGsKv4I4ggPIrA/ZRQ648hhRScKRwYuqhH81Wpo/wJdlXvYjP+VgXoyuuzopRdffGKqEByJZurFCj30CPkA2Pd0HZKsYsUElcDYYawdFGWeJtsZoIMy3/dqoTw+kmrgytIOfsG0FKsyEnuVRQC3j+rWLHUzcERk1Sy2QoHY7tBt3jCysQuABssjWvY6Zzimahl3Q== 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=+zDfTfhwV54SGUD3xT0lB3DJZxZ+exNcaKADGTLUi0c=; b=Dsj/gVqq9mneLrFjZFEdLxJ2mO08+wOBZKMMztpNEZFLzS4ulvhM9Xct2I3KQecROAqFEb17QFhQhM1rELJ9qzfkFea62obl0ypYh2NojFWdGbeh4f28F/RmcfvNFyf16BAgGA6sA+p/g3LTC4M9FsBZfxmP8PLo1fn07EhycHcyKYE774HEAZKoeH7BX4hZi69kAw2XGI6aKe2p/G/eskunj01LeowjvYv8RqyzAlbYlFAk+96bEkJ6Z/jFw4/vel02dt88hufJYbuCuZYdKFsQ1owmKZZUAioitEYv4A186ZDdBaOEVbbkoeQR9t6vy7fjJReGvHAC//cIWzVyRw== 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=+zDfTfhwV54SGUD3xT0lB3DJZxZ+exNcaKADGTLUi0c=; b=EJvOe1Hh9WNRglfnVeRd3ttiQcePdVYd3C8cP5bt8wRq5+vbNbOY9gOGR2CHRf7fjObkNuHoWBxNiKruBoU6OJ3gVB7EImgCGbWRCK+EKThNdV54HH1m4jJIcNADRnExopTaad+Qhe9vRj0MWMjQtCKCf8YAdp2Ceaw7Pd8II7U= 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 TYWPR01MB11940.jpnprd01.prod.outlook.com (2603:1096:400:3fd::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6387.32; Tue, 16 May 2023 05:33:55 +0000 Received: from TY2PR01MB4107.jpnprd01.prod.outlook.com ([fe80::6e16:2bc5:f889:3826]) by TY2PR01MB4107.jpnprd01.prod.outlook.com ([fe80::6e16:2bc5:f889:3826%4]) with mapi id 15.20.6387.030; Tue, 16 May 2023 05:33:55 +0000 From: Nobuhiro MIKI To: dev@openvswitch.org Date: Tue, 16 May 2023 14:33:36 +0900 Message-Id: <20230516053336.27303-3-nmiki@yahoo-corp.jp> X-Mailer: git-send-email 2.38.1 In-Reply-To: <20230516053336.27303-1-nmiki@yahoo-corp.jp> References: <20230516053336.27303-1-nmiki@yahoo-corp.jp> X-ClientProxiedBy: TYCP286CA0120.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:29c::20) To TY2PR01MB4107.jpnprd01.prod.outlook.com (2603:1096:404:d8::23) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: TY2PR01MB4107:EE_|TYWPR01MB11940:EE_ X-MS-Office365-Filtering-Correlation-Id: 2bc57130-1ca3-450d-c3dc-08db55cf2439 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: wg+yyyqf3zGkL/jDbKV+AZ8U6dBgkSESxsjrIyq+HR0bO9nAni/BN78JloGMp2oBAAesR+VEEYNM2m0WQMcKY1cP7nbOcJmA+dBZmkxRfPK34woklooBSeMSCRVKw2ZHG1/hNjzE1q5BOsHIdJSWPm0drwcF8xRttLaLb5QYqCBMfChulw1aQygZNYtzRYvQjdRvOMWRlpqom8N4xQw9Lq4qzwYF2osMe+jVHjB9EV76dIT355uN5xU48IExOedcyRke3pFgu1sVPF8avXWqA3chWxe7Dpi7c4yN4eMZ4VEnQ5Q/y1KaYIVmemhT0bJy1W0b2OU/lOLnc6azlEzRNa67Q06qo7oQUOdeEsI2/90g0WgDgQpI5+KJcTVnlBdO9+k38C8/mVTG4wrJi8+ZE7MJCEFLBDcldI8uUtossRM10ZaxlEPpGZbowOQzEkRIEctAISiga8+GvHJoAJx/7G407Ibz3BPg+V1GEjboJGIqRtXAJZFfpl5Q3s+RdNAnxNMIcWEbhJRnOLbgHYtVkozblIIfmk1TN+cGzhROfW7Me2aCjh2mPvZiyYAmQoeU8HuGXjjksiX7wKvTjQ3V+cy+2YnsDCAmCVjiamOIlFw= 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)(376002)(396003)(346002)(366004)(451199021)(6666004)(52116002)(966005)(6486002)(83380400001)(107886003)(26005)(1076003)(186003)(6512007)(36756003)(2616005)(6506007)(86362001)(38100700002)(82960400001)(38350700002)(8676002)(8936002)(5660300002)(66946007)(66556008)(66476007)(41300700001)(30864003)(6916009)(4326008)(2906002)(316002)(478600001); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: NDLSw8oq8C+Nm9DPTEhnjSYUttbAUOk9o1PkLgg/qykPfkvsuL0b0rLrPF5QyEIAzbmvOi6DSY5wB+YjXcSmuwqSeIQ6eNSaXcKtkGmUj2/AorLJ3GVQMZxzLpra+7QNxLpXPYllvxkuzqg/8Lhv0V6ljmjxRMX0v0kh7P8u0bOTpGgMMtVKX9P4GVeATIRMIiNnlElFAVCjo3YByOkvqdocImiPdoVQno0l9nErcBwqbsmzQ59qwPIl2G8ik8qaw2/bh3qgT7XsurTbIfosopUqj35UCLJ31QQuLT/emHb2kZgw8OH0YmQbIfGTiQJgUnXXZRgCNccMTMCPVCkTVyIV7VaBMhfyttdirbcu5guegmARa4IetdP8QQJcgF/v7XESE2IwGO9TtaUDxByd0qGqaPRS7Dum1/lyiU+xiahyRMxGVZCuddirY8xhiP+qRnYQ9OdrMM65fHDmRh2LXv/dKrN7Yf6pJ8MKeqNtkYuZ3qF628Fo2e2AStyKGRNCdOxOs1O8N3km/3bYMEKk+j0Q9gXduQj2CKgKbNO+hlTjWKrIaf+MzTAhRlQnJki0VGQQkGcFgnVxgtYalQAa23ghMWpNy9Q6P6I9NG7GmWAQQLm6+trviB3OJV4f+10NtJn+Ke75z2AuG8C9l21BH44jpFfO7meqMq2utyZ+Tk7p5hC1Phgg1FCDI9bmAE1S9rHHd9C55vDcPjNmhJJOmHPVwKEtKc2pq6409iQf8VNn6qYxOQbBbHCHH3YLy8WsXEe3T/aC7PIgiPXlfKV/cFRTV/cM5bIiPLmEhHy5prxoyaiI5AJyr8Rt6dUgJ9jbIwIlFKWebwnEYHn3gck4iQAqVUD+FojOMPMvQ5JCGhv7ps9meFnYU+0IUR7Bd/ArzRQ9bisHtAZ2W4gW3/DddnjFhu4r1ep7ITgbjD/3zlcEKXJlkFtQ3h1/g9uD/4XaMQShhsNRlqCmG3vzurxneaL0n7j0p/JmdQ7C9EPsSbU9TNC00XJDS9LG1MpJgs21Tt8tKwqKnE7EF2lLerVDTJReOrFCSP74QE95sfTCOEQPAQxZka4KuP7fx0IqxM5dg9SbsbkyTcfI/nv6rFtAbYI1QwWlo8y+xzNQoV/3LdgcQ08GVkFa3gF+HIWDsWldGY3P+Ne0PzW12n2rwZluo0KH+wp8ZPlB/HXkQrrFlenn9vWJLw0MnkNvL6nIAvWOybq+h1c4yqDeuoowaFWUl7CDgqLX6+uE47gmpqvqNMKZlS8rkD31KpRqK10yiOY+nuwwXHXdKoJ8lfs0nPthWfZPCEm7fhtNlJ4gBCFeVKYd65xUQ7PfhVRyax1TOTjGdqcYkdtKs68PrW0JqZqdFlS/y6+Wk1AE0EYpPtEBPH8OmYVC1KnV7Fj0mK8L4H3wEVJnaQgZ+LQf1tP5zcvXOI9rVneqpXfAYRGSpeIoQTPuZ1f6cLcLim07AgH0Oqx7Np1lD6C0f1H0YuHFXfmYrU/X8ya72TT5OSKA+JoX1qZcDPzcM+/TQO/RszMxuN/sFAvqrLwjRwwXD/0gidVH37H3/5noOXPIUJuQ4Mx0PfyDvK9F/ce2e/cz9mJIpkzh X-OriginatorOrg: yahoo-corp.jp X-MS-Exchange-CrossTenant-Network-Message-Id: 2bc57130-1ca3-450d-c3dc-08db55cf2439 X-MS-Exchange-CrossTenant-AuthSource: TY2PR01MB4107.jpnprd01.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 May 2023 05:33:55.8924 (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: CsuY91BivVfpmvNVOklFQFp+vMM12IE+RsBe8P8CtUiEgE5E/COkyHcGtVRBDbDv4ujmrYb85u5kPzNsEWajhA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYWPR01MB11940 Subject: [ovs-dev] [PATCH v4 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 --- include/linux/openvswitch.h | 3 +- lib/netdev-native-tnl.c | 23 ++++++++++- lib/netdev-vport.c | 8 ++++ lib/netdev.h | 12 ++++++ tests/tunnel-push-pop-ipv6.at | 72 +++++++++++++++++++++++++++++++++++ vswitchd/vswitch.xml | 26 +++++++++++++ 6 files changed, 141 insertions(+), 3 deletions(-) diff --git a/include/linux/openvswitch.h b/include/linux/openvswitch.h index e305c331516b..278829cfa826 100644 --- a/include/linux/openvswitch.h +++ b/include/linux/openvswitch.h @@ -855,7 +855,8 @@ struct ovs_action_push_tnl { odp_port_t tnl_port; odp_port_t out_port; uint32_t header_len; - uint32_t tnl_type; /* For logging. */ + uint32_t tnl_type; /* For logging. */ + uint32_t srv6_flowlabel; /* Only for SRv6. */ uint32_t header[TNL_PUSH_HEADER_SIZE / 4]; }; #endif diff --git a/lib/netdev-native-tnl.c b/lib/netdev-native-tnl.c index db1c4c6d9bfc..796169fe43ac 100644 --- a/lib/netdev-native-tnl.c +++ b/lib/netdev-native-tnl.c @@ -910,6 +910,7 @@ netdev_srv6_build_header(const struct netdev *netdev, } data->header_len += sizeof *srh + 8 * srh->rt_hdr.hdrlen; + data->srv6_flowlabel = tnl_cfg->srv6_flowlabel; data->tnl_type = OVS_VPORT_TYPE_SRV6; out: ovs_mutex_unlock(&dev->mutex); @@ -922,10 +923,28 @@ 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 *ip6 = dp_packet_l3(packet); + 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); + switch (data->srv6_flowlabel) { + case SRV6_FLOWLABEL_COPY: + flow = ntohl(get_16aligned_be32(&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..58a438c8347c 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, + + /* Set RSS hash of inner pakcet 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..35d56593d37d 100644 --- a/tests/tunnel-push-pop-ipv6.at +++ b/tests/tunnel-push-pop-ipv6.at @@ -1,5 +1,77 @@ 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=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)']) +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=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)']) +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=47,tclass=0x0,hlimit=64)']) +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=47,tclass=0x0,hlimit=64)']) +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=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)']) +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=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)']) +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=47,tclass=0x0,hlimit=64)']) +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=47,tclass=0x0,hlimit=64)']) +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". +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=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)']) +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=1,tos=0,ttl=64,frag=no),icmp(type=8,code=0)']) +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=47,tclass=0x0,hlimit=64)']) +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=47,tclass=0x0,hlimit=64)']) +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 +]) + +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..8bcc361e8c62 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 RSS hash of inner + packet to flowlabel. +
  • +
+