<!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>