#include "precomp.h"
Go to the source code of this file.
◆ CommonPrefixLength()
Definition at line 172 of file router.c.
185{
190
192
193
194
195
198 else
200
203
204
205 for (
i = 0;
i <
Size && Addr1[
i] == Addr2[
i];
i++);
206 if(
i ==
Size )
return 8 *
i;
207
208
209 Bitmask = 0x80;
210 for (
j = 0; (Addr1[
i] & Bitmask) == (Addr2[
i] & Bitmask);
j++)
211 Bitmask >>= 1;
212
214
216}
#define TI_DbgPrint(_t_, _x_)
USHORT IPv6_RAW_ADDRESS[8]
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint GLint GLint j
union IP_ADDRESS::@1101 Address
IPv4_RAW_ADDRESS IPv4Address
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_DEVICE_PROPERTY_DATA _In_ DEVPROPTYPE _In_ ULONG Size
Referenced by RouterGetRoute().
◆ CopyFIBs()
Definition at line 150 of file router.c.
150 {
155
158 NextEntry = CurrentEntry->
Flink;
161 {
162 Target[FibCount] = *Current;
163 FibCount++;
164 }
165 CurrentEntry = NextEntry;
166 }
167
168 return FibCount;
169}
PNEIGHBOR_CACHE_ENTRY Router
struct _LIST_ENTRY * Flink
#define CONTAINING_RECORD(address, type, field)
Referenced by InfoTdiQueryGetRouteTable().
◆ CountFIBs()
◆ DestroyFIBE()
◆ DestroyFIBEs()
Definition at line 107 of file router.c.
114{
118
119
122 NextEntry = CurrentEntry->
Flink;
124
126 CurrentEntry = NextEntry;
127 }
128}
VOID DestroyFIBE(PFIB_ENTRY FIBE)
Referenced by RouterShutdown().
◆ FreeFIB()
Definition at line 75 of file router.c.
82{
84}
#define ExFreePoolWithTag(_P, _T)
_Must_inspect_result_ _In_ WDFCOLLECTION _In_ WDFOBJECT Object
Referenced by DestroyFIBE().
◆ ProcessAutoMetric()
Definition at line 21 of file router.c.
23{
25 return 1;
26
29
30
32 return 5;
34 return 10;
36 return 20;
38 return 25;
40 return 30;
42 return 40;
43 else
44 return 50;
45}
_Must_inspect_result_ _In_ WDFDEVICE _In_ LPCGUID _Out_ PINTERFACE Interface
Referenced by RouterCreateRoute().
◆ RouteGetRouteToDestination()
Definition at line 330 of file router.c.
342{
345
347
349
350#if 0
352 PrintTree(RouteCache);
353#endif
354
355
358
360 } else {
361
363 }
364
365 if( NCE )
367
368 return NCE;
369}
PCHAR A2S(PIP_ADDRESS Address)
_In_ PUNICODE_STRING _Inout_ PUNICODE_STRING Destination
PNEIGHBOR_CACHE_ENTRY NBFindOrCreateNeighbor(PIP_INTERFACE Interface, PIP_ADDRESS Address, BOOLEAN NoTimeout)
PIP_INTERFACE FindOnLinkInterface(PIP_ADDRESS Address)
PNEIGHBOR_CACHE_ENTRY RouterGetRoute(PIP_ADDRESS Destination)
Referenced by DispTdiQueryIpHwAddress(), ICMPReply(), RawIPSendDatagram(), TCPConnect(), TCPSendDataCallback(), and UDPSendDatagram().
◆ RouterAddRoute()
Definition at line 219 of file router.c.
238{
240
242 "Router (0x%X) Metric (%d).\n",
NetworkAddress, Netmask, Router, Metric));
243
248
250 if (!FIBE) {
253 }
254
261
262
264
265 return FIBE;
266}
VOID TcpipInterlockedInsertTailList(PLIST_ENTRY ListHead, PLIST_ENTRY Item, PKSPIN_LOCK Lock)
#define ExAllocatePoolWithTag(hernya, size, tag)
_Must_inspect_result_ _Out_ PNDIS_STATUS _Outptr_result_bytebuffer_to_ NetworkAddressLength PVOID * NetworkAddress
IP_ADDRESS NetworkAddress
#define RtlCopyMemory(Destination, Source, Length)
Referenced by IPAddInterfaceRoute(), and RouterCreateRoute().
◆ RouterCreateRoute()
Definition at line 451 of file router.c.
468{
474
476
479 NextEntry = CurrentEntry->
Flink;
481
483
487 {
491 }
492
493 CurrentEntry = NextEntry;
494 }
495
497
498
500
501 if (!NCE) {
502
504 }
505
507}
BOOLEAN AddrIsEqual(PIP_ADDRESS Address1, PIP_ADDRESS Address2)
VOID TcpipReleaseSpinLock(PKSPIN_LOCK SpinLock, KIRQL Irql)
VOID TcpipAcquireSpinLock(PKSPIN_LOCK SpinLock, PKIRQL Irql)
UINT ProcessAutoMetric(_In_ PIP_INTERFACE Interface)
PFIB_ENTRY RouterAddRoute(PIP_ADDRESS NetworkAddress, PIP_ADDRESS Netmask, PNEIGHBOR_CACHE_ENTRY Router, UINT Metric)
_Requires_lock_held_ Interrupt _Releases_lock_ Interrupt _In_ _IRQL_restores_ KIRQL OldIrql
Referenced by InfoTdiSetRoute(), and ReadIpConfiguration().
◆ RouterDumpRoutes()
Definition at line 49 of file router.c.
50{
55
57
60 NextEntry = CurrentEntry->
Flink;
62
64
68
69 CurrentEntry = NextEntry;
70 }
71
73}
Referenced by RouterRemoveRoute().
◆ RouterGetRoute()
Definition at line 269 of file router.c.
279{
287
289
291
293
296 NextEntry = CurrentEntry->
Flink;
298
301
304
307
308 if(
Length >= MaskLength && (
Length > BestLength || !BestNCE) &&
310
311 BestNCE = NCE;
314 }
315
316 CurrentEntry = NextEntry;
317 }
318
320
321 if( BestNCE ) {
323 } else {
325 }
326
327 return BestNCE;
328}
UINT AddrCountPrefixBits(PIP_ADDRESS Netmask)
_In_ ULONG _In_ ULONG _In_ ULONG Length
UINT CommonPrefixLength(PIP_ADDRESS Address1, PIP_ADDRESS Address2)
Referenced by RouteGetRouteToDestination().
◆ RouterRemoveRoute()
Definition at line 394 of file router.c.
403{
410
414
416
418
421 NextEntry = CurrentEntry->
Flink;
423
425
429 break;
430 }
431
433 CurrentEntry = NextEntry;
434 }
435
439 }
440
442
444
446
448}
VOID RouterDumpRoutes(VOID)
#define STATUS_UNSUCCESSFUL
Referenced by InfoTdiSetRoute(), and IPRemoveInterfaceRoute().
◆ RouterRemoveRoutesForInterface()
◆ RouterShutdown()
◆ RouterStartup()
Definition at line 510 of file router.c.
517{
519
520
523
525}
VOID TcpipInitializeSpinLock(PKSPIN_LOCK SpinLock)
#define InitializeListHead(ListHead)
Referenced by IPStartup().
◆ FIBListHead
◆ FIBLock