[Openib-windows] RE: IPoIB multicast support

Fab Tillier ftillier at silverstorm.com
Tue Nov 8 22:21:38 PST 2005


> From: Yossi Leybovich [mailto:sleybo at mellanox.co.il]
> Sent: Tuesday, November 08, 2005 10:20 AM
> 
> Fab
> 
> I found that when the IPoIB is asked to send multicast packet it does
> not create/join/query
> the Mcgroup but try to look for the endpoint in the endpoint list.(and
> of course not find it)

That's correct, IPoIB doesn't currently do send-only joins, but should.

> My patch check if the MAC is multicast mac and then if the lookup failed
> its
> issue join request to the SA and return with STATUS_PENDING
> (I still need to check if the send side need to join the Mcgroup or just
> query for the LID and use it in the endpnt AV)

I think it must be a send-only member, otherwise the switch forward the packets.

> In the mcast_cb I call send_resume to complete the send request.
> 
> This indeed solve the problem and the mcast test pass !!.

Thanks so much for putting the patch together.  This is great!

> I also add some Debug info that I found useful
> 
> NOTE:
> I did not handle MAC other then 01-00-5E-XX-XX-XX
> 1. because I still didn't understood what exactly the signature that use
> is for (i.e 0x06-0x6A)

Some of the NDIS WHQL tests explicitly add non-standard multicast addresses, so
the code does its best to handle that.  It currently uses the SilverStorm OUI in
the GID, but should probably use the OpenIB OUI (though I don't know what it
is).

> 2. I don't know if this will work against Linux IPoIB

I don't think we need to worry about non-standard multicast interop.  The
standard multicast stuff should work.

> We can start with this and then update if there is changes.

The patch looks good overall.  I'll apply tomorrow.  Comments below, too.

> Index: ulp/ipoib/kernel/ipoib_port.c
> ===================================================================
> --- ulp/ipoib/kernel/ipoib_port.c	(revision 712)
> +++ ulp/ipoib/kernel/ipoib_port.c	(working copy)
> +		if( mac.addr[0] == 1 && mac.addr[1] == 0 && mac.addr[2]
> == 0x5E )
> +		{
> +			cl_obj_unlock( &p_port->obj );
> +			ipoib_port_join_mcast(p_port, mac);

This needs to check the status of the join request in case we have a failure.
Also, we should probably change ipoib_port_join_mcast to take an extra parameter
to indicate full member vs. send-only.

- Fab




More information about the ofw mailing list