• Xin Long's avatar
    sctp: add support for SCTP_REUSE_PORT sockopt · b0e9a2fe
    Xin Long authored
    This feature is actually already supported by sk->sk_reuse which can be
    set by socket level opt SO_REUSEADDR. But it's not working exactly as
    RFC6458 demands in section 8.1.27, like:
    
      - This option only supports one-to-one style SCTP sockets
      - This socket option must not be used after calling bind()
        or sctp_bindx().
    
    Besides, SCTP_REUSE_PORT sockopt should be provided for user's programs.
    Otherwise, the programs with SCTP_REUSE_PORT from other systems will not
    work in linux.
    
    To separate it from the socket level version, this patch adds 'reuse' in
    sctp_sock and it works pretty much as sk->sk_reuse, but with some extra
    setup limitations that are needed when it is being enabled.
    
    "It should be noted that the behavior of the socket-level socket option
    to reuse ports and/or addresses for SCTP sockets is unspecified", so it
    leaves SO_REUSEADDR as is for the compatibility.
    
    Note that the name SCTP_REUSE_PORT is somewhat confusing, as its
    functionality is nearly identical to SO_REUSEADDR, but with some
    extra restrictions. Here it uses 'reuse' in sctp_sock instead of
    'reuseport'. As for sk->sk_reuseport support for SCTP, it will be
    added in another patch.
    
    Thanks to Neil to make this clear.
    
    v1->v2:
      - add sctp_sk->reuse to separate it from the socket level version.
    v2->v3:
      - improve changelog according to Marcelo's suggestion.
    Acked-by: default avatarNeil Horman <nhorman@tuxdriver.com>
    Signed-off-by: default avatarXin Long <lucien.xin@gmail.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    b0e9a2fe
socket.c 239 KB