mirror of https://github.com/lianthony/NT4.0
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.
223 lines
5.7 KiB
223 lines
5.7 KiB
// STATIC is used for items which will be static in the release build
|
|
// but we want visible for debugging
|
|
|
|
#if DEVL
|
|
#define STATIC
|
|
#else
|
|
#define STATIC static
|
|
#endif
|
|
|
|
#define LOOP_MAJOR_VERSION 0x1
|
|
#define LOOP_MINOR_VERSION 0x0
|
|
|
|
#define LOOP_NDIS_MAJOR_VERSION 0x3
|
|
#define LOOP_NDIS_MINOR_VERSION 0x0
|
|
|
|
#define LOOP_ETH_CARD_ADDRESS " LOOP "
|
|
#define LOOP_ETH_MAX_MULTICAST_ADDRESS 16
|
|
#define LOOP_TR_CARD_ADDRESS " LOOP "
|
|
#define LOOP_FDDI_CARD_ADDRESS " LOOP "
|
|
#define LOOP_FDDI_MAX_MULTICAST_LONG 16
|
|
#define LOOP_FDDI_MAX_MULTICAST_SHORT 16
|
|
#define LOOP_LTALK_CARD_ADDRESS 0xAB
|
|
#define LOOP_ARC_CARD_ADDRESS 'L'
|
|
// arbitrary maximums...
|
|
#define LOOP_MAX_LOOKAHEAD 256
|
|
#define LOOP_INDICATE_MAXIMUM 256
|
|
|
|
#define OID_TYPE_MASK 0xFFFF0000
|
|
#define OID_TYPE 0xFF000000
|
|
#define OID_TYPE_GENERAL 0x00000000
|
|
#define OID_TYPE_GENERAL_OPERATIONAL 0x00010000
|
|
#define OID_TYPE_GENERAL_STATISTICS 0x00020000
|
|
#define OID_TYPE_802_3 0x01000000
|
|
#define OID_TYPE_802_3_OPERATIONAL 0x01010000
|
|
#define OID_TYPE_802_3_STATISTICS 0x01020000
|
|
#define OID_TYPE_802_5 0x02000000
|
|
#define OID_TYPE_802_5_OPERATIONAL 0x02010000
|
|
#define OID_TYPE_802_5_STATISTICS 0x02020000
|
|
#define OID_TYPE_FDDI 0x03000000
|
|
#define OID_TYPE_FDDI_OPERATIONAL 0x03010000
|
|
#define OID_TYPE_LTALK 0x05000000
|
|
#define OID_TYPE_LTALK_OPERATIONAL 0x05010000
|
|
#define OID_TYPE_ARCNET 0x06000000
|
|
#define OID_TYPE_ARCNET_OPERATIONAL 0x06010000
|
|
|
|
#define OID_REQUIRED_MASK 0x0000FF00
|
|
#define OID_REQUIRED_MANDATORY 0x00000100
|
|
#define OID_REQUIRED_OPTIONAL 0x00000200
|
|
|
|
#define OID_INDEX_MASK 0x000000FF
|
|
|
|
#define GM_TRANSMIT_GOOD 0x00
|
|
#define GM_RECEIVE_GOOD 0x01
|
|
#define GM_TRANSMIT_BAD 0x02
|
|
#define GM_RECEIVE_BAD 0x03
|
|
#define GM_RECEIVE_NO_BUFFER 0x04
|
|
#define GM_ARRAY_SIZE 0x05
|
|
|
|
#define LOOP_LT_IS_BROADCAST(Address) \
|
|
(BOOLEAN)(Address == 0xFF)
|
|
|
|
#define LOOP_ARC_IS_BROADCAST(Address) \
|
|
(BOOLEAN)(!(Address))
|
|
|
|
typedef
|
|
struct _MEDIA_INFO {
|
|
ULONG MaxFrameLen;
|
|
UINT MacHeaderLen;
|
|
ULONG PacketFilters;
|
|
ULONG LinkSpeed;
|
|
} MEDIA_INFO, *PMEDIA_INFO;
|
|
|
|
typedef
|
|
struct _LOOP_ADAPTER {
|
|
|
|
// this adapter's name
|
|
NDIS_STRING DeviceName;
|
|
UINT DeviceNameLength;
|
|
|
|
// MP and syncronization variables
|
|
NDIS_SPIN_LOCK Lock;
|
|
NDIS_TIMER LoopTimer;
|
|
BOOLEAN InTimerProc;
|
|
BOOLEAN TimerSet;
|
|
|
|
// reference count
|
|
UINT References;
|
|
|
|
// List of Bindings
|
|
UINT OpenCount;
|
|
LIST_ENTRY OpenBindings;
|
|
|
|
// the rest of the adapters
|
|
LIST_ENTRY AdapterList;
|
|
|
|
// handles for the adapter and mac driver
|
|
NDIS_HANDLE NdisMacHandle;
|
|
NDIS_HANDLE NdisAdapterHandle;
|
|
|
|
// loopback params
|
|
PNDIS_PACKET Loopback;
|
|
PNDIS_PACKET LastLoopback;
|
|
PNDIS_PACKET CurrentLoopback;
|
|
UCHAR LoopBuffer[LOOP_MAX_LOOKAHEAD];
|
|
|
|
BOOLEAN ResetInProgress;
|
|
UINT MaxLookAhead;
|
|
|
|
// media specific info
|
|
UCHAR PermanentAddress[6];
|
|
UCHAR CurrentAddress[6];
|
|
NDIS_MEDIUM Medium;
|
|
ULONG MediumLinkSpeed;
|
|
ULONG MediumMinPacketLen;
|
|
ULONG MediumMaxPacketLen;
|
|
UINT MediumMacHeaderLen;
|
|
ULONG MediumMaxFrameLen;
|
|
ULONG MediumPacketFilters;
|
|
union {
|
|
PETH_FILTER Eth;
|
|
PTR_FILTER Tr;
|
|
PFDDI_FILTER Fddi;
|
|
} Filter;
|
|
|
|
// statistics
|
|
ULONG GeneralMandatory[GM_ARRAY_SIZE];
|
|
} LOOP_ADAPTER, *PLOOP_ADAPTER;
|
|
|
|
#define BINDING_OPEN 0x00000001
|
|
#define BINDING_CLOSING 0x00000002
|
|
#define BINDING_RECEIVED_PACKET 0x00000004
|
|
|
|
typedef
|
|
struct _LOOP_OPEN {
|
|
LIST_ENTRY OpenList;
|
|
BOOLEAN BindingClosing;
|
|
UINT Flags;
|
|
PLOOP_ADAPTER OwningLoop;
|
|
NDIS_HANDLE NdisBindingContext;
|
|
NDIS_HANDLE NdisFilterHandle;
|
|
UINT References;
|
|
UINT CurrentLookAhead;
|
|
UINT CurrentPacketFilter;
|
|
} LOOP_OPEN, *PLOOP_OPEN;
|
|
|
|
typedef struct _LOOP_PACKET_RESERVED {
|
|
PNDIS_PACKET Next;
|
|
NDIS_HANDLE MacBindingHandle;
|
|
USHORT PacketLength;
|
|
UCHAR HeaderLength;
|
|
} LOOP_PACKET_RESERVED, *PLOOP_PACKET_RESERVED;
|
|
|
|
//
|
|
// Given a MacBindingHandle this macro returns a pointer to the
|
|
// LOOP_ADAPTER.
|
|
//
|
|
#define PLOOP_ADAPTER_FROM_BINDING_HANDLE(Handle) \
|
|
(((PLOOP_OPEN)((PVOID)(Handle)))->OwningLoop)
|
|
|
|
//
|
|
// Given a MacContextHandle return the PLOOP_ADAPTER
|
|
// it represents.
|
|
//
|
|
#define PLOOP_ADAPTER_FROM_CONTEXT_HANDLE(Handle) \
|
|
((PLOOP_ADAPTER)((PVOID)(Handle)))
|
|
|
|
//
|
|
// Given a pointer to a LOOP_ADAPTER return the
|
|
// proper MacContextHandle.
|
|
//
|
|
#define CONTEXT_HANDLE_FROM_PLOOP_ADAPTER(Ptr) \
|
|
((NDIS_HANDLE)((PVOID)(Ptr)))
|
|
|
|
//
|
|
// This macro returns a pointer to a PLOOP_OPEN given a MacBindingHandle.
|
|
//
|
|
#define PLOOP_OPEN_FROM_BINDING_HANDLE(Handle) \
|
|
((PLOOP_OPEN)((PVOID)Handle))
|
|
|
|
//
|
|
// This macro returns a NDIS_HANDLE from a PLOOP_OPEN
|
|
//
|
|
#define BINDING_HANDLE_FROM_PLOOP_OPEN(Open) \
|
|
((NDIS_HANDLE)((PVOID)Open))
|
|
|
|
//
|
|
// This macro returns a pointer to the LOOP reserved portion of the packet
|
|
//
|
|
#define PLOOP_RESERVED_FROM_PACKET(Packet) \
|
|
((PLOOP_PACKET_RESERVED)((PVOID)((Packet)->MacReserved)))
|
|
|
|
#define PLOOP_PACKET_FROM_RESERVED(Reserved) \
|
|
((PNDIS_PACKET)((PVOID)((Reserved)->Packet)))
|
|
|
|
extern
|
|
NDIS_STATUS
|
|
LoopQueryGlobalStats(
|
|
IN NDIS_HANDLE MacBindingContext,
|
|
IN PNDIS_REQUEST NdisRequest
|
|
);
|
|
|
|
extern
|
|
NDIS_STATUS
|
|
LoopRequest(
|
|
IN NDIS_HANDLE MacBindingContext,
|
|
IN PNDIS_REQUEST NdisRequest
|
|
);
|
|
|
|
extern
|
|
NDIS_STATUS
|
|
LoopSend(
|
|
IN NDIS_HANDLE MacBindingHandle,
|
|
IN PNDIS_PACKET Packet
|
|
);
|
|
|
|
extern
|
|
VOID
|
|
LoopTimerProc(
|
|
IN PVOID SystemSpecific1,
|
|
IN PVOID Context,
|
|
IN PVOID SystemSpecific2,
|
|
IN PVOID SystemSpecific3
|
|
);
|