summaryrefslogtreecommitdiffstats
path: root/private/ntos/tdi/isn/rip/globals.h
blob: 8fc037708f524869d4fa5bc71c665d767fd84260 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
/*******************************************************************/
/*	      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);