mirror of https://github.com/lianthony/NT4.0
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.
211 lines
4.9 KiB
211 lines
4.9 KiB
|
|
/*[
|
|
* Product: SoftPC-AT Revision 3.0
|
|
* Name: ipx.h
|
|
* Derived From: Original
|
|
* Author: Jase
|
|
* Created On: Oct 6 1992
|
|
* Sccs ID: 12/11/92 @(#)ipx.h 1.5
|
|
* Purpose: Base defines & typedefs for IPX implementations.
|
|
*
|
|
* (c)Copyright Insignia Solutions Ltd., 1990. All rights reserved.
|
|
*
|
|
* Rcs ID:
|
|
* $Source: /masterNeXT3.0/host/inc/RCS/next_novell.h,v $
|
|
* $Revision: 1.2 $
|
|
* $Date: 92/10/15 14:37:48 $
|
|
* $Author: jason $
|
|
]*/
|
|
|
|
/* DEFINES */
|
|
|
|
/* IPX device file */
|
|
#define sIPXDevice "/dev/ipx"
|
|
|
|
/* IPX function selector codes */
|
|
#define kIPXOpenSocket 0x00
|
|
#define kIPXCloseSocket 0x01
|
|
#define kIPXGetLocalTarget 0x02
|
|
#define kIPXSendPacket 0x03
|
|
#define kIPXListenForPacket 0x04
|
|
#define kIPXScheduleEvent 0x05
|
|
#define kIPXCancelEvent 0x06
|
|
/* note missing 0x07 selector */
|
|
#define kIPXGetIntervalMarker 0x08
|
|
#define kIPXGetInternetAddress 0x09
|
|
#define kIPXRelinquishControl 0x0a
|
|
#define kIPXDisconnectFromTarget 0x0b
|
|
|
|
/* SPX function selector codes */
|
|
#define kSPXInitialize 0x10
|
|
#define kSPXEstablishConnection 0x11
|
|
#define kSPXListenForConnection 0x12
|
|
#define kSPXTerminateConnection 0x13
|
|
#define kSPXAbortConnection 0x14
|
|
#define kSPXGetConnectionStatus 0x15
|
|
#define kSPXSendSequencedPacket 0x16
|
|
#define kSPXListenForSequencedPacket 0x17
|
|
|
|
/* selector code bounds */
|
|
#define kMinSelector 0x00
|
|
#define kMaxSelector 0x17
|
|
|
|
/* in-use codes */
|
|
#define kAvailable 0x00
|
|
#define kCounting 0xfd
|
|
#define kListening 0xfe
|
|
#define kSending 0xff
|
|
|
|
/* completion codes */
|
|
#define kSuccess 0x00
|
|
#define kWatchdogTerminate 0xed
|
|
#define kNoPathFound 0xfa
|
|
#define kEventCancelled 0xfc
|
|
#define kPacketOverflow 0xfd
|
|
#define kSocketTableFull 0xfe
|
|
#define kNotInUse 0xff
|
|
#define kSocketAlreadyOpen 0xff
|
|
#define kNoSuchSocket 0xff
|
|
|
|
/* number of open sockets we support */
|
|
/* currently at IPX maximum */
|
|
#define kMaxOpenSockets 150
|
|
|
|
/* maximum size of IPX packet */
|
|
#define kMaxPacketSize 576
|
|
|
|
/* packet buffer size */
|
|
#define kPacketBufferSize 1536
|
|
|
|
/* maximum NCP data size - for IPXGetBufferSize function */
|
|
#define kMaxNCPDataSize 1024
|
|
|
|
/* size of IPX header */
|
|
#define kHeaderSize 30
|
|
|
|
/* event types */
|
|
#define kNoEvent 0
|
|
#define kIPXEvent 1
|
|
#define kAESEvent 2
|
|
|
|
/********************************************************/
|
|
|
|
/* TYPEDEFS */
|
|
|
|
/* IPX structures */
|
|
|
|
typedef struct
|
|
{
|
|
USHORT packetChecksum;
|
|
USHORT packetLength;
|
|
UTINY packetControl;
|
|
UTINY packetType;
|
|
UTINY packetDestNet [4];
|
|
UTINY packetDestNode [6];
|
|
UTINY packetDestSock [2];
|
|
UTINY packetSrcNet [4];
|
|
UTINY packetSrcNode [6];
|
|
UTINY packetSrcSock [2];
|
|
|
|
} IPXHeaderRec;
|
|
|
|
typedef struct
|
|
{
|
|
UTINY net [4];
|
|
UTINY node [6];
|
|
UTINY sock [2];
|
|
|
|
} IPXAddressRec;
|
|
|
|
/* DOS ECB record (from NetWare DOS Programmers Guide) */
|
|
typedef struct ECB
|
|
{
|
|
sys_addr ecbLinkAddress;
|
|
UTINY ecbESRAddress [4];
|
|
UTINY ecbInUseFlag;
|
|
UTINY ecbCompletionCode;
|
|
USHORT ecbSocketNumber;
|
|
UTINY ecbIPXWorkspace [4];
|
|
UTINY ecbDriverWorkspace [12];
|
|
UTINY ecbImmediateAddress [6];
|
|
USHORT ecbFragmentCount;
|
|
UTINY ecbFragmentAddress1 [4];
|
|
USHORT ecbFragmentSize1;
|
|
UTINY ecbFragmentAddress2 [4];
|
|
USHORT ecbFragmentSize2;
|
|
|
|
} ECBRec;
|
|
|
|
/* host IPX implementation structures */
|
|
|
|
typedef struct
|
|
{
|
|
int socketFD;
|
|
USHORT socketNumber;
|
|
BOOL socketTransient;
|
|
|
|
} SocketRec;
|
|
|
|
/* linked-list of IPX or AES events */
|
|
typedef struct Event
|
|
{
|
|
struct Event *eventNext;
|
|
struct Event *eventPrev;
|
|
UTINY eventType;
|
|
sys_addr eventECB;
|
|
SocketRec *eventSocket;
|
|
USHORT eventClock;
|
|
|
|
} EventRec;
|
|
|
|
typedef struct
|
|
{
|
|
BOOL ipxInitialised;
|
|
USHORT ipxSelector;
|
|
USHORT ipxClock;
|
|
UTINY ipxNetwork [4];
|
|
UTINY ipxNode [6];
|
|
UTINY ipxBuffer [kPacketBufferSize];
|
|
SocketRec ipxSockets [kMaxOpenSockets];
|
|
EventRec *ipxQueue;
|
|
EventRec *ipxEvent;
|
|
|
|
} IPXGlobalRec;
|
|
|
|
/********************************************************/
|
|
|
|
/* PROTOTYPES */
|
|
|
|
/* imports */
|
|
|
|
/* dispatchers */
|
|
IMPORT VOID IPXBop IPT0 ();
|
|
IMPORT VOID IPXHost IPT0 ();
|
|
|
|
/* host interface stuff */
|
|
IMPORT BOOL host_ipx_init IPT0 ();
|
|
|
|
IMPORT VOID host_ipx_tick IPT0 ();
|
|
|
|
IMPORT VOID host_ipx_raise_exception IPT0 ();
|
|
|
|
IMPORT BOOL host_ipx_open_socket IPT1 (SocketRec *, socket);
|
|
IMPORT VOID host_ipx_close_socket IPT1 (SocketRec *, socket);
|
|
|
|
IMPORT VOID host_ipx_send_packet IPT1 (SocketRec *, socket);
|
|
IMPORT BOOL host_ipx_poll_socket IPT1 (SocketRec *, socket);
|
|
|
|
IMPORT VOID host_ipx_load_packet IPT2
|
|
(SocketRec *, socket, sys_addr, ecbAddress);
|
|
IMPORT BOOL host_ipx_save_packet IPT2
|
|
(SocketRec *, socket, sys_addr, ecbAddress);
|
|
|
|
IMPORT BOOL host_ipx_rip_query IPT1 (IPXAddressRec *, ipxAddr);
|
|
|
|
/* base stuff accessed from host */
|
|
|
|
IMPORT EventRec *FindEvent IPT3
|
|
(UTINY, linkType, sys_addr, ecbAddress, SocketRec *, linkSocket);
|
|
|
|
/********************************************************/
|
|
|