From c692cbfad0bf1d5db39fd31e84b7a4f1d897ad58 Mon Sep 17 00:00:00 2001 From: Alexandre Derumier Date: Fri, 13 Sep 2019 12:33:45 +0200 Subject: [PATCH] add format for multicast-address Signed-off-by: Alexandre Derumier --- PVE/Network/SDN/VxlanPlugin.pm | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/PVE/Network/SDN/VxlanPlugin.pm b/PVE/Network/SDN/VxlanPlugin.pm index c5ecea6..1860490 100644 --- a/PVE/Network/SDN/VxlanPlugin.pm +++ b/PVE/Network/SDN/VxlanPlugin.pm @@ -3,7 +3,7 @@ package PVE::Network::SDN::VxlanPlugin; use strict; use warnings; use PVE::Network::SDN::Plugin; -use PVE::Tools; +use PVE::Tools qw($IPV4RE); use PVE::INotify; use base('PVE::Network::SDN::Plugin'); @@ -17,6 +17,25 @@ sub pve_verify_sdn_vxlanrange { return $vxlanstr; } +PVE::JSONSchema::register_format('ipv4-multicast', \&parse_ipv4_multicast); +sub parse_ipv4_multicast { + my ($ipv4, $noerr) = @_; + + if ($ipv4 !~ m/^(?:$IPV4RE)$/) { + return undef if $noerr; + die "value does not look like a valid multicast IPv4 address\n"; + } + + if ($ipv4 =~ m/^(\d+)\.\d+.\d+.\d+/) { + if($1 < 224 || $1 > 239) { + return undef if $noerr; + die "value does not look like a valid multicast IPv4 address\n"; + } + } + + return $ipv4; +} + sub type { return 'vxlan'; } @@ -29,7 +48,7 @@ sub properties { }, 'multicast-address' => { description => "Multicast address.", - type => 'string', #fixme: format + type => 'string', format => 'ipv4-multicast' }, 'unicast-address' => { description => "Unicast peers address ip list.", -- 2.39.5