<br><font size=2 face="sans-serif">Hal,</font>
<p><font size=2 face="sans-serif">My take is that there's no ambiguity.
Then again, I wrote it, so I would think that, right? :-)</font>
<p><font size=2 face="sans-serif">The idea is that we're trying to allow
*either* of the usual two options for specifying a string of stuff: (a)
Start out by giving the length; or (b) go until you reach a special mark
meaning "the end."</font>
<p><font size=2 face="sans-serif">The thing is it gets complicated when
there is only one packet. So take two cases: >1 packet, and ==1 packet.</font>
<p><font size=2 face="sans-serif">length >1 packet: </font>
<p><font size=2 face="sans-serif">-- PayloadLength <> 0 on 1st packet
means case (a). Just read until you get that many bytes, which may use
only part of the last packet. If the last packet isn't also marked last,
scream about inconsistency. </font>
<p><font size=2 face="sans-serif">-- PayloadLength=0 on first packet -
case (b). Read until you get a marked last packet. PayloadLength in that
last packet tells you how many are valid in that packet (zero in that case
-- I'm not sure; whole packet, I think).</font>
<p><font size=2 face="sans-serif">length ==1 packet meaning RMPPFlags.Last=1
and RMPPFlags.First=1 in the same packet. </font>
<p><font size=2 face="sans-serif">-- Interpretation is the same as the
"last packet" case above, i.e., RMPPFlags.Last=1 dominates the
interpretation.</font>
<p><font size=2 face="sans-serif">As far as I know, that's it. Any comments
from others?</font>
<p><font size=2 face="sans-serif">(This may not forward to openib-general,
since I'm not on that list; if it doesn't please forward.)</font>
<p><font size=2 face="sans-serif"><br>
Greg Pfister<br>
IBM Distinguished Engineer, Member IBM Academy of Technology<br>
IBM Systems & Technology Group, Server Technology & Architecture<br>
(512) 838-8338 | IBM tieline 678-8338 | FAX (512) 838-3418<br>
Sic Crustulum Frangitur</font>
<p>
<p>
<p>
<table width=100%>
<tr valign=top>
<td width=40%><font size=1 face="sans-serif"><b>Hal Rosenstock <halr@voltaire.com></b>
</font>
<p><font size=1 face="sans-serif">08/29/2005 08:14 AM</font>
<td width=59%>
<table width=100%>
<tr>
<td>
<div align=right><font size=1 face="sans-serif">To</font></div>
<td valign=top><font size=1 face="sans-serif">mgtwg@infinibandta.org</font>
<tr>
<td>
<div align=right><font size=1 face="sans-serif">cc</font></div>
<td valign=top><font size=1 face="sans-serif">openib-general@openib.org</font>
<tr>
<td>
<div align=right><font size=1 face="sans-serif">Subject</font></div>
<td valign=top><font size=1 face="sans-serif">[mgtwg] Payload Length in
first RMPP sent segment</font></table>
<br>
<table>
<tr valign=top>
<td>
<td></table>
<br></table>
<br>
<br><font size=2><tt>Hi,<br>
<br>
On the RMPP send side, while the Payload Length field in the last<br>
segment is clear that it indicates the number of valid bytes in<br>
Transferred Data, there seems to be some ambiguity in the optional<br>
Payload Length field in the first segment. I think it can work either<br>
way but I also think the intent was to reflect the valid bytes. Maybe it<br>
is this way to allow flexibility (choice in the implementation). What is<br>
the correct interpretation ? Should I enter a comment on this ? Thanks.<br>
<br>
-- Hal<br>
<br>
IBA 1.2 p.775 line 37<br>
<br>
In the first packet of an RMPP transfer (RMPPFlags.First=1),<br>
PayloadLength may indicate the sum of the lengths, in bytes, of the<br>
TransferredData fields in all packets of the entire multipacket<br>
response; this is done by using a nonzero value for PayloadLength in the<br>
first packet. <br>
<br>
IBA 1.2 p. 776 line 8<br>
<br>
In the last packet of an RMPP transfer (RMPPFlags.Last=1), PayloadLength<br>
indicates the number of valid bytes in the TransferredData field,<br>
allowing data transfers that are not an integral multiple of the length<br>
of the TransferredData field. A transfer terminates when either: (a) a<br>
packet containing RMPPFlags.Last=1 is received; or (b) a nonzero<br>
PayloadLength was given in the first packet of a transfer, and a packet<br>
is received containing sufficient TransferredData bytes to equal or<br>
exceed the PayloadLength originally provided. If case (b) occurs and<br>
RMPPFlags.Last is not 1 for that packet, the Receiver sends an ABORT<br>
packet with RMPPStatus of "Inconsistent Last and PayloadLength"
and<br>
terminates the transfer.<br>
<br>
<br>
</tt></font>
<p>
<p>