2002-02-16 21:38:40 +00:00
|
|
|
<HTML>
|
|
|
|
<!-- $Id$ -->
|
|
|
|
<HEAD>
|
|
|
|
<TITLE>A Proposed Type-2 Packet Extension.</TITLE>
|
|
|
|
</HEAD>
|
|
|
|
|
|
|
|
<!-- Background white, links blue (unvisited), navy (visited), red (active) -->
|
|
|
|
<BODY
|
|
|
|
BGCOLOR="#FFFFFF"
|
|
|
|
TEXT="#000000"
|
|
|
|
LINK="#0000FF"
|
|
|
|
VLINK="#000080"
|
|
|
|
ALINK="#FF0000"
|
|
|
|
>
|
|
|
|
<PRE>
|
|
|
|
Document: FSC-0048
|
|
|
|
Version: 002
|
|
|
|
Date: 21-Oct-90
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
A Proposed Type-2 Packet Extension
|
|
|
|
Jan Vroonhof
|
|
|
|
2:281/1.12@fidonet
|
|
|
|
Oct 21, 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 an elegant way to switch to a new
|
|
|
|
bundling method without requiring major effort or breaking
|
|
|
|
anything.
|
|
|
|
|
|
|
|
Prologue
|
|
|
|
========
|
|
|
|
|
|
|
|
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).
|
|
|
|
When I say "backwards compatible" I mean that problems it would
|
|
|
|
create already exist in the current FTS-0001 system (e.g.
|
|
|
|
zone conflicts when dealing with a non compliant system). In
|
|
|
|
short it only corrects some flaws in FTS-0001 WITHOUT
|
|
|
|
generating new ones.
|
|
|
|
|
|
|
|
In this document I have tried to stay as much as possible on
|
|
|
|
the paths of existing practices. Therefore I think
|
|
|
|
implementation of the additions it proposes will not be too
|
|
|
|
hard.
|
|
|
|
|
|
|
|
! Prologue to revision 2
|
|
|
|
! ======================
|
|
|
|
|
|
|
|
! Revision 2 of this document reserves a bit in the
|
|
|
|
! CapabilityWord for one bundle type already in use outside of
|
|
|
|
! FidoNet, RFC-822. A small change was made to the "receiving"
|
|
|
|
! flowchart in order to ensure compatibility with FSC-0039.004.
|
|
|
|
! In the process a lot of errors and omissions in the spelling,
|
|
|
|
! credits etc. were corrected.
|
|
|
|
|
|
|
|
===============
|
|
|
|
|
|
|
|
! All references in the following to FSC-0039 are to Revision 1
|
|
|
|
! of that document.
|
|
|
|
|
|
|
|
My thoughts on FSC-0039 and FTS-0001 rev 12
|
|
|
|
===========================================
|
|
|
|
|
|
|
|
First, revision 12 of FTS-0001 introduced the term "(some
|
|
|
|
impls)" to indicate that some implementations used their own
|
|
|
|
! extensions to FTS-0001 (Note that in later revisions this was
|
|
|
|
! changed to "optional"). The problem is that this info cannot be
|
|
|
|
relied upon, because there is no way to actually validate the
|
|
|
|
data. One can only check whether the values of these fields are
|
|
|
|
in the range of valid values and hope for the best.
|
|
|
|
|
|
|
|
Second, FSC-0039 introduced the idea of having a bitfield
|
|
|
|
(called the Capability Word) indicating whether extension data
|
|
|
|
was valid. Through the Capability Word, it also made it
|
|
|
|
possible to indicate the ability to support other, non type 2,
|
|
|
|
packets, thus allowing for flexible migration towards type 3.
|
|
|
|
It also documented the addressing extensions 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 their own purposes.
|
|
|
|
Therefore 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 chance of some junk portraying itself as a CW
|
|
|
|
is significantly reduced by this.
|
|
|
|
|
|
|
|
! Please note that the validation copy is byte swapped
|
|
|
|
! compared to the normal capability word. While this started
|
|
|
|
! out as a typo, I decided to leave it in as it introduces
|
|
|
|
! some extra safety, without requiring much extra code effort.
|
|
|
|
! In later revisions of FSC-0039, Mark adopted this idea of a
|
|
|
|
! validation copy too and eliminated the problem.
|
|
|
|
|
|
|
|
2. Although FSC-0039 provides a way to make packet headers 4D
|
|
|
|
it is not backwards compatible. It cannot be used in FTS-
|
|
|
|
0001 sessions to unknown systems, making FidoNet still not
|
|
|
|
totally 4D capable. Although it implements fields for zone
|
|
|
|
and point number, an FTS-0001 compliant application is not
|
|
|
|
required to look at these fields. When a point mails using
|
|
|
|
these fields to implement its 4D address, a system only
|
|
|
|
looking at the net/node info, as is required by FTS-0001,
|
|
|
|
still sees it as a boss node, causing the obvious problems.
|
|
|
|
|
|
|
|
This document provides a way for transparent point handling,
|
|
|
|
using a technique already exploited by many mailers
|
|
|
|
internally. It will allow this document to be implemented
|
|
|
|
and used by mailers not supporting it. At the same time the
|
|
|
|
danger that a point is seen as the boss node is eliminated.
|
|
|
|
|
|
|
|
It does NOT provide full inter-zone backwards compatibility,
|
|
|
|
but that is not needed as badly, as problems are not yet too
|
|
|
|
great. Any measures to ensure backwards compatibility in
|
|
|
|
this area might harm communication with non-supporting
|
|
|
|
programs, when the old system could handle the situation.
|
|
|
|
|
|
|
|
Packet Header
|
|
|
|
=============
|
|
|
|
|
|
|
|
The "|" character is used to indicate extensions documented in
|
|
|
|
FTS-0001 revision 12, the ":" character indicates those
|
|
|
|
documented here and in FSC-0039.
|
|
|
|
|
|
|
|
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 order) | Revision (major) |
|
|
|
|
| +--------------------------+--------------------------+
|
|
|
|
| 26 1A | password |
|
|
|
|
| | 8 bytes, null padded |
|
|
|
|
| +--------------------------+--------------------------+
|
|
|
|
|: 34 22 | origZone (low order) | origZone (high order) | }
|
|
|
|
| +--------------------------+--------------------------+ } As in
|
|
|
|
|: 36 24 | destZone (low order) | destZone (high order) | } QMail
|
|
|
|
: +--------------------------+--------------------------+
|
|
|
|
: 38 26 | AuxNet (low order) | AuxNet (high order) |
|
|
|
|
: +--------------------------+--------------------------+
|
|
|
|
: 40 28 | CWvalidationCopy (high) | CWvalidationCopy (low) |
|
|
|
|
: +--------------------------+--------------------------+
|
|
|
|
: 42 2A | ProductCode (high order) | Revision (minor) |
|
|
|
|
: +--------------------------+--------------------------+
|
|
|
|
: 44 2C | CapabilWord (low order) | CapabilWord (high order) |
|
|
|
|
: +--------------------------+--------------------------+
|
|
|
|
: 46 2E | origZone (low order) | origZone (high order) | }
|
|
|
|
: +--------------------------+--------------------------+ } As in
|
|
|
|
: 48 30 | destZone (low order) | destZone (high order) | } FD etc
|
|
|
|
: +--------------------------+--------------------------+
|
|
|
|
: 50 32 | origPoint (low order) | origPoint (high order) | }
|
|
|
|
: +--------------------------+--------------------------+ } As in
|
|
|
|
: 52 34 | destPoint (low order) | destPoint (high order) | } FD etc
|
|
|
|
: +--------------------------+--------------------------+
|
|
|
|
: 54 46 | Product 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 *)
|
|
|
|
+! Bytesw. CWvalidationCopy (* 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 be
|
|
|
|
valid and used.
|
|
|
|
|
|
|
|
Stone-Aged: Old FTS-0001
|
|
|
|
Type-2+ : Old FTS-0001 plus changes indicated by "|" and ":"
|
|
|
|
are valid
|
|
|
|
|
|
|
|
A Type-N Bundle will always advertise its capabilities in the
|
|
|
|
CW regardless of the type being sent. As shown in the example
|
|
|
|
below, the CW 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 **)------------
|
|
|
|
|
|
|
|
U 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
|
|
|
|
|
|
|
|
! ^-- "U" Indicates nodes able to process RFC-822
|
|
|
|
! bundles.
|
|
|
|
** - In the example bit definitions only type 2,
|
|
|
|
and the Stone-Age type, are defined now.
|
|
|
|
The rest are to be concidered "reserved by
|
|
|
|
FTSC".
|
|
|
|
|
|
|
|
The receiving Type-N bundler would AND the two words, obtaining
|
|
|
|
a word expressing the Types which are common to both the
|
|
|
|
receiving and the sending system. The most significant Type
|
|
|
|
will be used for future sessions, by default. Please 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 to
|
|
|
|
override the automatic upgrade, as illustrated above, should
|
|
|
|
this ever happen.
|
|
|
|
|
|
|
|
! N.B. The one bit left over (Msb) is now used as indicator for
|
|
|
|
! RFC-822 type bundles. For info on RFC-822 please check out
|
|
|
|
! the relevant documents themselves.
|
|
|
|
|
|
|
|
! For a more explanatory text on using the CW to its full
|
|
|
|
! potential, refer to the FSC-0039 text by Mark Howard.
|
|
|
|
! Mark also gives some more rationale for the origional idea
|
|
|
|
! of the CW.
|
|
|
|
|
|
|
|
Generating Type-2+ bundles
|
|
|
|
==========================
|
|
|
|
|
|
|
|
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
|
|
|
|
|
|
|
|
Receiving Type-2+ bundles
|
|
|
|
=========================
|
|
|
|
|
|
|
|
Receive 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 not 0 and OrigNet = -1 YES -------+
|
|
|
|
NO |
|
|
|
|
| \|/
|
|
|
|
! \|/ Set OrigNet is AuxNet
|
|
|
|
| |
|
|
|
|
+------<-----------------------------------+
|
|
|
|
|
|
|
|
|
Process using added info
|
|
|
|
|
|
|
|
Credits
|
|
|
|
=======
|
|
|
|
|
|
|
|
To Mark Howard, for introducing the idea of a CW in his FSC-
|
|
|
|
0039 document and quite rightly pointing out one big omision
|
|
|
|
in revision 1 of this document.
|
|
|
|
|
|
|
|
To Rick Moore, for doing a good job in processing all these
|
|
|
|
revisions by Mark and myself, and for his work for the FTSC in
|
|
|
|
general.
|
|
|
|
|
|
|
|
To Joaquim Homrighausen, for his contributions to FidoNet
|
|
|
|
software in general, and especially for his time devoted to
|
|
|
|
reading, discussing and implementing the ideas Mark and I
|
|
|
|
introduced.
|
|
|
|
|
|
|
|
To Andre van de Wijdeven, for producing and letting me beta
|
|
|
|
test his TS-MM software, which in my opinion is the best point
|
|
|
|
software around. (I'm not saying available, because it isn't
|
|
|
|
:-()
|
|
|
|
|
|
|
|
To john lots, for shipping this stuff to the US.
|
|
|
|
|
|
|
|
To Jon Webb, for doing a much needed grammar and spelling
|
|
|
|
check.
|
|
|
|
|
|
|
|
To Bob Hartman, Vince Periello, Tom Jennings, Eelco de Graaff,
|
|
|
|
aXel Horst, Arjen van Loon, jim nutt, Odinn Sorensen, David
|
|
|
|
Nugent, Peter Janssens and many others, for making FidoNet
|
|
|
|
what it is now, for me and for everybody.
|
|
|
|
|
|
|
|
Epilog
|
|
|
|
======
|
|
|
|
|
|
|
|
So this it, now it's up to you to decide whether or not to
|
|
|
|
implement it. A small change was made in the receivers
|
|
|
|
flowchart and a small incompatibility with the later revisions
|
|
|
|
of FSC-0039 was removed. That will ensure that FSC-0048 and
|
|
|
|
FSC-0039 mailers can happily talk to each other....
|
|
|
|
|
|
|
|
The best way to implement this would be to always support FSC-
|
|
|
|
0048 on inbound trafic and generate FSC-0048 on outbound by
|
|
|
|
default. A switch on a per-node basis will force your software
|
|
|
|
to be FSC-0039 or even FSC-0001 only, and you will cover all
|
|
|
|
bases.
|
|
|
|
|
|
|
|
This can be done easily, as FSC-0048 is a superset of FSC-0039
|
|
|
|
(The -1 thing on points being the difference) which in turn is
|
|
|
|
a superset of FTS-0001 (CW). I'd be glad to get some feedback.
|
|
|
|
You can put it in NET_DEV or netmail me.
|
|
|
|
|
|
|
|
Jan Vroonhof (2:281/1.12@fidonet)
|
|
|
|
|
|
|
|
</PRE>
|
|
|
|
|
|
|
|
<A HREF="index.htm"><IMG SRC="../images/b_arrow.gif" ALT="Back" Border="0">Go Back</A>
|
|
|
|
|
|
|
|
</BODY>
|
|
|
|
</HTML>
|
|
|
|
|