mirror of
git://git.proxmox.com/git/pve-common.git
synced 2025-01-20 22:03:33 +03:00
e8c1bbfca2
adapt allow-* to auto, and drop the one test where behaviour is not testable anymore. Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>
542 lines
8.6 KiB
Perl
542 lines
8.6 KiB
Perl
save('proc_net_dev', <<'/proc/net/dev');
|
|
eth0:
|
|
eth1:
|
|
eth2:
|
|
eth3:
|
|
eth4:
|
|
eth5:
|
|
/proc/net/dev
|
|
|
|
r(load('brbase'));
|
|
|
|
#
|
|
# Variables used for the various interfaces:
|
|
#
|
|
|
|
my $ip = '192.168.0.2/24';
|
|
my $gw = '192.168.0.1';
|
|
my $svcnodeip = '239.192.105.237';
|
|
my $physdev = 'eth0';
|
|
my $remoteip1 = '192.168.0.3';
|
|
my $remoteip2 = '192.168.0.4';
|
|
|
|
#
|
|
# Hunk for the default bridge of the 'brbase' configuration
|
|
#
|
|
|
|
my $vmbr0_part = <<"PART";
|
|
auto vmbr0
|
|
iface vmbr0 inet static
|
|
address 10.0.0.2/24
|
|
gateway 10.0.0.1
|
|
bridge-ports eth0
|
|
bridge-stp off
|
|
bridge-fd 0
|
|
PART
|
|
chomp $vmbr0_part;
|
|
|
|
#
|
|
# Configure eth1 statically, store its expected interfaces hunk in $eth1_part
|
|
# and test!
|
|
#
|
|
|
|
$config->{ifaces}->{eth1} = {
|
|
type => 'eth',
|
|
method => 'static',
|
|
address => $ip,
|
|
gateway => $gw,
|
|
families => ['inet'],
|
|
autostart => 1
|
|
};
|
|
|
|
my $eth1_part = <<"PART";
|
|
auto eth1
|
|
iface eth1 inet static
|
|
address $ip
|
|
gateway $gw
|
|
PART
|
|
chomp $eth1_part;
|
|
|
|
expect load('loopback') . <<"CHECK";
|
|
source-directory interfaces.d
|
|
|
|
iface eth0 inet manual
|
|
|
|
$eth1_part
|
|
|
|
iface eth2 inet manual
|
|
|
|
iface eth3 inet manual
|
|
|
|
iface eth4 inet manual
|
|
|
|
iface eth5 inet manual
|
|
|
|
$vmbr0_part
|
|
|
|
CHECK
|
|
|
|
#
|
|
# Add a bond for eth2 & 3 and check the new output
|
|
#
|
|
|
|
$config->{ifaces}->{bond0} = {
|
|
type => 'bond',
|
|
mtu => 1400,
|
|
slaves => 'eth2 eth3',
|
|
bond_mode => '802.3ad',
|
|
bond_xmit_hash_policy => 'layer3+4',
|
|
bond_miimon => 100,
|
|
method => 'manual',
|
|
families => ['inet'],
|
|
autostart => 1
|
|
};
|
|
my $bond0_part = <<"PART";
|
|
auto bond0
|
|
iface bond0 inet manual
|
|
bond-slaves eth2 eth3
|
|
bond-miimon 100
|
|
bond-mode 802.3ad
|
|
bond-xmit-hash-policy layer3+4
|
|
mtu 1400
|
|
PART
|
|
chomp $bond0_part;
|
|
|
|
expect load('loopback') . <<"CHECK";
|
|
source-directory interfaces.d
|
|
|
|
iface eth0 inet manual
|
|
|
|
$eth1_part
|
|
|
|
auto eth2
|
|
iface eth2 inet manual
|
|
|
|
auto eth3
|
|
iface eth3 inet manual
|
|
|
|
iface eth4 inet manual
|
|
|
|
iface eth5 inet manual
|
|
|
|
$bond0_part
|
|
|
|
$vmbr0_part
|
|
|
|
CHECK
|
|
|
|
#
|
|
# Add vxlan1 and 2
|
|
#
|
|
|
|
$config->{ifaces}->{vxlan1} = {
|
|
type => 'vxlan',
|
|
method => 'manual',
|
|
families => ['inet'],
|
|
'vxlan-id' => 1,
|
|
'vxlan-svcnodeip' => $svcnodeip,
|
|
'vxlan-physdev' => $physdev,
|
|
autostart => 1
|
|
};
|
|
|
|
$config->{ifaces}->{vxlan2} = {
|
|
type => 'vxlan',
|
|
method => 'manual',
|
|
families => ['inet'],
|
|
'vxlan-id' => 2,
|
|
'vxlan-local-tunnelip' => $ip,
|
|
autostart => 1
|
|
};
|
|
|
|
my $vxlan12_part = <<"PART";
|
|
auto vxlan1
|
|
iface vxlan1 inet manual
|
|
vxlan-id 1
|
|
vxlan-svcnodeip $svcnodeip
|
|
vxlan-physdev $physdev
|
|
|
|
auto vxlan2
|
|
iface vxlan2 inet manual
|
|
vxlan-id 2
|
|
vxlan-local-tunnelip $ip
|
|
PART
|
|
chomp $vxlan12_part;
|
|
|
|
expect load('loopback') . <<"CHECK";
|
|
source-directory interfaces.d
|
|
|
|
iface eth0 inet manual
|
|
|
|
$eth1_part
|
|
|
|
auto eth2
|
|
iface eth2 inet manual
|
|
|
|
auto eth3
|
|
iface eth3 inet manual
|
|
|
|
iface eth4 inet manual
|
|
|
|
iface eth5 inet manual
|
|
|
|
$bond0_part
|
|
|
|
$vmbr0_part
|
|
|
|
$vxlan12_part
|
|
|
|
CHECK
|
|
|
|
#
|
|
# Add vxlan3 and 3 bridges using vxlan1..3
|
|
#
|
|
|
|
$config->{ifaces}->{vmbr1} = {
|
|
mtu => 1400,
|
|
type => 'bridge',
|
|
method => 'manual',
|
|
families => ['inet'],
|
|
bridge_stp => 'off',
|
|
bridge_fd => 0,
|
|
bridge_ports => 'vxlan1',
|
|
bridge_vlan_aware => 'yes',
|
|
autostart => 1
|
|
};
|
|
|
|
$config->{ifaces}->{vmbr2} = {
|
|
type => 'bridge',
|
|
method => 'manual',
|
|
families => ['inet'],
|
|
bridge_stp => 'off',
|
|
bridge_fd => 0,
|
|
bridge_ports => 'vxlan2',
|
|
autostart => 1
|
|
};
|
|
|
|
$config->{ifaces}->{vmbr3} = {
|
|
type => 'bridge',
|
|
method => 'manual',
|
|
families => ['inet'],
|
|
bridge_stp => 'off',
|
|
bridge_fd => 0,
|
|
bridge_ports => 'vxlan3',
|
|
bridge_vlan_aware => 'yes',
|
|
bridge_vids => '2-10',
|
|
autostart => 1
|
|
};
|
|
|
|
my $vmbr123_part = <<"PART";
|
|
auto vmbr1
|
|
iface vmbr1 inet manual
|
|
bridge-ports vxlan1
|
|
bridge-stp off
|
|
bridge-fd 0
|
|
bridge-vlan-aware yes
|
|
bridge-vids 2-4094
|
|
mtu 1400
|
|
|
|
auto vmbr2
|
|
iface vmbr2 inet manual
|
|
bridge-ports vxlan2
|
|
bridge-stp off
|
|
bridge-fd 0
|
|
|
|
auto vmbr3
|
|
iface vmbr3 inet manual
|
|
bridge-ports vxlan3
|
|
bridge-stp off
|
|
bridge-fd 0
|
|
bridge-vlan-aware yes
|
|
bridge-vids 2-10
|
|
PART
|
|
chomp $vmbr123_part;
|
|
|
|
$config->{ifaces}->{vxlan3} = {
|
|
type => 'vxlan',
|
|
method => 'manual',
|
|
families => ['inet'],
|
|
'vxlan-id' => 3,
|
|
'vxlan-remoteip' => [$remoteip1, $remoteip2],
|
|
'bridge-access' => 3,
|
|
autostart => 1
|
|
};
|
|
|
|
my $vx = $config->{ifaces}->{vxlan2};
|
|
$vx->{'bridge-learning'} = 'off';
|
|
$vx->{'bridge-arp-nd-suppress'} = 'on';
|
|
$vx->{'bridge-unicast-flood'} = 'off';
|
|
$vx->{'bridge-multicast-flood'} = 'off';
|
|
my $vxlan123_part = $vxlan12_part ."\n" . <<"PART";
|
|
bridge-arp-nd-suppress on
|
|
bridge-learning off
|
|
bridge-multicast-flood off
|
|
bridge-unicast-flood off
|
|
|
|
auto vxlan3
|
|
iface vxlan3 inet manual
|
|
vxlan-id 3
|
|
vxlan-remoteip $remoteip1
|
|
vxlan-remoteip $remoteip2
|
|
bridge-access 3
|
|
PART
|
|
chomp $vxlan123_part;
|
|
|
|
expect load('loopback') . <<"CHECK";
|
|
source-directory interfaces.d
|
|
|
|
iface eth0 inet manual
|
|
|
|
$eth1_part
|
|
|
|
auto eth2
|
|
iface eth2 inet manual
|
|
|
|
auto eth3
|
|
iface eth3 inet manual
|
|
|
|
iface eth4 inet manual
|
|
|
|
iface eth5 inet manual
|
|
|
|
$bond0_part
|
|
|
|
$vmbr0_part
|
|
|
|
$vmbr123_part
|
|
|
|
$vxlan123_part
|
|
|
|
CHECK
|
|
|
|
#
|
|
# Now add vlans on all types of interfaces: vmbr1, bond0 and eth1
|
|
#
|
|
|
|
$config->{ifaces}->{'vmbr1.100'} = {
|
|
type => 'vlan',
|
|
mtu => 1300,
|
|
method => 'manual',
|
|
families => ['inet'],
|
|
autostart => 1
|
|
};
|
|
|
|
$config->{ifaces}->{'bond0.100'} = {
|
|
type => 'vlan',
|
|
mtu => 1300,
|
|
method => 'manual',
|
|
families => ['inet'],
|
|
'vlan-protocol' => '802.1ad',
|
|
autostart => 1
|
|
};
|
|
|
|
$config->{ifaces}->{'bond0.100.10'} = {
|
|
type => 'vlan',
|
|
mtu => 1300,
|
|
method => 'manual',
|
|
families => ['inet'],
|
|
autostart => 1
|
|
};
|
|
|
|
$config->{ifaces}->{'eth1.100'} = {
|
|
type => 'vlan',
|
|
mtu => 1400,
|
|
method => 'manual',
|
|
families => ['inet'],
|
|
autostart => 1
|
|
};
|
|
|
|
$config->{ifaces}->{'vmbr4'} = {
|
|
mtu => 1200,
|
|
type => 'bridge',
|
|
method => 'manual',
|
|
families => ['inet'],
|
|
bridge_stp => 'off',
|
|
bridge_fd => 0,
|
|
bridge_ports => 'bond0.100',
|
|
autostart => 1
|
|
};
|
|
|
|
$config->{ifaces}->{'vmbr5'} = {
|
|
mtu => 1100,
|
|
type => 'bridge',
|
|
method => 'manual',
|
|
families => ['inet'],
|
|
bridge_stp => 'off',
|
|
bridge_fd => 0,
|
|
bridge_ports => 'vmbr4.99',
|
|
autostart => 1
|
|
};
|
|
|
|
$config->{ifaces}->{vmbr6} = {
|
|
ovs_mtu => 1400,
|
|
type => 'OVSBridge',
|
|
ovs_ports => 'bond1 ovsintvlan',
|
|
method => 'manual',
|
|
families => ['inet'],
|
|
autostart => 1
|
|
};
|
|
|
|
$config->{ifaces}->{bond1} = {
|
|
ovs_mtu => 1300,
|
|
type => 'OVSBond',
|
|
ovs_bridge => 'vmbr6',
|
|
ovs_bonds => 'eth4 eth5',
|
|
ovs_options => 'bond_mode=active-backup',
|
|
method => 'manual',
|
|
families => ['inet'],
|
|
autostart => 1
|
|
};
|
|
|
|
$config->{ifaces}->{ovsintvlan} = {
|
|
ovs_mtu => 1300,
|
|
type => 'OVSIntPort',
|
|
ovs_bridge => 'vmbr6',
|
|
ovs_options => 'tag=14',
|
|
method => 'manual',
|
|
families => ['inet'],
|
|
autostart => 1
|
|
};
|
|
|
|
expect load('loopback') . <<"CHECK";
|
|
source-directory interfaces.d
|
|
|
|
iface eth0 inet manual
|
|
|
|
$eth1_part
|
|
|
|
auto eth2
|
|
iface eth2 inet manual
|
|
|
|
auto eth3
|
|
iface eth3 inet manual
|
|
|
|
auto eth4
|
|
iface eth4 inet manual
|
|
|
|
auto eth5
|
|
iface eth5 inet manual
|
|
|
|
auto eth1.100
|
|
iface eth1.100 inet manual
|
|
mtu 1400
|
|
|
|
auto ovsintvlan
|
|
iface ovsintvlan inet manual
|
|
ovs_type OVSIntPort
|
|
ovs_bridge vmbr6
|
|
ovs_mtu 1300
|
|
ovs_options tag=14
|
|
|
|
$bond0_part
|
|
|
|
auto bond1
|
|
iface bond1 inet manual
|
|
ovs_bonds eth4 eth5
|
|
ovs_type OVSBond
|
|
ovs_bridge vmbr6
|
|
ovs_mtu 1300
|
|
ovs_options bond_mode=active-backup
|
|
|
|
auto bond0.100
|
|
iface bond0.100 inet manual
|
|
mtu 1300
|
|
vlan-protocol 802.1ad
|
|
|
|
auto bond0.100.10
|
|
iface bond0.100.10 inet manual
|
|
mtu 1300
|
|
|
|
$vmbr0_part
|
|
|
|
$vmbr123_part
|
|
|
|
auto vmbr4
|
|
iface vmbr4 inet manual
|
|
bridge-ports bond0.100
|
|
bridge-stp off
|
|
bridge-fd 0
|
|
mtu 1200
|
|
|
|
auto vmbr5
|
|
iface vmbr5 inet manual
|
|
bridge-ports vmbr4.99
|
|
bridge-stp off
|
|
bridge-fd 0
|
|
mtu 1100
|
|
|
|
auto vmbr6
|
|
iface vmbr6 inet manual
|
|
ovs_type OVSBridge
|
|
ovs_ports bond1 ovsintvlan
|
|
ovs_mtu 1400
|
|
|
|
auto vmbr1.100
|
|
iface vmbr1.100 inet manual
|
|
mtu 1300
|
|
|
|
$vxlan123_part
|
|
|
|
CHECK
|
|
|
|
#
|
|
# Now check the new config for idempotency:
|
|
#
|
|
|
|
save('if', w());
|
|
r(load('if'));
|
|
expect load('if');
|
|
|
|
#
|
|
# Check a brbase with an ipv6 address on eth1
|
|
#
|
|
|
|
r(load('brbase'));
|
|
|
|
my $ip = 'fc05::2';
|
|
my $nm = '112';
|
|
my $gw = 'fc05::1';
|
|
|
|
$config->{ifaces}->{eth1} = {
|
|
type => 'eth',
|
|
method6 => 'static',
|
|
address6 => $ip,
|
|
netmask6 => $nm,
|
|
gateway6 => $gw,
|
|
families => ['inet6'],
|
|
autostart => 1
|
|
};
|
|
|
|
expect load('loopback') . <<"CHECK";
|
|
source-directory interfaces.d
|
|
|
|
iface eth0 inet manual
|
|
|
|
auto eth1
|
|
iface eth1 inet6 static
|
|
address $ip/$nm
|
|
gateway $gw
|
|
|
|
iface eth2 inet manual
|
|
|
|
iface eth3 inet manual
|
|
|
|
iface eth4 inet manual
|
|
|
|
iface eth5 inet manual
|
|
|
|
auto vmbr0
|
|
iface vmbr0 inet static
|
|
address 10.0.0.2/24
|
|
gateway 10.0.0.1
|
|
bridge-ports eth0
|
|
bridge-stp off
|
|
bridge-fd 0
|
|
|
|
CHECK
|
|
|
|
save('if', w());
|
|
r(load('if'));
|
|
expect load('if');
|
|
|
|
1;
|