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/ip4.c
- 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)