--------N-7A--------------------------------- INT 7A - Novell NetWare - LOW-LEVEL API - Notes Note: this interrupt is used for IPX/SPX access in NetWare versions through 2.0a; in later versions, you should use INT 2F/AX=7A00h to get an entry point even though INT 7A still exists. For both INT 7A and the FAR entry point, BX contains the function number; IPX is sometimes called internally with BX bit 15 set, which causes the handler to bypass some initial checks and an optional call to the IPX Windows support handler set with INT 2F/AX=7AFFh/BX=0000h (see #1514) SeeAlso: INT 2F/AX=7A00h,INT 64"Novell",INT 7A/BX=0000h --------N-7A----BX0000----------------------- INT 7A - Novell NetWare - IPX Driver - OPEN SOCKET BX = 0000h AL = socket longevity 00h open until close or terminate FFh open until close DX = socket number (high byte in DL) 0000h dynamic allocation else socket to open (see #2212) Return: AL = return code 00h success DX = socket number FEh socket table full FFh socket already open Notes: TSRs which need to use sockets should set AL to FFh, non-resident programs should normally use AL=00h IPX can be configured to support up to 150 open sockets on a workstation, and defaults to 20 this function is supported by Advanced NetWare 1.02+ SeeAlso: INT 7A/BX=0001h,INT 7A/BX=0004h,INT 7A/BX=0023h (Table 2212) Values for IPX socket number: 0451h File Service (NetWare Core Protocol) 0452h Service Advertising Protocol 0453h Routing Information Packet 0455h NetBIOS Packet 0456h diagnostics 0457h server serial numbers (labeled "Copy Protection" by Lanalyzer) 4000h-7FFFh used for dynamic allocation 4444h Brightwork Development's SiteLock server 5555h Brightwork Development's SiteLock client (workstation) 8000h-FFFFh assigned by Novell Note: SiteLock is an application metering product using IPX to communicate between the application and the license server --------N-7A----BX0001----------------------- INT 7A - Novell NetWare - IPX Driver - CLOSE SOCKET BX = 0001h DX = socket number (high byte in DL) Notes: also cancels events set by any Event Control Blocks for the socket the program must close all open sockets before terminating this function is supported by Advanced NetWare 1.02+ SeeAlso: BX=0000h --------N-7A----BX0002----------------------- INT 7A - Novell NetWare - IPX Driver - GET LOCAL TARGET BX = 0002h ES:SI -> target internetwork address (see INT 7A/BX=000Bh) ES:DI -> 6-byte buffer for local target Return: AL = return code 00h success CX = expected one-way transfer time (clock ticks) for a 576-byte packet ES:DI -> local target FAh unsuccessful (no path to destination) Notes: the internetwork address consists of a 4-byte network address followed by a 6-byte node address. The local target is only a 6-byte node address. If the target is in the same network, the local target is just the node address of target; otherwise, the local target is the node address of the bridge that leads to the target. this function may be called from inside IPX and AES Event Service Routines, but not from other interrupt handlers this function is supported by Advanced NetWare 1.02+ SeeAlso: BX=0009h --------N-7A----BX0003----------------------- INT 7A - Novell NetWare - IPX Driver - SEND PACKET BX = 0003h ES:SI -> Event Control Block (see #2213,#2214) Notes: returns immediately; IPX attempts to send the packet in the background this function is supported by Advanced NetWare 1.02+ this function is nearly identical to BX=000Fh, except that it always copies the source address into the IPX header assumed to be at the beginning of the first fragment SeeAlso: BX=0004h,BX=000Fh,INT 21/AH=EEh"Novell" Format of IPX Event Control Block: Offset Size Description (Table 2213) 00h DWORD Link 04h DWORD -> Event Service Routine (00000000h if none) 08h BYTE in use flag (see #2215) 09h BYTE completion code (see #2216) 0Ah WORD (big-endian) socket number (see INT 7A/BX=0000h) 0Ch 4 BYTEs IPX workspace 10h 12 BYTEs driver workspace 1Ch 6 BYTEs immediate local node address 22h WORD fragment count 24h var fragment descriptors Offset Size Description 00h DWORD -> fragment data 04h WORD size of fragment in bytes. Notes: ESR is a far procedure that is called when the ECB has been handled. On call, the in use flag is zero if the ECB has been handled, non-zero otherwise. If the flag is zero, the completion code holds the result of the event. the first fragment should start with an IPX header all fragments are concatenated and sent in one piece node address FFh FFh FFh FFh FFh FFh broadcasts to all nodes Format of AES-ECB: Offset Size Description (Table 2214) 00h DWORD Link 04h DWORD ESR address 08h BYTE in use flag (see #2215) 09h 5 BYTEs AES workspace (Table 2215) Values for ECB in use flag: 00h available E0h AES temporary F6h \ special IPX/SPX processing for v3.02+ F7h / F8h IPX in critical section F9h SPX listening FAh processing FBh holding FCh AES waiting FDh AES couting down delay time FEh awaiting packet reception FFh sending packet (Table 2216) Values for ECB completion code: 00h success ECh remote terminated connection without acknowledging packet EDh abnormal connection termination EEh invalid connection ID EFh SPX connection table full F9h event should not be cancelled FAh cannot establish connection with specified destination FCh cancelled FDh malformed packet FEh packet undeliverable FFh physical error (Table 2217) Values event Service Routine is called with: AL = caller's identity (00h = AES, FFh = IPX) ES:SI -> event control block interrupts disabled Format of IPX header: Offset Size Description (Table 2218) 00h WORD (big-endian) checksum 02h WORD (big-endian) length in bytes of total packet 04h BYTE transport control 05h BYTE packet type (see #2219) 06h 10 BYTEs destination internetwork address 10h WORD (big-endian) destination socket 12h 10 BYTEs source internetwork address 1Ch WORD (big-endian) source socket (Table 2219) Values for IPX packet type: 00h unknown packet type 01h routing information packet 02h echo packet 03h error packet 04h packet exchange packet (always use this one) 05h SPX packet 11h NetWare Core Protocol 14h Propagated Packet (for NetWare), NetBIOS name packet 15h-1Eh experimental protocols Note: undocumented packet type 14h will cross up to 16 networks deep in all directions; as Aaron Martin of Origin Systems discovered, the first 64 bytes of the IPX data in such packets should be considered reserved, as IPX places the traversed server nodes there. Format of Service Advertising Protocol Service Query Packet: Offset Size Description (Table 2220) 00h 30 BYTEs IPX header 1Eh WORD (big-endian) query type 0001h general find service 0003h find nearest server 20h WORD (big-endian) server type (see INT 21/AH=E3h"NetWare") Format of Service Advertising Protocol Server Identification Packet: Offset Size Description (Table 2221) 00h 30 BYTEs IPX header 1Eh WORD (big-endian) response type 0002h general service 0004h nearest service 20h 64N BYTEs server entries (1-7) (see #2222) Format of SAP server entry: Offset Size Description (Table 2222) 00h WORD (big-endian) server type (see INT 21/AH=E3h"NetWare") 02h 48 BYTEs ASCIZ server name 32h 2 WORDs (big-endian) network number 34h 3 WORDs (big-endian) node number 3Ch WORD (big-endian) socket number 3Eh WORD (big-endian) number of hops between caller and server Format of IPX Routing Information packet: Offset Size Description (Table 2223) 00h 30 BYTEs IPX header 1Eh WORD operation (0001h request, 0002h response) 20h 8N BYTEs network entries (1-50) (see #2224) Format of RIP network entry: Offset Size Description (Table 2224) 00h DWORD network number (FFFFFFFFh = general request) 04h WORD (response) number of hops 06h WORD (response) number of clock ticks to reach destination --------N-7A----BX0004----------------------- INT 7A - Novell NetWare - IPX Driver - LISTEN FOR PACKET BX = 0004h ES:SI -> Event Control Block (see BX=0003h) Return: AL = status 00h successful FFh no listening socket for packet Desc: this function provides IPX with an ECB for receiving an IPX packet, but does not wait for a packet to arrive Notes: the application must open a socket and initialize the ECB's ESR address, socket number, fragment count, and fragment descriptor fields before invoking this function there is no limit on the number of ECBs which may simultaneously be listening on a socket this function is supported by Advanced NetWare 1.02+ SeeAlso: BX=0000h,BX=0003h --------N-7A----BX0005----------------------- INT 7A - Novell NetWare - IPX Driver - SCHEDULE IPX EVENT BX = 0005h AX = delay time in clock ticks ES:SI -> Event Control Block (see BX=0003h) Note: this function is supported by Advanced NetWare 1.02+ SeeAlso: BX=0006h,BX=0007h,BX=0008h --------N-7A----BX0006----------------------- INT 7A - Novell NetWare - IPX Driver - CANCEL EVENT BX = 0006h ES:SI -> Event Control Block (see BX=0003h) Return: AL = return code (see #2225) Notes: cannot cancel packets which the node's driver has already sent this function is supported by Advanced NetWare 1.02+ SeeAlso: BX=0005h (Table 2225) Values for IPX return code: 00h success F9h event in use FCh event cancelled FFh unsuccessful, event not in use, or unrecognized ECB flag --------N-7A----BX0007----------------------- INT 7A - Novell NetWare - IPX Driver - SCHEDULE SPECIAL EVENT BX = 0007h AX = delay time ES:SI -> Event Control Block (see BX=0003h) Note: this function is supported by Advanced NetWare 1.02+ SeeAlso: BX=0006h --------N-7A----BX0008----------------------- INT 7A - Novell NetWare - IPX Driver - GET INTERVAL MARKER BX = 0008h Return: AX = interval marker in clock ticks Notes: may be used to measure the time elapsed between two events, up to one hour this function is supported by Advanced NetWare 1.02+ SeeAlso: BX=0005h --------N-7A----BX0009----------------------- INT 7A - Novell NetWare - IPX Driver - GET INTERNETWORK ADDRESS BX = 0009h ES:SI -> buffer for own internetwork address (see #2226) Return: ES:SI buffer filled SI destroyed Note: this function is supported by Advanced NetWare 1.02+ SeeAlso: BX=0002h,BX=000Bh Format of IPX internetwork address: Offset Size Description (Table 2226) 00h 4 BYTEs (big-endian) network number 04h 6 BYTEs (big-endian) node number within network --------N-7A----BX000A----------------------- INT 7A - Novell NetWare - IPX Driver - RELINQUISH CONTROL BX = 000Ah Desc: this call indicates that the application is idle and permits the IPX driver to do some work Note: this function is supported by Advanced NetWare 1.02+ SeeAlso: INT 15/AX=1000h,INT 21/AH=89h,INT 2F/AX=1680h --------N-7A----BX000B----------------------- INT 7A - Novell NetWare - IPX Driver - DISCONNECT FROM TARGET BX = 000Bh ES:SI -> internetwork address (see #2227) Notes: this function permits the network software on the remote machine to remove any virtual connection with the calling machine only use in point-to-point networks should never be called from within an Event Service Routine this function is supported by Advanced NetWare 1.02+ SeeAlso: BX=0002h,BX=0009h Format of IPX internetwork address: Offset Size Description (Table 2227) 00h 4 BYTEs (big-endian) destination network 04h 6 BYTEs (big-endian) destination node 0Ah 2 BYTEs (big-endian) destination socket --------N-7A----BX000C----------------------- INT 7A U - Novell NetWare - IPX Driver - internal - INITIALIZE NETWORK ADDRESS BX = 000Ch CX:DX = global network address (see INT 7A/BX=0002h) ES:DI -> "OSINCRITICALSECTION" flag DS:SI -> current mode for socket Note: the address cannot be changed once it has been initialized SeeAlso: INT 7A/BX=0024h --------N-7A----BX000D----------------------- INT 7A U - Novell NetWare - IPX Driver - internal - IPX GET PACKET SIZE BX = 000Dh Return: AX = maximum packet size CX = retry count SeeAlso: BX=001Ah --------N-7A----BX000E----------------------- INT 7A U - Novell NetWare - IPX Driver - internal - TERMINATE SOCKETS BX = 000Eh Return: nothing Notes: this function terminates all sockets opened with the current mode; this may be intended for future enhancements as the socket mode never changes in v2.15 called by the NetWare shell if a program terminates --------N-7A----BX000F----------------------- INT 7A - Novell NetWare - IPX Driver - INTERNAL - SEND PACKET BX = 000Fh ES:SI -> Event Control Block (see BX=0003h) Note: nearly identical to function 0003h, but does not copy address into the first fragment, and bypasses normal error checking SeeAlso: BX=0003h --------N-7A----BX0010----------------------- INT 7A - Novell NetWare - SPX Driver - INSTALLATION CHECK BX = 0010h AL = 00h Return: AL = FFh if SPX loaded BH = SPX major version BL = SPX minor version CX = maximum SPX connections DX = SPX connections available Notes: this function is supported by Advanced NetWare 2.1+ this interrupt is used for IPX/SPX access in NetWare versions through 2.0a; in later versions, you should use INT 2F/AX=7A00h to get an entry point even though INT 7A still exists. For both INT 7A and the FAR entry point, BX contains the function number IPX is sometimes called internally with BX bit 15 set, which causes the entry point handler to bypass some checks and an optional call to the IPX Windows support handler set with INT 2F/AX=7AFFh/BX=0000h (see #1514) SeeAlso: BX=0015h --------N-7A----BX0011----------------------- INT 7A - Novell NetWare - SPX Driver - ESTABLISH SPX CONNECTION BX = 0011h AL = retry count AH = watchdog flag ES:SI -> Event Control Block (see BX=0003h) Return: AL = status (see #2228) DX = assigned connection ID number Desc: attempt to establish a connection with a listening socket Notes: there should always be at least two SPX ECB's listening to a socket, so that NetWare can perform its internal packet exchanges the first fragment should start with a SPX header. Fill in all destination addresses. this function is supported by Advanced NetWare 2.1+ SeeAlso: BX=0000h,BX=0012h,BX=0013h,BX=0014h,BX=0015h (Table 2228) Values for SPX function status: 00h attempting to contact destination socket EFh local connection table full FDh buffer size not 42 or fragment count not 1 FFh sending socket not open Format of SPX header: Offset Size Description (Table 2229) 00h WORD (big-endian) checksum 02h WORD (big-endian) length in bytes of total packet 04h BYTE transport control 05h BYTE packet type (see INT 7A/BX=0003h) 06h 10 BYTEs destination internet address 10h WORD (big-endian) destination socket 12h 10 BYTEs source internet address 1Ch WORD (big-endian) source socket 1Eh BYTE connection control (see #2230) 1Fh BYTE datastream type FEh terminate connection request packet FFh terminate connection acknowledgement packet other user-defined, ignored by SPX 20h WORD (big-endian) source connection ID 22h WORD (big-endian) destination connection ID 24h WORD (big-endian) sequence number 26h WORD (big-endian) acknowledge number 28h WORD (big-endian) allocation number Bitfields for SPX connection control: Bit(s) Description (Table 2230) 3-0 unused??? 4 end of message 5 reserved 6 acknowledgement required 7 system packet --------N-7A----BX0012----------------------- INT 7A - Novell NetWare - SPX Driver - LISTEN FOR SPX CONNECTION BX = 0012h AH = watchdog flag (00h disabled, 01h enabled) AL = retry count (00h = default) ES:SI -> Event Control Block (see BX=0003h) Notes: there should always be at least two SPX ECB's listening to a socket, so that NetWare can perform its internal packet exchanges this function is supported by Advanced NetWare 2.1+ SeeAlso: BX=0011h,BX=0013h,BX=0014h --------N-7A----BX0013----------------------- INT 7A - Novell NetWare - SPX Driver - TERMINATE SPX CONNECTION BX = 0013h DX = connection ID to terminate ES:SI -> Event Control Block (see BX=0003h) Note: this function is supported by Advanced NetWare 2.1+ SeeAlso: BX=0011h,BX=0012h,BX=0014h --------N-7A----BX0014----------------------- INT 7A - Novell NetWare - SPX Driver - ABORT SPX CONNECTION BX = 0014h DX = connection ID to terminate Notes: this function is supported by Advanced NetWare 2.1+ this function does not tell the other side that the connection has been terminated also aborts any outstanding Establish Connection, Terminate Connection, and Send Sequenced Packet commands SeeAlso: BX=0011h,BX=0013h --------N-7A----BX0015----------------------- INT 7A - Novell NetWare - SPX Driver - GET SPX CONNECTION STATUS BX = 0015h DX = connection ID ES:SI -> status buffer (see #2231) Return: AL = return code 00h connection still valid ES:SI -> status buffer filled EEh no such connection Note: this function is supported by Advanced NetWare 2.1+ SeeAlso: BX=0010h,BX=0011h Format of SPX status buffer: Offset Size Description (Table 2231) 00h BYTE connection state 01h waiting to establish connection 02h starting (attempting to create connection) 03h connection established 04h terminating 01h BYTE watchdog flag bit 0: used internally by SPX bit 1: SPX watchdog is monitoring connection bits 2-7 used internally by SPX 02h WORD (big-endian) source connection ID 04h WORD (big-endian) destination connection ID 06h WORD (big-endian) sequence number of next packet sent 08h WORD (big-endian) acknowledge number, expected sequence number of next received packet 0Ah WORD (big-endian) maximum sequence number remote SPX may send without ACK from local SPX 0Ch WORD (big-endian) remote acknowledge number, next sequence number remote SPX expects to receive 0Eh WORD (big-endian) remote allocation number, maximum sequence number local SPX may send 10h WORD (big-endian) connection socket 12h 6 BYTEs immediate node address--bridge on local network to destination 18h 10 BYTEs destination internetwork address (see INT 7A/BX=000Bh) 22h WORD (big-endian) retransmit count 24h WORD (big-endian) estimated roundtrip delay 26h WORD (big-endian) retransmitted packets 28h WORD (big-endian) suppressed packets 2Ah 12 BYTEs ??? (v2.15) --------N-7A----BX0016----------------------- INT 7A - Novell NetWare - SPX Driver - SEND SPX PACKET BX = 0016h DX = connection ID ES:SI -> Event Control Block (see BX=0003h) Notes: this function is supported by Advanced NetWare 2.1+ CX may need to be 0001h ??? SeeAlso: BX=0011h,BX=0017h --------N-7A----BX0017----------------------- INT 7A - Novell NetWare - SPX Driver - LISTEN FOR SPX PACKET BX = 0017h DX = connection ID (unused in v2.15) ES:SI -> Event Control Block (see BX=0003h) Notes: this function is supported by Advanced NetWare 2.1+ CX may need to be 0001h ??? SeeAlso: BX=0011h,BX=0016h --------N-7A----BX0018----------------------- INT 7A U - Novell NetWare - IPX Driver - internal - ADD DIAGNOSTIC ELEMENT BX = 0018h ES:SI -> diagnostic element (see #2232) to be added to Diagnostic Queue Note: this function is supported on file servers only under v2.15; v3.02 also supports it on workstations SeeAlso: BX=0019h Format of IPX diagnostic element: Offset Size Description (Table 2232) 00h DWORD pointer to next diagnostic element 04h DWORD pointer to function for ??? 08h DWORD pointer to function for ??? --------N-7A----BX0019----------------------- INT 7A U - Novell NetWare - IPX Driver - internal - CANCEL DIAGNOSTIC ELEMENT BX = 0019h ES:SI -> diagnostic element (see BX=0018h) to be removed Note: this function is supported on file servers only under v2.15; v3.02 also supports it on workstations SeeAlso: BX=0018h --------N-7A----BX001A----------------------- INT 7A - Novell NetWare - IPX Driver - internal - GET DRIVER PACKT SIZE LIMIT BX = 001Ah Return: AX = packet size with preamble CX = IPX retry count Note: this function is has existed since November 1989; it is documented in Novell document FYI.A.3709, 03May91 SeeAlso: BX=000Dh --------N-7A----BX001B----------------------- INT 7A U - Novell NetWare - IPX Driver - INTERNAL BX = 001Bh ??? Return: ??? Notes: this function is supported on file servers only under v2.15; v3.02 also supports it on workstations used by NetWare Access Server --------N-7A----BX001C----------------------- INT 7A U - Novell NetWare - NetWare Access Server - ??? BX = 001Ch to 001Eh ??? Return: ??? BX corrupted Notes: these functions are NOPs for standard IPX drivers such as IPXODI v2.12 SeeAlso: INT 2F/AX=7AF1h --------N-7A----BX001F----------------------- INT 7A - Novell NetWare - IPXODI v2.12+ - GET IPX FLAGS BX = 001Fh DX = 0000h Return: AX = ??? BX:CX -> ??? entry point (see #2233) DX = flags bit 0: IPXODI rather than dedicated IPX bit 1: checksumming functions 0020h-0022h supported ES:SI -> array of words containing used socket number (undocumented); 0000h ends array Note: IPXODI v2.12 is distributed as part of the Personal NetWare system bundled with Novell DOS 7 SeeAlso: BX=0020h,INT 2F/AX=7A2Fh (Table 2233) Call IPXODI entry point with: ES:SI -> ??? data (offset 24h is far pointer to ??? data) --------N-7A----BX0020----------------------- INT 7A - Novell NetWare - IPXODI v2.12+ - SEND WITH CHECKSUM BX = 0020h ES:SI -> ECB data (see #2234) Return: DS preserved BX,BP corrupted SeeAlso: BX=001Fh,BX=0021h,BX=0022h,INT 2F/AX=7A2Fh Format of ECB data: Offset Size Description (Table 2234) 00h 8 BYTEs ??? 08h BYTE (return) ??? 09h BYTE (return) ??? 0Ah WORD ??? 0Ch 16 BYTEs ??? 1Ch 3 WORDs ??? 22h WORD number of records at offset 28h 24h DWORD -> ??? 28h 6N BYTEs ??? records --------N-7A----BX0021----------------------- INT 7A - Novell NetWare - IPXODI v2.12+ - IPX GENERATE CHECKSUM BX = 0021h ES:SI -> ECB data (see #2234) Return: ES,DS,SI preserved BX,BP corrupted Notes: the checksum and TransportControl fields of the IPX packet are updated this function enables interrupts and is fully reentrant SeeAlso: BX=001Fh,BX=0020h,BX=0022h,INT 2F/AX=7A2Fh --------N-7A----BX0022----------------------- INT 7A - Novell NetWare - IPXODI v2.12+ - IPX VERIFY CHECKSUM BX = 0022h ES:SI -> ECB data (see #2234) Return: AX = status (0000h checksum matches) DS,ES,SI preserved BX,BP corrupted Note: this function enables interrupts and is fully reentrant SeeAlso: BX=001Fh,BX=0020h,BX=0021h,INT 2F/AX=7A2Fh --------N-7A----BX0023----------------------- INT 7A - Novell NetWare - IPXODI v2.12+ - OPEN LOOK-AHEAD SOCKET BX = 0023h AL = ??? DX = socket number ES:SI -> Look Ahead handler (see #2235) Return: AL = 00h if successful BX corrupted Notes: the socket will always be long-lived, and must thus be explicitly closed with INT 7A/BX=0001h before the Look Ahead handler code is removed from memory (i.e. the program terminates) this function is only supported if INT 2F/AX=7A00h returns ES:BX pointing at an IPX version greater than 3.30 SeeAlso: INT 7A/BX=0000h,INT 7A/BX=0001h (Table 2235) Call IPX Look-Ahead handler with: AX = socket DS:SI -> look-ahead structure (see #1583 at INT 2F/AX=C000h"LSL") DF clear interrupt disabled (must remain disabled) Return: AX = packet use 0000h application want packet ES:SI -> ODI ECB (see #1584 at INT 2F/AX=C000h"LSL") 8001h application does not want packet ZF set if AX=0000h DS,DI,BP,SS,SP preserved --------N-7A----BX0024----------------------- INT 7A U - Novell NetWare - IPXODI v2.20+ - SET INTERNETWORK ADDRESS BX = 0024h ES:SI -> buffer containing internetwork address (see #2227) Return: BX,CX,SI,DI,ES destroyed Note: this function differs from INT 7A/BX=000Ch in that it unconditionally sets the address SeeAlso: INT 7A/BX=000Ch