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/mac.c
- Revision:
- 105:ef2dd21d808c
- Parent:
- 61:aad055f1b0d1
- Child:
- 143:8cec8f08dc54
--- a/eth/mac.c Wed Jan 09 14:24:25 2019 +0000 +++ b/eth/mac.c Fri Jan 11 14:41:50 2019 +0000 @@ -60,18 +60,30 @@ } case 0x01: //Multicast IP4 { - p++; if (*p != 0x00) return DO_NOTHING; - p++; if (*p != 0x5e) return DO_NOTHING; - p++; if (*p != 0x00) return DO_NOTHING; - p++; if (*p != 0x00) return DO_NOTHING; + p++; if (*p != 0x00) return DO_NOTHING; //01 00 + p++; if (*p != 0x5e) return DO_NOTHING; //01 00 5E + p++; if (*p != 0x00) return DO_NOTHING; //01 00 5E 00 p++; - switch (*p) //01 00 5E 00 00 xx + switch (*p) { - case 0x01: return MULTICAST_NODE; - case 0x02: return MULTICAST_ROUTER; - case 0xfb: return MULTICAST_MDNS; - case 0xfc: return MULTICAST_LLMNR; - default: return DO_NOTHING; + case 0x00: //01 00 5E 00 00 + p++; + switch (*p) //01 00 5E 00 00 xx + { + case 0x01: return MULTICAST_NODE; + case 0x02: return MULTICAST_ROUTER; + case 0xfb: return MULTICAST_MDNS; + case 0xfc: return MULTICAST_LLMNR; + default: return DO_NOTHING; + } + case 0x01: //01 00 5E 00 01 + p++; + switch (*p) //01 00 5E 00 01 xx + { + case 0x01: return MULTICAST_NTP; + default: return DO_NOTHING; + } + default: return DO_NOTHING; } } case 0x33: //Multicast IP6 @@ -87,14 +99,26 @@ { case 0x00: //33 33 00 00 { - p++; if (*p != 0x00) return DO_NOTHING; - p++; - switch (*p) //33 33 00 00 00 xx + p++; + switch (*p) { - case 0x01: return MULTICAST_NODE; - case 0x02: return MULTICAST_ROUTER; - case 0xfb: return MULTICAST_MDNS; - default: return DO_NOTHING; + case 0x00: + p++; + switch (*p) //33 33 00 00 00 xx + { + case 0x01: return MULTICAST_NODE; + case 0x02: return MULTICAST_ROUTER; + case 0xfb: return MULTICAST_MDNS; + default: return DO_NOTHING; + } + case 0x01: + p++; + switch (*p) //33 33 00 00 01 xx + { + case 0x01: return MULTICAST_NTP; + default: return DO_NOTHING; + } + default: return DO_NOTHING; } } case 0x01: //33 33 00 01 @@ -147,6 +171,7 @@ case MULTICAST_ROUTER: *p++ = 0x01; *p++ = 0x00; *p++ = 0x5e; *p++ = 0x00; *p++ = 0x00; *p = 0x02; break; case MULTICAST_MDNS: *p++ = 0x01; *p++ = 0x00; *p++ = 0x5e; *p++ = 0x00; *p++ = 0x00; *p = 0xfb; break; case MULTICAST_LLMNR: *p++ = 0x01; *p++ = 0x00; *p++ = 0x5e; *p++ = 0x00; *p++ = 0x00; *p = 0xfc; break; + case MULTICAST_NTP: *p++ = 0x01; *p++ = 0x00; *p++ = 0x5e; *p++ = 0x00; *p++ = 0x01; *p = 0x01; break; } } else @@ -157,6 +182,7 @@ case MULTICAST_ROUTER: *p++ = 0x33; *p++ = 0x33; *p++ = 0x00; *p++ = 0x00; *p++ = 0x00; *p = 0x02; break; case MULTICAST_MDNS: *p++ = 0x33; *p++ = 0x33; *p++ = 0x00; *p++ = 0x00; *p++ = 0x00; *p = 0xfb; break; case MULTICAST_LLMNR: *p++ = 0x33; *p++ = 0x33; *p++ = 0x00; *p++ = 0x01; *p++ = 0x00; *p = 0x03; break; + case MULTICAST_NTP: *p++ = 0x33; *p++ = 0x33; *p++ = 0x00; *p++ = 0x00; *p++ = 0x01; *p = 0x01; break; } } }