pve-common/test/etc_network_interfaces/t.list-interfaces.pl
Thomas Lamprecht fa6e694656 inotify/interfaces: ensure cidr, address and netmask are set correctly
This should bring back compatibillity in the read site and one for
all clears that cidr is cidr, netmask is mask and address is address
(outgoing).

We're still very flexible on what can be written out.

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
2020-03-13 11:35:52 +01:00

117 lines
2.5 KiB
Perl

# Assuming eth0..3 and eth100
# eth0 is part of vmbr0, eth100 is part of the OVS bridge vmbr1
# vmbr0 has ipv4 and ipv6, OVS only ipv4
#
# eth1..3 are completely un-configured as if the cards had just been physically
# plugged in.
# The expected behavior is to notice their existance and treat them as manually
# configured interfaces.
# Saving the file after reading would add the corresponding 'manual' lines.
save('proc_net_dev', <<'/proc/net/dev');
eth0:
eth1:
eth2:
eth3:
eth100:
/proc/net/dev
my %wanted = (
vmbr0 => {
address => '192.168.1.2',
netmask => '24',
cidr => '192.168.1.2/24',
gateway => '192.168.1.1',
address6 => 'fc05::1:1',
netmask6 => '112',
cidr6 => 'fc05::1:1/112',
},
vmbr1 => {
address => '10.0.0.5',
netmask => '24',
cidr => '10.0.0.5/24',
},
);
save('interfaces', <<"/etc/network/interfaces");
auto lo
iface lo inet loopback
source-directory interfaces.d
iface eth0 inet manual
allow-vmbr1 eth100
iface eth100 inet manual
ovs_type OVSPort
ovs_bridge vmbr1
auto vmbr0
iface vmbr0 inet static
address 192.168.1.2
netmask 24
gateway $wanted{vmbr0}->{gateway}
bridge_ports eth0
bridge_stp off
bridge_fd 0
iface vmbr0 inet6 static
address fc05::1:1
netmask 112
source-directory before-ovs.d
allow-ovs vmbr1
iface vmbr1 inet static
address 10.0.0.5
netmask 255.255.255.0
ovs_type OVSBridge
ovs_ports eth100
source after-ovs
/etc/network/interfaces
r(load('interfaces'));
save('2', w());
my $ifaces = $config->{ifaces};
# check defined interfaces
defined($ifaces->{"eth$_"})
or die "missing interface: eth$_\n" foreach (0, 1, 2, 3, 100);
# check configuration
foreach my $ifname (keys %wanted) {
my $if = $wanted{$ifname};
$ifaces->{$ifname}->{$_} eq $if->{$_}
or die "unexpected $_ for interface $ifname: \""
. $ifaces->{$ifname}->{$_}
. "\", expected: \"$if->{$_}\"\n"
foreach (keys %$if);
}
my $ck = sub {
my ($i, $v, $e) = @_;
$ifaces->{$i}->{$v} eq $e
or die "$i variable $v: got \"$ifaces->{$i}->{$v}\", expected: $e\n";
};
$ck->('vmbr0', type => 'bridge');
$ck->('vmbr1', type => 'OVSBridge');
$ck->('vmbr1', ovs_type => 'OVSBridge');
$ck->('vmbr1', ovs_ports => 'eth100');
$ck->("eth$_", type => 'eth') foreach (0, 1, 2, 3);
$ck->('eth100', type => 'OVSPort');
$ck->('eth100', ovs_type => 'OVSPort');
$ck->('eth100', ovs_bridge => 'vmbr1');
my @f100 = sort @{$ifaces->{vmbr0}->{families}};
die "invalid families defined for vmbr0"
if (scalar(@f100) != 2) || ($f100[0] ne 'inet') || ($f100[1] ne 'inet6');
# idempotency
r(w());
expect load('2');
1;