X-Git-Url: https://git.proxmox.com/?p=pve-common.git;a=blobdiff_plain;f=src%2FPVE%2FINotify.pm;h=630e62f2f1afe3812d625a4b4c3f4abb68f162a3;hp=e773cf4d93649b56c5fc93775abf01a151d4ac84;hb=78325766900d362d492d37270e2224840a919129;hpb=48ab17b3eec31fdb89b8523f7ca2577fa87298c5 diff --git a/src/PVE/INotify.pm b/src/PVE/INotify.pm index e773cf4..630e62f 100644 --- a/src/PVE/INotify.pm +++ b/src/PVE/INotify.pm @@ -784,6 +784,13 @@ my $extract_ovs_option = sub { # } sub read_etc_network_interfaces { my ($filename, $fh) = @_; + my $proc_net_dev = IO::File->new('/proc/net/dev', 'r'); + my $proc_net_if_inet6 = IO::File->new('/proc/net/if_inet6', 'r'); + return __read_etc_network_interfaces($fh, $proc_net_dev, $proc_net_if_inet6); +} + +sub __read_etc_network_interfaces { + my ($fh, $proc_net_dev, $proc_net_if_inet6) = @_; my $config = {}; my $ifaces = $config->{ifaces} = {}; @@ -791,13 +798,13 @@ sub read_etc_network_interfaces { my $line; - if (my $fd2 = IO::File->new("/proc/net/dev", "r")) { - while (defined ($line = <$fd2>)) { + if ($proc_net_dev) { + while (defined ($line = <$proc_net_dev>)) { if ($line =~ m/^\s*(eth\d+):.*/) { $ifaces->{$1}->{exists} = 1; } } - close($fd2); + close($proc_net_dev); } # we try to keep order inside the file @@ -976,15 +983,17 @@ sub read_etc_network_interfaces { $d->{method} = 'manual' if !$d->{method}; $d->{method6} = 'manual' if !$d->{method6}; + + $d->{families} ||= ['inet']; } - if (my $fd2 = IO::File->new("/proc/net/if_inet6", "r")) { - while (defined ($line = <$fd2>)) { + if ($proc_net_if_inet6) { + while (defined ($line = <$proc_net_if_inet6>)) { if ($line =~ m/^[a-f0-9]{32}\s+[a-f0-9]{2}\s+[a-f0-9]{2}\s+[a-f0-9]{2}\s+[a-f0-9]{2}\s+(\S+)$/) { $ifaces->{$1}->{active} = 1 if defined($ifaces->{$1}); } } - close ($fd2); + close ($proc_net_if_inet6); } return $config; @@ -1121,8 +1130,14 @@ sub __interface_to_string { return $raw; } + sub write_etc_network_interfaces { my ($filename, $fh, $config) = @_; + my $raw = __write_etc_network_interfaces($config); + PVE::Tools::safe_print($filename, $fh, $raw); +} +sub __write_etc_network_interfaces { + my ($config) = @_; my $ifaces = $config->{ifaces}; my @options = @{$config->{options}}; @@ -1197,7 +1212,19 @@ sub write_etc_network_interfaces { } } - my $raw = "# network interface settings\n"; + my $raw = <<'NETWORKDOC'; +# network interface settings; autogenerated +# Please do NOT modify this file directly, unless you know what +# you're doing. +# +# If you want to manage part of the network configuration manually, +# please utilize the 'source' or 'source-directory' directives to do +# so. +# PVE will preserve these directives, but will NOT its network +# configuration from sourced files, so do not attempt to move any of +# the PVE managed interfaces into external files! + +NETWORKDOC my $printed = {}; @@ -1266,8 +1293,7 @@ sub write_etc_network_interfaces { } $raw .= $_->[1] . "\n" foreach @options; - - PVE::Tools::safe_print($filename, $fh, $raw); + return $raw; } register_file('interfaces', "/etc/network/interfaces",