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: ip6/ip6.cpp
- Revision:
- 36:900e24b27bfb
- Parent:
- 35:93c39d260a83
- Child:
- 37:793b39683406
diff -r 93c39d260a83 -r 900e24b27bfb ip6/ip6.cpp --- a/ip6/ip6.cpp Fri Sep 22 13:55:56 2017 +0000 +++ b/ip6/ip6.cpp Mon Sep 25 07:09:32 2017 +0000 @@ -12,11 +12,19 @@ #include "ra.h" #include "io.h" #include "ntp.h" +#include "mac.h" #define DEBUG false #define SHOW_FILTERED true - +void Ip6Clear(char* ip) +{ + *ip = 0; +} +bool Ip6IsEmpty(char* ip) +{ + return !*ip; //Just check for the first byte being non zero +} static void addHexNibble(bool* pAdded, int number, int index, char** pp) { int nibble = number; @@ -57,11 +65,7 @@ { return memcmp(ipA, ipB, 16) == 0; } -bool Ip6IsEmpty(char* ip) -{ - return !*ip; //Just check for the first byte being non zero -} -void Ip6CopyToFrom(char* ipTo, char* ipFrom) +void Ip6Copy(char* ipTo, char* ipFrom) { memcpy(ipTo, ipFrom, 16); } @@ -75,13 +79,13 @@ { switch (action) { - case UNICAST: break; - case UNICAST_DNS: memcpy(pDstIp, RaDnsServer, 16); break; - case UNICAST_NTP: memcpy(pDstIp, NtpServerIp6, 16); break; - case MULTICAST_NODE: memcpy(pDstIp, Ip6AllNodes, 16); break; - case MULTICAST_ROUTER: memcpy(pDstIp, Ip6AllRouters, 16); break; - case MULTICAST_MDNS: memcpy(pDstIp, Ip6Mdns, 16); break; - case MULTICAST_LLMNR: memcpy(pDstIp, Ip6Llmnr, 16); break; + case UNICAST: break; + case UNICAST_DNS: Ip6Copy(pDstIp, RaDnsServer ); break; + case UNICAST_NTP: Ip6Copy(pDstIp, NtpServerIp6 ); break; + case MULTICAST_NODE: Ip6Copy(pDstIp, Ip6AllNodes ); break; + case MULTICAST_ROUTER: Ip6Copy(pDstIp, Ip6AllRouters); break; + case MULTICAST_MDNS: Ip6Copy(pDstIp, Ip6Mdns ); break; + case MULTICAST_LLMNR: Ip6Copy(pDstIp, Ip6Llmnr ); break; default: LogTimeF("Ip6 DestIpFromAction unknown action %d\r\n", action); break; @@ -126,18 +130,18 @@ dataLength = NetToHost16(pHeader->dataLength); protocol = pHeader->protocol; hoplimit = pHeader->hoplimit; - memcpy(srcIp, pHeader->src, 16); - memcpy(dstIp, pHeader->dst, 16); + Ip6Copy(srcIp, pHeader->src); + Ip6Copy(dstIp, pHeader->dst); pData = (char*)pHeader + HEADER_LENGTH; } static void writeHeader(struct header * pHeader) { - pHeader->versionTrafficFlow = version << 4; - pHeader->protocol = protocol; - pHeader->hoplimit = 255; - memcpy(pHeader->dst, dstIp, 16); - memcpy(pHeader->src, srcIp, 16); - pHeader->dataLength = NetToHost16(dataLength); + pHeader->versionTrafficFlow = version << 4; + pHeader->protocol = protocol; + pHeader->hoplimit = 255; + Ip6Copy(pHeader->dst, dstIp); + Ip6Copy(pHeader->src, srcIp); + pHeader->dataLength = NetToHost16(dataLength); } static void logHeader(char* title) @@ -230,7 +234,7 @@ } if (!action) return DO_NOTHING; - memcpy(pDstMac, pSrcMac, 6); + MacCopy(pDstMac, pSrcMac); if (DEBUG) logHeader("IP6 packet replied to");