* [PATCH pve-cluster v3] fix #2685: datacenter: allow 4-bit suffix in mac_prefix
@ 2026-02-24 16:14 Moayad Almalat
2026-02-26 10:37 ` Maximiliano Sandoval
0 siblings, 1 reply; 2+ messages in thread
From: Moayad Almalat @ 2026-02-24 16:14 UTC (permalink / raw)
To: pve-devel
---
src/PVE/DataCenterConfig.pm | 2 +-
src/test/Makefile | 9 ++++++++-
src/test/test_mac_prefix.pl | 24 ++++++++++++++++++++++++
3 files changed, 33 insertions(+), 2 deletions(-)
create mode 100644 src/test/test_mac_prefix.pl
diff --git a/src/PVE/DataCenterConfig.pm b/src/PVE/DataCenterConfig.pm
index 514c867..d88b167 100644
--- a/src/PVE/DataCenterConfig.pm
+++ b/src/PVE/DataCenterConfig.pm
@@ -224,7 +224,7 @@ PVE::JSONSchema::register_format('mac-prefix', \&pve_verify_mac_prefix);
sub pve_verify_mac_prefix {
my ($mac_prefix, $noerr) = @_;
- if ($mac_prefix !~ m/^[a-f0-9][02468ace](?::[a-f0-9]{2}){0,2}:?$/i) {
+ if ($mac_prefix !~ m/^[a-f0-9][02468ace](?::[a-f0-9]{2}){0,2}(?::[a-f0-9]?)?$/i) {
return undef if $noerr;
die "value is not a valid unicast MAC address prefix\n";
}
diff --git a/src/test/Makefile b/src/test/Makefile
index 757f35f..cdd37d0 100644
--- a/src/test/Makefile
+++ b/src/test/Makefile
@@ -4,8 +4,15 @@ cpgtest: cpgtest.c
gcc -Wall cpgtest.c $(shell pkg-config --cflags --libs libcpg libqb) -o cpgtest
.PHONY: check install clean distclean
-check:
+check: corosync-parser-test test-mac-prefix
+
+.PHONY: corosync-parser-test
+corosync-parser-test:
./corosync_parser_test.pl
+.PHONY: test-mac-prefix
+test-mac-prefix:
+ perl test_mac_prefix.pl
+
distclean: clean
clean:
diff --git a/src/test/test_mac_prefix.pl b/src/test/test_mac_prefix.pl
new file mode 100644
index 0000000..631874c
--- /dev/null
+++ b/src/test/test_mac_prefix.pl
@@ -0,0 +1,24 @@
+use strict;
+use warnings;
+
+use Test::More;
+
+use lib ('.', '..');
+
+use PVE::DataCenterConfig;
+
+my $longest_prefix_len = 10;
+my $prefix = "00:00:00:00:00:00";
+
+# test that all sub-strings of $prefix longer than "00" and strictly shorter than
+# "00:00:00:00" are OK
+for (my $i = 0; $i <= length($prefix); $i++) {
+ my $sub_prefix = substr($prefix, 0, $i);
+ if (2 <= $i && $i <= $longest_prefix_len) {
+ ok(PVE::DataCenterConfig::pve_verify_mac_prefix($sub_prefix), "$sub_prefix is a valid mac prefix");
+ } else {
+ is(PVE::DataCenterConfig::pve_verify_mac_prefix($sub_prefix, 1), undef, "$sub_prefix is not valid mac prefix");
+ }
+}
+
+done_testing();
--
2.47.3
^ permalink raw reply [flat|nested] 2+ messages in thread* Re: [PATCH pve-cluster v3] fix #2685: datacenter: allow 4-bit suffix in mac_prefix
2026-02-24 16:14 [PATCH pve-cluster v3] fix #2685: datacenter: allow 4-bit suffix in mac_prefix Moayad Almalat
@ 2026-02-26 10:37 ` Maximiliano Sandoval
0 siblings, 0 replies; 2+ messages in thread
From: Maximiliano Sandoval @ 2026-02-26 10:37 UTC (permalink / raw)
To: Moayad Almalat; +Cc: pve-devel
Moayad Almalat <m.almalat@proxmox.com> writes:
> ---
> src/PVE/DataCenterConfig.pm | 2 +-
> src/test/Makefile | 9 ++++++++-
> src/test/test_mac_prefix.pl | 24 ++++++++++++++++++++++++
> 3 files changed, 33 insertions(+), 2 deletions(-)
> create mode 100644 src/test/test_mac_prefix.pl
>
> diff --git a/src/PVE/DataCenterConfig.pm b/src/PVE/DataCenterConfig.pm
> index 514c867..d88b167 100644
> --- a/src/PVE/DataCenterConfig.pm
> +++ b/src/PVE/DataCenterConfig.pm
> @@ -224,7 +224,7 @@ PVE::JSONSchema::register_format('mac-prefix', \&pve_verify_mac_prefix);
> sub pve_verify_mac_prefix {
> my ($mac_prefix, $noerr) = @_;
>
> - if ($mac_prefix !~ m/^[a-f0-9][02468ace](?::[a-f0-9]{2}){0,2}:?$/i) {
> + if ($mac_prefix !~ m/^[a-f0-9][02468ace](?::[a-f0-9]{2}){0,2}(?::[a-f0-9]?)?$/i) {
> return undef if $noerr;
> die "value is not a valid unicast MAC address prefix\n";
> }
> diff --git a/src/test/Makefile b/src/test/Makefile
> index 757f35f..cdd37d0 100644
> --- a/src/test/Makefile
> +++ b/src/test/Makefile
> @@ -4,8 +4,15 @@ cpgtest: cpgtest.c
> gcc -Wall cpgtest.c $(shell pkg-config --cflags --libs libcpg libqb) -o cpgtest
>
> .PHONY: check install clean distclean
> -check:
> +check: corosync-parser-test test-mac-prefix
> +
> +.PHONY: corosync-parser-test
> +corosync-parser-test:
> ./corosync_parser_test.pl
>
> +.PHONY: test-mac-prefix
> +test-mac-prefix:
> + perl test_mac_prefix.pl
> +
> distclean: clean
> clean:
> diff --git a/src/test/test_mac_prefix.pl b/src/test/test_mac_prefix.pl
> new file mode 100644
> index 0000000..631874c
> --- /dev/null
> +++ b/src/test/test_mac_prefix.pl
> @@ -0,0 +1,24 @@
> +use strict;
> +use warnings;
> +
> +use Test::More;
> +
> +use lib ('.', '..');
> +
> +use PVE::DataCenterConfig;
> +
> +my $longest_prefix_len = 10;
> +my $prefix = "00:00:00:00:00:00";
> +
> +# test that all sub-strings of $prefix longer than "00" and strictly shorter than
> +# "00:00:00:00" are OK
> +for (my $i = 0; $i <= length($prefix); $i++) {
> + my $sub_prefix = substr($prefix, 0, $i);
> + if (2 <= $i && $i <= $longest_prefix_len) {
> + ok(PVE::DataCenterConfig::pve_verify_mac_prefix($sub_prefix), "$sub_prefix is a valid mac prefix");
> + } else {
> + is(PVE::DataCenterConfig::pve_verify_mac_prefix($sub_prefix, 1), undef, "$sub_prefix is not valid mac prefix");
> + }
> +}
> +
> +done_testing();
Looks good on my end.
Some comments on the previous state: The prefixes "00:0" and
"00:00:00:0" (we have "BC:24:11:0" as an example at the docs and
schema's verbose_description) where not allowed by the regex before this
patch, now:
```
$ make -C src/test test-mac-prefix
make: Entering directory '/home/msandoval/Projects/pve-cluster/src/test'
perl test_mac_prefix.pl
ok 1 - is not valid mac prefix
ok 2 - 0 is not valid mac prefix
ok 3 - 00 is a valid mac prefix
ok 4 - 00: is a valid mac prefix
ok 5 - 00:0 is a valid mac prefix
ok 6 - 00:00 is a valid mac prefix
ok 7 - 00:00: is a valid mac prefix
ok 8 - 00:00:0 is a valid mac prefix
ok 9 - 00:00:00 is a valid mac prefix
ok 10 - 00:00:00: is a valid mac prefix
ok 11 - 00:00:00:0 is a valid mac prefix
ok 12 - 00:00:00:00 is not valid mac prefix
ok 13 - 00:00:00:00: is not valid mac prefix
ok 14 - 00:00:00:00:0 is not valid mac prefix
ok 15 - 00:00:00:00:00 is not valid mac prefix
ok 16 - 00:00:00:00:00: is not valid mac prefix
ok 17 - 00:00:00:00:00:0 is not valid mac prefix
ok 18 - 00:00:00:00:00:00 is not valid mac prefix
1..18
$ echo $?
0
```
note that while "0" is still invalid as a prefix, this patch is a
welcome improvement.
Reviewed-by: Maximiliano Sandoval <m.sandoval@proxmox.com>
--
Maximiliano
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2026-02-26 10:37 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-02-24 16:14 [PATCH pve-cluster v3] fix #2685: datacenter: allow 4-bit suffix in mac_prefix Moayad Almalat
2026-02-26 10:37 ` Maximiliano Sandoval
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox