A stack which works with or without an Mbed os library. Provides IPv4 or IPv6 with a full 1500 byte buffer.

Dependents:   oldheating gps motorhome heating

Revision:
50:492f2d2954e4
Parent:
49:1a6336f2b3f9
Child:
51:007bd938f2c3
--- a/eth/ar4.cpp	Thu Nov 02 08:10:55 2017 +0000
+++ b/eth/ar4.cpp	Fri Nov 03 16:19:15 2017 +0000
@@ -15,10 +15,10 @@
 #define SEND_ATTEMPTS      3
 #define RECORDS_COUNT     20
 
-#define STATE_NONE             0
-#define STATE_WANT_MAC_FROM_IP 1
-#define STATE_SENT_MAC_FROM_IP 2
-#define STATE_VALID            3
+#define STATE_EMPTY 0
+#define STATE_WANT  1
+#define STATE_SENT  2
+#define STATE_VALID 3
 
 static uint32_t elapsed = 0;
 struct record
@@ -70,7 +70,7 @@
             Ip4AddressLog(ip);
             Log("\r\n");
         }
-        records[i].state    = STATE_WANT_MAC_FROM_IP;
+        records[i].state    = STATE_WANT;
         records[i].tries    = 0;
         records[i].elapsed  = elapsed;
         return;
@@ -85,7 +85,7 @@
     }
     i = getOldest();
     records[i].ip       = ip;
-    records[i].state    = STATE_WANT_MAC_FROM_IP;
+    records[i].state    = STATE_WANT;
     records[i].tries    = 0;
     records[i].elapsed  = elapsed;
     MacClear(records[i].mac);
@@ -163,10 +163,7 @@
 }
 static void clear(struct record* pr)
 {
-    pr->state = STATE_NONE;
-    pr->tries = 0;
-    pr->ip = 0;
-    MacClear(pr->mac);
+    pr->state = STATE_EMPTY;
 }
 static void clearCache(struct record* pr)
 {
@@ -174,11 +171,11 @@
 }
 static void retry(struct record* pr)
 {
-    if (pr->state == STATE_SENT_MAC_FROM_IP && elapsed > pr->elapsed + REPLY_TIMEOUT)
+    if (pr->state == STATE_SENT && elapsed > pr->elapsed + REPLY_TIMEOUT)
     {
         if (pr->tries < SEND_ATTEMPTS)
         {
-            pr->state   = STATE_WANT_MAC_FROM_IP;
+            pr->state   = STATE_WANT;
             pr->elapsed = elapsed;
             pr->tries++;
         }
@@ -192,7 +189,7 @@
 {
     if (!ArpResolveRequestFlag)
     {
-        if (pr->state == STATE_WANT_MAC_FROM_IP)
+        if (pr->state == STATE_WANT)
         {
             if (Ar4Trace)
             {
@@ -202,7 +199,7 @@
             }
             ArpAddressToResolve = pr->ip;
             ArpResolveRequestFlag = true;
-            pr->state   = STATE_SENT_MAC_FROM_IP;
+            pr->state   = STATE_SENT;
             pr->elapsed = elapsed;
             return;
         }
@@ -226,7 +223,6 @@
 {
     for (int i = 0; i < RECORDS_COUNT; i++)
     {
-    
         struct record* pr = &records[i];
         clear(pr);
     }