Build - Removed -Werror from kmode to allow scan-build to be run
[tpg/acess2.git] / Modules / IPStack / arp.c
index 1e5bb07..e0912ad 100644 (file)
@@ -42,7 +42,7 @@ struct sARP_Cache6 {
  int   giARP_Cache6Space;
 tMutex glARP_Cache6;
 #endif
- int   giARP_LastUpdateID = 0;
+volatile int   giARP_LastUpdateID = 0;
 
 // === CODE ===
 /**
@@ -134,10 +134,14 @@ tMacAddr ARP_Resolve4(tInterface *Interface, tIPv4 Address)
        // Wait for a reply
        for(;;)
        {
-               while(lastID == giARP_LastUpdateID && now() < timeout)
+               while(lastID == giARP_LastUpdateID && now() < timeout) {
                        Threads_Yield();
+               }
                
-               if( now() >= timeout )  break;  // Timeout
+               if( now() >= timeout ) {
+                       Log_Log("ARP4", "Timeout");
+                       break;  // Timeout
+               }
                
                lastID = giARP_LastUpdateID;
                
@@ -147,6 +151,10 @@ tMacAddr ARP_Resolve4(tInterface *Interface, tIPv4 Address)
                        if(gaARP_Cache4[i].IP.L != Address.L)   continue;
                        
                        Mutex_Release( &glARP_Cache4 );
+                       Log_Debug("ARP4", "Return %02x:%02x:%02x:%02x:%02x:%02x",
+                               gaARP_Cache4[i].MAC.B[0], gaARP_Cache4[i].MAC.B[1], 
+                               gaARP_Cache4[i].MAC.B[2], gaARP_Cache4[i].MAC.B[3], 
+                               gaARP_Cache4[i].MAC.B[4], gaARP_Cache4[i].MAC.B[5]);
                        return gaARP_Cache4[i].MAC;
                }
                Mutex_Release( &glARP_Cache4 );
@@ -182,7 +190,6 @@ void ARP_UpdateCache4(tIPv4 SWAddr, tMacAddr HWAddr)
                        i = free;
                else
                        i = oldest;
-               gaARP_Cache4[i].IP = SWAddr;
        }
        
        Log_Log("ARP4", "Caching %i.%i.%i.%i (%02x:%02x:%02x:%02x:%02x:%02x) in %i",
@@ -191,6 +198,7 @@ void ARP_UpdateCache4(tIPv4 SWAddr, tMacAddr HWAddr)
                i
                );
                
+       gaARP_Cache4[i].IP = SWAddr;
        gaARP_Cache4[i].MAC = HWAddr;
        gaARP_Cache4[i].LastUpdate = now();
        giARP_LastUpdateID ++;

UCC git Repository :: git.ucc.asn.au