Document: FSC-0039=0A=
Version:  04=0A=
Date:     29-Sep-90=0A=
=0A=
=0A=
                     A Type-2 Packet Extension Proposal=0A=
                      Mark A. Howard 1:260/340@FidoNet=0A=
=0A=
 Status of this document:=0A=
 ------------------------=0A=
 This FSC suggests a proposed protocol for the FidoNet(r) community,=0A=
 and requests discussion and suggestions for improvements.  Distribution=0A=
 of this document is unlimited.=0A=
=0A=
 Fido and FidoNet are registered marks of Tom Jennings and Fido =
Software.=0A=
 FTS-0001 is a copyrighted work of Randy Bush.=0A=
=0A=
 Introduction=0A=
 ------------=0A=
 This document serves two major purposes.  The first is an attempt to =
define=0A=
 and document the Type-2 packet which is widely in use in FidoNet today.=0A=
 Although FTS-0001 defines the structure of a Type-2 packet, the natural=0A=
 evolution of our network, mostly with regards to addressing =
methodology,=0A=
 has made it necessary to utilize hitherto unused portions of the header=0A=
 to insert Zone and Point information.  Also, it has become apparent =
that=0A=
 some of the existing fields are not large enough to accomplish their=0A=
 original tasks.=0A=
=0A=
 The second is to propose a simple mechanism to allow FidoNet to begin =
to=0A=
 utilize advanced mail packing techniques.  It is quite apparent that =
while=0A=
 Type-2 has served us faithfully for some time now, the evolution of our=0A=
 network in terms of technical and physical complexity has caused us to=0A=
 consider more efficient and functional ways to pack mail.=0A=
=0A=
 It should be made clear that with the exception of the Capability Word,=0A=
 Capability Word Validation Copy, ProductCode(hi), and Revision(minor),=0A=
 which are proposed extensions to the Type-2 packet header, this FSC is=0A=
 an attempt to correctly document existing practices with regards to the=0A=
 insertion of zone and point info by at least three mail processors in=0A=
 use today.=0A=
=0A=
=0A=
 The Type-2 Header (Where's the Zone?)=0A=
 -------------------------------------=0A=
 Although FTS-0001 has recently been updated to reflect the use of some =
of=0A=
 the areas in the packed message header for zone data, at least two =
other=0A=
 methods for inserting the zone information have been adopted, making it=0A=
 necessary to provide support for both formats in all of the zone aware =
mail=0A=
 processors.  The end result is more code, and redundant information in =
the=0A=
 packet header.=0A=
=0A=
 This has presented a problem in logistics, as it is difficult to =
consider=0A=
 the project of updating mail processors using one type to use the =
other.=0A=
 As sufficient indentification is provided, in the form of the product =
code,=0A=
 to determine the expected location of the zone information, and because=0A=
 code already exists in most of the mail processors to overcome this, =
this=0A=
 proposal does not attempt to suggest that one method be used over the=0A=
 other, rather the intent is to attempt to document the extensions in =
use,=0A=
 and the products involved.=0A=
=0A=
 See the accompanying chart and cross-reference.=0A=
=0A=
=0A=
 The Product Code=0A=
 ----------------=0A=
 Based upon the current rate of requests for product codes from the =
FTSC,=0A=
 it is probable that the Product Code byte will not be large enough to=0A=
 accomodate all of the codes required.  While it is not reasonable to=0A=
 expect that all Type-2 processors will eventually check the hi-order =
byte=0A=
 proposed here, it is likely that 'current' mail processors will.  This=0A=
 can be nothing but benefical, as it will force users to upgrade their=0A=
 mail processors to a product which will as a minimum, support Type-2=0A=
 with Zone and Point extensions, and quite possibly, processors that =
will=0A=
 utilize more advanced mail packing techniques, making Type-2 extinct =
once=0A=
 and for all.=0A=
=0A=
=0A=
 The Capability Word  (How do we GET there from here?)=0A=
 -----------------------------------------------------=0A=
 Everybody would like to see more efficient and functional ways to pack =
and=0A=
 exchange mail.  Several Type-3 message bundle proposals exist, but none=0A=
 really address a problem which must be solved first.  The problem is =
that=0A=
 since FidoNet is a hobbyist network, no demands can be placed on any =
one=0A=
 sysop to upgrade or change their bundling software.  Because of this, =
it=0A=
 is necessary to consider strategies which allow for the existence of =
Type-2=0A=
 bundlers in the network topology.=0A=
=0A=
 Considerable advantages can be realized, however, between systems that=0A=
 consent to use advanced bundling techniques.  One way to do this is to=0A=
 simply send netmail to all of your connecting systems, saying "Hey, =
I've=0A=
 got a Type-3 bundler now, how about you?"  This could become quite=0A=
 tiresome, and does not represent much of an improvement on the current=0A=
 situation.=0A=
=0A=
 What would be desirable is a network that would 'upgrade itself'.  =
Given a=0A=
 situation where mail processors of various capabilities will exist in a=0A=
 network topology, the goal is to provide a mechanism whereby two links =
can=0A=
 determine and utilize the most efficient bundling method to use, in a=0A=
 manner transparent to the sysop.=0A=
=0A=
 For instance, let's say that the FTSC releases the Type-7 All New =
Singing=0A=
 and Dancing bundle format.  Well, your current version of SlingToss can=0A=
 only support Types 2, 3, and 5.  One of your downlinks gets a new =
version=0A=
 of MailMangle which can support Types 2, 3, 4, and 7.  Well, it is =
quite=0A=
 obvious that since you and he are exchanging 4 megs of mail each night,=0A=
 and it's an overseas call, that it would be in your interest to obtain =
a=0A=
 new version of SlingToss which can support Type 7.=0A=
=0A=
 Note that this is *optional*.  Because both processors can support =
Type-3,=0A=
 they will continue to exchange Type-3 mail quite happily, even though=0A=
 MailMangle is happily advertising the availability of Type-7.  Even =
your=0A=
 downlinks which are still using stone-age Type-2 processors will be =
fine,=0A=
 as SlingToss will always export Type-2 bundles when no higher =
capability=0A=
 can be determined.=0A=
=0A=
 So, after dashing off the check to the author, your new version of=0A=
 SlingToss comes in the mail!  You rush over to your system, and =
install it.=0A=
 The next time SlingToss exports mail to the MailMangle system, it says=0A=
 "Hey!  I can now support Type 2, 3, 5, and 7!  So, whattya got?"  This =
is=0A=
 no skin off MailMangle's nose, he's had Type-7 for quite a while, and =
he=0A=
 begins to export Type-7 bundles to SlingToss.  "It's about time.", he =
says.=0A=
=0A=
 Now, this scenario is made possible by implementing a 'Capability =
Word' in=0A=
 the present and future packet headers.  The Capability Update mechanism=0A=
 depends on several assumptions:=0A=
=0A=
 1)   Any Advanced Capability Bundler *MUST* be capable of receiving and=0A=
    faithfully processing Type-2 bundles.  Hopefully, the inbound =
packets=0A=
    will be in the new format proposed by this document, but then again,=0A=
    this is not an exact science.  What this means is that it is likely=0A=
    that some packets may arrive with the Capability Word (CW) set to 0.=0A=
    In this case, Type-2 is assumed, assuring compatibility.  The only=0A=
    caveat is that it is conceivable that some obscure mail processor=0A=
    uses the location proposed for the CW for other arcane purposes.  =
This=0A=
|    can detected through the CWValidation Copy, which is byte-swapped =
and=0A=
|    compared with the CW at that time.  If a mismatch is found, a CW of=0A=
|    type 0 is assumed, and a Type-2 bundling method is used.=0A=
=0A=
 2) An Advanced Capability Bundler, hereafter referred to as a Type-N=0A=
    Bundler, must have a method to store and maintain the node-by-node=0A=
    capability information.  This can be done many ways, and in fact=0A=
    several processors already have begun to maintain node information=0A=
    outside of that found in AREAS.BBS, mostly to implement pre-arranged=0A=
    alternate compression methods.  In a text configuration file, you=0A=
    might see the following:=0A=
=0A=
    ;       Address      Comp    Send  LastCW ; Comments=0A=
    Node    1:260/340    ZIP     Auto  7      ; Auto detect & upgrade=0A=
    Node    1:135/20     LZH     3     2,3,7  ; Always send Type-3=0A=
    Node    1:           ARC     2     0      ; Stone-Age processor=0A=
    Node    1:135/4      ---     Auto  7      ; Sent me netmail=0A=
    Node    1:           ---     0     0      ; Don't send CW=0A=
=0A=
    In this example, the fields are:=0A=
=0A=
    Address - downlink address.  Note that this is not necessarily=0A=
              relative to echomail, only, it is possible to append=0A=
              information to the node database as netmail packets are=0A=
              receieved from different addresses.=0A=
=0A=
    Comp    - desired mail compression method.=0A=
=0A=
    Send    - Auto - automatically determined maximum common packing=0A=
                     method to use.  Automatically update to LastCW=0A=
                     when packing.=0A=
=0A=
    LastCW  - Last CW received from remote system.=0A=
=0A=
=0A=
 3) A Type-N Bundle will always advertise it's capabilities in the CW=0A=
    regardless of the type being sent.  As shown in the above example,=0A=
    it allows Type-N processors to automatically track the capability=0A=
    of your system.  Again, in cases where a stone-age processor is=0A=
    being used, this field will be ignored, and in the unusual event=0A=
    that it is not ignored, and is somehow harmful to the far system,=0A=
    the Type-N processor can be configured to send a CW of 0.=0A=
=0A=
 The format of the Capability Word is designed to support up to 15 =
future=0A=
 bundle types, and is bit-mapped to facilitate the easy determination of=0A=
 the maximum common level supported between two nodes:=0A=
=0A=
                msb           Capability Word               lsb=0A=
 Node Supports  ------------FTSC Type Supported----------------=0A=
=0A=
                 U 16 15 14 13 12 11 10  9  8  7  6  5  4  3  2=0A=
=0A=
 2, 3, and 7     0  0  0  0  0  0  0  0  0  0  1  0  0  0  1  1=0A=
 2, 3, and 5     0  0  0  0  0  0  0  0  0  0  0  0  1  0  1  1=0A=
 2 (this FSC)    0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  1=0A=
 Stone Age**     0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0=0A=
                 ^=0A=
                 +--- Indicates UseNet RFC-822 capability=0A=
=0A=
                 ** - a mismatch in the CWValidation Copy also=0A=
                      produces a CW=3D0.=0A=
=0A=
 In this example, the Type-N bundler would first compare the remote CW=0A=
| and the byte-swapped remote CWValidation Copy, and check for a =
mismatch.=0A=
 Prior to the compare, the MSB of the CW's are masked, as this bit is=0A=
 reserved to indicate whether the mail processor is capable of also=0A=
 accepting UseNet RFC-822 bundles.  Following the MSB mask, and bit=0A=
 comparison, if they do not match, a remote CW of 0 is assumed.  If they=0A=
 match, the Type-N processor would AND the local and remote CW words,=0A=
 obtaining a CW expressing the Types which are in common to both =
systems.=0A=
 The most significant Type will be used, by default, but note that this=0A=
 assumes that new bundling Types will be increasingly more efficient or=0A=
 in some way more beneficial.=0A=
=0A=
 Because this may not always be the case, there should be a method =
provided,=0A=
 as illustrated above, to override the automatic upgrade should this =
become=0A=
 the case.=0A=
=0A=
 The MSB of the CW is used to indicate whether the mail processor can =
accept=0A=
 UseNet RFC-822 bundles or not.  It is a separate indicator, and not =
intended=0A=
 to be used as a part of the above comparison, however can be used to =
also=0A=
 advertise RFC-822 capability to other systems.  Since RFC-822 is 'set =
in=0A=
 stone', there is no need to assign more than one capability bit.=0A=
=0A=
 It might seem somewhat limiting to only consider the possibility of 15=0A=
 different future bundling methods, but it is my opinion that the =
careful=0A=
 use of a 'Sub-Type' byte in the packet header can allow for the =
variations=0A=
 on a single theme, and that proposals for new formats should be =
evaluated=0A=
 by the FTSC to determine whether sufficient benefit can be realized in=0A=
 the implementation of the given format, prior to assigning a new type=0A=
 code.=0A=
=0A=
=0A=
 Mailers=0A=
 -------=0A=
 It is quite clear to me that should this concept take hold, that the=0A=
 logical place to store node capability data is in the local nodelist=0A=
 database, or an index-associated data file.  As above, it is necessary=0A=
 to generate Type-2 packets for whatever purpose, unless it is known=0A=
 by prior association, that the far mailer can accept other types of=0A=
 packets.  It is also quite reasonable to assume that a nodelist flag=0A=
 could be assigned to advertise the CW for a given node, which the=0A=
 native mailer nodelist compiler could then immediately determine the=0A=
 preferred bundling method for any given node in FidoNet.=0A=
=0A=
 Another possibility would be to pass a capability advertisement in the=0A=
 extensible portion of a handshake protocol, which may or may not =
already=0A=
 exist in FidoNet.=0A=
=0A=
 The approach suggested previously in this document suggests the use of=0A=
 a text configuration file, but it is quite obvious that many benefits=0A=
 can be realized through the use of the nodelist, including the use of=0A=
 additional flags to indicate the preferred compression method, etc.=0A=
=0A=
=0A=
 Summary=0A=
 -------=0A=
 This document has been created in an attempt to define a method to =
allow=0A=
 the future expansion and enhancement of FidoNet technology mail =
processors=0A=
 and mailers, and in a way that is the least disruptive to existing mail=0A=
 operations.  The intent is to provide for an environment that is as =
open,=0A=
 and extensible as possible.=0A=
=0A=
 The mechanism described should allow many different types of processors=0A=
 (FTSC-registered) to exist in the network at once, and to provide an=0A=
 environment which is designed to operate at it's maximum efficiency=0A=
 wherever possible or practical.=0A=
=0A=
 Revision 2 of this document was produced to implement suggestions made=0A=
 primarily by Jan Vroonhof, who suggested the use of the CW Validation=0A=
 Copy.  Jan presented this idea in his FSC-0048, along with other =
concepts=0A=
 relating to the correct indentification and handling of zone and point=0A=
 addressing.   This document sanctions the improvements to the CW as=0A=
 recommended, but does not address or support the other extensions=0A=
 recommended in FSC-0048.=0A=
=0A=
=0A=
 Thanks=0A=
 ------=0A=
 To Ward Christensen, creator of XModem and BYE.=0A=
=0A=
    Tom Jennings, who started this whole mess.=0A=
=0A=
    Joaquim Homrighausen, for lots of good ideas, and motivation.  =
Here's=0A=
                          another Lamborghini to work on.=0A=
=0A=
    Wynn Wagner, Oliver McDonald, Roeland Meyer, Andrew Farmer, Claude=0A=
    Warren, Jan Vroonhof, Bob Hartman, and Vince Perriello, who all=0A=
    contributed in some way to the creation of this document, mostly=0A=
    through their messages in NET_DEV.=0A=
=0A=
=0A=
=0A=
 Type-2 Packet Format (proposed, but currently in use)=0A=
 -----------------------------------------------------=0A=
   Field    Ofs Siz Type  Description                Expected value(s)=0A=
   -------  --- --- ----  -------------------------- -----------------=0A=
   OrgNode  0x0   2 Word  Origination node address   0-65535=0A=
   DstNode    2   2 Word  Destination node address   1-65535=0A=
   Year       4   2  Int  Year packet generated      19??-2???=0A=
   Month      6   2  Int  Month  "        "          0-11 (0=3DJan)=0A=
   Day        8   2  Int  Day    "        "          1-31=0A=
   Hour       A   2  Int  Hour   "        "          0-23=0A=
   Min        C   2  Int  Minute "        "          0-59=0A=
   Sec        E   2  Int  Second "        "          0-59=0A=
   Baud      10   2  Int  Baud Rate (not in use)     ????=0A=
   PktVer    12   2  Int  Packet Version             Always 2=0A=
   OrgNet    14   2 Word  Origination net address    1-65535=0A=
   DstNet    16   2 Word  Destination net address    1-65535=0A=
   PrdCodL   18   1 Byte  FTSC Product Code     (lo) 1-255=0A=
 * PVMajor   19   1 Byte  FTSC Product Rev   (major) 1-255=0A=
   Password  1A   8 Char  Packet password            A-Z,0-9=0A=
 * QOrgZone  22   2  Int  Orig Zone (ZMailQ,QMail)   1-65535=0A=
 * QDstZone  24   2  Int  Dest Zone (ZMailQ,QMail)   1-65535=0A=
   Filler    26   2 Byte  Spare Change               ?=0A=
| * CapValid  28   2 Word  CW Byte-Swapped Valid Copy BitField=0A=
 * PrdCodH   2A   1 Byte  FTSC Product Code     (hi) 1-255=0A=
 * PVMinor   2B   1 Byte  FTSC Product Rev   (minor) 1-255=0A=
 * CapWord   2C   2 Word  Capability Word            BitField=0A=
 * OrigZone  2E   2  Int  Origination Zone           1-65535=0A=
 * DestZone  30   2  Int  Destination Zone           1-65535=0A=
 * OrigPoint 32   2  Int  Origination Point          1-65535=0A=
 * DestPoint 34   2  Int  Destination Point          1-65535=0A=
 * ProdData  36   4 Long  Product-specific data      Whatever=0A=
   PktTerm   3A   2 Word  Packet terminator          0000=0A=
=0A=
 * - extensions to FTS-0001=0A=
=0A=
 Ofs, Siz are in hex, other values are decimal.=0A=
=0A=
=0A=
 Zone/Point Aware Mail Processors (probably a partial list)=0A=
 ----------------------------------------------------------=0A=
   Prod=0A=
   Code Name - Uses QOrg/QDstZone Orig/DestZone Orig/DestPoint=0A=
   ---- ----------- ------------- ------------- --------------=0A=
   0x0C  FrontDoor  Reads/Updates      Yes           Yes=0A=
   0x1A  DBridge        ?????          Yes           Yes=0A=
   0x45  XRS        Reads/Updates      Yes           Yes=0A=
   0x29  QMail           Yes          ?????      Not point-aware=0A=
   0x35  ZMailQ          Yes          ?????      Not point-aware=0A=
   0x3F  TosScan    Reads/Updates      Yes           Yes=0A=
=0A=
=0A=
=0A=
=0A=
=0A=