<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML xmlns="http://www.w3.org/TR/REC-html40" xmlns:v = 
"urn:schemas-microsoft-com:vml" xmlns:o = 
"urn:schemas-microsoft-com:office:office" xmlns:w = 
"urn:schemas-microsoft-com:office:word"><HEAD>
<META http-equiv=Content-Type content="text/html; charset=iso-8859-1">
<META content="MSHTML 6.00.6000.16525" name=GENERATOR><!--[if !mso]>
<STYLE>v\:* {
        BEHAVIOR: url(#default#VML)
}
o\:* {
        BEHAVIOR: url(#default#VML)
}
w\:* {
        BEHAVIOR: url(#default#VML)
}
.shape {
        BEHAVIOR: url(#default#VML)
}
</STYLE>
<![endif]-->
<STYLE>
<!--
 /* Font Definitions */
 @font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
 /* Style Definitions */
 p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman";}
a:link, span.MsoHyperlink
        {color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {color:blue;
        text-decoration:underline;}
span.EmailStyle17
        {mso-style-type:personal-reply;
        font-family:Arial;
        color:navy;}
@page Section1
        {size:8.5in 11.0in;
        margin:1.0in 1.25in 1.0in 1.25in;}
div.Section1
        {page:Section1;}
-->
</STYLE>
<!--[if gte mso 9]><xml>
 <o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
 <o:shapelayout v:ext="edit">
  <o:idmap v:ext="edit" data="1" />
 </o:shapelayout></xml><![endif]--></HEAD>
<BODY lang=EN-US vLink=blue link=blue bgColor=white>
<DIV><FONT face=Arial size=2>Hi Sean,</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2>The problem arises when the 
active Solaris client is sending a connection request to a 
passive OFED server instance. Solaris will set the hop_limit field to 
0xFF and will not expect or enable GRH routing. The subsequent exchange of 
RC messages are therefore silently dropped since one side expects 
GRH traffic and the other doesn't. </FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2>The active side seems to work ok for local only 
subnets so nothing needs to be changed there. </FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2>Here is an updated patch:</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT size=2><FONT face="Courier New">Signed-off-by: Jim L Hall 
<</FONT><A href="mailto:jhalljr@systemfabricworks.com"><FONT 
face="Courier New">jhalljr@systemfabricworks.com</FONT></A><FONT 
face="Courier New">><BR>---</FONT></FONT></DIV><FONT size=2>
<DIV><FONT face="Courier New"> drivers/infiniband/core/cm.c |   
10 ++++++++--<BR> 1 files changed, 8 insertions(+), 2 
deletions(-)</FONT></DIV>
<DIV><FONT face="Courier New"></FONT> </DIV>
<DIV><FONT face="Courier New">diff --git a/drivers/infiniband/core/cm.c 
b/drivers/infiniband/core/cm.c<BR>index d446998..25a77ec 100644<BR>--- 
a/drivers/infiniband/core/cm.c<BR>+++ b/drivers/infiniband/core/cm.c<BR>@@ 
-1095,7 +1095,10 @@ static void cm_format_paths_from_req(struct cm_req_msg 
*req_msg,<BR>        primary_path->dlid = 
req_msg->primary_local_lid;<BR>        
primary_path->slid = 
req_msg->primary_remote_lid;<BR>        
primary_path->flow_label = 
cm_req_get_primary_flow_label(req_msg);<BR>-       
primary_path->hop_limit = 
req_msg->primary_hop_limit;<BR>+       if 
(cm_req_get_primary_subnet_local(req_msg) == 
1)<BR>+               
primary_path->hop_limit = 1;<BR>+       
else<BR>+               
primary_path->hop_limit = 
req_msg->primary_hop_limit;<BR>        
primary_path->traffic_class = 
req_msg->primary_traffic_class;<BR>        
primary_path->reversible = 1;<BR>        
primary_path->pkey = req_msg->pkey;<BR>@@ -1116,7 +1119,10 @@ static void 
cm_format_paths_from_req(struct cm_req_msg 
*req_msg,<BR>                
alt_path->dlid = 
req_msg->alt_local_lid;<BR>                
alt_path->slid = 
req_msg->alt_remote_lid;<BR>                
alt_path->flow_label = 
cm_req_get_alt_flow_label(req_msg);<BR>-               
alt_path->hop_limit = 
req_msg->alt_hop_limit;<BR>+               
if (cm_req_get_alt_subnet_local(req_msg) == 
1)<BR>+                       
alt_path->hop_limit = 
1;<BR>+               
else<BR>+                       
alt_path->hop_limit = 
req_msg->alt_hop_limit;<BR>                
alt_path->traffic_class = 
req_msg->alt_traffic_class;<BR>                
alt_path->reversible = 
1;<BR>                
alt_path->pkey = req_msg->pkey;<BR></FONT></FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2>Thanks,</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2>- Jim H.</FONT></DIV>
<BLOCKQUOTE dir=ltr 
style="PADDING-RIGHT: 0px; PADDING-LEFT: 5px; MARGIN-LEFT: 5px; BORDER-LEFT: #000000 2px solid; MARGIN-RIGHT: 0px">
  <DIV style="FONT: 10pt arial">----- Original Message ----- </DIV>
  <DIV 
  style="BACKGROUND: #e4e4e4; FONT: 10pt arial; font-color: black"><B>From:</B> 
  <A title=sean.hefty@intel.com href="mailto:sean.hefty@intel.com">Sean 
  Hefty</A> </DIV>
  <DIV style="FONT: 10pt arial"><B>To:</B> <A 
  title=jhalljr@systemfabricworks.com 
  href="mailto:jhalljr@systemfabricworks.com">'Jim Hall'</A> ; <A 
  title=general@lists.openfabrics.org 
  href="mailto:general@lists.openfabrics.org">general@lists.openfabrics.org</A> 
  </DIV>
  <DIV style="FONT: 10pt arial"><B>Sent:</B> Monday, September 17, 2007 12:10 
  PM</DIV>
  <DIV style="FONT: 10pt arial"><B>Subject:</B> RE: [PATCH] core/cm: improve 
  request message interpretation of subnet local fields</DIV>
  <DIV><BR></DIV>
  <DIV class=Section1>
  <P class=MsoNormal><FONT face=Arial color=navy size=2><SPAN 
  style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial">(I don’t think this 
  made it to the mailng list, so re-posting.)<o:p></o:p></SPAN></FONT></P>
  <P class=MsoNormal><FONT face=Arial color=navy size=2><SPAN 
  style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial"><o:p> </o:p></SPAN></FONT></P>
  <P class=MsoNormal><FONT face=Arial color=navy size=2><SPAN 
  style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial">I don’t disagree with 
  the concept here, but can you explain the problem that you’re seeing?  Is 
  it that the path is assumed to be routed based on the hop_limit (set in 
  ib_init_ah_from_path)?  Are any changes needed for active side 
  processing?<o:p></o:p></SPAN></FONT></P>
  <P class=MsoNormal><FONT face=Arial color=navy size=2><SPAN 
  style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial"><o:p> </o:p></SPAN></FONT></P>
  <P class=MsoNormal><FONT face=Arial color=navy size=2><SPAN 
  style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial">Btw, I’d prefer 
  something more like:<o:p></o:p></SPAN></FONT></P>
  <P class=MsoNormal><FONT face=Arial color=navy size=2><SPAN 
  style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial"><o:p> </o:p></SPAN></FONT></P>
  <P class=MsoNormal><FONT face=Arial color=navy size=2><SPAN 
  style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial">if 
  (cm_req_get_primary_subnet_local… )<o:p></o:p></SPAN></FONT></P>
  <P class=MsoNormal><FONT face=Arial color=navy size=2><SPAN 
  style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial">            
  primary_path->hop_limit = 1;<o:p></o:p></SPAN></FONT></P>
  <P class=MsoNormal><FONT face=Arial color=navy size=2><SPAN 
  style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial">else<o:p></o:p></SPAN></FONT></P>
  <P class=MsoNormal><FONT face=Arial color=navy size=2><SPAN 
  style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial">            
  primary_path->hop_limit = 
  req_msg->primary_hop_limit;<o:p></o:p></SPAN></FONT></P>
  <P class=MsoNormal><FONT face=Arial color=navy size=2><SPAN 
  style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial"><o:p> </o:p></SPAN></FONT></P>
  <P class=MsoNormal><FONT face=Arial color=navy size=2><SPAN 
  style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial">(or ‘? :’ 
  equivalent), versus setting hop_limit, then overriding it in the common 
  case.  And I’m fine if we don’t keep the 
  comment.<o:p></o:p></SPAN></FONT></P>
  <P class=MsoNormal><FONT face=Arial color=navy size=2><SPAN 
  style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial"><o:p> </o:p></SPAN></FONT></P>
  <P class=MsoNormal><FONT face=Arial color=navy size=2><SPAN 
  style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial">- 
  Sean<o:p></o:p></SPAN></FONT></P>
  <P class=MsoNormal><FONT face=Arial color=navy size=2><SPAN 
  style="FONT-SIZE: 10pt; COLOR: navy; FONT-FAMILY: Arial"><o:p> </o:p></SPAN></FONT></P>
  <DIV 
  style="BORDER-RIGHT: medium none; PADDING-RIGHT: 0in; BORDER-TOP: medium none; PADDING-LEFT: 4pt; PADDING-BOTTOM: 0in; BORDER-LEFT: blue 1.5pt solid; PADDING-TOP: 0in; BORDER-BOTTOM: medium none">
  <DIV>
  <DIV class=MsoNormal style="TEXT-ALIGN: center" align=center><FONT 
  face="Times New Roman" size=3><SPAN style="FONT-SIZE: 12pt">
  <HR tabIndex=-1 align=center width="100%" SIZE=2>
  </SPAN></FONT></DIV>
  <P class=MsoNormal><B><FONT face=Tahoma size=2><SPAN 
  style="FONT-WEIGHT: bold; FONT-SIZE: 10pt; FONT-FAMILY: Tahoma">From:</SPAN></FONT></B><FONT 
  face=Tahoma size=2><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Tahoma"> Jim 
  Hall [mailto:jhalljr@systemfabricworks.com] <BR><B><SPAN 
  style="FONT-WEIGHT: bold">Sent:</SPAN></B> Monday, September 17, 2007 7:38 
  AM<BR><B><SPAN style="FONT-WEIGHT: bold">To:</SPAN></B> 
  general@openfabrics<BR><B><SPAN style="FONT-WEIGHT: bold">Cc:</SPAN></B> 
  Hefty, Sean<BR><B><SPAN style="FONT-WEIGHT: bold">Subject:</SPAN></B> [PATCH] 
  core/cm: improve request message interpertation of subnet local 
  fields</SPAN></FONT><o:p></o:p></P></DIV>
  <P class=MsoNormal><FONT face="Times New Roman" size=3><SPAN 
  style="FONT-SIZE: 12pt"><o:p> </o:p></SPAN></FONT></P>
  <DIV>
  <P class=MsoNormal><FONT face="Courier New" size=2><SPAN 
  style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">  When parsing a CMA 
  connect request message, if the subnet local is 1 
  </SPAN></FONT><o:p></o:p></P></DIV>
  <DIV>
  <P class=MsoNormal><FONT face="Courier New" size=2><SPAN 
  style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">(both nodes on same 
  subnet), then explicitly set the hop limit in 
  the corresponding</SPAN></FONT><o:p></o:p></P></DIV>
  <DIV>
  <P class=MsoNormal><FONT face="Courier New" size=2><SPAN 
  style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">path record to 1. This 
  avoids a Global/Local mis-configuration problem with Solaris 
  </SPAN></FONT><o:p></o:p></P></DIV>
  <DIV>
  <P class=MsoNormal><FONT face="Courier New" size=2><SPAN 
  style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">infinband CMA 
  sessions. </SPAN></FONT> <o:p></o:p></P></DIV>
  <DIV>
  <P class=MsoNormal><FONT face="Times New Roman" size=3><SPAN 
  style="FONT-SIZE: 12pt"> <o:p></o:p></SPAN></FONT></P></DIV>
  <DIV>
  <P class=MsoNormal><FONT face="Courier New" size=2><SPAN 
  style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">Signed-off-by: Jim L 
  Hall <</SPAN></FONT><FONT size=2><SPAN style="FONT-SIZE: 10pt"><A 
  href="mailto:jhalljr@systemfabricworks.com"><FONT face="Courier New"><SPAN 
  style="FONT-FAMILY: 'Courier New'">jhalljr@systemfabricworks.com</SPAN></FONT></A></SPAN></FONT><FONT 
  face="Courier New" size=2><SPAN 
  style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">><BR>---<BR> drivers/infiniband/core/cm.c 
  |   16 ++++++++++++++++<BR> 1 files changed, 16 insertions(+), 
  0 deletions(-)</SPAN></FONT><o:p></o:p></P></DIV>
  <DIV>
  <P class=MsoNormal><FONT face="Times New Roman" size=3><SPAN 
  style="FONT-SIZE: 12pt"> <o:p></o:p></SPAN></FONT></P></DIV>
  <DIV>
  <P class=MsoNormal><FONT face="Courier New" size=2><SPAN 
  style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">diff --git 
  a/drivers/infiniband/core/cm.c b/drivers/infiniband/core/cm.c<BR>index 
  d446998..3d8740c 100644<BR>--- a/drivers/infiniband/core/cm.c<BR>+++ 
  b/drivers/infiniband/core/cm.c<BR>@@ -1109,6 +1109,14 @@ static void 
  cm_format_paths_from_req(struct cm_req_msg 
  *req_msg,<BR>                
  cm_req_get_primary_local_ack_timeout(req_msg);<BR>        
  primary_path->packet_life_time -= (primary_path->packet_life_time > 
  0);</SPAN></FONT><o:p></o:p></P></DIV>
  <DIV>
  <P class=MsoNormal><FONT face="Times New Roman" size=3><SPAN 
  style="FONT-SIZE: 12pt"> <o:p></o:p></SPAN></FONT></P></DIV>
  <DIV>
  <P class=MsoNormal><FONT face="Courier New" size=2><SPAN 
  style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">+       
  if (cm_req_get_primary_subnet_local(req_msg) == 1) 
  {<BR>+<BR>+               
  /* At this point we know that both sides are on the 
  same<BR>+                
  * subnet, any hop limits above 1 don't make much 
  sense<BR>+                
  */<BR>+               
  primary_path->hop_limit = 1;<BR>+       
  }<BR>+<BR>        if 
  (req_msg->alt_local_lid) 
  {<BR>                
  memset(alt_path, 0, sizeof 
  *alt_path);<BR>                
  alt_path->dgid = req_msg->alt_local_gid;<BR>@@ -1129,6 +1137,14 @@ 
  static void cm_format_paths_from_req(struct cm_req_msg 
  *req_msg,<BR>                
  alt_path->packet_life_time 
  =<BR>                        
  cm_req_get_alt_local_ack_timeout(req_msg);<BR>                
  alt_path->packet_life_time -= (alt_path->packet_life_time > 
  0);<BR>+<BR>+               
  if (cm_req_get_alt_subnet_local(req_msg) == 1) 
  {<BR>+<BR>+                       
  /* At this point we know that both sides are on the 
  same<BR>+                        
  * subnet, any hop limits above 1 don't make much 
  sense<BR>+                        
  */<BR>+                       
  alt_path->hop_limit = 
  1;<BR>+               
  }<BR>        
  }<BR> }</SPAN></FONT><o:p></o:p></P></DIV>
  <DIV>
  <P class=MsoNormal><FONT face=Arial size=2><SPAN 
  style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"><BR></SPAN></FONT> <o:p></o:p></P></DIV></DIV></DIV></BLOCKQUOTE></BODY></HTML>