diff --git a/reactos/drivers/lib/ip/network/neighbor.c b/reactos/drivers/lib/ip/network/neighbor.c index c46b7fc1e46..a71dfab8d7a 100644 --- a/reactos/drivers/lib/ip/network/neighbor.c +++ b/reactos/drivers/lib/ip/network/neighbor.c @@ -129,7 +129,7 @@ VOID NCETimeout( /* FIXME: Probe state */ TI_DbgPrint(DEBUG_NCACHE, ("NCE probe state.\n")); break; - + default: /* Should not happen since the event timer is not used in the other states */ TI_DbgPrint(MIN_TRACE, ("Invalid NCE state (%d).\n", NCE->State)); diff --git a/reactos/drivers/lib/ip/network/route.c b/reactos/drivers/lib/ip/network/route.c index 3eba785ce83..279385921ac 100644 --- a/reactos/drivers/lib/ip/network/route.c +++ b/reactos/drivers/lib/ip/network/route.c @@ -607,17 +607,4 @@ VOID RouteInvalidateNCE( TcpipReleaseSpinLock(&RouteCacheLock, OldIrql); } -NTSTATUS -RouteFriendlyAddRoute( PIPROUTE_ENTRY ire ) { - KIRQL OldIrql; - - - /* Find IF */ - TcpipAcquireSpinLock(&InterfaceListLock, &OldIrql); - //RouteAddRouteToDestination(&Dest,Nte,If,Nce); - TcpipReleaseSpinLock(&InterfaceListLock, OldIrql); - - return STATUS_SUCCESS; -} - /* EOF */ diff --git a/reactos/drivers/lib/ip/network/router.c b/reactos/drivers/lib/ip/network/router.c index b3d9d763419..5414506ab65 100644 --- a/reactos/drivers/lib/ip/network/router.c +++ b/reactos/drivers/lib/ip/network/router.c @@ -227,7 +227,7 @@ PNEIGHBOR_CACHE_ENTRY RouterGetRoute(PIP_ADDRESS Destination) PLIST_ENTRY NextEntry; PFIB_ENTRY Current; UCHAR State, BestState = 0; - UINT Length, BestLength = 0; + UINT Length, BestLength = 0, MaskLength; PNEIGHBOR_CACHE_ENTRY NCE, BestNCE = NULL; TI_DbgPrint(DEBUG_ROUTER, ("Called. Destination (0x%X)\n", Destination)); @@ -244,25 +244,18 @@ PNEIGHBOR_CACHE_ENTRY RouterGetRoute(PIP_ADDRESS Destination) NCE = Current->Router; State = NCE->State; - if (Destination) - Length = CommonPrefixLength(Destination, &NCE->Address); - else - Length = 0; + Length = CommonPrefixLength(Destination, &Current->NetworkAddress); + MaskLength = AddrCountPrefixBits(&Current->Netmask); + + TI_DbgPrint(DEBUG_ROUTER,("This-Route: %s (Sharing %d bits)\n", + A2S(&NCE->Address), Length)); - if (BestNCE) { - if ((State > BestState) || - ((State == BestState) && - (Length > BestLength))) { - /* This seems to be a better router */ - BestNCE = NCE; - BestLength = Length; - BestState = State; - } - } else { - /* First suitable router found, save it */ + if(Length >= MaskLength && Length > BestLength) { + /* This seems to be a better router */ BestNCE = NCE; BestLength = Length; BestState = State; + TI_DbgPrint(DEBUG_ROUTER,("Route selected\n")); } CurrentEntry = NextEntry; @@ -270,6 +263,12 @@ PNEIGHBOR_CACHE_ENTRY RouterGetRoute(PIP_ADDRESS Destination) TcpipReleaseSpinLock(&FIBLock, OldIrql); + if( BestNCE ) { + TI_DbgPrint(DEBUG_ROUTER,("Routing to %s\n", A2S(&BestNCE->Address))); + } else { + TI_DbgPrint(DEBUG_ROUTER,("Packet won't be routed\n")); + } + return BestNCE; } @@ -349,11 +348,8 @@ PFIB_ENTRY RouterCreateRoute( PFIB_ENTRY FIBE; /* The NCE references RouterAddress. The NCE is referenced for us */ - NCE = NBAddNeighbor(Interface, - RouterAddress, - NULL, - Interface->AddressLength, - NUD_PROBE); + NCE = NBFindOrCreateNeighbor(Interface, RouterAddress); + if (!NCE) { /* Not enough free resources */ return NULL;