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, Yael Signed-off-by: Yael Kalka <[EMAIL PROTECTED]> 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, + 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; + + 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: _______________________________________________ openib-general mailing list openib-general@openib.org http://openib.org/mailman/listinfo/openib-general To unsubscribe, please visit http://openib.org/mailman/listinfo/openib-general