[ofa-general] Port space sharing in RDS

Jon Mason jon at opengridcomputing.com
Wed May 28 15:55:49 PDT 2008


During RDS init, rds_ib_init and rds_tcp_init will both individually bind to the
RDS port for all IP addresses.  Unfortunately, that will not work for iWARP for
2 major reasons.  

Firstly, the binding of a CM ID to IP address via rdma_bind_addr on INADDR_ANY
will cause the first caller to bind to all IP addresses/Devices (and the 
subsequent calls will fail).  So whichever module (IB or iWARP) that is called 
first will break the second (and cause the module loading to abort).  

Secondly, iWARP and the Linux stack must share the same port space.  If bound to
the same port, the RNIC will not be able to tell if the incoming RDS packet is 
for TCP or IB/iWARP RDS module.  It appears to be preferring the IB/iWARP RDS 
module and not passing the packet to the TCP RDS module.  Thus currently, iWARP 
adapters will not work if both TCP and IB are enabled in RDS.  

Regardless of whether iWARP support is separate or rolled into IB, these issues 
need to be resolved.  I am open to suggestions about how to go about correcting 
this.  One idea to correct the first issue, we can have the bind and all other 
device specific setup of both IB and iWARP handled by a single function which 
will then, based on node_type, handle the IB or iWARP case.  The second issue is
more complicated, as there is currently no way for the rdma_bind_addr to know if
the port is already in use and vice versa.  Obviously, we can make TCP/IWARP
inversely dependent on each other during compile time, but I'm not sure that is
a good long term strategy.

Thoughts?

Thanks,
Jon



More information about the general mailing list