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
udp/dhcp/dhcphdr.c@136:8a65abb0dc63, 2019-04-06 (annotated)
- 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?
User | Revision | Line number | New 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); } |