<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=US-ASCII">
<TITLE>Message</TITLE>
<META content="MSHTML 6.00.2800.1458" name=GENERATOR></HEAD>
<BODY>
<DIV><SPAN class=211132411-30082004><FONT face=Arial size=2>IPoIB defines no
aliasing in the mapping of IP multicast address into IPoIB HW
addresses.</FONT></SPAN></DIV>
<DIV><SPAN class=211132411-30082004><FONT face=Arial size=2>In Ethernet, there
is an aliasing, i.e. more than one IP address can map into the
same</FONT></SPAN></DIV>
<DIV><SPAN class=211132411-30082004><FONT face=Arial size=2>Ethernet multicast
MAC address. </FONT></SPAN></DIV>
<DIV><SPAN class=211132411-30082004><FONT face=Arial
size=2></FONT></SPAN> </DIV>
<DIV><SPAN class=211132411-30082004><FONT face=Arial size=2>In short: IP to
Ether takes 24 LSbits from the IP address</FONT></SPAN></DIV>
<DIV><SPAN class=211132411-30082004><FONT face=Arial
size=2>
IP to IB takes 28 LSbits from the IP address (which are essentially the whole
</FONT></SPAN></DIV>
<DIV><SPAN class=211132411-30082004><FONT face=Arial
size=2>
IP address, </FONT></SPAN><SPAN class=211132411-30082004><FONT face=Arial
size=2>the remaining 4 bits are "class D prefix").</FONT></SPAN></DIV>
<DIV><SPAN class=211132411-30082004><FONT face=Arial
size=2></FONT></SPAN> </DIV>
<DIV><SPAN class=211132411-30082004><FONT face=Arial size=2>The problem is that
the current IPoIB driver interfaces the Linux kernel as if it were
</FONT></SPAN></DIV>
<DIV><SPAN class=211132411-30082004><FONT face=Arial size=2>an Ethernet driver.
Therefore, the IP layer will not notify the net_device when a new
MC</FONT></SPAN></DIV>
<DIV><SPAN class=211132411-30082004><FONT face=Arial size=2>address is added if
it maps to the same MAC address. It will rather increment the
</FONT></SPAN></DIV>
<DIV><SPAN class=211132411-30082004><FONT face=Arial size=2>reference count of
the MAC address (net_device->mc_list->dmi_user) and won't call
</FONT></SPAN></DIV>
<DIV><SPAN class=211132411-30082004><FONT face=Arial
size=2>net_device->set_multicast_list(). </FONT></SPAN></DIV>
<DIV><SPAN class=211132411-30082004><FONT face=Arial size=2>Therefore, if a user
just adds itself to an IP MC group </FONT></SPAN><SPAN
class=211132411-30082004><FONT face=Arial size=2>(setsockopt with
</FONT></SPAN></DIV>
<DIV><SPAN class=211132411-30082004><FONT face=Arial size=2>IP_ADD_MEMBERSHIP),
then if the IPoIB driver already has this Ether MAC address</FONT></SPAN></DIV>
<DIV><SPAN class=211132411-30082004><FONT face=Arial size=2>in its filter
because of a previous registration to another IP MC group, then the
IPoIB driver</FONT></SPAN></DIV>
<DIV><SPAN class=211132411-30082004><FONT face=Arial size=2>will not get any
notification, and the user will not get registered to the
MCG.</FONT></SPAN></DIV>
<DIV><SPAN class=211132411-30082004><FONT face=Arial
size=2></FONT></SPAN> </DIV>
<DIV><SPAN class=211132411-30082004><FONT face=Arial size=2>I was wondering what
should be the solution for that in the current kernels (gen1) and
</FONT></SPAN></DIV>
<DIV><SPAN class=211132411-30082004><FONT face=Arial size=2>in future kernels
(gen2). </FONT></SPAN></DIV>
<DIV><SPAN class=211132411-30082004><FONT face=Arial
size=2></FONT></SPAN> </DIV>
<DIV><SPAN class=211132411-30082004><FONT face=Arial size=2>For gen2, will it be
possible to define a new medium for the IPoIB driver (not
ARPHRD_ETHER),</FONT></SPAN></DIV>
<DIV><SPAN class=211132411-30082004><FONT face=Arial size=2>such that
arp_mc_map() will map the entire IP address into the HW address ? Today it
looks</FONT></SPAN></DIV>
<DIV><SPAN class=211132411-30082004><FONT face=Arial size=2>impossible, because
arp_mc_map() just overrides bits 31:24 of the IP
address.<BR></FONT></SPAN></DIV>
<DIV><SPAN class=211132411-30082004><FONT face=Arial size=2>For gen1, what is
that we can do ? Is there a way to obtain such an event from the in_device
?</FONT></SPAN></DIV>
<DIV><SPAN class=211132411-30082004><FONT face=Arial size=2>If not, then I don't
see any clean escape. Is it possible to periodically check out
the in_device </FONT></SPAN></DIV>
<DIV><SPAN class=211132411-30082004><FONT face=Arial size=2>multicast list and
see if anything has changed ? would that cause any problem during the
transition</FONT></SPAN></DIV>
<DIV><SPAN class=211132411-30082004><FONT face=Arial size=2>periods ? Any other
idea of how to do that without a kernel patch ?</FONT></SPAN></DIV>
<DIV><SPAN class=211132411-30082004></SPAN><SPAN
class=211132411-30082004></SPAN><SPAN class=211132411-30082004><FONT face=Arial
size=2></FONT></SPAN> </DIV>
<DIV><SPAN class=211132411-30082004><FONT face=Arial size=2>-
Dror</FONT></SPAN></DIV>
<DIV><SPAN class=211132411-30082004><FONT face=Arial
size=2></FONT></SPAN> </DIV>
<DIV><SPAN class=211132411-30082004><FONT face=Arial size=2>* For
reference:</FONT></SPAN></DIV>
<DIV><SPAN class=211132411-30082004><FONT face=Arial size=2>
The algorithm for mapping IP mcast address to Ether </FONT><SPAN
class=211132411-30082004><FONT face=Arial size=2>mcast address is defined
in </FONT></SPAN></SPAN></DIV>
<DIV><SPAN class=211132411-30082004><SPAN class=211132411-30082004><FONT
face=Arial size=2> RFC 1113 section 6.4., and for IB in
draft-ietf-ipoib-ip-over-infiniband-07.txt </FONT></SPAN><SPAN
class=211132411-30082004><FONT face=Arial size=2>section
4.0.</FONT></SPAN></SPAN></DIV>
<DIV><SPAN class=211132411-30082004><SPAN class=211132411-30082004><FONT
face=Arial size=2></FONT></SPAN></SPAN> </DIV>
<DIV><SPAN class=211132411-30082004><SPAN class=211132411-30082004><FONT
face=Arial size=2></FONT></SPAN> </DIV></SPAN></BODY></HTML>