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
5 # eth1..3 are completely un-configured as if the cards had just been physically
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');
20 address
=> '192.168.1.2',
22 cidr
=> '192.168.1.2/24',
23 gateway
=> '192.168.1.1',
24 address6
=> 'fc05::1:1',
26 cidr6
=> 'fc05::1:1/112',
29 address
=> '10.0.0.5',
31 cidr
=> '10.0.0.5/24',
34 address
=> '172.16.0.1',
36 cidr
=> '172.16.0.1/24',
37 address6
=> 'fc05::1:2',
39 cidr6
=> 'fc05::1:2/112',
43 save
('interfaces', <<"/etc/network/interfaces");
45 iface lo inet loopback
47 source-directory interfaces
.d
49 iface eth0 inet manual
51 iface eth2 inet static
52 address
$wanted{eth2
}->{cidr
}
54 iface eth2 inet6 static
55 address
$wanted{eth2
}->{cidr6
}
58 iface eth100 inet manual
63 iface vmbr0 inet static
64 address
$wanted{vmbr0
}->{address
}
65 netmask
$wanted{vmbr0
}->{netmask
}
66 gateway
$wanted{vmbr0
}->{gateway
}
71 iface vmbr0 inet6 static
72 address
$wanted{vmbr0
}->{address6
}
73 netmask
$wanted{vmbr0
}->{netmask6
}
75 source-directory before-ovs
.d
78 iface vmbr1 inet static
79 address
$wanted{vmbr1
}->{address
}
80 netmask
$wanted{vmbr1
}->{netmask
}
86 /etc/network
/interfaces
88 r
(load
('interfaces'));
91 my $ifaces = $config->{ifaces
};
93 # check defined interfaces
94 defined($ifaces->{"eth$_"})
95 or die "missing interface: eth$_\n" foreach (0, 1, 2, 3, 100);
98 foreach my $ifname (keys %wanted) {
99 my $if = $wanted{$ifname};
100 $ifaces->{$ifname}->{$_} eq $if->{$_}
101 or die "unexpected $_ for interface $ifname: \""
102 . $ifaces->{$ifname}->{$_}
103 . "\", expected: \"$if->{$_}\"\n"
108 my ($i, $v, $e) = @_;
109 $ifaces->{$i}->{$v} eq $e
110 or die "$i variable $v: got \"$ifaces->{$i}->{$v}\", expected: $e\n";
112 $ck->('vmbr0', type
=> 'bridge');
113 $ck->('vmbr1', type
=> 'OVSBridge');
114 $ck->('vmbr1', ovs_type
=> 'OVSBridge');
115 $ck->('vmbr1', ovs_ports
=> 'eth100');
116 $ck->("eth$_", type
=> 'eth') foreach (0, 1, 2, 3);
117 $ck->('eth100', type
=> 'OVSPort');
118 $ck->('eth100', ovs_type
=> 'OVSPort');
119 $ck->('eth100', ovs_bridge
=> 'vmbr1');
121 my @f100 = sort @{$ifaces->{vmbr0
}->{families
}};
123 die "invalid families defined for vmbr0"
124 if (scalar(@f100) != 2) || ($f100[0] ne 'inet') || ($f100[1] ne 'inet6');