Signed-off-by: Alexandre Derumier <aderum...@odiso.com>
---
 src/PVE/INotify.pm                            | 36 ++++++++++++-------
 .../t.list-interfaces.pl                      | 32 ++++++++++++-----
 2 files changed, 46 insertions(+), 22 deletions(-)

diff --git a/src/PVE/INotify.pm b/src/PVE/INotify.pm
index d170cc1..b07cecd 100644
--- a/src/PVE/INotify.pm
+++ b/src/PVE/INotify.pm
@@ -1108,23 +1108,33 @@ sub __read_etc_network_interfaces {
 
        # map address and netmask to cidr
        if ($d->{address}) {
-           if ($d->{netmask}) {
-               if ($d->{netmask} =~ m/^\d+$/) { # e.g. netmask 20
-                   $d->{address} = $d->{address} . "/" . $d->{netmask};
-               } elsif (my $mask = 
PVE::JSONSchema::get_netmask_bits($d->{netmask})) {
-                   $d->{address} = $d->{address} . "/" . $mask;
+
+           if($d->{address} =~ m!^(.*)/(\d+)$! ) {
+               $d->{cidr} = $d->{address};
+               $d->{address} = $1;
+               $d->{netmask} = $2;
+           } else {
+               if ($d->{netmask}) {
+                   if ($d->{netmask} =~ m/^\d+$/) { # e.g. netmask 20
+                       $d->{cidr} = $d->{address} . "/" . $d->{netmask};
+                   } elsif (my $mask = 
PVE::JSONSchema::get_netmask_bits($d->{netmask})) {
+                       $d->{cidr} = $d->{address} . "/" . $mask;
+                   }
                }
            }
-          # for api compatibility
-          $d->{cidr} = $d->{address};
        }
 
-       # map address6 and netmask6 to cidr6
-       if ($d->{address6}) {
-           $d->{address6} .= "/" . $d->{netmask6} if $d->{address6} !~ 
m!^(.*)/(\d+)$! && $d->{netmask6};
-           # for api compatibility
-           $d->{cidr6} = $d->{address6};
-       }
+        # map address and netmask to cidr
+        if ($d->{address6}) {
+
+            if($d->{address6} =~ m!^(.*)/(\d+)$! ) {
+                $d->{cidr6} = $d->{address6};
+                $d->{address6} = $1;
+                $d->{netmask6} = $2;
+            } else {
+               $d->{cidr6} = $d->{address6} . "/" . $d->{netmask6} if 
$d->{netmask6};
+            }
+        }
 
        $d->{method} = 'manual' if !$d->{method};
        $d->{method6} = 'manual' if !$d->{method6};
diff --git a/test/etc_network_interfaces/t.list-interfaces.pl 
b/test/etc_network_interfaces/t.list-interfaces.pl
index 5925c35..6495a4a 100644
--- a/test/etc_network_interfaces/t.list-interfaces.pl
+++ b/test/etc_network_interfaces/t.list-interfaces.pl
@@ -16,10 +16,17 @@ eth100:
 /proc/net/dev
 
 my %wanted = (
-    vmbr0 => { address => '192.168.1.2/24',
+    vmbr0 => { address => '192.168.1.2',
+              netmask => '24',
               gateway => '192.168.1.1',
-              address6 => 'fc05::1:1/112'},
-    vmbr1 => { address => '10.0.0.5/24'}
+              address6 => 'fc05::1:1',
+              netmask6 => '112'},
+    vmbr1 => { address => '10.0.0.5',
+              netmask => '255.255.255.0'},
+    eth2 => { address => '172.16.0.1',
+              netmask => '24',
+              address6 => 'fc05::1:1',
+               netmask6 => '64'}
 );
 
 save('interfaces', <<"/etc/network/interfaces");
@@ -30,6 +37,13 @@ source-directory interfaces.d
 
 iface eth0 inet manual
 
+auto eth2
+iface eth2 inet static
+       address  $wanted{eth2}->{address}/$wanted{eth2}->{netmask}
+
+iface eth2 inet6 static
+       address  $wanted{eth2}->{address6}/$wanted{eth2}->{netmask6}
+
 allow-vmbr1 eth100
 iface eth100 inet manual
        ovs_type OVSPort
@@ -37,23 +51,23 @@ iface eth100 inet manual
 
 auto vmbr0
 iface vmbr0 inet static
-       address  192.168.1.2
-       netmask  24
+       address  $wanted{vmbr0}->{address}
+       netmask  $wanted{vmbr0}->{netmask}
        gateway  $wanted{vmbr0}->{gateway}
        bridge_ports eth0
        bridge_stp off
        bridge_fd 0
 
 iface vmbr0 inet6 static
-       address  fc05::1:1
-       netmask  112
+       address  $wanted{vmbr0}->{address6}
+       netmask  $wanted{vmbr0}->{netmask6}
 
 source-directory before-ovs.d
 
 allow-ovs vmbr1
 iface vmbr1 inet static
-       address  10.0.0.5
-       netmask  255.255.255.0
+       address  $wanted{vmbr1}->{address}
+       netmask  $wanted{vmbr1}->{netmask}
        ovs_type OVSBridge
        ovs_ports eth100
 
-- 
2.20.1

_______________________________________________
pve-devel mailing list
pve-devel@pve.proxmox.com
https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel

Reply via email to