[pmg-devel] [pve-devel] [PATCH manager 1/1] add new parameters cidr(6) to the network api

Wolfgang Bumiller w.bumiller at proxmox.com
Wed Apr 17 12:44:23 CEST 2019


On Tue, Apr 16, 2019 at 11:05:37AM +0200, Dominik Csapak wrote:
> to also allow to set it directly and not only via address/netmask
> 
> Signed-off-by: Dominik Csapak <d.csapak at proxmox.com>
> ---
>  PVE/API2/Network.pm | 44 +++++++++++++++++++++++++++++++++++++++++++-
>  1 file changed, 43 insertions(+), 1 deletion(-)
> 
> diff --git a/PVE/API2/Network.pm b/PVE/API2/Network.pm
> index 0284410a..3b08681c 100644
> --- a/PVE/API2/Network.pm
> +++ b/PVE/API2/Network.pm
> @@ -126,6 +126,11 @@ my $confdesc = {
>  	optional => 1,
>  	requires => 'netmask',
>      },
> +    cidr => {
> +	description => 'IPv4 CIDR.',
> +	type => 'string', format => 'CIDRv4',
> +	optional => 1,
> +    },
>      gateway6 => {
>  	description => 'Default ipv6 gateway address.',
>  	type => 'string', format => 'ipv6',
> @@ -142,7 +147,12 @@ my $confdesc = {
>  	type => 'string', format => 'ipv6',
>  	optional => 1,
>  	requires => 'netmask6',
> -    }
> +    },
> +    cidr6 => {
> +	description => 'IPv6 CIDR.',
> +	type => 'string', format => 'CIDRv6',
> +	optional => 1,
> +    },
>  };
>  
>  sub json_config_properties {
> @@ -277,6 +287,34 @@ my $check_ipv6_settings = sub {
>  	   (defined($type) && $type !~ /^(?:(?:GLOBAL|(?:UNIQUE|LINK)-LOCAL)-UNICAST)$/);
>  };
>  
> +my $map_cidr_to_address_netmask = sub {
> +    my ($param) = @_;
> +
> +    if ($param->{cidr}) {
> +	raise_param_exc({ address => "address conflicts with cidr" })
> +	if $param->{address};

Please indent postfix conditions.

> +	raise_param_exc({ netmask => "netmask conflicts with cidr" })
> +	if $param->{netmask};
> +
> +	my ($address, $netmask) = $param->{cidr} =~ m!^(.*)/(\d+)$!;
> +	$param->{address} = $address;
> +	$param->{netmask} = $netmask;
> +	delete $param->{cidr};
> +    }
> +
> +    if ($param->{cidr6}) {
> +	raise_param_exc({ address6 => "address6 conflicts with cidr6" })
> +	if $param->{address6};
> +	raise_param_exc({ netmask6 => "netmask6 conflicts with cidr6" })
> +	if $param->{netmask6};
> +
> +	my ($address, $netmask) = $param->{cidr6} =~ m!^(.*)/(\d+)$!;
> +	$param->{address6} = $address;
> +	$param->{netmask6} = $netmask;
> +	delete $param->{cidr6};
> +    }
> +};
> +
>  __PACKAGE__->register_method({
>      name => 'create_network', 
>      path => '', 
> @@ -312,6 +350,8 @@ __PACKAGE__->register_method({
>  	    &$check_duplicate_gateway6($ifaces, $iface)
>  		if $param->{gateway6};
>  
> +	    $map_cidr_to_address_netmask->($param);
> +
>  	    &$check_ipv6_settings($param->{address6}, int($param->{netmask6}))
>  		if $param->{address6};
>  
> @@ -397,6 +437,8 @@ __PACKAGE__->register_method({
>  		@$families = grep(!/^inet6$/, @$families) if $k eq 'address6';
>  	    }
>  
> +	    $map_cidr_to_address_netmask->($param);
> +
>  	    &$check_duplicate_gateway($ifaces, $iface)
>  		if $param->{gateway};
>  	    &$check_duplicate_gateway6($ifaces, $iface)
> -- 
> 2.11.0



More information about the pmg-devel mailing list