Source code of Windows XP (NT5)
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.
 
 
 
 
 
 

467 lines
12 KiB

#ifndef _IPX_ADAPTER_
#define _IPX_ADAPTER_
#include <ntddndis.h>
#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_