|
|
1.1 ! root 1: /*++ ! 2: ! 3: Copyright (c) 1991 Microsoft Corporation ! 4: ! 5: Module Name: ! 6: ! 7: xti.h ! 8: ! 9: Abstract: ! 10: ! 11: This include file is Appendix F.1 from the X/Open CAE Specification (1992) ! 12: for the X/Open Transport Interface (XTI). ! 13: ! 14: Author: ! 15: ! 16: Eric Chin (ericc) November 11, 1991 ! 17: ! 18: Revision History: ! 19: ! 20: ! 21: --*/ ! 22: ! 23: #ifndef _XTI_HEADER_ ! 24: #define _XTI_HEADER_ ! 25: ! 26: /* ! 27: * The following are the error codes needed by both the kernel ! 28: * level transport providers and the user level library. ! 29: */ ! 30: #define TBADADDR 1 /* incorrect addr format */ ! 31: #define TBADOPT 2 /* incorrect option format */ ! 32: #define TACCES 3 /* incorrect permissions */ ! 33: #define TBADF 4 /* illegal transport fd */ ! 34: #define TNOADDR 5 /* couldn't allocate addr */ ! 35: #define TOUTSTATE 6 /* out of state */ ! 36: #define TBADSEQ 7 /* bad call sequence number */ ! 37: #define TSYSERR 8 /* system error */ ! 38: #define TLOOK 9 /* event requires attention */ ! 39: #define TBADDATA 10 /* illegal amount of data */ ! 40: #define TBUFOVFLW 11 /* buffer not large enough */ ! 41: #define TFLOW 12 /* flow control */ ! 42: #define TNODATA 13 /* no data */ ! 43: #define TNODIS 14 /* discon_ind not found on queue */ ! 44: #define TNOUDERR 15 /* unitdata error not found */ ! 45: #define TBADFLAG 16 /* bad flags */ ! 46: #define TNOREL 17 /* no ord rel found on queue */ ! 47: #define TNOTSUPPORT 18 /* primitive/action not supported */ ! 48: #define TSTATECHNG 19 /* state is in process of changing */ ! 49: #define TNOSTRUCTYPE 20 /* unsupported struct-type requested */ ! 50: #define TBADNAME 21 /* invalid transport provider name */ ! 51: #define TBADQLEN 22 /* qlen is zero */ ! 52: #define TADDRBUSY 23 /* address in use */ ! 53: #define TINDOUT 24 /* outstanding connection indications */ ! 54: #define TPROVMISMATCH 25 /* transport provide mismatch */ ! 55: #define TRESQLEN 26 /* resfd to accept w/ qlen > 0 */ ! 56: #define TRESADDR 27 /* resfd not bound to same addr as fd */ ! 57: #define TQFULL 28 /* incoming connection queue full */ ! 58: #define TPROTO 29 /* XTI protocol error */ ! 59: #define TNTERROR 101 /* NT status code */ ! 60: ! 61: ! 62: /* ! 63: * The following are the events returned ! 64: */ ! 65: #define T_LISTEN 0x0001 /* connection indication received */ ! 66: #define T_CONNECT 0x0002 /* connect confirmation received */ ! 67: #define T_DATA 0x0004 /* normal data received */ ! 68: #define T_EXDATA 0x0008 /* expedited data received */ ! 69: #define T_DISCONNECT 0x0010 /* disconnect received */ ! 70: #define T_UDERR 0x0040 /* datagram error indication */ ! 71: #define T_ORDREL 0x0080 /* orderly release indication */ ! 72: #define T_GODATA 0x0100 /* sending normal data is possible */ ! 73: #define T_GOEXDATA 0x0200 /* sending expedited data is possible */ ! 74: #define T_ERROR 0x0400 /* defined for TLI */ ! 75: ! 76: ! 77: /* ! 78: * The following are the flag definitions needed by the user level library ! 79: * routines. ! 80: */ ! 81: #define T_MORE 0x001 /* more data */ ! 82: #define T_EXPEDITED 0x002 /* expedited data */ ! 83: #define T_NEGOTIATE 0x004 /* set opts */ ! 84: #define T_CHECK 0x008 /* check opts */ ! 85: #define T_DEFAULT 0x010 /* get default opts */ ! 86: #define T_SUCCESS 0x020 /* successful */ ! 87: #define T_FAILURE 0x040 /* failure */ ! 88: #define T_CURRENT 0x080 /* get current options */ ! 89: ! 90: ! 91: /* ! 92: * XTI error return ! 93: * ! 94: * BUGBUG: ! 95: * This is no good for multi-threaded processes. ! 96: * ! 97: extern int t_errno; ! 98: */ ! 99: ! 100: ! 101: /* ! 102: * Protocol-specific service limits ! 103: */ ! 104: struct t_info { ! 105: long addr; /* max size of protocol address */ ! 106: long options; /* max bytes of protocol-specific options */ ! 107: long tsdu; /* max size of a transport service data unit */ ! 108: long etsdu; /* max size of expedited service data unit */ ! 109: long connect; /* max amount of data allowed on connection */ ! 110: /* establishment functions */ ! 111: long discon; /* max data allowed on t_snddis and t_rcvdis */ ! 112: long servtype; /* service type supported by provider */ ! 113: long flags; /* other info about the transport provider */ ! 114: }; ! 115: ! 116: ! 117: /* ! 118: * Service type defines ! 119: */ ! 120: #define T_COTS 01 /* connection-oriented transport service */ ! 121: #define T_COTS_ORD 02 /* connection-oriented with orderly release */ ! 122: #define T_CLTS 03 /* connectionless transport service */ ! 123: ! 124: ! 125: /* ! 126: * Flags defines (other info about the transport provider). ! 127: */ ! 128: #define T_SENDZERO 0x001 /* supports 0-length TSDUs */ ! 129: ! 130: ! 131: /* ! 132: * netbuf structure ! 133: */ ! 134: struct netbuf { ! 135: unsigned int maxlen; ! 136: unsigned int len; ! 137: char *buf; ! 138: }; ! 139: ! 140: ! 141: /* ! 142: * t_opthdr structure ! 143: */ ! 144: struct t_opthdr { ! 145: unsigned long len; /* total length of option; ie. ! 146: sizeof(struct t_opthdr) + length ! 147: of option value in bytes */ ! 148: unsigned long level; /* protocol affected */ ! 149: unsigned long name; /* option name */ ! 150: unsigned long status; /* status value */ ! 151: /* followed by the option value */ ! 152: }; ! 153: ! 154: ! 155: /* ! 156: * t_bind - format of the address and options arguments of bind ! 157: */ ! 158: struct t_bind { ! 159: struct netbuf addr; ! 160: unsigned qlen; ! 161: }; ! 162: ! 163: ! 164: /* ! 165: * Options management structure ! 166: */ ! 167: struct t_optmgmt { ! 168: struct netbuf opt; ! 169: long flags; ! 170: }; ! 171: ! 172: ! 173: /* ! 174: * Disconnect structure ! 175: */ ! 176: struct t_discon { ! 177: struct netbuf udata; /* user data */ ! 178: int reason; /* reason code */ ! 179: int sequence; /* sequence number */ ! 180: }; ! 181: ! 182: ! 183: /* ! 184: * Call structure ! 185: */ ! 186: struct t_call { ! 187: struct netbuf addr; /* address */ ! 188: struct netbuf opt; /* options */ ! 189: struct netbuf udata; /* user data */ ! 190: int sequence; /* sequence number */ ! 191: }; ! 192: ! 193: ! 194: /* ! 195: * Datagram structure ! 196: */ ! 197: struct t_unitdata { ! 198: struct netbuf addr; /* address */ ! 199: struct netbuf opt; /* options */ ! 200: struct netbuf udata; /* user data */ ! 201: }; ! 202: ! 203: ! 204: /* ! 205: * Unitdata error structure ! 206: */ ! 207: struct t_uderr { ! 208: struct netbuf addr; /* address */ ! 209: struct netbuf opt; /* options */ ! 210: long error; /* error code */ ! 211: }; ! 212: ! 213: ! 214: /* ! 215: * The following are structure types used when dynamically allocating the ! 216: * above structures via t_alloc(). ! 217: */ ! 218: #define T_BIND 1 /* struct t_bind */ ! 219: #define T_OPTMGMT 2 /* struct t_optmgmt */ ! 220: #define T_CALL 3 /* struct t_call */ ! 221: #define T_DIS 4 /* struct t_discon */ ! 222: #define T_UNITDATA 5 /* struct t_unitdata */ ! 223: #define T_UDERROR 6 /* struct t_uderr */ ! 224: #define T_INFO 7 /* struct t_info */ ! 225: ! 226: ! 227: /* ! 228: * The following bits specify which fields of the above structures should ! 229: * be allocated by t_alloc(). ! 230: */ ! 231: #define T_ADDR 0x01 /* address */ ! 232: #define T_OPT 0x02 /* options */ ! 233: #define T_UDATA 0x04 /* user data */ ! 234: #define T_ALL 0xffff /* all the above fields supported */ ! 235: ! 236: ! 237: /* ! 238: * The following are the states for the user. ! 239: */ ! 240: #define T_UNBND 1 /* unbound */ ! 241: #define T_IDLE 2 /* idle */ ! 242: #define T_OUTCON 3 /* outgoing connection pending */ ! 243: #define T_INCON 4 /* incoming connection pending */ ! 244: #define T_DATAXFER 5 /* data transfer */ ! 245: #define T_OUTREL 6 /* outgoing release pending */ ! 246: #define T_INREL 7 /* incoming release pending */ ! 247: ! 248: ! 249: /* ! 250: * General purpose defines ! 251: */ ! 252: #define T_YES 1 ! 253: #define T_NO 0 ! 254: #define T_UNUSED -1 ! 255: #define T_NULL 0 ! 256: #define T_ABSREQ 0x8000 ! 257: #define T_INFINITE -1 ! 258: #define T_INVALID -2 ! 259: ! 260: /* T_INFINITE and T_INVALID are values of t_info */ ! 261: ! 262: /* ! 263: * General definitions for option management ! 264: */ ! 265: #define T_UNSPEC (~0 - 2) /* applicable to u_long, long, ... */ ! 266: #define T_ALLOPT 0 ! 267: #define T_ALIGN(p) (((unsigned long) (p) + (sizeof(long) - 1)) \ ! 268: & ~(sizeof(long) - 1)) ! 269: ! 270: #define OPT_NEXTHDR(pbuf, buflen, popt) \ ! 271: (((char *) (popt) + T_ALIGN((popt)->len) < \ ! 272: pbuf + buflen) ? \ ! 273: (struct t_opthdr *) ((char *) (popt) + \ ! 274: T_ALIGN((popt)->len)) : \ ! 275: (struct t_opthdr *) NULL) ! 276: ! 277: ! 278: /* ! 279: * OPTIONS ON XTI LEVEL ! 280: */ ! 281: #define XTI_GENERIC 0xffff ! 282: ! 283: /* ! 284: * XTI-level Options ! 285: */ ! 286: #define XTI_DEBUG 0x0001 /* enable debugging */ ! 287: #define XTI_LINGER 0x0080 /* linger on close if data present */ ! 288: #define XTI_RCVBUF 0x1002 /* receive buffer size */ ! 289: #define XTI_RCVLOWAT 0x1004 /* receive low-water mark */ ! 290: #define XTI_SNDBUF 0x1001 /* send buffer size */ ! 291: #define XTI_SNDLOWAT 0x1003 /* send low-water mark */ ! 292: ! 293: ! 294: /* ! 295: * Structure used with linger option ! 296: */ ! 297: struct t_linger { ! 298: long l_onoff; /* option on/off */ ! 299: long l_linger; /* linger time */ ! 300: }; ! 301: ! 302: ! 303: /* ! 304: * SPECIFIC ISO OPTION AND MANAGEMENT PARAMETERS ! 305: */ ! 306: ! 307: /* ! 308: * Definition of the ISO transport classes ! 309: */ ! 310: #define T_CLASS0 0 ! 311: #define T_CLASS1 1 ! 312: #define T_CLASS2 2 ! 313: #define T_CLASS3 3 ! 314: #define T_CLASS4 4 ! 315: ! 316: ! 317: /* ! 318: * Definition of the priorities ! 319: */ ! 320: #define T_PRITOP 0 ! 321: #define T_PRIHIGH 1 ! 322: #define T_PRIMID 2 ! 323: #define T_PRILOW 3 ! 324: #define T_PRIDFLT 4 ! 325: ! 326: ! 327: /* ! 328: * Definitions of the protection levels ! 329: */ ! 330: #define T_NOPROTECT 1 ! 331: #define T_PASSIVEPROTECT 2 ! 332: #define T_ACTIVEPROTECT 4 ! 333: ! 334: ! 335: /* ! 336: * Default value for the length of TPDUs. ! 337: */ ! 338: #define T_LTPDUDFLT 128 /* define obsolete in XPG4 */ ! 339: ! 340: ! 341: /* ! 342: * rate structure ! 343: */ ! 344: struct rate { ! 345: long targetvalue; /* target value */ ! 346: long minacceptvalue; /* minimum acceptable quality */ ! 347: }; ! 348: ! 349: ! 350: /* ! 351: * reqvalue structure. ! 352: */ ! 353: struct reqvalue { ! 354: struct rate called; /* called rate */ ! 355: struct rate calling; /* calling rate */ ! 356: }; ! 357: ! 358: ! 359: /* ! 360: * thrpt structure. ! 361: */ ! 362: struct thrpt { ! 363: struct reqvalue maxthrpt; /* maximum throughput */ ! 364: struct reqvalue avgthrpt; /* average throughput */ ! 365: }; ! 366: ! 367: ! 368: /* ! 369: * transdel structure ! 370: */ ! 371: struct transdel { ! 372: struct reqvalue maxdel; /* maximum transit delay */ ! 373: struct reqvalue avgdel; /* average transit delay */ ! 374: }; ! 375: ! 376: ! 377: ! 378: /* ! 379: * Protocol Levels ! 380: */ ! 381: #define ISO_TP 0x0100 ! 382: ! 383: ! 384: /* ! 385: * Options for Quality of Service and Expedited Data (ISO 8072:1986) ! 386: */ ! 387: #define TCO_THROUGHPUT 0x0001 ! 388: #define TCO_TRANSDEL 0x0002 ! 389: #define TCO_RESERRORRATE 0x0003 ! 390: #define TCO_TRANSFFAILPROB 0x0004 ! 391: #define TCO_ESTFAILPROB 0x0005 ! 392: #define TCO_RELFAILPROB 0x0006 ! 393: #define TCO_ESTDELAY 0x0007 ! 394: #define TCO_RELDELAY 0x0008 ! 395: #define TCO_CONNRESIL 0x0009 ! 396: #define TCO_PROTECTION 0x000a ! 397: #define TCO_PRIORITY 0x000b ! 398: #define TCO_EXPD 0x000c ! 399: ! 400: #define TCL_TRANSDEL 0x000d ! 401: #define TCL_RESERRORRATE TCO_RESERRORRATE ! 402: #define TCL_PROTECTION TCO_PROTECTION ! 403: #define TCL_PRIORITY TCO_PRIORITY ! 404: ! 405: ! 406: /* ! 407: * Management Options ! 408: */ ! 409: #define TCO_LTPDU 0x0100 ! 410: #define TCO_ACKTIME 0x0200 ! 411: #define TCO_REASTIME 0x0300 ! 412: #define TCO_EXTFORM 0x0400 ! 413: #define TCO_FLOWCTRL 0x0500 ! 414: #define TCO_CHECKSUM 0x0600 ! 415: #define TCO_NETEXP 0x0700 ! 416: #define TCO_NETRECPTCF 0x0800 ! 417: #define TCO_PREFCLASS 0x0900 ! 418: #define TCO_ALTCLASS1 0x0a00 ! 419: #define TCO_ALTCLASS2 0x0b00 ! 420: #define TCO_ALTCLASS3 0x0c00 ! 421: #define TCO_ALTCLASS4 0x0d00 ! 422: ! 423: #define TCL_CHECKSUM TCO_CHECKSUM ! 424: ! 425: ! 426: /* INTERNET SPECIFIC ENVIRONMENT */ ! 427: ! 428: /* ! 429: * TCP level ! 430: */ ! 431: #define INET_TCP 0x6 ! 432: ! 433: ! 434: /* ! 435: * TCP-level Options ! 436: */ ! 437: #define TCP_NODELAY 0x1 /* don't delay packets to coalesce */ ! 438: #define TCP_MAXSEG 0x2 /* get maximum segment size */ ! 439: #define TCP_KEEPALIVE 0x8 /* check, if connections are alive */ ! 440: ! 441: ! 442: /* ! 443: * Structure used with TCP_KEEPALIVE option. ! 444: */ ! 445: struct t_kpalive { ! 446: long kp_onoff; /* option on/off */ ! 447: long kp_timeout; /* timeout in minutes */ ! 448: }; ! 449: ! 450: #define T_GARBAGE 0x02 ! 451: ! 452: ! 453: /* ! 454: * UDP level ! 455: */ ! 456: #define INET_UDP 0x11 ! 457: ! 458: ! 459: /* ! 460: * UDP-level Options ! 461: */ ! 462: #define UDP_CHECKSUM TCO_CHECKSUM /* checksum computation */ ! 463: ! 464: ! 465: /* ! 466: * IP level ! 467: */ ! 468: #define INET_IP 0x0 ! 469: ! 470: ! 471: /* ! 472: * IP-level Options ! 473: */ ! 474: #define IP_OPTIONS 0x1 /* IP per-packet options */ ! 475: #define IP_TOS 0x2 /* IP per-packet type of service */ ! 476: #define IP_TTL 0x3 /* IP per-packet time to live */ ! 477: #define IP_REUSEADDR 0x4 /* allow local address reuse */ ! 478: #define IP_DONTROUTE 0x10 /* just use interface addresses */ ! 479: #define IP_BROADCAST 0x20 /* permit sending of broadcast msgs */ ! 480: ! 481: ! 482: /* ! 483: * IP_TOS precedence levels ! 484: */ ! 485: #define T_ROUTINE 0 ! 486: #define T_PRIORITY 1 ! 487: #define T_IMMEDIATE 2 ! 488: #define T_FLASH 3 ! 489: #define T_OVERRIDEFLASH 4 ! 490: #define T_CRITIC_ECP 5 ! 491: #define T_INETCONTROL 6 ! 492: #define T_NETCONTROL 7 ! 493: ! 494: ! 495: /* ! 496: * IP_TOS type of service ! 497: */ ! 498: #define T_NOTOS 0 ! 499: #define T_LDELAY (1 << 4) ! 500: #define T_HITHRPT (1 << 3) ! 501: #define T_HIREL (1 << 2) ! 502: ! 503: #define SET_TOS(prec, tos) ((0x7 & (prec)) << 5 | (0x1c & (tos))) ! 504: ! 505: ! 506: ! 507: ! 508: #endif /* _XTI_HEADER_ */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.