]> git.proxmox.com Git - pve-common.git/blobdiff - test/etc_network_interfaces/t.create_network.pl
readme.dev: s/needed/required/ packages
[pve-common.git] / test / etc_network_interfaces / t.create_network.pl
index e4f15ac8ef19d71ff443ff5baf69a73d1d6ea294..bf5b4b6edcf6887a9000fe7da24f008862ecdfa5 100644 (file)
@@ -1,13 +1,44 @@
 save('proc_net_dev', <<'/proc/net/dev');
 eth0:
 eth1:
+eth2:
+eth3:
 /proc/net/dev
 
 r(load('brbase'));
 
+#
+# Variables used for the various interfaces:
+#
+
 my $ip = '192.168.0.2';
 my $nm = '255.255.255.0';
 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
+       netmask  255.255.255.0
+       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',
@@ -19,32 +50,331 @@ $config->{ifaces}->{eth1} = {
     autostart => 1
 };
 
-expect load('loopback') . <<"CHECK";
-source-directory interfaces.d
-
-iface eth0 inet manual
-
+my $eth1_part = <<"PART";
 auto eth1
 iface eth1 inet static
        address  $ip
        netmask  $nm
        gateway  $gw
+PART
+chomp $eth1_part;
 
-auto vmbr0
-iface vmbr0 inet static
-       address  10.0.0.2
-       netmask  255.255.255.0
-       gateway  10.0.0.1
-       bridge-ports eth0
+expect load('loopback') . <<"CHECK";
+source-directory interfaces.d
+
+iface eth0 inet manual
+
+$eth1_part
+
+iface eth2 inet manual
+
+iface eth3 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
+
+iface eth2 inet manual
+
+iface eth3 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
+
+iface eth2 inet manual
+
+iface eth3 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.50',
+    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.50
+       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
+
+iface eth2 inet manual
+
+iface eth3 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
+};
+
+expect load('loopback') . <<"CHECK";
+source-directory interfaces.d
+
+iface eth0 inet manual
+
+$eth1_part
+
+iface eth2 inet manual
+
+iface eth3 inet manual
+
+auto eth1.100
+iface eth1.100 inet manual
+       mtu 1400
+
+$bond0_part
+
+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 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';
@@ -61,7 +391,6 @@ $config->{ifaces}->{eth1} = {
     autostart => 1
 };
 
-
 expect load('loopback') . <<"CHECK";
 source-directory interfaces.d
 
@@ -73,6 +402,10 @@ iface eth1 inet6 static
        netmask  $nm
        gateway  $gw
 
+iface eth2 inet manual
+
+iface eth3 inet manual
+
 auto vmbr0
 iface vmbr0 inet static
        address  10.0.0.2