[openib-general] Re: [PATCH] Opensm - fix PathRecord get --text follows this line--

Hal Rosenstock halr at voltaire.com
Wed Nov 30 05:48:24 PST 2005


On Wed, 2005-11-30 at 07:11, Yael Kalka wrote:
> During some tests I've noticed that in PathRecord queries the SA
> doesn't compare the packetLifeTime component, if relevant comp_mask is
> turned on. This patch fixes this.

Thanks. Applied. 

A couple of comments below.

-- Hal

> Signed-off-by:  Yael Kalka <yael at mellanox.co.il>
> 
> Index: opensm/osm_sa_path_record.c
> ===================================================================
> --- opensm/osm_sa_path_record.c	(revision 4231)
> +++ opensm/osm_sa_path_record.c	(working copy)
> @@ -175,8 +175,10 @@ __osm_pr_rcv_get_path_parms(
>    ib_api_status_t          status = IB_SUCCESS;
>    uint8_t                  mtu;
>    uint8_t                  rate;
> +  uint8_t                  pkt_life;
>    uint8_t                  required_mtu;
>    uint8_t                  required_rate;
> +  uint8_t                  required_pkt_life;
>    ib_net16_t               dest_lid;
>  
>    OSM_LOG_ENTER( p_rcv->p_log, __osm_pr_rcv_get_path_parms );
> @@ -510,10 +512,54 @@ __osm_pr_rcv_get_path_parms(
>      }
>    }
>  
> +  /* Verify the pkt_life_time */
> +  /* According to spec definition Table 171 PacketLifeTime description,

Is this IBA 1.1 (rather than 1.2) ?

> +     for loopback paths, packetLifeTime shall be zero. */
> +  if ( p_src_port == p_dest_port )
> +    /* This is loopback */
> +    pkt_life = 0;
> +  else
> +    pkt_life = OSM_DEFAULT_SUBNET_TIMEOUT;
> +
> +  /* we silently ignore cases where only the PktLife selector is defined */
> +  if ((comp_mask & IB_PR_COMPMASK_PKTLIFETIMESELEC) &&
> +      (comp_mask & IB_PR_COMPMASK_PKTLIFETIME))
> +  {
> +    required_pkt_life = ib_path_rec_pkt_life( p_pr );
> +    switch( ib_path_rec_pkt_life_sel( p_pr ) )
> +    {
> +    case 0:    /* must be greater than */
> +      if( pkt_life <= required_pkt_life )
> +        status = IB_NOT_FOUND;
> +      break;
> +
> +    case 1:    /* must be less than */
> +      if( pkt_life >= required_pkt_life )
> +        status = IB_NOT_FOUND;
> +      break;

For all the selector code (not just packet life time), the less than and
greater than comparisons include =. Is that right ?

> +    case 2:    /* exact match */
> +      if( pkt_life != required_pkt_life )
> +        status = IB_NOT_FOUND;
> +      break;
> +
> +    case 3:    /* smallest available */
> +      /* can't be disqualified by this one */
> +      break;
> +
> +    default:
> +      /* if we're here, there's a bug in ib_path_rec_pkt_life_sel() */
> +      CL_ASSERT( FALSE );
> +      status = IB_ERROR;
> +      break;
> +    }
> +  }
> +
>    p_parms->mtu = mtu;
>    p_parms->rate = rate;
>    p_parms->pkey = IB_DEFAULT_PKEY;
> -  p_parms->pkt_life = OSM_DEFAULT_SUBNET_TIMEOUT;
> +  /* the pkt_life */
> +  p_parms->pkt_life = pkt_life;
>    p_parms->sl = OSM_DEFAULT_SL;
>  
>   Exit:
> 




More information about the general mailing list