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

Committer:
andrewboyson
Date:
Sat Apr 06 11:20:20 2019 +0000
Revision:
136:8a65abb0dc63
Part way through replacing __packed with byte copy access to the headers.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
andrewboyson 136:8a65abb0dc63 1 #include <stdint.h>
andrewboyson 136:8a65abb0dc63 2
andrewboyson 136:8a65abb0dc63 3 #include "net.h"
andrewboyson 136:8a65abb0dc63 4
andrewboyson 136:8a65abb0dc63 5 char* DhcpHdrPtrOp (char* pPacket) { return pPacket + 0; } //1
andrewboyson 136:8a65abb0dc63 6 char* DhcpHdrPtrHtype (char* pPacket) { return pPacket + 1; } //1
andrewboyson 136:8a65abb0dc63 7 char* DhcpHdrPtrHlen (char* pPacket) { return pPacket + 2; } //1
andrewboyson 136:8a65abb0dc63 8 char* DhcpHdrPtrHops (char* pPacket) { return pPacket + 3; } //1
andrewboyson 136:8a65abb0dc63 9 char* DhcpHdrPtrXid (char* pPacket) { return pPacket + 4; } //4
andrewboyson 136:8a65abb0dc63 10 char* DhcpHdrPtrSecs (char* pPacket) { return pPacket + 8; } //2
andrewboyson 136:8a65abb0dc63 11 char* DhcpHdrPtrFlags (char* pPacket) { return pPacket + 10; } //2
andrewboyson 136:8a65abb0dc63 12 char* DhcpHdrPtrCiaddr(char* pPacket) { return pPacket + 12; } //4
andrewboyson 136:8a65abb0dc63 13 char* DhcpHdrPtrYiaddr(char* pPacket) { return pPacket + 16; } //4
andrewboyson 136:8a65abb0dc63 14 char* DhcpHdrPtrSiaddr(char* pPacket) { return pPacket + 20; } //4
andrewboyson 136:8a65abb0dc63 15 char* DhcpHdrPtrGiaddr(char* pPacket) { return pPacket + 24; } //4
andrewboyson 136:8a65abb0dc63 16 char* DhcpHdrPtrChaddr(char* pPacket) { return pPacket + 28; } //16
andrewboyson 136:8a65abb0dc63 17 char* DhcpHdrPtrLegacy(char* pPacket) { return pPacket + 44; } //192
andrewboyson 136:8a65abb0dc63 18 char* DhcpHdrPtrCookie(char* pPacket) { return pPacket + 236; } //4
andrewboyson 136:8a65abb0dc63 19 const int DHCP_HEADER_LENGTH = 240;
andrewboyson 136:8a65abb0dc63 20
andrewboyson 136:8a65abb0dc63 21 uint8_t DhcpHdrGetOp (char* pPacket) { return *DhcpHdrPtrOp (pPacket); }
andrewboyson 136:8a65abb0dc63 22 uint8_t DhcpHdrGetHtype (char* pPacket) { return *DhcpHdrPtrHtype (pPacket); }
andrewboyson 136:8a65abb0dc63 23 uint8_t DhcpHdrGetHlen (char* pPacket) { return *DhcpHdrPtrHlen (pPacket); }
andrewboyson 136:8a65abb0dc63 24 uint8_t DhcpHdrGetHops (char* pPacket) { return *DhcpHdrPtrHops (pPacket); }
andrewboyson 136:8a65abb0dc63 25 uint32_t DhcpHdrGetXid (char* pPacket) { uint32_t r; NetInvert32(&r, DhcpHdrPtrXid (pPacket)); return r; }
andrewboyson 136:8a65abb0dc63 26 uint16_t DhcpHdrGetSecs (char* pPacket) { uint16_t r; NetInvert16(&r, DhcpHdrPtrSecs (pPacket)); return r; }
andrewboyson 136:8a65abb0dc63 27 uint16_t DhcpHdrGetFlags (char* pPacket) { uint16_t r; NetInvert16(&r, DhcpHdrPtrFlags (pPacket)); return r; }
andrewboyson 136:8a65abb0dc63 28 uint32_t DhcpHdrGetCiaddr(char* pPacket) { uint32_t r; NetDirect32(&r, DhcpHdrPtrCiaddr(pPacket)); return r; }
andrewboyson 136:8a65abb0dc63 29 uint32_t DhcpHdrGetYiaddr(char* pPacket) { uint32_t r; NetDirect32(&r, DhcpHdrPtrYiaddr(pPacket)); return r; }
andrewboyson 136:8a65abb0dc63 30 uint32_t DhcpHdrGetSiaddr(char* pPacket) { uint32_t r; NetDirect32(&r, DhcpHdrPtrSiaddr(pPacket)); return r; }
andrewboyson 136:8a65abb0dc63 31 uint32_t DhcpHdrGetGiaddr(char* pPacket) { uint32_t r; NetDirect32(&r, DhcpHdrPtrGiaddr(pPacket)); return r; }
andrewboyson 136:8a65abb0dc63 32 uint32_t DhcpHdrGetCookie(char* pPacket) { uint32_t r; NetInvert32(&r, DhcpHdrPtrCookie(pPacket)); return r; }
andrewboyson 136:8a65abb0dc63 33
andrewboyson 136:8a65abb0dc63 34 void DhcpHdrSetOp (char* pPacket, uint8_t value) { *DhcpHdrPtrOp (pPacket) = value; }
andrewboyson 136:8a65abb0dc63 35 void DhcpHdrSetHtype (char* pPacket, uint8_t value) { *DhcpHdrPtrHtype (pPacket) = value; }
andrewboyson 136:8a65abb0dc63 36 void DhcpHdrSetHlen (char* pPacket, uint8_t value) { *DhcpHdrPtrHlen (pPacket) = value; }
andrewboyson 136:8a65abb0dc63 37 void DhcpHdrSetHops (char* pPacket, uint8_t value) { *DhcpHdrPtrHops (pPacket) = value; }
andrewboyson 136:8a65abb0dc63 38 void DhcpHdrSetXid (char* pPacket, uint32_t value) { NetInvert32(DhcpHdrPtrXid (pPacket), &value); }
andrewboyson 136:8a65abb0dc63 39 void DhcpHdrSetSecs (char* pPacket, uint16_t value) { NetInvert16(DhcpHdrPtrSecs (pPacket), &value); }
andrewboyson 136:8a65abb0dc63 40 void DhcpHdrSetFlags (char* pPacket, uint16_t value) { NetInvert16(DhcpHdrPtrFlags (pPacket), &value); }
andrewboyson 136:8a65abb0dc63 41 void DhcpHdrSetCiaddr(char* pPacket, uint32_t value) { NetDirect32(DhcpHdrPtrCiaddr (pPacket), &value); }
andrewboyson 136:8a65abb0dc63 42 void DhcpHdrSetYiaddr(char* pPacket, uint32_t value) { NetDirect32(DhcpHdrPtrYiaddr (pPacket), &value); }
andrewboyson 136:8a65abb0dc63 43 void DhcpHdrSetSiaddr(char* pPacket, uint32_t value) { NetDirect32(DhcpHdrPtrSiaddr (pPacket), &value); }
andrewboyson 136:8a65abb0dc63 44 void DhcpHdrSetGiaddr(char* pPacket, uint32_t value) { NetDirect32(DhcpHdrPtrGiaddr (pPacket), &value); }
andrewboyson 136:8a65abb0dc63 45 void DhcpHdrSetCookie(char* pPacket, uint32_t value) { NetInvert32(DhcpHdrPtrCookie (pPacket), &value); }