Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: oldheating gps motorhome heating
Diff: ip6/icmp/ndp/ns.cpp
- Revision:
- 59:e0e556c8bd46
- Parent:
- 53:77f8a49adf89
--- a/ip6/icmp/ndp/ns.cpp Thu Dec 07 20:44:32 2017 +0000
+++ b/ip6/icmp/ndp/ns.cpp Thu Dec 14 20:55:40 2017 +0000
@@ -22,10 +22,8 @@
uint32_t reserved;
char target[16];
};
-static struct header * pHeader;
-static int size;
-static void logHeader()
+static void logHeader(struct header* pHeader, int size)
{
char* pData = (char*)pHeader + sizeof(struct header);
int dataLength = size - sizeof(struct header);
@@ -45,44 +43,48 @@
Log("\r\n");
}
}
+static struct header * pTraceHeader;
+static int traceSize;
static void (*pTraceBack)(void);
static void trace()
{
pTraceBack();
- logHeader();
+ logHeader(pTraceHeader, traceSize);
}
-int NsHandleReceivedSolicitation(void (*traceback)(void), void* pPacket, int* pSize, uint8_t* pType, uint8_t* pCode)
+int NsHandleReceivedSolicitation(void (*traceback)(void), uint8_t* pType, uint8_t* pCode, void* pPacketRx, int sizeRx, void* pPacketTx, int* pSizeTx)
{
pTraceBack = traceback;
- pHeader = (header*)pPacket;
- size = *pSize;
- char* pData = (char*)pHeader + sizeof(struct header);
+ struct header* pHeaderRx = (header*)pPacketRx;
+ struct header* pHeaderTx = (header*)pPacketTx;
+
+ pTraceHeader = pHeaderRx;
+ traceSize = sizeRx;
//Check it is us
- if (!SlaacScope(pHeader->target)) return DO_NOTHING;
+ if (!SlaacScope(pHeaderRx->target)) return DO_NOTHING;
if (NsTraceRecvSol)
{
if (NetTraceNewLine) Log("\r\n");
LogTimeF("NDP received neighbour solicit\r\n");
if (NetTraceStack) traceback();
- logHeader();
+ logHeader(pHeaderRx, sizeRx);
}
//Send advertisement
*pType = 136;
*pCode = 0;
- pHeader->reserved = 0x00000060; //R=0 (not a router); S=1 (solicited); O=1 (override)
- //pHeader->target is unchanged
+ pHeaderTx->reserved = 0x00000060; //R=0 (not a router); S=1 (solicited); O=1 (override)
+ Ip6AddressCopy(pHeaderTx->target, pHeaderRx->target); //Target toes not change
//Add target MAC
- char* p = pData;
+ char* pDataTx = (char*)pHeaderTx + sizeof(struct header);
+ char* p = pDataTx;
p += NdpAddOptionTargetMac(p, MacLocal);
- size = sizeof(struct header) + p - pData;
- *pSize = size;
+ *pSizeTx = sizeof(struct header) + p - pDataTx;
- if (NsTraceRecvSol) logHeader();
+ if (NsTraceRecvSol) logHeader(pHeaderTx, *pSizeTx);
return ActionMakeFromDestAndTrace(UNICAST, NsTraceRecvSol && NetTraceStack);
@@ -90,17 +92,16 @@
int NsHandleReceivedAdvertisement(void (*traceback)(void), void* pPacket, int* pSize)
{
pTraceBack = traceback;
- pHeader = (header*)pPacket;
- size = *pSize;
+ struct header* pHeader = (header*)pPacket;
char* pData = (char*)pHeader + sizeof(struct header);
- int dataLength = size - sizeof(struct header);
+ int dataLength = *pSize - sizeof(struct header);
if (NsTraceRecvAdv)
{
if (NetTraceNewLine) Log("\r\n");
LogTimeF("NDP received neighbour advertise\r\n");
if (NetTraceStack) traceback();
- logHeader();
+ logHeader(pHeader, *pSize);
}
char tgtMac[6];
@@ -120,8 +121,7 @@
*pType = 135; //Neighbour solicitation
*pCode = 0;
- pHeader = (header*)pPacket;
- size = *pSize;
+ struct header* pHeader = (header*)pPacket;
pHeader->reserved = 0;
Ip6AddressCopy(pHeader->target, NsAddressToResolve);
@@ -129,14 +129,13 @@
char* p = pData;
p += NdpAddOptionSourceMac(p, MacLocal);
- size = sizeof(struct header) + p - pData;
- *pSize = size;
+ *pSize = sizeof(struct header) + p - pData;
if (NsTraceSendSol)
{
if (NetTraceNewLine) Log("\r\n");
LogTimeF("NDP sent neighbour solicit\r\n");
- logHeader();
+ logHeader(pHeader, *pSize);
}
return ActionMakeFromDestAndTrace(MULTICAST_NODE, NsTraceSendSol && NetTraceStack);