<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=Content-Type content="text/html; charset=us-ascii">
<META content="MSHTML 6.00.2900.2802" name=GENERATOR></HEAD>
<BODY>
<DIV><FONT face=Arial size=2><SPAN class=392022513-22022006>Hi
Fab,</SPAN></FONT></DIV>
<DIV><FONT face=Arial size=2><SPAN
class=392022513-22022006></SPAN></FONT> </DIV>
<DIV><FONT face=Arial size=2><SPAN class=392022513-22022006>When trying to run
windows 2003 server on a Microsoft virtual machine we have found out that there
is one problem that prevents IPOIB from running.</SPAN></FONT></DIV>
<DIV><FONT face=Arial size=2><SPAN
class=392022513-22022006></SPAN></FONT> </DIV>
<DIV><FONT face=Arial size=2><SPAN class=392022513-22022006>The problem as you
can guess is related to the way MAC addresses are being handled. On such a
machine, a fake Mac addresses is being created and it is later used for
communication (one MAC per guest OS). However although this packets return to
the correct computer, IPOIB doesn't restore their correct dest MAC and
therefore pinging to a remote host is impossible.</SPAN></FONT></DIV>
<DIV><FONT face=Arial size=2><SPAN
class=392022513-22022006></SPAN></FONT> </DIV>
<DIV><FONT face=Arial size=2><SPAN class=392022513-22022006>In order to solve
this problem there is a need to create a mechanism that will allow the IPOIB
driver to correct the MAC addresses of packets based on their IP
addresses.</SPAN></FONT></DIV>
<DIV><FONT face=Arial size=2><SPAN
class=392022513-22022006></SPAN></FONT> </DIV>
<DIV><FONT face=Arial size=2><SPAN class=392022513-22022006>It seems that the
best way to do this is to have a "static" table of IP's and MAC addresses and to
check every IP packet as well as every ARP reply. We have done such an
experiment and it did seems to work.</SPAN></FONT></DIV>
<DIV><FONT face=Arial size=2><SPAN
class=392022513-22022006></SPAN></FONT> </DIV>
<DIV><FONT face=Arial size=2><SPAN class=392022513-22022006>We are still looking
for a way to configure the table of guest OS and their IPs and MACs. One way to
achieve this is simply having a static table that will be entered through some
file. Although this is the simplest way, it has an obvious disadvantage (the
need to manually configure the machine). A different way is to find some
configuration API's that the remote machine has, while the last possibility is
trying to find the information by sniffing for packets (the way that an Ethernet
switch does things).</SPAN></FONT></DIV>
<DIV><FONT face=Arial size=2><SPAN
class=392022513-22022006></SPAN></FONT> </DIV>
<DIV><FONT face=Arial size=2><SPAN class=392022513-22022006>One bug that I have
already found is that if a broadcast packet is sent for example an ARP
request, we send the packet as a multicast, and we also receive the packet
ourselves, and later we send this packet to NDIS. This is not the correct
behavior (assuming we are emulating Ethernet behavior) and we should remove this
packets.</SPAN></FONT></DIV>
<DIV><FONT face=Arial size=2><SPAN
class=392022513-22022006></SPAN></FONT> </DIV>
<DIV><FONT face=Arial size=2><SPAN class=392022513-22022006>In the next week
I'll try to create a patch that will allow the virtual machine to work, I just
wanted to know what your opinion about this issue.</SPAN></FONT></DIV>
<DIV><FONT face=Arial size=2><SPAN
class=392022513-22022006></SPAN></FONT> </DIV>
<DIV><FONT face=Arial size=2><SPAN
class=392022513-22022006>Thanks</SPAN></FONT></DIV>
<DIV><FONT face=Arial size=2><SPAN
class=392022513-22022006>Tzachi</SPAN></FONT></DIV></BODY></HTML>