home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 35 Internet / 35-Internet.zip / tcpdumpb.zip / decnet.h < prev    next >
C/C++ Source or Header  |  1996-07-16  |  16KB  |  454 lines

  1. /*
  2.  * Copyright (c) 1992, 1994, 1996
  3.  *    The Regents of the University of California.  All rights reserved.
  4.  *
  5.  * Redistribution and use in source and binary forms, with or without
  6.  * modification, are permitted provided that: (1) source code distributions
  7.  * retain the above copyright notice and this paragraph in its entirety, (2)
  8.  * distributions including binary code include the above copyright notice and
  9.  * this paragraph in its entirety in the documentation or other materials
  10.  * provided with the distribution, and (3) all advertising materials mentioning
  11.  * features or use of this software display the following acknowledgement:
  12.  * ``This product includes software developed by the University of California,
  13.  * Lawrence Berkeley Laboratory and its contributors.'' Neither the name of
  14.  * the University nor the names of its contributors may be used to endorse
  15.  * or promote products derived from this software without specific prior
  16.  * written permission.
  17.  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
  18.  * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
  19.  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  20.  *
  21.  * @(#) $Header: decnet.h,v 1.6 96/07/15 18:15:19 leres Exp $ (LBL)
  22.  */
  23.  
  24. typedef unsigned char byte[1];        /* single byte field */
  25. typedef unsigned char word[2];        /* 2 byte field */
  26. typedef unsigned char longword[4];    /* 4 bytes field */
  27.  
  28. /*
  29.  * Definitions for DECNET Phase IV protocol headers
  30.  */
  31. union etheraddress {
  32.     unsigned char   dne_addr[6];        /* full ethernet address */
  33.     struct {
  34.         unsigned char dne_hiord[4];    /* DECnet HIORD prefix */
  35.         unsigned char dne_nodeaddr[2];    /* DECnet node address */
  36.     } dne_remote;
  37. };
  38.  
  39. typedef union etheraddress etheraddr;    /* Ethernet address */
  40.  
  41. #define HIORD 0x000400aa        /* high 32-bits of address (swapped) */
  42.  
  43. #define AREAMASK    0176000        /* mask for area field */
  44. #define    AREASHIFT    10        /* bit-offset for area field */
  45. #define NODEMASK    01777        /* mask for node address field */
  46.  
  47. #define DN_MAXADDL    20        /* max size of DECnet address */
  48. struct dn_naddr {
  49.     unsigned short    a_len;        /* length of address */
  50.     unsigned char a_addr[DN_MAXADDL]; /* address as bytes */
  51. };
  52.  
  53. /*
  54.  * Define long and short header formats.
  55.  */
  56. struct shorthdr
  57.   {
  58.     byte    sh_flags;        /* route flags */
  59.     word    sh_dst;            /* destination node address */
  60.     word    sh_src;            /* source node address */
  61.     byte    sh_visits;        /* visit count */
  62.   };
  63.  
  64. struct longhdr
  65.   {
  66.     byte    lg_flags;        /* route flags */
  67.     byte    lg_darea;        /* destination area (reserved) */
  68.     byte    lg_dsarea;        /* destination subarea (reserved) */
  69.     etheraddr    lg_dst;            /* destination id */
  70.     byte    lg_sarea;        /* source area (reserved) */
  71.     byte    lg_ssarea;        /* source subarea (reserved) */
  72.     etheraddr    lg_src;            /* source id */
  73.     byte    lg_nextl2;        /* next level 2 router (reserved) */
  74.     byte    lg_visits;        /* visit count */
  75.     byte    lg_service;        /* service class (reserved) */
  76.     byte    lg_pt;            /* protocol type (reserved) */
  77.   };
  78.  
  79. union routehdr
  80.   {
  81.     struct shorthdr rh_short;        /* short route header */
  82.     struct longhdr rh_long;        /* long route header */
  83.   };
  84.  
  85. /*
  86.  * Define the values of various fields in the protocol messages.
  87.  *
  88.  * 1. Data packet formats.
  89.  */
  90. #define RMF_MASK    7        /* mask for message type */
  91. #define RMF_SHORT    2        /* short message format */
  92. #define RMF_LONG    6        /* long message format */
  93. #ifndef RMF_RQR
  94. #define RMF_RQR        010        /* request return to sender */
  95. #define RMF_RTS        020        /* returning to sender */
  96. #define RMF_IE        040        /* intra-ethernet packet */
  97. #endif /* RMR_RQR */
  98. #define RMF_FVER    0100        /* future version flag */
  99. #define RMF_PAD        0200        /* pad field */
  100. #define RMF_PADMASK    0177        /* pad field mask */
  101.  
  102. #define VIS_MASK    077        /* visit field mask */
  103.  
  104. /*
  105.  * 2. Control packet formats.
  106.  */
  107. #define RMF_CTLMASK    017        /* mask for message type */
  108. #define RMF_CTLMSG    01        /* control message indicator */
  109. #define RMF_INIT    01        /* initialization message */
  110. #define RMF_VER        03        /* verification message */
  111. #define RMF_TEST    05        /* hello and test message */
  112. #define RMF_L1ROUT    07        /* level 1 routing message */
  113. #define RMF_L2ROUT    011        /* level 2 routing message */
  114. #define RMF_RHELLO    013        /* router hello message */
  115. #define RMF_EHELLO    015        /* endnode hello message */
  116.  
  117. #define TI_L2ROUT    01        /* level 2 router */
  118. #define TI_L1ROUT    02        /* level 1 router */
  119. #define TI_ENDNODE    03        /* endnode */
  120. #define TI_VERIF    04        /* verification required */
  121. #define TI_BLOCK    010        /* blocking requested */
  122.  
  123. #define VE_VERS        2        /* version number (2) */
  124. #define VE_ECO        0        /* ECO number */
  125. #define VE_UECO        0        /* user ECO number (0) */
  126.  
  127. #define P3_VERS        1        /* phase III version number (1) */
  128. #define P3_ECO        3        /* ECO number (3) */
  129. #define P3_UECO        0        /* user ECO number (0) */
  130.  
  131. #define II_L2ROUT    01        /* level 2 router */
  132. #define II_L1ROUT    02        /* level 1 router */
  133. #define II_ENDNODE    03        /* endnode */
  134. #define II_VERIF    04        /* verification required */
  135. #define II_NOMCAST    040        /* no multicast traffic accepted */
  136. #define II_BLOCK    0100        /* blocking requested */
  137. #define II_TYPEMASK    03        /* mask for node type */
  138.  
  139. #define TESTDATA    0252        /* test data bytes */
  140. #define TESTLEN        1        /* length of transmitted test data */
  141.  
  142. /*
  143.  * Define control message formats.
  144.  */
  145. struct initmsgIII            /* phase III initialization message */
  146.   {
  147.     byte    inIII_flags;        /* route flags */
  148.     word    inIII_src;        /* source node address */
  149.     byte    inIII_info;        /* routing layer information */
  150.     word    inIII_blksize;        /* maximum data link block size */
  151.     byte    inIII_vers;        /* version number */
  152.     byte    inIII_eco;        /* ECO number */
  153.     byte    inIII_ueco;        /* user ECO number */
  154.     byte    inIII_rsvd;        /* reserved image field */
  155.   };
  156.  
  157. struct initmsg                /* initialization message */
  158.   {
  159.     byte    in_flags;        /* route flags */
  160.     word    in_src;            /* source node address */
  161.     byte    in_info;        /* routing layer information */
  162.     word    in_blksize;        /* maximum data link block size */
  163.     byte    in_vers;        /* version number */
  164.     byte    in_eco;            /* ECO number */
  165.     byte    in_ueco;        /* user ECO number */
  166.     word    in_hello;        /* hello timer */
  167.     byte    in_rsvd;        /* reserved image field */
  168.   };
  169.  
  170. struct verifmsg                /* verification message */
  171.   {
  172.     byte    ve_flags;        /* route flags */
  173.     word    ve_src;            /* source node address */
  174.     byte    ve_fcnval;        /* function value image field */
  175.   };
  176.  
  177. struct testmsg                /* hello and test message */
  178.   {
  179.     byte    te_flags;        /* route flags */
  180.     word    te_src;            /* source node address */
  181.     byte    te_data;        /* test data image field */
  182.   };
  183.  
  184. struct l1rout                /* level 1 routing message */
  185.   {
  186.     byte    r1_flags;        /* route flags */
  187.     word    r1_src;            /* source node address */
  188.     byte    r1_rsvd;        /* reserved field */
  189.   };
  190.  
  191. struct l2rout                /* level 2 routing message */
  192.   {
  193.     byte    r2_flags;        /* route flags */
  194.     word    r2_src;            /* source node address */
  195.     byte    r2_rsvd;        /* reserved field */
  196.   };
  197.  
  198. struct rhellomsg            /* router hello message */
  199.   {
  200.     byte    rh_flags;        /* route flags */
  201.     byte    rh_vers;        /* version number */
  202.     byte    rh_eco;            /* ECO number */
  203.     byte    rh_ueco;        /* user ECO number */
  204.     etheraddr    rh_src;            /* source id */
  205.     byte    rh_info;        /* routing layer information */
  206.     word    rh_blksize;        /* maximum data link block size */
  207.     byte    rh_priority;        /* router's priority */
  208.     byte    rh_area;        /* reserved */
  209.     word    rh_hello;        /* hello timer */
  210.     byte    rh_mpd;            /* reserved */
  211.   };
  212.  
  213. struct ehellomsg            /* endnode hello message */
  214.   {
  215.     byte    eh_flags;        /* route flags */
  216.     byte    eh_vers;        /* version number */
  217.     byte    eh_eco;            /* ECO number */
  218.     byte    eh_ueco;        /* user ECO number */
  219.     etheraddr    eh_src;            /* source id */
  220.     byte    eh_info;        /* routing layer information */
  221.     word    eh_blksize;        /* maximum data link block size */
  222.     byte    eh_area;        /* area (reserved) */
  223.     byte    eh_seed[8];        /* verification seed */
  224.     etheraddr    eh_router;        /* designated router */
  225.     word    eh_hello;        /* hello timer */
  226.     byte    eh_mpd;            /* (reserved) */
  227.     byte    eh_data;        /* test data image field */
  228.   };
  229.  
  230. union controlmsg
  231.   {
  232.     struct initmsg    cm_init;    /* initialization message */
  233.     struct verifmsg    cm_ver;        /* verification message */
  234.     struct testmsg    cm_test;    /* hello and test message */
  235.     struct l1rout    cm_l1rou;    /* level 1 routing message */
  236.     struct l2rout    cm_l2rout;    /* level 2 routing message */
  237.     struct rhellomsg    cm_rhello;    /* router hello message */
  238.     struct ehellomsg    cm_ehello;    /* endnode hello message */
  239.   };
  240.  
  241. /* Macros for decoding routing-info fields */
  242. #define    RI_COST(x)    ((x)&0777)
  243. #define    RI_HOPS(x)    (((x)>>10)&037)
  244.  
  245. /*
  246.  * NSP protocol fields and values.
  247.  */
  248.  
  249. #define NSP_TYPEMASK 014        /* mask to isolate type code */
  250. #define NSP_SUBMASK 0160        /* mask to isolate subtype code */
  251. #define NSP_SUBSHFT 4            /* shift to move subtype code */
  252.  
  253. #define MFT_DATA 0            /* data message */
  254. #define MFT_ACK  04            /* acknowledgement message */
  255. #define MFT_CTL  010            /* control message */
  256.  
  257. #define MFS_ILS  020            /* data or I/LS indicator */
  258. #define MFS_BOM  040            /* beginning of message (data) */
  259. #define MFS_MOM  0            /* middle of message (data) */
  260. #define MFS_EOM  0100            /* end of message (data) */
  261. #define MFS_INT  040            /* interrupt message */
  262.  
  263. #define MFS_DACK 0            /* data acknowledgement */
  264. #define MFS_IACK 020            /* I/LS acknowledgement */
  265. #define MFS_CACK 040            /* connect acknowledgement */
  266.  
  267. #define MFS_NOP  0            /* no operation */
  268. #define MFS_CI   020            /* connect initiate */
  269. #define MFS_CC   040            /* connect confirm */
  270. #define MFS_DI   060            /* disconnect initiate */
  271. #define MFS_DC   0100            /* disconnect confirm */
  272. #define MFS_RCI  0140            /* retransmitted connect initiate */
  273.  
  274. #define SGQ_ACK  0100000        /* ack */
  275. #define SGQ_NAK  0110000        /* negative ack */
  276. #define SGQ_OACK 0120000        /* other channel ack */
  277. #define SGQ_ONAK 0130000        /* other channel negative ack */
  278. #define SGQ_MASK 07777            /* mask to isolate seq # */
  279. #define SGQ_OTHER 020000        /* other channel qualifier */
  280. #define SGQ_DELAY 010000        /* ack delay flag */
  281.  
  282. #define SGQ_EOM  0100000        /* pseudo flag for end-of-message */
  283.  
  284. #define LSM_MASK 03            /* mask for modifier field */
  285. #define LSM_NOCHANGE 0            /* no change */
  286. #define LSM_DONOTSEND 1            /* do not send data */
  287. #define LSM_SEND 2            /* send data */
  288.  
  289. #define LSI_MASK 014            /* mask for interpretation field */
  290. #define LSI_DATA 0            /* data segment or message count */
  291. #define LSI_INTR 4            /* interrupt request count */
  292. #define LSI_INTM 0377            /* funny marker for int. message */
  293.  
  294. #define COS_MASK 014            /* mask for flow control field */
  295. #define COS_NONE 0            /* no flow control */
  296. #define COS_SEGMENT 04            /* segment flow control */
  297. #define COS_MESSAGE 010            /* message flow control */
  298. #define COS_CRYPTSER 020        /* cryptographic services requested */
  299. #define COS_DEFAULT 1            /* default value for field */
  300.  
  301. #define COI_MASK 3            /* mask for version field */
  302. #define COI_32 0            /* version 3.2 */
  303. #define COI_31 1            /* version 3.1 */
  304. #define COI_40 2            /* version 4.0 */
  305. #define COI_41 3            /* version 4.1 */
  306.  
  307. #define MNU_MASK 140            /* mask for session control version */
  308. #define MNU_10 000                /* session V1.0 */
  309. #define MNU_20 040                /* session V2.0 */
  310. #define MNU_ACCESS 1            /* access control present */
  311. #define MNU_USRDATA 2            /* user data field present */
  312. #define MNU_INVKPROXY 4            /* invoke proxy field present */
  313. #define MNU_UICPROXY 8            /* use uic-based proxy */
  314.  
  315. #define DC_NORESOURCES 1        /* no resource reason code */
  316. #define DC_NOLINK 41            /* no link terminate reason code */
  317. #define DC_COMPLETE 42            /* disconnect complete reason code */
  318.  
  319. #define DI_NOERROR 0            /* user disconnect */
  320. #define DI_SHUT 3            /* node is shutting down */
  321. #define DI_NOUSER 4            /* destination end user does not exist */
  322. #define DI_INVDEST 5            /* invalid end user destination */
  323. #define DI_REMRESRC 6            /* insufficient remote resources */
  324. #define DI_TPA 8            /* third party abort */
  325. #define DI_PROTOCOL 7            /* protocol error discovered */
  326. #define DI_ABORT 9            /* user abort */
  327. #define DI_LOCALRESRC 32        /* insufficient local resources */
  328. #define DI_REMUSERRESRC 33        /* insufficient remote user resources */
  329. #define DI_BADACCESS 34            /* bad access control information */
  330. #define DI_BADACCNT 36            /* bad ACCOUNT information */
  331. #define DI_CONNECTABORT 38        /* connect request cancelled */
  332. #define DI_TIMEDOUT 38            /* remote node or user crashed */
  333. #define DI_UNREACHABLE 39        /* local timers expired due to ... */
  334. #define DI_BADIMAGE 43            /* bad image data in connect */
  335. #define DI_SERVMISMATCH 54        /* cryptographic service mismatch */
  336.  
  337. #define UC_OBJREJECT 0            /* object rejected connect */
  338. #define UC_USERDISCONNECT 0        /* user disconnect */
  339. #define UC_RESOURCES 1            /* insufficient resources (local or remote) */
  340. #define UC_NOSUCHNODE 2            /* unrecognized node name */
  341. #define UC_REMOTESHUT 3            /* remote node shutting down */
  342. #define UC_NOSUCHOBJ 4            /* unrecognized object */
  343. #define UC_INVOBJFORMAT 5        /* invalid object name format */
  344. #define UC_OBJTOOBUSY 6            /* object too busy */
  345. #define UC_NETWORKABORT 8        /* network abort */
  346. #define UC_USERABORT 9            /* user abort */
  347. #define UC_INVNODEFORMAT 10        /* invalid node name format */
  348. #define UC_LOCALSHUT 11            /* local node shutting down */
  349. #define UC_ACCESSREJECT 34        /* invalid access control information */
  350. #define UC_NORESPONSE 38        /* no response from object */
  351. #define UC_UNREACHABLE 39        /* node unreachable */
  352.  
  353. /*
  354.  * NSP message formats.
  355.  */
  356. struct nsphdr                /* general nsp header */
  357.   {
  358.     byte    nh_flags;        /* message flags */
  359.     word    nh_dst;            /* destination link address */
  360.     word    nh_src;            /* source link address */
  361.   };
  362.  
  363. struct seghdr                /* data segment header */
  364.   {
  365.     byte    sh_flags;        /* message flags */
  366.     word    sh_dst;            /* destination link address */
  367.     word    sh_src;            /* source link address */
  368.     word    sh_seq[3];        /* sequence numbers */
  369.   };
  370.  
  371. struct minseghdr            /* minimum data segment header */
  372.   {
  373.     byte    ms_flags;        /* message flags */
  374.     word    ms_dst;            /* destination link address */
  375.     word    ms_src;            /* source link address */
  376.     word    ms_seq;            /* sequence number */
  377.   };
  378.  
  379. struct lsmsg                /* link service message (after hdr) */
  380.   {
  381.     byte    ls_lsflags;        /* link service flags */
  382.     byte    ls_fcval;        /* flow control value */
  383.   };
  384.  
  385. struct ackmsg                /* acknowledgement message */
  386.   {
  387.     byte    ak_flags;        /* message flags */
  388.     word    ak_dst;            /* destination link address */
  389.     word    ak_src;            /* source link address */
  390.     word    ak_acknum[2];        /* acknowledgement numbers */
  391.   };
  392.  
  393. struct minackmsg            /* minimum acknowledgement message */
  394.   {
  395.     byte    mk_flags;        /* message flags */
  396.     word    mk_dst;            /* destination link address */
  397.     word    mk_src;            /* source link address */
  398.     word    mk_acknum;        /* acknowledgement number */
  399.   };
  400.  
  401. struct ciackmsg                /* connect acknowledgement message */
  402.   {
  403.     byte    ck_flags;        /* message flags */
  404.     word    ck_dst;            /* destination link address */
  405.   };
  406.  
  407. struct cimsg                /* connect initiate message */
  408.   {
  409.     byte    ci_flags;        /* message flags */
  410.     word    ci_dst;            /* destination link address (0) */
  411.     word    ci_src;            /* source link address */
  412.     byte    ci_services;        /* requested services */
  413.     byte    ci_info;        /* information */
  414.     word    ci_segsize;        /* maximum segment size */
  415.   };
  416.  
  417. struct ccmsg                /* connect confirm message */
  418.   {
  419.     byte    cc_flags;        /* message flags */
  420.     word    cc_dst;            /* destination link address */
  421.     word    cc_src;            /* source link address */
  422.     byte    cc_services;        /* requested services */
  423.     byte    cc_info;        /* information */
  424.     word    cc_segsize;        /* maximum segment size */
  425.     byte    cc_optlen;        /* optional data length */
  426.   };
  427.  
  428. struct cnmsg                /* generic connect message */
  429.   {
  430.     byte    cn_flags;        /* message flags */
  431.     word    cn_dst;            /* destination link address */
  432.     word    cn_src;            /* source link address */
  433.     byte    cn_services;        /* requested services */
  434.     byte    cn_info;        /* information */
  435.     word    cn_segsize;        /* maximum segment size */
  436.   };
  437.  
  438. struct dimsg                /* disconnect initiate message */
  439.   {
  440.     byte    di_flags;        /* message flags */
  441.     word    di_dst;            /* destination link address */
  442.     word    di_src;            /* source link address */
  443.     word    di_reason;        /* reason code */
  444.     byte    di_optlen;        /* optional data length */
  445.   };
  446.  
  447. struct dcmsg                /* disconnect confirm message */
  448.   {
  449.     byte    dc_flags;        /* message flags */
  450.     word    dc_dst;            /* destination link address */
  451.     word    dc_src;            /* source link address */
  452.     word    dc_reason;        /* reason code */
  453.   };
  454.