mirror of
https://github.com/espressif/openthread.git
synced 2026-08-01 08:37:47 +00:00
Remove Link Reject and link-local RLOC. (#913)
This commit is contained in:
@@ -56,7 +56,6 @@ View IPv6 addresses assigned to Node 1's Thread interface:
|
||||
```bash
|
||||
> ipaddr
|
||||
fdde:ad00:beef:0:0:ff:fe00:0
|
||||
fe80:0:0:0:0:ff:fe00:0
|
||||
fdde:ad00:beef:0:558:f56b:d688:799
|
||||
fe80:0:0:0:f3d9:2a82:c8d8:fe43
|
||||
Done
|
||||
|
||||
@@ -766,7 +766,6 @@ List all IPv6 addresses assigned to the Thread interface.
|
||||
```bash
|
||||
> ipaddr
|
||||
fdde:ad00:beef:0:0:ff:fe00:0
|
||||
fe80:0:0:0:0:ff:fe00:0
|
||||
fdde:ad00:beef:0:558:f56b:d688:799
|
||||
fe80:0:0:0:f3d9:2a82:c8d8:fe43
|
||||
Done
|
||||
|
||||
+1
-10
@@ -1120,15 +1120,6 @@ ThreadError Mac::ProcessReceiveSecurity(Frame &aFrame, const Address &aSrcAddr,
|
||||
aFrame.SetSecurityValid(true);
|
||||
|
||||
exit:
|
||||
|
||||
if (error == kThreadError_Security)
|
||||
{
|
||||
for (Receiver *receiver = mReceiveHead; receiver; receiver = receiver->mNext)
|
||||
{
|
||||
receiver->HandleReceivedFrame(aFrame, error);
|
||||
}
|
||||
}
|
||||
|
||||
return error;
|
||||
}
|
||||
|
||||
@@ -1292,7 +1283,7 @@ void Mac::ReceiveDoneTask(Frame *aFrame, ThreadError aError)
|
||||
|
||||
for (Receiver *receiver = mReceiveHead; receiver; receiver = receiver->mNext)
|
||||
{
|
||||
receiver->HandleReceivedFrame(*aFrame, kThreadError_None);
|
||||
receiver->HandleReceivedFrame(*aFrame);
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
@@ -97,10 +97,9 @@ public:
|
||||
*
|
||||
* @param[in] aContext A pointer to arbitrary context information.
|
||||
* @param[in] aFrame A reference to the MAC frame.
|
||||
* @param[in] aError Any errors that occurred during reception.
|
||||
*
|
||||
*/
|
||||
typedef void (*ReceiveFrameHandler)(void *aContext, Frame &aFrame, ThreadError aError);
|
||||
typedef void (*ReceiveFrameHandler)(void *aContext, Frame &aFrame);
|
||||
|
||||
/**
|
||||
* This constructor creates a MAC receiver client.
|
||||
@@ -116,7 +115,7 @@ public:
|
||||
}
|
||||
|
||||
private:
|
||||
void HandleReceivedFrame(Frame &frame, ThreadError error) { mReceiveFrameHandler(mContext, frame, error); }
|
||||
void HandleReceivedFrame(Frame &frame) { mReceiveFrameHandler(mContext, frame); }
|
||||
|
||||
ReceiveFrameHandler mReceiveFrameHandler;
|
||||
void *mContext;
|
||||
|
||||
@@ -1358,19 +1358,18 @@ exit:
|
||||
mScheduleTransmissionTask.Post();
|
||||
}
|
||||
|
||||
void MeshForwarder::HandleReceivedFrame(void *aContext, Mac::Frame &aFrame, ThreadError aError)
|
||||
void MeshForwarder::HandleReceivedFrame(void *aContext, Mac::Frame &aFrame)
|
||||
{
|
||||
static_cast<MeshForwarder *>(aContext)->HandleReceivedFrame(aFrame, aError);
|
||||
static_cast<MeshForwarder *>(aContext)->HandleReceivedFrame(aFrame);
|
||||
}
|
||||
|
||||
void MeshForwarder::HandleReceivedFrame(Mac::Frame &aFrame, ThreadError aError)
|
||||
void MeshForwarder::HandleReceivedFrame(Mac::Frame &aFrame)
|
||||
{
|
||||
ThreadMessageInfo messageInfo;
|
||||
Mac::Address macDest;
|
||||
Mac::Address macSource;
|
||||
uint8_t *payload;
|
||||
uint8_t payloadLength;
|
||||
Ip6::Address destination;
|
||||
uint8_t commandId;
|
||||
Child *child = NULL;
|
||||
ThreadError error = kThreadError_None;
|
||||
@@ -1385,32 +1384,6 @@ void MeshForwarder::HandleReceivedFrame(Mac::Frame &aFrame, ThreadError aError)
|
||||
}
|
||||
|
||||
SuccessOrExit(error = aFrame.GetSrcAddr(macSource));
|
||||
|
||||
if (aError == kThreadError_Security)
|
||||
{
|
||||
memset(&destination, 0, sizeof(destination));
|
||||
destination.mFields.m16[0] = HostSwap16(0xfe80);
|
||||
|
||||
switch (macSource.mLength)
|
||||
{
|
||||
case 2:
|
||||
destination.mFields.m16[5] = HostSwap16(0x00ff);
|
||||
destination.mFields.m16[6] = HostSwap16(0xfe00);
|
||||
destination.mFields.m16[7] = HostSwap16(macSource.mShortAddress);
|
||||
break;
|
||||
|
||||
case 8:
|
||||
destination.SetIid(macSource.mExtAddress);
|
||||
break;
|
||||
|
||||
default:
|
||||
ExitNow(error = kThreadError_Parse);
|
||||
}
|
||||
|
||||
mMle.SendLinkReject(destination);
|
||||
ExitNow(error = kThreadError_Security);
|
||||
}
|
||||
|
||||
SuccessOrExit(aFrame.GetDstAddr(macDest));
|
||||
|
||||
if ((child = mMle.GetChild(macSource)) != NULL)
|
||||
|
||||
@@ -200,8 +200,8 @@ private:
|
||||
ThreadError UpdateMeshRoute(Message &aMessage);
|
||||
ThreadError HandleDatagram(Message &aMessage, const ThreadMessageInfo &aMessageInfo);
|
||||
|
||||
static void HandleReceivedFrame(void *aContext, Mac::Frame &aFrame, ThreadError aError);
|
||||
void HandleReceivedFrame(Mac::Frame &aFrame, ThreadError aError);
|
||||
static void HandleReceivedFrame(void *aContext, Mac::Frame &aFrame);
|
||||
void HandleReceivedFrame(Mac::Frame &aFrame);
|
||||
|
||||
static ThreadError HandleFrameRequest(void *aContext, Mac::Frame &aFrame);
|
||||
ThreadError HandleFrameRequest(Mac::Frame &aFrame);
|
||||
|
||||
@@ -86,7 +86,6 @@ Mle::Mle(ThreadNetif &aThreadNetif) :
|
||||
memset(&mParent, 0, sizeof(mParent));
|
||||
memset(&mChildIdRequest, 0, sizeof(mChildIdRequest));
|
||||
memset(&mLinkLocal64, 0, sizeof(mLinkLocal64));
|
||||
memset(&mLinkLocal16, 0, sizeof(mLinkLocal16));
|
||||
memset(&mMeshLocal64, 0, sizeof(mMeshLocal64));
|
||||
memset(&mMeshLocal16, 0, sizeof(mMeshLocal16));
|
||||
memset(&mLinkLocalAllThreadNodes, 0, sizeof(mLinkLocalAllThreadNodes));
|
||||
@@ -101,15 +100,6 @@ Mle::Mle(ThreadNetif &aThreadNetif) :
|
||||
mLinkLocal64.mValidLifetime = 0xffffffff;
|
||||
mNetif.AddUnicastAddress(mLinkLocal64);
|
||||
|
||||
// link-local 16
|
||||
memset(&mLinkLocal16, 0, sizeof(mLinkLocal16));
|
||||
mLinkLocal16.GetAddress().mFields.m16[0] = HostSwap16(0xfe80);
|
||||
mLinkLocal16.GetAddress().mFields.m16[5] = HostSwap16(0x00ff);
|
||||
mLinkLocal16.GetAddress().mFields.m16[6] = HostSwap16(0xfe00);
|
||||
mLinkLocal16.mPrefixLength = 64;
|
||||
mLinkLocal16.mPreferredLifetime = 0xffffffff;
|
||||
mLinkLocal16.mValidLifetime = 0xffffffff;
|
||||
|
||||
// Leader Aloc
|
||||
memset(&mLeaderAloc, 0, sizeof(mLeaderAloc));
|
||||
mLeaderAloc.mPrefixLength = 128;
|
||||
@@ -244,7 +234,6 @@ ThreadError Mle::Stop(bool aClearNetworkDatasets)
|
||||
otLogFuncEntry();
|
||||
mKeyManager.Stop();
|
||||
SetStateDetached();
|
||||
mNetif.RemoveUnicastAddress(mLinkLocal16);
|
||||
mNetif.RemoveUnicastAddress(mMeshLocal16);
|
||||
|
||||
if (mDeviceState == kDeviceStateLeader)
|
||||
@@ -596,19 +585,10 @@ uint16_t Mle::GetRloc16(void) const
|
||||
|
||||
ThreadError Mle::SetRloc16(uint16_t aRloc16)
|
||||
{
|
||||
mNetif.RemoveUnicastAddress(mLinkLocal16);
|
||||
mNetif.RemoveUnicastAddress(mMeshLocal16);
|
||||
|
||||
if (aRloc16 != Mac::kShortAddrInvalid)
|
||||
{
|
||||
// link-local 16
|
||||
// add link-local 16 only for sleepy end device
|
||||
if ((mDeviceMode & ModeTlv::kModeRxOnWhenIdle) == 0)
|
||||
{
|
||||
mLinkLocal16.GetAddress().mFields.m16[7] = HostSwap16(aRloc16);
|
||||
mNetif.AddUnicastAddress(mLinkLocal16);
|
||||
}
|
||||
|
||||
// mesh-local 16
|
||||
mMeshLocal16.GetAddress().mFields.m16[7] = HostSwap16(aRloc16);
|
||||
mNetif.AddUnicastAddress(mMeshLocal16);
|
||||
@@ -1825,10 +1805,6 @@ void Mle::HandleUdpReceive(Message &aMessage, const Ip6::MessageInfo &aMessageIn
|
||||
mMleRouter.HandleLinkAcceptAndRequest(aMessage, aMessageInfo, keySequence);
|
||||
break;
|
||||
|
||||
case Header::kCommandLinkReject:
|
||||
mMleRouter.HandleLinkReject(aMessage, aMessageInfo);
|
||||
break;
|
||||
|
||||
case Header::kCommandAdvertisement:
|
||||
HandleAdvertisement(aMessage, aMessageInfo);
|
||||
break;
|
||||
|
||||
@@ -1253,7 +1253,6 @@ private:
|
||||
|
||||
Ip6::NetifUnicastAddress mLeaderAloc;
|
||||
|
||||
Ip6::NetifUnicastAddress mLinkLocal16;
|
||||
Ip6::NetifUnicastAddress mLinkLocal64;
|
||||
Ip6::NetifUnicastAddress mMeshLocal64;
|
||||
Ip6::NetifUnicastAddress mMeshLocal16;
|
||||
|
||||
@@ -975,43 +975,6 @@ exit:
|
||||
return error;
|
||||
}
|
||||
|
||||
ThreadError MleRouter::SendLinkReject(const Ip6::Address &aDestination)
|
||||
{
|
||||
ThreadError error = kThreadError_None;
|
||||
Message *message;
|
||||
|
||||
VerifyOrExit((message = NewMessage()) != NULL, ;);
|
||||
message->SetLinkSecurityEnabled(false);
|
||||
SuccessOrExit(error = AppendHeader(*message, Header::kCommandLinkReject));
|
||||
SuccessOrExit(error = AppendStatus(*message, StatusTlv::kError));
|
||||
|
||||
SuccessOrExit(error = SendMessage(*message, aDestination));
|
||||
|
||||
otLogInfoMle("Sent link reject");
|
||||
|
||||
exit:
|
||||
|
||||
if (error != kThreadError_None && message != NULL)
|
||||
{
|
||||
message->Free();
|
||||
}
|
||||
|
||||
return error;
|
||||
}
|
||||
|
||||
ThreadError MleRouter::HandleLinkReject(const Message &aMessage, const Ip6::MessageInfo &aMessageInfo)
|
||||
{
|
||||
Mac::ExtAddress macAddr;
|
||||
|
||||
(void)aMessage;
|
||||
|
||||
otLogInfoMle("Received link reject");
|
||||
|
||||
macAddr.Set(aMessageInfo.GetPeerAddr());
|
||||
|
||||
return kThreadError_None;
|
||||
}
|
||||
|
||||
Child *MleRouter::NewChild(void)
|
||||
{
|
||||
for (int i = 0; i < mMaxChildrenAllowed; i++)
|
||||
|
||||
@@ -596,17 +596,6 @@ public:
|
||||
*/
|
||||
ThreadError CheckReachability(uint16_t aMeshSource, uint16_t aMeshDest, Ip6::Header &aIp6Header);
|
||||
|
||||
/**
|
||||
* This method generates an MLE Link Reject.
|
||||
*
|
||||
* @param[in] aDestination A reference to the destination.
|
||||
*
|
||||
* @retval kThreadError_None Successfully generated the MLE Link Reject message.
|
||||
* @retval kThreadError_NoBufs Insufficient buffers to generate the MLE Link Reject message.
|
||||
*
|
||||
*/
|
||||
ThreadError SendLinkReject(const Ip6::Address &aDestination);
|
||||
|
||||
/**
|
||||
* This method checks if a given Router ID has correct value.
|
||||
*
|
||||
@@ -655,7 +644,6 @@ private:
|
||||
bool request);
|
||||
ThreadError HandleLinkAcceptAndRequest(const Message &aMessage, const Ip6::MessageInfo &aMessageInfo,
|
||||
uint32_t aKeySequence);
|
||||
ThreadError HandleLinkReject(const Message &aMessage, const Ip6::MessageInfo &aMessageInfo);
|
||||
ThreadError HandleAdvertisement(const Message &aMessage, const Ip6::MessageInfo &aMessageInfo);
|
||||
ThreadError HandleParentRequest(const Message &aMessage, const Ip6::MessageInfo &aMessageInfo);
|
||||
ThreadError HandleChildIdRequest(const Message &aMessage, const Ip6::MessageInfo &aMessageInfo,
|
||||
|
||||
Reference in New Issue
Block a user