]> git.proxmox.com Git - pve-common.git/blob - test/etc_network_interfaces/t.list-interfaces.pl
f8f414ece1cded62f56112eaebc950a1f7bc60ed
[pve-common.git] / test / etc_network_interfaces / t.list-interfaces.pl
1 # Assuming eth0..3 and eth100
2 # eth0 is part of vmbr0, eth100 is part of the OVS bridge vmbr1
3 # vmbr0 has ipv4 and ipv6, OVS only ipv4
4 #
5 # eth1..3 are completely un-configured as if the cards had just been physically
6 # plugged in.
7 # The expected behavior is to notice their existance and treat them as manually
8 # configured interfaces.
9 # Saving the file after reading would add the corresponding 'manual' lines.
10 save('proc_net_dev', <<'/proc/net/dev');
11 eth0:
12 eth1:
13 eth2:
14 eth3:
15 eth100:
16 /proc/net/dev
17
18 my %wanted = (
19 vmbr0 => {
20 address => '192.168.1.2',
21 netmask => '24',
22 cidr => '192.168.1.2/24',
23 gateway => '192.168.1.1',
24 address6 => 'fc05::1:1',
25 netmask6 => '112',
26 cidr6 => 'fc05::1:1/112',
27 },
28 vmbr1 => {
29 address => '10.0.0.5',
30 netmask => '24',
31 cidr => '10.0.0.5/24',
32 },
33 );
34
35 save('interfaces', <<"/etc/network/interfaces");
36 auto lo
37 iface lo inet loopback
38
39 source-directory interfaces.d
40
41 iface eth0 inet manual
42
43 allow-vmbr1 eth100
44 iface eth100 inet manual
45 ovs_type OVSPort
46 ovs_bridge vmbr1
47
48 auto vmbr0
49 iface vmbr0 inet static
50 address 192.168.1.2
51 netmask 24
52 gateway $wanted{vmbr0}->{gateway}
53 bridge_ports eth0
54 bridge_stp off
55 bridge_fd 0
56
57 iface vmbr0 inet6 static
58 address fc05::1:1
59 netmask 112
60
61 source-directory before-ovs.d
62
63 allow-ovs vmbr1
64 iface vmbr1 inet static
65 address 10.0.0.5
66 netmask 255.255.255.0
67 ovs_type OVSBridge
68 ovs_ports eth100
69
70 source after-ovs
71
72 /etc/network/interfaces
73
74 r(load('interfaces'));
75 save('2', w());
76
77 my $ifaces = $config->{ifaces};
78
79 # check defined interfaces
80 defined($ifaces->{"eth$_"})
81 or die "missing interface: eth$_\n" foreach (0, 1, 2, 3, 100);
82
83 # check configuration
84 foreach my $ifname (keys %wanted) {
85 my $if = $wanted{$ifname};
86 $ifaces->{$ifname}->{$_} eq $if->{$_}
87 or die "unexpected $_ for interface $ifname: \""
88 . $ifaces->{$ifname}->{$_}
89 . "\", expected: \"$if->{$_}\"\n"
90 foreach (keys %$if);
91 }
92
93 my $ck = sub {
94 my ($i, $v, $e) = @_;
95 $ifaces->{$i}->{$v} eq $e
96 or die "$i variable $v: got \"$ifaces->{$i}->{$v}\", expected: $e\n";
97 };
98 $ck->('vmbr0', type => 'bridge');
99 $ck->('vmbr1', type => 'OVSBridge');
100 $ck->('vmbr1', ovs_type => 'OVSBridge');
101 $ck->('vmbr1', ovs_ports => 'eth100');
102 $ck->("eth$_", type => 'eth') foreach (0, 1, 2, 3);
103 $ck->('eth100', type => 'OVSPort');
104 $ck->('eth100', ovs_type => 'OVSPort');
105 $ck->('eth100', ovs_bridge => 'vmbr1');
106
107 my @f100 = sort @{$ifaces->{vmbr0}->{families}};
108
109 die "invalid families defined for vmbr0"
110 if (scalar(@f100) != 2) || ($f100[0] ne 'inet') || ($f100[1] ne 'inet6');
111
112 # idempotency
113 r(w());
114 expect load('2');
115
116 1;