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
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; }
Generated on Tue Jul 12 2022 18:53:40 by 1.7.2