home *** CD-ROM | disk | FTP | other *** search
- Document: FSC-0048
- Version: 001
- Date: 17-Jun-90
-
-
-
-
-
- A Proposed Type-2 Packet Extension
- Jan Vroonhof
- 2:281/1.12@fidonet
- June 17, 1990
-
-
-
-
-
- Status of this document:
-
- This FSC suggests a proposed protocol for the FidoNet(r) community,
- and requests discussion and suggestions for improvements.
- Distribution of this document is unlimited.
-
- Fido and FidoNet are registered marks of Tom Jennings and Fido
- Software.
-
-
-
- Purpose
-
- The final goal of this document is to become a widely used
- standardised extension to FTS-0001 like FTS-0006,0007 and 0008 are and
- provide and elegant way for switching to to a new bundling method
- without requiring major effort or breaking anything.
-
- ===============
-
- Prolog
-
- The main thing that needs stressing is that the additions covered by this
- document are FULLY (I repeat FULLY) BACKWARDS COMPATIBLE with FTS-0001
- (and other existing standards and practices in FidoNet and
- WhatEverOtherNets that I know of) in the sense that problems, that it
- still would create (e.g. zoneconflicts when dealing with a non
- compliant system) are already in the current system (FTS-0001). In
- short it it only correct some flaws in FTS-0001 WHITOUT generating new
- ones.
-
- In this Document I have tried to stay as much as possible on the paths
- of extisting practices. Therefor I think implementing the additions it
- proposes will not be to hard.
-
- ===============
-
-
- My thoughts about FSC-0039 and FST-0001 rev 12.
-
- The revision 12 of FTS-0001 introduced the term "(some impls)" to indicate
- that the some implementations used their own extensions to FTS-0001.
- The problem with this is that this info cannot be relied upon because
- there is no way to actually validate the data. One can only check
- wether these fields' values are in the range of valid values and hope
- for the best.
-
- Secondly FSC-0039 introduced the idea of having a bitfield (called the
- capability word) indicating wether extension data was valid and also
- supporting indicating the ability to support other non type 2
- packets, thus allowing for flexible migration towards type 3.
- It also documented the adression extension used by various programs.
-
- However FSC-0039 has two flaws:
-
- 1. One cannot be sure the bitfield is zero because other
- implementations might use this field for there own purposes.
- Therefor this document includes a second validation copy for the
- Capability Word (CW hereafter). This copy allows the FSC-xxxx
- compliant software to validate the CW by comparing the two. The
- change of some junk portraiting itself as a CW is therefor
- significantly reduced.
- 2. Although FSC-0039 provides a way to make packet headers 4D it is
- not backwards compatible. It there for cannot be used in FTS-0001
- sessions to unknown systems. Therefor FidoNet is still not
- totally 4D capabable. This is because while it implements fields
- for zone and pointnumber, a FTS-0001 compliant application is not
- required to look at these fields.
- When a point mails using these fields to implement it's 4D
- adress, a system only looking at the net/node info, as is required
- by FTS-0001 still sees it as it's bossnode, bringing about the
- obvious problems.
- This document provides a way for transparant pointhandling, making
- use of a technique already exploited by many mailers internally.
- This will allow for this document to be implemented and used to
- mailers not supporting it, while the danger that you are detected
- as the bossnode is eleminated.
- It does NOT provide full interzone backwards compatability but that
- is not needed as badly while problems are not yet that bad. Any
- measures to ensure backwards compatability on this side might harm
- communciations with non supporting system when the old system could
- handle the situation.
-
-
- | indicates extensions made by FTS-0001 rev 12 and
- : those made by this document and FSC-0039.
-
- Packet Header
- Offset
- dec hex
- .-----------------------------------------------.
- 0 0 | origNode (low order) | origNode (high order) |
- +-----------------------+-----------------------+
- 2 2 | destNode (low order) | destNode (high order) |
- +-----------------------+-----------------------+
- 4 4 | year (low order) | year (high order) |
- +-----------------------+-----------------------+
- 6 6 | month (low order) | month (high order) |
- +-----------------------+-----------------------+
- 8 8 | day (low order) | day (high order) |
- +-----------------------+-----------------------+
- 10 A | hour (low order) | hour (high order) |
- +-----------------------+-----------------------+
- 12 C | minute (low order) | minute (high order) |
- +-----------------------+-----------------------+
- 14 E | second (low order) | second (high order) |
- +-----------------------+-----------------------+
- 16 10 | baud (low order) | baud (high order) |
- +-----------------------+-----------------------+
- 18 12 | 0 | 2 | 0 | 0 |
- +-----------------------+-----------------------+
- 20 14 | origNet (low order) | origNet (high order) |
- : | Set to -1 if from point |
- +-----------------------+-----------------------+
- 22 16 | destNet (low order) | destNet (high order) |
- +-----------------------+-----------------------+
- | 24 18 | ProductCode (low ord) | Revision (Major) |
- | +-----------------------+-----------------------+
- | 26 1A | password |
- | | 8 bytes null padded |
- | +-----------------------+-----------------------+
- |: 34 22 | origZone (low order) | origzone (Highorder ) | }
- | +-----------------------+-----------------------+ } As in
- |: 36 24 | DestZone (low order) | DestZone (Highorder ) | } QMail
- : +-----------------------+-----------------------+
- : 38 26 | AuxNet (low order) | AuxNet (high order) |
- : +-----------------------+-----------------------+
- : 40 28 | CWvalidationCopy (hi) | CWvalidationCopy (low)|
- : +-----------------------+-----------------------+
- : 42 2A | ProductCode (high ord)| Revision (Minor) |
- : +-----------------------+-----------------------+
- : 44 2C | CapabilWord (low ord) | CapabilWord (high ord)|
- : +-----------------------+-----------------------+
- : 46 2E | origZone (low order) | origzone (Highorder ) | }
- : +-----------------------+-----------------------+ } As in
- : 48 30 | DestZone (High order) | DestZone (Highorder ) | } FD etc
- : +-----------------------+-----------------------+
- : +-----------------------+-----------------------+
- : 50 32 | origPoint(low order) | origPoint(Highorder ) | }
- : +-----------------------+-----------------------+ } As in
- : 52 34 | DestPoint(High order) | DestPoint(Highorder ) | } FD etc
- : +-----------------------+-----------------------+
- : 54 46 | Prod Specific Data |
- : + +
- : | 4 Bytes |
- +-----------------------+-----------------------+
- 58 3A | zero or more |
- ~ packed ~
- | messages |
- +-----------------------+-----------------------+
- | 0 | 0 | 0 | 0 |
- `-----------------------------------------------'
-
-
- Packet = PacketHeader { PakdMessage } 00H 00H
-
- PacketHeader = origNode (* of packet, not of messages in packet *)
- destNode (* of packet, not of messages in packet *)
- year (* of packet creation, e.g. 1986 *)
- month (* of packet creation, 0-11 for Jan-Dec *)
- day (* of packet creation, 1-31 *)
- hour (* of packet creation, 0-23 *)
- minute (* of packet creation, 0-59 *)
- second (* of packet creation, 0-59 *)
- baud (* max baud rate of orig and dest *)
- PacketType (* old type-1 packets now obsolete *)
- origNet (* of packet, not of messages in packet
- set to -1 if orig=point *)
- destNet (* of packet, not of messages in packet *)
- + productCode Lo (* 0 for Fido, write to FTSC for others *)
- |+ serialNo Maj (* binary serial number (otherwise null)*)
- | password (* session pasword (otherwise null) *)
- | origZone (* zone of pkt sender (otherwise null) *)
- | destZone (* zone of pkt receiver (otherwise null)*)
- | auxNet (* contains Orignet if Origin is a point *)
- + CW validation copy (* Must be equal to CW to be valid *)
- + ProductCode Hi
- + revision Minor
- + origZone (* zone of pkt sender (otherwise null) *)
- + destZone (* zone of pkt receiver (otherwise null)*)
- + ProdData (* Product specific filler *)
-
-
- When the two copies of the CW match they can be asumed to valid and used.
-
- Stone-Aged: Old FTS-0001
- Type-2+ : ,, + Changes indicated by | and : are valid
-
-
- A Type-N Bundle will always advertise it's capabilities in the CW
- regardless of the type being sent. As shown in the below example,
- it allows Type-N processors to automatically track the capability
- of your system. Again, in cases where a stone-age processor is
- being used, this field will be ignored, and in the unusual event
- that it is not ignored, and is somehow harmful to the far system,
- the Type-N processor can be configured to send a CW of 0.
-
- The format of the Capability Word is designed to support up to 15 future
- bundle types, and is bit-mapped to facilitate the easy determination of
- the maximum common level supported between two nodes:
-
- msb Capability Word lsb
- Node Supports ------------FTSC Type Supported **)------------
-
- * 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2+
-
- 2+,3, and 7 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 1
- 2+,3, and 5 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 1
- 2+(this Doc ) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
- Stone Age 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
-
- * - reserved for future use
- ** - Example bit definitions only 2 is and Stone-Age
- defined now. The rest are to be concidered
- "reserved by FTSC".
-
-
- In this example, the Type-N bundler would AND the two words, obtaining a
- word expressing the Types which are in common to both systems. The most
- significant Type will be used, by default, but note that this assumes that
- new bundling Types will be increasingly more efficient or in some way more
- beneficial. Because this may not always be the case, there should be a
- method provided, as illustrated above, to override the automatic upgrade
- should this become the case.
-
- Processing Type-2+ bundles:
-
- Generating:
-
- Do we have a CW Does CW indicate
- stored for dest? YES ----> higher packets YES ---> Generate higher
- NO we support? packet
- | NO
- \|/ |
- +-----<----------------------+
- |
- Fill header with all info
- |
- \|/
- |
- Are we sending from a point? (origPoint != 0) YES --+
- | |
- NO |
- | \|/
- | set AuxNet = OrigNet
- \|/ Set OrigNet = -1
- | |
- +-----<----------------------------------------+
- |
- Add Messages
- |
- Terminate packet
- |
- Send packet
-
- Recieving:
-
- Recieve Packet
- |
- Packettype = 2 NO -------------> Process Type-Other
- YES
- |
- |
- CWcopies match NO --------+------> Treat as normal Stone-Age packet
- YES | |
- | | |
- Store CW /|\ |
- | | /|\
- CW is 0 YES --------------+ |
- NO |
- | |
- | |
- CW indicates support for 2+ NO --+
- YES
- |
- |
- OrigPoint is 0 NO ---------------+
- YES |
- | \|/
- \|/ Set OrigNet is Baud
- | |
- +------<-----------------------+
- |
- Process using added info
-
-
- Epilog
- ======
-
- I'll be glad to get some feedback. You can put it in NET_DEV or
- netmail me.
-
- Jan Vroonhof (2:281/1.12@fidonet)
-