]> git.proxmox.com Git - pve-manager.git/commitdiff
API2: Network: allow cidr-list && use cidr for address
authorAlexandre Derumier <aderumier@odiso.com>
Wed, 4 Mar 2020 16:17:59 +0000 (17:17 +0100)
committerThomas Lamprecht <t.lamprecht@proxmox.com>
Thu, 12 Mar 2020 14:33:12 +0000 (15:33 +0100)
Signed-off-by: Alexandre Derumier <aderumier@odiso.com>
PVE/API2/Network.pm

index a32f6c0138a63dae93ba17116819c0214afb9997..17101583c7e9981e937c4ff21ea00c8774714bf6 100644 (file)
@@ -152,7 +152,7 @@ my $confdesc = {
     },
     cidr => {
        description => 'IPv4 CIDR.',
-       type => 'string', format => 'CIDRv4',
+       type => 'string', format => 'CIDRv4-list',
        optional => 1,
     },
     mtu => {
@@ -181,7 +181,7 @@ my $confdesc = {
     },
     cidr6 => {
        description => 'IPv6 CIDR.',
-       type => 'string', format => 'CIDRv6',
+       type => 'string', format => 'CIDRv6-list',
        optional => 1,
     },
 };
@@ -326,11 +326,14 @@ my $map_cidr_to_address_netmask = sub {
            if $param->{address};
        raise_param_exc({ netmask => "netmask conflicts with cidr" })
            if $param->{netmask};
+       my @cidrs = split /,/, $param->{cidr};
+       foreach my $cidr (@cidrs) {
+           push @{$param->{address}}, $cidr;
+       }
 
-       my ($address, $netmask) = $param->{cidr} =~ m!^(.*)/(\d+)$!;
-       $param->{address} = $address;
-       $param->{netmask} = $netmask;
        delete $param->{cidr};
+    } elsif ($param->{address} && $param->{netmask}) {
+       $param->{address} = ["$param->{address}/$param->{netmask}"];
     }
 
     if ($param->{cidr6}) {
@@ -339,10 +342,14 @@ my $map_cidr_to_address_netmask = sub {
        raise_param_exc({ netmask6 => "netmask6 conflicts with cidr6" })
            if $param->{netmask6};
 
-       my ($address, $netmask) = $param->{cidr6} =~ m!^(.*)/(\d+)$!;
-       $param->{address6} = $address;
-       $param->{netmask6} = $netmask;
+       my @cidrs = split /,/, $param->{cidr6};
+       foreach my $cidr (@cidrs) {
+           push @{$param->{address6}}, $cidr;
+       }
        delete $param->{cidr6};
+
+    } elsif ($param->{address6} && $param->{netmask6}) {
+        $param->{address} = ["$param->{address6}/$param->{netmask6}"];
     }
 };