[BXXPwg] proposal for 1:N interactions

Marshall Rose mrose+mtr.netnews@dbc.mtview.ca.us
Mon, 28 Aug 2000 17:33:02 -0700


This is a multi-part message in MIME format.

------=_NextPart_000_014B_01C01116.0400FC20
Content-Type: text/plain;
	charset="iso-8859-1"
Content-Transfer-Encoding: 7bit

here is what joe and i propose. please read it carefully and comment.

thanks,

/mtr

Reminder of the basics:

    - within a channel, orderly delivery of frames
    - between channels, no constraints on ordering of frames
    - a message number (formerly known as a serial number), may not be
      reused until an acknowledgement (of some kind) is received, and
      the msgno space is big (31 bits)


Change Summary:

    - frames are renamed:
        REQ split into MSG
        RSP split into RPY (positive), ANS/NULL (positive) and ERR
(negative)

    - 1:N interactions, where N>1, are handled by ANS:
        the ansno parameter allows interleaving of answers
        as soon as the more bit indicates that an ANS is complete, the ansno
        may be reused for that msgno

    - 1:0 interactions still require an acknowledgement from the remote
side:
        otherwise, we could run out of msgno's
        and it's probably needed for end-to-end correctness

    - common parameters are re-ordered:
        channel numbers appear in each frame (and are 31-bits wide)
        serial numbers now called message numbers (and are per-channel)

    - mime headers are now part of the payload


Possible Interactions:

        C: MSG
        S: RPY  ; message number may not be reused by C: until RPY received

or

        C: MSG
        S: ERR  ; message number may not be reused by C: until ERR received

or

        C: MSG
        S: ANS
        S: ANS
        S: ANS
        S: NUL  ; message number may not be reused by C: until NUL received
or

        C: MSG
        S: NUL  ; message number may not be reused by C: until NUL received

In other words, you send a MSG and get back one of:

        - a RPY
        - an ERR
        - 0 or more ANS, followed by a NUL


Revised ABNF:

    frame      = header payload trailer / mapping

    header     = msg / rpy / err / ans / nul

    msg        = "MSG" SP channel SP msgno SP more SP seqno SP size CR LF

    rpy        = "RPY" SP channel SP msgno SP more SP seqno SP size CR LF

    ans        = "ANS" SP channel SP msgno SP more SP seqno SP size
                                                      ansno         CR LF

    err        = "ERR" SP channel SP msgno SP more SP seqno SP size CR LF

    nul        = "NUL" SP channel SP msgno SP         seqno         CR LF


    channel    = 0..2147483647

    msgno      = 0..2147483647

    more       = "." / "*"

    seqno      = 0..4294967295

    size       = 0..2147483647

    ansno      = 0..2147483647


    mime       = <MIME Content {entity-headers} from RFC 2045>

    payload    = [mime] CR LF *OCTET


    trailer    = "END" CR LF


    mapping    = ;; each transport mapping may define additional frames

#######


------=_NextPart_000_014B_01C01116.0400FC20
Content-Type: text/html;
	charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=3DContent-Type content=3D"text/html; =
charset=3Diso-8859-1">
<META content=3D"MSHTML 5.50.4207.2601" name=3DGENERATOR>
<STYLE></STYLE>
</HEAD>
<BODY bgColor=3D#ffffff>
<DIV><FONT size=3D2>here is what joe and i propose. please read it =
carefully and=20
comment.</FONT></DIV>
<DIV><FONT size=3D2></FONT>&nbsp;</DIV>
<DIV><FONT size=3D2>thanks,</FONT></DIV>
<DIV><FONT size=3D2></FONT>&nbsp;</DIV>
<DIV><FONT size=3D2>/mtr</FONT></DIV>
<DIV><FONT size=3D2></FONT>&nbsp;</DIV>
<DIV><FONT size=3D2>Reminder of the basics:<BR>&nbsp;&nbsp;&nbsp;=20
<BR>&nbsp;&nbsp;&nbsp; - within a channel, orderly delivery of=20
frames<BR>&nbsp;&nbsp;&nbsp; - between channels, no constraints on =
ordering of=20
frames<BR>&nbsp;&nbsp;&nbsp; - a message number (formerly known as a =
serial=20
number), may not be<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; reused until an=20
acknowledgement (of some kind) is received,=20
and<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; the msgno space is big (31=20
bits)<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; <BR>Change=20
Summary:<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; - frames are=20
renamed:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; REQ split into=20
MSG<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RSP split into RPY =
(positive),=20
ANS/NULL (positive) and ERR (negative)<BR>&nbsp;&nbsp;&nbsp;=20
<BR>&nbsp;&nbsp;&nbsp; - 1:N interactions, where N&gt;1, are handled by=20
ANS:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; the ansno parameter =
allows=20
interleaving of answers<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; as =
soon as=20
the more bit indicates that an ANS is complete, the=20
ansno<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; may be reused for =
that=20
msgno<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; - 1:0 interactions =
still=20
require an acknowledgement from the remote=20
side:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; otherwise, we could =
run out=20
of msgno's<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; and it's =
probably=20
needed for end-to-end correctness<BR>&nbsp;&nbsp;&nbsp; =
<BR>&nbsp;&nbsp;&nbsp; -=20
common parameters are =
re-ordered:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=20
channel numbers appear in each frame (and are 31-bits=20
wide)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; serial numbers now =
called=20
message numbers (and are per-channel)</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT size=3D2>&nbsp;&nbsp;&nbsp; - mime headers are now part of =
the=20
payload</FONT></DIV>
<DIV>&nbsp;</DIV><FONT size=3D2>
<DIV><BR>Possible Interactions:</DIV>
<DIV>&nbsp;</DIV>
<DIV>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; C:=20
MSG<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; S: RPY&nbsp; ; message =
number=20
may not be reused by C: until RPY received</DIV>
<DIV>&nbsp;</DIV>
<DIV>or</DIV>
<DIV>&nbsp;</DIV>
<DIV>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; C:=20
MSG<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; S: ERR&nbsp; ; message =
number=20
may not be reused by C: until ERR received</DIV>
<DIV>&nbsp;</DIV>
<DIV>or</DIV>
<DIV>&nbsp;</DIV>
<DIV>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; C:=20
MSG<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; S:=20
ANS<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; S:=20
ANS<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; S:=20
ANS<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; S: NUL&nbsp; ; message =
number=20
may not be reused by C: until NUL received<BR>or</DIV>
<DIV>&nbsp;</DIV>
<DIV>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; C:=20
MSG<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; S: NUL&nbsp; ; message =
number=20
may not be reused by C: until NUL received</DIV>
<DIV>&nbsp;</DIV>
<DIV>In other words, you send a MSG and get back one =
of:<BR>&nbsp;&nbsp;&nbsp;=20
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - a=20
RPY<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - an=20
ERR<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - 0 or more ANS, =
followed by a=20
NUL</DIV>
<DIV>&nbsp;</DIV>
<DIV>&nbsp;&nbsp;&nbsp; <BR>Revised ABNF:<BR>&nbsp;&nbsp;&nbsp;=20
<BR>&nbsp;&nbsp;&nbsp; frame&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =3D header =
payload=20
trailer / mapping<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;=20
header&nbsp;&nbsp;&nbsp;&nbsp; =3D msg / rpy / err / ans /=20
nul<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;=20
msg&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =3D "MSG" SP channel SP =
msgno SP=20
more SP seqno SP size CR LF</DIV>
<DIV>&nbsp;</DIV>
<DIV>&nbsp;&nbsp;&nbsp; rpy&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =
=3D "RPY" SP=20
channel SP msgno SP more SP seqno SP size CR LF</DIV>
<DIV>&nbsp;</DIV>
<DIV>&nbsp;&nbsp;&nbsp; ans&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =
=3D "ANS" SP=20
channel SP msgno SP more SP seqno SP size=20
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs=
p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp=
;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=20
ansno&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CR=20
LF<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;=20
err&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =3D "ERR" SP channel SP =
msgno SP=20
more SP seqno SP size CR LF</DIV>
<DIV>&nbsp;</DIV>
<DIV>&nbsp;&nbsp;&nbsp; nul&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =
=3D "NUL" SP=20
channel SP msgno SP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=20
seqno&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CR LF</DIV>
<DIV>&nbsp;</DIV>
<DIV><BR>&nbsp;&nbsp;&nbsp; channel&nbsp;&nbsp;&nbsp; =3D=20
0..2147483647<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;=20
msgno&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =3D =
0..2147483647<BR>&nbsp;&nbsp;&nbsp;=20
<BR>&nbsp;&nbsp;&nbsp; more&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =3D "." =
/=20
"*"<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;=20
seqno&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =3D =
0..4294967295<BR>&nbsp;&nbsp;&nbsp;=20
<BR>&nbsp;&nbsp;&nbsp; size&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =3D=20
0..2147483647<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;=20
ansno&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =3D 0..2147483647</DIV>
<DIV>&nbsp;</DIV>
<DIV>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;=20
mime&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =3D &lt;MIME Content =
{entity-headers}=20
from RFC 2045&gt;<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;=20
payload&nbsp;&nbsp;&nbsp; =3D [mime] CR LF *OCTET<BR>&nbsp;&nbsp;&nbsp;=20
<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; trailer&nbsp;&nbsp;&nbsp; =
=3D "END"=20
CR LF<BR>&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; =
<BR>&nbsp;&nbsp;&nbsp;=20
mapping&nbsp;&nbsp;&nbsp; =3D ;; each transport mapping may define =
additional=20
frames<BR></DIV>
<DIV>#######</DIV>
<DIV>&nbsp;</DIV></FONT></BODY></HTML>

------=_NextPart_000_014B_01C01116.0400FC20--