mirror of https://github.com/lianthony/NT4.0
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
128 lines
5.5 KiB
128 lines
5.5 KiB
/* tokring.h, /appletalk/ins, Garth Conboy, 12/03/88 */
|
|
/* Copyright (c) 1988 by Pacer Software Inc., La Jolla, CA */
|
|
|
|
/* GC - Initial coding.
|
|
GC - (11/23/89): Real values now for AppleTalk phase II.
|
|
DCH - (10/06/90): Handle IBM Source routing infomation in Token
|
|
Ring packets.
|
|
GC - (10/06/90): Integrated DCH's changes.
|
|
GC - (12/18/90): Okay, okay, we'll send source routing info.
|
|
|
|
*** Make the PVCS source control system happy:
|
|
$Header$
|
|
$Log$
|
|
***
|
|
|
|
Definitions specific to an TokenRing (IEEE 802.5) implementation of
|
|
AppleTalk.
|
|
|
|
*/
|
|
|
|
#define TokenRingAddressLength 6
|
|
|
|
/* For the following offsets we assume that a TokenRing packet as handed to
|
|
us will be complete EXCEPT for the "non-data" portions: Starting Delimiter
|
|
(SD), Frame Check Sequence (FCS), End of Frame Sequence (EFS), and Ending
|
|
Delimiter (ED). */
|
|
|
|
#define TokenRingAccessControlOffset 0
|
|
#define TokenRingFrameControlOffset 1
|
|
#define TokenRingDestinationOffset 2
|
|
#define TokenRingSourceOffset 8
|
|
#define TokenRingRoutingInfoOffset 14
|
|
|
|
/* A few "magic" values: */
|
|
|
|
#define TokenRingAccessControlValue 0x00 /* Priority zero frame. */
|
|
#define TokenRingFrameControlValue 0x40 /* LLC frame, priority zero. */
|
|
#define TokenRingSourceRoutingMask 0x80 /* In first byte of source
|
|
address. */
|
|
|
|
/* Token ring source routing info stuff: */
|
|
|
|
#define TokenRingRoutingInfoSizeMask 0x1F /* In first byte of routing
|
|
info, if present. */
|
|
#define TokenRingMinRoutingBytes 2
|
|
#define TokenRingMaxRoutingBytes 18
|
|
#define TokenRingBroadcastInfoMask 0xE0 /* In first byte of routing
|
|
info. */
|
|
#define TokenRingNonBroadcastMask 0x1F /* To reset above bits. */
|
|
#define TokenRingDirectionMask 0x80 /* In second byte of routing
|
|
info. */
|
|
|
|
#define TokenRingMinLinkHeaderLength TokenRingRoutingInfoOffset
|
|
#define TokenRingMaxLinkHeaderLength (TokenRingRoutingInfoOffset + \
|
|
TokenRingMaxRoutingBytes)
|
|
|
|
/* Static "source routing" info for a TokenRing broadcast/multicast packet;
|
|
the following values are set: single-route broadcast, 2 bytes of routing
|
|
info, outgoing packet, broadcast (bigo) frame size. */
|
|
|
|
#define TokenRingBroadcastRoutingInfo {(unsigned char)0xC2, \
|
|
(unsigned char)0x70}
|
|
|
|
/* Same stuff for a non-broadcast packet's simple routing info; the following
|
|
values are set: non-broadcast, 2 bytes of routing info, outgoing packet,
|
|
802.5-style frame. */
|
|
|
|
#define TokenRingSimpleRoutingInfo {(unsigned char)0x02, \
|
|
(unsigned char)0x30}
|
|
|
|
/* The following may not really be safe, but, we'll make the assumption that
|
|
all outgoing TokenTalk packets whos destination address starts with "0xC0
|
|
0x00" are broadcast (or multicast). Further, we assume that no packets
|
|
that are intended to be boradcast/multicast will fail to meet this test.
|
|
If this proves not to be the case, we'll need to find a new way to determine
|
|
this from the destination address, or introduce a new perameter to the
|
|
various "buildHeader" routines. This is all for "source routing" support.
|
|
Sigh. */
|
|
|
|
#define TokenRingBroadcastDestHeader {(unsigned char)0xC0, (unsigned char)0x00}
|
|
#define TokenRingBroadcastDestLength 2
|
|
|
|
/* TokenRing multicast address: */
|
|
|
|
#define TokenRingBroadcastAddressInit \
|
|
{(char)0xC0, (char)0x00, (char)0x40, \
|
|
(char)0x00, (char)0x00, (char)0x00}
|
|
|
|
#if not InitializeData
|
|
extern
|
|
#endif
|
|
char tokenRingBroadcastAddress[TokenRingAddressLength]
|
|
#if InitializeData
|
|
= TokenRingBroadcastAddressInit;
|
|
#else
|
|
;
|
|
#endif
|
|
|
|
#define NumberOfTRingZoneMulticastAddrs 19
|
|
|
|
#if not InitializeData
|
|
extern
|
|
#endif
|
|
char tokenRingZoneMutlicastAddrs[NumberOfTRingZoneMulticastAddrs]
|
|
[TokenRingAddressLength]
|
|
#if InitializeData
|
|
= {{(char)0xC0, (char)0x00, (char)0x00, (char)0x00, (char)0x08, (char)0x00},
|
|
{(char)0xC0, (char)0x00, (char)0x00, (char)0x00, (char)0x10, (char)0x00},
|
|
{(char)0xC0, (char)0x00, (char)0x00, (char)0x00, (char)0x20, (char)0x00},
|
|
{(char)0xC0, (char)0x00, (char)0x00, (char)0x00, (char)0x40, (char)0x00},
|
|
{(char)0xC0, (char)0x00, (char)0x00, (char)0x00, (char)0x80, (char)0x00},
|
|
{(char)0xC0, (char)0x00, (char)0x00, (char)0x01, (char)0x00, (char)0x00},
|
|
{(char)0xC0, (char)0x00, (char)0x00, (char)0x02, (char)0x00, (char)0x00},
|
|
{(char)0xC0, (char)0x00, (char)0x00, (char)0x04, (char)0x00, (char)0x00},
|
|
{(char)0xC0, (char)0x00, (char)0x00, (char)0x08, (char)0x00, (char)0x00},
|
|
{(char)0xC0, (char)0x00, (char)0x00, (char)0x10, (char)0x00, (char)0x00},
|
|
{(char)0xC0, (char)0x00, (char)0x00, (char)0x20, (char)0x00, (char)0x00},
|
|
{(char)0xC0, (char)0x00, (char)0x00, (char)0x40, (char)0x00, (char)0x00},
|
|
{(char)0xC0, (char)0x00, (char)0x00, (char)0x80, (char)0x00, (char)0x00},
|
|
{(char)0xC0, (char)0x00, (char)0x01, (char)0x00, (char)0x00, (char)0x00},
|
|
{(char)0xC0, (char)0x00, (char)0x02, (char)0x00, (char)0x00, (char)0x00},
|
|
{(char)0xC0, (char)0x00, (char)0x04, (char)0x00, (char)0x00, (char)0x00},
|
|
{(char)0xC0, (char)0x00, (char)0x08, (char)0x00, (char)0x00, (char)0x00},
|
|
{(char)0xC0, (char)0x00, (char)0x10, (char)0x00, (char)0x00, (char)0x00},
|
|
{(char)0xC0, (char)0x00, (char)0x20, (char)0x00, (char)0x00, (char)0x00}};
|
|
#else
|
|
;
|
|
#endif
|