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/ip4/ip4.c	Fri Feb 16 17:31:52 2018 +0000
+++ b/ip4/ip4.c	Sat Oct 20 18:56:13 2018 +0000
@@ -161,11 +161,8 @@
         return DO_NOTHING;
     }
     
-    if (srcIp)
-    {
-        Ar4AddIpRecord(trace, macRemote, srcIp);
-        Nr4MakeRequestForNameFromIp(srcIp);
-    }
+    uint32_t* pCachedRemIp = Ar4AddIpRecord(trace, macRemote, srcIp);
+    Nr4MakeRequestForNameFromIp(srcIp);
     
     int action = DO_NOTHING;
     switch (protocol)
@@ -173,7 +170,7 @@
         case ICMP:   action = Icmp4HandleReceivedPacket(trace, pDataRx, dataLengthRx, pDataTx, &dataLengthTx, &srcIp, &dstIp); break;
         case IGMP:                                                                                                             break;
         case UDP:    action =  Udp4HandleReceivedPacket(trace, pDataRx, dataLengthRx, pDataTx, &dataLengthTx, &srcIp, &dstIp); break;
-        case TCP:    action =  Tcp4HandleReceivedPacket(trace, pDataRx, dataLengthRx, pDataTx, &dataLengthTx, &srcIp, &dstIp); break;
+        case TCP:    action =  Tcp4HandleReceivedPacket(trace, pDataRx, dataLengthRx, pDataTx, &dataLengthTx, &srcIp, &dstIp, pCachedRemIp); break;
         case IP6IN4:                                                                                                           break;
         default:
             LogTimeF("IP4 received packet unknown protocol %d\r\n");
@@ -212,12 +209,12 @@
     dontFragment  = true;
     moreFragments = false;
     offset        = 0;
-    protocol      = UDP;
     
     int dataLength = *pSize - sizeof(struct header);
     
     int action  = DO_NOTHING;
-    if (!action) action = Udp4PollForPacketToSend(pData, &dataLength, &srcIp, &dstIp);
+    if (!action) { action = Udp4PollForPacketToSend(pData, &dataLength, &srcIp, &dstIp); protocol = UDP; }
+    if (!action) { action = Tcp4PollForPacketToSend(pData, &dataLength, &srcIp, &dstIp); protocol = TCP; }
     if (!action) return DO_NOTHING;
     int dest = ActionGetDestPart(action);
     switch (dest)