<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=US-ASCII">
<META NAME="Generator" CONTENT="MS Exchange Server version 5.5.2654.45">
<TITLE>RE: geting remote and locale ip addresses</TITLE>
</HEAD>
<BODY>

<P><FONT SIZE=2>Hi Fab,</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>I have started looking at the implementation of this functionality in the IPOIB driver. It seems that the first thing that should be decided is the way that the IPOIB driver will expose some way to talk with other components (also from the user mode).</FONT></P>

<P><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>To me it seems that there are 4 ways to achieve this task:</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>1)     It seems to me that "Device Interface Classes" as they are called in the MSDN (search for this strings in MSDN in "titles only") are the way that MSDN recommends to do the task. (Do not confuse device interfaces with the interfaces that drivers can export in response to an IRP_MN_QUERY_INTERFACE request. That IRP is used to pass routine entry points between kernel-mode drivers.) On the other hand these functions don't seem to allow any way of custom connection and are therefore (probably) can not be used.</FONT></P>

<P><FONT SIZE=2>2)     Use the IRP_MN_QUERY_INTERFACE way. It seems that this way is used by our stack to pass interfaces from one component to another (for example the GUID_IB_AL_INTERFACE). I have two problems with this message: a) It seems that this can only be used from kernel mode. b) If I understand correctly one has to be a bus interface for this to work. (I'm not sure that the IPOIB is allowed to use such a device).</FONT></P>

<P><FONT SIZE=2>3)     Use Named device objects for communicating with user and kernel devices. Main disadvantage of this solution seems to be that if a user has opened the device, the device can not be disabled. The way I understand it there will always be applications that are using Winsock and therefore the driver will never go down.</FONT></P>

<P><FONT SIZE=2>4)     Use some "hack" mechanism: This might be using some UDP (or raw) message to send data, using "named" shared memory, and probably many other ideas. I fill that this should only be used if we fill that nothing else works.</FONT></P>

<P><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>If I remember well from the past, we thought about implementing the interface as the second type (interfaces that drivers can export in response to an IRP_MN_QUERY_INTERFACE). This has the drawback that it can not be used from user mode. This is fine with the SDP but will be a problem for DAPL and winsock direct. </FONT></P>

<P><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>Should we go on number 2? Or should we think about something else?</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>Thanks</FONT>
<BR><FONT SIZE=2>Tzachi</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>-----Original Message-----</FONT>
<BR><FONT SIZE=2>From: Tillier, Fabian [<A HREF="mailto:ftillier@silverstorm.com">mailto:ftillier@silverstorm.com</A>] </FONT>
<BR><FONT SIZE=2>Sent: Sunday, August 07, 2005 10:47 AM</FONT>
<BR><FONT SIZE=2>To: Tzachi Dar</FONT>
<BR><FONT SIZE=2>Cc: Gilad Shainer</FONT>
<BR><FONT SIZE=2>Subject: RE: geting remote and locale ip addresses</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>Hi Tzachi,</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>I haven't had a chance to do much on this front.  I've been too busy trying to get WSD up to par to get us into the SQL team's lab, as well as trying to get ready for the OpenIB workshop.</FONT></P>

<P><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>If you feel up to it, feel free to start implementing this functionality and send patches.</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>Thanks,</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>- Fab</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>-----Original Message-----</FONT>
<BR><FONT SIZE=2>From: Tzachi Dar [<A HREF="mailto:tzachid@mellanox.co.il">mailto:tzachid@mellanox.co.il</A>] </FONT>
<BR><FONT SIZE=2>Sent: Thursday, July 21, 2005 5:07 AM</FONT>
<BR><FONT SIZE=2>To: Tillier, Fabian</FONT>
<BR><FONT SIZE=2>Cc: openib-windows@openib.org</FONT>
<BR><FONT SIZE=2>Subject: geting remote and locale ip addresses</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>Hi Fabian,</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>We have talked about implementing ARP in ipoib in order to get the remote gid. Attached is some information that you have asked:</FONT></P>

<P><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>1)   Doing arp from user mode. See the function SendARP in the MSDN.</FONT>
<BR><FONT SIZE=2>2)   Getting locale IP addreses: see the function GetAdaptersAddresses. Please note that this function can return a physical address in the size of 8, that we can use as a port gid. </FONT></P>

<P><FONT SIZE=2>3)   The functions GetBestInterface and GetBestRoute can be used to select the ip address to use for creating a connection (outgoing).</FONT></P>

<P><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>Do you have an estimation of the time that this change will be ready?</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>Thanks</FONT>
<BR><FONT SIZE=2>Tzachi</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2> </FONT>
</P>

</BODY>
</HTML>