Skip to content
  • Sean Hefty's avatar
    RDMA/cm: fix loopback address support · 6f8372b6
    Sean Hefty authored
    
    
    The RDMA CM is intended to support the use of a loopback address
    when establishing a connection; however, the behavior of the CM
    when loopback addresses are used is confusing and does not always
    work, depending on whether loopback was specified by the server,
    the client, or both.
    
    The defined behavior of rdma_bind_addr is to associate an RDMA
    device with an rdma_cm_id, as long as the user specified a non-
    zero address.  (ie they weren't just trying to reserve a port)
    Currently, if the loopback address is passed to rdam_bind_addr,
    no device is associated with the rdma_cm_id.  Fix this.
    
    If a loopback address is specified by the client as the destination
    address for a connection, it will fail to establish a connection.
    This is true even if the server is listing across all addresses or
    on the loopback address itself.  The issue is that the server tries
    to translate the IP address carried in the REQ message to a local
    net_device address, which fails.  The translation is not needed in
    this case, since the REQ carries the actual HW address that should
    be used.
    
    Finally, cleanup loopback support to be more transport neutral.
    Replace separate calls to get/set the sgid and dgid from the
    device address to a single call that behaves correctly depending
    on the format of the device address.  And support both IPv4 and
    IPv6 address formats.
    
    Signed-off-by: default avatarSean Hefty <sean.hefty@intel.com>
    
    [ Fixed RDS build by s/ib_addr_get/rdma_addr_get/  - Roland ]
    
    Signed-off-by: default avatarRoland Dreier <rolandd@cisco.com>
    6f8372b6