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)