|
|
1.1 ! root 1: /*********************************************************** ! 2: Copyright IBM Corporation 1987 ! 3: ! 4: All Rights Reserved ! 5: ! 6: Permission to use, copy, modify, and distribute this software and its ! 7: documentation for any purpose and without fee is hereby granted, ! 8: provided that the above copyright notice appear in all copies and that ! 9: both that copyright notice and this permission notice appear in ! 10: supporting documentation, and that the name of IBM not be ! 11: used in advertising or publicity pertaining to distribution of the ! 12: software without specific, written prior permission. ! 13: ! 14: IBM DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ! 15: ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL ! 16: IBM BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ! 17: ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, ! 18: WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ! 19: ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS ! 20: SOFTWARE. ! 21: ! 22: ******************************************************************/ ! 23: ! 24: /* ! 25: * ARGO Project, Computer Sciences Dept., University of Wisconsin - Madison ! 26: */ ! 27: /* ! 28: * ARGO TP ! 29: * ! 30: * $Header: tp_tpdu.h,v 4.4 88/07/26 16:45:40 nhall Exp $ ! 31: * $Source: /usr/argo/sys/netiso/RCS/tp_tpdu.h,v $ ! 32: * @(#)tp_tpdu.h 7.3 (Berkeley) 8/29/89 * ! 33: * ! 34: * This ghastly set of macros makes it possible to ! 35: * refer to tpdu structures without going mad. ! 36: */ ! 37: ! 38: #ifndef __TP_TPDU__ ! 39: #define __TP_TPDU__ ! 40: ! 41: #ifndef BYTE_ORDER ! 42: /* ! 43: * Definitions for byte order, ! 44: * according to byte significance from low address to high. ! 45: */ ! 46: #define LITTLE_ENDIAN 1234 /* least-significant byte first (vax) */ ! 47: #define BIG_ENDIAN 4321 /* most-significant byte first (IBM, net) */ ! 48: #define PDP_ENDIAN 3412 /* LSB first in word, MSW first in long (pdp) */ ! 49: ! 50: #ifdef vax ! 51: #define BYTE_ORDER LITTLE_ENDIAN ! 52: #else ! 53: #define BYTE_ORDER BIG_ENDIAN /* mc68000, tahoe, most others */ ! 54: #endif ! 55: #endif BYTE_ORDER ! 56: ! 57: /* This much of a tpdu is the same for all types of tpdus (except ! 58: * DT tpdus in class 0; their exceptions are handled by the data ! 59: * structure below ! 60: */ ! 61: struct tpdu_fixed { ! 62: u_char _tpduf_li:8, /* length indicator */ ! 63: #if BYTE_ORDER == LITTLE_ENDIAN ! 64: _tpduf_cdt: 4, /* credit */ ! 65: _tpduf_type: 4; /* type of tpdu (DT, CR, etc.) */ ! 66: #endif ! 67: #if BYTE_ORDER == BIG_ENDIAN ! 68: _tpduf_type: 4, /* type of tpdu (DT, CR, etc.) */ ! 69: _tpduf_cdt: 4; /* credit */ ! 70: #endif ! 71: u_short _tpduf_dref; /* destination ref; not in DT in class 0 */ ! 72: }; ! 73: ! 74: #define tpdu_li _tpduf._tpduf_li ! 75: #define tpdu_type _tpduf._tpduf_type ! 76: #define tpdu_cdt _tpduf._tpduf_cdt ! 77: #define tpdu_dref _tpduf._tpduf_dref ! 78: ! 79: struct tp0du { ! 80: u_char _tp0_li, ! 81: _tp0_cdt_type, /* same as in tpdu_fixed */ ! 82: #if BYTE_ORDER == BIG_ENDIAN ! 83: _tp0_eot: 1, /* eot */ ! 84: _tp0_mbz: 7, /* must be zero */ ! 85: #endif ! 86: #if BYTE_ORDER == LITTLE_ENDIAN ! 87: _tp0_mbz: 7, /* must be zero */ ! 88: _tp0_eot: 1, /* eot */ ! 89: #endif ! 90: _tp0_notused: 8; /* data begins on this octet */ ! 91: }; ! 92: ! 93: #define tp0du_eot _tp0_eot ! 94: #define tp0du_mbz _tp0_mbz ! 95: ! 96: /* ! 97: * This is used when the extended format seqence numbers are ! 98: * being sent and received. ! 99: */ ! 100: /* ! 101: * the seqeot field is an int that overlays the seq ! 102: * and eot fields, this allows the htonl operation ! 103: * to be applied to the entire 32 bit quantity, and ! 104: * simplifies the structure definitions. ! 105: */ ! 106: union seq_type { ! 107: struct { ! 108: #if BYTE_ORDER == BIG_ENDIAN ! 109: unsigned int st_eot:1, /* end-of-tsdu */ ! 110: st_seq:31; /* 31 bit sequence number */ ! 111: #endif ! 112: #if BYTE_ORDER == LITTLE_ENDIAN ! 113: unsigned int st_seq:31, /* 31 bit sequence number */ ! 114: st_eot:1; /* end-of-tsdu */ ! 115: #endif ! 116: } st; ! 117: unsigned int s_seqeot; ! 118: #define s_eot st.st_eot ! 119: #define s_seq st.st_seq ! 120: }; ! 121: ! 122: /* Then most tpdu types have a portion that is always present but ! 123: * differs among the tpdu types : ! 124: */ ! 125: union tpdu_fixed_rest { ! 126: ! 127: struct { ! 128: u_short _tpdufr_sref, /* source reference */ ! 129: #if BYTE_ORDER == BIG_ENDIAN ! 130: _tpdufr_class: 4, /* class [ ISO 8073 13.3.3.e ] */ ! 131: _tpdufr_opt: 4, /* options [ ISO 8073 13.3.3.e ] */ ! 132: #endif ! 133: #if BYTE_ORDER == LITTLE_ENDIAN ! 134: _tpdufr_opt: 4, /* options [ ISO 8073 13.3.3.e ] */ ! 135: _tpdufr_class: 4, /* class [ ISO 8073 13.3.3.e ] */ ! 136: #endif ! 137: _tpdufr_xx: 8; /* unused */ ! 138: } CRCC; ! 139: ! 140: #define tpdu_CRli _tpduf._tpduf_li ! 141: #define tpdu_CRtype _tpduf._tpduf_type ! 142: #define tpdu_CRcdt _tpduf._tpduf_cdt ! 143: #define tpdu_CRdref_0 _tpduf._tpduf_dref ! 144: #define tpdu_CRsref _tpdufr.CRCC._tpdufr_sref ! 145: #define tpdu_sref _tpdufr.CRCC._tpdufr_sref ! 146: #define tpdu_CRclass _tpdufr.CRCC._tpdufr_class ! 147: #define tpdu_CRoptions _tpdufr.CRCC._tpdufr_opt ! 148: ! 149: #define tpdu_CCli _tpduf._tpduf_li ! 150: #define tpdu_CCtype _tpduf._tpduf_type ! 151: #define tpdu_CCcdt _tpduf._tpduf_cdt ! 152: #define tpdu_CCdref _tpduf._tpduf_dref ! 153: #define tpdu_CCsref _tpdufr.CRCC._tpdufr_sref ! 154: #define tpdu_CCclass _tpdufr.CRCC._tpdufr_class ! 155: #define tpdu_CCoptions _tpdufr.CRCC._tpdufr_opt ! 156: ! 157: /* OPTIONS and ADDL OPTIONS bits */ ! 158: #define TPO_USE_EFC 0x1 ! 159: #define TPO_XTD_FMT 0x2 ! 160: #define TPAO_USE_TXPD 0x1 ! 161: #define TPAO_NO_CSUM 0x2 ! 162: #define TPAO_USE_RCC 0x4 ! 163: #define TPAO_USE_NXPD 0x8 ! 164: ! 165: struct { ! 166: unsigned short _tpdufr_sref; /* source reference */ ! 167: unsigned char _tpdufr_reason; /* [ ISO 8073 13.5.3.d ] */ ! 168: } DR; ! 169: #define tpdu_DRli _tpduf._tpduf_li ! 170: #define tpdu_DRtype _tpduf._tpduf_type ! 171: #define tpdu_DRdref _tpduf._tpduf_dref ! 172: #define tpdu_DRsref _tpdufr.DR._tpdufr_sref ! 173: #define tpdu_DRreason _tpdufr.DR._tpdufr_reason ! 174: ! 175: unsigned short _tpdufr_sref; /* source reference */ ! 176: ! 177: #define tpdu_DCli _tpduf._tpduf_li ! 178: #define tpdu_DCtype _tpduf._tpduf_type ! 179: #define tpdu_DCdref _tpduf._tpduf_dref ! 180: #define tpdu_DCsref _tpdufr._tpdufr_sref ! 181: ! 182: struct { ! 183: #if BYTE_ORDER == BIG_ENDIAN ! 184: unsigned char _tpdufr_eot:1, /* end-of-tsdu */ ! 185: _tpdufr_seq:7; /* 7 bit sequence number */ ! 186: #endif ! 187: #if BYTE_ORDER == LITTLE_ENDIAN ! 188: unsigned char _tpdufr_seq:7, /* 7 bit sequence number */ ! 189: _tpdufr_eot:1; /* end-of-tsdu */ ! 190: #endif ! 191: }SEQEOT; ! 192: struct { ! 193: #if BYTE_ORDER == BIG_ENDIAN ! 194: unsigned int _tpdufr_Xeot:1, /* end-of-tsdu */ ! 195: _tpdufr_Xseq:31; /* 31 bit sequence number */ ! 196: #endif ! 197: #if BYTE_ORDER == LITTLE_ENDIAN ! 198: unsigned int _tpdufr_Xseq:31, /* 31 bit sequence number */ ! 199: _tpdufr_Xeot:1; /* end-of-tsdu */ ! 200: #endif ! 201: }SEQEOT31; ! 202: unsigned int _tpdufr_Xseqeot; ! 203: #define tpdu_seqeotX _tpdufr._tpdufr_Xseqeot ! 204: ! 205: #define tpdu_DTli _tpduf._tpduf_li ! 206: #define tpdu_DTtype _tpduf._tpduf_type ! 207: #define tpdu_DTdref _tpduf._tpduf_dref ! 208: #define tpdu_DTseq _tpdufr.SEQEOT._tpdufr_seq ! 209: #define tpdu_DTeot _tpdufr.SEQEOT._tpdufr_eot ! 210: #define tpdu_DTseqX _tpdufr.SEQEOT31._tpdufr_Xseq ! 211: #define tpdu_DTeotX _tpdufr.SEQEOT31._tpdufr_Xeot ! 212: ! 213: #define tpdu_XPDli _tpduf._tpduf_li ! 214: #define tpdu_XPDtype _tpduf._tpduf_type ! 215: #define tpdu_XPDdref _tpduf._tpduf_dref ! 216: #define tpdu_XPDseq _tpdufr.SEQEOT._tpdufr_seq ! 217: #define tpdu_XPDeot _tpdufr.SEQEOT._tpdufr_eot ! 218: #define tpdu_XPDseqX _tpdufr.SEQEOT31._tpdufr_Xseq ! 219: #define tpdu_XPDeotX _tpdufr.SEQEOT31._tpdufr_Xeot ! 220: ! 221: struct { ! 222: #if BYTE_ORDER == BIG_ENDIAN ! 223: unsigned _tpdufr_yrseq0:1, /* always zero */ ! 224: _tpdufr_yrseq:31; /* [ ISO 8073 13.9.3.d ] */ ! 225: #endif ! 226: #if BYTE_ORDER == LITTLE_ENDIAN ! 227: unsigned _tpdufr_yrseq:31, /* [ ISO 8073 13.9.3.d ] */ ! 228: _tpdufr_yrseq0:1; /* always zero */ ! 229: #endif ! 230: unsigned short _tpdufr_cdt; /* [ ISO 8073 13.9.3.b ] */ ! 231: } AK31; ! 232: ! 233: #define tpdu_AKli _tpduf._tpduf_li ! 234: #define tpdu_AKtype _tpduf._tpduf_type ! 235: #define tpdu_AKdref _tpduf._tpduf_dref ! 236: #define tpdu_AKseq _tpdufr.SEQEOT._tpdufr_seq ! 237: #define tpdu_AKseqX _tpdufr.AK31._tpdufr_yrseq ! 238: /* location of cdt depends on size of seq. numbers */ ! 239: #define tpdu_AKcdt _tpduf._tpduf_cdt ! 240: #define tpdu_AKcdtX _tpdufr.AK31._tpdufr_cdt ! 241: ! 242: #define tpdu_XAKli _tpduf._tpduf_li ! 243: #define tpdu_XAKtype _tpduf._tpduf_type ! 244: #define tpdu_XAKdref _tpduf._tpduf_dref ! 245: #define tpdu_XAKseq _tpdufr.SEQEOT._tpdufr_seq ! 246: #define tpdu_XAKseqX _tpdufr.SEQEOT31._tpdufr_Xseq ! 247: ! 248: unsigned char _tpdu_ERreason; /* [ ISO 8073 13.12.3.c ] */ ! 249: ! 250: #define tpdu_ERli _tpduf._tpduf_li ! 251: #define tpdu_ERtype _tpduf._tpduf_type ! 252: #define tpdu_ERdref _tpduf._tpduf_dref ! 253: #define tpdu_ERreason _tpdufr._tpdu_ERreason ! 254: ! 255: }; ! 256: ! 257: struct tpdu { ! 258: struct tpdu_fixed _tpduf; ! 259: union tpdu_fixed_rest _tpdufr; ! 260: }; ! 261: ! 262: #endif __TP_TPDU__
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.