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.
5241 lines
177 KiB
5241 lines
177 KiB
/* |
|
File: OpenTransportProtocol.h |
|
|
|
Contains: Definitions likely to be used by low-level protocol stack implementation. |
|
|
|
Version: QuickTime 7.3 |
|
|
|
Copyright: (c) 2007 (c) 1993-2001 by Apple Computer, Inc. and Mentat Inc., all rights reserved. |
|
|
|
Bugs?: For bug reports, consult the following page on |
|
the World Wide Web: |
|
|
|
http://developer.apple.com/bugreporter/ |
|
|
|
*/ |
|
#ifndef __OPENTRANSPORTPROTOCOL__ |
|
#define __OPENTRANSPORTPROTOCOL__ |
|
|
|
#ifndef __CONDITIONALMACROS__ |
|
#include <ConditionalMacros.h> |
|
#endif |
|
|
|
|
|
#if CALL_NOT_IN_CARBON |
|
#ifndef __FILES__ |
|
#include <Files.h> |
|
#endif |
|
|
|
#ifndef __CODEFRAGMENTS__ |
|
#include <CodeFragments.h> |
|
#endif |
|
|
|
#endif /* CALL_NOT_IN_CARBON */ |
|
|
|
#ifndef __OPENTRANSPORT__ |
|
#include <OpenTransport.h> |
|
#endif |
|
|
|
|
|
#ifdef __cplusplus |
|
#include <stddef.h> |
|
#endif |
|
|
|
|
|
#if PRAGMA_ONCE |
|
#pragma once |
|
#endif |
|
|
|
#ifdef __cplusplus |
|
extern "C" { |
|
#endif |
|
|
|
#if PRAGMA_IMPORT |
|
#pragma import on |
|
#endif |
|
|
|
#if PRAGMA_STRUCT_ALIGN |
|
#pragma options align=mac68k |
|
#elif PRAGMA_STRUCT_PACKPUSH |
|
#pragma pack(push, 2) |
|
#elif PRAGMA_STRUCT_PACK |
|
#pragma pack(2) |
|
#endif |
|
|
|
#if defined(__MWERKS__) && TARGET_CPU_68K |
|
#pragma push |
|
#pragma pointers_in_D0 |
|
#endif |
|
|
|
/* ***** Setup Default Compiler Variables ******/ |
|
|
|
/* |
|
OTKERNEL is used to indicate whether the code is being built |
|
for the kernel environment. It defaults to 0. If you include |
|
"OpenTransportKernel.h" before including this file, |
|
it will be 1 and you will only be able to see stuff available |
|
to kernel code. |
|
As we've included "OpenTransport.h" and it defaults this variable |
|
to 0 if it's not already been defined, it should always be defined |
|
by the time we get here. So we just assert that. Assertions in |
|
header files! Cool (-: |
|
*/ |
|
|
|
#ifndef OTKERNEL |
|
#error OpenTransportProtocol.h expects OpenTransport.h to set up OTKERNEL. |
|
#endif /* !defined(OTKERNEL) */ |
|
|
|
/* ***** Shared Client Memory ******/ |
|
#if !OTKERNEL |
|
/* |
|
These allocators allocate memory in the shared client pool, |
|
which is shared between all clients and is not disposed when |
|
a particular client goes away. See DTS Technote ooo |
|
"Understanding Open Transport Memory Management" for details. |
|
*/ |
|
#if CALL_NOT_IN_CARBON |
|
/* |
|
* OTAllocSharedClientMem() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( void * ) |
|
OTAllocSharedClientMem(OTByteCount size); |
|
|
|
|
|
/* |
|
* OTFreeSharedClientMem() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( void ) |
|
OTFreeSharedClientMem(void * mem); |
|
|
|
|
|
#endif /* CALL_NOT_IN_CARBON */ |
|
|
|
#endif /* !OTKERNEL */ |
|
|
|
/* ***** UNIX Types ******/ |
|
#if CALL_NOT_IN_CARBON |
|
/* |
|
On UNIX, uid_t and gid_t are defined to be big enough |
|
to hold a user ID and group ID respectively. As Mac OS |
|
has no such concepts, we just define them as UInt32 place |
|
holders. |
|
*/ |
|
typedef UInt32 uid_t; |
|
typedef UInt32 gid_t; |
|
/* Similarly, dev_t is a UNIX type for denoting a device number.*/ |
|
typedef UInt32 dev_t; |
|
/* ***** From the Mentat "strstat.h" ******/ |
|
|
|
/* module statistics structure */ |
|
struct module_stat { |
|
long ms_pcnt; /* count of calls to put proc */ |
|
long ms_scnt; /* count of calls to service proc */ |
|
long ms_ocnt; /* count of calls to open proc */ |
|
long ms_ccnt; /* count of calls to close proc */ |
|
long ms_acnt; /* count of calls to admin proc */ |
|
char * ms_xptr; /* pointer to private statistics */ |
|
short ms_xsize; /* length of private statistics buffer */ |
|
}; |
|
typedef struct module_stat module_stat; |
|
/* ***** From the Mentat "cred.h" ******/ |
|
|
|
struct cred { |
|
UInt16 cr_ref; /* reference count on processes using cred structures */ |
|
UInt16 cr_ngroups; /* number of groups in cr_groups */ |
|
uid_t cr_uid; /* effective user id */ |
|
gid_t cr_gid; /* effective group id */ |
|
uid_t cr_ruid; /* real user id */ |
|
gid_t cr_rgid; /* real group id */ |
|
uid_t cr_suid; /* user id saved by exec */ |
|
gid_t cr_sgid; /* group id saved by exec */ |
|
gid_t cr_groups[1]; /* supplementary groups list */ |
|
}; |
|
typedef struct cred cred; |
|
typedef cred cred_t; |
|
/* Free return structure for esballoc */ |
|
typedef CALLBACK_API_C( void , FreeFuncType )(char * arg); |
|
struct free_rtn { |
|
FreeFuncType free_func; /* Routine to call to free buffer */ |
|
char * free_arg; /* Parameter to free_func */ |
|
}; |
|
typedef struct free_rtn free_rtn; |
|
typedef free_rtn frtn_t; |
|
/* data descriptor */ |
|
typedef struct datab datab; |
|
union datab_db_f { |
|
datab * freep; |
|
free_rtn * frtnp; |
|
}; |
|
typedef union datab_db_f datab_db_f; |
|
struct datab { |
|
datab_db_f db_f; |
|
unsigned char * db_base; /* first byte of buffer */ |
|
unsigned char * db_lim; /* last byte+1 of buffer */ |
|
unsigned char db_ref; /* count of messages pointing to block*/ |
|
unsigned char db_type; /* message type */ |
|
unsigned char db_iswhat; /* message status */ |
|
unsigned char db_filler2; /* for spacing */ |
|
UInt32 db_size; /* used internally */ |
|
unsigned char * db_msgaddr; /* used internally */ |
|
long db_filler; |
|
}; |
|
|
|
|
|
typedef datab dblk_t; |
|
#define db_freep db_f.freep |
|
#define db_frtnp db_f.frtnp |
|
|
|
/* message block */ |
|
struct msgb { |
|
struct msgb * b_next; /* next message on queue */ |
|
struct msgb * b_prev; /* previous message on queue */ |
|
struct msgb * b_cont; /* next message block of message */ |
|
unsigned char * b_rptr; /* first unread data byte in buffer */ |
|
unsigned char * b_wptr; /* first unwritten data byte */ |
|
datab * b_datap; /* data block */ |
|
unsigned char b_band; /* message priority */ |
|
unsigned char b_pad1; |
|
unsigned short b_flag; |
|
#ifdef MSGB_XTRA |
|
|
|
MSGB_XTRA |
|
|
|
#endif |
|
|
|
}; |
|
typedef struct msgb msgb; |
|
typedef msgb mblk_t; |
|
/* mblk flags */ |
|
enum { |
|
MSGMARK = 0x01, /* last byte of message is tagged */ |
|
MSGNOLOOP = 0x02, /* don't pass message to write-side of stream */ |
|
MSGDELIM = 0x04, /* message is delimited */ |
|
MSGNOGET = 0x08 |
|
}; |
|
|
|
/* STREAMS environments are expected to define these constants in a public header file.*/ |
|
|
|
enum { |
|
STRCTLSZ = 256, /* Maximum Control buffer size for messages */ |
|
STRMSGSZ = 8192 /* Maximum # data bytes for messages */ |
|
}; |
|
|
|
/* Message types */ |
|
enum { |
|
QNORM = 0, |
|
M_DATA = 0, /* Ordinary data */ |
|
M_PROTO = 1, /* Internal control info and data */ |
|
M_BREAK = 0x08, /* Request a driver to send a break */ |
|
M_PASSFP = 0x09, /* Used to pass a file pointer */ |
|
M_SIG = 0x0B, /* Requests a signal to be sent */ |
|
M_DELAY = 0x0C, /* Request a real-time delay */ |
|
M_CTL = 0x0D, /* For inter-module communication */ |
|
M_IOCTL = 0x0E, /* Used internally for I_STR requests */ |
|
M_SETOPTS = 0x10, /* Alters characteristics of Stream head */ |
|
M_RSE = 0x11 /* Reserved for internal use */ |
|
}; |
|
|
|
/* MPS private type */ |
|
enum { |
|
M_MI = 0x40, |
|
M_MI_READ_RESET = 1, |
|
M_MI_READ_SEEK = 2, |
|
M_MI_READ_END = 4 |
|
}; |
|
|
|
/* Priority messages types */ |
|
enum { |
|
QPCTL = 0x80, |
|
M_IOCACK = 0x81, /* Positive ack of previous M_IOCTL */ |
|
M_IOCNAK = 0x82, /* Previous M_IOCTL failed */ |
|
M_PCPROTO = 0x83, /* Same as M_PROTO except for priority */ |
|
M_PCSIG = 0x84, /* Priority signal */ |
|
M_FLUSH = 0x86, /* Requests modules to flush queues */ |
|
M_STOP = 0x87, /* Request drivers to stop output */ |
|
M_START = 0x88, /* Request drivers to start output */ |
|
M_HANGUP = 0x89, /* Driver can no longer produce data */ |
|
M_ERROR = 0x8A, /* Reports downstream error condition */ |
|
M_READ = 0x8B, /* Reports client read at Stream head */ |
|
M_COPYIN = 0x8C, /* Requests the Stream to copy data in for a module */ |
|
M_COPYOUT = 0x8D, /* Requests the Stream to copy data out for a module */ |
|
M_IOCDATA = 0x8E, /* Status from M_COPYIN/M_COPYOUT message */ |
|
M_PCRSE = 0x90, /* Reserved for internal use */ |
|
M_STOPI = 0x91, /* Request drivers to stop input */ |
|
M_STARTI = 0x92, /* Request drivers to start input */ |
|
M_HPDATA = 0x93 /* MPS-private type; high priority data */ |
|
}; |
|
|
|
/* Defines for flush messages */ |
|
enum { |
|
FLUSHALL = 1, |
|
FLUSHDATA = 0 |
|
}; |
|
|
|
|
|
enum { |
|
NOERROR = -1 /* used in M_ERROR messages */ |
|
}; |
|
|
|
typedef struct sth_s sth_s; |
|
typedef struct sqh_s sqh_s; |
|
typedef struct q_xtra q_xtra; |
|
#if OTKERNEL |
|
/* |
|
module_info is aligned differently on 68K than |
|
on PowerPC. Yucky. I can't defined a conditionalised |
|
pad field because a) you can't conditionalise specific |
|
fields in the interface definition language used to |
|
create Universal Interfaces, and b) lots of code |
|
assigns C structured constants to global variables |
|
of this type, and these assignments break if you |
|
add an extra field to the type. Instead, I |
|
set the alignment appropriately before defining the |
|
structure. The problem with doing that is that |
|
the interface definition language doesn't allow |
|
my to set the alignment in the middle of a file, |
|
so I have to do this via "pass throughs". This |
|
works fine for the well known languages (C, Pascal), |
|
but may cause problems for other languages (Java, |
|
Asm). |
|
*/ |
|
#if TARGET_CPU_PPC |
|
#pragma options align=power |
|
#endif |
|
struct module_info { |
|
unsigned short mi_idnum; /* module ID number */ |
|
char * mi_idname; /* module name */ |
|
long mi_minpsz; /* min pkt size, for developer use */ |
|
long mi_maxpsz; /* max pkt size, for developer use */ |
|
unsigned long mi_hiwat; /* hi-water mark, for flow control */ |
|
unsigned long mi_lowat; /* lo-water mark, for flow control */ |
|
}; |
|
typedef struct module_info module_info; |
|
typedef module_info * module_infoPtr; |
|
#if TARGET_CPU_PPC |
|
#pragma options align=reset |
|
#endif |
|
|
|
|
|
typedef struct queue queue; |
|
typedef CALLBACK_API_C( OTInt32 , admin_t )(void); |
|
typedef CALLBACK_API_C( void , bufcall_t )(long size); |
|
typedef CALLBACK_API_C( void , bufcallp_t )(long size); |
|
typedef CALLBACK_API_C( OTInt32 , closep_t )(queue *q, OTInt32 foo, cred_t *cred); |
|
typedef CALLBACK_API_C( OTInt32 , old_closep_t )(queue * q); |
|
typedef CALLBACK_API_C( OTInt32 , openp_t )(queue *q, dev_t *dev, OTInt32 foo, OTInt32 bar, cred_t *cred); |
|
typedef CALLBACK_API_C( OTInt32 , openOld_t )(queue *q, dev_t dev, OTInt32 foo, OTInt32 bar); |
|
typedef CALLBACK_API_C( OTInt32 , old_openp_t )(queue *q, dev_t dev, OTInt32 foo, OTInt32 bar); |
|
typedef CALLBACK_API_C( OTInt32 , closeOld_t )(queue * q); |
|
typedef CALLBACK_API_C( OTInt32 , putp_t )(queue *q, msgb *mp); |
|
typedef CALLBACK_API_C( OTInt32 , srvp_t )(queue * q); |
|
struct qinit { |
|
putp_t qi_putp; /* put procedure */ |
|
srvp_t qi_srvp; /* service procedure */ |
|
openp_t qi_qopen; /* called on each open or a push */ |
|
closep_t qi_qclose; /* called on last close or a pop */ |
|
admin_t qi_qadmin; /* reserved for future use */ |
|
module_info * qi_minfo; /* information structure */ |
|
module_stat * qi_mstat; /* statistics structure - optional */ |
|
}; |
|
typedef struct qinit qinit; |
|
/* defines module or driver */ |
|
struct streamtab { |
|
qinit * st_rdinit; /* defines read QUEUE */ |
|
qinit * st_wrinit; /* defines write QUEUE */ |
|
qinit * st_muxrinit; /* for multiplexing drivers only */ |
|
qinit * st_muxwinit; /* ditto */ |
|
}; |
|
typedef struct streamtab streamtab; |
|
struct qband { |
|
struct qband * qb_next; /* next band for this queue */ |
|
unsigned long qb_count; /* weighted count of characters in this band */ |
|
msgb * qb_first; /* head of message queue */ |
|
msgb * qb_last; /* tail of message queue */ |
|
unsigned long qb_hiwat; /* high water mark */ |
|
unsigned long qb_lowat; /* low water mark */ |
|
unsigned short qb_flag; /* ooo.state */ |
|
short qb_pad1; /* ooo reserved */ |
|
}; |
|
typedef struct qband qband; |
|
typedef qband qband_t; |
|
union queue_q_u { |
|
queue * q_u_link; /* link to scheduling queue */ |
|
sqh_s * q_u_sqh_parent; |
|
}; |
|
typedef union queue_q_u queue_q_u; |
|
struct queue { |
|
qinit * q_qinfo; /* procedures and limits for queue */ |
|
msgb * q_first; /* head of message queue */ |
|
msgb * q_last; /* tail of message queue */ |
|
struct queue * q_next; /* next queue in Stream */ |
|
queue_q_u q_u; |
|
char * q_ptr; /* to private data structure */ |
|
unsigned long q_count; /* weighted count of characters on q */ |
|
long q_minpsz; /* min packet size accepted */ |
|
long q_maxpsz; /* max packet size accepted */ |
|
unsigned long q_hiwat; /* high water mark, for flow control */ |
|
unsigned long q_lowat; /* low water mark */ |
|
qband * q_bandp; /* band information */ |
|
unsigned short q_flag; /* ooo queue state */ |
|
unsigned char q_nband; /* ooo number of bands */ |
|
unsigned char q_pad1[1]; /* ooo reserved */ |
|
q_xtra * q_osx; /* Pointer to OS-dependent extra stuff */ |
|
struct queue * q_ffcp; /* Forward flow control pointer */ |
|
struct queue * q_bfcp; /* Backward flow control pointer */ |
|
}; |
|
|
|
|
|
typedef queue * queuePtr; |
|
typedef queue queue_t; |
|
#define q_link q_u.q_u_link |
|
#define q_sqh_parent q_u.q_u_sqh_parent |
|
|
|
/* queue_t flag defines */ |
|
enum { |
|
QREADR = 0x01, /* This queue is a read queue */ |
|
QNOENB = 0x02, /* Don't enable in putq */ |
|
QFULL = 0x04, /* The queue is full */ |
|
QWANTR = 0x08, /* The queue should be scheduled in the next putq */ |
|
QWANTW = 0x10, /* The stream should be back enabled when this queue drains */ |
|
QUSE = 0x20, /* The queue is allocated and ready for use */ |
|
QENAB = 0x40, /* The queue is scheduled (on the run queue) */ |
|
QBACK = 0x80, /* The queue has been back enabled */ |
|
QOLD = 0x0100, /* Module supports old style opens and closes */ |
|
QHLIST = 0x0200, /* The Stream head is doing something with this queue (Not supported by MPS) */ |
|
QWELDED = 0x0400, /* Mentat flag for welded queues */ |
|
QUNWELDING = 0x0800, /* Queue is scheduled to be unwelded */ |
|
QPROTECTED = 0x1000, /* Mentat flag for unsafe q access */ |
|
QEXCOPENCLOSE = 0x2000 /* Queue wants exclusive open/close calls */ |
|
}; |
|
|
|
/* qband_t flag defines */ |
|
enum { |
|
QB_FULL = 0x01, /* The band is full */ |
|
QB_WANTW = 0x02, /* The stream should be back enabled when this band/queue drains */ |
|
QB_BACK = 0x04 /* The queue has been back enabled */ |
|
}; |
|
|
|
#else |
|
/* |
|
Client code views a queue_t as a simple cookie. |
|
The real definition lives above and is only available |
|
to kernel code. |
|
*/ |
|
typedef SInt32 queue_t; |
|
#endif /* OTKERNEL */ |
|
|
|
/* structure contained in M_COPYIN/M_COPYOUT messages */ |
|
typedef char * caddr_t; |
|
struct copyreq { |
|
SInt32 cq_cmd; /* ioctl command (from ioc_cmd) */ |
|
cred * cq_cr; /* pointer to full credentials */ |
|
UInt32 cq_id; /* ioctl id (from ioc_id) */ |
|
caddr_t cq_addr; /* address to copy data to/from */ |
|
UInt32 cq_size; /* number of bytes to copy */ |
|
SInt32 cq_flag; /* state */ |
|
mblk_t * cq_private; /* private state information */ |
|
long cq_filler[4]; |
|
}; |
|
typedef struct copyreq copyreq; |
|
#define cq_uid cq_cr->cr_uid |
|
#define cq_gid cq_cr->cr_gid |
|
|
|
|
|
/* copyreq defines */ |
|
enum { |
|
STRCANON = 0x01, /* b_cont data block contains canonical format specifier */ |
|
RECOPY = 0x02 /* perform I_STR copyin again this time using canonical format specifier */ |
|
}; |
|
|
|
/* structure contained in M_IOCDATA message block */ |
|
struct copyresp { |
|
SInt32 cp_cmd; /* ioctl command (from ioc_cmd) */ |
|
cred * cp_cr; /* pointer to full credentials */ |
|
UInt32 cp_id; /* ioctl id (from ioc_id) */ |
|
caddr_t cp_rval; /* status of request; 0 for success; error value for failure */ |
|
UInt32 cp_pad1; |
|
SInt32 cp_pad2; |
|
mblk_t * cp_private; /* private state information */ |
|
long cp_filler[4]; |
|
}; |
|
typedef struct copyresp copyresp; |
|
#define cp_uid cp_cr->cr_uid |
|
#define cp_gid cp_cr->cr_gid |
|
|
|
/* structure contained in an M_IOCTL message block */ |
|
struct iocblk { |
|
SInt32 ioc_cmd; /* ioctl command type */ |
|
cred * ioc_cr; /* pointer to full credentials */ |
|
UInt32 ioc_id; /* ioctl id */ |
|
UInt32 ioc_count; /* count of bytes in data field */ |
|
SInt32 ioc_error; /* error code */ |
|
SInt32 ioc_rval; /* return value */ |
|
long ioc_filler[4]; |
|
}; |
|
typedef struct iocblk iocblk; |
|
#define ioc_uid ioc_cr->cr_uid |
|
#define ioc_gid ioc_cr->cr_gid |
|
|
|
|
|
|
|
enum { |
|
TRANSPARENT = (unsigned long)0xFFFFFFFF |
|
}; |
|
|
|
/* Used in M_IOCTL mblks to muxes (ioc_cmd I_LINK) */ |
|
struct linkblk { |
|
queue_t * l_qtop; /* lowest level write queue of upper stream */ |
|
queue_t * l_qbot; /* highest level write queue of lower stream */ |
|
SInt32 l_index; /* system-unique index for lower stream */ |
|
long l_pad[5]; |
|
}; |
|
typedef struct linkblk linkblk; |
|
/* structure contained in an M_PASSFP message block */ |
|
struct strpfp { |
|
unsigned long pass_file_cookie; /* file 'pointer' */ |
|
unsigned short pass_uid; /* user id of sending stream */ |
|
unsigned short pass_gid; |
|
sth_s * pass_sth; /* Stream head pointer of passed stream */ |
|
}; |
|
typedef struct strpfp strpfp; |
|
/* structure contained in an M_SETOPTS message block */ |
|
struct stroptions { |
|
unsigned long so_flags; /* options to set */ |
|
short so_readopt; /* read option */ |
|
unsigned short so_wroff; /* write offset */ |
|
long so_minpsz; /* minimum read packet size */ |
|
long so_maxpsz; /* maximum read packet size */ |
|
unsigned long so_hiwat; /* read queue high-water mark */ |
|
unsigned long so_lowat; /* read queue low-water mark */ |
|
unsigned char so_band; /* band for water marks */ |
|
unsigned char so_filler[3]; /* added for alignment */ |
|
unsigned long so_poll_set; /* poll events to set */ |
|
unsigned long so_poll_clr; /* poll events to clear */ |
|
}; |
|
typedef struct stroptions stroptions; |
|
/* definitions for so_flags field */ |
|
enum { |
|
SO_ALL = 0x7FFF, /* Update all options */ |
|
SO_READOPT = 0x0001, /* Set the read mode */ |
|
SO_WROFF = 0x0002, /* Insert an offset in write M_DATA mblks */ |
|
SO_MINPSZ = 0x0004, /* Change the min packet size on sth rq */ |
|
SO_MAXPSZ = 0x0008, /* Change the max packet size on sth rq */ |
|
SO_HIWAT = 0x0010, /* Change the high water mark on sth rq */ |
|
SO_LOWAT = 0x0020, /* Change the low water mark */ |
|
SO_MREADON = 0x0040, /* Request M_READ messages */ |
|
SO_MREADOFF = 0x0080, /* Don't gen M_READ messages */ |
|
SO_NDELON = 0x0100, /* old TTY semantics for O_NDELAY reads and writes */ |
|
SO_NDELOFF = 0x0200, /* STREAMS semantics for O_NDELAY reads and writes */ |
|
SO_ISTTY = 0x0400, /* Become a controlling tty */ |
|
SO_ISNTTY = 0x0800, /* No longer a controlling tty */ |
|
SO_TOSTOP = 0x1000, /* Stop on background writes */ |
|
SO_TONSTOP = 0x2000, /* Don't stop on background writes */ |
|
SO_BAND = 0x4000, /* Water marks are for a band */ |
|
SO_POLL_SET = 0x8000, /* Set events to poll */ |
|
SO_POLL_CLR = 0x00010000 /* Clear events to poll */ |
|
}; |
|
|
|
/* Buffer Allocation Priority */ |
|
enum { |
|
BPRI_LO = 1, |
|
BPRI_MED = 2, |
|
BPRI_HI = 3 |
|
}; |
|
|
|
enum { |
|
INFPSZ = -1 |
|
}; |
|
|
|
|
|
/** Test whether message is a data message */ |
|
#define datamsg(type) ((type) == M_DATA || (type) == M_PROTO || (type) == M_PCPROTO || (type) == M_DELAY) |
|
|
|
enum { |
|
CLONEOPEN = 0x02, |
|
MODOPEN = 0x01, |
|
OPENFAIL = -1 |
|
}; |
|
|
|
|
|
/* Enumeration values for strqget and strqset */ |
|
typedef SInt32 qfields; |
|
enum { |
|
QHIWAT = 0, |
|
QLOWAT = 1, |
|
QMAXPSZ = 2, |
|
QMINPSZ = 3, |
|
QCOUNT = 4, |
|
QFIRST = 5, |
|
QLAST = 6, |
|
QFLAG = 7, |
|
QBAD = 8 |
|
}; |
|
|
|
|
|
typedef qfields qfields_t; |
|
#endif /* CALL_NOT_IN_CARBON */ |
|
|
|
/* ***** From the Mentat "stropts.h" ******/ |
|
|
|
|
|
enum { |
|
I_NREAD = ((MIOC_STREAMIO << 8) | 1), /* return the number of bytes in 1st msg */ |
|
I_PUSH = ((MIOC_STREAMIO << 8) | 2), /* push module just below stream head */ |
|
I_POP = ((MIOC_STREAMIO << 8) | 3), /* pop module below stream head */ |
|
I_LOOK = ((MIOC_STREAMIO << 8) | 4), /* retrieve name of first stream module */ |
|
I_FLUSH = ((MIOC_STREAMIO << 8) | 5), /* flush all input and/or output queues */ |
|
I_SRDOPT = ((MIOC_STREAMIO << 8) | 6), /* set the read mode */ |
|
I_GRDOPT = ((MIOC_STREAMIO << 8) | 7), /* get the current read mode */ |
|
I_STR = ((MIOC_STREAMIO << 8) | 8), /* create an internal ioctl message */ |
|
I_SETSIG = ((MIOC_STREAMIO << 8) | 9), /* request SIGPOLL signal on events */ |
|
I_GETSIG = ((MIOC_STREAMIO << 8) | 10), /* query the registered events */ |
|
I_FIND = ((MIOC_STREAMIO << 8) | 11), /* check for module in stream */ |
|
I_LINK = ((MIOC_STREAMIO << 8) | 12), /* connect stream under mux fd */ |
|
I_UNLINK = ((MIOC_STREAMIO << 8) | 13), /* disconnect two streams */ |
|
I_PEEK = ((MIOC_STREAMIO << 8) | 15), /* peek at data on read queue */ |
|
I_FDINSERT = ((MIOC_STREAMIO << 8) | 16), /* create a message and send downstream */ |
|
I_SENDFD = ((MIOC_STREAMIO << 8) | 17), /* send an fd to a connected pipe stream */ |
|
I_RECVFD = ((MIOC_STREAMIO << 8) | 18), /* retrieve a file descriptor */ |
|
I_FLUSHBAND = ((MIOC_STREAMIO << 8) | 19), /* flush a particular input and/or output band */ |
|
I_SWROPT = ((MIOC_STREAMIO << 8) | 20), /* set the write mode */ |
|
I_GWROPT = ((MIOC_STREAMIO << 8) | 21), /* get the current write mode */ |
|
I_LIST = ((MIOC_STREAMIO << 8) | 22), /* get a list of all modules on a stream */ |
|
I_ATMARK = ((MIOC_STREAMIO << 8) | 23), /* check to see if the next message is "marked" */ |
|
I_CKBAND = ((MIOC_STREAMIO << 8) | 24), /* check for a message of a particular band */ |
|
I_GETBAND = ((MIOC_STREAMIO << 8) | 25), /* get the band of the next message to be read */ |
|
I_CANPUT = ((MIOC_STREAMIO << 8) | 26), /* check to see if a message may be passed on a stream */ |
|
I_SETCLTIME = ((MIOC_STREAMIO << 8) | 27), /* set the close timeout wait */ |
|
I_GETCLTIME = ((MIOC_STREAMIO << 8) | 28), /* get the current close timeout wait */ |
|
I_PLINK = ((MIOC_STREAMIO << 8) | 29), /* permanently connect a stream under a mux */ |
|
I_PUNLINK = ((MIOC_STREAMIO << 8) | 30), /* disconnect a permanent link */ |
|
I_GETMSG = ((MIOC_STREAMIO << 8) | 40), /* getmsg() system call */ |
|
I_PUTMSG = ((MIOC_STREAMIO << 8) | 41), /* putmsg() system call */ |
|
I_POLL = ((MIOC_STREAMIO << 8) | 42), /* poll() system call */ |
|
I_SETDELAY = ((MIOC_STREAMIO << 8) | 43), /* set blocking status */ |
|
I_GETDELAY = ((MIOC_STREAMIO << 8) | 44), /* get blocking status */ |
|
I_RUN_QUEUES = ((MIOC_STREAMIO << 8) | 45), /* sacrifice for the greater good */ |
|
I_GETPMSG = ((MIOC_STREAMIO << 8) | 46), /* getpmsg() system call */ |
|
I_PUTPMSG = ((MIOC_STREAMIO << 8) | 47), /* putpmsg() system call */ |
|
I_AUTOPUSH = ((MIOC_STREAMIO << 8) | 48), /* for systems that cannot do the autopush in open */ |
|
I_PIPE = ((MIOC_STREAMIO << 8) | 49), /* for pipe library call */ |
|
I_HEAP_REPORT = ((MIOC_STREAMIO << 8) | 50), /* get heap statistics */ |
|
I_FIFO = ((MIOC_STREAMIO << 8) | 51) /* for fifo library call */ |
|
}; |
|
|
|
/* priority message request on putmsg() or strpeek */ |
|
enum { |
|
RS_HIPRI = 0x01 |
|
}; |
|
|
|
/* flags for getpmsg and putpmsg */ |
|
enum { |
|
MSG_HIPRI = 0x01, |
|
MSG_BAND = 0x02, /* Retrieve a message from a particular band */ |
|
MSG_ANY = 0x04 /* Retrieve a message from any band */ |
|
}; |
|
|
|
/* return values from getmsg(), 0 indicates all ok */ |
|
enum { |
|
MORECTL = 0x01, /* more control info available */ |
|
MOREDATA = 0x02 /* more data available */ |
|
}; |
|
|
|
|
|
enum { |
|
FMNAMESZ = 31 /* maximum length of a module or device name */ |
|
}; |
|
|
|
|
|
/* Infinite poll wait time */ |
|
enum { |
|
INFTIM = (unsigned long)0xFFFFFFFF |
|
}; |
|
|
|
/* flush requests */ |
|
enum { |
|
FLUSHR = 0x01, /* Flush the read queue */ |
|
FLUSHW = 0x02, /* Flush the write queue */ |
|
FLUSHRW = (FLUSHW | FLUSHR) /* Flush both */ |
|
}; |
|
|
|
enum { |
|
FLUSHBAND = 0x40 /* Flush a particular band */ |
|
}; |
|
|
|
/* I_FLUSHBAND */ |
|
struct bandinfo { |
|
unsigned char bi_pri; /* Band to flush */ |
|
char pad1; |
|
SInt32 bi_flag; /* One of the above flush requests */ |
|
}; |
|
typedef struct bandinfo bandinfo; |
|
/* flags for I_ATMARK */ |
|
enum { |
|
ANYMARK = 0x01, /* Check if message is marked */ |
|
LASTMARK = 0x02 /* Check if this is the only message marked */ |
|
}; |
|
|
|
/* signal event masks */ |
|
enum { |
|
S_INPUT = 0x01, /* A non-M_PCPROTO message has arrived */ |
|
S_HIPRI = 0x02, /* A priority (M_PCPROTO) message is available */ |
|
S_OUTPUT = 0x04, /* The write queue is no longer full */ |
|
S_MSG = 0x08, /* A signal message has reached the front of read queue */ |
|
S_RDNORM = 0x10, /* A non-priority message is available */ |
|
S_RDBAND = 0x20, /* A banded messsage is available */ |
|
S_WRNORM = 0x40, /* Same as S_OUTPUT */ |
|
S_WRBAND = 0x80, /* A priority band exists and is writable */ |
|
S_ERROR = 0x0100, /* Error message has arrived */ |
|
S_HANGUP = 0x0200, /* Hangup message has arrived */ |
|
S_BANDURG = 0x0400 /* Use SIGURG instead of SIGPOLL on S_RDBAND signals */ |
|
}; |
|
|
|
/* read mode bits for I_S|GRDOPT; choose one of the following */ |
|
enum { |
|
RNORM = 0x01, /* byte-stream mode, default */ |
|
RMSGD = 0x02, /* message-discard mode */ |
|
RMSGN = 0x04, /* message-nondiscard mode */ |
|
RFILL = 0x08 /* fill read buffer mode (PSE private) */ |
|
}; |
|
|
|
/* More read modes, these are bitwise or'ed with the modes above */ |
|
enum { |
|
RPROTNORM = 0x10, /* Normal handling of M_PROTO/M_PCPROTO messages, default */ |
|
RPROTDIS = 0x20, /* Discard M_PROTO/M_PCPROTO message blocks */ |
|
RPROTDAT = 0x40 /* Convert M_PROTO/M_PCPROTO message blocks into M_DATA */ |
|
}; |
|
|
|
/* write modes for I_S|GWROPT */ |
|
enum { |
|
SNDZERO = 0x01 /* Send a zero-length message downstream on a write of zero bytes */ |
|
}; |
|
|
|
enum { |
|
MUXID_ALL = -1 /* Unlink all lower streams for I_UNLINK and I_PUNLINK */ |
|
}; |
|
|
|
/* |
|
strbuf is moved to "OpenTransport.h" because that header file |
|
exports provider routines that take it as a parameter. |
|
*/ |
|
|
|
/* structure of ioctl data on I_FDINSERT */ |
|
struct strfdinsert { |
|
strbuf ctlbuf; |
|
strbuf databuf; |
|
long flags; /* type of message, 0 or RS_HIPRI */ |
|
long fildes; /* fd of other stream (FDCELL) */ |
|
SInt32 offset; /* where to put other stream read qp */ |
|
}; |
|
typedef struct strfdinsert strfdinsert; |
|
/* I_LIST structures */ |
|
struct str_mlist { |
|
char l_name[32]; |
|
}; |
|
typedef struct str_mlist str_mlist; |
|
struct str_list { |
|
SInt32 sl_nmods; /* number of modules in sl_modlist array */ |
|
str_mlist * sl_modlist; |
|
}; |
|
typedef struct str_list str_list; |
|
/* I_PEEK structure */ |
|
struct strpeek { |
|
strbuf ctlbuf; |
|
strbuf databuf; |
|
long flags; /* if RS_HIPRI, get priority messages only */ |
|
}; |
|
typedef struct strpeek strpeek; |
|
/* structure for getpmsg and putpmsg */ |
|
struct strpmsg { |
|
strbuf ctlbuf; |
|
strbuf databuf; |
|
SInt32 band; |
|
long flags; |
|
}; |
|
typedef struct strpmsg strpmsg; |
|
/* structure of ioctl data on I_RECVFD */ |
|
struct strrecvfd { |
|
long fd; /* new file descriptor (FDCELL) */ |
|
unsigned short uid; /* user id of sending stream */ |
|
unsigned short gid; |
|
char fill[8]; |
|
}; |
|
typedef struct strrecvfd strrecvfd; |
|
/* structure of ioctl data on I_STR */ |
|
struct strioctl { |
|
SInt32 ic_cmd; /* downstream command */ |
|
SInt32 ic_timout; /* ACK/NAK timeout */ |
|
SInt32 ic_len; /* length of data arg */ |
|
char * ic_dp; /* ptr to data arg */ |
|
}; |
|
typedef struct strioctl strioctl; |
|
/* ***** From the Mentat "strlog.h" ******/ |
|
|
|
struct log_ctl { |
|
short mid; |
|
short sid; |
|
char level; |
|
char pad1; |
|
short flags; |
|
long ltime; |
|
long ttime; |
|
SInt32 seq_no; |
|
}; |
|
typedef struct log_ctl log_ctl; |
|
enum { |
|
SL_FATAL = 0x01, /* Fatal error */ |
|
SL_NOTIFY = 0x02, /* Notify the system administrator */ |
|
SL_ERROR = 0x04, /* Pass message to error logger */ |
|
SL_TRACE = 0x08, /* Pass message to tracer */ |
|
SL_CONSOLE = 0x00, /* Console messages are disabled */ |
|
SL_WARN = 0x20, /* Warning */ |
|
SL_NOTE = 0x40 /* Notice this message */ |
|
}; |
|
|
|
struct trace_ids { |
|
short ti_mid; |
|
short ti_sid; |
|
char ti_level; |
|
}; |
|
typedef struct trace_ids trace_ids; |
|
enum { |
|
I_TRCLOG = ((MIOC_STRLOG << 8) | 1), |
|
I_ERRLOG = ((MIOC_STRLOG << 8) | 2) |
|
}; |
|
|
|
enum { |
|
LOGMSGSZ = 128 |
|
}; |
|
|
|
/* ***** From the Mentat "tihdr.h" ******/ |
|
|
|
#if CALL_NOT_IN_CARBON |
|
|
|
/* TPI Primitives*/ |
|
|
|
|
|
|
|
enum { |
|
T_BIND_REQ = 101, |
|
T_CONN_REQ = 102, /* connection request */ |
|
T_CONN_RES = 103, /* respond to connection indication */ |
|
T_DATA_REQ = 104, |
|
T_DISCON_REQ = 105, |
|
T_EXDATA_REQ = 106, |
|
T_INFO_REQ = 107, |
|
T_OPTMGMT_REQ = 108, |
|
T_ORDREL_REQ = 109, |
|
T_UNBIND_REQ = 110, |
|
T_UNITDATA_REQ = 111, |
|
T_ADDR_REQ = 112, /* Get address request */ |
|
T_UREQUEST_REQ = 113, /* UnitRequest (transaction) req */ |
|
T_REQUEST_REQ = 114, /* Request (CO transaction) req */ |
|
T_UREPLY_REQ = 115, /* UnitRequest (transaction) req */ |
|
T_REPLY_REQ = 116, /* REPLY (CO transaction) req */ |
|
T_CANCELREQUEST_REQ = 117, /* Cancel outgoing request */ |
|
T_CANCELREPLY_REQ = 118, /* Cancel incoming request */ |
|
T_REGNAME_REQ = 119, /* Request name registration */ |
|
T_DELNAME_REQ = 120, /* Request delete name registration */ |
|
T_LKUPNAME_REQ = 121, /* Request name lookup */ |
|
|
|
T_BIND_ACK = 122, |
|
T_CONN_CON = 123, /* connection confirmation */ |
|
T_CONN_IND = 124, /* incoming connection indication */ |
|
T_DATA_IND = 125, |
|
T_DISCON_IND = 126, |
|
T_ERROR_ACK = 127, |
|
T_EXDATA_IND = 128, |
|
T_INFO_ACK = 129, |
|
T_OK_ACK = 130, |
|
T_OPTMGMT_ACK = 131, |
|
T_ORDREL_IND = 132, |
|
T_UNITDATA_IND = 133, |
|
T_UDERROR_IND = 134, |
|
T_ADDR_ACK = 135, /* Get address ack */ |
|
T_UREQUEST_IND = 136, /* UnitRequest (transaction) ind */ |
|
T_REQUEST_IND = 137, /* Request (CO transaction) ind */ |
|
T_UREPLY_IND = 138, /* Incoming unit reply */ |
|
T_REPLY_IND = 139, /* Incoming reply */ |
|
T_UREPLY_ACK = 140, /* outgoing Unit Reply is complete */ |
|
T_REPLY_ACK = 141, /* outgoing Reply is complete */ |
|
T_RESOLVEADDR_REQ = 142, |
|
T_RESOLVEADDR_ACK = 143, |
|
|
|
T_LKUPNAME_CON = 146, /* Results of name lookup */ |
|
T_LKUPNAME_RES = 147, /* Partial results of name lookup */ |
|
T_REGNAME_ACK = 148, /* Request name registration */ |
|
T_SEQUENCED_ACK = 149, /* Sequenced version of OK or ERROR ACK */ |
|
|
|
T_EVENT_IND = 160 /* Miscellaneous event Indication */ |
|
}; |
|
|
|
/* State values */ |
|
enum { |
|
TS_UNBND = 1, |
|
TS_WACK_BREQ = 2, |
|
TS_WACK_UREQ = 3, |
|
TS_IDLE = 4, |
|
TS_WACK_OPTREQ = 5, |
|
TS_WACK_CREQ = 6, |
|
TS_WCON_CREQ = 7, |
|
TS_WRES_CIND = 8, |
|
TS_WACK_CRES = 9, |
|
TS_DATA_XFER = 10, |
|
TS_WIND_ORDREL = 11, |
|
TS_WREQ_ORDREL = 12, |
|
TS_WACK_DREQ6 = 13, |
|
TS_WACK_DREQ7 = 14, |
|
TS_WACK_DREQ9 = 15, |
|
TS_WACK_DREQ10 = 16, |
|
TS_WACK_DREQ11 = 17, |
|
TS_WACK_ORDREL = 18, |
|
TS_NOSTATES = 19, |
|
TS_BAD_STATE = 19 |
|
}; |
|
|
|
/* Transport events */ |
|
enum { |
|
TE_OPENED = 1, |
|
TE_BIND = 2, |
|
TE_OPTMGMT = 3, |
|
TE_UNBIND = 4, |
|
TE_CLOSED = 5, |
|
TE_CONNECT1 = 6, |
|
TE_CONNECT2 = 7, |
|
TE_ACCEPT1 = 8, |
|
TE_ACCEPT2 = 9, |
|
TE_ACCEPT3 = 10, |
|
TE_SND = 11, |
|
TE_SNDDIS1 = 12, |
|
TE_SNDDIS2 = 13, |
|
TE_SNDREL = 14, |
|
TE_SNDUDATA = 15, |
|
TE_LISTEN = 16, |
|
TE_RCVCONNECT = 17, |
|
TE_RCV = 18, |
|
TE_RCVDIS1 = 19, |
|
TE_RCVDIS2 = 20, |
|
TE_RCVDIS3 = 21, |
|
TE_RCVREL = 22, |
|
TE_RCVUDATA = 23, |
|
TE_RCVUDERR = 24, |
|
TE_PASS_CONN = 25, |
|
TE_BAD_EVENT = 26 |
|
}; |
|
|
|
struct T_addr_ack { |
|
long PRIM_type; /* Always T_ADDR_ACK */ |
|
long LOCADDR_length; |
|
long LOCADDR_offset; |
|
long REMADDR_length; |
|
long REMADDR_offset; |
|
}; |
|
typedef struct T_addr_ack T_addr_ack; |
|
struct T_addr_req { |
|
long PRIM_type; /* Always T_ADDR_REQ */ |
|
}; |
|
typedef struct T_addr_req T_addr_req; |
|
struct T_bind_ack { |
|
long PRIM_type; /* always T_BIND_ACK */ |
|
long ADDR_length; |
|
long ADDR_offset; |
|
unsigned long CONIND_number; |
|
}; |
|
typedef struct T_bind_ack T_bind_ack; |
|
struct T_bind_req { |
|
long PRIM_type; /* always T_BIND_REQ */ |
|
long ADDR_length; |
|
long ADDR_offset; |
|
unsigned long CONIND_number; |
|
}; |
|
typedef struct T_bind_req T_bind_req; |
|
struct T_conn_con { |
|
long PRIM_type; /* always T_CONN_CON */ |
|
long RES_length; /* responding address length */ |
|
long RES_offset; |
|
long OPT_length; |
|
long OPT_offset; |
|
}; |
|
typedef struct T_conn_con T_conn_con; |
|
struct T_conn_ind { |
|
long PRIM_type; /* always T_CONN_IND */ |
|
long SRC_length; |
|
long SRC_offset; |
|
long OPT_length; |
|
long OPT_offset; |
|
long SEQ_number; |
|
}; |
|
typedef struct T_conn_ind T_conn_ind; |
|
struct T_conn_req { |
|
long PRIM_type; /* always T_CONN_REQ */ |
|
long DEST_length; |
|
long DEST_offset; |
|
long OPT_length; |
|
long OPT_offset; |
|
}; |
|
typedef struct T_conn_req T_conn_req; |
|
struct T_conn_res { |
|
long PRIM_type; /* always T_CONN_RES */ |
|
queue_t * QUEUE_ptr; |
|
long OPT_length; |
|
long OPT_offset; |
|
long SEQ_number; |
|
}; |
|
typedef struct T_conn_res T_conn_res; |
|
struct T_data_ind { |
|
long PRIM_type; /* always T_DATA_IND */ |
|
long MORE_flag; |
|
}; |
|
typedef struct T_data_ind T_data_ind; |
|
struct T_data_req { |
|
long PRIM_type; /* always T_DATA_REQ */ |
|
long MORE_flag; |
|
}; |
|
typedef struct T_data_req T_data_req; |
|
struct T_discon_ind { |
|
long PRIM_type; /* always T_DISCON_IND */ |
|
long DISCON_reason; |
|
long SEQ_number; |
|
}; |
|
typedef struct T_discon_ind T_discon_ind; |
|
struct T_discon_req { |
|
long PRIM_type; /* always T_DISCON_REQ */ |
|
long SEQ_number; |
|
}; |
|
typedef struct T_discon_req T_discon_req; |
|
struct T_exdata_ind { |
|
long PRIM_type; /* always T_EXDATA_IND */ |
|
long MORE_flag; |
|
}; |
|
typedef struct T_exdata_ind T_exdata_ind; |
|
struct T_exdata_req { |
|
long PRIM_type; /* always T_EXDATA_REQ */ |
|
long MORE_flag; |
|
}; |
|
typedef struct T_exdata_req T_exdata_req; |
|
struct T_error_ack { |
|
long PRIM_type; /* always T_ERROR_ACK */ |
|
long ERROR_prim; /* primitive in error */ |
|
long TLI_error; |
|
long UNIX_error; |
|
}; |
|
typedef struct T_error_ack T_error_ack; |
|
struct T_info_ack { |
|
long PRIM_type; /* always T_INFO_ACK */ |
|
long TSDU_size; /* max TSDU size */ |
|
long ETSDU_size; /* max ETSDU size */ |
|
long CDATA_size; /* connect data size */ |
|
long DDATA_size; /* disconnect data size */ |
|
long ADDR_size; /* TSAP size */ |
|
long OPT_size; /* options size */ |
|
long TIDU_size; /* TIDU size */ |
|
long SERV_type; /* service type */ |
|
long CURRENT_state; /* current state */ |
|
long PROVIDER_flag; /* provider flags (see xti.h for defines) */ |
|
}; |
|
typedef struct T_info_ack T_info_ack; |
|
/* Provider flags */ |
|
enum { |
|
SENDZERO = 0x0001, /* supports 0-length TSDU's */ |
|
XPG4_1 = 0x0002 /* provider supports recent stuff */ |
|
}; |
|
|
|
struct T_info_req { |
|
long PRIM_type; /* always T_INFO_REQ */ |
|
}; |
|
typedef struct T_info_req T_info_req; |
|
struct T_ok_ack { |
|
long PRIM_type; /* always T_OK_ACK */ |
|
long CORRECT_prim; |
|
}; |
|
typedef struct T_ok_ack T_ok_ack; |
|
struct T_optmgmt_ack { |
|
long PRIM_type; /* always T_OPTMGMT_ACK */ |
|
long OPT_length; |
|
long OPT_offset; |
|
long MGMT_flags; |
|
}; |
|
typedef struct T_optmgmt_ack T_optmgmt_ack; |
|
struct T_optmgmt_req { |
|
long PRIM_type; /* always T_OPTMGMT_REQ */ |
|
long OPT_length; |
|
long OPT_offset; |
|
long MGMT_flags; |
|
}; |
|
typedef struct T_optmgmt_req T_optmgmt_req; |
|
struct T_ordrel_ind { |
|
long PRIM_type; /* always T_ORDREL_IND */ |
|
}; |
|
typedef struct T_ordrel_ind T_ordrel_ind; |
|
struct T_ordrel_req { |
|
long PRIM_type; /* always T_ORDREL_REQ */ |
|
}; |
|
typedef struct T_ordrel_req T_ordrel_req; |
|
struct T_unbind_req { |
|
long PRIM_type; /* always T_UNBIND_REQ */ |
|
}; |
|
typedef struct T_unbind_req T_unbind_req; |
|
struct T_uderror_ind { |
|
long PRIM_type; /* always T_UDERROR_IND */ |
|
long DEST_length; |
|
long DEST_offset; |
|
long OPT_length; |
|
long OPT_offset; |
|
long ERROR_type; |
|
}; |
|
typedef struct T_uderror_ind T_uderror_ind; |
|
struct T_unitdata_ind { |
|
long PRIM_type; /* always T_UNITDATA_IND */ |
|
long SRC_length; |
|
long SRC_offset; |
|
long OPT_length; |
|
long OPT_offset; |
|
}; |
|
typedef struct T_unitdata_ind T_unitdata_ind; |
|
struct T_unitdata_req { |
|
long PRIM_type; /* always T_UNITDATA_REQ */ |
|
long DEST_length; |
|
long DEST_offset; |
|
long OPT_length; |
|
long OPT_offset; |
|
}; |
|
typedef struct T_unitdata_req T_unitdata_req; |
|
struct T_resolveaddr_ack { |
|
long PRIM_type; /* always T_RESOLVEADDR_ACK */ |
|
long SEQ_number; |
|
long ADDR_length; |
|
long ADDR_offset; |
|
long ORIG_client; |
|
long ORIG_data; |
|
long TLI_error; |
|
long UNIX_error; |
|
}; |
|
typedef struct T_resolveaddr_ack T_resolveaddr_ack; |
|
struct T_resolveaddr_req { |
|
long PRIM_type; /* always T_RESOLVEADDR_REQ */ |
|
long SEQ_number; |
|
long ADDR_length; |
|
long ADDR_offset; |
|
long ORIG_client; |
|
long ORIG_data; |
|
long MAX_milliseconds; |
|
}; |
|
typedef struct T_resolveaddr_req T_resolveaddr_req; |
|
struct T_unitreply_ind { |
|
long PRIM_type; /* Always T_UREPLY_IND */ |
|
long SEQ_number; |
|
long OPT_length; |
|
long OPT_offset; |
|
long REP_flags; |
|
long TLI_error; |
|
long UNIX_error; |
|
}; |
|
typedef struct T_unitreply_ind T_unitreply_ind; |
|
struct T_unitrequest_ind { |
|
long PRIM_type; /* Always T_UREQUEST_IND */ |
|
long SEQ_number; |
|
long SRC_length; |
|
long SRC_offset; |
|
long OPT_length; |
|
long OPT_offset; |
|
long REQ_flags; |
|
}; |
|
typedef struct T_unitrequest_ind T_unitrequest_ind; |
|
struct T_unitrequest_req { |
|
long PRIM_type; /* Always T_UREQUEST_REQ */ |
|
long SEQ_number; |
|
long DEST_length; |
|
long DEST_offset; |
|
long OPT_length; |
|
long OPT_offset; |
|
long REQ_flags; |
|
}; |
|
typedef struct T_unitrequest_req T_unitrequest_req; |
|
struct T_unitreply_req { |
|
long PRIM_type; /* Always T_UREPLY_REQ */ |
|
long SEQ_number; |
|
long OPT_length; |
|
long OPT_offset; |
|
long REP_flags; |
|
}; |
|
typedef struct T_unitreply_req T_unitreply_req; |
|
struct T_unitreply_ack { |
|
long PRIM_type; /* Always T_UREPLY_ACK */ |
|
long SEQ_number; |
|
long TLI_error; |
|
long UNIX_error; |
|
}; |
|
typedef struct T_unitreply_ack T_unitreply_ack; |
|
struct T_cancelrequest_req { |
|
long PRIM_type; /* Always T_CANCELREQUEST_REQ */ |
|
long SEQ_number; |
|
}; |
|
typedef struct T_cancelrequest_req T_cancelrequest_req; |
|
struct T_cancelreply_req { |
|
long PRIM_type; /* Always T_CANCELREPLY_REQ */ |
|
long SEQ_number; |
|
}; |
|
typedef struct T_cancelreply_req T_cancelreply_req; |
|
struct T_reply_ind { |
|
long PRIM_type; /* Always T_REPLY_IND */ |
|
long SEQ_number; |
|
long OPT_length; |
|
long OPT_offset; |
|
long REP_flags; |
|
long TLI_error; |
|
long UNIX_error; |
|
}; |
|
typedef struct T_reply_ind T_reply_ind; |
|
struct T_request_ind { |
|
long PRIM_type; /* Always T_REQUEST_IND */ |
|
long SEQ_number; |
|
long OPT_length; |
|
long OPT_offset; |
|
long REQ_flags; |
|
}; |
|
typedef struct T_request_ind T_request_ind; |
|
struct T_request_req { |
|
long PRIM_type; /* Always T_REQUEST_REQ */ |
|
long SEQ_number; |
|
long OPT_length; |
|
long OPT_offset; |
|
long REQ_flags; |
|
}; |
|
typedef struct T_request_req T_request_req; |
|
struct T_reply_req { |
|
long PRIM_type; /* Always T_REPLY_REQ */ |
|
long SEQ_number; |
|
long OPT_length; |
|
long OPT_offset; |
|
long REP_flags; |
|
}; |
|
typedef struct T_reply_req T_reply_req; |
|
struct T_reply_ack { |
|
long PRIM_type; /* Always T_REPLY_ACK */ |
|
long SEQ_number; |
|
long TLI_error; |
|
long UNIX_error; |
|
}; |
|
typedef struct T_reply_ack T_reply_ack; |
|
struct T_regname_req { |
|
long PRIM_type; /* Always T_REGNAME_REQ */ |
|
long SEQ_number; /* Reply is sequence ack */ |
|
long NAME_length; |
|
long NAME_offset; |
|
long ADDR_length; |
|
long ADDR_offset; |
|
long REQ_flags; |
|
}; |
|
typedef struct T_regname_req T_regname_req; |
|
struct T_regname_ack { |
|
long PRIM_type; /* always T_REGNAME_ACK */ |
|
long SEQ_number; |
|
long REG_id; |
|
long ADDR_length; |
|
long ADDR_offset; |
|
}; |
|
typedef struct T_regname_ack T_regname_ack; |
|
struct T_delname_req { |
|
long PRIM_type; /* Always T_DELNAME_REQ */ |
|
long SEQ_number; /* Reply is sequence ack */ |
|
long NAME_length; |
|
long NAME_offset; |
|
}; |
|
typedef struct T_delname_req T_delname_req; |
|
struct T_lkupname_req { |
|
long PRIM_type; /* Always T_LKUPNAME_REQ */ |
|
long SEQ_number; /* Reply is sequence ack */ |
|
long NAME_length; /* ... or T_LKUPNAME_CON */ |
|
long NAME_offset; |
|
long ADDR_length; |
|
long ADDR_offset; |
|
long MAX_number; |
|
long MAX_milliseconds; |
|
long REQ_flags; |
|
}; |
|
typedef struct T_lkupname_req T_lkupname_req; |
|
struct T_lkupname_con { |
|
long PRIM_type; /* Either T_LKUPNAME_CON */ |
|
long SEQ_number; /* Or T_LKUPNAME_RES */ |
|
long NAME_length; |
|
long NAME_offset; |
|
long RSP_count; |
|
long RSP_cumcount; |
|
}; |
|
typedef struct T_lkupname_con T_lkupname_con; |
|
struct T_sequence_ack { |
|
long PRIM_type; /* always T_SEQUENCED_ACK */ |
|
long ORIG_prim; /* original primitive */ |
|
long SEQ_number; |
|
long TLI_error; |
|
long UNIX_error; |
|
}; |
|
typedef struct T_sequence_ack T_sequence_ack; |
|
struct T_event_ind { |
|
long PRIM_type; /* always T_EVENT_IND */ |
|
long EVENT_code; |
|
long EVENT_cookie; |
|
}; |
|
typedef struct T_event_ind T_event_ind; |
|
union T_primitives { |
|
long type; |
|
|
|
long primType; |
|
T_addr_ack taddrack; |
|
T_bind_ack tbindack; |
|
T_bind_req tbindreq; |
|
T_conn_con tconncon; |
|
T_conn_ind tconnind; |
|
T_conn_req tconnreq; |
|
T_conn_res tconnres; |
|
T_data_ind tdataind; |
|
T_data_req tdatareq; |
|
T_discon_ind tdisconind; |
|
T_discon_req tdisconreq; |
|
T_exdata_ind texdataind; |
|
T_exdata_req texdatareq; |
|
T_error_ack terrorack; |
|
T_info_ack tinfoack; |
|
T_info_req tinforeq; |
|
T_ok_ack tokack; |
|
T_optmgmt_ack toptmgmtack; |
|
T_optmgmt_req toptmgmtreq; |
|
T_ordrel_ind tordrelind; |
|
T_ordrel_req tordrelreq; |
|
T_unbind_req tunbindreq; |
|
T_uderror_ind tuderrorind; |
|
T_unitdata_ind tunitdataind; |
|
T_unitdata_req tunitdatareq; |
|
T_unitreply_ind tunitreplyind; |
|
T_unitrequest_ind tunitrequestind; |
|
T_unitrequest_req tunitrequestreq; |
|
T_unitreply_req tunitreplyreq; |
|
T_unitreply_ack tunitreplyack; |
|
T_reply_ind treplyind; |
|
T_request_ind trequestind; |
|
T_request_req trequestreq; |
|
T_reply_req treplyreq; |
|
T_reply_ack treplyack; |
|
T_cancelrequest_req tcancelreqreq; |
|
T_resolveaddr_req tresolvereq; |
|
T_resolveaddr_ack tresolveack; |
|
T_regname_req tregnamereq; |
|
T_regname_ack tregnameack; |
|
T_delname_req tdelnamereq; |
|
T_lkupname_req tlkupnamereq; |
|
T_lkupname_con tlkupnamecon; |
|
T_sequence_ack tsequenceack; |
|
T_event_ind teventind; |
|
}; |
|
typedef union T_primitives T_primitives; |
|
/* ***** From the Mentat "dlpi.h" ******/ |
|
|
|
/* |
|
This header file has encoded the values so an existing driver |
|
or user which was written with the Logical Link Interface(LLI) |
|
can migrate to the DLPI interface in a binary compatible manner. |
|
Any fields which require a specific format or value are flagged |
|
with a comment containing the message LLI compatibility. |
|
*/ |
|
|
|
/* DLPI revision definition history*/ |
|
|
|
enum { |
|
DL_CURRENT_VERSION = 0x02, /* current version of dlpi */ |
|
DL_VERSION_2 = 0x02 /* version of dlpi March 12,1991 */ |
|
}; |
|
|
|
|
|
enum { |
|
DL_INFO_REQ = 0x00, /* Information Req, LLI compatibility */ |
|
DL_INFO_ACK = 0x03, /* Information Ack, LLI compatibility */ |
|
DL_ATTACH_REQ = 0x0B, /* Attach a PPA */ |
|
DL_DETACH_REQ = 0x0C, /* Detach a PPA */ |
|
DL_BIND_REQ = 0x01, /* Bind dlsap address, LLI compatibility */ |
|
DL_BIND_ACK = 0x04, /* Dlsap address bound, LLI compatibility */ |
|
DL_UNBIND_REQ = 0x02, /* Unbind dlsap address, LLI compatibility */ |
|
DL_OK_ACK = 0x06, /* Success acknowledgment, LLI compatibility */ |
|
DL_ERROR_ACK = 0x05, /* Error acknowledgment, LLI compatibility */ |
|
DL_SUBS_BIND_REQ = 0x1B, /* Bind Subsequent DLSAP address */ |
|
DL_SUBS_BIND_ACK = 0x1C, /* Subsequent DLSAP address bound */ |
|
DL_SUBS_UNBIND_REQ = 0x15, /* Subsequent unbind */ |
|
DL_ENABMULTI_REQ = 0x1D, /* Enable multicast addresses */ |
|
DL_DISABMULTI_REQ = 0x1E, /* Disable multicast addresses */ |
|
DL_PROMISCON_REQ = 0x1F, /* Turn on promiscuous mode */ |
|
DL_PROMISCOFF_REQ = 0x20, /* Turn off promiscuous mode */ |
|
DL_UNITDATA_REQ = 0x07, /* datagram send request, LLI compatibility */ |
|
DL_UNITDATA_IND = 0x08, /* datagram receive indication, LLI compatibility */ |
|
DL_UDERROR_IND = 0x09, /* datagram error indication, LLI compatibility */ |
|
DL_UDQOS_REQ = 0x0A, /* set QOS for subsequent datagram transmissions */ |
|
DL_CONNECT_REQ = 0x0D, /* Connect request */ |
|
DL_CONNECT_IND = 0x0E, /* Incoming connect indication */ |
|
DL_CONNECT_RES = 0x0F, /* Accept previous connect indication */ |
|
DL_CONNECT_CON = 0x10, /* Connection established */ |
|
DL_TOKEN_REQ = 0x11, /* Passoff token request */ |
|
DL_TOKEN_ACK = 0x12, /* Passoff token ack */ |
|
DL_DISCONNECT_REQ = 0x13, /* Disconnect request */ |
|
DL_DISCONNECT_IND = 0x14, /* Disconnect indication */ |
|
DL_RESET_REQ = 0x17, /* Reset service request */ |
|
DL_RESET_IND = 0x18, /* Incoming reset indication */ |
|
DL_RESET_RES = 0x19, /* Complete reset processing */ |
|
DL_RESET_CON = 0x1A, /* Reset processing complete */ |
|
DL_DATA_ACK_REQ = 0x21, /* data unit transmission request */ |
|
DL_DATA_ACK_IND = 0x22, /* Arrival of a command PDU */ |
|
DL_DATA_ACK_STATUS_IND = 0x23, /* Status indication of DATA_ACK_REQ*/ |
|
DL_REPLY_REQ = 0x24, /* Request a DLSDU from the remote */ |
|
DL_REPLY_IND = 0x25, /* Arrival of a command PDU */ |
|
DL_REPLY_STATUS_IND = 0x26, /* Status indication of REPLY_REQ */ |
|
DL_REPLY_UPDATE_REQ = 0x27, /* Hold a DLSDU for transmission */ |
|
DL_REPLY_UPDATE_STATUS_IND = 0x28, /* Status of REPLY_UPDATE req */ |
|
DL_XID_REQ = 0x29, /* Request to send an XID PDU */ |
|
DL_XID_IND = 0x2A, /* Arrival of an XID PDU */ |
|
DL_XID_RES = 0x2B, /* request to send a response XID PDU*/ |
|
DL_XID_CON = 0x2C, /* Arrival of a response XID PDU */ |
|
DL_TEST_REQ = 0x2D, /* TEST command request */ |
|
DL_TEST_IND = 0x2E, /* TEST response indication */ |
|
DL_TEST_RES = 0x2F, /* TEST response */ |
|
DL_TEST_CON = 0x30, /* TEST Confirmation */ |
|
DL_PHYS_ADDR_REQ = 0x31, /* Request to get physical addr */ |
|
DL_PHYS_ADDR_ACK = 0x32, /* Return physical addr */ |
|
DL_SET_PHYS_ADDR_REQ = 0x33, /* set physical addr */ |
|
DL_GET_STATISTICS_REQ = 0x34, /* Request to get statistics */ |
|
DL_GET_STATISTICS_ACK = 0x35 /* Return statistics */ |
|
}; |
|
|
|
/* DLPI interface states*/ |
|
enum { |
|
DL_UNATTACHED = 0x04, /* PPA not attached */ |
|
DL_ATTACH_PENDING = 0x05, /* Waiting ack of DL_ATTACH_REQ */ |
|
DL_DETACH_PENDING = 0x06, /* Waiting ack of DL_DETACH_REQ */ |
|
DL_UNBOUND = 0x00, /* PPA attached, LLI compatibility */ |
|
DL_BIND_PENDING = 0x01, /* Waiting ack of DL_BIND_REQ, LLI compatibility */ |
|
DL_UNBIND_PENDING = 0x02, /* Waiting ack of DL_UNBIND_REQ, LLI compatibility */ |
|
DL_IDLE = 0x03, /* dlsap bound, awaiting use, LLI compatibility */ |
|
DL_UDQOS_PENDING = 0x07, /* Waiting ack of DL_UDQOS_REQ */ |
|
DL_OUTCON_PENDING = 0x08, /* outgoing connection, awaiting DL_CONN_CON */ |
|
DL_INCON_PENDING = 0x09, /* incoming connection, awaiting DL_CONN_RES */ |
|
DL_CONN_RES_PENDING = 0x0A, /* Waiting ack of DL_CONNECT_RES */ |
|
DL_DATAXFER = 0x0B, /* connection-oriented data transfer */ |
|
DL_USER_RESET_PENDING = 0x0C, /* user initiated reset, awaiting DL_RESET_CON */ |
|
DL_PROV_RESET_PENDING = 0x0D, /* provider initiated reset, awaiting DL_RESET_RES */ |
|
DL_RESET_RES_PENDING = 0x0E, /* Waiting ack of DL_RESET_RES */ |
|
DL_DISCON8_PENDING = 0x0F, /* Waiting ack of DL_DISC_REQ when in DL_OUTCON_PENDING */ |
|
DL_DISCON9_PENDING = 0x10, /* Waiting ack of DL_DISC_REQ when in DL_INCON_PENDING */ |
|
DL_DISCON11_PENDING = 0x11, /* Waiting ack of DL_DISC_REQ when in DL_DATAXFER */ |
|
DL_DISCON12_PENDING = 0x12, /* Waiting ack of DL_DISC_REQ when in DL_USER_RESET_PENDING */ |
|
DL_DISCON13_PENDING = 0x13, /* Waiting ack of DL_DISC_REQ when in DL_DL_PROV_RESET_PENDING */ |
|
DL_SUBS_BIND_PND = 0x14, /* Waiting ack of DL_SUBS_BIND_REQ */ |
|
DL_SUBS_UNBIND_PND = 0x15 /* Waiting ack of DL_SUBS_UNBIND_REQ */ |
|
}; |
|
|
|
/* DL_ERROR_ACK error return values*/ |
|
|
|
enum { |
|
DL_ACCESS = 0x02, /* Improper permissions for request, LLI compatibility */ |
|
DL_BADADDR = 0x01, /* DLSAP address in improper format or invalid */ |
|
DL_BADCORR = 0x05, /* Sequence number not from outstanding DL_CONN_IND */ |
|
DL_BADDATA = 0x06, /* User data exceeded provider limit */ |
|
DL_BADPPA = 0x08, /* Specified PPA was invalid */ |
|
DL_BADPRIM = 0x09, /* Primitive received is not known by DLS provider */ |
|
DL_BADQOSPARAM = 0x0A, /* QOS parameters contained invalid values */ |
|
DL_BADQOSTYPE = 0x0B, /* QOS structure type is unknown or unsupported */ |
|
DL_BADSAP = 0x00, /* Bad LSAP selector, LLI compatibility */ |
|
DL_BADTOKEN = 0x0C, /* Token used not associated with an active stream */ |
|
DL_BOUND = 0x0D, /* Attempted second bind with dl_max_conind or */ |
|
/* dl_conn_mgmt > 0 on same DLSAP or PPA */ |
|
DL_INITFAILED = 0x0E, /* Physical Link initialization failed */ |
|
DL_NOADDR = 0x0F, /* Provider couldn't allocate alternate address */ |
|
DL_NOTINIT = 0x10, /* Physical Link not initialized */ |
|
DL_OUTSTATE = 0x03, /* Primitive issued in improper state, LLI compatibility */ |
|
DL_SYSERR = 0x04, /* UNIX system error occurred, LLI compatibility */ |
|
DL_UNSUPPORTED = 0x07, /* Requested service not supplied by provider */ |
|
DL_UNDELIVERABLE = 0x11, /* Previous data unit could not be delivered */ |
|
DL_NOTSUPPORTED = 0x12, /* Primitive is known but not supported by DLS provider */ |
|
DL_TOOMANY = 0x13, /* limit exceeded */ |
|
DL_NOTENAB = 0x14, /* Promiscuous mode not enabled */ |
|
DL_BUSY = 0x15, /* Other streams for a particular PPA in the post-attached state */ |
|
DL_NOAUTO = 0x16, /* Automatic handling of XID & TEST responses not supported */ |
|
DL_NOXIDAUTO = 0x17, /* Automatic handling of XID not supported */ |
|
DL_NOTESTAUTO = 0x18, /* Automatic handling of TEST not supported */ |
|
DL_XIDAUTO = 0x19, /* Automatic handling of XID response */ |
|
DL_TESTAUTO = 0x1A, /* AUtomatic handling of TEST response*/ |
|
DL_PENDING = 0x1B /* pending outstanding connect indications */ |
|
}; |
|
|
|
/* DLPI media types supported*/ |
|
|
|
enum { |
|
DL_CSMACD = 0x00, /* IEEE 802.3 CSMA/CD network, LLI Compatibility */ |
|
DL_TPB = 0x01, /* IEEE 802.4 Token Passing Bus, LLI Compatibility */ |
|
DL_TPR = 0x02, /* IEEE 802.5 Token Passing Ring, LLI Compatibility */ |
|
DL_METRO = 0x03, /* IEEE 802.6 Metro Net, LLI Compatibility */ |
|
DL_ETHER = 0x04, /* Ethernet Bus, LLI Compatibility */ |
|
DL_HDLC = 0x05, /* ISO HDLC protocol support, bit synchronous */ |
|
DL_CHAR = 0x06, /* Character Synchronous protocol support, eg BISYNC */ |
|
DL_CTCA = 0x07, /* IBM Channel-to-Channel Adapter */ |
|
DL_FDDI = 0x08, /* Fiber Distributed data interface */ |
|
DL_OTHER = 0x09 /* Any other medium not listed above */ |
|
}; |
|
|
|
/* |
|
DLPI provider service supported. |
|
These must be allowed to be bitwise-OR for dl_service_mode in |
|
DL_INFO_ACK. |
|
*/ |
|
enum { |
|
DL_CODLS = 0x01, /* support connection-oriented service */ |
|
DL_CLDLS = 0x02, /* support connectionless data link service */ |
|
DL_ACLDLS = 0x04 /* support acknowledged connectionless service*/ |
|
}; |
|
|
|
/* |
|
DLPI provider style. |
|
The DLPI provider style which determines whether a provider |
|
requires a DL_ATTACH_REQ to inform the provider which PPA |
|
user messages should be sent/received on. |
|
*/ |
|
|
|
enum { |
|
DL_STYLE1 = 0x0500, /* PPA is implicitly bound by open(2) */ |
|
DL_STYLE2 = 0x0501 /* PPA must be explicitly bound via DL_ATTACH_REQ */ |
|
}; |
|
|
|
/* DLPI Originator for Disconnect and Resets*/ |
|
|
|
enum { |
|
DL_PROVIDER = 0x0700, |
|
DL_USER = 0x0701 |
|
}; |
|
|
|
/* DLPI Disconnect Reasons*/ |
|
|
|
enum { |
|
DL_CONREJ_DEST_UNKNOWN = 0x0800, |
|
DL_CONREJ_DEST_UNREACH_PERMANENT = 0x0801, |
|
DL_CONREJ_DEST_UNREACH_TRANSIENT = 0x0802, |
|
DL_CONREJ_QOS_UNAVAIL_PERMANENT = 0x0803, |
|
DL_CONREJ_QOS_UNAVAIL_TRANSIENT = 0x0804, |
|
DL_CONREJ_PERMANENT_COND = 0x0805, |
|
DL_CONREJ_TRANSIENT_COND = 0x0806, |
|
DL_DISC_ABNORMAL_CONDITION = 0x0807, |
|
DL_DISC_NORMAL_CONDITION = 0x0808, |
|
DL_DISC_PERMANENT_CONDITION = 0x0809, |
|
DL_DISC_TRANSIENT_CONDITION = 0x080A, |
|
DL_DISC_UNSPECIFIED = 0x080B |
|
}; |
|
|
|
/* DLPI Reset Reasons*/ |
|
|
|
enum { |
|
DL_RESET_FLOW_CONTROL = 0x0900, |
|
DL_RESET_LINK_ERROR = 0x0901, |
|
DL_RESET_RESYNCH = 0x0902 |
|
}; |
|
|
|
/* DLPI status values for acknowledged connectionless data transfer*/ |
|
|
|
enum { |
|
DL_CMD_MASK = 0x0F, /* mask for command portion of status */ |
|
DL_CMD_OK = 0x00, /* Command Accepted */ |
|
DL_CMD_RS = 0x01, /* Unimplemented or inactivated service */ |
|
DL_CMD_UE = 0x05, /* Data Link User interface error */ |
|
DL_CMD_PE = 0x06, /* Protocol error */ |
|
DL_CMD_IP = 0x07, /* Permanent implementation dependent error*/ |
|
DL_CMD_UN = 0x09, /* Resources temporarily unavailable */ |
|
DL_CMD_IT = 0x0F, /* Temporary implementation dependent error */ |
|
DL_RSP_MASK = 0xF0, /* mask for response portion of status */ |
|
DL_RSP_OK = 0x00, /* Response DLSDU present */ |
|
DL_RSP_RS = 0x10, /* Unimplemented or inactivated service */ |
|
DL_RSP_NE = 0x30, /* Response DLSDU never submitted */ |
|
DL_RSP_NR = 0x40, /* Response DLSDU not requested */ |
|
DL_RSP_UE = 0x50, /* Data Link User interface error */ |
|
DL_RSP_IP = 0x70, /* Permanent implementation dependent error */ |
|
DL_RSP_UN = 0x90, /* Resources temporarily unavailable */ |
|
DL_RSP_IT = 0xF0 /* Temporary implementation dependent error */ |
|
}; |
|
|
|
/* Service Class values for acknowledged connectionless data transfer*/ |
|
|
|
enum { |
|
DL_RQST_RSP = 0x01, /* Use acknowledge capability in MAC sublayer*/ |
|
DL_RQST_NORSP = 0x02 /* No acknowledgement service requested */ |
|
}; |
|
|
|
/* DLPI address type definition*/ |
|
|
|
enum { |
|
DL_FACT_PHYS_ADDR = 0x01, /* factory physical address */ |
|
DL_CURR_PHYS_ADDR = 0x02 /* current physical address */ |
|
}; |
|
|
|
/* DLPI flag definitions*/ |
|
|
|
enum { |
|
DL_POLL_FINAL = 0x01 /* if set,indicates poll/final bit set*/ |
|
}; |
|
|
|
/* XID and TEST responses supported by the provider*/ |
|
|
|
enum { |
|
DL_AUTO_XID = 0x01, /* provider will respond to XID */ |
|
DL_AUTO_TEST = 0x02 /* provider will respond to TEST */ |
|
}; |
|
|
|
/* Subsequent bind type*/ |
|
|
|
enum { |
|
DL_PEER_BIND = 0x01, /* subsequent bind on a peer addr */ |
|
DL_HIERARCHICAL_BIND = 0x02 /* subs_bind on a hierarchical addr*/ |
|
}; |
|
|
|
/* DLPI promiscuous mode definitions*/ |
|
|
|
enum { |
|
DL_PROMISC_PHYS = 0x01, /* promiscuous mode at phys level */ |
|
DL_PROMISC_SAP = 0x02, /* promiscous mode at sap level */ |
|
DL_PROMISC_MULTI = 0x03 /* promiscuous mode for multicast */ |
|
}; |
|
|
|
/* M_DATA "raw" mode */ |
|
#define DLIOCRAW MIOC_CMD(MIOC_DLPI,1) |
|
/* |
|
DLPI Quality Of Service definition for use in QOS structure definitions. |
|
The QOS structures are used in connection establishment, DL_INFO_ACK, |
|
and setting connectionless QOS values. |
|
*/ |
|
/* |
|
Throughput |
|
|
|
This parameter is specified for both directions. |
|
*/ |
|
|
|
struct dl_through_t { |
|
SInt32 dl_target_value; /* desired bits/second desired */ |
|
SInt32 dl_accept_value; /* min. acceptable bits/second */ |
|
}; |
|
typedef struct dl_through_t dl_through_t; |
|
/* |
|
transit delay specification |
|
|
|
This parameter is specified for both directions. |
|
expressed in milliseconds assuming a DLSDU size of 128 octets. |
|
The scaling of the value to the current DLSDU size is provider dependent. |
|
*/ |
|
struct dl_transdelay_t { |
|
SInt32 dl_target_value; /* desired value of service */ |
|
SInt32 dl_accept_value; /* min. acceptable value of service */ |
|
}; |
|
typedef struct dl_transdelay_t dl_transdelay_t; |
|
/* |
|
priority specification |
|
priority range is 0-100, with 0 being highest value. |
|
*/ |
|
|
|
struct dl_priority_t { |
|
SInt32 dl_min; |
|
SInt32 dl_max; |
|
}; |
|
typedef struct dl_priority_t dl_priority_t; |
|
/* protection specification*/ |
|
enum { |
|
DL_NONE = 0x0B01, /* no protection supplied */ |
|
DL_MONITOR = 0x0B02, /* protection against passive monitoring */ |
|
DL_MAXIMUM = 0x0B03 /* protection against modification, replay, addition, or deletion */ |
|
}; |
|
|
|
struct dl_protect_t { |
|
SInt32 dl_min; |
|
SInt32 dl_max; |
|
}; |
|
typedef struct dl_protect_t dl_protect_t; |
|
/* |
|
Resilience specification |
|
probabilities are scaled by a factor of 10,000 with a time interval |
|
of 10,000 seconds. |
|
*/ |
|
struct dl_resilience_t { |
|
SInt32 dl_disc_prob; /* probability of provider init DISC */ |
|
SInt32 dl_reset_prob; /* probability of provider init RESET */ |
|
}; |
|
typedef struct dl_resilience_t dl_resilience_t; |
|
/* |
|
QOS type definition to be used for negotiation with the |
|
remote end of a connection, or a connectionless unitdata request. |
|
There are two type definitions to handle the negotiation |
|
process at connection establishment. The typedef dl_qos_range_t |
|
is used to present a range for parameters. This is used |
|
in the DL_CONNECT_REQ and DL_CONNECT_IND messages. The typedef |
|
dl_qos_sel_t is used to select a specific value for the QOS |
|
parameters. This is used in the DL_CONNECT_RES, DL_CONNECT_CON, |
|
and DL_INFO_ACK messages to define the selected QOS parameters |
|
for a connection. |
|
|
|
NOTE |
|
A DataLink provider which has unknown values for any of the fields |
|
will use a value of DL_UNKNOWN for all values in the fields. |
|
|
|
NOTE |
|
A QOS parameter value of DL_QOS_DONT_CARE informs the DLS |
|
provider the user requesting this value doesn't care |
|
what the QOS parameter is set to. This value becomes the |
|
least possible value in the range of QOS parameters. |
|
The order of the QOS parameter range is then: |
|
|
|
DL_QOS_DONT_CARE < 0 < MAXIMUM QOS VALUE |
|
*/ |
|
enum { |
|
DL_UNKNOWN = -1, |
|
DL_QOS_DONT_CARE = -2 |
|
}; |
|
|
|
/* |
|
Every QOS structure has the first 4 bytes containing a type |
|
field, denoting the definition of the rest of the structure. |
|
This is used in the same manner has the dl_primitive variable |
|
is in messages. |
|
|
|
The following list is the defined QOS structure type values and structures. |
|
*/ |
|
enum { |
|
DL_QOS_CO_RANGE1 = 0x0101, /* QOS range struct. for Connection modeservice */ |
|
DL_QOS_CO_SEL1 = 0x0102, /* QOS selection structure */ |
|
DL_QOS_CL_RANGE1 = 0x0103, /* QOS range struct. for connectionless*/ |
|
DL_QOS_CL_SEL1 = 0x0104 /* QOS selection for connectionless mode*/ |
|
}; |
|
|
|
struct dl_qos_co_range1_t { |
|
UInt32 dl_qos_type; |
|
dl_through_t dl_rcv_throughput; /* desired and acceptable*/ |
|
dl_transdelay_t dl_rcv_trans_delay; /* desired and acceptable*/ |
|
dl_through_t dl_xmt_throughput; |
|
dl_transdelay_t dl_xmt_trans_delay; |
|
dl_priority_t dl_priority; /* min and max values */ |
|
dl_protect_t dl_protection; /* min and max values */ |
|
SInt32 dl_residual_error; |
|
dl_resilience_t dl_resilience; |
|
}; |
|
typedef struct dl_qos_co_range1_t dl_qos_co_range1_t; |
|
struct dl_qos_co_sel1_t { |
|
UInt32 dl_qos_type; |
|
SInt32 dl_rcv_throughput; |
|
SInt32 dl_rcv_trans_delay; |
|
SInt32 dl_xmt_throughput; |
|
SInt32 dl_xmt_trans_delay; |
|
SInt32 dl_priority; |
|
SInt32 dl_protection; |
|
SInt32 dl_residual_error; |
|
dl_resilience_t dl_resilience; |
|
}; |
|
typedef struct dl_qos_co_sel1_t dl_qos_co_sel1_t; |
|
struct dl_qos_cl_range1_t { |
|
UInt32 dl_qos_type; |
|
dl_transdelay_t dl_trans_delay; |
|
dl_priority_t dl_priority; |
|
dl_protect_t dl_protection; |
|
SInt32 dl_residual_error; |
|
}; |
|
typedef struct dl_qos_cl_range1_t dl_qos_cl_range1_t; |
|
struct dl_qos_cl_sel1_t { |
|
UInt32 dl_qos_type; |
|
SInt32 dl_trans_delay; |
|
SInt32 dl_priority; |
|
SInt32 dl_protection; |
|
SInt32 dl_residual_error; |
|
}; |
|
typedef struct dl_qos_cl_sel1_t dl_qos_cl_sel1_t; |
|
/* |
|
DLPI interface primitive definitions. |
|
|
|
Each primitive is sent as a stream message. It is possible that |
|
the messages may be viewed as a sequence of bytes that have the |
|
following form without any padding. The structure definition |
|
of the following messages may have to change depending on the |
|
underlying hardware architecture and crossing of a hardware |
|
boundary with a different hardware architecture. |
|
|
|
Fields in the primitives having a name of the form |
|
dl_reserved cannot be used and have the value of |
|
binary zero, no bits turned on. |
|
|
|
Each message has the name defined followed by the |
|
stream message type (M_PROTO, M_PCPROTO, M_DATA) |
|
*/ |
|
/* LOCAL MANAGEMENT SERVICE PRIMITIVES*/ |
|
|
|
/* DL_INFO_REQ, M_PCPROTO type*/ |
|
|
|
struct dl_info_req_t { |
|
UInt32 dl_primitive; /* set to DL_INFO_REQ */ |
|
}; |
|
typedef struct dl_info_req_t dl_info_req_t; |
|
/* DL_INFO_ACK, M_PCPROTO type*/ |
|
struct dl_info_ack_t { |
|
UInt32 dl_primitive; /* set to DL_INFO_ACK */ |
|
UInt32 dl_max_sdu; /* Max bytes in a DLSDU */ |
|
UInt32 dl_min_sdu; /* Min bytes in a DLSDU */ |
|
UInt32 dl_addr_length; /* length of DLSAP address */ |
|
UInt32 dl_mac_type; /* type of medium supported*/ |
|
UInt32 dl_reserved; /* value set to zero */ |
|
UInt32 dl_current_state; /* state of DLPI interface */ |
|
SInt32 dl_sap_length; /* current length of SAP part of dlsap address */ |
|
UInt32 dl_service_mode; /* CO, CL or ACL */ |
|
UInt32 dl_qos_length; /* length of qos values */ |
|
UInt32 dl_qos_offset; /* offset from beg. of block*/ |
|
UInt32 dl_qos_range_length; /* available range of qos */ |
|
UInt32 dl_qos_range_offset; /* offset from beg. of block*/ |
|
UInt32 dl_provider_style; /* style1 or style2 */ |
|
UInt32 dl_addr_offset; /* offset of the dlsap addr */ |
|
UInt32 dl_version; /* version number */ |
|
UInt32 dl_brdcst_addr_length; /* length of broadcast addr */ |
|
UInt32 dl_brdcst_addr_offset; /* offset from beg. of block*/ |
|
UInt32 dl_growth; /* set to zero */ |
|
}; |
|
typedef struct dl_info_ack_t dl_info_ack_t; |
|
/* DL_ATTACH_REQ, M_PROTO type*/ |
|
struct dl_attach_req_t { |
|
UInt32 dl_primitive; /* set to DL_ATTACH_REQ*/ |
|
UInt32 dl_ppa; /* id of the PPA */ |
|
}; |
|
typedef struct dl_attach_req_t dl_attach_req_t; |
|
/* DL_DETACH_REQ, M_PROTO type*/ |
|
struct dl_detach_req_t { |
|
UInt32 dl_primitive; /* set to DL_DETACH_REQ */ |
|
}; |
|
typedef struct dl_detach_req_t dl_detach_req_t; |
|
/* DL_BIND_REQ, M_PROTO type*/ |
|
struct dl_bind_req_t { |
|
UInt32 dl_primitive; /* set to DL_BIND_REQ */ |
|
UInt32 dl_sap; /* info to identify dlsap addr*/ |
|
UInt32 dl_max_conind; /* max # of outstanding con_ind*/ |
|
UInt16 dl_service_mode; /* CO, CL or ACL */ |
|
UInt16 dl_conn_mgmt; /* if non-zero, is con-mgmt stream*/ |
|
UInt32 dl_xidtest_flg; /* if set to 1 indicates automatic initiation of test and xid frames */ |
|
}; |
|
typedef struct dl_bind_req_t dl_bind_req_t; |
|
/* DL_BIND_ACK, M_PCPROTO type*/ |
|
struct dl_bind_ack_t { |
|
UInt32 dl_primitive; /* DL_BIND_ACK */ |
|
UInt32 dl_sap; /* DLSAP addr info */ |
|
UInt32 dl_addr_length; /* length of complete DLSAP addr */ |
|
UInt32 dl_addr_offset; /* offset from beginning of M_PCPROTO*/ |
|
UInt32 dl_max_conind; /* allowed max. # of con-ind */ |
|
UInt32 dl_xidtest_flg; /* responses supported by provider*/ |
|
}; |
|
typedef struct dl_bind_ack_t dl_bind_ack_t; |
|
/* DL_SUBS_BIND_REQ, M_PROTO type*/ |
|
struct dl_subs_bind_req_t { |
|
UInt32 dl_primitive; /* DL_SUBS_BIND_REQ */ |
|
UInt32 dl_subs_sap_offset; /* offset of subs_sap */ |
|
UInt32 dl_subs_sap_length; /* length of subs_sap */ |
|
UInt32 dl_subs_bind_class; /* peer or hierarchical */ |
|
}; |
|
typedef struct dl_subs_bind_req_t dl_subs_bind_req_t; |
|
/* DL_SUBS_BIND_ACK, M_PCPROTO type*/ |
|
struct dl_subs_bind_ack_t { |
|
UInt32 dl_primitive; /* DL_SUBS_BIND_ACK */ |
|
UInt32 dl_subs_sap_offset; /* offset of subs_sap */ |
|
UInt32 dl_subs_sap_length; /* length of subs_sap */ |
|
}; |
|
typedef struct dl_subs_bind_ack_t dl_subs_bind_ack_t; |
|
/* DL_UNBIND_REQ, M_PROTO type*/ |
|
struct dl_unbind_req_t { |
|
UInt32 dl_primitive; /* DL_UNBIND_REQ */ |
|
}; |
|
typedef struct dl_unbind_req_t dl_unbind_req_t; |
|
/* DL_SUBS_UNBIND_REQ, M_PROTO type*/ |
|
struct dl_subs_unbind_req_t { |
|
UInt32 dl_primitive; /* DL_SUBS_UNBIND_REQ */ |
|
UInt32 dl_subs_sap_offset; /* offset of subs_sap */ |
|
UInt32 dl_subs_sap_length; /* length of subs_sap */ |
|
}; |
|
typedef struct dl_subs_unbind_req_t dl_subs_unbind_req_t; |
|
/* DL_OK_ACK, M_PCPROTO type*/ |
|
struct dl_ok_ack_t { |
|
UInt32 dl_primitive; /* DL_OK_ACK */ |
|
UInt32 dl_correct_primitive; /* primitive being acknowledged */ |
|
}; |
|
typedef struct dl_ok_ack_t dl_ok_ack_t; |
|
/* DL_ERROR_ACK, M_PCPROTO type*/ |
|
struct dl_error_ack_t { |
|
UInt32 dl_primitive; /* DL_ERROR_ACK */ |
|
UInt32 dl_error_primitive; /* primitive in error */ |
|
UInt32 dl_errno; /* DLPI error code */ |
|
UInt32 dl_unix_errno; /* UNIX system error code */ |
|
}; |
|
typedef struct dl_error_ack_t dl_error_ack_t; |
|
/* DL_ENABMULTI_REQ, M_PROTO type*/ |
|
struct dl_enabmulti_req_t { |
|
UInt32 dl_primitive; /* DL_ENABMULTI_REQ */ |
|
UInt32 dl_addr_length; /* length of multicast address */ |
|
UInt32 dl_addr_offset; /* offset from beg. of M_PROTO block*/ |
|
}; |
|
typedef struct dl_enabmulti_req_t dl_enabmulti_req_t; |
|
/* DL_DISABMULTI_REQ, M_PROTO type*/ |
|
struct dl_disabmulti_req_t { |
|
UInt32 dl_primitive; /* DL_DISABMULTI_REQ */ |
|
UInt32 dl_addr_length; /* length of multicast address */ |
|
UInt32 dl_addr_offset; /* offset from beg. of M_PROTO block*/ |
|
}; |
|
typedef struct dl_disabmulti_req_t dl_disabmulti_req_t; |
|
/* DL_PROMISCON_REQ, M_PROTO type*/ |
|
struct dl_promiscon_req_t { |
|
UInt32 dl_primitive; /* DL_PROMISCON_REQ */ |
|
UInt32 dl_level; /* physical,SAP level or ALL multicast*/ |
|
}; |
|
typedef struct dl_promiscon_req_t dl_promiscon_req_t; |
|
/* DL_PROMISCOFF_REQ, M_PROTO type*/ |
|
struct dl_promiscoff_req_t { |
|
UInt32 dl_primitive; /* DL_PROMISCOFF_REQ */ |
|
UInt32 dl_level; /* Physical,SAP level or ALL multicast*/ |
|
}; |
|
typedef struct dl_promiscoff_req_t dl_promiscoff_req_t; |
|
/* Primitives to get and set the Physical address*/ |
|
/* DL_PHYS_ADDR_REQ, M_PROTO type*/ |
|
|
|
struct dl_phys_addr_req_t { |
|
UInt32 dl_primitive; /* DL_PHYS_ADDR_REQ */ |
|
UInt32 dl_addr_type; /* factory or current physical addr */ |
|
}; |
|
typedef struct dl_phys_addr_req_t dl_phys_addr_req_t; |
|
/* DL_PHYS_ADDR_ACK, M_PCPROTO type*/ |
|
struct dl_phys_addr_ack_t { |
|
UInt32 dl_primitive; /* DL_PHYS_ADDR_ACK */ |
|
UInt32 dl_addr_length; /* length of the physical addr */ |
|
UInt32 dl_addr_offset; /* offset from beg. of block */ |
|
}; |
|
typedef struct dl_phys_addr_ack_t dl_phys_addr_ack_t; |
|
/* DL_SET_PHYS_ADDR_REQ, M_PROTO type*/ |
|
struct dl_set_phys_addr_req_t { |
|
UInt32 dl_primitive; /* DL_SET_PHYS_ADDR_REQ */ |
|
UInt32 dl_addr_length; /* length of physical addr */ |
|
UInt32 dl_addr_offset; /* offset from beg. of block */ |
|
}; |
|
typedef struct dl_set_phys_addr_req_t dl_set_phys_addr_req_t; |
|
/* Primitives to get statistics*/ |
|
/* DL_GET_STATISTICS_REQ, M_PROTO type*/ |
|
|
|
struct dl_get_statistics_req_t { |
|
UInt32 dl_primitive; /* DL_GET_STATISTICS_REQ */ |
|
}; |
|
typedef struct dl_get_statistics_req_t dl_get_statistics_req_t; |
|
/* DL_GET_STATISTICS_ACK, M_PCPROTO type*/ |
|
struct dl_get_statistics_ack_t { |
|
UInt32 dl_primitive; /* DL_GET_STATISTICS_ACK */ |
|
UInt32 dl_stat_length; /* length of statistics structure*/ |
|
UInt32 dl_stat_offset; /* offset from beg. of block */ |
|
}; |
|
typedef struct dl_get_statistics_ack_t dl_get_statistics_ack_t; |
|
/* CONNECTION-ORIENTED SERVICE PRIMITIVES*/ |
|
|
|
/* DL_CONNECT_REQ, M_PROTO type*/ |
|
|
|
struct dl_connect_req_t { |
|
UInt32 dl_primitive; /* DL_CONNECT_REQ */ |
|
UInt32 dl_dest_addr_length; /* len. of dlsap addr*/ |
|
UInt32 dl_dest_addr_offset; /* offset */ |
|
UInt32 dl_qos_length; /* len. of QOS parm val*/ |
|
UInt32 dl_qos_offset; /* offset */ |
|
UInt32 dl_growth; /* set to zero */ |
|
}; |
|
typedef struct dl_connect_req_t dl_connect_req_t; |
|
/* DL_CONNECT_IND, M_PROTO type*/ |
|
struct dl_connect_ind_t { |
|
UInt32 dl_primitive; /* DL_CONNECT_IND */ |
|
UInt32 dl_correlation; /* provider's correlation token*/ |
|
UInt32 dl_called_addr_length; /* length of called address */ |
|
UInt32 dl_called_addr_offset; /* offset from beginning of block */ |
|
UInt32 dl_calling_addr_length; /* length of calling address */ |
|
UInt32 dl_calling_addr_offset; /* offset from beginning of block */ |
|
UInt32 dl_qos_length; /* length of qos structure */ |
|
UInt32 dl_qos_offset; /* offset from beginning of block */ |
|
UInt32 dl_growth; /* set to zero */ |
|
}; |
|
typedef struct dl_connect_ind_t dl_connect_ind_t; |
|
/* DL_CONNECT_RES, M_PROTO type*/ |
|
struct dl_connect_res_t { |
|
UInt32 dl_primitive; /* DL_CONNECT_RES */ |
|
UInt32 dl_correlation; /* provider's correlation token */ |
|
UInt32 dl_resp_token; /* token associated with responding stream */ |
|
UInt32 dl_qos_length; /* length of qos structure */ |
|
UInt32 dl_qos_offset; /* offset from beginning of block */ |
|
UInt32 dl_growth; /* set to zero */ |
|
}; |
|
typedef struct dl_connect_res_t dl_connect_res_t; |
|
/* DL_CONNECT_CON, M_PROTO type*/ |
|
struct dl_connect_con_t { |
|
UInt32 dl_primitive; /* DL_CONNECT_CON*/ |
|
UInt32 dl_resp_addr_length; /* length of responder's address */ |
|
UInt32 dl_resp_addr_offset; /* offset from beginning of block*/ |
|
UInt32 dl_qos_length; /* length of qos structure */ |
|
UInt32 dl_qos_offset; /* offset from beginning of block*/ |
|
UInt32 dl_growth; /* set to zero */ |
|
}; |
|
typedef struct dl_connect_con_t dl_connect_con_t; |
|
/* DL_TOKEN_REQ, M_PCPROTO type*/ |
|
struct dl_token_req_t { |
|
UInt32 dl_primitive; /* DL_TOKEN_REQ */ |
|
}; |
|
typedef struct dl_token_req_t dl_token_req_t; |
|
/* DL_TOKEN_ACK, M_PCPROTO type*/ |
|
struct dl_token_ack_t { |
|
UInt32 dl_primitive; /* DL_TOKEN_ACK */ |
|
UInt32 dl_token; /* Connection response token associated with the stream */ |
|
}; |
|
typedef struct dl_token_ack_t dl_token_ack_t; |
|
/* DL_DISCONNECT_REQ, M_PROTO type*/ |
|
struct dl_disconnect_req_t { |
|
UInt32 dl_primitive; /* DL_DISCONNECT_REQ */ |
|
UInt32 dl_reason; /*normal, abnormal, perm. or transient*/ |
|
UInt32 dl_correlation; /* association with connect_ind */ |
|
}; |
|
typedef struct dl_disconnect_req_t dl_disconnect_req_t; |
|
/* DL_DISCONNECT_IND, M_PROTO type*/ |
|
struct dl_disconnect_ind_t { |
|
UInt32 dl_primitive; /* DL_DISCONNECT_IND */ |
|
UInt32 dl_originator; /* USER or PROVIDER */ |
|
UInt32 dl_reason; /* permanent or transient */ |
|
UInt32 dl_correlation; /* association with connect_ind */ |
|
}; |
|
typedef struct dl_disconnect_ind_t dl_disconnect_ind_t; |
|
/* DL_RESET_REQ, M_PROTO type*/ |
|
struct dl_reset_req_t { |
|
UInt32 dl_primitive; /* DL_RESET_REQ */ |
|
}; |
|
typedef struct dl_reset_req_t dl_reset_req_t; |
|
/* DL_RESET_IND, M_PROTO type*/ |
|
struct dl_reset_ind_t { |
|
UInt32 dl_primitive; /* DL_RESET_IND */ |
|
UInt32 dl_originator; /* Provider or User */ |
|
UInt32 dl_reason; /* flow control, link error or resynch*/ |
|
}; |
|
typedef struct dl_reset_ind_t dl_reset_ind_t; |
|
/* DL_RESET_RES, M_PROTO type*/ |
|
struct dl_reset_res_t { |
|
UInt32 dl_primitive; /* DL_RESET_RES */ |
|
}; |
|
typedef struct dl_reset_res_t dl_reset_res_t; |
|
/* DL_RESET_CON, M_PROTO type*/ |
|
struct dl_reset_con_t { |
|
UInt32 dl_primitive; /* DL_RESET_CON */ |
|
}; |
|
typedef struct dl_reset_con_t dl_reset_con_t; |
|
/* CONNECTIONLESS SERVICE PRIMITIVES*/ |
|
/* DL_UNITDATA_REQ, M_PROTO type, with M_DATA block(s)*/ |
|
|
|
struct dl_unitdata_req_t { |
|
UInt32 dl_primitive; /* DL_UNITDATA_REQ */ |
|
UInt32 dl_dest_addr_length; /* DLSAP length of dest. user */ |
|
UInt32 dl_dest_addr_offset; /* offset from beg. of block */ |
|
dl_priority_t dl_priority; /* priority value */ |
|
}; |
|
typedef struct dl_unitdata_req_t dl_unitdata_req_t; |
|
/* DL_UNITDATA_IND, M_PROTO type, with M_DATA block(s)*/ |
|
struct dl_unitdata_ind_t { |
|
UInt32 dl_primitive; /* DL_UNITDATA_IND */ |
|
UInt32 dl_dest_addr_length; /* DLSAP length of dest. user */ |
|
UInt32 dl_dest_addr_offset; /* offset from beg. of block */ |
|
UInt32 dl_src_addr_length; /* DLSAP addr length of sending user*/ |
|
UInt32 dl_src_addr_offset; /* offset from beg. of block */ |
|
UInt32 dl_group_address; /* set to one if multicast/broadcast*/ |
|
}; |
|
typedef struct dl_unitdata_ind_t dl_unitdata_ind_t; |
|
/* |
|
DL_UDERROR_IND, M_PROTO type |
|
(or M_PCPROTO type if LLI-based provider) |
|
*/ |
|
struct dl_uderror_ind_t { |
|
UInt32 dl_primitive; /* DL_UDERROR_IND */ |
|
UInt32 dl_dest_addr_length; /* Destination DLSAP */ |
|
UInt32 dl_dest_addr_offset; /* Offset from beg. of block */ |
|
UInt32 dl_unix_errno; /* unix system error code*/ |
|
UInt32 dl_errno; /* DLPI error code */ |
|
}; |
|
typedef struct dl_uderror_ind_t dl_uderror_ind_t; |
|
/* DL_UDQOS_REQ, M_PROTO type*/ |
|
struct dl_udqos_req_t { |
|
UInt32 dl_primitive; /* DL_UDQOS_REQ */ |
|
UInt32 dl_qos_length; /* length in bytes of requested qos*/ |
|
UInt32 dl_qos_offset; /* offset from beg. of block */ |
|
}; |
|
typedef struct dl_udqos_req_t dl_udqos_req_t; |
|
/* Primitives to handle XID and TEST operations*/ |
|
/* DL_TEST_REQ, M_PROTO type*/ |
|
|
|
struct dl_test_req_t { |
|
UInt32 dl_primitive; /* DL_TEST_REQ */ |
|
UInt32 dl_flag; /* poll/final */ |
|
UInt32 dl_dest_addr_length; /* DLSAP length of dest. user */ |
|
UInt32 dl_dest_addr_offset; /* offset from beg. of block */ |
|
}; |
|
typedef struct dl_test_req_t dl_test_req_t; |
|
/* DL_TEST_IND, M_PROTO type*/ |
|
struct dl_test_ind_t { |
|
UInt32 dl_primitive; /* DL_TEST_IND */ |
|
UInt32 dl_flag; /* poll/final */ |
|
UInt32 dl_dest_addr_length; /* dlsap length of dest. user */ |
|
UInt32 dl_dest_addr_offset; /* offset from beg. of block */ |
|
UInt32 dl_src_addr_length; /* dlsap length of source user */ |
|
UInt32 dl_src_addr_offset; /* offset from beg. of block */ |
|
}; |
|
typedef struct dl_test_ind_t dl_test_ind_t; |
|
/* DL_TEST_RES, M_PROTO type*/ |
|
struct dl_test_res_t { |
|
UInt32 dl_primitive; /* DL_TEST_RES */ |
|
UInt32 dl_flag; /* poll/final */ |
|
UInt32 dl_dest_addr_length; /* DLSAP length of dest. user */ |
|
UInt32 dl_dest_addr_offset; /* offset from beg. of block */ |
|
}; |
|
typedef struct dl_test_res_t dl_test_res_t; |
|
/* DL_TEST_CON, M_PROTO type*/ |
|
struct dl_test_con_t { |
|
UInt32 dl_primitive; /* DL_TEST_CON */ |
|
UInt32 dl_flag; /* poll/final */ |
|
UInt32 dl_dest_addr_length; /* dlsap length of dest. user */ |
|
UInt32 dl_dest_addr_offset; /* offset from beg. of block */ |
|
UInt32 dl_src_addr_length; /* dlsap length of source user */ |
|
UInt32 dl_src_addr_offset; /* offset from beg. of block */ |
|
}; |
|
typedef struct dl_test_con_t dl_test_con_t; |
|
/* DL_XID_REQ, M_PROTO type*/ |
|
struct dl_xid_req_t { |
|
UInt32 dl_primitive; /* DL_XID_REQ */ |
|
UInt32 dl_flag; /* poll/final */ |
|
UInt32 dl_dest_addr_length; /* dlsap length of dest. user */ |
|
UInt32 dl_dest_addr_offset; /* offset from beg. of block */ |
|
}; |
|
typedef struct dl_xid_req_t dl_xid_req_t; |
|
/* DL_XID_IND, M_PROTO type*/ |
|
struct dl_xid_ind_t { |
|
UInt32 dl_primitive; /* DL_XID_IND */ |
|
UInt32 dl_flag; /* poll/final */ |
|
UInt32 dl_dest_addr_length; /* dlsap length of dest. user */ |
|
UInt32 dl_dest_addr_offset; /* offset from beg. of block */ |
|
UInt32 dl_src_addr_length; /* dlsap length of source user */ |
|
UInt32 dl_src_addr_offset; /* offset from beg. of block */ |
|
}; |
|
typedef struct dl_xid_ind_t dl_xid_ind_t; |
|
/* DL_XID_RES, M_PROTO type*/ |
|
struct dl_xid_res_t { |
|
UInt32 dl_primitive; /* DL_XID_RES */ |
|
UInt32 dl_flag; /* poll/final */ |
|
UInt32 dl_dest_addr_length; /* DLSAP length of dest. user */ |
|
UInt32 dl_dest_addr_offset; /* offset from beg. of block */ |
|
}; |
|
typedef struct dl_xid_res_t dl_xid_res_t; |
|
/* DL_XID_CON, M_PROTO type*/ |
|
struct dl_xid_con_t { |
|
UInt32 dl_primitive; /* DL_XID_CON */ |
|
UInt32 dl_flag; /* poll/final */ |
|
UInt32 dl_dest_addr_length; /* dlsap length of dest. user */ |
|
UInt32 dl_dest_addr_offset; /* offset from beg. of block */ |
|
UInt32 dl_src_addr_length; /* dlsap length of source user */ |
|
UInt32 dl_src_addr_offset; /* offset from beg. of block */ |
|
}; |
|
typedef struct dl_xid_con_t dl_xid_con_t; |
|
/* ACKNOWLEDGED CONNECTIONLESS SERVICE PRIMITIVES*/ |
|
|
|
/* DL_DATA_ACK_REQ, M_PROTO type*/ |
|
|
|
struct dl_data_ack_req_t { |
|
UInt32 dl_primitive; /* DL_DATA_ACK_REQ */ |
|
UInt32 dl_correlation; /* User's correlation token */ |
|
UInt32 dl_dest_addr_length; /* length of destination addr */ |
|
UInt32 dl_dest_addr_offset; /* offset from beginning of block */ |
|
UInt32 dl_src_addr_length; /* length of source address */ |
|
UInt32 dl_src_addr_offset; /* offset from beginning of block */ |
|
UInt32 dl_priority; /* priority */ |
|
UInt32 dl_service_class; /* DL_RQST_RSP or DL_RQST_NORSP */ |
|
}; |
|
typedef struct dl_data_ack_req_t dl_data_ack_req_t; |
|
/* DL_DATA_ACK_IND, M_PROTO type*/ |
|
struct dl_data_ack_ind_t { |
|
UInt32 dl_primitive; /* DL_DATA_ACK_IND */ |
|
UInt32 dl_dest_addr_length; /* length of destination addr */ |
|
UInt32 dl_dest_addr_offset; /* offset from beginning of block */ |
|
UInt32 dl_src_addr_length; /* length of source address */ |
|
UInt32 dl_src_addr_offset; /* offset from beginning of block */ |
|
UInt32 dl_priority; /* priority for data unit transm. */ |
|
UInt32 dl_service_class; /* DL_RQST_RSP or DL_RQST_NORSP */ |
|
}; |
|
typedef struct dl_data_ack_ind_t dl_data_ack_ind_t; |
|
/* DL_DATA_ACK_STATUS_IND, M_PROTO type*/ |
|
struct dl_data_ack_status_ind_t { |
|
UInt32 dl_primitive; /* DL_DATA_ACK_STATUS_IND */ |
|
UInt32 dl_correlation; /* User's correlation token */ |
|
UInt32 dl_status; /* success or failure of previous req*/ |
|
}; |
|
typedef struct dl_data_ack_status_ind_t dl_data_ack_status_ind_t; |
|
/* DL_REPLY_REQ, M_PROTO type*/ |
|
struct dl_reply_req_t { |
|
UInt32 dl_primitive; /* DL_REPLY_REQ */ |
|
UInt32 dl_correlation; /* User's correlation token */ |
|
UInt32 dl_dest_addr_length; /* length of destination address */ |
|
UInt32 dl_dest_addr_offset; /* offset from beginning of block */ |
|
UInt32 dl_src_addr_length; /* source address length */ |
|
UInt32 dl_src_addr_offset; /* offset from beginning of block */ |
|
UInt32 dl_priority; /* priority for data unit transmission*/ |
|
UInt32 dl_service_class; |
|
}; |
|
typedef struct dl_reply_req_t dl_reply_req_t; |
|
/* DL_REPLY_IND, M_PROTO type*/ |
|
struct dl_reply_ind_t { |
|
UInt32 dl_primitive; /* DL_REPLY_IND */ |
|
UInt32 dl_dest_addr_length; /* length of destination address */ |
|
UInt32 dl_dest_addr_offset; /* offset from beginning of block*/ |
|
UInt32 dl_src_addr_length; /* length of source address */ |
|
UInt32 dl_src_addr_offset; /* offset from beginning of block */ |
|
UInt32 dl_priority; /* priority for data unit transmission*/ |
|
UInt32 dl_service_class; /* DL_RQST_RSP or DL_RQST_NORSP */ |
|
}; |
|
typedef struct dl_reply_ind_t dl_reply_ind_t; |
|
/* DL_REPLY_STATUS_IND, M_PROTO type*/ |
|
struct dl_reply_status_ind_t { |
|
UInt32 dl_primitive; /* DL_REPLY_STATUS_IND */ |
|
UInt32 dl_correlation; /* User's correlation token */ |
|
UInt32 dl_status; /* success or failure of previous req*/ |
|
}; |
|
typedef struct dl_reply_status_ind_t dl_reply_status_ind_t; |
|
/* DL_REPLY_UPDATE_REQ, M_PROTO type*/ |
|
struct dl_reply_update_req_t { |
|
UInt32 dl_primitive; /* DL_REPLY_UPDATE_REQ */ |
|
UInt32 dl_correlation; /* user's correlation token */ |
|
UInt32 dl_src_addr_length; /* length of source address */ |
|
UInt32 dl_src_addr_offset; /* offset from beginning of block */ |
|
}; |
|
typedef struct dl_reply_update_req_t dl_reply_update_req_t; |
|
/* DL_REPLY_UPDATE_STATUS_IND, M_PROTO type*/ |
|
struct dl_reply_update_status_ind_t { |
|
UInt32 dl_primitive; /* DL_REPLY_UPDATE_STATUS_IND */ |
|
UInt32 dl_correlation; /* User's correlation token */ |
|
UInt32 dl_status; /* success or failure of previous req*/ |
|
}; |
|
typedef struct dl_reply_update_status_ind_t dl_reply_update_status_ind_t; |
|
union DL_primitives { |
|
UInt32 dl_primitive; |
|
dl_info_req_t info_req; |
|
dl_info_ack_t info_ack; |
|
dl_attach_req_t attach_req; |
|
dl_detach_req_t detach_req; |
|
dl_bind_req_t bind_req; |
|
dl_bind_ack_t bind_ack; |
|
dl_unbind_req_t unbind_req; |
|
dl_subs_bind_req_t subs_bind_req; |
|
dl_subs_bind_ack_t subs_bind_ack; |
|
dl_subs_unbind_req_t subs_unbind_req; |
|
dl_ok_ack_t ok_ack; |
|
dl_error_ack_t error_ack; |
|
dl_connect_req_t connect_req; |
|
dl_connect_ind_t connect_ind; |
|
dl_connect_res_t connect_res; |
|
dl_connect_con_t connect_con; |
|
dl_token_req_t token_req; |
|
dl_token_ack_t token_ack; |
|
dl_disconnect_req_t disconnect_req; |
|
dl_disconnect_ind_t disconnect_ind; |
|
dl_reset_req_t reset_req; |
|
dl_reset_ind_t reset_ind; |
|
dl_reset_res_t reset_res; |
|
dl_reset_con_t reset_con; |
|
dl_unitdata_req_t unitdata_req; |
|
dl_unitdata_ind_t unitdata_ind; |
|
dl_uderror_ind_t uderror_ind; |
|
dl_udqos_req_t udqos_req; |
|
dl_enabmulti_req_t enabmulti_req; |
|
dl_disabmulti_req_t disabmulti_req; |
|
dl_promiscon_req_t promiscon_req; |
|
dl_promiscoff_req_t promiscoff_req; |
|
dl_phys_addr_req_t physaddr_req; |
|
dl_phys_addr_ack_t physaddr_ack; |
|
dl_set_phys_addr_req_t set_physaddr_req; |
|
dl_get_statistics_req_t get_statistics_req; |
|
dl_get_statistics_ack_t get_statistics_ack; |
|
dl_test_req_t test_req; |
|
dl_test_ind_t test_ind; |
|
dl_test_res_t test_res; |
|
dl_test_con_t test_con; |
|
dl_xid_req_t xid_req; |
|
dl_xid_ind_t xid_ind; |
|
dl_xid_res_t xid_res; |
|
dl_xid_con_t xid_con; |
|
dl_data_ack_req_t data_ack_req; |
|
dl_data_ack_ind_t data_ack_ind; |
|
dl_data_ack_status_ind_t data_ack_status_ind; |
|
dl_reply_req_t reply_req; |
|
dl_reply_ind_t reply_ind; |
|
dl_reply_status_ind_t reply_status_ind; |
|
dl_reply_update_req_t reply_update_req; |
|
dl_reply_update_status_ind_t reply_update_status_ind; |
|
}; |
|
typedef union DL_primitives DL_primitives; |
|
enum { |
|
DL_INFO_REQ_SIZE = sizeof(dl_info_req_t), |
|
DL_INFO_ACK_SIZE = sizeof(dl_info_ack_t), |
|
DL_ATTACH_REQ_SIZE = sizeof(dl_attach_req_t), |
|
DL_DETACH_REQ_SIZE = sizeof(dl_detach_req_t), |
|
DL_BIND_REQ_SIZE = sizeof(dl_bind_req_t), |
|
DL_BIND_ACK_SIZE = sizeof(dl_bind_ack_t), |
|
DL_UNBIND_REQ_SIZE = sizeof(dl_unbind_req_t), |
|
DL_SUBS_BIND_REQ_SIZE = sizeof(dl_subs_bind_req_t), |
|
DL_SUBS_BIND_ACK_SIZE = sizeof(dl_subs_bind_ack_t), |
|
DL_SUBS_UNBIND_REQ_SIZE = sizeof(dl_subs_unbind_req_t), |
|
DL_OK_ACK_SIZE = sizeof(dl_ok_ack_t), |
|
DL_ERROR_ACK_SIZE = sizeof(dl_error_ack_t), |
|
DL_CONNECT_REQ_SIZE = sizeof(dl_connect_req_t), |
|
DL_CONNECT_IND_SIZE = sizeof(dl_connect_ind_t), |
|
DL_CONNECT_RES_SIZE = sizeof(dl_connect_res_t), |
|
DL_CONNECT_CON_SIZE = sizeof(dl_connect_con_t), |
|
DL_TOKEN_REQ_SIZE = sizeof(dl_token_req_t), |
|
DL_TOKEN_ACK_SIZE = sizeof(dl_token_ack_t), |
|
DL_DISCONNECT_REQ_SIZE = sizeof(dl_disconnect_req_t), |
|
DL_DISCONNECT_IND_SIZE = sizeof(dl_disconnect_ind_t), |
|
DL_RESET_REQ_SIZE = sizeof(dl_reset_req_t), |
|
DL_RESET_IND_SIZE = sizeof(dl_reset_ind_t), |
|
DL_RESET_RES_SIZE = sizeof(dl_reset_res_t), |
|
DL_RESET_CON_SIZE = sizeof(dl_reset_con_t), |
|
DL_UNITDATA_REQ_SIZE = sizeof(dl_unitdata_req_t), |
|
DL_UNITDATA_IND_SIZE = sizeof(dl_unitdata_ind_t), |
|
DL_UDERROR_IND_SIZE = sizeof(dl_uderror_ind_t), |
|
DL_UDQOS_REQ_SIZE = sizeof(dl_udqos_req_t), |
|
DL_ENABMULTI_REQ_SIZE = sizeof(dl_enabmulti_req_t), |
|
DL_DISABMULTI_REQ_SIZE = sizeof(dl_disabmulti_req_t), |
|
DL_PROMISCON_REQ_SIZE = sizeof(dl_promiscon_req_t), |
|
DL_PROMISCOFF_REQ_SIZE = sizeof(dl_promiscoff_req_t), |
|
DL_PHYS_ADDR_REQ_SIZE = sizeof(dl_phys_addr_req_t), |
|
DL_PHYS_ADDR_ACK_SIZE = sizeof(dl_phys_addr_ack_t), |
|
DL_SET_PHYS_ADDR_REQ_SIZE = sizeof(dl_set_phys_addr_req_t), |
|
DL_GET_STATISTICS_REQ_SIZE = sizeof(dl_get_statistics_req_t), |
|
DL_GET_STATISTICS_ACK_SIZE = sizeof(dl_get_statistics_ack_t), |
|
DL_XID_REQ_SIZE = sizeof(dl_xid_req_t), |
|
DL_XID_IND_SIZE = sizeof(dl_xid_ind_t), |
|
DL_XID_RES_SIZE = sizeof(dl_xid_res_t), |
|
DL_XID_CON_SIZE = sizeof(dl_xid_con_t), |
|
DL_TEST_REQ_SIZE = sizeof(dl_test_req_t), |
|
DL_TEST_IND_SIZE = sizeof(dl_test_ind_t), |
|
DL_TEST_RES_SIZE = sizeof(dl_test_res_t), |
|
DL_TEST_CON_SIZE = sizeof(dl_test_con_t), |
|
DL_DATA_ACK_REQ_SIZE = sizeof(dl_data_ack_req_t), |
|
DL_DATA_ACK_IND_SIZE = sizeof(dl_data_ack_ind_t), |
|
DL_DATA_ACK_STATUS_IND_SIZE = sizeof(dl_data_ack_status_ind_t), |
|
DL_REPLY_REQ_SIZE = sizeof(dl_reply_req_t), |
|
DL_REPLY_IND_SIZE = sizeof(dl_reply_ind_t), |
|
DL_REPLY_STATUS_IND_SIZE = sizeof(dl_reply_status_ind_t), |
|
DL_REPLY_UPDATE_REQ_SIZE = sizeof(dl_reply_update_req_t), |
|
DL_REPLY_UPDATE_STATUS_IND_SIZE = sizeof(dl_reply_update_status_ind_t) |
|
}; |
|
|
|
enum { |
|
DL_IOC_HDR_INFO = ((MIOC_DLPI << 8) | 10) /* Fast path request */ |
|
}; |
|
|
|
/* ***** From the Mentat "modnames.h" ******/ |
|
|
|
|
|
#define MI_AFU_NAME "afu" |
|
#define MI_AHARP_NAME "ahar" |
|
#define MI_AHENET_NAME "ahen" |
|
#define MI_ARP_NAME "arp" |
|
#define MI_ARPM_NAME "arpm" |
|
#define MI_COURMUX_NAME "courmux" |
|
#define MI_CLONE_NAME "clone" |
|
#define MI_DLB_NAME "dlb" |
|
#define MI_DLM_NAME "dlm" |
|
#define MI_DMODD_NAME "disdlpi" |
|
#define MI_DMODT_NAME "distpi" |
|
#define MI_DN_NAME "dn" |
|
#define MI_DNF_NAME "dnf" |
|
#define MI_DRVE_NAME "drve" |
|
#define MI_ECHO_NAME "echo" |
|
#define MI_ENXR_NAME "enxr" |
|
#define MI_RAWIP_NAME "rawip" |
|
#define MI_RAWIPM_NAME "rawipm" |
|
#define MI_HAVOC_NAME "havoc" |
|
#define MI_HAVOCM_NAME "havocm" |
|
#define MI_IP_NAME "ip" |
|
#define MI_IPM_NAME "ipm" |
|
#define MI_IPX_NAME "ipx" |
|
#define MI_LOG_NAME "log" |
|
#define MI_MODE_NAME "mode" |
|
#define MI_MUX_NAME "mux" |
|
#define MI_NECHO_NAME "necho" |
|
#define MI_NPEP_NAME "npep" |
|
#define MI_NULS_NAME "nuls" |
|
#define MI_NULZ_NAME "nulz" |
|
#define MI_PASS_NAME "pass" |
|
#define MI_PIPEMOD_NAME "pipemod" |
|
#define MI_SAD_NAME "sad" |
|
#define MI_SC_NAME "sc" |
|
#define MI_SOCKMOD_NAME "sockmod" |
|
#define MI_SPASS_NAME "spass" |
|
#define MI_SPX_NAME "spx" |
|
#define MI_STH_NAME "mi_sth" |
|
#define MI_TCP_NAME "tcp" |
|
#define MI_TCPM_NAME "tcpm" |
|
#define MI_TIMOD_NAME "timod" |
|
#define MI_TIRDWR_NAME "tirdwr" |
|
#define MI_TMOD_NAME "tmod" |
|
#define MI_TMUX_NAME "tmux" |
|
#define MI_TPIT_NAME "tpit" |
|
#define MI_TRSR_NAME "trsr" |
|
#define MI_TRXR_NAME "trxr" |
|
#define MI_UDP_NAME "udp" |
|
#define MI_UDPM_NAME "udpm" |
|
#define MI_WELD_NAME "mi_weld" |
|
#define MI_XDG_NAME "xdg" |
|
#define MI_XECHO_NAME "xecho" |
|
#define MI_XF_NAME "xf" |
|
#define MI_XFIPX_NAME "xfipx" |
|
#define MI_XFXNS_NAME "xfxns" |
|
#define MI_XPE_NAME "xpe" |
|
#define MI_XS_NAME "xs" |
|
#define MI_XTINDG_NAME "xtindg" |
|
#define MI_XTINVC_NAME "xtinvc" |
|
#define MI_XTM_NAME "xtm" |
|
#define MI_XTMIP_NAME "xtmip" |
|
|
|
#define MI_AFU_DEVICE "/dev/afu" |
|
#define MI_ARP_DEVICE "/dev/arp" |
|
#define MI_COURMUX_DEVICE "/dev/courmux" |
|
#define MI_CLONE_DEVICE "/dev/clone" |
|
#define MI_DLB_DEVICE "/dev/dlb" |
|
#define MI_DN_DEVICE "/dev/dn" |
|
#define MI_DNF_DEVICE "/dev/dnf" |
|
#define MI_DRVE_DEVICE "/dev/drve" |
|
#define MI_ECHO_DEVICE "/dev/echo" |
|
#define MI_RAWIP_DEVICE "/dev/rawip" |
|
#define MI_HAVOC_DEVICE "/dev/havoc" |
|
#define MI_IP_DEVICE "/dev/ip" |
|
#define MI_IPX_DEVICE "/dev/ipx" |
|
#define MI_LOG_DEVICE "/dev/log" |
|
#define MI_MODE_DEVICE "/dev/mode" |
|
#define MI_MUX_DEVICE "/dev/mux" |
|
#define MI_NECHO_DEVICE "/dev/necho" |
|
#define MI_NPEP_DEVICE "/dev/npep" |
|
#define MI_NULS_DEVICE "/dev/nuls" |
|
#define MI_NULZ_DEVICE "/dev/nulz" |
|
#define MI_SAD_DEVICE "/dev/sad" |
|
#define MI_SPX_DEVICE "/dev/spx" |
|
#define MI_TCP_DEVICE "/dev/tcp" |
|
#define MI_TMUX_DEVICE "/dev/tmux" |
|
#define MI_TMUX0_DEVICE "/dev/tmux#0" |
|
#define MI_TMUX1_DEVICE "/dev/tmux#1" |
|
#define MI_TPIT_DEVICE "/dev/tpit" |
|
#define MI_UDP_DEVICE "/dev/udp" |
|
#define MI_XDG_DEVICE "/dev/xdg" |
|
#define MI_XECHO_DEVICE "/dev/xecho" |
|
#define MI_XF_DEVICE "/dev/xf" |
|
#define MI_XPE_DEVICE "/dev/xpe" |
|
#define MI_XS_DEVICE "/dev/xs" |
|
#define MI_XTINDG_DEVICE "/dev/xtindg" |
|
#define MI_XTINVC_DEVICE "/dev/xtinvc" |
|
|
|
|
|
/* Streamtab entries */ |
|
#define MI_AFU_STREAMTAB afuinfo |
|
#define MI_AHARP_STREAMTAB aharinfo |
|
#define MI_AHENET_STREAMTAB aheninfo |
|
#define MI_ARP_STREAMTAB arpinfo |
|
#define MI_ARPM_STREAMTAB arpminfo |
|
#define MI_COURMUX_STREAMTAB courmuxinfo |
|
#define MI_CLONE_STREAMTAB cloneinfo |
|
#define MI_DLB_STREAMTAB dlbinfo |
|
#define MI_DLM_STREAMTAB dlminfo |
|
#define MI_DMODD_STREAMTAB dmoddinfo |
|
#define MI_DMODT_STREAMTAB dmodtinfo |
|
#define MI_DN_STREAMTAB dninfo |
|
#define MI_DNF_STREAMTAB dnfinfo |
|
#define MI_DRVE_STREAMTAB drveinfo |
|
#define MI_ECHO_STREAMTAB echoinfo |
|
#define MI_ENXR_STREAMTAB enxrinfo |
|
#define MI_HAVOC_STREAMTAB hvcinfo |
|
#define MI_HAVOCM_STREAMTAB hvcminfo |
|
#define MI_IP_STREAMTAB ipinfo |
|
#define MI_IPM_STREAMTAB ipminfo |
|
#define MI_IPX_STREAMTAB ipxinfo |
|
#define MI_LOG_STREAMTAB loginfo |
|
#define MI_MODE_STREAMTAB modeinfo |
|
#define MI_MUX_STREAMTAB muxinfo |
|
#define MI_NECHO_STREAMTAB nechoinfo |
|
#define MI_NPEP_STREAMTAB npepinfo |
|
#define MI_NULS_STREAMTAB nulsinfo |
|
#define MI_NULZ_STREAMTAB nulzinfo |
|
#define MI_PASS_STREAMTAB passinfo |
|
#define MI_PIPEMOD_STREAMTAB pmodinfo |
|
#define MI_RAWIP_STREAMTAB rawipinfo |
|
#define MI_RAWIPM_STREAMTAB rawipminfo |
|
#define MI_SAD_STREAMTAB sadinfo |
|
#define MI_SC_STREAMTAB scinfo |
|
#define MI_SOCKMOD_STREAMTAB sockmodinfo |
|
#define MI_SPASS_STREAMTAB spassinfo |
|
#define MI_SPX_STREAMTAB spxinfo |
|
#define MI_STH_STREAMTAB mi_sthinfo |
|
#define MI_TCP_STREAMTAB tcpinfo |
|
#define MI_TCPM_STREAMTAB tcpminfo |
|
#define MI_TIMOD_STREAMTAB timodinfo |
|
#define MI_TIRDWR_STREAMTAB tirdwrinfo |
|
#define MI_TMOD_STREAMTAB tmodinfo |
|
#define MI_TMUX_STREAMTAB tmuxinfo |
|
#define MI_TPIT_STREAMTAB tpitinfo |
|
#define MI_TRSR_STREAMTAB trsrinfo |
|
#define MI_TRXR_STREAMTAB trxrinfo |
|
#define MI_UDP_STREAMTAB udpinfo |
|
#define MI_UDPM_STREAMTAB udpminfo |
|
#define MI_WELD_STREAMTAB mi_weldinfo |
|
#define MI_XDG_STREAMTAB xdginfo |
|
#define MI_XECHO_STREAMTAB xechoinfo |
|
#define MI_XF_STREAMTAB xfinfo |
|
#define MI_XFIPX_STREAMTAB xfipxinfo |
|
#define MI_XFXNS_STREAMTAB xfxnsinfo |
|
#define MI_XPE_STREAMTAB xpeinfo |
|
#define MI_XS_STREAMTAB xsinfo |
|
#define MI_XTINDG_STREAMTAB xtindginfo |
|
#define MI_XTINVC_STREAMTAB xtinvcinfo |
|
#define MI_XTM_STREAMTAB xtminfo |
|
#define MI_XTMIP_STREAMTAB xtmipinfo |
|
|
|
|
|
#define MI_AFU_DEVFLAG afudevflag |
|
#define MI_AHARP_DEVFLAG ahardevflag |
|
#define MI_AHENET_DEVFLAG ahendevflag |
|
#define MI_ARP_DEVFLAG arpdevflag |
|
#define MI_ARPM_DEVFLAG arpmdevflag |
|
#define MI_COURMUX_DEVFLAG courmuxdevflag |
|
#define MI_CLONE_DEVFLAG clonedevflag |
|
#define MI_DLB_DEVFLAG dlbdevflag |
|
#define MI_DLM_DEVFLAG dlmdevflag |
|
#define MI_DMODD_DEVFLAG dmodddevflag |
|
#define MI_DMODT_DEVFLAG dmodtdevflag |
|
#define MI_DN_DEVFLAG dndevflag |
|
#define MI_DNF_DEVFLAG dnfdevflag |
|
#define MI_DRVE_DEVFLAG drvedevflag |
|
#define MI_ECHO_DEVFLAG echodevflag |
|
#define MI_ENXR_DEVFLAG enxrdevflag |
|
#define MI_HAVOC_DEVFLAG hvcdevflag |
|
#define MI_HAVOCM_DEVFLAG hvcmdevflag |
|
#define MI_IP_DEVFLAG ipdevflag |
|
#define MI_IPM_DEVFLAG ipmdevflag |
|
#define MI_IPX_DEVFLAG ipxdevflag |
|
#define MI_LOG_DEVFLAG logdevflag |
|
#define MI_MODE_DEVFLAG modedevflag |
|
#define MI_MUX_DEVFLAG muxdevflag |
|
#define MI_NECHO_DEVFLAG nechodevflag |
|
#define MI_NPEP_DEVFLAG npepdevflag |
|
#define MI_NULS_DEVFLAG nulsdevflag |
|
#define MI_NULZ_DEVFLAG nulzdevflag |
|
#define MI_PASS_DEVFLAG passdevflag |
|
#define MI_PIPEMOD_DEVFLAG pipemoddevflag |
|
#define MI_RAWIP_DEVFLAG rawipdevflag |
|
#define MI_RAWIPM_DEVFLAG rawipmdevflag |
|
|
|
#define MI_SAD_DEVFLAG saddevflag |
|
#define MI_SC_DEVFLAG scdevflag |
|
#define MI_SOCKMOD_DEVFLAG sockmoddevflag |
|
#define MI_SPASS_DEVFLAG spassdevflag |
|
#define MI_SPX_DEVFLAG spxdevflag |
|
#define MI_TCP_DEVFLAG tcpdevflag |
|
#define MI_TCPM_DEVFLAG tcpmdevflag |
|
#define MI_TIMOD_DEVFLAG timoddevflag |
|
#define MI_TIRDWR_DEVFLAG tirdwrdevflag |
|
#define MI_TMOD_DEVFLAG tmoddevflag |
|
#define MI_TMUX_DEVFLAG tmuxdevflag |
|
#define MI_TPIT_DEVFLAG tpitdevflag |
|
#define MI_TRSR_DEVFLAG trsrdevflag |
|
#define MI_TRXR_DEVFLAG trxrdevflag |
|
#define MI_UDP_DEVFLAG udpdevflag |
|
#define MI_UDPM_DEVFLAG udpmdevflag |
|
#define MI_XDG_DEVFLAG xdgdevflag |
|
#define MI_XECHO_DEVFLAG xechodevflag |
|
#define MI_XF_DEVFLAG xfdevflag |
|
#define MI_XFIPX_DEVFLAG xfipxdevflag |
|
#define MI_XFXNS_DEVFLAG xfxnsdevflag |
|
#define MI_XPE_DEVFLAG xpedevflag |
|
#define MI_XS_DEVFLAG xsdevflag |
|
#define MI_XTINDG_DEVFLAG xtindgdevflag |
|
#define MI_XTINVC_DEVFLAG xtinvcdevflag |
|
#define MI_XTM_DEVFLAG xtmdevflag |
|
#define MI_XTMIP_DEVFLAG xtmipdevflag |
|
|
|
#define MI_AFU_SQLVL SQLVL_QUEUEPAIR |
|
#define MI_AHARP_SQLVL SQLVL_QUEUE |
|
#define MI_AHENET_SQLVL SQLVL_QUEUE |
|
#define MI_ARP_SQLVL SQLVL_MODULE |
|
#define MI_ARPM_SQLVL SQLVL_MODULE |
|
#define MI_COURMUX_SQLVL SQLVL_MODULE |
|
#define MI_CLONE_SQLVL SQLVL_MODULE |
|
#define MI_DLB_SQLVL SQLVL_QUEUE |
|
#define MI_DLM_SQLVL SQLVL_QUEUE |
|
#define MI_DMODD_SQLVL SQLVL_QUEUE |
|
#define MI_DMODT_SQLVL SQLVL_QUEUE |
|
#define MI_DN_SQLVL SQLVL_QUEUE |
|
#define MI_DNF_SQLVL SQLVL_QUEUE |
|
#define MI_DRVE_SQLVL SQLVL_QUEUEPAIR |
|
#define MI_ECHO_SQLVL SQLVL_QUEUE |
|
#define MI_ENXR_SQLVL SQLVL_QUEUE |
|
#define MI_RAWIP_SQLVL SQLVL_QUEUE |
|
#define MI_RAWIPM_SQLVL SQLVL_QUEUE |
|
#define MI_HAVOC_SQLVL SQLVL_QUEUE |
|
#define MI_HAVOCM_SQLVL SQLVL_QUEUE |
|
#define MI_IP_SQLVL SQLVL_QUEUEPAIR |
|
#define MI_IPM_SQLVL SQLVL_QUEUEPAIR |
|
#define MI_IPX_SQLVL SQLVL_QUEUE |
|
#define MI_LOG_SQLVL SQLVL_MODULE |
|
#define MI_MODE_SQLVL SQLVL_QUEUEPAIR |
|
#define MI_MUX_SQLVL SQLVL_MODULE |
|
#define MI_NECHO_SQLVL SQLVL_QUEUE |
|
|
|
#define MI_NPEP_SQLVL SQLVL_QUEUE |
|
#define MI_NULS_SQLVL SQLVL_QUEUE |
|
#define MI_NULZ_SQLVL SQLVL_QUEUE |
|
#define MI_PASS_SQLVL SQLVL_QUEUE |
|
#define MI_PIPEMOD_SQLVL SQLVL_QUEUE |
|
|
|
#define MI_SAD_SQLVL SQLVL_MODULE |
|
#define MI_SC_SQLVL SQLVL_QUEUE |
|
#define MI_SOCKMOD_SQLVL SQLVL_QUEUEPAIR |
|
#define MI_SPASS_SQLVL SQLVL_QUEUE |
|
#define MI_SPX_SQLVL SQLVL_QUEUE |
|
#define MI_TCP_SQLVL SQLVL_QUEUEPAIR |
|
#define MI_TCPM_SQLVL SQLVL_QUEUEPAIR |
|
#define MI_TIMOD_SQLVL SQLVL_QUEUEPAIR |
|
#define MI_TIRDWR_SQLVL SQLVL_QUEUE |
|
#define MI_TMOD_SQLVL SQLVL_QUEUEPAIR |
|
#define MI_TMUX_SQLVL SQLVL_MODULE |
|
#define MI_TPIT_SQLVL SQLVL_MODULE |
|
#define MI_TRSR_SQLVL SQLVL_MODULE |
|
#define MI_TRXR_SQLVL SQLVL_QUEUE |
|
#define MI_UDP_SQLVL SQLVL_QUEUE |
|
#define MI_UDPM_SQLVL SQLVL_QUEUE |
|
#define MI_XDG_SQLVL SQLVL_QUEUE |
|
#define MI_XECHO_SQLVL SQLVL_QUEUE |
|
#define MI_XF_SQLVL SQLVL_MODULE |
|
#define MI_XFIPX_SQLVL SQLVL_MODULE |
|
#define MI_XFXNS_SQLVL SQLVL_MODULE |
|
#define MI_XPE_SQLVL SQLVL_QUEUE |
|
#define MI_XS_SQLVL SQLVL_QUEUEPAIR |
|
#define MI_XTINDG_SQLVL SQLVL_QUEUEPAIR |
|
#define MI_XTINVC_SQLVL SQLVL_QUEUEPAIR |
|
#define MI_XTM_SQLVL SQLVL_QUEUEPAIR |
|
#define MI_XTMIP_SQLVL SQLVL_QUEUEPAIR |
|
/* ***** Raw Streams ******/ |
|
|
|
|
|
/* |
|
Flags used in the fType field of OTReadInfo for functions. |
|
I've removed the terse and confusing comments in this header |
|
file. For a full description, read "Open Transport Advanced |
|
Client Programming". |
|
*/ |
|
|
|
enum { |
|
kOTNoMessagesAvailable = (unsigned long)0xFFFFFFFF, |
|
kOTAnyMsgType = (unsigned long)0xFFFFFFFE, |
|
kOTDataMsgTypes = (unsigned long)0xFFFFFFFC, |
|
kOTMProtoMsgTypes = (unsigned long)0xFFFFFFFB, |
|
kOTOnlyMProtoMsgTypes = (unsigned long)0xFFFFFFFA |
|
}; |
|
|
|
#if !OTKERNEL |
|
/* StreamRef is an opaque reference to a raw stream.*/ |
|
|
|
typedef struct OpaqueStreamRef* StreamRef; |
|
#define kOTInvalidStreamRef ((StreamRef)0L) |
|
/* PollRef structure is used with the OTStreamPoll function.*/ |
|
struct PollRef { |
|
SInt32 filler; /* holds a file descriptor an a UNIX system, replaced by ref (at end of structure) under OT*/ |
|
SInt16 events; |
|
SInt16 revents; |
|
StreamRef ref; |
|
}; |
|
typedef struct PollRef PollRef; |
|
|
|
/* Poll masks for use with OTStreamPoll: */ |
|
|
|
#define POLLIN 0x001 /* A non-priority message is available */ |
|
#define POLLPRI 0x002 /* A high priority message is available */ |
|
#define POLLOUT 0x004 /* The stream is writable for non-priority messages */ |
|
#define POLLERR 0x008 /* A error message has arrived */ |
|
#define POLLHUP 0x010 /* A hangup has occurred */ |
|
#define POLLNVAL 0x020 /* This fd is bogus */ |
|
#define POLLRDNORM 0x040 /* A non-priority message is available */ |
|
#define POLLRDBAND 0x080 /* A priority message (band > 0) message is available */ |
|
#define POLLWRNORM 0x100 /* Same as POLLOUT */ |
|
#define POLLWRBAND 0x200 /* A priority band exists and is writable */ |
|
#define POLLMSG 0x400 /* A signal message has reached the front of the queue */ |
|
|
|
/* OTReadInfo structure is used with the various functions that read and peek at the stream head.*/ |
|
|
|
struct OTReadInfo { |
|
UInt32 fType; |
|
OTCommand fCommand; |
|
UInt32 fFiller; /* For compatibility with OT 1.0 and 1.1 */ |
|
ByteCount fBytes; |
|
OSStatus fError; |
|
}; |
|
typedef struct OTReadInfo OTReadInfo; |
|
/* Opening and closing raw streams*/ |
|
#if CALL_NOT_IN_CARBON |
|
/* |
|
* OTStreamOpen() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API( StreamRef ) |
|
OTStreamOpen( |
|
const char * name, |
|
OTOpenFlags oFlags, |
|
OSStatus * errPtr); |
|
|
|
|
|
/* |
|
* OTAsyncStreamOpen() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API( OSStatus ) |
|
OTAsyncStreamOpen( |
|
const char * name, |
|
OTOpenFlags oFlags, |
|
OTNotifyUPP proc, |
|
void * contextPtr); |
|
|
|
|
|
/* |
|
* OTCreateStream() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API( StreamRef ) |
|
OTCreateStream( |
|
OTConfigurationRef cfig, |
|
OTOpenFlags oFlags, |
|
OSStatus * errPtr); |
|
|
|
|
|
/* |
|
* OTAsyncCreateStream() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API( OSStatus ) |
|
OTAsyncCreateStream( |
|
OTConfigurationRef cfig, |
|
OTOpenFlags oFlags, |
|
OTNotifyUPP proc, |
|
void * contextPtr); |
|
|
|
|
|
/* |
|
* OTStreamClose() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API( OSStatus ) |
|
OTStreamClose(StreamRef strm); |
|
|
|
|
|
/* Polling a stream for activity*/ |
|
|
|
/* |
|
* OTStreamPoll() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API( OTResult ) |
|
OTStreamPoll( |
|
PollRef * fds, |
|
UInt32 nfds, |
|
OTTimeout timeout); |
|
|
|
|
|
/* |
|
* OTAsyncStreamPoll() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API( OTResult ) |
|
OTAsyncStreamPoll( |
|
PollRef * fds, |
|
UInt32 nfds, |
|
OTTimeout timeout, |
|
OTNotifyUPP proc, |
|
void * contextPtr); |
|
|
|
|
|
/* Classic UNIX file descriptor operations*/ |
|
|
|
/* |
|
* OTStreamRead() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API( OTResult ) |
|
OTStreamRead( |
|
StreamRef strm, |
|
void * buf, |
|
OTByteCount len); |
|
|
|
|
|
/* |
|
* OTStreamWrite() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API( OTResult ) |
|
OTStreamWrite( |
|
StreamRef strm, |
|
void * buf, |
|
OTByteCount len); |
|
|
|
|
|
/* |
|
* OTStreamIoctl() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API( OTResult ) |
|
OTStreamIoctl( |
|
StreamRef strm, |
|
UInt32 cmd, |
|
void * data); |
|
|
|
|
|
/* |
|
* OTStreamPipe() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API( OTResult ) |
|
OTStreamPipe(StreamRef streamsToPipe[]); |
|
|
|
|
|
/* there can be only 2!*/ |
|
/* Notifiers and modes of operation*/ |
|
/* |
|
* OTStreamInstallNotifier() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API( OSStatus ) |
|
OTStreamInstallNotifier( |
|
StreamRef strm, |
|
OTNotifyUPP proc, |
|
void * contextPtr); |
|
|
|
|
|
/* |
|
* OTStreamRemoveNotifier() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API( void ) |
|
OTStreamRemoveNotifier(StreamRef strm); |
|
|
|
|
|
/* |
|
* OTStreamUseSyncIdleEvents() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API( OSStatus ) |
|
OTStreamUseSyncIdleEvents( |
|
StreamRef strm, |
|
Boolean useEvents); |
|
|
|
|
|
/* |
|
* OTStreamSetBlocking() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API( void ) |
|
OTStreamSetBlocking(StreamRef strm); |
|
|
|
|
|
/* |
|
* OTStreamSetNonBlocking() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API( void ) |
|
OTStreamSetNonBlocking(StreamRef strm); |
|
|
|
|
|
/* |
|
* OTStreamIsBlocking() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API( Boolean ) |
|
OTStreamIsBlocking(StreamRef strm); |
|
|
|
|
|
/* |
|
* OTStreamSetSynchronous() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API( void ) |
|
OTStreamSetSynchronous(StreamRef strm); |
|
|
|
|
|
/* |
|
* OTStreamSetAsynchronous() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API( void ) |
|
OTStreamSetAsynchronous(StreamRef strm); |
|
|
|
|
|
/* |
|
* OTStreamIsSynchronous() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API( Boolean ) |
|
OTStreamIsSynchronous(StreamRef strm); |
|
|
|
|
|
/* STREAMS primitives*/ |
|
|
|
/* |
|
* OTStreamGetMessage() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API( OTResult ) |
|
OTStreamGetMessage( |
|
StreamRef strm, |
|
strbuf * ctlbuf, |
|
strbuf * databuf, |
|
OTFlags * flags); |
|
|
|
|
|
/* |
|
* OTStreamGetPriorityMessage() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API( OTResult ) |
|
OTStreamGetPriorityMessage( |
|
StreamRef strm, |
|
strbuf * ctlbuf, |
|
strbuf * databuf, |
|
OTBand * band, |
|
OTFlags * flags); |
|
|
|
|
|
/* |
|
* OTStreamPutMessage() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API( OSStatus ) |
|
OTStreamPutMessage( |
|
StreamRef strm, |
|
const strbuf * ctlbuf, |
|
const strbuf * databuf, |
|
OTFlags flags); |
|
|
|
|
|
/* |
|
* OTStreamPutPriorityMessage() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API( OSStatus ) |
|
OTStreamPutPriorityMessage( |
|
StreamRef strm, |
|
const strbuf * ctlbuf, |
|
const strbuf * databuf, |
|
OTBand band, |
|
OTFlags flags); |
|
|
|
|
|
/* Miscellaneous stuff*/ |
|
|
|
/* |
|
* OTStreamSetControlMask() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API( void ) |
|
OTStreamSetControlMask( |
|
StreamRef strm, |
|
UInt32 mask, |
|
Boolean setClear); |
|
|
|
|
|
/* |
|
Opening endpoints and mappers on a Stream - these calls are synchronous, and may |
|
only be used at System Task time. Once the stream has been installed into a provider |
|
or endpoint, you should not continue to use STREAMS APIs on it |
|
*/ |
|
|
|
/* |
|
* OTOpenProviderOnStream() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API( ProviderRef ) |
|
OTOpenProviderOnStream( |
|
StreamRef strm, |
|
OSStatus * errPtr); |
|
|
|
|
|
/* |
|
* OTOpenEndpointOnStream() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API( EndpointRef ) |
|
OTOpenEndpointOnStream( |
|
StreamRef strm, |
|
OSStatus * errPtr); |
|
|
|
|
|
/* |
|
To quote an earlier version of this header file: |
|
|
|
Some functions that should only be used if |
|
you really know what you're doing. |
|
*/ |
|
|
|
/* |
|
* OTRemoveStreamFromProvider() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API( StreamRef ) |
|
OTRemoveStreamFromProvider(ProviderRef ref); |
|
|
|
|
|
/* |
|
* OTPeekMessage() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API( OSStatus ) |
|
OTPeekMessage( |
|
StreamRef strm, |
|
OTReadInfo * readInfo); |
|
|
|
|
|
/* |
|
* OTReadMessage() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API( OTBuffer * ) |
|
OTReadMessage( |
|
StreamRef strm, |
|
OTReadInfo * readInfo); |
|
|
|
|
|
/* |
|
* OTPutBackBuffer() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API( void ) |
|
OTPutBackBuffer( |
|
StreamRef strm, |
|
OTBuffer * buffer); |
|
|
|
|
|
/* |
|
* OTPutBackPartialBuffer() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API( void ) |
|
OTPutBackPartialBuffer( |
|
StreamRef strm, |
|
OTBufferInfo * readInfo, |
|
OTBuffer * buffer); |
|
|
|
|
|
#endif /* CALL_NOT_IN_CARBON */ |
|
|
|
#endif /* !OTKERNEL */ |
|
|
|
#endif /* CALL_NOT_IN_CARBON */ |
|
|
|
/* ***** Port Utilities ******/ |
|
#if !OTKERNEL |
|
/* |
|
These types and routines are used during sophisticated |
|
port management. High-level clients may get involved |
|
for things like request a port to be yielding, but typically |
|
this stuff is used by protocol infrastructure. |
|
*/ |
|
/* |
|
OTPortCloseStruct is used when processing the kOTClosePortRequest |
|
and kOTYieldPortRequest events. |
|
*/ |
|
|
|
struct OTPortCloseStruct { |
|
OTPortRef fPortRef; /* The port requested to be closed.*/ |
|
ProviderRef fTheProvider; /* The provider using the port.*/ |
|
OSStatus fDenyReason; /* Set to a negative number to deny the request*/ |
|
}; |
|
typedef struct OTPortCloseStruct OTPortCloseStruct; |
|
/* OTClientList structure is used with the OTYieldPortRequest function.*/ |
|
struct OTClientList { |
|
ItemCount fNumClients; |
|
UInt8 fBuffer[4]; |
|
}; |
|
typedef struct OTClientList OTClientList; |
|
/* |
|
Returns a buffer containing all of the clients that refused to yield the port. |
|
"size" is the total number of bytes @ buffer, including the fNumClients field. |
|
*/ |
|
#if CALL_NOT_IN_CARBON |
|
/* |
|
* OTYieldPortRequest() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( OSStatus ) |
|
OTYieldPortRequest( |
|
ProviderRef ref, |
|
OTPortRef portRef, |
|
OTClientList * buffer, |
|
OTByteCount size); |
|
|
|
|
|
/* Send a notification to all Open Transport registered clients*/ |
|
/* |
|
* OTNotifyAllClients() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( void ) |
|
OTNotifyAllClients( |
|
OTEventCode code, |
|
OTResult result, |
|
void * cookie); |
|
|
|
|
|
/* Determine if "child" is a child port of "parent"*/ |
|
/* |
|
* OTIsDependentPort() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( Boolean ) |
|
OTIsDependentPort( |
|
OTPortRef parent, |
|
OTPortRef child); |
|
|
|
|
|
#endif /* CALL_NOT_IN_CARBON */ |
|
|
|
#endif /* !OTKERNEL */ |
|
|
|
/* ***** Timers ***** */ |
|
/* |
|
STREAMS plug-ins code should not use these timers, instead |
|
they should use timer messages, ie mi_timer etc. |
|
*/ |
|
|
|
#if !OTKERNEL |
|
|
|
typedef long OTTimerTask; |
|
/* |
|
Under Carbon, OTCreateTimerTask takes a client context pointer. Applications may pass NULL |
|
after calling InitOpenTransport(kInitOTForApplicationMask, ...). Non-applications must always pass a |
|
valid client context. |
|
*/ |
|
/* |
|
* OTCreateTimerTaskInContext() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: in CarbonLib 1.0 and later |
|
* Mac OS X: in version 10.0 and later |
|
*/ |
|
EXTERN_API( long ) |
|
OTCreateTimerTaskInContext( |
|
OTProcessUPP upp, |
|
void * arg, |
|
OTClientContextPtr clientContext); |
|
|
|
|
|
#if CALL_NOT_IN_CARBON |
|
/* |
|
* OTCreateTimerTask() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API( OTTimerTask ) |
|
OTCreateTimerTask( |
|
OTProcessUPP proc, |
|
void * arg); |
|
|
|
|
|
#endif /* CALL_NOT_IN_CARBON */ |
|
|
|
/* |
|
* OTCancelTimerTask() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: in CarbonLib 1.0 and later |
|
* Mac OS X: in version 10.0 and later |
|
*/ |
|
EXTERN_API( Boolean ) |
|
OTCancelTimerTask(OTTimerTask timerTask); |
|
|
|
|
|
/* |
|
* OTDestroyTimerTask() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: in CarbonLib 1.0 and later |
|
* Mac OS X: in version 10.0 and later |
|
*/ |
|
EXTERN_API( void ) |
|
OTDestroyTimerTask(OTTimerTask timerTask); |
|
|
|
|
|
/* |
|
* OTScheduleTimerTask() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: in CarbonLib 1.0 and later |
|
* Mac OS X: in version 10.0 and later |
|
*/ |
|
EXTERN_API( Boolean ) |
|
OTScheduleTimerTask( |
|
OTTimerTask timerTask, |
|
OTTimeout milliSeconds); |
|
|
|
|
|
#if OTCARBONAPPLICATION |
|
/* The following macro may be used by applications only.*/ |
|
#define OTCreateTimerTask(upp, arg) OTCreateTimerTaskInContext(upp, arg, NULL) |
|
#endif /* OTCARBONAPPLICATION */ |
|
|
|
#endif /* !OTKERNEL */ |
|
|
|
/* ***** Miscellaneous Helpful Functions ******/ |
|
|
|
#if !OTKERNEL |
|
/* |
|
These routines allow you to manipulate OT's buffer structures. |
|
If you use no-copy receives (described in "OpenTransport.h") |
|
you will need some of these routines, and may choose to use others. |
|
See "Open Tranport Advanced Client Programming" for documentation. |
|
*/ |
|
/* |
|
* OTBufferDataSize() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: in OTUtilityLib 1.0 and later |
|
* CarbonLib: in CarbonLib 1.0 and later |
|
* Mac OS X: in version 10.0 and later |
|
*/ |
|
EXTERN_API_C( OTByteCount ) |
|
OTBufferDataSize(OTBuffer * buffer); |
|
|
|
|
|
/* |
|
* OTReadBuffer() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: in OTUtilityLib 1.0 and later |
|
* CarbonLib: in CarbonLib 1.0 and later |
|
* Mac OS X: in version 10.0 and later |
|
*/ |
|
EXTERN_API_C( Boolean ) |
|
OTReadBuffer( |
|
OTBufferInfo * buffer, |
|
void * dest, |
|
OTByteCount * len); |
|
|
|
|
|
/* |
|
* OTReleaseBuffer() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: in OTUtilityLib 1.0 and later |
|
* CarbonLib: in CarbonLib 1.0 and later |
|
* Mac OS X: in version 10.0 and later |
|
*/ |
|
EXTERN_API_C( void ) |
|
OTReleaseBuffer(OTBuffer * buffer); |
|
|
|
|
|
|
|
#if CALL_NOT_IN_CARBON |
|
/* |
|
* StoreIntoNetbuf() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( Boolean ) |
|
StoreIntoNetbuf( |
|
TNetbuf * netBuf, |
|
void * source, |
|
SInt32 len); |
|
|
|
|
|
/* |
|
* StoreMsgIntoNetbuf() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( Boolean ) |
|
StoreMsgIntoNetbuf( |
|
TNetbuf * netBuf, |
|
OTBuffer * buffer); |
|
|
|
|
|
#endif /* CALL_NOT_IN_CARBON */ |
|
|
|
#endif /* !OTKERNEL */ |
|
|
|
/* ***** OTConfiguration ******/ |
|
#if CALL_NOT_IN_CARBON |
|
#if !OTKERNEL |
|
/* |
|
As promised in "OpenTransport.h", here are the routines |
|
for advanced operations on configurations. |
|
*/ |
|
/* Manipulating a configuration*/ |
|
|
|
#if CALL_NOT_IN_CARBON |
|
/* |
|
* OTCfigNewConfiguration() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( OTConfigurationRef ) |
|
OTCfigNewConfiguration(const char * path); |
|
|
|
|
|
/* |
|
* OTCfigDeleteConfiguration() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( void ) |
|
OTCfigDeleteConfiguration(OTConfigurationRef cfig); |
|
|
|
|
|
/* |
|
* OTCfigCloneConfiguration() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( OTConfigurationRef ) |
|
OTCfigCloneConfiguration(OTConfigurationRef cfig); |
|
|
|
|
|
/* |
|
* OTCfigPushNewSingleChild() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( OTConfigurationRef ) |
|
OTCfigPushNewSingleChild( |
|
OTConfigurationRef cfig, |
|
const char * path, |
|
OSStatus * errPtr); |
|
|
|
|
|
/* |
|
* OTCfigPushParent() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( OTConfigurationRef ) |
|
OTCfigPushParent( |
|
OTConfigurationRef cfig, |
|
const char * path, |
|
OSStatus * errPtr); |
|
|
|
|
|
/* |
|
* OTCfigPushChild() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( OTConfigurationRef ) |
|
OTCfigPushChild( |
|
OTConfigurationRef cfig, |
|
OTItemCount index, |
|
const char * path, |
|
OSStatus * errPtr); |
|
|
|
|
|
/* |
|
* OTCfigPopChild() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( OSStatus ) |
|
OTCfigPopChild( |
|
OTConfigurationRef cfig, |
|
OTItemCount index); |
|
|
|
|
|
/* |
|
* OTCfigGetChild() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( OTConfigurationRef ) |
|
OTCfigGetChild( |
|
OTConfigurationRef cfig, |
|
OTItemCount index); |
|
|
|
|
|
/* |
|
* OTCfigSetPath() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( OSStatus ) |
|
OTCfigSetPath( |
|
OTConfigurationRef cfig, |
|
const char * path); |
|
|
|
|
|
/* |
|
* OTCfigNewChild() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( OTConfigurationRef ) |
|
OTCfigNewChild( |
|
OTConfigurationRef cfig, |
|
const char * path, |
|
OSStatus * errPtr); |
|
|
|
|
|
/* |
|
* OTCfigAddChild() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( OSStatus ) |
|
OTCfigAddChild( |
|
OTConfigurationRef cfig, |
|
OTConfigurationRef child); |
|
|
|
|
|
/* |
|
* OTCfigRemoveChild() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( OTConfigurationRef ) |
|
OTCfigRemoveChild( |
|
OTConfigurationRef cfig, |
|
OTItemCount index); |
|
|
|
|
|
/* |
|
* OTCfigSetPortRef() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( void ) |
|
OTCfigSetPortRef( |
|
OTConfigurationRef cfig, |
|
OTPortRef portRef); |
|
|
|
|
|
/* |
|
* OTCfigChangeProviderName() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( void ) |
|
OTCfigChangeProviderName( |
|
OTConfigurationRef cfig, |
|
const char * name); |
|
|
|
|
|
/* Query a configuration*/ |
|
|
|
/* |
|
* OTCfigNumberOfChildren() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( UInt16 ) |
|
OTCfigNumberOfChildren(OTConfigurationRef cfig); |
|
|
|
|
|
/* |
|
* OTCfigGetParent() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( OTConfigurationRef ) |
|
OTCfigGetParent(OTConfigurationRef cfig); |
|
|
|
|
|
/* |
|
* OTCfigGetOptionNetbuf() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( TNetbuf * ) |
|
OTCfigGetOptionNetbuf(OTConfigurationRef cfig); |
|
|
|
|
|
/* |
|
* OTCfigGetPortRef() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( OTPortRef ) |
|
OTCfigGetPortRef(OTConfigurationRef cfig); |
|
|
|
|
|
/* |
|
* OTCfigGetInstallFlags() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( UInt32 ) |
|
OTCfigGetInstallFlags(OTConfigurationRef cfig); |
|
|
|
|
|
/* |
|
* OTCfigGetProviderName() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( const char * ) |
|
OTCfigGetProviderName(OTConfigurationRef cfig); |
|
|
|
|
|
/* |
|
* OTCfigIsPort() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( Boolean ) |
|
OTCfigIsPort(OTConfigurationRef cfig); |
|
|
|
|
|
#endif /* CALL_NOT_IN_CARBON */ |
|
|
|
#endif /* !OTKERNEL */ |
|
|
|
/* ***** Configurators ******/ |
|
/* |
|
The kOTConfiguratorInterfaceID define is what you need to add to your |
|
export file for the "interfaceID = " clause to export a configurator |
|
for ASLM. Similarly, kOTConfiguratorCFMTag is used for CFM-based |
|
configurators. |
|
*/ |
|
|
|
|
|
#define kOTConfiguratorInterfaceID kOTClientPrefix "cfigMkr" |
|
#define kOTConfiguratorCFMTag kOTClientPrefix "cfigMkr" |
|
|
|
#if !OTKERNEL |
|
#ifdef __cplusplus |
|
class TOTConfigurator; |
|
typedef class TOTConfigurator* TOTConfiguratorRef; |
|
#else |
|
typedef struct TOTConfigurator TOTConfigurator; |
|
typedef TOTConfigurator* TOTConfiguratorRef; |
|
#endif |
|
/* |
|
Typedef for the OTCanConfigure function, and the enum for which pass we're doing. |
|
The first (kOTSpecificConfigPass) is to give configurators a shot at the configuration |
|
before we start allowing the generic configurators to get into the act. |
|
*/ |
|
enum { |
|
kOTSpecificConfigPass = 0, |
|
kOTGenericConfigPass = 1 |
|
}; |
|
|
|
typedef CALLBACK_API_C( Boolean , OTCanConfigureProcPtr )(OTConfigurationRef cfig, UInt32 pass); |
|
/* Typedef for the function to create and return a configurator object*/ |
|
typedef CALLBACK_API_C( OSStatus , OTCreateConfiguratorProcPtr )(TOTConfiguratorRef * cfigor); |
|
/* |
|
Typedef for the "OTSetupConfigurator" function that your configurator library must export. |
|
The enum is for the type of configurator that it is. |
|
*/ |
|
#define kOTSetupConfiguratorID "OTSetupConfigurator" |
|
enum { |
|
kOTDefaultConfigurator = 0, |
|
kOTProtocolFamilyConfigurator = 1, |
|
kOTLinkDriverConfigurator = 2 |
|
}; |
|
|
|
typedef CALLBACK_API_C( OSStatus , OTSetupConfiguratorProcPtr )(OTCanConfigureProcPtr *canConfigure, OTCreateConfiguratorProcPtr *createConfigurator, UInt8 *configuratorType); |
|
/* |
|
Procedure pointer definitions for the three key callbacks associated |
|
with a configurator, as established by OTNewConfigurator. |
|
*/ |
|
typedef CALLBACK_API_C( OSStatus , OTCFConfigureProcPtr )(TOTConfiguratorRef cfigor, OTConfigurationRef cfig); |
|
typedef CALLBACK_API_C( OSStatus , OTCFCreateStreamProcPtr )(TOTConfiguratorRef cfigor, OTConfigurationRef cfig, OTOpenFlags oFlags, OTNotifyUPP proc, void *contextPtr); |
|
typedef CALLBACK_API_C( void , OTCFHandleSystemEventProcPtr )(TOTConfiguratorRef cfigor, OTEventCode code, OTResult result, void *cookie); |
|
/* |
|
Determine if this instance of your configurator is the "master" |
|
(the one that can create and destroy control streams) |
|
*/ |
|
#if CALL_NOT_IN_CARBON |
|
/* |
|
* OTIsMasterConfigurator() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( Boolean ) |
|
OTIsMasterConfigurator(TOTConfiguratorRef cfigor); |
|
|
|
|
|
/* Get back the userData you passed in to OTNewConfigurator*/ |
|
/* |
|
* OTGetConfiguratorUserData() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( void * ) |
|
OTGetConfiguratorUserData(TOTConfiguratorRef cfigor); |
|
|
|
|
|
/* Create a configurator object for use by Open Transport*/ |
|
/* |
|
* OTNewConfigurator() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( TOTConfiguratorRef ) |
|
OTNewConfigurator( |
|
void * userData, |
|
OTCFConfigureProcPtr configure, |
|
OTCFCreateStreamProcPtr createStream, |
|
OTCFHandleSystemEventProcPtr handleEvent); |
|
|
|
|
|
/* Delete a configurator object created by OTNewConfigurator*/ |
|
/* |
|
* OTDeleteConfigurator() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( void ) |
|
OTDeleteConfigurator(TOTConfiguratorRef cfigor); |
|
|
|
|
|
/* |
|
A utility function to send notifications to the user - it takes care of calls |
|
from deferred tasks |
|
*/ |
|
/* |
|
* OTNotifyUser() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( OSStatus ) |
|
OTNotifyUser( |
|
FSSpec * theFile, |
|
SInt32 rsrcID, |
|
OTItemCount index, |
|
char * parm1, |
|
char * parm2); |
|
|
|
|
|
/* Call when the configurator unloads from memory*/ |
|
/* |
|
* OTConfiguratorUnloaded() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( void ) |
|
OTConfiguratorUnloaded(TOTConfiguratorRef cfigor); |
|
|
|
|
|
/* |
|
Call to create your control stream if you're not the master |
|
configurator. You can also use the state machine function |
|
OTSMCreateControlStream(OTStateMachine*, OTConfigurationRef, TOTConfiguratorRef cfigor). |
|
*/ |
|
/* |
|
* OTCreateControlStream() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( OSStatus ) |
|
OTCreateControlStream( |
|
OTConfigurationRef cfig, |
|
TOTConfiguratorRef cfigor, |
|
OTNotifyUPP proc, |
|
void * contextPtr); |
|
|
|
|
|
/* |
|
A helpful function for the configurators to |
|
be able to recursively configure the children. |
|
*/ |
|
/* |
|
* OTConfigureChildren() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( OSStatus ) |
|
OTConfigureChildren(OTConfigurationRef cfig); |
|
|
|
|
|
/* Allocate a bit in the system-wide control mask for streams.*/ |
|
/* |
|
* OTNewControlMask() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( UInt32 ) |
|
OTNewControlMask(void); |
|
|
|
|
|
/* Warning: These 2 APIs is going away*/ |
|
/* |
|
* OTCloseProvidersByUseCount() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( void ) |
|
OTCloseProvidersByUseCount( |
|
SInt32 * useCount, |
|
OTResult reason, |
|
OTBooleanParam doneDeal); |
|
|
|
|
|
/* |
|
* OTCloseProvidersByPortRef() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( void ) |
|
OTCloseProvidersByPortRef( |
|
OTPortRef ref, |
|
OTResult reason, |
|
OTBooleanParam doneDeal); |
|
|
|
|
|
/* These are the "real" APIs*/ |
|
/* |
|
* OTCloseProviderByStream() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( void ) |
|
OTCloseProviderByStream( |
|
StreamRef ref, |
|
OTResult reason, |
|
OTBooleanParam doneDeal); |
|
|
|
|
|
/* |
|
* OTCloseMatchingProviders() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( void ) |
|
OTCloseMatchingProviders( |
|
UInt32 mask, |
|
OTPortRef port, |
|
OTResult reason, |
|
OTBooleanParam doneDeal); |
|
|
|
|
|
|
|
/* The following defines are for use in building an 'epcf' resource: */ |
|
|
|
/* Defines for fFlags field: */ |
|
#define kIsReliable 0x00000001 |
|
#define kIsNotReliable 0x00000002 |
|
#define kSupportsOrderlyRelease 0x00000004 |
|
|
|
/* Defines for fProtocolType field: */ |
|
#define kStream 0x0001 |
|
#define kUStream 0x0002 |
|
#define kTransaction 0x0004 |
|
#define kUTransaction 0x0008 |
|
#define kMapper 0x0010 |
|
#define kGenericProtocol 0x0020 |
|
|
|
/* Defines for optionType field: */ |
|
#define kBooleanOption 0 |
|
#define kUnsignedValueOption 1 |
|
#define kSignedValueOption 2 |
|
#define kHexValueOption 3 |
|
#define kPrintableStringOption 4 |
|
#define kOctetStringOption 5 |
|
|
|
/* Defines for fUpperInterface and fLowerInterface: */ |
|
#define kTPIInterface 'TPI ' |
|
#define kDLPIInterface 'DLPI' |
|
#define kMapperInterface 'MAPR' |
|
#define kPrivateInterface -1 |
|
#define kNoInterface 0 |
|
|
|
|
|
#endif /* CALL_NOT_IN_CARBON */ |
|
|
|
#endif /* !OTKERNEL */ |
|
|
|
#endif /* CALL_NOT_IN_CARBON */ |
|
|
|
/* ***** OTStateMachine ******/ |
|
#if CALL_NOT_IN_CARBON |
|
/* |
|
This utility set allows you to write an asynchronous chain of code that looks |
|
somewhat like it is synchronous. This is primarily used for plumbing |
|
streams asynchronously, especially in configurators |
|
*/ |
|
#if !OTKERNEL |
|
/* Alas, the state machine is only available to client code. Sorry.*/ |
|
|
|
/* |
|
There are 12 or 8 bytes of reserved space at the front of |
|
the OTStateMachine structure, depending on whether you're |
|
building PowerPC or 68K code.. The OTStateMachineDataPad |
|
type compensates for this. |
|
*/ |
|
|
|
#if TARGET_CPU_PPC |
|
typedef UInt8 OTStateMachineDataPad[12]; |
|
#else |
|
typedef UInt8 OTStateMachineDataPad[8]; |
|
#endif /* TARGET_CPU_PPC */ |
|
|
|
/* |
|
Forward define OTStateMachine so that OTStateProcPtr has |
|
access to it. |
|
*/ |
|
typedef struct OTStateMachine OTStateMachine; |
|
/* |
|
This type is is the required prototype of a state machine |
|
entry point. |
|
*/ |
|
typedef CALLBACK_API( void , OTStateProcPtr )(OTStateMachine * sm); |
|
/* |
|
This type defines a routine that the state machine will |
|
call when the top level completes. |
|
*/ |
|
typedef CALLBACK_API_C( void , OTSMCompleteProcPtr )(void * contextPtr); |
|
/* And now for the state machine structure itself.*/ |
|
struct OTStateMachine { |
|
OTStateMachineDataPad fData; |
|
void * fCookie; |
|
OTEventCode fCode; |
|
OTResult fResult; |
|
#ifdef __cplusplus |
|
|
|
// C++ inline methods on this structure. |
|
|
|
|
|
|
|
void* GetClientData(); |
|
|
|
Boolean CallStateProc(OTStateProcPtr proc, UInt32 state = 0); |
|
|
|
UInt16 GetState(); |
|
|
|
void SetState(UInt32 state); |
|
|
|
void Complete(); |
|
|
|
void Complete(OTResult result); |
|
|
|
void Complete(OTResult result, OTEventCode code, void* contextPtr); |
|
|
|
void CompleteToClient(); |
|
|
|
void CompleteToClient(OTResult result); |
|
|
|
void CompleteToClient(OTResult result, OTEventCode code, void* contexPtr); |
|
|
|
void PopCallback(); |
|
|
|
Boolean CreateStream(OTConfigurationRef cfig, OTOpenFlags flags); |
|
|
|
Boolean OpenStream(const char* name, OTOpenFlags flags); |
|
|
|
Boolean SendIoctl(StreamRef ref, UInt32 type, void* data); |
|
|
|
Boolean SendIoctl(StreamRef ref, UInt32 type, long data); |
|
|
|
Boolean PutMessage(StreamRef ref, strbuf* ctl, strbuf* data, OTFlags flags); |
|
|
|
Boolean GetMessage(StreamRef ref, strbuf* ctl, strbuf* data, OTFlags* flagPtr); |
|
|
|
OSStatus ReturnToCaller(); |
|
|
|
#endif |
|
|
|
}; |
|
|
|
#define kOTSMBufferSize(callDepth) (80 + (callDepth * 8)) |
|
/* |
|
For structSize, pass the size of your structure that you want associated with |
|
the state machine. It can later be obtained by calling OTSMGetClientData. |
|
For bufSize, use the kOTSMBufferSize macro, plus the size of your structure |
|
to create a buffer on the stack. For synchronous calls, the stack buffer will |
|
be used (unless you pass in NULL). The callDepth is the depth level of nested |
|
calls using OTSMCallStateProc. |
|
*/ |
|
#if CALL_NOT_IN_CARBON |
|
/* |
|
* OTCreateStateMachine() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( OTStateMachine * ) |
|
OTCreateStateMachine( |
|
void * buf, |
|
OTByteCount bufSize, |
|
OTByteCount structSize, |
|
OTNotifyUPP proc, |
|
void * contextPtr); |
|
|
|
|
|
/* |
|
* OTDestroyStateMachine() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( void ) |
|
OTDestroyStateMachine(OTStateMachine * sm); |
|
|
|
|
|
/* |
|
OTSMCallStateProc used to take a parameter of type UInt16_p, |
|
which was defined to be the same as UInt32. In an attempt |
|
to reduce the number of wacky types defined by the OT |
|
interfaces, we've changed these routines to just take a |
|
straight UInt32. You should be warned that the current |
|
implementation does not support values outside of the |
|
range 0..32767. The same applies to OTSMSetState. |
|
*/ |
|
|
|
/* |
|
* OTSMCallStateProc() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( Boolean ) |
|
OTSMCallStateProc( |
|
OTStateMachine * sm, |
|
OTStateProcPtr proc, |
|
UInt32 state); |
|
|
|
|
|
/* |
|
* OTSMGetState() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( UInt16 ) |
|
OTSMGetState(OTStateMachine * sm); |
|
|
|
|
|
/* |
|
* OTSMSetState() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( void ) |
|
OTSMSetState( |
|
OTStateMachine * sm, |
|
UInt32 state); |
|
|
|
|
|
/* Fill out the fCookie, fCode, and fResult fields before calling!*/ |
|
/* |
|
* OTSMComplete() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( void ) |
|
OTSMComplete(OTStateMachine * sm); |
|
|
|
|
|
/* |
|
* OTSMPopCallback() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( void ) |
|
OTSMPopCallback(OTStateMachine * sm); |
|
|
|
|
|
/* |
|
* OTSMWaitForComplete() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( Boolean ) |
|
OTSMWaitForComplete(OTStateMachine * sm); |
|
|
|
|
|
/* |
|
* OTSMCreateStream() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( Boolean ) |
|
OTSMCreateStream( |
|
OTStateMachine * sm, |
|
OTConfigurationRef cfig, |
|
OTOpenFlags flags); |
|
|
|
|
|
/* |
|
* OTSMOpenStream() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( Boolean ) |
|
OTSMOpenStream( |
|
OTStateMachine * sm, |
|
const char * name, |
|
OTOpenFlags flags); |
|
|
|
|
|
/* |
|
* OTSMIoctl() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( Boolean ) |
|
OTSMIoctl( |
|
OTStateMachine * sm, |
|
StreamRef strm, |
|
UInt32 cmd, |
|
long data); |
|
|
|
|
|
/* |
|
* OTSMPutMessage() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( Boolean ) |
|
OTSMPutMessage( |
|
OTStateMachine * sm, |
|
StreamRef strm, |
|
strbuf * ctlbuf, |
|
strbuf * databuf, |
|
OTFlags flags); |
|
|
|
|
|
/* |
|
* OTSMGetMessage() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( Boolean ) |
|
OTSMGetMessage( |
|
OTStateMachine * sm, |
|
StreamRef strm, |
|
strbuf * ctlbuf, |
|
strbuf * databuf, |
|
OTFlags * flagsPtr); |
|
|
|
|
|
/* |
|
* OTSMReturnToCaller() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( OSStatus ) |
|
OTSMReturnToCaller(OTStateMachine * sm); |
|
|
|
|
|
/* |
|
* OTSMGetClientData() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( void * ) |
|
OTSMGetClientData(OTStateMachine * sm); |
|
|
|
|
|
/* |
|
* OTSMInstallCompletionProc() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( void ) |
|
OTSMInstallCompletionProc( |
|
OTStateMachine * sm, |
|
OTSMCompleteProcPtr completeProc, |
|
void * contextPtr); |
|
|
|
|
|
/* |
|
* OTSMCreateControlStream() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( Boolean ) |
|
OTSMCreateControlStream( |
|
OTStateMachine * sm, |
|
OTConfigurationRef cfig, |
|
TOTConfiguratorRef cfigor); |
|
|
|
|
|
|
|
#ifdef __cplusplus |
|
inline void* OTStateMachine::GetClientData() { return OTSMGetClientData(this); } |
|
inline Boolean OTStateMachine::CallStateProc(OTStateProcPtr proc, UInt32 state) |
|
{ return OTSMCallStateProc(this, proc, state); } |
|
inline UInt16 OTStateMachine::GetState() { return OTSMGetState(this); } |
|
inline void OTStateMachine::SetState(UInt32 state) |
|
{ OTSMSetState(this, state); } |
|
inline void OTStateMachine::PopCallback() { OTSMPopCallback(this); } |
|
inline void OTStateMachine::Complete() { OTSMComplete(this); } |
|
inline void OTStateMachine::Complete(OTResult result, OTEventCode code, void* cookie) |
|
{ fCookie = cookie; fCode = code; fResult = result; Complete(); } |
|
inline void OTStateMachine::Complete(OTResult result) |
|
{ fResult = result; Complete(); } |
|
inline void OTStateMachine::CompleteToClient() |
|
{ PopCallback(); Complete(); } |
|
inline void OTStateMachine::CompleteToClient(OTResult result) |
|
{ fResult = result; CompleteToClient(); } |
|
|
|
inline void OTStateMachine::CompleteToClient(OTResult result, OTEventCode code, void* cookie) |
|
{ fCookie = cookie; fCode = code; fResult = result; CompleteToClient(); } |
|
inline Boolean OTStateMachine::CreateStream(OTConfigurationRef cfig, OTOpenFlags flags) |
|
{ return OTSMCreateStream(this, cfig, flags); } |
|
inline Boolean OTStateMachine::OpenStream(const char* name, OTOpenFlags flags) |
|
{ return OTSMOpenStream(this, name, flags); } |
|
inline Boolean OTStateMachine::SendIoctl(StreamRef ref, UInt32 type, void* data) |
|
{ return OTSMIoctl(this, ref, type, (long)data); } |
|
inline Boolean OTStateMachine::SendIoctl(StreamRef ref, UInt32 type, long data) |
|
{ return OTSMIoctl(this, ref, type, data); } |
|
inline Boolean OTStateMachine::PutMessage(StreamRef ref, struct strbuf* ctl, struct strbuf* data, OTFlags flags) |
|
{ return OTSMPutMessage(this, ref, ctl, data, flags); } |
|
inline Boolean OTStateMachine::GetMessage(StreamRef ref, struct strbuf* ctl, struct strbuf* data, OTFlags* flagPtr) |
|
{ return OTSMGetMessage(this, ref, ctl, data, flagPtr); } |
|
inline OSStatus OTStateMachine::ReturnToCaller() |
|
{ return OTSMReturnToCaller(this); } |
|
#endif |
|
|
|
#endif /* CALL_NOT_IN_CARBON */ |
|
|
|
#endif /* !OTKERNEL */ |
|
|
|
/* ***** Autopush Definitions ******/ |
|
/* |
|
The autopush functionality for Open Transport is based on the names of |
|
devices and modules, rather than on the major number information like |
|
SVR4. This is so that autopush information can be set up for modules |
|
that are not yet loaded. |
|
*/ |
|
|
|
|
|
/* The name of the STREAMS driver you open and send the ioctls to.*/ |
|
#define kSADModuleName "sad" |
|
/* Autopush ioctls.*/ |
|
enum { |
|
I_SAD_SAP = ((MIOC_SAD << 8) | 1), /* Set autopush information */ |
|
I_SAD_GAP = ((MIOC_SAD << 8) | 2), /* Get autopush information */ |
|
I_SAD_VML = ((MIOC_SAD << 8) | 3) /* Validate a list of modules (uses str_list structure) */ |
|
}; |
|
|
|
/* Maximum number of modules autopushed on a driver.*/ |
|
|
|
enum { |
|
kOTAutopushMax = 8 |
|
}; |
|
|
|
|
|
/* ioctl structure used for SAD_SAP and SAD_GAP commands.*/ |
|
|
|
struct OTAutopushInfo { |
|
UInt32 sap_cmd; |
|
char sap_device_name[32]; |
|
SInt32 sap_minor; |
|
SInt32 sap_lastminor; |
|
SInt32 sap_npush; |
|
char sap_list[8][32]; |
|
}; |
|
typedef struct OTAutopushInfo OTAutopushInfo; |
|
/* Command values for sap_cmd field of the above.*/ |
|
enum { |
|
kSAP_ONE = 1, /* Configure a single minor device */ |
|
kSAP_RANGE = 2, /* Configure a range of minor devices */ |
|
kSAP_ALL = 3, /* Configure all minor devices */ |
|
kSAP_CLEAR = 4 /* Clear autopush information */ |
|
}; |
|
|
|
|
|
/* ***** Configuration Helpers ******/ |
|
|
|
/* |
|
These definitions are used by device driver and port scanner |
|
developers to provide a library giving client-side information about |
|
the registered ports, such as a user-visible name or an icon. |
|
*/ |
|
|
|
/* Configuration helper library prefix*/ |
|
|
|
/* |
|
This prefix is prepended to the string found in the "fResourceInfo" |
|
field of the OTPortRecord to build the actual library name of the |
|
configuration helper library. |
|
*/ |
|
|
|
#define kPortConfigLibPrefix "OTPortCfg$" |
|
|
|
/* Get user visible port name entry point.*/ |
|
|
|
/* |
|
This entry point returns the user visible name of the port. If includeSlot |
|
is true, a slot distinguishing suffix (eg "slot X") should be added. If |
|
includePort is true, a port distinguishing suffix (eg " port X") should be added for |
|
multiport cards. |
|
*/ |
|
|
|
#define kOTGetUserPortNameID "OTGetUserPortName" |
|
typedef CALLBACK_API_C( void , OTGetPortNameProcPtr )(OTPortRecord *port, OTBooleanParam includeSlot, OTBooleanParam includePort, Str255 userVisibleName); |
|
/* Get icon entry point.*/ |
|
/* |
|
This entry point returns the location of the icon for the port. Return false if no |
|
icon is provided. |
|
*/ |
|
|
|
#define kOTGetPortIconID "OTGetPortIcon" |
|
struct OTResourceLocator { |
|
FSSpec fFile; |
|
UInt16 fResID; |
|
}; |
|
typedef struct OTResourceLocator OTResourceLocator; |
|
typedef CALLBACK_API_C( Boolean , OTGetPortIconProcPtr )(OTPortRecord *port, OTResourceLocator *iconLocation); |
|
/* ***** Application Access to Configuration Helpers ******/ |
|
|
|
#if !OTKERNEL |
|
/* |
|
These routines are used by clients to get information about ports. |
|
The canonical user of these routines is the OT control panel(s), |
|
but applications may want to use them as well (to display the list |
|
of available Ethernet cards, for example). |
|
*/ |
|
/* Returns a user friendly name for a port.*/ |
|
#if CALL_NOT_IN_CARBON |
|
/* |
|
* OTGetUserPortNameFromPortRef() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( void ) |
|
OTGetUserPortNameFromPortRef( |
|
OTPortRef ref, |
|
Str255 friendlyName); |
|
|
|
|
|
/* |
|
Returns the location for the icon familly representing the port. |
|
Returns false if the port has no icon. |
|
*/ |
|
/* |
|
* OTGetPortIconFromPortRef() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( Boolean ) |
|
OTGetPortIconFromPortRef( |
|
OTPortRef ref, |
|
OTResourceLocator * iconLocation); |
|
|
|
|
|
#endif /* CALL_NOT_IN_CARBON */ |
|
|
|
/* Returns true if the port can be used with the specified protocol.*/ |
|
#if CALL_NOT_IN_CARBON |
|
/* |
|
* OTIsPortCompatibleWith() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( Boolean ) |
|
OTIsPortCompatibleWith( |
|
const OTPortRecord * port, |
|
char * protocolName); |
|
|
|
|
|
#endif /* CALL_NOT_IN_CARBON */ |
|
|
|
#endif /* !OTKERNEL */ |
|
|
|
#endif /* CALL_NOT_IN_CARBON */ |
|
|
|
/* ***** Common Utilities ******/ |
|
/* |
|
The utilities defined in this section are available to both client |
|
and kernel code. Cool huh? These utilities differ from those |
|
provided in "OpenTransport.h" in that they are only available to native |
|
architecture clients. |
|
*/ |
|
|
|
/* Bitmap functions*/ |
|
|
|
/* These functions atomically deal with a bitmap that is multiple-bytes long*/ |
|
|
|
/* |
|
Set the first clear bit in "bitMap", starting with bit "startBit", |
|
giving up after "numBits". Returns the bit # that was set, or |
|
a kOTNotFoundErr if there was no clear bit available |
|
*/ |
|
/* |
|
* OTSetFirstClearBit() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: in OTUtilityLib 1.0 and later |
|
* CarbonLib: in CarbonLib 1.0 and later |
|
* Mac OS X: in version 10.0 and later |
|
*/ |
|
EXTERN_API_C( OTResult ) |
|
OTSetFirstClearBit( |
|
UInt8 * bitMap, |
|
OTByteCount startBit, |
|
OTByteCount numBits); |
|
|
|
|
|
/* Standard clear, set and test bit functions*/ |
|
/* |
|
* OTClearBit() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: in OTUtilityLib 1.0 and later |
|
* CarbonLib: in CarbonLib 1.0 and later |
|
* Mac OS X: in version 10.0 and later |
|
*/ |
|
EXTERN_API_C( Boolean ) |
|
OTClearBit( |
|
UInt8 * bitMap, |
|
OTByteCount bitNo); |
|
|
|
|
|
/* |
|
* OTSetBit() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: in OTUtilityLib 1.0 and later |
|
* CarbonLib: in CarbonLib 1.0 and later |
|
* Mac OS X: in version 10.0 and later |
|
*/ |
|
EXTERN_API_C( Boolean ) |
|
OTSetBit( |
|
UInt8 * bitMap, |
|
OTByteCount bitNo); |
|
|
|
|
|
/* |
|
* OTTestBit() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: in OTUtilityLib 1.0 and later |
|
* CarbonLib: in CarbonLib 1.0 and later |
|
* Mac OS X: in version 10.0 and later |
|
*/ |
|
EXTERN_API_C( Boolean ) |
|
OTTestBit( |
|
UInt8 * bitMap, |
|
OTByteCount bitNo); |
|
|
|
|
|
/* OTHashList*/ |
|
|
|
/* |
|
This implements a simple, but efficient hash list. It is not |
|
thread-safe. |
|
*/ |
|
|
|
typedef CALLBACK_API_C( UInt32 , OTHashProcPtr )(OTLink * linkToHash); |
|
typedef CALLBACK_API_C( Boolean , OTHashSearchProcPtr )(const void *ref, OTLink *linkToCheck); |
|
struct OTHashList { |
|
OTHashProcPtr fHashProc; |
|
ByteCount fHashTableSize; |
|
OTLink ** fHashBuckets; |
|
#ifdef __cplusplus |
|
|
|
// C++ inline methods on this structure. |
|
|
|
|
|
|
|
void Add(OTLink* toAdd); |
|
|
|
Boolean RemoveLink(OTLink* toRemove); |
|
|
|
OTLink* Remove(OTHashSearchProcPtr proc, const void* refPtr, UInt32 hashValue); |
|
|
|
Boolean IsInList(OTLink* toFind); |
|
|
|
OTLink* FindLink(OTHashSearchProcPtr proc, const void* refPtr, UInt32 hash); |
|
|
|
#endif |
|
|
|
}; |
|
typedef struct OTHashList OTHashList; |
|
/* |
|
Return the number of bytes of memory needed to create a hash list |
|
of at least "numEntries" entries. |
|
*/ |
|
#if CALL_NOT_IN_CARBON |
|
/* |
|
* OTCalculateHashListMemoryNeeds() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: in OTUtilityLib 1.0 and later |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( OTByteCount ) |
|
OTCalculateHashListMemoryNeeds(OTItemCount numEntries); |
|
|
|
|
|
/* |
|
Create an OTHashList from "memory". Return an error if it |
|
couldn't be done. |
|
*/ |
|
/* |
|
* OTInitHashList() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: in OTUtilityLib 1.0 and later |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( OTResult ) |
|
OTInitHashList( |
|
void * memory, |
|
OTByteCount numBytes, |
|
OTHashProcPtr hashProc); |
|
|
|
|
|
/* |
|
* OTAddToHashList() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: in OTUtilityLib 1.0 and later |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( void ) |
|
OTAddToHashList( |
|
OTHashList * hashList, |
|
OTLink * linkToAdd); |
|
|
|
|
|
/* |
|
* OTRemoveLinkFromHashList() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: in OTUtilityLib 1.0 and later |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( Boolean ) |
|
OTRemoveLinkFromHashList( |
|
OTHashList * hashList, |
|
OTLink * linkToRemove); |
|
|
|
|
|
/* |
|
* OTIsInHashList() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: in OTUtilityLib 1.0 and later |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( Boolean ) |
|
OTIsInHashList( |
|
OTHashList * hashList, |
|
OTLink * link); |
|
|
|
|
|
/* |
|
* OTFindInHashList() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: in OTUtilityLib 1.0 and later |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( OTLink * ) |
|
OTFindInHashList( |
|
OTHashList * hashList, |
|
OTHashSearchProcPtr searchProc, |
|
const void * refPtr, |
|
UInt32 hashValue); |
|
|
|
|
|
/* |
|
* OTRemoveFromHashList() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: in OTUtilityLib 1.0 and later |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( OTLink * ) |
|
OTRemoveFromHashList( |
|
OTHashList * hashList, |
|
OTHashSearchProcPtr searchProc, |
|
const void * refPtr, |
|
UInt32 hashValue); |
|
|
|
|
|
#endif /* CALL_NOT_IN_CARBON */ |
|
|
|
#ifdef __cplusplus |
|
#if CALL_NOT_IN_CARBON |
|
// C++ inline methods on this structure. |
|
|
|
inline void OTHashList::Add(OTLink* toAdd) { OTAddToHashList(this, toAdd); } |
|
|
|
inline Boolean OTHashList::RemoveLink(OTLink* toRemove) |
|
{ return OTRemoveLinkFromHashList(this, toRemove); } |
|
inline OTLink* OTHashList::Remove(OTHashSearchProcPtr proc, const void* refPtr, UInt32 hashValue) |
|
{ return OTRemoveFromHashList(this, proc, refPtr, hashValue); } |
|
inline Boolean OTHashList::IsInList(OTLink* toFind) |
|
{ return OTIsInHashList(this, toFind); } |
|
inline OTLink* OTHashList::FindLink(OTHashSearchProcPtr proc, const void* refPtr, UInt32 hash) |
|
{ return OTFindInHashList(this, proc, refPtr, hash); } |
|
#endif |
|
#endif |
|
/* Random functions*/ |
|
|
|
/* |
|
These implement a very simple random number generator, suitable |
|
for protocol implementations but not "cryptographically" random. |
|
*/ |
|
|
|
#if CALL_NOT_IN_CARBON |
|
/* |
|
* OTGetRandomSeed() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: in OTUtilityLib 1.0 and later |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( UInt32 ) |
|
OTGetRandomSeed(void); |
|
|
|
|
|
/* |
|
* OTGetRandomNumber() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: in OTUtilityLib 1.0 and later |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( UInt32 ) |
|
OTGetRandomNumber( |
|
UInt32 * seed, |
|
UInt32 lo, |
|
UInt32 hi); |
|
|
|
|
|
/* Concurrency Control*/ |
|
|
|
/* |
|
OTGate implements a cool concurrency control primitive. |
|
You're not going to understand it without reading the documentation! |
|
See "Open Transport Advanced Client Programming" for details. |
|
WARNING: |
|
This structure must be on a 4-byte boundary. |
|
*/ |
|
|
|
#endif /* CALL_NOT_IN_CARBON */ |
|
|
|
typedef CALLBACK_API_C( Boolean , OTGateProcPtr )(OTLink * thisLink); |
|
struct OTGate { |
|
OTLIFO fLIFO; |
|
OTList fList; |
|
OTGateProcPtr fProc; |
|
SInt32 fNumQueued; |
|
SInt32 fInside; |
|
}; |
|
typedef struct OTGate OTGate; |
|
#if CALL_NOT_IN_CARBON |
|
/* |
|
* OTInitGate() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: in OTUtilityLib 1.0 and later |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( void ) |
|
OTInitGate( |
|
OTGate * gate, |
|
OTGateProcPtr proc); |
|
|
|
|
|
/* |
|
* OTEnterGate() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: in OTUtilityLib 1.0 and later |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( Boolean ) |
|
OTEnterGate( |
|
OTGate * gate, |
|
OTLink * withLink); |
|
|
|
|
|
/* |
|
* OTLeaveGate() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: in OTUtilityLib 1.0 and later |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( Boolean ) |
|
OTLeaveGate(OTGate * gate); |
|
|
|
|
|
/* ***** Shared Library Bonus Extras ******/ |
|
|
|
#endif /* CALL_NOT_IN_CARBON */ |
|
|
|
#if CALL_NOT_IN_CARBON |
|
/* |
|
These routines provide addition shared library support beyond |
|
that provided by the base shared library mechanism. |
|
*/ |
|
/* |
|
Some flags which can be passed to the "loadFlags" parameter of the |
|
various CFM routines. Not all flags can be used with all routines. |
|
See "Open Transport Advanced Client Programming" for details. |
|
*/ |
|
|
|
enum { |
|
kOTGetDataSymbol = 0, |
|
kOTGetCodeSymbol = 1, |
|
kOTLoadNewCopy = 2, |
|
kOTLoadACopy = 4, |
|
kOTFindACopy = 8, |
|
kOTLibMask = kOTLoadNewCopy | kOTLoadACopy | kOTFindACopy, |
|
kOTLoadLibResident = 0x20 |
|
}; |
|
|
|
/* Finding all matching CFM libraries.*/ |
|
|
|
/* |
|
The routine OTFindCFMLibraries allows you to find all CFM libraries |
|
that match specific criteria. The result is placed in a list |
|
of CFMLibraryInfo structures. OT allocates those structures using |
|
a routine of type OTAllocMemProcPtr that you pass to OTFindCFMLibraries. |
|
*/ |
|
|
|
/* |
|
A list of CFMLibraryInfo structures is returned by the OTFindCFMLibraries routine. |
|
The list is created out of the data that is passed to the function. |
|
|
|
IMPORTANT: |
|
Only the first 3 fields are valid when using OT 1.2 and older. |
|
*/ |
|
|
|
struct CFMLibraryInfo { |
|
OTLink link; /* To link them all up on a list */ |
|
char * libName; /* "C" String which is fragment name */ |
|
StringPtr intlName; /* Pascal String which is internationalized name */ |
|
FSSpec * fileSpec; /* location of fragment's file */ |
|
StringPtr pstring2; /* Secondary string from extended cfrg */ |
|
StringPtr pstring3; /* Extra info from extended cfrg */ |
|
}; |
|
typedef struct CFMLibraryInfo CFMLibraryInfo; |
|
/* |
|
You must pass a routine of type OTAllocMemProcPtr to OTFindCFMLibraries |
|
which it calls to allocate memory for the CFMLibraryInfo structures. |
|
*/ |
|
typedef CALLBACK_API_C( void *, OTAllocMemProcPtr )(OTByteCount size); |
|
/* Find CFM libraries of the specified kind and type*/ |
|
#if CALL_NOT_IN_CARBON |
|
/* |
|
* OTFindCFMLibraries() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( OSStatus ) |
|
OTFindCFMLibraries( |
|
OSType libKind, |
|
const char * libType, |
|
OTList * theList, |
|
OTAllocMemProcPtr allocator); |
|
|
|
|
|
/* Loading libraries and connecting to symbols.*/ |
|
|
|
/* Load a CFM library by name*/ |
|
/* |
|
* OTLoadCFMLibrary() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( OSStatus ) |
|
OTLoadCFMLibrary( |
|
const char * libName, |
|
UInt32 * connID, |
|
UInt32 loadFlags); |
|
|
|
|
|
/* Load a CFM library and get a named pointer from it*/ |
|
/* |
|
* OTGetCFMPointer() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( void * ) |
|
OTGetCFMPointer( |
|
const char * libName, |
|
const char * entryName, |
|
UInt32 * connID, |
|
UInt32 loadFlags); |
|
|
|
|
|
/* Get a named pointer from a CFM library that's already loaded*/ |
|
/* |
|
* OTGetCFMSymbol() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( void * ) |
|
OTGetCFMSymbol( |
|
const char * entryName, |
|
UInt32 connID, |
|
UInt32 loadFlags); |
|
|
|
|
|
/* Release a connection to a CFM library*/ |
|
/* |
|
* OTReleaseCFMConnection() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( void ) |
|
OTReleaseCFMConnection(UInt32 * connID); |
|
|
|
|
|
#endif /* CALL_NOT_IN_CARBON */ |
|
|
|
#if !TARGET_CPU_68K |
|
/* |
|
You can call these routines in your CFM initialisation and termination |
|
routines to hold or unhold your libraries sections. |
|
*/ |
|
/* |
|
Used in a CFM InitProc, will hold the executable code, if applicable. |
|
This can also be the InitProc of the library |
|
*/ |
|
#if CALL_NOT_IN_CARBON |
|
/* |
|
* OTHoldThisCFMLibrary() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( OSStatus ) |
|
OTHoldThisCFMLibrary(const CFragInitBlock * initBlock); |
|
|
|
|
|
/* |
|
Used in a CFM terminate proc, will unhold the executable code, if applicable. |
|
This can also be the terminate proc of the library |
|
*/ |
|
/* |
|
* OTUnholdThisCFMLibrary() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( void ) |
|
OTUnholdThisCFMLibrary(void); |
|
|
|
|
|
#endif /* CALL_NOT_IN_CARBON */ |
|
|
|
#endif /* !TARGET_CPU_68K */ |
|
|
|
/* ASLM Utilities*/ |
|
/* Load an ASLM library*/ |
|
#if CALL_NOT_IN_CARBON |
|
/* |
|
* OTLoadASLMLibrary() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( OSStatus ) |
|
OTLoadASLMLibrary(const char * libName); |
|
|
|
|
|
/* Unload an ASLM library*/ |
|
/* |
|
* OTUnloadASLMLibrary() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( void ) |
|
OTUnloadASLMLibrary(const char * libName); |
|
|
|
|
|
/* |
|
This is an ASLM utility routine. You can get it by including |
|
"LibraryManagerUtilities.h", but since we only use a few ASLM utilities, |
|
we put the prototype here for convenience. |
|
*/ |
|
|
|
/* |
|
* UnloadUnusedLibraries() |
|
* |
|
* Availability: |
|
* Non-Carbon CFM: not available |
|
* CarbonLib: not available |
|
* Mac OS X: not available |
|
*/ |
|
EXTERN_API_C( void ) |
|
UnloadUnusedLibraries(void); |
|
|
|
|
|
|
|
#endif /* CALL_NOT_IN_CARBON */ |
|
|
|
#if !OTKERNEL |
|
/******************************************************************************* |
|
** A few C++ objects for C++ fans |
|
********************************************************************************/ |
|
#if CALL_NOT_IN_CARBON |
|
|
|
#ifdef __cplusplus |
|
} // Terminate C definitions |
|
|
|
class OTConfiguration |
|
{ |
|
public: |
|
OTConfigurationRef Clone() |
|
{ return OTCfigCloneConfiguration(this); } |
|
// |
|
// The Path for PushChild and PushParent must be a single module |
|
// |
|
OTConfigurationRef PushChild(const char* path, OSStatus* errPtr) |
|
{ return OTCfigPushNewSingleChild(this, path, errPtr); } |
|
OTConfigurationRef PushParent(const char* path, OSStatus* errPtr) |
|
{ return OTCfigPushParent(this, path, errPtr); } |
|
OTConfigurationRef PushNthChild(OTItemCount index, const char* path, |
|
OSStatus* errPtr) |
|
{ return OTCfigPushChild(this, index, path, errPtr); } |
|
OSStatus PopChild(OTItemCount index) |
|
{ return OTCfigPopChild(this, index); } |
|
|
|
OTConfigurationRef GetChild(OTItemCount index = 0) |
|
{ return OTCfigGetChild(this, index); } |
|
OTConfigurationRef GetParent() |
|
{ return OTCfigGetParent(this); } |
|
|
|
OSStatus AddChild(OTConfigurationRef child) |
|
{ return OTCfigAddChild(this, child); } |
|
|
|
OTConfigurationRef NewChild(const char* path, OSStatus* errPtr) |
|
{ return OTCfigNewChild(this, path, errPtr); } |
|
|
|
OSStatus SetPath(const char* path) |
|
{ return OTCfigSetPath(this, path); } |
|
|
|
Boolean HasOptions() |
|
{ return OTCfigGetOptionNetbuf(this)->len != 0; } |
|
}; |
|
|
|
/* ------------------------------------------------------------------------- |
|
Class TOTConfigurator |
|
|
|
This class is subclassed to do configuration for a protocol or protocol stack. |
|
Of course, you can also use OTNewConfigurator to do it from C. |
|
|
|
If you subclass it using C++, you MUST have a UInt32 field as the first |
|
field of your object that you do not touch or use. |
|
------------------------------------------------------------------------- */ |
|
|
|
#if TARGET_CPU_68K && !defined(__SC__) && !defined(THINK_CPLUS) |
|
class TOTConfigurator : public SingleObject |
|
#else |
|
class TOTConfigurator |
|
#endif |
|
{ |
|
#if defined(__SC__) || defined(THINK_CPLUS) || defined(__MRC__) |
|
private: |
|
virtual void DummyVirtualFunction(); |
|
#endif |
|
|
|
public: |
|
void* operator new(size_t size) |
|
{ return OTAllocSharedClientMem((OTByteCount)size); } |
|
void operator delete(void* mem) |
|
{ OTFreeSharedClientMem(mem); }; |
|
|
|
_MDECL TOTConfigurator(); |
|
virtual ~ _MDECL TOTConfigurator(); |
|
|
|
virtual void _MDECL HandleSystemEvent(OTEventCode event, OTResult result, |
|
void* cookie) = 0; |
|
|
|
virtual OSStatus _MDECL Configure(OTConfigurationRef) = 0; |
|
virtual OSStatus _MDECL CreateStream(OTConfigurationRef, OTOpenFlags, |
|
OTNotifyUPP, void* contextPtr) = 0; |
|
}; |
|
|
|
extern "C" { // resume C definitions |
|
#endif /*__cplusplus*/ |
|
|
|
#endif /* CALL_NOT_IN_CARBON */ |
|
#endif /* !OTKERNEL */ |
|
|
|
#endif /* CALL_NOT_IN_CARBON */ |
|
|
|
#if defined(__MWERKS__) && TARGET_CPU_68K |
|
#pragma pop |
|
#endif |
|
|
|
|
|
#if PRAGMA_STRUCT_ALIGN |
|
#pragma options align=reset |
|
#elif PRAGMA_STRUCT_PACKPUSH |
|
#pragma pack(pop) |
|
#elif PRAGMA_STRUCT_PACK |
|
#pragma pack() |
|
#endif |
|
|
|
#ifdef PRAGMA_IMPORT_OFF |
|
#pragma import off |
|
#elif PRAGMA_IMPORT |
|
#pragma import reset |
|
#endif |
|
|
|
#ifdef __cplusplus |
|
} |
|
#endif |
|
|
|
#endif /* __OPENTRANSPORTPROTOCOL__ */ |
|
|
|
|