/*++ Copyright (c) 1995 Microsoft Corporation Module Name: ntos\tdi\isn\fwd\fwddefs.h Abstract: IPX Forwarder driver constants and general macro definitions Author: Vadim Eydelman Revision History: --*/ #ifndef _IPXFWD_FWDDEFS_ #define _IPXFWD_FWDDEFS_ // Forwarder tag used in memory allocations #define FWD_POOL_TAG 'wFwN' //*** Offsets into the IPX header #define IPXH_HDRSIZE 30 // Size of the IPX header #define IPXH_CHECKSUM 0 // Checksum #define IPXH_LENGTH 2 // Length #define IPXH_XPORTCTL 4 // Transport Control #define IPXH_PKTTYPE 5 // Packet Type #define IPXH_DESTADDR 6 // Dest. Address (Total) #define IPXH_DESTNET 6 // Dest. Network Address #define IPXH_DESTNODE 10 // Dest. Node Address #define IPXH_DESTSOCK 16 // Dest. Socket Number #define IPXH_SRCADDR 18 // Source Address (Total) #define IPXH_SRCNET 18 // Source Network Address #define IPXH_SRCNODE 22 // Source Node Address #define IPXH_SRCSOCK 28 // Source Socket Number //*** Packet Types we care about #define IPX_NETBIOS_TYPE 20 // Netbios propagated packet //*** Socket Numbers we care about #define IPX_NETBIOS_SOCKET ((USHORT)0x0455) #define IPX_SAP_SOCKET ((USHORT)0x0452) #define IPX_SMB_NAME_SOCKET ((USHORT)0x0551) //*** maximum nr of hops for a normal packet *** #define IPX_MAX_HOPS 16 //*** offsets into the netbios name frames *** #define NB_NAME_TYPE_FLAG 62 #define NB_DATA_STREAM_TYPE2 63 #define NB_NAME 64 #define NB_TOTAL_DATA_LENGTH 80 // *** offsets into smb name claim/query frames #define SMB_OPERATION 62 #define SMB_NAME_TYPE 63 #define SMB_MESSAGE_IF 64 #define SMB_NAME 66 // Some commonly used macros #define IPX_NODE_CPY(dst,src) memcpy(dst,src,6) #define IPX_NODE_CMP(node1,node2) memcmp(node1,node2,6) #define IPX_NET_CPY(dst,src) memcpy(dst,src,4) #define IPX_NET_CMP(net1,net2) memcmp(net1,net2,4) #define NB_NAME_CPY(dst,src) strncpy((char *)dst,(char *)src,16) #define NB_NAME_CMP(name1,name2) strncmp((char *)name1,(char *)name2,16) // Make sure the structure is copied with DWORD granularity #define IF_STATS_CPY(dst,src) \ (dst)->OperationalState = (src)->OperationalState; \ (dst)->MaxPacketSize = (src)->MaxPacketSize; \ (dst)->InHdrErrors = (src)->InHdrErrors; \ (dst)->InFiltered = (src)->InFiltered; \ (dst)->InNoRoutes = (src)->InNoRoutes; \ (dst)->InDiscards = (src)->InDiscards; \ (dst)->InDelivers = (src)->InDelivers; \ (dst)->OutFiltered = (src)->OutFiltered; \ (dst)->OutDiscards = (src)->OutDiscards; \ (dst)->OutDelivers = (src)->OutDelivers; \ (dst)->NetbiosReceived = (src)->NetbiosReceived; \ (dst)->NetbiosSent = (src)->NetbiosSent; // Extensions to list macros #define InitializeListEntry(entry) InitializeListHead(entry) #define IsListEntry(entry) IsListEmpty(entry) #define IsSingleEntry(head) ((head)->Flink==(head)->Blink) // Conversions from/to on-the-wire format #define GETUSHORT(src) ( \ (USHORT)( \ (((UCHAR *)src)[0]<<8) \ + (((UCHAR *)src)[1]) \ ) \ ) #define GETULONG(src) ( \ (ULONG)( \ (((UCHAR *)src)[0]<<24) \ + (((UCHAR *)src)[1]<<16) \ + (((UCHAR *)src)[2]<<8) \ + (((UCHAR *)src)[3]) \ ) \ ) #define PUTUSHORT(src,dst) { \ ((UCHAR *)dst)[0] = ((UCHAR)(src>>8)); \ ((UCHAR *)dst)[1] = ((UCHAR)src); \ } #define PUTULONG(src,dst) { \ ((UCHAR *)dst)[0] = ((UCHAR)(src>>24)); \ ((UCHAR *)dst)[1] = ((UCHAR)(src>>16)); \ ((UCHAR *)dst)[2] = ((UCHAR)(src>>8)); \ ((UCHAR *)dst)[3] = ((UCHAR)src); \ } #endif