From patchwork Wed Feb 20 17:28:42 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lorenzo Bianconi X-Patchwork-Id: 1045489 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 444Plj6NbCz9s8m for ; Thu, 21 Feb 2019 04:31:13 +1100 (AEDT) Received: from mail.linux-foundation.org (localhost [127.0.0.1]) by mail.linuxfoundation.org (Postfix) with ESMTP id 65E592E4F; Wed, 20 Feb 2019 17:31:11 +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 78C172C87 for ; Wed, 20 Feb 2019 17:28:53 +0000 (UTC) X-Greylist: whitelisted by SQLgrey-1.7.6 Received: from mail-wr1-f66.google.com (mail-wr1-f66.google.com [209.85.221.66]) by smtp1.linuxfoundation.org (Postfix) with ESMTPS id E1884782 for ; Wed, 20 Feb 2019 17:28:52 +0000 (UTC) Received: by mail-wr1-f66.google.com with SMTP id l5so25903982wrw.6 for ; Wed, 20 Feb 2019 09:28:52 -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=WQjpRkvSJV6WPjRDTA3uMVVcZEGsqcKER2p7218IwWE=; b=UnGuhHxuJ2caUhqxmYhXv7p5ts5WW/8liZ3/2BBvUItJJSurSLNPAX5iOws5Ain8Do 60O9wa8XR9fy9yIuxxjvVA3Fc/RRvbRDCDKS3cy0wq9C7jjWMT7MVAI3ZkEl+cIF0Fwh K4K22+SN5RnUhM94kSZitPBN1HsUYBi11Tq1SDl2fmFQRaynqXiKngz/YFxBkGfS5wQc /vrfbKoKOtuz9wwTKW2YdmCzQJ7lnc9LlYbmpl47nPmAYNOYj2MqCUF1sHGXvYicSn9p F8qoMMHa9PmwMnrhomIgMjjHQ0VnLw+5LPCWzWhjOsHRl+FpJ9FoafmIyoY4AlWpPkhQ Zmcw== X-Gm-Message-State: AHQUAuZf48/laIvuef5LI1J/9kmguZxskHPz0gtKQO14chEnPyG2uHzx UNl+SsEBFpKzsopbHFKDxo3F3glmLhU= X-Google-Smtp-Source: AHgI3IZxVFgeiUnFNXBo9cmovbOburMV91teBSXJ/neBgFEkPtCX85faQHOXIG+FVq3IPpnhTkAuFQ== X-Received: by 2002:adf:eec6:: with SMTP id a6mr8307020wrp.296.1550683731174; Wed, 20 Feb 2019 09:28:51 -0800 (PST) Received: from localhost.localdomain.com (nat-pool-mxp-t.redhat.com. [149.6.153.186]) by smtp.gmail.com with ESMTPSA id o7sm5302720wmc.44.2019.02.20.09.28.50 for (version=TLS1_3 cipher=AEAD-AES256-GCM-SHA384 bits=256/256); Wed, 20 Feb 2019 09:28:50 -0800 (PST) From: Lorenzo Bianconi To: ovs-dev@openvswitch.org Date: Wed, 20 Feb 2019 18:28:42 +0100 Message-Id: <2d0f02a51e139fcc577441ff819a9db627291a67.1550683351.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] [RFC] 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 --- ovn/lib/ovn-util.c | 4 ++++ ovn/northd/ovn-northd.c | 17 ++++++++++++----- 2 files changed, 16 insertions(+), 5 deletions(-) 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 2b7a3634e..f3d6716bf 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) {