ReactOS  0.4.14-dev-552-g2fad488
router.h File Reference
#include <neighbor.h>
Include dependency graph for router.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  _FIB_ENTRY
 

Typedefs

typedef struct _FIB_ENTRY FIB_ENTRY
 
typedef struct _FIB_ENTRYPFIB_ENTRY
 

Functions

PFIB_ENTRY RouterAddRoute (PIP_ADDRESS NetworkAddress, PIP_ADDRESS Netmask, PNEIGHBOR_CACHE_ENTRY Router, UINT Metric)
 
PNEIGHBOR_CACHE_ENTRY RouterGetRoute (PIP_ADDRESS Destination)
 
NTSTATUS RouterRemoveRoute (PIP_ADDRESS Target, PIP_ADDRESS Router)
 
PFIB_ENTRY RouterCreateRoute (PIP_ADDRESS NetworkAddress, PIP_ADDRESS Netmask, PIP_ADDRESS RouterAddress, PIP_INTERFACE Interface, UINT Metric)
 
NTSTATUS RouterStartup (VOID)
 
NTSTATUS RouterShutdown (VOID)
 
VOID RouterRemoveRoutesForInterface (PIP_INTERFACE Interface)
 
UINT CountFIBs (PIP_INTERFACE IF)
 
UINT CopyFIBs (PIP_INTERFACE IF, PFIB_ENTRY Target)
 

Typedef Documentation

◆ FIB_ENTRY

◆ PFIB_ENTRY

Function Documentation

◆ CopyFIBs()

UINT CopyFIBs ( PIP_INTERFACE  IF,
PFIB_ENTRY  Target 
)

Definition at line 120 of file router.c.

120  {
121  UINT FibCount = 0;
122  PLIST_ENTRY CurrentEntry;
123  PLIST_ENTRY NextEntry;
124  PFIB_ENTRY Current;
125 
126  CurrentEntry = FIBListHead.Flink;
127  while (CurrentEntry != &FIBListHead) {
128  NextEntry = CurrentEntry->Flink;
129  Current = CONTAINING_RECORD(CurrentEntry, FIB_ENTRY, ListEntry);
130  if (Current->Router->Interface == IF)
131  {
132  Target[FibCount] = *Current;
133  FibCount++;
134  }
135  CurrentEntry = NextEntry;
136  }
137 
138  return FibCount;
139 }
PFLT_MESSAGE_WAITER_QUEUE CONTAINING_RECORD(Csq, DEVICE_EXTENSION, IrpQueue)) -> WaiterQ.mLock) _IRQL_raises_(DISPATCH_LEVEL) VOID NTAPI FltpAcquireMessageWaiterLock(_In_ PIO_CSQ Csq, _Out_ PKIRQL Irql)
Definition: Messaging.c:560
struct _LIST_ENTRY * Flink
Definition: typedefs.h:119
_Must_inspect_result_ typedef _In_ ULONG _In_ BOOLEAN Target
Definition: iotypes.h:1068
PNEIGHBOR_CACHE_ENTRY Router
Definition: router.h:19
Definition: typedefs.h:117
PIP_INTERFACE Interface
Definition: neighbor.h:33
LIST_ENTRY FIBListHead
Definition: router.c:17
unsigned int UINT
Definition: ndis.h:50
Definition: router.h:14

Referenced by InfoTdiQueryGetRouteTable().

◆ CountFIBs()

UINT CountFIBs ( PIP_INTERFACE  IF)

Definition at line 101 of file router.c.

101  {
102  UINT FibCount = 0;
103  PLIST_ENTRY CurrentEntry;
104  PLIST_ENTRY NextEntry;
105  PFIB_ENTRY Current;
106 
107  CurrentEntry = FIBListHead.Flink;
108  while (CurrentEntry != &FIBListHead) {
109  NextEntry = CurrentEntry->Flink;
110  Current = CONTAINING_RECORD(CurrentEntry, FIB_ENTRY, ListEntry);
111  if (Current->Router->Interface == IF)
112  FibCount++;
113  CurrentEntry = NextEntry;
114  }
115 
116  return FibCount;
117 }
PFLT_MESSAGE_WAITER_QUEUE CONTAINING_RECORD(Csq, DEVICE_EXTENSION, IrpQueue)) -> WaiterQ.mLock) _IRQL_raises_(DISPATCH_LEVEL) VOID NTAPI FltpAcquireMessageWaiterLock(_In_ PIO_CSQ Csq, _Out_ PKIRQL Irql)
Definition: Messaging.c:560
struct _LIST_ENTRY * Flink
Definition: typedefs.h:119
PNEIGHBOR_CACHE_ENTRY Router
Definition: router.h:19
Definition: typedefs.h:117
PIP_INTERFACE Interface
Definition: neighbor.h:33
LIST_ENTRY FIBListHead
Definition: router.c:17
unsigned int UINT
Definition: ndis.h:50
Definition: router.h:14

Referenced by InfoTdiQueryGetIPSnmpInfo(), and InfoTdiQueryGetRouteTable().

◆ RouterAddRoute()

PFIB_ENTRY RouterAddRoute ( PIP_ADDRESS  NetworkAddress,
PIP_ADDRESS  Netmask,
PNEIGHBOR_CACHE_ENTRY  Router,
UINT  Metric 
)

Definition at line 189 of file router.c.

208 {
209  PFIB_ENTRY FIBE;
210 
211  TI_DbgPrint(DEBUG_ROUTER, ("Called. NetworkAddress (0x%X) Netmask (0x%X) "
212  "Router (0x%X) Metric (%d).\n", NetworkAddress, Netmask, Router, Metric));
213 
214  TI_DbgPrint(DEBUG_ROUTER, ("NetworkAddress (%s) Netmask (%s) Router (%s).\n",
216  A2S(Netmask),
217  A2S(&Router->Address)));
218 
220  if (!FIBE) {
221  TI_DbgPrint(MIN_TRACE, ("Insufficient resources.\n"));
222  return NULL;
223  }
224 
226  sizeof(FIBE->NetworkAddress) );
227  RtlCopyMemory( &FIBE->Netmask, Netmask,
228  sizeof(FIBE->Netmask) );
229  FIBE->Router = Router;
230  FIBE->Metric = Metric;
231 
232  /* Add FIB to the forward information base */
234 
235  return FIBE;
236 }
#define TI_DbgPrint(_t_, _x_)
Definition: debug.h:45
LIST_ENTRY ListEntry
Definition: router.h:15
NTSYSAPI VOID NTAPI RtlCopyMemory(VOID UNALIGNED *Destination, CONST VOID UNALIGNED *Source, ULONG Length)
#define FIB_TAG
Definition: tags.h:29
IP_ADDRESS NetworkAddress
Definition: router.h:17
IP_ADDRESS Netmask
Definition: router.h:18
smooth NULL
Definition: ftsmooth.c:416
KSPIN_LOCK FIBLock
Definition: router.c:18
UINT Metric
Definition: router.h:20
_Must_inspect_result_ _Out_ PNDIS_STATUS _Outptr_result_bytebuffer_to_ NetworkAddressLength PVOID * NetworkAddress
Definition: ndis.h:3956
#define ExAllocatePoolWithTag(hernya, size, tag)
Definition: env_spec_w32.h:350
PNEIGHBOR_CACHE_ENTRY Router
Definition: router.h:19
VOID TcpipInterlockedInsertTailList(PLIST_ENTRY ListHead, PLIST_ENTRY Item, PKSPIN_LOCK Lock)
Definition: lock.c:34
LIST_ENTRY FIBListHead
Definition: router.c:17
IP_ADDRESS Address
Definition: neighbor.h:36
Definition: router.h:14
#define MIN_TRACE
Definition: debug.h:14
#define DEBUG_ROUTER
Definition: debug.h:30
PCHAR A2S(PIP_ADDRESS Address)
Definition: address.c:17

Referenced by IPAddInterfaceRoute(), and RouterCreateRoute().

◆ RouterCreateRoute()

PFIB_ENTRY RouterCreateRoute ( PIP_ADDRESS  NetworkAddress,
PIP_ADDRESS  Netmask,
PIP_ADDRESS  RouterAddress,
PIP_INTERFACE  Interface,
UINT  Metric 
)

Definition at line 421 of file router.c.

440 {
441  KIRQL OldIrql;
442  PLIST_ENTRY CurrentEntry;
443  PLIST_ENTRY NextEntry;
444  PFIB_ENTRY Current;
446 
448 
449  CurrentEntry = FIBListHead.Flink;
450  while (CurrentEntry != &FIBListHead) {
451  NextEntry = CurrentEntry->Flink;
452  Current = CONTAINING_RECORD(CurrentEntry, FIB_ENTRY, ListEntry);
453 
454  NCE = Current->Router;
455 
456  if(AddrIsEqual(NetworkAddress, &Current->NetworkAddress) &&
457  AddrIsEqual(Netmask, &Current->Netmask) &&
458  NCE->Interface == Interface)
459  {
460  TI_DbgPrint(DEBUG_ROUTER,("Attempting to add duplicate route to %s\n", A2S(NetworkAddress)));
462  return NULL;
463  }
464 
465  CurrentEntry = NextEntry;
466  }
467 
469 
470  /* The NCE references RouterAddress. The NCE is referenced for us */
471  NCE = NBFindOrCreateNeighbor(Interface, RouterAddress, TRUE);
472 
473  if (!NCE) {
474  /* Not enough free resources */
475  return NULL;
476  }
477 
478  return RouterAddRoute(NetworkAddress, Netmask, NCE, Metric);
479 }
#define TI_DbgPrint(_t_, _x_)
Definition: debug.h:45
#define TRUE
Definition: types.h:120
Definition: neighbor.h:28
IP_ADDRESS NetworkAddress
Definition: router.h:17
VOID TcpipReleaseSpinLock(PKSPIN_LOCK SpinLock, KIRQL Irql)
Definition: lock.c:26
VOID TcpipAcquireSpinLock(PKSPIN_LOCK SpinLock, PKIRQL Irql)
Definition: lock.c:18
UCHAR KIRQL
Definition: env_spec_w32.h:591
PNEIGHBOR_CACHE_ENTRY NBFindOrCreateNeighbor(PIP_INTERFACE Interface, PIP_ADDRESS Address, BOOLEAN NoTimeout)
Definition: neighbor.c:501
IP_ADDRESS Netmask
Definition: router.h:18
smooth NULL
Definition: ftsmooth.c:416
PFLT_MESSAGE_WAITER_QUEUE CONTAINING_RECORD(Csq, DEVICE_EXTENSION, IrpQueue)) -> WaiterQ.mLock) _IRQL_raises_(DISPATCH_LEVEL) VOID NTAPI FltpAcquireMessageWaiterLock(_In_ PIO_CSQ Csq, _Out_ PKIRQL Irql)
Definition: Messaging.c:560
KSPIN_LOCK FIBLock
Definition: router.c:18
struct _LIST_ENTRY * Flink
Definition: typedefs.h:119
IN PVOID IN PVOID IN USHORT IN USHORT IN PINTERFACE Interface
Definition: pci.h:359
_Must_inspect_result_ _Out_ PNDIS_STATUS _Outptr_result_bytebuffer_to_ NetworkAddressLength PVOID * NetworkAddress
Definition: ndis.h:3956
PNEIGHBOR_CACHE_ENTRY Router
Definition: router.h:19
BOOLEAN AddrIsEqual(PIP_ADDRESS Address1, PIP_ADDRESS Address2)
Definition: address.c:221
_Requires_lock_held_ Interrupt _Releases_lock_ Interrupt _In_ _IRQL_restores_ KIRQL OldIrql
Definition: kefuncs.h:803
Definition: typedefs.h:117
PIP_INTERFACE Interface
Definition: neighbor.h:33
LIST_ENTRY FIBListHead
Definition: router.c:17
Definition: router.h:14
#define DEBUG_ROUTER
Definition: debug.h:30
PFIB_ENTRY RouterAddRoute(PIP_ADDRESS NetworkAddress, PIP_ADDRESS Netmask, PNEIGHBOR_CACHE_ENTRY Router, UINT Metric)
Definition: router.c:189
PCHAR A2S(PIP_ADDRESS Address)
Definition: address.c:17

Referenced by InfoTdiSetRoute(), and ReadIpConfiguration().

◆ RouterGetRoute()

PNEIGHBOR_CACHE_ENTRY RouterGetRoute ( PIP_ADDRESS  Destination)

Definition at line 239 of file router.c.

249 {
250  KIRQL OldIrql;
251  PLIST_ENTRY CurrentEntry;
252  PLIST_ENTRY NextEntry;
253  PFIB_ENTRY Current;
254  UCHAR State;
255  UINT Length, BestLength = 0, MaskLength;
256  PNEIGHBOR_CACHE_ENTRY NCE, BestNCE = NULL;
257 
258  TI_DbgPrint(DEBUG_ROUTER, ("Called. Destination (0x%X)\n", Destination));
259 
260  TI_DbgPrint(DEBUG_ROUTER, ("Destination (%s)\n", A2S(Destination)));
261 
263 
264  CurrentEntry = FIBListHead.Flink;
265  while (CurrentEntry != &FIBListHead) {
266  NextEntry = CurrentEntry->Flink;
267  Current = CONTAINING_RECORD(CurrentEntry, FIB_ENTRY, ListEntry);
268 
269  NCE = Current->Router;
270  State = NCE->State;
271 
273  MaskLength = AddrCountPrefixBits(&Current->Netmask);
274 
275  TI_DbgPrint(DEBUG_ROUTER,("This-Route: %s (Sharing %d bits)\n",
276  A2S(&NCE->Address), Length));
277 
278  if(Length >= MaskLength && (Length > BestLength || !BestNCE) &&
279  ((!(State & NUD_STALE) && !(State & NUD_INCOMPLETE)) || !BestNCE)) {
280  /* This seems to be a better router */
281  BestNCE = NCE;
282  BestLength = Length;
283  TI_DbgPrint(DEBUG_ROUTER,("Route selected\n"));
284  }
285 
286  CurrentEntry = NextEntry;
287  }
288 
290 
291  if( BestNCE ) {
292  TI_DbgPrint(DEBUG_ROUTER,("Routing to %s\n", A2S(&BestNCE->Address)));
293  } else {
294  TI_DbgPrint(DEBUG_ROUTER,("Packet won't be routed\n"));
295  }
296 
297  return BestNCE;
298 }
#define TI_DbgPrint(_t_, _x_)
Definition: debug.h:45
Definition: neighbor.h:28
#define NUD_STALE
Definition: neighbor.h:43
IP_ADDRESS NetworkAddress
Definition: router.h:17
VOID TcpipReleaseSpinLock(PKSPIN_LOCK SpinLock, KIRQL Irql)
Definition: lock.c:26
VOID TcpipAcquireSpinLock(PKSPIN_LOCK SpinLock, PKIRQL Irql)
Definition: lock.c:18
UCHAR KIRQL
Definition: env_spec_w32.h:591
IP_ADDRESS Netmask
Definition: router.h:18
smooth NULL
Definition: ftsmooth.c:416
UCHAR State
Definition: neighbor.h:30
PFLT_MESSAGE_WAITER_QUEUE CONTAINING_RECORD(Csq, DEVICE_EXTENSION, IrpQueue)) -> WaiterQ.mLock) _IRQL_raises_(DISPATCH_LEVEL) VOID NTAPI FltpAcquireMessageWaiterLock(_In_ PIO_CSQ Csq, _Out_ PKIRQL Irql)
Definition: Messaging.c:560
KSPIN_LOCK FIBLock
Definition: router.c:18
struct _LIST_ENTRY * Flink
Definition: typedefs.h:119
UINT CommonPrefixLength(PIP_ADDRESS Address1, PIP_ADDRESS Address2)
Definition: router.c:142
_In_ PUNICODE_STRING _Inout_ PUNICODE_STRING Destination
Definition: rtlfuncs.h:2891
#define NUD_INCOMPLETE
Definition: neighbor.h:41
_In_ ULONG _In_ ULONG _In_ ULONG Length
Definition: ntddpcm.h:101
PNEIGHBOR_CACHE_ENTRY Router
Definition: router.h:19
unsigned char UCHAR
Definition: xmlstorage.h:181
_Requires_lock_held_ Interrupt _Releases_lock_ Interrupt _In_ _IRQL_restores_ KIRQL OldIrql
Definition: kefuncs.h:803
UINT AddrCountPrefixBits(PIP_ADDRESS Netmask)
Definition: address.c:64
Definition: typedefs.h:117
LIST_ENTRY FIBListHead
Definition: router.c:17
enum State_ State
Definition: pofuncs.h:54
unsigned int UINT
Definition: ndis.h:50
IP_ADDRESS Address
Definition: neighbor.h:36
Definition: router.h:14
#define DEBUG_ROUTER
Definition: debug.h:30
PCHAR A2S(PIP_ADDRESS Address)
Definition: address.c:17

Referenced by RouteGetRouteToDestination().

◆ RouterRemoveRoute()

NTSTATUS RouterRemoveRoute ( PIP_ADDRESS  Target,
PIP_ADDRESS  Router 
)

Definition at line 364 of file router.c.

373 {
374  KIRQL OldIrql;
375  PLIST_ENTRY CurrentEntry;
376  PLIST_ENTRY NextEntry;
377  PFIB_ENTRY Current;
378  BOOLEAN Found = FALSE;
380 
381  TI_DbgPrint(DEBUG_ROUTER, ("Called\n"));
382  TI_DbgPrint(DEBUG_ROUTER, ("Deleting Route From: %s\n", A2S(Router)));
383  TI_DbgPrint(DEBUG_ROUTER, (" To: %s\n", A2S(Target)));
384 
386 
388 
389  CurrentEntry = FIBListHead.Flink;
390  while (CurrentEntry != &FIBListHead) {
391  NextEntry = CurrentEntry->Flink;
392  Current = CONTAINING_RECORD(CurrentEntry, FIB_ENTRY, ListEntry);
393 
394  NCE = Current->Router;
395 
396  if( AddrIsEqual( &Current->NetworkAddress, Target ) &&
397  AddrIsEqual( &NCE->Address, Router ) ) {
398  Found = TRUE;
399  break;
400  }
401 
402  Current = NULL;
403  CurrentEntry = NextEntry;
404  }
405 
406  if( Found ) {
407  TI_DbgPrint(DEBUG_ROUTER, ("Deleting route\n"));
408  DestroyFIBE( Current );
409  }
410 
412 
414 
415  TI_DbgPrint(DEBUG_ROUTER, ("Leaving\n"));
416 
418 }
VOID DestroyFIBE(PFIB_ENTRY FIBE)
Definition: router.c:57
#define TI_DbgPrint(_t_, _x_)
Definition: debug.h:45
#define TRUE
Definition: types.h:120
Definition: neighbor.h:28
IP_ADDRESS NetworkAddress
Definition: router.h:17
VOID TcpipReleaseSpinLock(PKSPIN_LOCK SpinLock, KIRQL Irql)
Definition: lock.c:26
VOID TcpipAcquireSpinLock(PKSPIN_LOCK SpinLock, PKIRQL Irql)
Definition: lock.c:18
UCHAR KIRQL
Definition: env_spec_w32.h:591
unsigned char BOOLEAN
smooth NULL
Definition: ftsmooth.c:416
return Found
Definition: dirsup.c:1270
PFLT_MESSAGE_WAITER_QUEUE CONTAINING_RECORD(Csq, DEVICE_EXTENSION, IrpQueue)) -> WaiterQ.mLock) _IRQL_raises_(DISPATCH_LEVEL) VOID NTAPI FltpAcquireMessageWaiterLock(_In_ PIO_CSQ Csq, _Out_ PKIRQL Irql)
Definition: Messaging.c:560
KSPIN_LOCK FIBLock
Definition: router.c:18
struct _LIST_ENTRY * Flink
Definition: typedefs.h:119
void RouterDumpRoutes()
Definition: router.c:20
_Must_inspect_result_ typedef _In_ ULONG _In_ BOOLEAN Target
Definition: iotypes.h:1068
#define STATUS_UNSUCCESSFUL
Definition: udferr_usr.h:132
PNEIGHBOR_CACHE_ENTRY Router
Definition: router.h:19
BOOLEAN AddrIsEqual(PIP_ADDRESS Address1, PIP_ADDRESS Address2)
Definition: address.c:221
_Requires_lock_held_ Interrupt _Releases_lock_ Interrupt _In_ _IRQL_restores_ KIRQL OldIrql
Definition: kefuncs.h:803
Definition: typedefs.h:117
LIST_ENTRY FIBListHead
Definition: router.c:17
IP_ADDRESS Address
Definition: neighbor.h:36
Definition: router.h:14
return STATUS_SUCCESS
Definition: btrfs.c:2938
#define DEBUG_ROUTER
Definition: debug.h:30
PCHAR A2S(PIP_ADDRESS Address)
Definition: address.c:17

Referenced by InfoTdiSetRoute(), and IPRemoveInterfaceRoute().

◆ RouterRemoveRoutesForInterface()

VOID RouterRemoveRoutesForInterface ( PIP_INTERFACE  Interface)

Definition at line 341 of file router.c.

342 {
343  KIRQL OldIrql;
344  PLIST_ENTRY CurrentEntry;
345  PLIST_ENTRY NextEntry;
346  PFIB_ENTRY Current;
347 
349 
350  CurrentEntry = FIBListHead.Flink;
351  while (CurrentEntry != &FIBListHead) {
352  NextEntry = CurrentEntry->Flink;
353  Current = CONTAINING_RECORD(CurrentEntry, FIB_ENTRY, ListEntry);
354 
355  if (Interface == Current->Router->Interface)
356  DestroyFIBE(Current);
357 
358  CurrentEntry = NextEntry;
359  }
360 
362 }
VOID DestroyFIBE(PFIB_ENTRY FIBE)
Definition: router.c:57
VOID TcpipReleaseSpinLock(PKSPIN_LOCK SpinLock, KIRQL Irql)
Definition: lock.c:26
VOID TcpipAcquireSpinLock(PKSPIN_LOCK SpinLock, PKIRQL Irql)
Definition: lock.c:18
UCHAR KIRQL
Definition: env_spec_w32.h:591
PFLT_MESSAGE_WAITER_QUEUE CONTAINING_RECORD(Csq, DEVICE_EXTENSION, IrpQueue)) -> WaiterQ.mLock) _IRQL_raises_(DISPATCH_LEVEL) VOID NTAPI FltpAcquireMessageWaiterLock(_In_ PIO_CSQ Csq, _Out_ PKIRQL Irql)
Definition: Messaging.c:560
KSPIN_LOCK FIBLock
Definition: router.c:18
struct _LIST_ENTRY * Flink
Definition: typedefs.h:119
IN PVOID IN PVOID IN USHORT IN USHORT IN PINTERFACE Interface
Definition: pci.h:359
PNEIGHBOR_CACHE_ENTRY Router
Definition: router.h:19
_Requires_lock_held_ Interrupt _Releases_lock_ Interrupt _In_ _IRQL_restores_ KIRQL OldIrql
Definition: kefuncs.h:803
Definition: typedefs.h:117
PIP_INTERFACE Interface
Definition: neighbor.h:33
LIST_ENTRY FIBListHead
Definition: router.c:17
Definition: router.h:14

Referenced by ReconfigureAdapter().

◆ RouterShutdown()

NTSTATUS RouterShutdown ( VOID  )

Definition at line 500 of file router.c.

507 {
508  KIRQL OldIrql;
509 
510  TI_DbgPrint(DEBUG_ROUTER, ("Called.\n"));
511 
512  /* Clear Forward Information Base */
514  DestroyFIBEs();
516 
517  return STATUS_SUCCESS;
518 }
#define TI_DbgPrint(_t_, _x_)
Definition: debug.h:45
VOID TcpipReleaseSpinLock(PKSPIN_LOCK SpinLock, KIRQL Irql)
Definition: lock.c:26
VOID TcpipAcquireSpinLock(PKSPIN_LOCK SpinLock, PKIRQL Irql)
Definition: lock.c:18
UCHAR KIRQL
Definition: env_spec_w32.h:591
VOID DestroyFIBEs(VOID)
Definition: router.c:77
KSPIN_LOCK FIBLock
Definition: router.c:18
_Requires_lock_held_ Interrupt _Releases_lock_ Interrupt _In_ _IRQL_restores_ KIRQL OldIrql
Definition: kefuncs.h:803
return STATUS_SUCCESS
Definition: btrfs.c:2938
#define DEBUG_ROUTER
Definition: debug.h:30

Referenced by IPShutdown().

◆ RouterStartup()

NTSTATUS RouterStartup ( VOID  )

Definition at line 482 of file router.c.

489 {
490  TI_DbgPrint(DEBUG_ROUTER, ("Called.\n"));
491 
492  /* Initialize the Forward Information Base */
495 
496  return STATUS_SUCCESS;
497 }
#define TI_DbgPrint(_t_, _x_)
Definition: debug.h:45
KSPIN_LOCK FIBLock
Definition: router.c:18
LIST_ENTRY FIBListHead
Definition: router.c:17
#define InitializeListHead(ListHead)
Definition: env_spec_w32.h:944
VOID TcpipInitializeSpinLock(PKSPIN_LOCK SpinLock)
Definition: lock.c:14
return STATUS_SUCCESS
Definition: btrfs.c:2938
#define DEBUG_ROUTER
Definition: debug.h:30

Referenced by IPStartup().