/*******************************************************************/ /* Copyright(c) 1993 Microsoft Corporation */ /*******************************************************************/ //*** // // Filename: globals.h // // Description: global routines and data structures // // Author: Stefan Solomon (stefans) October 18, 1993. // // Revision History: // //*** //*** Router Driver State *** // 1. Initialization Flag // FALSE - not initialized, TRUE - initialized extern BOOLEAN RouterInitialized; // 2. Unloading Flag - indicates that driver unloading is taking place // FALSE - not unloading, TRUE - unloading extern BOOLEAN RouterUnloading; // Router Role - Total or partial connectivity extern BOOLEAN LanWanLan; // LAN routing on the same machine - disabled for RAS extern ULONG EnableLanRouting; // Netbios Routing enable/disable extern ULONG NetbiosRouting; // max nic count extern USHORT MaximumNicCount; //*** some auxiliary data extern UCHAR nulladdress[]; extern UCHAR bcastaddress[]; // //*** Routing Table auxiliary structures *** // extern UINT SegmentCount; // nr of segments (hash buckets) of the RT extern PKSPIN_LOCK SegmentLocksTable; // points to the array of segment locks for RT // frame size extern ULONG MaxFrameSize; // MAC header needed extern ULONG MacHeaderNeeded; // RIP requests/responses queue NDIS_SPIN_LOCK RipPktsListLock; LIST_ENTRY RipPktsList; // Propagated & net up bcast control structures extern NDIS_SPIN_LOCK PropagatedPktsListLock; extern LIST_ENTRY PropagatedPktsList; // this dpc initialized with the SendNext function extern KDPC PropagatedPktsDpc; extern BOOLEAN PropagatedPktsDpcQueued; // rcv pkt pool size as one of: small(1), medium(2), large(3). (config parameter) extern UINT RcvPktPoolSize; // the number of receive packets per pool segment (config parameter) extern UINT RcvPktsPerSegment; // memory statistics: peak allocation counter extern ULONG StatMemPeakCount; extern ULONG StatMemAllocCount; extern UINT RcvPktCount; // total pkts allocated for the // Max frame size as a multiple of ULONGs extern UINT UlongMaxFrameSize; //*** max send pkts queued limit: over this limit the send pkts get discarded extern ULONG MaxSendPktsQueued; //*** Entry Points into the IPX stack *** IPX_INTERNAL_SEND IpxSendPacket; IPX_INTERNAL_GET_SEGMENT IpxGetSegment; IPX_INTERNAL_GET_ROUTE IpxGetRoute; IPX_INTERNAL_ADD_ROUTE IpxAddRoute; IPX_INTERNAL_DELETE_ROUTE IpxDeleteRoute; IPX_INTERNAL_GET_FIRST_ROUTE IpxGetFirstRoute; IPX_INTERNAL_GET_NEXT_ROUTE IpxGetNextRoute; // // [BUGBUGZZ] remove since NdisWan does it. // IPX_INTERNAL_INCREMENT_WAN_INACTIVITY IpxIncrementWanInactivity; IPX_INTERNAL_QUERY_WAN_INACTIVITY IpxGetWanInactivity; IPX_INTERNAL_TRANSFER_DATA IpxTransferData; extern PNICCB *NicCbPtrTab; extern USHORT VirtualNicId; extern UCHAR VirtualNetwork[4]; //*** Global Functions *** NTSTATUS BindToIpxDriver(PIPX_INTERNAL_BIND_RIP_OUTPUT *IpxBindBuffpp); VOID UnbindFromIpxDriver(VOID); NTSTATUS RouterInit(PIPX_INTERNAL_BIND_RIP_OUTPUT IpxBindBuffp); VOID InitRtTimer(VOID); VOID StartRtTimer(VOID); VOID StopRtTimer(VOID); UINT CreateRcvPktPool(VOID); VOID DestroyRcvPktPool(VOID); VOID RcvPktPoolScavenger(VOID); UINT CreateNicCbs(PIPX_INTERNAL_BIND_RIP_OUTPUT IpxBindBuffp); VOID DestroyNicCbs(VOID); PPACKET_TAG AllocateRcvPkt(PNICCB niccbp); VOID FreeRcvPkt(PPACKET_TAG pktp); NTSTATUS RouterStart(VOID); BOOLEAN RtReceive ( IN NDIS_HANDLE MacBindingHandle, IN NDIS_HANDLE MacReceiveContext, IN ULONG FwdAdapterCtx, IN PIPX_LOCAL_TARGET RemoteAddress, IN ULONG MacOptions, IN PUCHAR LookaheadBuffer, IN UINT LookaheadBufferSize, IN UINT LookaheadBufferOffset, IN UINT PacketSize, IN PMDL pMdl ); VOID RtReceiveComplete ( IN USHORT NicId ); VOID RtStatus ( IN USHORT NicId, IN NDIS_STATUS GeneralStatus, IN PVOID StatusBuffer, IN UINT StatusBufferLength ); VOID RtSendComplete ( IN PNDIS_PACKET Packet, IN NDIS_STATUS Status ); VOID RtTransferDataComplete ( IN PNDIS_PACKET Packet, IN NDIS_STATUS Status, IN UINT BytesTransferred ); VOID RtFindRouteComplete ( IN PIPX_FIND_ROUTE_REQUEST FindRouteRequest, IN BOOLEAN FoundRoute ); VOID RtLineUp ( IN USHORT NicId, IN PIPX_LINE_INFO LineInfo, IN NDIS_MEDIUM DeviceType, IN PVOID ConfigurationData ); VOID RtLineDown ( IN USHORT NicId, IN ULONG FwdAdapterCtx ); VOID RtScheduleRoute ( IN PIPX_ROUTE_ENTRY RouteEntry ); VOID ProcessNbPacket(PPACKET_TAG pktp); VOID ProcessRipPacket(PPACKET_TAG pktp); VOID RoutePacket(PPACKET_TAG pktp); VOID SendPacket(PPACKET_TAG pktp); VOID InitRipSndDispatcher(VOID); VOID InitRipSndAtNic(PNICCB niccbp); VOID RipDispatchSndReq(PRIP_SNDREQ sndreqp); BOOLEAN RipQueueSndReqAtNic(PNICCB niccbp, PRIP_SNDREQ sndreqp); VOID SendRipPktCompleted(PPACKET_TAG pktp); PIPX_ROUTE_ENTRY GetRoute(UINT segment, BOOLEAN FirstRoute); VOID SetNetworkEntry(PUCHAR nep, PIPX_ROUTE_ENTRY rtep); VOID InitRipTimer(VOID); VOID RipTimer(VOID); VOID EnableRcvPktAllocation(PNICCB niccbp, BOOLEAN enab_mode); BOOLEAN IsRipSndResourceFree(PNICCB niccbp); BOOLEAN IsRcvPktResourceFree(PNICCB niccbp); VOID RipSendAtNicCompleted(PRIP_SNDREQ sndreqp); NIC_OPEN_STATUS NicOpen(PNICCB niccbp); NIC_CLOSE_STATUS NicClose(PNICCB niccbp, USHORT CloseCompletionOption); UINT AddRouteToBcastSndReq(PLIST_ENTRY nodelistp, PIPX_ROUTE_ENTRY rtep); PRIP_SNDREQ GetBcastSndReq(PLIST_ENTRY nodelistp, PUSHORT NicIdp); VOID RouterStop(VOID); VOID StopRipTimer(); NIC_RESOURCES_STATUS NicFreeResources(PNICCB niccbp); VOID BroadcastRipUpdate(PRIP_SNDREQ sndreqp, // send request PNICCB niccbp, // do not send on this nic PKEVENT eventp); // wait if this event is not NULL VOID BroadcastRipGeneralResponse(PRIP_SNDREQ sndreqp); VOID NicCloseComplete(PNICCB niccbp); USHORT tickcount(UINT linkspeed); VOID WanGenRequestTimeout(PKDPC Dpc, PVOID DefferedContext, PVOID SystemArgument1, PVOID SystemArgument2); BOOLEAN IsNetInNbPacket(PPACKET_TAG pktp, PNICCB niccbp); VOID SendPropagatedPacket(PPACKET_TAG pktp); VOID SendNextPropagatedPkt(PKDPC Dpc, PVOID DefferedContext, PVOID SystemArgument1, PVOID SystemArgument2); VOID ZeroNicStatistics(PNICCB niccbp); VOID InitWanNodeHT(VOID); PNICCB GetWanNodeNiccbp(PUCHAR nodep); VOID AddWanNodeToHT(PNICCB niccbp); VOID RemoveWanNodeFromHT(PNICCB niccbp); extern BOOLEAN WanGlobalNetworkEnabled; extern UCHAR WanGlobalNetwork[]; VOID InitNetbiosRoutingFilter(VOID); BOOLEAN IsNetbiosRoutingAllowed(PNICCB srcniccbp, PNICCB dstniccbp); VOID BroadcastWanNetUpdate(PIPX_ROUTE_ENTRY rtep, // route entry to bcast PNICCB niccbp, // do not send on this nic PKEVENT eventp); // synch event VOID SendGenRequestOnWanClient(VOID);