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

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers ntphdr.c Source File

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);                        }