- Fix some typos from my last commit
[reactos.git] / reactos / lib / drivers / ip / network / router.c
index 9ad5847..c2b79a2 100644 (file)
@@ -99,37 +99,41 @@ VOID DestroyFIBEs(
 }
 
 
-UINT CountFIBs() {
+UINT CountFIBs(PIP_INTERFACE IF) {
     UINT FibCount = 0;
     PLIST_ENTRY CurrentEntry;
     PLIST_ENTRY NextEntry;
+    PFIB_ENTRY Current;
 
-    /* Search the list and remove every FIB entry we find */
     CurrentEntry = FIBListHead.Flink;
     while (CurrentEntry != &FIBListHead) {
         NextEntry = CurrentEntry->Flink;
+        Current = CONTAINING_RECORD(CurrentEntry, FIB_ENTRY, ListEntry);
+        if (Current->Router->Interface == IF)
+           FibCount++;
         CurrentEntry = NextEntry;
-       FibCount++;
     }
 
     return FibCount;
 }
 
 
-UINT CopyFIBs( PFIB_ENTRY Target ) {
+UINT CopyFIBs( PIP_INTERFACE IF, PFIB_ENTRY Target ) {
     UINT FibCount = 0;
     PLIST_ENTRY CurrentEntry;
     PLIST_ENTRY NextEntry;
     PFIB_ENTRY Current;
 
-    /* Search the list and remove every FIB entry we find */
     CurrentEntry = FIBListHead.Flink;
     while (CurrentEntry != &FIBListHead) {
         NextEntry = CurrentEntry->Flink;
        Current = CONTAINING_RECORD(CurrentEntry, FIB_ENTRY, ListEntry);
-       Target[FibCount] = *Current;
+        if (Current->Router->Interface == IF)
+        {
+           Target[FibCount] = *Current;
+           FibCount++;
+        }
         CurrentEntry = NextEntry;
-       FibCount++;
     }
 
     return FibCount;
@@ -219,7 +223,7 @@ PFIB_ENTRY RouterAddRoute(
         return NULL;
     }
 
-    INIT_TAG(Router, TAG('R','O','U','T'));
+    INIT_TAG(Router, 'TUOR');
 
     RtlCopyMemory( &FIBE->NetworkAddress, NetworkAddress,
                   sizeof(FIBE->NetworkAddress) );
@@ -274,7 +278,8 @@ PNEIGHBOR_CACHE_ENTRY RouterGetRoute(PIP_ADDRESS Destination)
        TI_DbgPrint(DEBUG_ROUTER,("This-Route: %s (Sharing %d bits)\n",
                                  A2S(&NCE->Address), Length));
 
-       if(Length >= MaskLength && (Length > BestLength || !BestLength)) {
+       if(Length >= MaskLength && (Length > BestLength || !BestNCE) &&
+           (!(State & NUD_STALE) || !BestNCE)) {
            /* This seems to be a better router */
            BestNCE    = NCE;
            BestLength = Length;
@@ -415,7 +420,6 @@ PFIB_ENTRY RouterCreateRoute(
  */
 {
     KIRQL OldIrql;
-    PFIB_ENTRY FIBE;
     PLIST_ENTRY CurrentEntry;
     PLIST_ENTRY NextEntry;
     PFIB_ENTRY Current;
@@ -450,13 +454,7 @@ PFIB_ENTRY RouterCreateRoute(
         return NULL;
     }
 
-    FIBE = RouterAddRoute(NetworkAddress, Netmask, NCE, Metric);
-    if (!FIBE) {
-        /* Not enough free resources */
-        NBRemoveNeighbor(NCE);
-    }
-
-    return FIBE;
+    return RouterAddRoute(NetworkAddress, Netmask, NCE, Metric);
 }