Only enable IPv6 forwarding for Router and Leader roles. (#390)

This commit is contained in:
Jonathan Hui
2016-08-16 19:10:09 -07:00
committed by GitHub
parent 1144982a06
commit 5dbfe2af46
4 changed files with 26 additions and 0 deletions
+12
View File
@@ -49,6 +49,7 @@ namespace Ip6 {
static otDEFINE_ALIGNED_VAR(sMplBuf, sizeof(Mpl), uint64_t);
static Mpl *sMpl;
static bool sForwardingEnabled;
static otReceiveIp6DatagramCallback sReceiveIp6DatagramCallback = NULL;
@@ -63,6 +64,12 @@ Message *Ip6::NewMessage(uint16_t reserved)
void Ip6::Init(void)
{
sMpl = new(&sMplBuf) Mpl;
sForwardingEnabled = false;
}
void Ip6::SetForwardingEnabled(bool aEnable)
{
sForwardingEnabled = aEnable;
}
uint16_t Ip6::UpdateChecksum(uint16_t checksum, uint16_t val)
@@ -405,6 +412,11 @@ ThreadError Ip6::HandleDatagram(Message &message, Netif *netif, int8_t interface
}
}
if (!sForwardingEnabled && netif != NULL)
{
forward = false;
}
message.SetOffset(sizeof(header));
// process IPv6 Extension Headers
+8
View File
@@ -583,6 +583,14 @@ public:
*/
static void SetReceiveDatagramCallback(otReceiveIp6DatagramCallback aCallback);
/**
* This static method enables/disables IPv6 forwarding.
*
* @param[in] aEnable TRUE to enable IPv6 forwarding, FALSE otherwise.
*
*/
static void SetForwardingEnabled(bool aEnable);
private:
static void ProcessReceiveCallback(Message &aMessage);
};
+4
View File
@@ -331,6 +331,8 @@ ThreadError Mle::SetStateDetached(void)
mParentRequestTimer.Stop();
mMesh.SetRxOnWhenIdle(true);
mMleRouter.HandleDetachStart();
Ip6::Ip6::SetForwardingEnabled(false);
otLogInfoMle("Mode -> Detached\n");
return kThreadError_None;
}
@@ -356,6 +358,8 @@ ThreadError Mle::SetStateChild(uint16_t aRloc16)
mMleRouter.HandleChildStart(mParentRequestMode);
}
Ip6::Ip6::SetForwardingEnabled(false);
otLogInfoMle("Mode -> Child\n");
return kThreadError_None;
}
+2
View File
@@ -338,6 +338,7 @@ ThreadError MleRouter::SetStateRouter(uint16_t aRloc16)
mRouters[mRouterId].mNextHop = mRouterId;
mNetworkData.Stop();
mStateUpdateTimer.Start(kStateUpdatePeriod);
Ip6::Ip6::SetForwardingEnabled(true);
otLogInfoMle("Mode -> Router\n");
return kThreadError_None;
@@ -364,6 +365,7 @@ ThreadError MleRouter::SetStateLeader(uint16_t aRloc16)
mNetif.GetPendingDataset().ApplyLocalToNetwork();
mCoapServer.AddResource(mAddressSolicit);
mCoapServer.AddResource(mAddressRelease);
Ip6::Ip6::SetForwardingEnabled(true);
otLogInfoMle("Mode -> Leader %d\n", mLeaderData.GetPartitionId());
return kThreadError_None;