Re: [PATCH v2 07/11] IB/cm: Add network namespace support

Haggai Eran
2015-04-21T11:59:55Z

On 20/04/2015 20:06, Jason Gunthorpe wrote:
> On Mon, Apr 20, 2015 at 12:03:38PM +0300, Haggai Eran wrote:
>> From: Guy Shapiro <guysh-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
>>
>> Add namespace support to the IB-CM layer.
>
>> - Each CM-ID now has a network namespace it is associated with, assigned at
>> creation. This namespace is used as needed during subsequent action on the
>> CM-ID or related objects.
>
> There is really something weird about this layering. At the CM layer
> there should be no concept of an IP address, it only deals with GIDs.

Using the GID alone is not enough to distinguish between namespaces,
because you can have multiple IPoIB interfaces, all using the GID (and
possibly the same P_Key), and each belonging to a different namespace.

> So how can a CM object have a network namespace associated with it?

The listener rbtree's key is currently the service ID, for instance. Now
with namespaces, you can have multiple listeners listening on the same
service ID, so we need to use (service ID, namespace) as the key.

>
>> {
>> av->port = port;
>> av->pkey_index = wc->pkey_index;
>> ib_init_ah_from_wc(port->cm_dev->ib_device, port->port_num, wc,
>> - grh, &av->ah_attr, &init_net);
>> + grh, &av->ah_attr, net);
>
> There is something deeply wrong with adding network namespace
> arguments to verbs.
>
> For rocee the gid index clearly specifies the network namespace
> to use, so much of this should go away and have rocee get the
> namespace from the gid index.
>
> Ie in ib_init_ah_from_wc we have the ib_wc which contains the sgid
> index.

I don't see it there. The code seem to fetch the GID from the GRH.
Because the IP address in the source GID can be the same for different
namespaces, this is not enough to pick the right namespace.

Regards,
Haggai