• Maciej Żenczykowski's avatar
    net-ipv6: on device mtu change do not add mtu to mtu-less routes · fb56be83
    Maciej Żenczykowski authored
    Routes can specify an mtu explicitly or inherit the mtu from
    the underlying device - this inheritance is implemented in
    dst->ops->mtu handlers ip6_mtu() and ip6_blackhole_mtu().
    
    Currently changing the mtu of a device adds mtu explicitly
    to routes using that device.
    
    ie.
      # ip link set dev lo mtu 65536
      # ip -6 route add local 2000::1 dev lo
      # ip -6 route get 2000::1
      local 2000::1 dev lo  table local  src ...  metric 1024  pref medium
    
      # ip link set dev lo mtu 65535
      # ip -6 route get 2000::1
      local 2000::1 dev lo  table local  src ...  metric 1024  mtu 65535 pref medium
    
      # ip link set dev lo mtu 65536
      # ip -6 route get 2000::1
      local 2000::1 dev lo  table local  src ...  metric 1024  mtu 65536 pref medium
    
      # ip -6 route del local 2000::1
    
    After this patch the route entry no longer changes unless it already has an mtu.
    There is no need: this inheritance is already done in ip6_mtu()
    
      # ip link set dev lo mtu 65536
      # ip -6 route add local 2000::1 dev lo
      # ip -6 route add local 2000::2 dev lo mtu 2000
      # ip -6 route get 2000::1; ip -6 route get 2000::2
      local 2000::1 dev lo  table local  src ...  metric 1024  pref medium
      local 2000::2 dev lo  table local  src ...  metric 1024  mtu 2000 pref medium
    
      # ip link set dev lo mtu 65535
      # ip -6 route get 2000::1; ip -6 route get 2000::2
      local 2000::1 dev lo  table local  src ...  metric 1024  pref medium
      local 2000::2 dev lo  table local  src ...  metric 1024  mtu 2000 pref medium
    
      # ip link set dev lo mtu 1501
      # ip -6 route get 2000::1; ip -6 route get 2000::2
      local 2000::1 dev lo  table local  src ...  metric 1024  pref medium
      local 2000::2 dev lo  table local  src ...  metric 1024  mtu 1501 pref medium
    
      # ip link set dev lo mtu 65536
      # ip -6 route get 2000::1; ip -6 route get 2000::2
      local 2000::1 dev lo  table local  src ...  metric 1024  pref medium
      local 2000::2 dev lo  table local  src ...  metric 1024  mtu 65536 pref medium
    
      # ip -6 route del local 2000::1
      # ip -6 route del local 2000::2
    
    This is desirable because changing device mtu and then resetting it
    to the previous value shouldn't change the user visible routing table.
    Signed-off-by: default avatarMaciej Żenczykowski <maze@google.com>
    CC: Eric Dumazet <edumazet@google.com>
    Acked-by: default avatarHannes Frederic Sowa <hannes@stressinduktion.org>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    fb56be83
route.c 93 KB