<!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.6000.16640" name=GENERATOR></HEAD>
<BODY>
<DIV><FONT face=Arial size=2><SPAN class=315522814-18012009>Several test were 
failed on sending UDP packets with MTU-like sizes.</SPAN></FONT></DIV>
<DIV><FONT face=Arial size=2><SPAN class=315522814-18012009>Fragmented UDP 
packets do not contain UDP header, except the first one.</SPAN></FONT></DIV>
<DIV><FONT face=Arial size=2><SPAN class=315522814-18012009>So, appropriate 
check was inserted.</SPAN></FONT></DIV>
<DIV><FONT face=Arial size=2><SPAN 
class=315522814-18012009></SPAN></FONT> </DIV>
<DIV><FONT face=Arial size=2><SPAN class=315522814-18012009>This bug was shown 
rarely (only when the last fragment was less than 8 bytes), because the 
following check always worked (by mistake):</SPAN></FONT></DIV>
<DIV><FONT face=Arial size=2><SPAN 
class=315522814-18012009></SPAN></FONT> </DIV>
<DIV><FONT face=Arial size=2><SPAN class=315522814-18012009>if( 
(p_udp_hdr->src_port != DHCP_PORT_CLIENT 
||<BR>  p_udp_hdr->dst_port != DHCP_PORT_SERVER) 
&&<BR>  (p_udp_hdr->src_port != DHCP_PORT_SERVER 
||<BR>  p_udp_hdr->dst_port != DHCP_PORT_CLIENT) 
)<BR> {<BR>  /* Not a DHCP packet. */<BR>  return 
NDIS_STATUS_PENDING;<BR> }</SPAN></FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2>Index: 
ipoib_port.c<BR>===================================================================<BR>--- 
ipoib_port.c (revision 3752)<BR>+++ ipoib_port.c (working copy)<BR>@@ 
-3763,6 +3763,15 @@<BR>   p_udp_hdr = 
(udp_hdr_t*)GetIpPayloadPtr(p_ip_hdr);<BR>  }<BR>  /* Get 
the UDP header and check the destination port numbers. 
*/<BR>+ <BR>+ if (p_ip_hdr->offset > 0) {<BR>+  /* 
This is a fragmented part of UDP packet<BR>+   * Only first packet 
will contain UDP header in such case<BR>+   * So, return if offset 
> 0<BR>+   */<BR>+   return 
NDIS_STATUS_PENDING;<BR>+ }<BR>+   <BR>  if( buf_len 
< sizeof(udp_hdr_t) )<BR>  {<BR>   IPOIB_PRINT_EXIT( 
TRACE_LEVEL_ERROR, IPOIB_DBG_ERROR</FONT></DIV></BODY></HTML>