[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