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

Committer:
andrewboyson
Date:
Thu May 20 14:32:52 2021 +0000
Revision:
200:5acbc41bf469
Parent:
138:5ff0c7069300
Increased number of arp entries from 20 to 30 to accommodate the number of WIZ devices plus a few incoming port 80 calls from the internet.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
andrewboyson 138:5ff0c7069300 1 #include <stdint.h>
andrewboyson 138:5ff0c7069300 2
andrewboyson 138:5ff0c7069300 3 #include "net.h"
andrewboyson 138:5ff0c7069300 4
andrewboyson 138:5ff0c7069300 5 static char* hdrPtrFlags (char* pPacket) { return pPacket + 0; } //1
andrewboyson 138:5ff0c7069300 6 static char* hdrPtrStratum (char* pPacket) { return pPacket + 1; } //1
andrewboyson 138:5ff0c7069300 7 static char* hdrPtrPoll (char* pPacket) { return pPacket + 2; } //1
andrewboyson 138:5ff0c7069300 8 static char* hdrPtrPrecision (char* pPacket) { return pPacket + 3; } //1
andrewboyson 138:5ff0c7069300 9 static char* hdrPtrRootDelay (char* pPacket) { return pPacket + 4; } //4
andrewboyson 138:5ff0c7069300 10 static char* hdrPtrDispersion (char* pPacket) { return pPacket + 8; } //4
andrewboyson 138:5ff0c7069300 11 char* NtpHdrPtrRefIdentifier(char* pPacket) { return pPacket + 12; } //4
andrewboyson 138:5ff0c7069300 12 static char* hdrPtrRefTimeStamp (char* pPacket) { return pPacket + 16; } //8
andrewboyson 138:5ff0c7069300 13 static char* hdrPtrOriTimeStamp (char* pPacket) { return pPacket + 24; } //8
andrewboyson 138:5ff0c7069300 14 static char* hdrPtrRecTimeStamp (char* pPacket) { return pPacket + 32; } //8
andrewboyson 138:5ff0c7069300 15 static char* hdrPtrTraTimeStamp (char* pPacket) { return pPacket + 40; } //8
andrewboyson 138:5ff0c7069300 16 const int NTP_HEADER_LENGTH = 48;
andrewboyson 138:5ff0c7069300 17
andrewboyson 138:5ff0c7069300 18
andrewboyson 138:5ff0c7069300 19 uint8_t NtpHdrGetLI (char* pPacket) { return *hdrPtrFlags (pPacket) >> 6 ; }
andrewboyson 138:5ff0c7069300 20 uint8_t NtpHdrGetVersion (char* pPacket) { return (*hdrPtrFlags (pPacket) >> 3) & 0x7; }
andrewboyson 138:5ff0c7069300 21 uint8_t NtpHdrGetMode (char* pPacket) { return *hdrPtrFlags (pPacket) & 0x7; }
andrewboyson 138:5ff0c7069300 22 uint8_t NtpHdrGetStratum (char* pPacket) { return *hdrPtrStratum (pPacket); }
andrewboyson 138:5ff0c7069300 23 int8_t NtpHdrGetPoll (char* pPacket) { return *hdrPtrPoll (pPacket); }
andrewboyson 138:5ff0c7069300 24 int8_t NtpHdrGetPrecision (char* pPacket) { return *hdrPtrPrecision (pPacket); }
andrewboyson 138:5ff0c7069300 25 uint32_t NtpHdrGetRootDelay (char* pPacket) { uint32_t r; NetInvert32(&r, hdrPtrRootDelay (pPacket)); return r; }
andrewboyson 138:5ff0c7069300 26 uint32_t NtpHdrGetDispersion (char* pPacket) { uint32_t r; NetInvert32(&r, hdrPtrDispersion (pPacket)); return r; }
andrewboyson 138:5ff0c7069300 27 uint64_t NtpHdrGetRefTimeStamp(char* pPacket) { uint64_t r; NetInvert64(&r, hdrPtrRefTimeStamp(pPacket)); return r; }
andrewboyson 138:5ff0c7069300 28 uint64_t NtpHdrGetOriTimeStamp(char* pPacket) { uint64_t r; NetInvert64(&r, hdrPtrOriTimeStamp(pPacket)); return r; }
andrewboyson 138:5ff0c7069300 29 uint64_t NtpHdrGetRecTimeStamp(char* pPacket) { uint64_t r; NetInvert64(&r, hdrPtrRecTimeStamp(pPacket)); return r; }
andrewboyson 138:5ff0c7069300 30 uint64_t NtpHdrGetTraTimeStamp(char* pPacket) { uint64_t r; NetInvert64(&r, hdrPtrTraTimeStamp(pPacket)); return r; }
andrewboyson 138:5ff0c7069300 31
andrewboyson 138:5ff0c7069300 32 void NtpHdrSetLI (char* pPacket, uint8_t value) { char* p = hdrPtrFlags (pPacket); *p &= 0x3F; *p |= (value << 6); }
andrewboyson 138:5ff0c7069300 33 void NtpHdrSetVersion (char* pPacket, uint8_t value) { char* p = hdrPtrFlags (pPacket); *p &= 0xC7; *p |= (value << 3); }
andrewboyson 138:5ff0c7069300 34 void NtpHdrSetMode (char* pPacket, uint8_t value) { char* p = hdrPtrFlags (pPacket); *p &= 0xF8; *p |= value; }
andrewboyson 138:5ff0c7069300 35 void NtpHdrSetStratum (char* pPacket, uint8_t value) { *hdrPtrStratum (pPacket) = value; }
andrewboyson 138:5ff0c7069300 36 void NtpHdrSetPoll (char* pPacket, int8_t value) { *hdrPtrPoll (pPacket) = value; }
andrewboyson 138:5ff0c7069300 37 void NtpHdrSetPrecision (char* pPacket, int8_t value) { *hdrPtrPrecision (pPacket) = value; }
andrewboyson 138:5ff0c7069300 38 void NtpHdrSetRootDelay (char* pPacket, uint32_t value) { NetInvert32(hdrPtrRootDelay (pPacket), &value); }
andrewboyson 138:5ff0c7069300 39 void NtpHdrSetDispersion (char* pPacket, uint32_t value) { NetInvert32(hdrPtrDispersion (pPacket), &value); }
andrewboyson 138:5ff0c7069300 40 void NtpHdrSetRefTimeStamp(char* pPacket, uint64_t value) { NetInvert64(hdrPtrRefTimeStamp(pPacket), &value); }
andrewboyson 138:5ff0c7069300 41 void NtpHdrSetOriTimeStamp(char* pPacket, uint64_t value) { NetInvert64(hdrPtrOriTimeStamp(pPacket), &value); }
andrewboyson 138:5ff0c7069300 42 void NtpHdrSetRecTimeStamp(char* pPacket, uint64_t value) { NetInvert64(hdrPtrRecTimeStamp(pPacket), &value); }
andrewboyson 138:5ff0c7069300 43 void NtpHdrSetTraTimeStamp(char* pPacket, uint64_t value) { NetInvert64(hdrPtrTraTimeStamp(pPacket), &value); }