<!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.16587" name=GENERATOR></HEAD>
<BODY>
<DIV><SPAN class=809271911-27012009><FONT face=Arial color=#0000ff 
size=2>Applied in version 1891.</FONT></SPAN></DIV>
<DIV><SPAN class=809271911-27012009><FONT face=Arial color=#0000ff 
size=2></FONT></SPAN> </DIV>
<DIV><SPAN class=809271911-27012009><FONT face=Arial color=#0000ff 
size=2>Thanks</FONT></SPAN></DIV>
<DIV><SPAN class=809271911-27012009><FONT face=Arial color=#0000ff 
size=2>Tzachi</FONT></SPAN></DIV><BR>
<BLOCKQUOTE dir=ltr 
style="PADDING-LEFT: 5px; MARGIN-LEFT: 5px; BORDER-LEFT: #0000ff 2px solid; MARGIN-RIGHT: 0px">
  <DIV class=OutlookMessageHeader lang=en-us dir=ltr align=left>
  <HR tabIndex=-1>
  <FONT face=Tahoma size=2><B>From:</B> Alex Naslednikov <BR><B>Sent:</B> 
  Monday, January 26, 2009 12:11 PM<BR><B>To:</B> Alex Naslednikov; 
  ofw@lists.openfabrics.org<BR><B>Cc:</B> Tzachi Dar; Alex 
  Estrin<BR><B>Subject:</B> RE: [ofw] [IPoIB, IPoIB_CM] Bugfix for UDP 
  packets<BR></FONT><BR></DIV>
  <DIV></DIV>
  <DIV><SPAN class=852580910-26012009><FONT face=Arial color=#0000ff size=2>The 
  following patch is a more correct solution for IPoIB stack (not 
  IPoIB_CM)</FONT></SPAN></DIV>
  <DIV><SPAN class=852580910-26012009><FONT face=Arial color=#0000ff 
  size=2>Tzachi, please review</FONT></SPAN></DIV>
  <DIV><SPAN class=852580910-26012009><FONT face=Arial color=#0000ff 
  size=2>Index: 
  ipoib_port.c<BR>===================================================================<BR>--- 
  ipoib_port.c (revision 3777)<BR>+++ ipoib_port.c (working 
  copy)<BR>@@ -3403,6 +3403,18 @@<BR> <BR>  IPOIB_ENTER( 
  IPOIB_DBG_SEND );<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>+  cl_perf_start( 
  SendUdp );<BR>+  status = __send_gen( p_port, p_desc,0 
  );<BR>+  cl_perf_stop( &p_port->p_adapter->perf, SendUdp 
  );<BR>+  IPOIB_EXIT( IPOIB_DBG_SEND );<BR>+  return 
  status;<BR>+ }<BR>+ <BR>  if( !buf_len 
  )<BR>  {<BR>   cl_perf_start( QueryUdp );<BR>@@ 
  -3426,16 +3438,8 @@<BR>  {<BR>   p_udp_hdr = 
  (udp_hdr_t*)GetIpPayloadPtr(p_ip_hdr);<BR>  }<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></SPAN></DIV><BR>
  <BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px">
    <DIV class=OutlookMessageHeader lang=en-us dir=ltr align=left>
    <HR tabIndex=-1>
    <FONT face=Tahoma size=2><B>From:</B> Alex Naslednikov <BR><B>Sent:</B> 
    Sunday, January 18, 2009 4:37 PM<BR><B>To:</B> 
    ofw@lists.openfabrics.org<BR><B>Cc:</B> Tzachi Dar; Alex 
    Estrin<BR><B>Subject:</B> [ofw] [IPoIB, IPoIB_CM] Bugfix for UDP 
    packets<BR></FONT><BR></DIV>
    <DIV></DIV>
    <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></BLOCKQUOTE></BLOCKQUOTE></BODY></HTML>