[ofa-general] Re: [PATCH] core/cm: improve request message interpretation of subnet local fields

Jim Hall jhalljr at systemfabricworks.com
Mon Sep 17 11:07:38 PDT 2007


The issue is between the active CM (in this case Solaris) and passive OFED.
The SM doesn't look to be involved.

----- Original Message ----- 
From: "Sean Hefty" <mshefty at ichips.intel.com>
To: "Jim Hall" <jhalljr at systemfabricworks.com>
Cc: "Sean Hefty" <sean.hefty at intel.com>; <general at lists.openfabrics.org>
Sent: Monday, September 17, 2007 1:01 PM
Subject: Re: [ofa-general] Re: [PATCH] core/cm: improve request message 
interpretation of subnet local fields


>> 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.
>
> Is this an issue with the SM setting the hop_limit to 0xff or the active 
> CM?  Currently the ib_cm sets the local_subnet value to 1 on the active 
> side.  I have a patch that sets it based on the hop_limit in the path 
> record.  I'm trying to determine if a more complicated solution will be 
> needed for ib router support.  (Those changes can be separate if needed.)
>
>> The active side seems to work ok for local only subnets so nothing needs 
>> to be changed there.
>>  Here is an updated patch:
>>  When parsing a CMA connect request message, if the subnet local is 1
>>     (both nodes on same subnet), then explicitly set the hop limit in
>>     the corresponding path record to 1.
>>     This avoids a Global/Local mis-configuration problem with Solaris
>>     infinband CMA sessions.  Signed-off-by: Jim L Hall 
>> <jhalljr at systemfabricworks.com
>
> Acked-by: Sean Hefty <sean.hefty at intel.com>
>
>> <mailto:jhalljr at systemfabricworks.com>>
>> ---
>>  drivers/infiniband/core/cm.c |   10 ++++++++--
>>  1 files changed, 8 insertions(+), 2 deletions(-)
>>  diff --git a/drivers/infiniband/core/cm.c b/drivers/infiniband/core/cm.c
>> index d446998..25a77ec 100644
>> --- a/drivers/infiniband/core/cm.c
>> +++ b/drivers/infiniband/core/cm.c
>> @@ -1095,7 +1095,10 @@ static void cm_format_paths_from_req(struct 
>> cm_req_msg *req_msg,
>>         primary_path->dlid = req_msg->primary_local_lid;
>>         primary_path->slid = req_msg->primary_remote_lid;
>>         primary_path->flow_label = 
>> cm_req_get_primary_flow_label(req_msg);
>> -       primary_path->hop_limit = req_msg->primary_hop_limit;
>> +       if (cm_req_get_primary_subnet_local(req_msg) == 1)
>> +               primary_path->hop_limit = 1;
>> +       else
>> +               primary_path->hop_limit = req_msg->primary_hop_limit;
>>         primary_path->traffic_class = req_msg->primary_traffic_class;
>>         primary_path->reversible = 1;
>>         primary_path->pkey = req_msg->pkey;
>> @@ -1116,7 +1119,10 @@ static void cm_format_paths_from_req(struct 
>> cm_req_msg *req_msg,
>>                 alt_path->dlid = req_msg->alt_local_lid;
>>                 alt_path->slid = req_msg->alt_remote_lid;
>>                 alt_path->flow_label = 
>> cm_req_get_alt_flow_label(req_msg);
>> -               alt_path->hop_limit = req_msg->alt_hop_limit;
>> +               if (cm_req_get_alt_subnet_local(req_msg) == 1)
>> +                       alt_path->hop_limit = 1;
>> +               else
>> +                       alt_path->hop_limit = req_msg->alt_hop_limit;
>>                 alt_path->traffic_class = req_msg->alt_traffic_class;
>>                 alt_path->reversible = 1;
>>                 alt_path->pkey = req_msg->pkey;
>>
> 



More information about the general mailing list