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:
71:736a5747ade1
Parent:
61:aad055f1b0d1
Child:
74:c3756bfa960e
--- a/ip6/ip6.c	Fri Feb 16 17:31:52 2018 +0000
+++ b/ip6/ip6.c	Sat Oct 20 18:56:13 2018 +0000
@@ -156,7 +156,7 @@
     
     NetTraceHostCheckIp6(srcIp);
     
-    Ar6AddIpRecord(trace, macRemote, srcIp);
+    char* pCachedRemIp = Ar6AddIpRecord(trace, macRemote, srcIp);
     Nr6MakeRequestForNameFromIp(srcIp);
 
     int action = DO_NOTHING;
@@ -165,7 +165,7 @@
         case HOPOPT: action = DO_NOTHING;                                                                                           break;
         case ICMP6:  action = Icmp6HandleReceivedPacket(trace, scope, pDataRx, dataLengthRx, pDataTx, &dataLengthTx, srcIp, dstIp); break;
         case UDP:    action =  Udp6HandleReceivedPacket(trace, scope, pDataRx, dataLengthRx, pDataTx, &dataLengthTx, srcIp, dstIp); break;
-        case TCP:    action =  Tcp6HandleReceivedPacket(trace, scope, pDataRx, dataLengthRx, pDataTx, &dataLengthTx, srcIp, dstIp); break;        
+        case TCP:    action =  Tcp6HandleReceivedPacket(trace, scope, pDataRx, dataLengthRx, pDataTx, &dataLengthTx, srcIp, dstIp, pCachedRemIp); break;        
         default:
             LogTimeF("IP6 protocol %d unhandled\r\n", protocol);
             return DO_NOTHING;
@@ -198,17 +198,9 @@
     int dataLength = *pSize - sizeof(struct header);
     
     int action = DO_NOTHING;
-    if (!action)
-    {
-        action = Icmp6PollForPacketToSend(pData, &dataLength, srcIp, dstIp);
-        protocol = ICMP6;
-    }
-    
-    if (!action)
-    {
-        action = Udp6PollForPacketToSend(pData, &dataLength, srcIp, dstIp);
-        protocol = UDP;
-    }
+    if (!action) { action = Icmp6PollForPacketToSend(pData, &dataLength, srcIp, dstIp); protocol = ICMP6; }
+    if (!action) { action =  Udp6PollForPacketToSend(pData, &dataLength, srcIp, dstIp); protocol = UDP;   }
+    if (!action) { action =  Tcp6PollForPacketToSend(pData, &dataLength, srcIp, dstIp); protocol = TCP;   }
     if (!action) return DO_NOTHING;
     
     int dest = ActionGetDestPart(action);