> and the tl;dr is that IPv6 supports per protocol, rather than
interface.

the ipv6 mtu is for situations where the host's ipv6 connection uses (at
some point down the line) ipv6 tunneling, for example 6in4 or 6rd.  The
ipv6 mtu is strictly a subset of the device mtu; it can never be more
than the device mtu.  For cases where the system has native ipv6
connectivity, typically the device mtu == ipv6 mtu, so the device mtu
should be set and the ipv6 mtu should not be changed.  Anytime the
device mtu is set, the ipv6 mtu is also changed to match it.

I think the ifupdown api is not actually in sync with what the ipv6 mtu
really means.  Part of this comes from the fact that ifupdown separates
conf into "inet" for ipv4 and "inet6" for ipv6, but mtu isn't actually a
networking layer setting; it's a link layer setting.

Within the inet/ipv4 and inet6/ipv6 constraints, one possibility is
instead of setting the ipv6 mtu for all cases of a "inet6" section,
ifupdown should restore the original behavior of setting the device mtu
for either a "inet" or "inet6" section mtu param, and an additional
"mtu6" param, valid only in the "inet6" section, should be added.  That
new param should be used to configure a lower ipv6 mtu for cases of ipv6
tunneling.  Something like:

iface eth1 inet manual
  mtu 1500

iface eth1 inet6 manual
  mtu 1500  # this is equivalent to the "inet" section mtu
  mtu6 1480

However, that's obviously an api change that may require other changes
to things that create ifupdown configuration.

Alternately, ifupdown could add logic to decide whether or not to change
the device mtu or the ipv6 mtu, e.g. pseudocode:

if (interface_does_not_have_inet_section)
  # the "inet6" mtu really meant device mtu, not ipv6 mtu
  device_mtu = inet6_section_mtu
else if (inet_section_has_mtu)
  device_mtu = inet_section_mtu
  ipv6_mtu = inet6_section_mtu
else
  # interface has inet config,
  # but mtu specified only in ipv6,
  # must infer meaning
  if (current_device_mtu < inet6_section_mtu)
    # assume large device mtu desired
    device_mtu = inet6_section_mtu
  else
    # assume ipv6 tunneling
    ipv6_mtu = inet6_section_mtu

-- 
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/1609367

Title:
  ifupdown does not set ipv6-only large mtu

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/ifupdown/+bug/1609367/+subscriptions

-- 
ubuntu-bugs mailing list
ubuntu-bugs@lists.ubuntu.com
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to