]> git.proxmox.com Git - pve-common.git/blobdiff - src/PVE/JSONSchema.pm
JSONSchema: add get_netmask_bits and missing netmask
[pve-common.git] / src / PVE / JSONSchema.pm
index 36fa994eb7e6d4bddeb2600585a085cdc7c7ba70..d458ec13f87d57eed2b6d1fab691479dac5cf0a5 100644 (file)
@@ -113,6 +113,12 @@ register_standard_option('pve-output-format', {
     default => 'text',
 });
 
+register_standard_option('pve-snapshot-name', {
+    description => "The name of the snapshot.",
+    type => 'string', format => 'pve-configid',
+    maxLength => 40,
+});
+
 my $format_list = {};
 
 sub register_format {
@@ -208,12 +214,23 @@ register_format('mac-addr', \&pve_verify_mac_addr);
 sub pve_verify_mac_addr {
     my ($mac_addr, $noerr) = @_;
 
-    if ($mac_addr !~ m/^[0-9a-f]{2}(:[0-9a-f]{2}){5}$/i) {
+    # don't allow I/G bit to be set, most of the time it breaks things, see:
+    # https://pve.proxmox.com/pipermail/pve-devel/2019-March/035998.html
+    if ($mac_addr !~ m/^[a-f0-9][02468ace](?::[a-f0-9]{2}){5}$/i) {
        return undef if $noerr;
-       die "value does not look like a valid MAC address\n";
+       die "value does not look like a valid unicast MAC address\n";
     }
     return $mac_addr;
+
 }
+register_standard_option('mac-addr', {
+    type => 'string',
+    description => 'Unicast MAC address.',
+    verbose_description => 'A common MAC address with the I/G (Individual/Group) bit not set.',
+    format_description => "XX:XX:XX:XX:XX:XX",
+    optional => 1,
+    format => 'mac-addr',
+});
 
 register_format('ipv4', \&pve_verify_ipv4);
 sub pve_verify_ipv4 {
@@ -249,6 +266,7 @@ sub pve_verify_ip {
 }
 
 my $ipv4_mask_hash = {
+    '0.0.0.0' => 0,
     '128.0.0.0' => 1,
     '192.0.0.0' => 2,
     '224.0.0.0' => 3,
@@ -283,6 +301,11 @@ my $ipv4_mask_hash = {
     '255.255.255.255' => 32,
 };
 
+sub get_netmask_bits {
+    my ($mask) = @_;
+    return $ipv4_mask_hash->{$mask};
+}
+
 register_format('ipv4mask', \&pve_verify_ipv4mask);
 sub pve_verify_ipv4mask {
     my ($mask, $noerr) = @_;
@@ -356,8 +379,7 @@ register_format('email', \&pve_verify_email);
 sub pve_verify_email {
     my ($email, $noerr) = @_;
 
-    # we use same regex as in Utils.js
-    if ($email !~ /^(\w+)([\-+.][\w]+)*@(\w[\-\w]*\.){1,5}([A-Za-z]){2,63}$/) {
+    if ($email !~ /^[\w\+\-\~]+(\.[\w\+\-\~]+)*@[a-zA-Z0-9\-]+(\.[a-zA-Z0-9\-]+)*$/) {
           return undef if $noerr;
           die "value does not look like a valid email address\n";
     }
@@ -450,23 +472,23 @@ my %bwlimit_opt = (
 my $bwlimit_format = {
        default => {
            %bwlimit_opt,
-           description => 'default bandwidth limit in MiB/s',
+           description => 'default bandwidth limit in KiB/s',
        },
        restore => {
            %bwlimit_opt,
-           description => 'bandwidth limit in MiB/s for restoring guests from backups',
+           description => 'bandwidth limit in KiB/s for restoring guests from backups',
        },
        migration => {
            %bwlimit_opt,
-           description => 'bandwidth limit in MiB/s for migrating guests',
+           description => 'bandwidth limit in KiB/s for migrating guests (including moving local disks)',
        },
        clone => {
            %bwlimit_opt,
-           description => 'bandwidth limit in MiB/s for cloning disks',
+           description => 'bandwidth limit in KiB/s for cloning disks',
        },
        move => {
            %bwlimit_opt,
-           description => 'bandwidth limit in MiB/s for moving disks',
+           description => 'bandwidth limit in KiB/s for moving disks',
        },
 };
 register_format('bwlimit', $bwlimit_format);