public inbox for pve-devel@lists.proxmox.com
 help / color / mirror / Atom feed
From: Alexandre Derumier <aderumier@odiso.com>
To: pve-devel@lists.proxmox.com
Subject: [pve-devel] [PATCH v10 pve-network 16/35] Fix vnet gateway for routed setup + /32 pointopoint subnet
Date: Mon,  5 Oct 2020 17:08:53 +0200	[thread overview]
Message-ID: <20201005150912.463000-17-aderumier@odiso.com> (raw)
In-Reply-To: <20201005150912.463000-1-aderumier@odiso.com>

Signed-off-by: Alexandre Derumier <aderumier@odiso.com>
---
 PVE/Network/SDN/SubnetPlugin.pm       |  6 ++++--
 PVE/Network/SDN/Zones/EvpnPlugin.pm   | 10 ++++++++--
 PVE/Network/SDN/Zones/SimplePlugin.pm | 13 +++++++++++--
 test/generateconfig.pl                |  3 ++-
 4 files changed, 25 insertions(+), 7 deletions(-)

diff --git a/PVE/Network/SDN/SubnetPlugin.pm b/PVE/Network/SDN/SubnetPlugin.pm
index 3769e04..bc66b82 100644
--- a/PVE/Network/SDN/SubnetPlugin.pm
+++ b/PVE/Network/SDN/SubnetPlugin.pm
@@ -120,8 +120,10 @@ sub on_update_hook {
     my $reversedns = $subnet->{reversedns};
     my $reversednszone = $subnet->{reversednszone};
 
-    #to: for /32 pointotoping, allow gateway outside the subnet
-    raise_param_exc({ gateway => "$gateway is not in subnet $subnet"}) if $gateway && !$subnet_matcher->($gateway);
+    my ($ip, $mask) = split(/\//, $cidr);
+
+    #for /32 pointopoint, we allow gateway outside the subnet
+    raise_param_exc({ gateway => "$gateway is not in subnet $subnet"}) if $gateway && !$subnet_matcher->($gateway) && $mask != 32;
 
     raise_param_exc({ dns => "missing dns provider"}) if $dnszone && !$dns;
     raise_param_exc({ dnszone => "missing dns zone"}) if $dns && !$dnszone;
diff --git a/PVE/Network/SDN/Zones/EvpnPlugin.pm b/PVE/Network/SDN/Zones/EvpnPlugin.pm
index 0ebe13e..17c9262 100644
--- a/PVE/Network/SDN/Zones/EvpnPlugin.pm
+++ b/PVE/Network/SDN/Zones/EvpnPlugin.pm
@@ -77,9 +77,15 @@ sub generate_sdn_config {
     @iface_config = ();
 
     my @subnets = PVE::Tools::split_list($vnet->{subnets}) if $vnet->{subnets};
+    my $address = {};
     foreach my $subnet (@subnets) {
-        next if !defined($subnet_cfg->{ids}->{$subnet});
-        push @iface_config, "address $subnet_cfg->{ids}->{$subnet}->{gateway}" if $subnet_cfg->{ids}->{$subnet}->{gateway};
+	my $subnetid = $subnet =~ s/\//-/r;
+	next if !defined($subnet_cfg->{ids}->{$subnetid});
+	my $gateway = $subnet_cfg->{ids}->{$subnetid}->{gateway};
+	if ($gateway) {
+	    push @iface_config, "address $gateway" if !defined($address->{$gateway});
+	    $address->{$gateway} = 1;
+	}
     }
 
     push @iface_config, "hwaddress $mac" if $mac;
diff --git a/PVE/Network/SDN/Zones/SimplePlugin.pm b/PVE/Network/SDN/Zones/SimplePlugin.pm
index 7006b13..a1733d5 100644
--- a/PVE/Network/SDN/Zones/SimplePlugin.pm
+++ b/PVE/Network/SDN/Zones/SimplePlugin.pm
@@ -36,9 +36,18 @@ sub generate_sdn_config {
     my @iface_config = ();
 
     my @subnets = PVE::Tools::split_list($vnet->{subnets}) if $vnet->{subnets};
+    my $address = {};
     foreach my $subnet (@subnets) {
-	next if !defined($subnet_cfg->{ids}->{$subnet});
-	push @iface_config, "address $subnet_cfg->{ids}->{$subnet}->{gateway}" if $subnet_cfg->{ids}->{$subnet}->{gateway};
+	my $subnetid = $subnet =~ s/\//-/r;
+	next if !defined($subnet_cfg->{ids}->{$subnetid});
+        my $gateway = $subnet_cfg->{ids}->{$subnetid}->{gateway};
+        if ($gateway) {
+	    push @iface_config, "address $gateway" if !defined($address->{$gateway});
+	    $address->{$gateway} = 1;
+	}
+	#add route for /32 pointtopoint
+	my ($ip, $mask) = split(/\//, $subnet);
+	push @iface_config, "up ip route add $subnet dev $vnetid" if $mask == 32;
     }
 
     push @iface_config, "hwaddress $mac" if $mac;
diff --git a/test/generateconfig.pl b/test/generateconfig.pl
index 36880ba..92108ec 100644
--- a/test/generateconfig.pl
+++ b/test/generateconfig.pl
@@ -3,17 +3,18 @@ use warnings;
 use File::Copy;
 use PVE::Cluster qw(cfs_read_file);
 
+use PVE::Network::SDN;
 use PVE::Network::SDN::Zones;
 use PVE::Network::SDN::Controllers;
 use Data::Dumper;
 
 my $network_config = PVE::Network::SDN::Zones::generate_etc_network_config();
+
 PVE::Network::SDN::Zones::write_etc_network_config($network_config);
 print "/etc/network/interfaces.d/sdn\n";
 print $network_config;
 print "\n";
 
-
 my $controller_config = PVE::Network::SDN::Controllers::generate_controller_config();
 if ($controller_config) {
     print Dumper($controller_config);
-- 
2.20.1




  parent reply	other threads:[~2020-10-05 15:10 UTC|newest]

Thread overview: 37+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-10-05 15:08 [pve-devel] [PATCH v10 pve-network 00/35] add subnet plugin Alexandre Derumier
2020-10-05 15:08 ` [pve-devel] [PATCH v10 pve-network 01/35] " Alexandre Derumier
2020-10-05 15:08 ` [pve-devel] [PATCH v10 pve-network 02/35] vnets: add subnets Alexandre Derumier
2020-10-05 15:08 ` [pve-devel] [PATCH v10 pve-network 03/35] add subnets verifications hooks Alexandre Derumier
2020-10-05 15:08 ` [pve-devel] [PATCH v10 pve-network 04/35] zones: simple|evpn: add gateway ip from subnets to vnet Alexandre Derumier
2020-10-05 15:08 ` [pve-devel] [PATCH v10 pve-network 05/35] zone: add vnet_update_hook Alexandre Derumier
2020-10-05 15:08 ` [pve-devel] [PATCH v10 pve-network 06/35] vnets: subnets: use cidr Alexandre Derumier
2020-10-05 15:08 ` [pve-devel] [PATCH v10 pve-network 07/35] subnet: fix on_delete_hook Alexandre Derumier
2020-10-05 15:08 ` [pve-devel] [PATCH v10 pve-network 08/35] api2: subnet create: convert cidr to subnetid Alexandre Derumier
2020-10-05 15:08 ` [pve-devel] [PATCH v10 pve-network 09/35] api2: increase version on apply/reload only Alexandre Derumier
2020-10-05 15:08 ` [pve-devel] [PATCH v10 pve-network 10/35] add ipams plugins Alexandre Derumier
2020-10-05 15:08 ` [pve-devel] [PATCH v10 pve-network 11/35] add pve internal ipam plugin Alexandre Derumier
2020-10-05 15:08 ` [pve-devel] [PATCH v10 pve-network 12/35] vnets: find_free_ip : add ipversion detection Alexandre Derumier
2020-10-05 15:08 ` [pve-devel] [PATCH v10 pve-network 13/35] vnets: add add_ip Alexandre Derumier
2020-10-05 15:08 ` [pve-devel] [PATCH v10 pve-network 14/35] vnets: add del_ip + rework add_ip/find_free_ip Alexandre Derumier
2020-10-05 15:08 ` [pve-devel] [PATCH v10 pve-network 15/35] add dns plugin Alexandre Derumier
2020-10-05 15:08 ` Alexandre Derumier [this message]
2020-10-05 15:08 ` [pve-devel] [PATCH v10 pve-network 17/35] ipam : pveplugin : fix find_next_free_ip Alexandre Derumier
2020-10-05 15:08 ` [pve-devel] [PATCH v10 pve-network 18/35] add vnet to subnets && remove subnetlist from vnet Alexandre Derumier
2020-10-05 15:08 ` [pve-devel] [PATCH v10 pve-network 19/35] zones: evpn|simple: add snat iptables rules Alexandre Derumier
2020-10-05 15:08 ` [pve-devel] [PATCH v10 pve-network 20/35] subnet: disable route option for now and add dns domain format Alexandre Derumier
2020-10-05 15:08 ` [pve-devel] [PATCH v10 pve-network 21/35] dns: fix reverse dns Alexandre Derumier
2020-10-05 15:08 ` [pve-devel] [PATCH v10 pve-network 22/35] subnets: move api to /sdn/vnet/<vnet>/subnets && make vnet option not optionnal Alexandre Derumier
2020-10-05 15:09 ` [pve-devel] [PATCH v10 pve-network 23/35] zones: evpn : fix raise exception Alexandre Derumier
2020-10-05 15:09 ` [pve-devel] [PATCH v10 pve-network 24/35] subnet: make ipam not optionnal and use pve ipam as default Alexandre Derumier
2020-10-05 15:09 ` [pve-devel] [PATCH v10 pve-network 25/35] don't allow subnets on vlanware vnet Alexandre Derumier
2020-10-05 15:09 ` [pve-devel] [PATCH v10 pve-network 26/35] generate sdn/.running-config on apply Alexandre Derumier
2020-10-05 15:09 ` [pve-devel] [PATCH v10 pve-network 27/35] api: add running/pending zones/vnets/subnets/controllers Alexandre Derumier
2020-10-08  9:04   ` Thomas Lamprecht
2020-10-05 15:09 ` [pve-devel] [PATCH v10 pve-network 28/35] small bugfixes Alexandre Derumier
2020-10-05 15:09 ` [pve-devel] [PATCH v10 pve-network 29/35] move dns options from subnets to zone Alexandre Derumier
2020-10-05 15:09 ` [pve-devel] [PATCH v10 pve-network 30/35] move ipam option from subnet " Alexandre Derumier
2020-10-05 15:09 ` [pve-devel] [PATCH v10 pve-network 31/35] subnets/ipam: allow same subnet on different zones Alexandre Derumier
2020-10-05 15:09 ` [pve-devel] [PATCH v10 pve-network 32/35] vnets: allow duplicate tags in differents zones Alexandre Derumier
2020-10-05 15:09 ` [pve-devel] [PATCH v10 pve-network 33/35] ipam: verify api access on create/update Alexandre Derumier
2020-10-05 15:09 ` [pve-devel] [PATCH v10 pve-network 34/35] ipam: add hostname/description to ipam db Alexandre Derumier
2020-10-05 15:09 ` [pve-devel] [PATCH v10 pve-network 35/35] update documentation Alexandre Derumier

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20201005150912.463000-17-aderumier@odiso.com \
    --to=aderumier@odiso.com \
    --cc=pve-devel@lists.proxmox.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal