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