* [pve-devel] [PATCH common 1/4] network tests: switch to ifupdown2
2023-12-21 15:30 [pve-devel] [PATCH common 0/4] fix #5141: fix parsing of explicit vlan devices Fabian Grünbichler
@ 2023-12-21 15:30 ` Fabian Grünbichler
2023-12-21 15:30 ` [pve-devel] [PATCH common 2/4] network parser: iterate deterministically Fabian Grünbichler
` (3 subsequent siblings)
4 siblings, 0 replies; 6+ messages in thread
From: Fabian Grünbichler @ 2023-12-21 15:30 UTC (permalink / raw)
To: pve-devel
adapt allow-* to auto, and drop the one test where behaviour is not testable
anymore.
Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>
---
test/etc_network_interfaces/runtest.pl | 2 +-
.../t.bridge_eth_remove_auto.pl | 24 -------------------
.../t.create_network.pl | 6 ++---
.../t.ovs_bridge_allow.pl | 12 +++++-----
4 files changed, 10 insertions(+), 34 deletions(-)
delete mode 100644 test/etc_network_interfaces/t.bridge_eth_remove_auto.pl
diff --git a/test/etc_network_interfaces/runtest.pl b/test/etc_network_interfaces/runtest.pl
index f92f5ae..10fafae 100755
--- a/test/etc_network_interfaces/runtest.pl
+++ b/test/etc_network_interfaces/runtest.pl
@@ -78,7 +78,7 @@ sub r($;$$) {
sub w() {
# write shouldn't be able to change a previously parsed config
my $config_clone = dclone($config);
- return PVE::INotify::__write_etc_network_interfaces($config_clone);
+ return PVE::INotify::__write_etc_network_interfaces($config_clone, 1);
}
##
diff --git a/test/etc_network_interfaces/t.bridge_eth_remove_auto.pl b/test/etc_network_interfaces/t.bridge_eth_remove_auto.pl
deleted file mode 100644
index 98f5df8..0000000
--- a/test/etc_network_interfaces/t.bridge_eth_remove_auto.pl
+++ /dev/null
@@ -1,24 +0,0 @@
-use strict;
-
-# access to the current config
-our $config;
-
-# replace proc_net_dev with one with a bunch of interfaces
-save('proc_net_dev', <<'/proc/net/dev');
-eth0:
-eth1:
-/proc/net/dev
-
-r('');
-update_iface('eth0', [], autostart => 1);
-update_iface('eth1', [], autostart => 1);
-r(w());
-die "autostart lost" if !$config->{ifaces}->{eth0}->{autostart};
-die "autostart lost" if !$config->{ifaces}->{eth1}->{autostart};
-new_iface("vmbr0", 'bridge', [{ family => 'inet' }], bridge_ports => 'eth0');
-new_iface("vmbr1", 'OVSBridge', [{ family => 'inet' }], ovs_ports => 'eth1');
-r(w());
-die "autostart wrongly removed for linux bridge port" if !$config->{ifaces}->{eth0}->{autostart};
-die "autostart not removed for ovs bridge port" if $config->{ifaces}->{eth1}->{autostart};
-
-1;
diff --git a/test/etc_network_interfaces/t.create_network.pl b/test/etc_network_interfaces/t.create_network.pl
index b8da513..6aad74c 100644
--- a/test/etc_network_interfaces/t.create_network.pl
+++ b/test/etc_network_interfaces/t.create_network.pl
@@ -420,7 +420,7 @@ auto eth1.100
iface eth1.100 inet manual
mtu 1400
-allow-vmbr6 ovsintvlan
+auto ovsintvlan
iface ovsintvlan inet manual
ovs_type OVSIntPort
ovs_bridge vmbr6
@@ -429,7 +429,7 @@ iface ovsintvlan inet manual
$bond0_part
-allow-vmbr6 bond1
+auto bond1
iface bond1 inet manual
ovs_bonds eth4 eth5
ovs_type OVSBond
@@ -464,7 +464,7 @@ iface vmbr5 inet manual
bridge-fd 0
mtu 1100
-allow-ovs vmbr6
+auto vmbr6
iface vmbr6 inet manual
ovs_type OVSBridge
ovs_ports bond1 ovsintvlan
diff --git a/test/etc_network_interfaces/t.ovs_bridge_allow.pl b/test/etc_network_interfaces/t.ovs_bridge_allow.pl
index 9479ff5..742c9ef 100644
--- a/test/etc_network_interfaces/t.ovs_bridge_allow.pl
+++ b/test/etc_network_interfaces/t.ovs_bridge_allow.pl
@@ -37,7 +37,7 @@ iface eth2 inet manual
iface eth3 inet manual
-allow-ovs vmbr0
+auto vmbr0
iface vmbr0 inet static
address $ip
gateway $gw
@@ -52,19 +52,19 @@ expect load('loopback') . <<"/etc/network/interfaces";
auto eth0
iface eth0 inet manual
-allow-vmbr0 eth1
+auto eth1
iface eth1 inet manual
ovs_type OVSPort
ovs_bridge vmbr0
-allow-vmbr0 eth2
+auto eth2
iface eth2 inet manual
ovs_type OVSPort
ovs_bridge vmbr0
iface eth3 inet manual
-allow-ovs vmbr0
+auto vmbr0
iface vmbr0 inet static
address $ip
gateway $gw
@@ -89,7 +89,7 @@ expect load('loopback') . <<"/etc/network/interfaces";
auto eth0
iface eth0 inet manual
-allow-vmbr0 eth1
+auto eth1
iface eth1 inet manual
ovs_type OVSPort
ovs_bridge vmbr0
@@ -98,7 +98,7 @@ iface eth3 inet manual
iface eth2 inet manual
-allow-ovs vmbr0
+auto vmbr0
iface vmbr0 inet static
address $ip
gateway $gw
--
2.39.2
^ permalink raw reply [flat|nested] 6+ messages in thread
* [pve-devel] [PATCH common 3/4] fix #5141: network parser: fix accidental RE result re-use
2023-12-21 15:30 [pve-devel] [PATCH common 0/4] fix #5141: fix parsing of explicit vlan devices Fabian Grünbichler
2023-12-21 15:30 ` [pve-devel] [PATCH common 1/4] network tests: switch to ifupdown2 Fabian Grünbichler
2023-12-21 15:30 ` [pve-devel] [PATCH common 2/4] network parser: iterate deterministically Fabian Grünbichler
@ 2023-12-21 15:30 ` Fabian Grünbichler
2023-12-21 15:30 ` [pve-devel] [PATCH common 4/4] network tests: test #5141 Fabian Grünbichler
2024-01-03 11:19 ` [pve-devel] applied: [PATCH common 0/4] fix #5141: fix parsing of explicit vlan devices Wolfgang Bumiller
4 siblings, 0 replies; 6+ messages in thread
From: Fabian Grünbichler @ 2023-12-21 15:30 UTC (permalink / raw)
To: pve-devel
$1 and friends are not cleared if a RE fails to match, in which case they will
contain the captured values from a previous successful match in the same scope.
deduplicate the two branches to avoid accidental re-introduction.
Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>
---
src/PVE/INotify.pm | 19 +++++++++++++++----
1 file changed, 15 insertions(+), 4 deletions(-)
diff --git a/src/PVE/INotify.pm b/src/PVE/INotify.pm
index 601e651..6432295 100644
--- a/src/PVE/INotify.pm
+++ b/src/PVE/INotify.pm
@@ -1073,16 +1073,27 @@ sub __read_etc_network_interfaces {
$ifaces->{$1}->{exists} = 0;
$d->{exists} = 0;
}
- } elsif ($iface =~ m/^(\S+)\.(\d+)$/ || $d->{'vlan-raw-device'}) {
+ } elsif ($iface =~ m/^(\S+)\.(\d+)$/) {
$d->{type} = 'vlan';
my ($dev, $id) = ($1, $2);
$d->{'vlan-raw-device'} = $dev if defined($dev) && !$d->{'vlan-raw-device'};
+ $d->{'vlan-id'} = $id if $id; # VLAN id 0 is not valid, so truthy check it is
- if (!$id && $iface =~ m/^vlan(\d+)$/) { # VLAN id 0 is not valid, so truthy check it is
- $id = $1;
+ my $raw_iface = $d->{'vlan-raw-device'};
+
+ if (defined ($ifaces->{$raw_iface})) {
+ $d->{exists} = $ifaces->{$raw_iface}->{exists};
+ } else {
+ $ifaces->{$raw_iface}->{exists} = 0;
+ $d->{exists} = 0;
+ }
+ } elsif ($d->{'vlan-raw-device'}) {
+ $d->{type} = 'vlan';
+
+ if ($iface =~ m/^vlan(\d+)$/) {
+ $d->{'vlan-id'} = $1 if $1; # VLAN id 0 is not valid, so truthy check it is
}
- $d->{'vlan-id'} = $id if $id;
my $raw_iface = $d->{'vlan-raw-device'};
--
2.39.2
^ permalink raw reply [flat|nested] 6+ messages in thread