diff --git a/src/PVE/INotify.pm b/src/PVE/INotify.pm index 186df62..f4a5945 100644 --- a/src/PVE/INotify.pm +++ b/src/PVE/INotify.pm @@ -1319,6 +1319,21 @@ sub __write_etc_network_interfaces { } } + # check bond + foreach my $iface (keys %$ifaces) { + my $d = $ifaces->{$iface}; + if ($d->{type} eq 'bond' && $d->{slaves}) { + foreach my $p (split (/\s+/, $d->{slaves})) { + my $n = $ifaces->{$p}; + + die "bond '$iface' - unable to find slave '$p'\n" + if !$n; + die "bond '$iface' - wrong interface type on slave '$p' " . + "('$n->{type}' != 'eth')\n" if $n->{type} ne 'eth'; + } + } + } + # check vxlan my $vxlans = {}; foreach my $iface (keys %$ifaces) { diff --git a/test/etc_network_interfaces/t.create_network.pl b/test/etc_network_interfaces/t.create_network.pl index 3503797..da47999 100644 --- a/test/etc_network_interfaces/t.create_network.pl +++ b/test/etc_network_interfaces/t.create_network.pl @@ -24,6 +24,31 @@ $config->{ifaces}->{eth1} = { autostart => 1 }; +$config->{ifaces}->{eth2} = { + type => 'eth', + method => 'manual', + families => ['inet'], + autostart => 1 +}; + +$config->{ifaces}->{eth3} = { + type => 'eth', + method => 'manual', + families => ['inet'], + autostart => 1 +}; + +$config->{ifaces}->{bond0} = { + type => 'bond', + slaves => 'eth2 eth3', + bond_mode => '802.3ad', + bond_xmit_hash_policy => 'layer3+4', + bond_miimon => 100, + method => 'manual', + families => ['inet'], + autostart => 1 +}; + $config->{ifaces}->{vmbr1} = { type => 'bridge', method => 'manual', @@ -103,6 +128,19 @@ iface eth1 inet static netmask $nm gateway $gw +auto eth2 +iface eth2 inet manual + +auto eth3 +iface eth3 inet manual + +auto bond0 +iface bond0 inet manual + bond-slaves eth2 eth3 + bond-miimon 100 + bond-mode 802.3ad + bond-xmit-hash-policy layer3+4 + auto vmbr0 iface vmbr0 inet static address 10.0.0.2