• Tom Tucker's avatar
    svc: Move the sockaddr information to svc_xprt · 9dbc240f
    Tom Tucker authored
    This patch moves the transport sockaddr to the svc_xprt
    structure.  Convenience functions are added to set and
    get the local and remote addresses of a transport from
    the transport provider as well as determine the length
    of a sockaddr.
    
    A transport is responsible for setting the xpt_local
    and xpt_remote addresses in the svc_xprt structure as
    part of transport creation and xpo_accept processing. This
    cannot be done in a generic way and in fact varies
    between TCP, UDP and RDMA. A set of xpo_ functions
    (e.g. getlocalname, getremotename) could have been
    added but this would have resulted in additional
    caching and copying of the addresses around.  Note that
    the xpt_local address should also be set on listening
    endpoints; for TCP/RDMA this is done as part of
    endpoint creation.
    
    For connected transports like TCP and RDMA, the addresses
    never change and can be set once and copied into the
    rqstp structure for each request. For UDP, however, the
    local and remote addresses may change for each request. In
    this case, the address information is obtained from the
    UDP recvmsg info and copied into the rqstp structure from
    there.
    
    A svc_xprt_local_port function was also added that returns
    the local port given a transport. This is used by
    svc_create_xprt when returning the port associated with
    a newly created transport, and later when creating a
    generic find transport service to check if a service is
    already listening on a given port.
    Signed-off-by: default avatarTom Tucker <tom@opengridcomputing.com>
    Acked-by: default avatarNeil Brown <neilb@suse.de>
    Reviewed-by: default avatarChuck Lever <chuck.lever@oracle.com>
    Reviewed-by: default avatarGreg Banks <gnb@sgi.com>
    Signed-off-by: default avatarJ. Bruce Fields <bfields@citi.umich.edu>
    9dbc240f
svcsock.c 54.4 KB