• Xin Long's avatar
    sctp: do state transition when receiving an icmp TOOBIG packet · 83696408
    Xin Long authored
    PLPMTUD will short-circuit the old process for icmp TOOBIG packets.
    This part is described in rfc8899#section-4.6.2 (PL_PTB_SIZE =
    PTB_SIZE - other_headers_len). Note that from rfc8899#section-5.2
    State Machine, each case below is for some specific states only:
    
      a) PL_PTB_SIZE < MIN_PLPMTU || PL_PTB_SIZE >= PROBED_SIZE,
         discard it, for any state
    
      b) MIN_PLPMTU < PL_PTB_SIZE < BASE_PLPMTU,
         Base -> Error, for Base state
    
      c) BASE_PLPMTU <= PL_PTB_SIZE < PLPMTU,
         Search -> Base or Complete -> Base, for Search and Complete states.
    
      d) PLPMTU < PL_PTB_SIZE < PROBED_SIZE,
         set pl.probe_size to PL_PTB_SIZE then verify it, for Search state.
    
    The most important one is case d), which will help find the optimal
    fast during searching. Like when pathmtu = 1392 for SCTP over IPv4,
    the search will be (20 is iphdr_len):
    
      1. probe with 1200 - 20
      2. probe with 1232 - 20
      3. probe with 1264 - 20
      ...
      7. probe with 1388 - 20
      8. probe with 1420 - 20
    
    When sending the probe with 1420 - 20, TOOBIG may come with PL_PTB_SIZE =
    1392 - 20. Then it matches case d), and saves some rounds to try with the
    1392 - 20 probe. But of course, PLPMTUD doesn't trust TOOBIG packets, and
    it will go back to the common searching once the probe with the new size
    can't be verified.
    Signed-off-by: default avatarXin Long <lucien.xin@gmail.com>
    Acked-by: default avatarMarcelo Ricardo Leitner <marcelo.leitner@gmail.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    83696408
transport.c 25.5 KB