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
Diff: ip4/udptcp4.c
- Revision:
- 136:8a65abb0dc63
- Parent:
- 121:bc048b65a630
- Child:
- 137:cf6e7db0e985
diff -r a7f026a09543 -r 8a65abb0dc63 ip4/udptcp4.c --- a/ip4/udptcp4.c Sat Mar 23 12:25:48 2019 +0000 +++ b/ip4/udptcp4.c Sat Apr 06 11:20:20 2019 +0000 @@ -15,25 +15,17 @@ #include "ar4.h" #include "led.h" #include "fault.h" +#include "checksum.h" static uint16_t calculateChecksum(uint8_t pro, uint32_t srcIp, uint32_t dstIp, int size, void* pPacket) { - __packed struct pseudo - { - uint32_t src; - uint32_t dst; - uint8_t zer; - uint8_t pro; - uint16_t len; - } pseudo; - - pseudo.src = srcIp; - pseudo.dst = dstIp; - pseudo.zer = 0; - pseudo.pro = pro; - pseudo.len = NetToHost16(size); - - return NetCheckSumTwo(sizeof(pseudo), &pseudo, size, pPacket); + uint32_t sum = 0; + uint16_t pro16 = pro; + sum = CheckSumAddDirect(sum, 4, &srcIp ); + sum = CheckSumAddDirect(sum, 4, &dstIp ); + sum = CheckSumAddInvert(sum, 2, &pro16 ); + sum = CheckSumAddInvert(sum, 2, &size ); + return CheckSumFinDirect(sum, size, pPacket); } static void finalisePacket(uint8_t pro, int action, void* pPacket, int size, uint32_t* pSrcIp, uint32_t* pDstIp) {