diff --git a/src/PVE/INotify.pm b/src/PVE/INotify.pm index 65fa25f..0d82a52 100644 --- a/src/PVE/INotify.pm +++ b/src/PVE/INotify.pm @@ -904,12 +904,16 @@ sub __read_etc_network_interfaces { SECTION: while (defined ($line = <$fh>)) { chomp ($line); next if $line =~ m/^\s*#/; - next if $line =~ m/^\s*(allow-hotplug)\s+(.*)$/; if ($line =~ m/^\s*(allow-auto|auto|allow-ovs)\s+(.*)$/) { $ifaces->{$_}->{autostart} = 1 for split (/\s+/, $2); + } elsif ($line =~ m/^\s*(allow-hotplug)\s+(.*)$/) { + + # FIXME: handle those differently? auto makes it required on-boot, vs. best-effort + $ifaces->{$_}->{autostart} = 1 for split (/\s+/, $2); + } elsif ($line =~ m/^\s*iface\s+(\S+)\s+(inet6?)\s+(\S+)\s*$/) { my $i = $1; my $family = $2; diff --git a/test/etc_network_interfaces/base-allow-hotplug b/test/etc_network_interfaces/base-allow-hotplug new file mode 100644 index 0000000..967aeab --- /dev/null +++ b/test/etc_network_interfaces/base-allow-hotplug @@ -0,0 +1,17 @@ +# network interface settings; autogenerated +# Please do NOT modify this file directly, unless you know what +# you're doing. +# +# If you want to manage parts of the network configuration manually, +# please utilize the 'source' or 'source-directory' directives to do +# so. +# PVE will preserve these directives, but will NOT read its network +# configuration from sourced files, so do not attempt to move any of +# the PVE managed interfaces into external files! + +auto lo +iface lo inet loopback + +allow-hotplug ens18 +iface ens18 inet dhcp + diff --git a/test/etc_network_interfaces/base-auto-allow-hotplug b/test/etc_network_interfaces/base-auto-allow-hotplug new file mode 100644 index 0000000..b3aae7f --- /dev/null +++ b/test/etc_network_interfaces/base-auto-allow-hotplug @@ -0,0 +1,18 @@ +# network interface settings; autogenerated +# Please do NOT modify this file directly, unless you know what +# you're doing. +# +# If you want to manage parts of the network configuration manually, +# please utilize the 'source' or 'source-directory' directives to do +# so. +# PVE will preserve these directives, but will NOT read its network +# configuration from sourced files, so do not attempt to move any of +# the PVE managed interfaces into external files! + +auto lo +iface lo inet loopback + +auto ens18 +allow-hotplug ens18 +iface ens18 inet dhcp + diff --git a/test/etc_network_interfaces/t.base-auto-allow-hotplug.pl b/test/etc_network_interfaces/t.base-auto-allow-hotplug.pl new file mode 100644 index 0000000..772da83 --- /dev/null +++ b/test/etc_network_interfaces/t.base-auto-allow-hotplug.pl @@ -0,0 +1,25 @@ +my $active_ifaces = ['lo', 'ens18', 'ens']; +my $proc_net = load('proc_net_dev'); +$proc_net =~ s/eth0/ens18/; + +my $wanted = load('base-allow-hotplug'); + +# parse the config +r($wanted, $proc_net, $active_ifaces); + +$wanted =~ s/allow-hotplug ens18/auto ens18/; # FIXME: hack! rather we need to keep allow-hotplug! + +expect $wanted; + +# idempotency (save, re-parse, and re-check) +r(w(), $proc_net, $active_ifaces); +expect $wanted; + +# parse one with both, "auto" and "allow-hotplug" +my $bad = load('base-auto-allow-hotplug'); +r($bad, $proc_net, $active_ifaces); + +# should drop the first occuring one of the conflicting options ("auto" currently) +expect $wanted; + +1;