Network‎ > ‎Protocol‎ > ‎


IPX (Internetwork Packet Exchange) and SPX (Sequenced Packet Exchange) are networking protocols used by Novell NetWare. IPX is similar to IP and SPX is similar to TCP. IPX/SPX is mostly used for LAN.

Network Address
The complete address to a target is made up of the Node address, the network number and the socket number. The node address is the MAC address of the target node. The human-friendly form is six groups of hexadecimal digits, separated by hyphens. Ex 11-22-33-44-55-66.

Immediate Address

IPX Header
The IPX header is 30 bytes long and the packet can then contain 546 bytes of data. To send a packet some fields need to be filled in and some fields will be filled in by IPX. In comments application set field start with App and Ipx/Spx set fields start with IPX.

int16_t       CheckSum                // Ipx. Set to 0xFFFF.
int16_t       Length                  // Ipx. Total packet length (inc header).
int8_t        TransportControl        // Ipx.
int8_t        PacketType              // App. 4 for Ipx, 5 for Spx.
int8_t        DestinationNetwork[4]   // App. Set field to network nr of target. 0 = Same network as source.
int8_t        DesitnationNode[6]      // App. Set to node address of target
int16_t       DestinationSocket       // App. Set to socket id of target socket.
int8_t        SourceNetwork[4]        // Ipx
int8_t        SourceNode[6]           // Ipx
int16_t       SourceSocket            // Ipx

SPX Header
The SPX header has a total size of 42 bytes and the first 30 is the IPX header.

int8_t        IPXHeader[30];
int8_t        ConnectionControl           // App. Bit field
int8_t        DataStreamType              // Ipx
int16_t       SourceConnectionId          // Ipx
int16_t       DestinationConnectionId     // Ipx
int16_t       SequenceNumber              // Ipx
int16_t       AcknowledgeNumber           // Ipx.
int16_t       AllocationNumber            // Ipx.

Event Control Block

void*         Ptr                          // Ptr to memory for packet fragment.
int16_t       Length                       // Length of packet fragment. First must be able to hold IPX or SPX header.

void*         LinkAddress                  // Ipx
void*         EventServiceRoutine          // Ipx  
int8_t        InUseFlag                    // Ipx
int8_t        CompletionCode               // Ipx
int16_t       SocketNumber                 // App
int16_t       ConnectionID                 // Ipx
int8_t        Unused[2]                    // Ipx
int8_t        DriverWorkspace[12]          // Ipx.
int8_t        ImmediateAddress[6]          // Set by Ipx for received packets, app for transmitted packets.
int16_t       FragmentCount                  // App.
FragDescr     Fragments[2]                 // App.


IPX_SPX_OpenSocket : 0x00
IPX_SPX_CloseSocket : 0x01
IPX_GetLocalTarget : 0x02
IPX_SendPacket : 0x03
IPX_ListenForPacket : 0x04
IPX_Schedule_IPX_Event : 0x05
IPX_CancelEvent : 0x06
IPX_GetIntervalMarker : 0x08
IPX_GetInternetworkAddress : 0x09
IPX_RelingquishControl : 0x0A
IPX_DisconnectFromTarget : 0x0B

SPX_Initilize : 0x10
SPX_EstablishConnection : 0x11
SPX_LIstenForConnection : 0x12
SPX_TerminateConnection : 0x13
SPX_AbortConnection : 0x14
SPX_GetConnectionStatus : x015
SPX_SendSequncePacket : 0x16
SPX_ListenForSequencePacket : 0x17