From patchwork Fri Apr 26 23:11:50 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: William Tu X-Patchwork-Id: 1928469 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=Nvidia.com header.i=@Nvidia.com header.a=rsa-sha256 header.s=selector2 header.b=pZaPy3Np; dkim-atps=neutral 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=patchwork.ozlabs.org) 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 (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4VRRXQ3jz9z1yZP for ; Sat, 27 Apr 2024 21:03:16 +1000 (AEST) Received: from localhost (localhost [127.0.0.1]) by smtp1.osuosl.org (Postfix) with ESMTP id 3580A83A4A; Sat, 27 Apr 2024 11:03:14 +0000 (UTC) X-Virus-Scanned: amavis at osuosl.org Received: from smtp1.osuosl.org ([127.0.0.1]) by localhost (smtp1.osuosl.org [127.0.0.1]) (amavis, port 10024) with ESMTP id fLVttGFeRFsz; Sat, 27 Apr 2024 11:03:12 +0000 (UTC) X-Comment: SPF check N/A for local connections - client-ip=140.211.9.56; helo=lists.linuxfoundation.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver= DKIM-Filter: OpenDKIM Filter v2.11.0 smtp1.osuosl.org C8D90837CE Authentication-Results: smtp1.osuosl.org; dkim=fail reason="signature verification failed" (2048-bit key, unprotected) header.d=Nvidia.com header.i=@Nvidia.com header.a=rsa-sha256 header.s=selector2 header.b=pZaPy3Np Received: from lists.linuxfoundation.org (lf-lists.osuosl.org [140.211.9.56]) by smtp1.osuosl.org (Postfix) with ESMTPS id C8D90837CE; Sat, 27 Apr 2024 11:03:12 +0000 (UTC) Received: from lf-lists.osuosl.org (localhost [127.0.0.1]) by lists.linuxfoundation.org (Postfix) with ESMTP id 59B8FC0077; Sat, 27 Apr 2024 11:03:12 +0000 (UTC) X-Original-To: ovs-dev@openvswitch.org Delivered-To: ovs-dev@lists.linuxfoundation.org Received: from smtp3.osuosl.org (smtp3.osuosl.org [140.211.166.136]) by lists.linuxfoundation.org (Postfix) with ESMTP id 742F9C0037 for ; Fri, 26 Apr 2024 23:12:11 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by smtp3.osuosl.org (Postfix) with ESMTP id 5BF63614B0 for ; Fri, 26 Apr 2024 23:12:11 +0000 (UTC) X-Virus-Scanned: amavis at osuosl.org Received: from smtp3.osuosl.org ([127.0.0.1]) by localhost (smtp3.osuosl.org [127.0.0.1]) (amavis, port 10024) with ESMTP id S99mDZ7v6y0l for ; Fri, 26 Apr 2024 23:12:10 +0000 (UTC) Received-SPF: Pass (mailfrom) identity=mailfrom; client-ip=2a01:111:f403:200a::600; helo=nam12-mw2-obe.outbound.protection.outlook.com; envelope-from=witu@nvidia.com; receiver= DMARC-Filter: OpenDMARC Filter v1.4.2 smtp3.osuosl.org 1A2E86149A Authentication-Results: smtp3.osuosl.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com DKIM-Filter: OpenDKIM Filter v2.11.0 smtp3.osuosl.org 1A2E86149A Authentication-Results: smtp3.osuosl.org; dkim=pass (2048-bit key, unprotected) header.d=Nvidia.com header.i=@Nvidia.com header.a=rsa-sha256 header.s=selector2 header.b=pZaPy3Np Received: from NAM12-MW2-obe.outbound.protection.outlook.com (mail-mw2nam12on20600.outbound.protection.outlook.com [IPv6:2a01:111:f403:200a::600]) by smtp3.osuosl.org (Postfix) with ESMTPS id 1A2E86149A for ; Fri, 26 Apr 2024 23:12:09 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=CC+u/R7P2D8JJTl2qcfU6f30iRzN6uyG/Bnk9Z1GzzoRBShoIAAmf3Dlyjm/33ftWgk2Tbs7pZeVOQPLozI7+RuhWmSmu1+P4fp2jfMytBhO8GMozWr2Z8AL4AUd7kUrNIxew+al5r6WAfHgk8Ar/L8jvDawnTLtIxmi/bwGAiInlOc6oY9TPTnX48dcajdZiaJayQdV5tFAxYccrS6ub1t7NdxlXYgdnbCIg2xv+ms6mbEvRTtUzLHFhARMsVZXlzaPideJd4NdcOhgceWPWE7Z96/T+7/7jH/hADmmCTzJxyrDPsUAoFe9QAX8Y+0zPlZO09ARvnDuqBlDgGiW+g== 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=H+Y93xDl/TxRtdQydIQw3R5VQVl44TG2vmoW+1AdjM8=; b=Kbrhq8z2HorDs2jpga9c3RfEWGw4J5+53gpBA/2aYComRN+nhKrTW6c8bMSPdx4B39jKSct0EOhzKr/iXWHYaFTOUZdec8BNGZBffDtyAfLbSvd0KQjreOdFpVnYTMr2987Lc1QNgo+Rp2GWoPc+GNDEh1PaySsjXVU6+KF4FGKu9X+MiL+lPX0BgUcrVyl9LXQsQVyp41OD05280ayzyGzBoro3YZweD4j8ktpWPcy+/Ze4df3ecORUBrSv6vVfd7V44U6LxKQhy1NkciMNxgHlCXDr3GKaDaYIJnm16ZmvtbGwiA00yNGRPmYlMNMOnrW6chAZQK8E8NALCvht2Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.161) smtp.rcpttodomain=openvswitch.org smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=H+Y93xDl/TxRtdQydIQw3R5VQVl44TG2vmoW+1AdjM8=; b=pZaPy3NpOlLvjpku47ARg1bQKYceLF2A9vFWnPn4gzGx87WUTnUr0idgJgEoos1/zbAnEIvo4hPZTE8t7rV88VLmcLKfPQDEeOzS6obSKwyrWkSim1TctOXYmsckgwOyCeZ2ncgWDT/c9QK8U7buQPNiM724Elt7wTcWOo1s/3kjIR5VSIKrEBqGat6eASH+GtgGyqQlP/nycirEXX0dO3BwEwm2pv35jdVScuGIh9/Eeuwuq/zyZEqav5aYcIhy8I42k4O+cQOII4huvFIKymO1uxHS5gBMqJslA4vr/e431oP4ou8wwhL5opkDsJ6NLX1f7jS6+BEOD8HNHdy9Pw== Received: from DM6PR06CA0102.namprd06.prod.outlook.com (2603:10b6:5:336::35) by PH7PR12MB5808.namprd12.prod.outlook.com (2603:10b6:510:1d4::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7472.44; Fri, 26 Apr 2024 23:12:05 +0000 Received: from DS2PEPF00003444.namprd04.prod.outlook.com (2603:10b6:5:336:cafe::29) by DM6PR06CA0102.outlook.office365.com (2603:10b6:5:336::35) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7519.29 via Frontend Transport; Fri, 26 Apr 2024 23:12:05 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.161) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.117.161 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.161; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.117.161) by DS2PEPF00003444.mail.protection.outlook.com (10.167.17.71) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7519.19 via Frontend Transport; Fri, 26 Apr 2024 23:12:04 +0000 Received: from rnnvmail202.nvidia.com (10.129.68.7) by mail.nvidia.com (10.129.200.67) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.4; Fri, 26 Apr 2024 16:11:51 -0700 Received: from rnnvmail201.nvidia.com (10.129.68.8) by rnnvmail202.nvidia.com (10.129.68.7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1544.4; Fri, 26 Apr 2024 16:11:51 -0700 Received: from vdi.nvidia.com (10.127.8.10) by mail.nvidia.com (10.129.68.8) with Microsoft SMTP Server id 15.2.1544.4 via Frontend Transport; Fri, 26 Apr 2024 16:11:51 -0700 To: Date: Fri, 26 Apr 2024 16:11:50 -0700 Message-ID: <20240426231150.8029-1-witu@nvidia.com> X-Mailer: git-send-email 2.37.1 (Apple Git-137.1) MIME-Version: 1.0 X-NV-OnPremToCloud: ExternallySecured X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DS2PEPF00003444:EE_|PH7PR12MB5808:EE_ X-MS-Office365-Filtering-Correlation-Id: 5f9d6992-5839-4c0b-cd2f-08dc66464946 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: ossY1sCM7iwfnI/yWjqY2yvF1TfAUy/RQyecAEqauKkjjqwDmTegUKm4x4GNe98FkYK0sPFUkaAgiXoVUrwmo/3YEC6tooMxUJA667F6QUJ0WHh2Ob1cn4Rrxl9G9REFjU1M7qm1W/dULCJYf6EkzcBMB2BlauHjRIxbXvxBplBPcKzsz/xFsjt8OyBOkyiJzjmv02AiZcoQ0cpdIt0XTVbURc/Qb1Sm6RL3K+Rbpzg85R2rd0Johf/p1vrr7Y986Kn1hebg2YxtmCcqSzId572lZ6h6Bp6jZtAqruG37MPh1uu5LcKoCmHvKVh9dj/LkcnG6+QSy2X4nCG2WXdI3put5FaF0Q5wBOyVInZ2z4OarIIudCKNcwgIGK4udGkNx5+sHeuzVaa39z0UOIdyGY4vYY5ayuZozdsHwVV/ke4t8BEAFUrf8m3eBXdk057UabTPWG83z977k0XkVy1PI1CDyFWbbOqj6KZ0oBcwz5xQTrm3g5TJZnL3W4PVFtWoWBoKsxnJN8j7I6HcGJdv2H/0PiDhmxooGzrqm60A4ZFjasZ7qmxjsJfjYpSE/XcAA7IRsn+47q7elw/7F3m/GYz88dP1p8DU4fFQy5zjVXNEQS8H5HcNB5hQYFeXIaSWS0lqJl15tcepAxgrR3bl1JiCOBZquoU5PBr9RPJwsW+v6WJ3N5/9wfEAeXpMp9oHG9JJ+d+Q2MmUp7tpnV568AiWI52Zb+ZLg9vYXIufCSYw72JoACM721Ac5waYLOFkXRf2p1Sbe4QQwBryKHivuPULq2RqK6MOK8exFeCxrMVowcDmgLRC93MrIsC7fFerafxSR28eTd6vnuqxTBGFyIeyyymRAHHbl5VpnE0j3T5utGvAsiLxs1jzMj2zY/ln1BPy3QufPqcJStJWLj3M3Ijo5jkFhO944FlsdOWzybjTqKBppo0NTPb59KkQ4H02FU1lmVmrgnkdSe78bV6mSZ+iSbzWP7FQmzSErQFTYl/sqgjrIquQha/DwCe3JShsDt68/IIIlHXuQva3e5c6tHffqfNlNTKpKbO48biDbXkLz9KLYzWWJw/7xy8NWl1UEI5KGD9vMX/uCaUGuTWAK7qIAfrrtYZMqLL4AHOZ4K9+QCq8WRK4dN6vTTR9VFiHPDckLHAlU6u8rbyqq4u1Cpzjx331iqtTxhacM4nJHYpkX0bu/SQIGu5b2+mPdzE/NesZjr8dgZhKj84Z/nMKimkeDkmkAreV2N93IrfyPs/yCLDLqTNc8e5JntUBq2P80/1y+WyevX3xy52qjyqbB2SNzWFyf1nOVSL+PNZNDHlV37BmajZ75HhqB2ZrMeP4ExG7BdPtyaTDKqBmWA+OqAVUUjLtRCOUipXhfBoah0sQA+mu3NUjlmaJYPQh9jWK X-Forefront-Antispam-Report: CIP:216.228.117.161; CTRY:US; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:mail.nvidia.com; PTR:dc6edge2.nvidia.com; CAT:NONE; SFS:(13230031)(82310400014)(1800799015)(376005)(36860700004); DIR:OUT; SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 Apr 2024 23:12:04.1482 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 5f9d6992-5839-4c0b-cd2f-08dc66464946 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a; Ip=[216.228.117.161]; Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: DS2PEPF00003444.namprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH7PR12MB5808 X-Mailman-Approved-At: Sat, 27 Apr 2024 11:03:10 +0000 Cc: bodong@nvidia.com, derrick.lim@rakuten.com Subject: [ovs-dev] [PATCH RFC] route-table: Add support for v4 via v6 route. 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: , X-Patchwork-Original-From: William Tu via dev From: William Tu Reply-To: William Tu Errors-To: ovs-dev-bounces@openvswitch.org Sender: "dev" Add route-table that support ipv4 dst via ipv6. BGP unnumbered is mechanism that allows BGP to establish peering sessions without the need to explicitly configure IP addresses on the interfaces involved in the peering. Without using IP address assignments, it uses link-local IPv6 addresses of the directly connected neighbors for peering purposes. For example, BGP might install the following route: $ ip route get 100.87.18.3 100.87.18.3 via inet6 fe80::920a:84ff:fe9e:9570 dev br-phy src 100.87.18.6 Currently OVS can only support either all-ipv4 or all-ipv6, the patch adds support for such use case. Reported-at: https://mail.openvswitch.org/pipermail/ovs-discuss/2024-January/052908.html Signed-off-by: William Tu --- Need Derrick to verify it's working on tunnel --- lib/ovs-router.c | 34 ++++++++++++++++------------------ lib/route-table.c | 26 ++++++++++++++++++++++++++ tests/system-route.at | 24 ++++++++++++++++++++++++ 3 files changed, 66 insertions(+), 18 deletions(-) diff --git a/lib/ovs-router.c b/lib/ovs-router.c index 3d84c9a30a8f..3ee927e6f7de 100644 --- a/lib/ovs-router.c +++ b/lib/ovs-router.c @@ -415,7 +415,6 @@ ovs_router_add(struct unixctl_conn *conn, int argc, unsigned int plen; ovs_be32 src = 0; ovs_be32 gw = 0; - bool is_ipv6; ovs_be32 ip; int err; int i; @@ -423,9 +422,8 @@ ovs_router_add(struct unixctl_conn *conn, int argc, if (scan_ipv4_route(argv[1], &ip, &plen)) { in6_addr_set_mapped_ipv4(&ip6, ip); plen += 96; - is_ipv6 = false; } else if (scan_ipv6_route(argv[1], &ip6, &plen)) { - is_ipv6 = true; + ; } else { unixctl_command_reply_error(conn, "Invalid 'ip/plen' parameter"); @@ -438,21 +436,21 @@ ovs_router_add(struct unixctl_conn *conn, int argc, continue; } - if (is_ipv6) { - if (ovs_scan(argv[i], "src="IPV6_SCAN_FMT, src6_s) && - ipv6_parse(src6_s, &src6)) { - continue; - } - if (ipv6_parse(argv[i], &gw6)) { - continue; - } - } else { - if (ovs_scan(argv[i], "src="IP_SCAN_FMT, IP_SCAN_ARGS(&src))) { - continue; - } - if (ip_parse(argv[i], &gw)) { - continue; - } + if (ovs_scan(argv[i], "src="IPV6_SCAN_FMT, src6_s) && + ipv6_parse(src6_s, &src6)) { + continue; + } + + if (ipv6_parse(argv[i], &gw6)) { + continue; + } + + if (ovs_scan(argv[i], "src="IP_SCAN_FMT, IP_SCAN_ARGS(&src))) { + continue; + } + + if (ip_parse(argv[i], &gw)) { + continue; } unixctl_command_reply_error(conn, diff --git a/lib/route-table.c b/lib/route-table.c index f1fe32714e8d..7fa79edb5cda 100644 --- a/lib/route-table.c +++ b/lib/route-table.c @@ -232,6 +232,7 @@ route_table_parse(struct ofpbuf *buf, struct route_table_msg *change) [RTA_OIF] = { .type = NL_A_U32, .optional = true }, [RTA_GATEWAY] = { .type = NL_A_U32, .optional = true }, [RTA_MARK] = { .type = NL_A_U32, .optional = true }, + [RTA_VIA] = { .type = NL_A_UNSPEC, .optional = true }, [RTA_PREFSRC] = { .type = NL_A_U32, .optional = true }, [RTA_TABLE] = { .type = NL_A_U32, .optional = true }, }; @@ -241,6 +242,7 @@ route_table_parse(struct ofpbuf *buf, struct route_table_msg *change) [RTA_OIF] = { .type = NL_A_U32, .optional = true }, [RTA_MARK] = { .type = NL_A_U32, .optional = true }, [RTA_GATEWAY] = { .type = NL_A_IPV6, .optional = true }, + [RTA_VIA] = { .type = NL_A_UNSPEC, .optional = true }, [RTA_PREFSRC] = { .type = NL_A_IPV6, .optional = true }, [RTA_TABLE] = { .type = NL_A_U32, .optional = true }, }; @@ -323,6 +325,7 @@ route_table_parse(struct ofpbuf *buf, struct route_table_msg *change) } else if (ipv4) { in6_addr_set_mapped_ipv4(&change->rd.rta_dst, 0); } + if (attrs[RTA_PREFSRC]) { if (ipv4) { ovs_be32 prefsrc; @@ -333,6 +336,29 @@ route_table_parse(struct ofpbuf *buf, struct route_table_msg *change) nl_attr_get_in6_addr(attrs[RTA_PREFSRC]); } } + + if (attrs[RTA_VIA]) { + const struct rtvia *via; + + via = nl_attr_get(attrs[RTA_VIA]); + switch (via->rtvia_family) { + case AF_INET: + ovs_be32 gw; + gw = get_unaligned_be32(ALIGNED_CAST(ovs_be32 *, + via->rtvia_addr)); + in6_addr_set_mapped_ipv4(&change->rd.rta_gw, gw); + break; + case AF_INET6: + change->rd.rta_gw = *(ALIGNED_CAST(struct in6_addr *, + via->rtvia_addr)); + break; + default: + VLOG_WARN("Unknown address family %d\n", + via->rtvia_family); + return 0; + } + } + if (attrs[RTA_GATEWAY]) { if (ipv4) { ovs_be32 gw; diff --git a/tests/system-route.at b/tests/system-route.at index c0ecad6cfb49..fd698321b401 100644 --- a/tests/system-route.at +++ b/tests/system-route.at @@ -65,6 +65,30 @@ Cached: fc00:db8:beef::13/128 dev br0 GW fc00:db8:cafe::1 SRC fc00:db8:cafe::2]) OVS_TRAFFIC_VSWITCHD_STOP AT_CLEANUP +AT_SETUP([ovs-route - add system route ipv4 via ipv6]) +AT_KEYWORDS([route]) +OVS_TRAFFIC_VSWITCHD_START() +AT_CHECK([ip link set br0 up]) + +AT_CHECK([ip addr add 192.168.9.2/24 dev br0], [0], [stdout]) +AT_CHECK([ip addr add 192.168.9.3/24 dev br0], [0], [stdout]) + +AT_CHECK([ip -6 addr add fc00:db8:cafe::2/64 dev br0], [0], [stdout]) +AT_CHECK([ip -6 addr add fc00:db8:cafe::3/64 dev br0], [0], [stdout]) + +AT_CHECK([ip route add 192.168.9.12/32 dev br0 via inet6 fe80::920a:84ff:fe9e:9512 src 192.168.9.2], [0], [stdout]) +AT_CHECK([ip route add 192.168.9.13/32 dev br0 via inet6 fe80::920a:84ff:fe9e:9513 src 192.168.9.3], [0], [stdout]) + +OVS_WAIT_UNTIL_EQUAL([ovs-appctl ovs/route/show | grep -E '192.168.9.1[[23]]/32' | sort], [dnl +Cached: 192.168.9.12/32 dev br0 GW fe80::920a:84ff:fe9e:9512 SRC 192.168.9.2 +Cached: 192.168.9.13/32 dev br0 GW fe80::920a:84ff:fe9e:9513 SRC 192.168.9.3]) + +AT_CHECK([ovs-appctl ovs/route/add 192.168.9.14/32 br0 fe80::920a:84ff:fe9e:9514], [0], [OK +]) + +OVS_TRAFFIC_VSWITCHD_STOP +AT_CLEANUP + dnl Checks that OVS doesn't use routes from non-standard tables. AT_SETUP([ovs-route - route tables]) AT_KEYWORDS([route])