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
ntphdr.c
00001 #include <stdint.h> 00002 00003 #include "net.h" 00004 00005 static char* hdrPtrFlags (char* pPacket) { return pPacket + 0; } //1 00006 static char* hdrPtrStratum (char* pPacket) { return pPacket + 1; } //1 00007 static char* hdrPtrPoll (char* pPacket) { return pPacket + 2; } //1 00008 static char* hdrPtrPrecision (char* pPacket) { return pPacket + 3; } //1 00009 static char* hdrPtrRootDelay (char* pPacket) { return pPacket + 4; } //4 00010 static char* hdrPtrDispersion (char* pPacket) { return pPacket + 8; } //4 00011 char* NtpHdrPtrRefIdentifier(char* pPacket) { return pPacket + 12; } //4 00012 static char* hdrPtrRefTimeStamp (char* pPacket) { return pPacket + 16; } //8 00013 static char* hdrPtrOriTimeStamp (char* pPacket) { return pPacket + 24; } //8 00014 static char* hdrPtrRecTimeStamp (char* pPacket) { return pPacket + 32; } //8 00015 static char* hdrPtrTraTimeStamp (char* pPacket) { return pPacket + 40; } //8 00016 const int NTP_HEADER_LENGTH = 48; 00017 00018 00019 uint8_t NtpHdrGetLI (char* pPacket) { return *hdrPtrFlags (pPacket) >> 6 ; } 00020 uint8_t NtpHdrGetVersion (char* pPacket) { return (*hdrPtrFlags (pPacket) >> 3) & 0x7; } 00021 uint8_t NtpHdrGetMode (char* pPacket) { return *hdrPtrFlags (pPacket) & 0x7; } 00022 uint8_t NtpHdrGetStratum (char* pPacket) { return *hdrPtrStratum (pPacket); } 00023 int8_t NtpHdrGetPoll (char* pPacket) { return *hdrPtrPoll (pPacket); } 00024 int8_t NtpHdrGetPrecision (char* pPacket) { return *hdrPtrPrecision (pPacket); } 00025 uint32_t NtpHdrGetRootDelay (char* pPacket) { uint32_t r; NetInvert32(&r, hdrPtrRootDelay (pPacket)); return r; } 00026 uint32_t NtpHdrGetDispersion (char* pPacket) { uint32_t r; NetInvert32(&r, hdrPtrDispersion (pPacket)); return r; } 00027 uint64_t NtpHdrGetRefTimeStamp(char* pPacket) { uint64_t r; NetInvert64(&r, hdrPtrRefTimeStamp(pPacket)); return r; } 00028 uint64_t NtpHdrGetOriTimeStamp(char* pPacket) { uint64_t r; NetInvert64(&r, hdrPtrOriTimeStamp(pPacket)); return r; } 00029 uint64_t NtpHdrGetRecTimeStamp(char* pPacket) { uint64_t r; NetInvert64(&r, hdrPtrRecTimeStamp(pPacket)); return r; } 00030 uint64_t NtpHdrGetTraTimeStamp(char* pPacket) { uint64_t r; NetInvert64(&r, hdrPtrTraTimeStamp(pPacket)); return r; } 00031 00032 void NtpHdrSetLI (char* pPacket, uint8_t value) { char* p = hdrPtrFlags (pPacket); *p &= 0x3F; *p |= (value << 6); } 00033 void NtpHdrSetVersion (char* pPacket, uint8_t value) { char* p = hdrPtrFlags (pPacket); *p &= 0xC7; *p |= (value << 3); } 00034 void NtpHdrSetMode (char* pPacket, uint8_t value) { char* p = hdrPtrFlags (pPacket); *p &= 0xF8; *p |= value; } 00035 void NtpHdrSetStratum (char* pPacket, uint8_t value) { *hdrPtrStratum (pPacket) = value; } 00036 void NtpHdrSetPoll (char* pPacket, int8_t value) { *hdrPtrPoll (pPacket) = value; } 00037 void NtpHdrSetPrecision (char* pPacket, int8_t value) { *hdrPtrPrecision (pPacket) = value; } 00038 void NtpHdrSetRootDelay (char* pPacket, uint32_t value) { NetInvert32(hdrPtrRootDelay (pPacket), &value); } 00039 void NtpHdrSetDispersion (char* pPacket, uint32_t value) { NetInvert32(hdrPtrDispersion (pPacket), &value); } 00040 void NtpHdrSetRefTimeStamp(char* pPacket, uint64_t value) { NetInvert64(hdrPtrRefTimeStamp(pPacket), &value); } 00041 void NtpHdrSetOriTimeStamp(char* pPacket, uint64_t value) { NetInvert64(hdrPtrOriTimeStamp(pPacket), &value); } 00042 void NtpHdrSetRecTimeStamp(char* pPacket, uint64_t value) { NetInvert64(hdrPtrRecTimeStamp(pPacket), &value); } 00043 void NtpHdrSetTraTimeStamp(char* pPacket, uint64_t value) { NetInvert64(hdrPtrTraTimeStamp(pPacket), &value); }
Generated on Tue Jul 12 2022 18:53:40 by 1.7.2