|
|
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.