[pve-devel] [PATCH v3 pve-common 5/5] Inotify : add mtu option

Dennis Busch dennis.busch at stacktrace.de
Tue Aug 28 12:02:27 CEST 2018


Hello Alexandre,

this check is IMHO uneccessary as Debian inherites MTU from parent to 
child interfaces. That is AFAIK officially documente behavior, so this 
check makes it impossible to edit an interface that uses mtu definition 
only on parent devices.

Best regards

Dennis

stacktrace GmbH
Querstraße 3 | 96237 Ebersdorf

Amtsgericht Coburg, HRB 5043
Geschäftsführer: Dennis Busch | Jürgen Haas

Tel:     +49 9562 78 48 010
Mobil:   +49 171  12 62 761
E-Mail:  dennis.busch at stacktrace.de
De-Mail: dennis.busch at gmx.de-mail.de

Am 05.07.2018 um 02:56 schrieb Alexandre Derumier:
> also check if mtu value is lower than parent interface
> 
> fixme: vxlan interface should be 50bytes lower than outgoing interface
>         we need to find which interface is used (unicast/multicast/frr)
> ---
>   src/PVE/INotify.pm                              | 22 ++++++++++++++++++++++
>   test/etc_network_interfaces/t.create_network.pl | 10 ++++++++++
>   2 files changed, 32 insertions(+)
> 
> diff --git a/src/PVE/INotify.pm b/src/PVE/INotify.pm
> index f0f3144..5dd08c2 100644
> --- a/src/PVE/INotify.pm
> +++ b/src/PVE/INotify.pm
> @@ -753,6 +753,20 @@ my $extract_ovs_option = sub {
>       return $v;
>   };
>   
> +my $check_mtu = sub {
> +   my ($ifaces, $parent, $child) = @_;
> +
> +   die "check mtu : missing parent interface\n" if !$parent;
> +   die "check mtu : missing child interface\n" if !$child;
> +
> +   my $pmtu = $ifaces->{$parent}->{mtu} ? $ifaces->{$parent}->{mtu} : 1500;
> +   my $cmtu = $ifaces->{$child}->{mtu} ? $ifaces->{$child}->{mtu} : 1500;
> +
> +   die "interface '$parent' - mtu $pmtu is bigger than '$child' - mtu $cmtu\n"
> +                    if $pmtu gt $cmtu;
> +
> +};
> +
>   # config => {
>   #   ifaces => {
>   #     $ifname => {
> @@ -874,6 +888,7 @@ sub __read_etc_network_interfaces {
>   		    $id = $options_alternatives->{$id} if $options_alternatives->{$id};
>   
>   		    my $simple_options = {
> +			'mtu' => 1,
>   			'ovs_type' => 1,
>   			'ovs_options' => 1,
>   			'ovs_bridge' => 1,
> @@ -1301,6 +1316,8 @@ sub __write_etc_network_interfaces {
>   		} else {
>   		    die "interface '$p' is not defined as OVS port/bond\n";
>   		}
> +
> +		&$check_mtu($ifaces, $iface, $p);
>   	    }
>   	}
>       }
> @@ -1315,6 +1332,7 @@ sub __write_etc_network_interfaces {
>   		    if !$n;
>   		die "OVS bond '$iface' - wrong interface type on slave '$p' " .
>   		    "('$n->{type}' != 'eth')\n" if $n->{type} ne 'eth';
> +		&$check_mtu($ifaces, $iface, $p);
>   	    }
>   	}
>       }
> @@ -1330,6 +1348,7 @@ sub __write_etc_network_interfaces {
>   		    if !$n;
>   		die "bond '$iface' - wrong interface type on slave '$p' " .
>   		    "('$n->{type}' != 'eth')\n" if $n->{type} ne 'eth';
> +		&$check_mtu($ifaces, $iface, $p);
>   	    }
>   	}
>       }
> @@ -1356,6 +1375,7 @@ sub __write_etc_network_interfaces {
>   	if (defined($d->{'vxlan-svcnodeip'}) != defined($d->{'vxlan-physdev'})) {
>   	    die "iface $iface : vxlan-svcnodeip and vxlan-physdev must be define together\n";
>   	}
> +	#fixme : check if vxlan mtu is lower than 50bytes than physical interface where tunnel is going out
>       }
>   
>       # check vlan
> @@ -1374,6 +1394,7 @@ sub __write_etc_network_interfaces {
>   		die "vlan '$iface' - wrong interface type on parent '$p' " .
>   		    "('$n->{type}' != 'eth|bond|bridge' )\n";
>   	    }
> +	    &$check_mtu($ifaces, $iface, $p);
>   	}
>       }
>   
> @@ -1387,6 +1408,7 @@ sub __write_etc_network_interfaces {
>   		my $n = $ifaces->{$p};
>   		die "bridge '$iface' - unable to find bridge port '$p'\n"
>   		    if !$n;
> +		&$check_mtu($ifaces, $iface, $p);
>   		$bridgeports->{$p} = $iface;
>   	    }
>   	    $bridges->{$iface} = $d;
> diff --git a/test/etc_network_interfaces/t.create_network.pl b/test/etc_network_interfaces/t.create_network.pl
> index fda7237..8f4974a 100644
> --- a/test/etc_network_interfaces/t.create_network.pl
> +++ b/test/etc_network_interfaces/t.create_network.pl
> @@ -40,6 +40,7 @@ $config->{ifaces}->{eth3} = {
>   
>   $config->{ifaces}->{bond0} = {
>       type => 'bond',
> +    mtu => 1400,
>       slaves => 'eth2 eth3',
>       bond_mode => '802.3ad',
>       bond_xmit_hash_policy => 'layer3+4',
> @@ -50,6 +51,7 @@ $config->{ifaces}->{bond0} = {
>   };
>   
>   $config->{ifaces}->{vmbr1} = {
> +    mtu => 1400,
>       type => 'bridge',
>       method => 'manual',
>       families => ['inet'],
> @@ -117,6 +119,7 @@ $config->{ifaces}->{vxlan3} = {
>   
>   $config->{ifaces}->{'vmbr1.100'} = {
>       type => 'vlan',
> +    mtu => 1300,
>       method => 'manual',
>       families => ['inet'],
>       autostart => 1
> @@ -124,6 +127,7 @@ $config->{ifaces}->{'vmbr1.100'} = {
>   
>   $config->{ifaces}->{'bond0.100'} = {
>       type => 'vlan',
> +    mtu => 1300,
>       method => 'manual',
>       families => ['inet'],
>       autostart => 1
> @@ -131,6 +135,7 @@ $config->{ifaces}->{'bond0.100'} = {
>   
>   $config->{ifaces}->{'eth1.100'} = {
>       type => 'vlan',
> +    mtu => 1400,
>       method => 'manual',
>       families => ['inet'],
>       autostart => 1
> @@ -155,6 +160,7 @@ iface eth3 inet manual
>   
>   auto eth1.100
>   iface eth1.100 inet manual
> +	mtu 1400
>   
>   auto bond0
>   iface bond0 inet manual
> @@ -162,9 +168,11 @@ iface bond0 inet manual
>   	bond-miimon 100
>   	bond-mode 802.3ad
>   	bond-xmit-hash-policy layer3+4
> +	mtu 1400
>   
>   auto bond0.100
>   iface bond0.100 inet manual
> +	mtu 1300
>   
>   auto vmbr0
>   iface vmbr0 inet static
> @@ -182,6 +190,7 @@ iface vmbr1 inet manual
>   	bridge-fd 0
>   	bridge-vlan-aware yes
>   	bridge-vids 2-4094
> +	mtu 1400
>   
>   auto vmbr2
>   iface vmbr2 inet manual
> @@ -199,6 +208,7 @@ iface vmbr3 inet manual
>   
>   auto vmbr1.100
>   iface vmbr1.100 inet manual
> +	mtu 1300
>   
>   auto vxlan1
>   iface vxlan1 inet manual
> 



More information about the pve-devel mailing list