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

Revision:
36:900e24b27bfb
Parent:
35:93c39d260a83
Child:
37:793b39683406
--- 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");