X-Git-Url: https://git.proxmox.com/?p=pve-common.git;a=blobdiff_plain;f=src%2FPVE%2FINotify.pm;h=8b5544e5477096ce9b7c1650a3af9ede7ed1da30;hp=18c69d5dba89f668fecf6763d681793ec16f7a2b;hb=69758574a14c9614708409da38af8cc865cd614e;hpb=94d786b39342af89387d0acca0ca678b4771bd75 diff --git a/src/PVE/INotify.pm b/src/PVE/INotify.pm index 18c69d5..8b5544e 100644 --- a/src/PVE/INotify.pm +++ b/src/PVE/INotify.pm @@ -19,7 +19,8 @@ use PVE::ProcFSTools; use Clone qw(clone); use Linux::Inotify2; use base 'Exporter'; -use JSON; +use JSON; +use Encode qw(encode decode); our @EXPORT_OK = qw(read_file write_file register_file); @@ -56,13 +57,11 @@ sub ccache_compute_diff { my $diff = ''; - open (TMP, "diff -b -N -u '$filename' '$shadow'|"); - - while (my $line = ) { - $diff .= $line; - } - - close (TMP); + my $cmd = ['/usr/bin/diff', '-b', '-N', '-u', $filename, $shadow]; + PVE::Tools::run_command($cmd, noerr => 1, outfunc => sub { + my ($line) = @_; + $diff .= decode('UTF-8', $line) . "\n"; + }); $diff = undef if !$diff; @@ -754,17 +753,21 @@ my $extract_ovs_option = sub { }; my $check_mtu = sub { - my ($ifaces, $parent, $child) = @_; + my ($ifaces, $parent, $child) = @_; - die "check mtu - missing parent interface\n" if !$parent; - die "check mtu - missing child interface\n" if !$child; - - my $pmtu = $ifaces->{$parent}->{mtu} ? $ifaces->{$parent}->{mtu} : 1500; - my $cmtu = $ifaces->{$child}->{mtu} ? $ifaces->{$child}->{mtu} : 1500; + die "check mtu - missing parent interface\n" if !$parent; + die "check mtu - missing child interface\n" if !$child; + + my $cmtu = $ifaces->{$child}->{mtu}; + return if !$cmtu; - die "interface '$parent' - mtu $pmtu is bigger than '$child' - mtu $cmtu\n" - if $pmtu gt $cmtu; + my $parentdata = $ifaces->{$parent}; + my $pmtu = $parentdata->{mtu}; + $pmtu = $cmtu if $parentdata->{type} eq 'bond' && !$pmtu; + $pmtu = 1500 if !$pmtu; + die "interface '$parent' - mtu $pmtu is lower than '$child' - mtu $cmtu\n" + if $pmtu < $cmtu; }; # config => { @@ -869,10 +872,9 @@ sub __read_etc_network_interfaces { while (defined ($line = <$fh>)) { chomp $line; if ($line =~ m/^\s*#(.*?)\s*$/) { - # NOTE: we use 'comments' instead of 'comment' to - # avoid automatic utf8 conversion $f->{comments} = '' if !$f->{comments}; - $f->{comments} .= "$1\n"; + my $comment = decode('UTF-8', $1); + $f->{comments} .= "$comment\n"; } elsif ($line =~ m/^\s*(?:iface\s |mapping\s |auto\s @@ -1248,7 +1250,7 @@ sub write_etc_network_interfaces { my ($filename, $fh, $config) = @_; my $ifupdown2 = -e '/usr/share/ifupdown2'; my $raw = __write_etc_network_interfaces($config, $ifupdown2); - PVE::Tools::safe_print($filename, $fh, $raw); + PVE::Tools::safe_print($filename, $fh, encode('UTF-8', $raw)); } sub __write_etc_network_interfaces { my ($config, $ifupdown2) = @_; @@ -1386,7 +1388,7 @@ sub __write_etc_network_interfaces { my $n = $ifaces->{$p}; die "vlan '$iface' - unable to find parent '$p'\n" - if $n->{exists} eq 0; + if !$n; if ($n->{type} eq 'bridge' && !$n->{bridge_vlan_aware}) { die "vlan '$iface' - bridge vlan aware is not enabled on parent '$p'\n"; @@ -1394,7 +1396,7 @@ sub __write_etc_network_interfaces { die "vlan '$iface' - wrong interface type on parent '$p' " . "('$n->{type}' != 'eth|bond|bridge' )\n"; } - &$check_mtu($ifaces, $iface, $p); + &$check_mtu($ifaces, $p, $iface); } } @@ -1405,6 +1407,7 @@ sub __write_etc_network_interfaces { my $d = $ifaces->{$iface}; if ($d->{type} eq 'bridge') { foreach my $p (split (/\s+/, $d->{bridge_ports})) { + $p =~ s/\.\d+$//; my $n = $ifaces->{$p}; die "bridge '$iface' - unable to find bridge port '$p'\n" if !$n;