#ifndef _IPX_ADAPTER_ #define _IPX_ADAPTER_ #include #include "tdi.h" #include "isnkrnl.h" #include "ipxrtdef.h" // Adapter state changes #define ADAPTER_CREATED 1 #define ADAPTER_DELETED 2 #define ADAPTER_UP 3 #define ADAPTER_DOWN 4 //*** Adapter Info *** // this information is communicated whenever an adapter gets // created or gets connected typedef struct _ADAPTER_INFO { ULONG InterfaceIndex; // relevant only for demand dial WAN interfaces UCHAR Network[4]; UCHAR LocalNode[6]; UCHAR RemoteNode[6]; ULONG LinkSpeed; ULONG PacketType; ULONG MaxPacketSize; NDIS_MEDIUM NdisMedium; ULONG ConnectionId; WCHAR pszAdpName[MAX_ADAPTER_NAME_LEN]; } ADAPTER_INFO, *PADAPTER_INFO; typedef struct _ADAPTERS_GLOBAL_PARAMETERS { ULONG AdaptersCount; } ADAPTERS_GLOBAL_PARAMETERS, *PADAPTERS_GLOBAL_PARAMETERS; typedef struct _IPXWAN_INFO { UCHAR Network[4]; UCHAR LocalNode[6]; UCHAR RemoteNode[6]; } IPXWAN_INFO, *PIPXWAN_INFO; typedef struct _ADDRESS_RESERVED { UCHAR Reserved[FIELD_OFFSET(IPX_DATAGRAM_OPTIONS2, Data)]; } ADDRESS_RESERVED, *PADDRESS_RESERVED; #define GetNicId(pReserved) ((PIPX_DATAGRAM_OPTIONS2)pReserved)->DgrmOptions.LocalTarget.NicId /*++ I p x C r e a t e A d a p t e r C o n f i g u r a t i o n P o r t Routine Description: Register client that wants to be updated of any changes in adapter state Arguments: NotificationEvent - event to be signaled when adapter state changes AdptGlobalParameters - parameters that common to all adapters Return Value: Handle to configuration port thru which changes in adapter state are reported. Returns INVALID_HANDLE_VALUE if port could not be created --*/ HANDLE WINAPI IpxCreateAdapterConfigurationPort ( IN HANDLE NotificationEvent, OUT PADAPTERS_GLOBAL_PARAMETERS AdptGlobalParameters ); /*++ I p x W a n C r e a t e A d a p t e r C o n f i g u r a t i o n P o r t Routine Description: Same as above, but creates port that only reports ADAPTER_UP events on WAN adapters that require IPXWAN negotiation. IpxGetQueuedAdapterConfigurationStatus on this port should be followed by IpxWanSetAdapterConfiguration obtained during the negotiation process, and ADAPTER_UP event will then be reported to other clients (including forwarder dirver) */ HANDLE WINAPI IpxWanCreateAdapterConfigurationPort ( IN HANDLE NotificationEvent, OUT PADAPTERS_GLOBAL_PARAMETERS AdptGlobalParameters ); /*++ I p x D e l e t e A d a p t e r C o n f i g u r a t i o n P o r t Routine Description: Unregister client Arguments: Handle - configuration port handle Return Value: NO_ERROR ERROR_INVALID_PARAMETER ERROR_GEN_FAILURE --*/ DWORD WINAPI IpxDeleteAdapterConfigurationPort ( IN HANDLE Handle ); /*++ G e t Q u e u e d A d a p t e r C o n f i g u r a t i o n S t a t u s Routine Description: Get info from the list of adapter info chages queued to the configuration info port Arguments: Handle - configuration port handle AdapterIndex - number of adapter being reported AdapterConfigurationStatus - new adapter status AdapterParameters - adapter parameters Return Value: NO_ERROR - new information is reported ERROR_NO_MORE_ITEMS - there is nothing to report Windows error code - operation failed --*/ DWORD WINAPI IpxGetQueuedAdapterConfigurationStatus( IN HANDLE Handle, OUT PULONG AdapterIndex, OUT PULONG AdapterConfigurationStatus, OUT PADAPTER_INFO AdapterInfo ); /*++ I p x W a n S e t A d a p t e r C o n f i g u r a t i o n Routine Description: Sets adapter configuration to be reported to both user and kernel mode clients (through the ADAPTER_UP/LINE_UP events) Arguments: AdapterIndex - number of adapter being set IpxWanInfo - IPXWAN negotiated parameters Return Value: NO_ERROR - adapter info set successfully Windows error code - operation failed --*/ DWORD IpxWanSetAdapterConfiguration ( IN ULONG AdapterIndex, IN PIPXWAN_INFO IpxWanInfo ); /*++ I p x W a n Q u e r y I n a c t i v i t y T i m e r Routine Description: Returns value of inactivity timer associated with WAN line Arguments: ConnectionId - connection id that identifies WAN line (used only if *AdapterIndex==INVALID_NICID AdapterIndex - adapter index that identifies WAN line (preferred over connection id), if *AdapterIndex==INVALID_NICID the value of connection id is used to identify the WAN line and value of AdapterIndex is returned. InactivityCounter - value of inactivity counter. Return Value: NO_ERROR - inactivity timer reading is returned Windows error code - operation failed --*/ DWORD IpxWanQueryInactivityTimer ( IN ULONG ConnectionId, IN OUT PULONG AdapterIndex, OUT PULONG InactivityCounter ); /*++ G e t A d a p t e r N a m e W Routine Description: Returns UNICODE name of the adapter associated with given index Arguments: AdapterIndex - index of adapter AdapterNameSize - size of adapter name (in bytes), including terminal wchar NULL AdapterNameBuffer - buffer to receive adapter name Return Value: NO_ERROR - adapter name is in the buffer ERROR_INVALID_PARAMETER - adapter with given index does not exist ERROR_INSUFFICIENT_BUFFER - buffer in to small. Updates AdapterNameSize to the correct value. Other windows error code - operation failed --*/ DWORD WINAPI GetAdapterNameW( IN ULONG AdapterIndex, IN OUT PULONG AdapterNameSize, OUT LPWSTR AdapterNameBuffer); /*++ C r e a t e S o c k e t P o r t Routine Description: Creates port to communicate over IPX socket Arguments: Socket - IPX socket number to use (network byte order) Return Value: Handle to communication port that provides async interface to IPX stack. Returns INVALID_HANDLE_VALUE if port can not be opened --*/ HANDLE WINAPI CreateSocketPort( IN USHORT Socket ); /*++ D e l e t e S o c k e t P o r t Routine Description: Cancel all the outstandng requests and dispose of all the resources allocated for communication port Arguments: Handle - Handle to communication port to be disposed of Return Value: NO_ERROR - success Windows error code - operation failed --*/ DWORD WINAPI DeleteSocketPort( IN HANDLE Handle ); /*++ I p x R e c v P a c k e t Routine Description: Enqueue request to receive IPX packet and return immediately. Event will be signalled or comletion routine will be called when done Arguments: Handle - Handle to adapter & socket to use AdapterIdx - adapter on which to packet was received (set upon completion) IpxPacket - buffer for ipx packet (complete with header) IpxPacketLength - length of the buffer pReserved - buffer to get info from IPX stack lpOverlapped - structure to be used for async IO: Internal - Reserved InternalHigh - Reserved Offset - not used OffsetHigh - not used hEvent - event to be signalled when IO completes or NULL if CompletionRoutine is to be called CompletionRoutine - to be called when IO operation is completes Return Value: NO_ERROR - if lpOverlapped->hEvent!=NULL, then send has successfully completed (do not need to wait on event), otherwise, send operation has started and completion routine will be called when done ERROR_IO_PENDING - only returned if lpOverlapped->hEvent!=NULL and send could not be completed immediately, event will be signalled when operation is done: call GetOverlapedResult to retrieve result of the operation other (windows error code) - operation could not be started (completion routine won't be called) --*/ DWORD WINAPI IpxRecvPacket( IN HANDLE Handle, OUT PUCHAR IpxPacket, IN ULONG IpxPacketLength, IN PADDRESS_RESERVED lpReserved, LPOVERLAPPED lpOverlapped, LPOVERLAPPED_COMPLETION_ROUTINE CompletionRoutine ); /*++ I p x S e n d P a c k e t Routine Description: Enqueue request to receive IPX packet and return immediately. Event will be signalled or comletion routine will be called when done Arguments: Handle - Handle to adapter & socket to use AdapterIdx - adapter on which to send IpxPacket - ipx packet complete with header IpxPacketLength - length of the packet pReserved - buffer to supply info to IPX stack lpOverlapped - structure to be used for async IO: Internal - reserved InternalHigh - reserved Offset - not used OffsetHigh - not used hEvent - event to be signalled when IO completes or NULL if CompletionRoutine is to be called CompletionRoutine - to be called when IO operation is completes Return Value: NO_ERROR - if lpOverlapped->hEvent!=NULL, then recv has successfully completed (do not need to wait on event), otherwise, recv operation has started and completion routine will be called when done ERROR_IO_PENDING - only returned if lpOverlapped->hEvent!=NULL and recv could not be completed immediately, event will be signalled when operation is done: call GetOverlapedResult to retrieve result of the operation other (windows error code) - operation could not be started (completion routine won't be called) --*/ DWORD WINAPI IpxSendPacket ( IN HANDLE Handle, IN ULONG AdapterIdx, IN PUCHAR IpxPacket, IN ULONG IpxPacketLength, IN PADDRESS_RESERVED lpReserved, LPOVERLAPPED lpOverlapped, LPOVERLAPPED_COMPLETION_ROUTINE CompletionRoutine ); /*++ I p x G e t O v e r l a p p e d R e s u l t Routine Description: GetOverlappedResult wrapper: gives adptif.dll a chance to adjust returned parameters (currently number of bytes transferred). Arguments: Same as in GetOverlappedResult (see SDK doc) Return Value: Same as in GetOverlappedResult (see SDK doc) --*/ BOOL IpxGetOverlappedResult ( HANDLE Handle, LPOVERLAPPED lpOverlapped, LPDWORD lpNumberOfBytesTransferred, BOOL bWait ); /*++ I p x G e t Q u e u e d C o m p l e t i o n S t a t u s Routine Description: GetQueuedCompletionStatus wrapper: gives adptif.dll a chance to adjust returned parameters (currently number of bytes transferred) Arguments: Same as in GetQueuedCompletionStatus (see SDK doc) Return Value: Same as in GetQueuedCompletionStatus (see SDK doc) --*/ BOOL IpxGetQueuedCompletionStatus( HANDLE CompletionPort, LPDWORD lpNumberOfBytesTransferred, PULONG_PTR lpCompletionKey, LPOVERLAPPED *lpOverlapped, DWORD dwMilliseconds ); /*++ I p x A d j u s t I o C o m p l e t i o n P a r a m s Routine Description: Adjust io completion parameters for io performed by IpxSendPacket or IpxReceivePacket and completed through the mechanisms other than routines provided above Arguments: lpOverlapped - overlapped structure passed to Ipx(Send/Recv)Packet routines lpNumberOfBytesTransferred - adjusted number of bytes transferred in io error - win32 error code Return Value: None --*/ VOID IpxAdjustIoCompletionParams ( IN OUT LPOVERLAPPED lpOverlapped, OUT LPDWORD lpNumberOfBytesTransferred, OUT LPDWORD error ); /*++ I p x P o s t Q u e u e d C o m p l e t i o n S t a t u s Routine Description: PostQueuedCompletionStatus wrapper: gives adptif.dll a chance to setup lpOverlapped so it can be correctly processed by the IpxGetQueueCompletionStatus and IpxGetOverlappedResult Arguments: Same as in PostQueuedCompletionStatus (see SDK doc) Return Value: Same as in PostQueuedCompletionStatus (see SDK doc) --*/ BOOL IpxPostQueuedCompletionStatus( HANDLE CompletionPort, DWORD dwNumberOfBytesTransferred, DWORD dwCompletionKey, LPOVERLAPPED lpOverlapped ); #endif // _IPX_ADAPTER_