X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Modules%2FIPStack%2Farp.c;h=e0912ad8550388756b9d8419f492dc0d9a9961a4;hb=f42e912b8bc615c2009b795ce12d4c54cef4ee8b;hp=1e5bb07389d760b427540499e1268b86376a3efa;hpb=0fdadb5d699b1d0a931e26de4ef9296a9c2bf062;p=tpg%2Facess2.git diff --git a/Modules/IPStack/arp.c b/Modules/IPStack/arp.c index 1e5bb073..e0912ad8 100644 --- a/Modules/IPStack/arp.c +++ b/Modules/IPStack/arp.c @@ -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 ++;