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 ip6hdr.c Source File

ip6hdr.c

00001 #include <stdbool.h>
00002 #include <stdint.h>
00003 
00004 #include "net.h"
00005 
00006 char* Ip6HdrPtrVersionTrafficFlow (char* pPacket) { return pPacket +   0; } //4
00007 char* Ip6HdrPtrPayloadLength      (char* pPacket) { return pPacket +   4; } //2
00008 char* Ip6HdrPtrProtocol           (char* pPacket) { return pPacket +   6; } //1
00009 char* Ip6HdrPtrHopLimit           (char* pPacket) { return pPacket +   7; } //1
00010 char* Ip6HdrPtrSrc                (char* pPacket) { return pPacket +   8; } //16
00011 char* Ip6HdrPtrDst                (char* pPacket) { return pPacket +  24; } //16
00012 const int IP6_HEADER_LENGTH = 40;
00013 
00014 int  Ip6HdrGetVersion   (char* pPacket) { int32_t r; NetDirect32(&r, Ip6HdrPtrVersionTrafficFlow(pPacket)); return (r >> 4) & 0x0F; }
00015 int  Ip6HdrGetPayloadLen(char* pPacket) { int16_t r; NetInvert16(&r, Ip6HdrPtrPayloadLength     (pPacket)); return  r;              }
00016 int  Ip6HdrGetProtocol  (char* pPacket) { return                     *Ip6HdrPtrProtocol         (pPacket);                          }
00017 int  Ip6HdrGetHopLimit  (char* pPacket) { return                     *Ip6HdrPtrHopLimit         (pPacket);                          }
00018 
00019 void Ip6HdrSetVersion   (char* pPacket, int value) { value <<= 4; NetDirect32(Ip6HdrPtrVersionTrafficFlow(pPacket), &value); }
00020 void Ip6HdrSetPayloadLen(char* pPacket, int value) {              NetInvert16(Ip6HdrPtrPayloadLength     (pPacket), &value); }
00021 void Ip6HdrSetProtocol  (char* pPacket, int value) {                         *Ip6HdrPtrProtocol          (pPacket) = value;  }
00022 void Ip6HdrSetHopLimit  (char* pPacket, int value) {                         *Ip6HdrPtrHopLimit          (pPacket) = value;  }