[openib-general] [PATCH] RMPP: add Dual-sided RMPP support

Sean Hefty mshefty at ichips.intel.com
Tue Jul 18 10:55:27 PDT 2006


Jack Morgenstein wrote:
>>+static void ack_ds_ack(struct ib_mad_agent_private *agent,
>>+		       struct ib_mad_recv_wc *recv_wc)
>>+{
> 
> ....
> 
> 
>>+	rmpp_mad->rmpp_hdr.seg_num = 0;

This is the value sent on the wire in the header...

> 
> The seg_num value will be set to 1 within ib_post_send_mad/ib_send_rmpp_mad -- 
> see line 869 of mad_rmpp.c:
> 	if (rmpp_mad->rmpp_hdr.rmpp_type != IB_MGMT_RMPP_TYPE_DATA) {
> 		mad_send_wr->seg_num = 1;
> 		return IB_RMPP_RESULT_INTERNAL;
> 	}
> 
> In this case, the rmpp_type is NOT DATA, but is ACK, so seg_num will be set to 
> 1.

...and this is used to retrieve the correct payload segment sent with the MAD. 
(I _think_ it ends up being used in ib_get_payload(), but I'm not completely 
sure.)  You should see seg_num = 0 in the turn-around ACK with an analyzer or 
madeye.

> I also failed to see where the second side of the double-sided RMPP 
> transaction starts up (sending side).

Are you referring to the side that sent the request?  Assuming that's the case, 
then the existing code to reassemble the response was sufficient.  This is 
because we send an initial window size of 1 in our turn-around ACK, which is the 
assumed window size for other RMPP transfers.

- Sean




More information about the general mailing list