};
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 => {
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
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) = @_;
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";
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);
}
}
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;