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
Diff: eth/ar4.cpp
- Revision:
- 50:492f2d2954e4
- Parent:
- 49:1a6336f2b3f9
- Child:
- 51:007bd938f2c3
diff -r 1a6336f2b3f9 -r 492f2d2954e4 eth/ar4.cpp --- 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); }