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

Klaus Darilion klaus.mailinglists at pernau.at
Mon Sep 3 15:47:06 CEST 2018


Not sure if this is relevant here: An OVS bridge automatically adjusts
its MTU to the smallest MTU of all childs. This adjusting is done
whenever an interface/port is added or removed. Ie adding an interface
with small MTU automatically lowers the MTU of the OVS bridge.

Hence, it actually does not make sense to set the MTU of a OVS bridge,
as the next time an port is added/removed it will be recalculated.

Klaus

Am 28.08.2018 um 12:02 schrieb Dennis Busch:
> 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
>>
> _______________________________________________
> pve-devel mailing list
> pve-devel at pve.proxmox.com
> https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel


More information about the pve-devel mailing list