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
udp/ntp/ntphdr.c@200:5acbc41bf469, 2021-05-20 (annotated)
- 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?
User | Revision | Line number | New 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); } |