From patchwork Tue Feb 26 18:20:25 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lorenzo Bianconi X-Patchwork-Id: 1048502 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=openvswitch.org (client-ip=140.211.169.12; helo=mail.linuxfoundation.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=redhat.com Received: from mail.linuxfoundation.org (mail.linuxfoundation.org [140.211.169.12]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4486kX63Rzz9s6w for ; Wed, 27 Feb 2019 05:28:04 +1100 (AEDT) Received: from mail.linux-foundation.org (localhost [127.0.0.1]) by mail.linuxfoundation.org (Postfix) with ESMTP id 516247FC0; Tue, 26 Feb 2019 18:27:56 +0000 (UTC) X-Original-To: ovs-dev@openvswitch.org Delivered-To: ovs-dev@mail.linuxfoundation.org Received: from smtp1.linuxfoundation.org (smtp1.linux-foundation.org [172.17.192.35]) by mail.linuxfoundation.org (Postfix) with ESMTPS id 3B6477FB6 for ; Tue, 26 Feb 2019 18:21:11 +0000 (UTC) X-Greylist: whitelisted by SQLgrey-1.7.6 Received: from mail-wm1-f66.google.com (mail-wm1-f66.google.com [209.85.128.66]) by smtp1.linuxfoundation.org (Postfix) with ESMTPS id 8AA0A3D0 for ; Tue, 26 Feb 2019 18:21:10 +0000 (UTC) Received: by mail-wm1-f66.google.com with SMTP id n19so3374032wmi.1 for ; Tue, 26 Feb 2019 10:21:10 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=kkB6dmkDnWfXCyCmy2hFTqunCU4WDyqsvCWSRIRl3RY=; b=SfbXY9yQ9+tOuxApY+Yl+Qmtny1ZqyBd73H9+czemk6p7iZ2ghxMBA+RL2VkP3LtMk 93n7Ik58AaRjY8TYmMYY08QKcg2NJrKOpFEv8hoSagNpvU6YEJykcOFJAZ/k07M47z0S JsiPp3Gwksg4U0OaLLPLGO2M7u/xVj88xUldYOG4ALEg6QVHzudrA5PKhz2zDfXzDVYb WVaHRxBOPZnk9LcMPKxURbUjmo/zah/Ij64CIj8ZOnbdoiaG/dOoC0/Kc9mPpcQcq8fk D4PdVYvmzcwFK+ix6OZccvQVafaFfhumUmAtjsmXCaasvOFVqOeJ42eJ+ZR2EGeaynzV LMuQ== X-Gm-Message-State: AHQUAuarUyZjtmpr5oKlEvHMu7EQ6/un9k26wDEUKYbBftQ5A/gvF+Yp lRE8cRxYvx5XHHu6TFCO+X+BgDNogJY= X-Google-Smtp-Source: AHgI3IZ4ilqTN/R4domgUkdwBiUjAdOIvgEVo1n9Uk8gPfY5nS3X0ONFNS7lIIyhSKlEeCM1fyInGg== X-Received: by 2002:a1c:2d4:: with SMTP id 203mr3477572wmc.20.1551205268882; Tue, 26 Feb 2019 10:21:08 -0800 (PST) Received: from localhost.localdomain.com (nat-pool-mxp-t.redhat.com. [149.6.153.186]) by smtp.gmail.com with ESMTPSA id a20sm202681wmb.17.2019.02.26.10.21.07 for (version=TLS1_3 cipher=AEAD-AES256-GCM-SHA384 bits=256/256); Tue, 26 Feb 2019 10:21:07 -0800 (PST) From: Lorenzo Bianconi To: ovs-dev@openvswitch.org Date: Tue, 26 Feb 2019 19:20:25 +0100 Message-Id: <16302a5af374440c59869c252e9b0f0d91d6b6e3.1551205078.git.lorenzo.bianconi@redhat.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: References: MIME-Version: 1.0 X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_NONE autolearn=ham version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on smtp1.linux-foundation.org Subject: [ovs-dev] [PATCH] OVN: add the possibility to configure a static IPv4 addr/IPv6 prefix and dynamic MAC X-BeenThere: ovs-dev@openvswitch.org X-Mailman-Version: 2.1.12 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: ovs-dev-bounces@openvswitch.org Errors-To: ovs-dev-bounces@openvswitch.org Add the possibility to configure a static IPv4 address and IPv6 prefix and get MAC address dynamically allocated. This can be done using the following commands: $ovn-nbctl ls-add sw0 $ovn-nbctl set Logical-Switch sw0 other_config:subnet=192.168.0.0/24 $ovn-nbctl set Logical-switch sw0 other_config:ipv6_prefix=2001::0 $ovn-nbctl lsp-add sw0 lsp0 -- lsp-set-addresses lsp0 "dynamic 192.168.0.1 2001::1" Signed-off-by: Lorenzo Bianconi --- This patch is based on 'OVN: select a random mac_prefix if not provided' --- NEWS | 6 +++++- ovn/lib/ovn-util.c | 4 ++++ ovn/northd/ovn-northd.c | 17 ++++++++++++----- ovn/ovn-nb.xml | 24 ++++++++++++++++++++++++ 4 files changed, 45 insertions(+), 6 deletions(-) diff --git a/NEWS b/NEWS index b3b347036..0e0ec3fde 100644 --- a/NEWS +++ b/NEWS @@ -18,7 +18,11 @@ Post-v2.11.0 * New "ovs-appctl dpctl/ipf-get-status" command for userspace datapath conntrack fragmentation support. - OVN: - * Select IPAM mac_prefix in a random manner if not provided by the user + * IPAM/MACAM: + - select IPAM mac_prefix in a random manner if not provided by the user + - add the capability to specify a static IPv4 address/IPv6 prefix and + get the L2 one allocated dynamically using the following syntax: + ovn-nbctl lsp-set-addresses "dynamic " v2.11.0 - 19 Feb 2019 --------------------- diff --git a/ovn/lib/ovn-util.c b/ovn/lib/ovn-util.c index aa03919bb..147f11ca0 100644 --- a/ovn/lib/ovn-util.c +++ b/ovn/lib/ovn-util.c @@ -80,6 +80,7 @@ add_ipv6_netaddr(struct lport_addresses *laddrs, struct in6_addr addr, bool is_dynamic_lsp_address(const char *address) { + char ipv6_s[IPV6_SCAN_LEN + 1]; struct eth_addr ea; ovs_be32 ip; int n; @@ -87,6 +88,9 @@ is_dynamic_lsp_address(const char *address) || (ovs_scan(address, "dynamic "IP_SCAN_FMT"%n", IP_SCAN_ARGS(&ip), &n) && address[n] == '\0') + || (ovs_scan(address, "dynamic "IP_SCAN_FMT" "IPV6_SCAN_FMT"%n", + IP_SCAN_ARGS(&ip), ipv6_s, &n) + && address[n] == '\0') || (ovs_scan(address, ETH_ADDR_SCAN_FMT" dynamic%n", ETH_ADDR_SCAN_ARGS(ea), &n) && address[n] == '\0')); } diff --git a/ovn/northd/ovn-northd.c b/ovn/northd/ovn-northd.c index 373e45573..839c2fe61 100644 --- a/ovn/northd/ovn-northd.c +++ b/ovn/northd/ovn-northd.c @@ -1166,13 +1166,16 @@ dynamic_ip4_changed(const char *lsp_addrs, */ return DYNAMIC; } else { + char ipv6_s[IPV6_SCAN_LEN + 1]; ovs_be32 new_ip; int n = 0; - if (ovs_scan(lsp_addrs, "dynamic "IP_SCAN_FMT"%n", + if ((ovs_scan(lsp_addrs, "dynamic "IP_SCAN_FMT"%n", IP_SCAN_ARGS(&new_ip), &n) - && lsp_addrs[n] == '\0') { - + && lsp_addrs[n] == '\0') || + (ovs_scan(lsp_addrs, "dynamic "IP_SCAN_FMT" "IPV6_SCAN_FMT"%n", + IP_SCAN_ARGS(&new_ip), ipv6_s, &n) + && lsp_addrs[n] == '\0')) { index = ntohl(new_ip) - ipam->start_ipv4; if (ntohl(new_ip) < ipam->start_ipv4 || index > ipam->total_ipv4s || @@ -1278,6 +1281,7 @@ static void set_dynamic_updates(const char *addrspec, struct dynamic_address_update *update) { + char ipv6_s[IPV6_SCAN_LEN + 1]; struct eth_addr mac; ovs_be32 ip; int n = 0; @@ -1290,9 +1294,12 @@ set_dynamic_updates(const char *addrspec, update->mac = DYNAMIC; } - if (ovs_scan(addrspec, "dynamic "IP_SCAN_FMT"%n", + if ((ovs_scan(addrspec, "dynamic "IP_SCAN_FMT"%n", IP_SCAN_ARGS(&ip), &n) - && addrspec[n] == '\0') { + && addrspec[n] == '\0') || + (ovs_scan(addrspec, "dynamic "IP_SCAN_FMT" "IPV6_SCAN_FMT"%n", + IP_SCAN_ARGS(&ip), ipv6_s, &n) + && addrspec[n] == '\0')) { update->ipv4 = STATIC; update->static_ip = ip; } else if (update->op->od->ipam_info.allocated_ipv4s) { diff --git a/ovn/ovn-nb.xml b/ovn/ovn-nb.xml index 18396507d..273902b43 100644 --- a/ovn/ovn-nb.xml +++ b/ovn/ovn-nb.xml @@ -718,6 +718,30 @@ +
Keyword "dynamic" followed by an IPv4 address/IPv6 prefix
+
+ +

+ The keyword dynamic followed by an IPv4/IPv6 + address indicates that ovn-northd should choose + a dynamic ethernet address and use the provided IPv4 address + and/or IPv6 prefix as network address. +

+ +

+ Examples: +

+ +
+
dynamic 192.168.0.1 2001::1
+
+ This indicates that ovn-northd should allocate + a unique MAC address and use the provided IPv4/IPv6 address + for the related port +
+
+
+
router