From 1631d23a13cad49e537a39f615603c74f909255d Mon Sep 17 00:00:00 2001 From: Jonathan Hui Date: Tue, 18 Jun 2019 10:30:02 -0700 Subject: [PATCH] [netif] remove interface id specification from interfaces (#3925) --- .travis/check-posix-app-pty | 2 +- .../sleepy-demo/efr32-sleepy-demo-ftd/main.c | 6 ++-- .../sleepy-demo/efr32-sleepy-demo-mtd/main.c | 9 ++--- include/openthread/ip6.h | 30 ++++------------- src/cli/cli.cpp | 5 --- src/cli/cli_coap.cpp | 5 ++- src/cli/cli_coap_secure.cpp | 8 ++--- src/cli/cli_udp.cpp | 9 ++--- src/core/api/ip6_api.cpp | 6 +--- src/core/api/udp_api.cpp | 2 +- src/core/coap/coap.cpp | 1 - src/core/common/message.cpp | 1 - src/core/common/message.hpp | 17 ---------- src/core/meshcop/announce_begin_client.cpp | 1 - src/core/meshcop/commissioner.cpp | 1 - src/core/meshcop/dtls.cpp | 10 ------ src/core/meshcop/energy_scan_client.cpp | 1 - src/core/meshcop/joiner.cpp | 3 +- src/core/meshcop/joiner_router.cpp | 1 - src/core/meshcop/panid_query_client.cpp | 1 - src/core/net/dhcp6_client.cpp | 3 +- src/core/net/icmp6.cpp | 2 -- src/core/net/ip6.cpp | 26 ++++----------- src/core/net/ip6.hpp | 10 ++---- src/core/net/netif.cpp | 3 +- src/core/net/netif.hpp | 12 +------ src/core/net/socket.hpp | 33 ++++++++++--------- src/core/net/udp6.cpp | 7 +--- src/core/openthread-core-config-check.h | 4 +++ src/core/thread/address_resolver.cpp | 2 -- src/core/thread/mesh_forwarder.cpp | 2 +- src/core/thread/mle.cpp | 3 -- src/core/thread/mle_router.cpp | 1 - src/core/thread/network_diagnostic.cpp | 3 -- src/core/thread/thread_netif.cpp | 2 +- src/posix/platform/udp.cpp | 7 ++-- 36 files changed, 62 insertions(+), 177 deletions(-) diff --git a/.travis/check-posix-app-pty b/.travis/check-posix-app-pty index 630f7015e..258bc7425 100755 --- a/.travis/check-posix-app-pty +++ b/.travis/check-posix-app-pty @@ -48,7 +48,7 @@ at_exit() { build() { make -f examples/Makefile-posix - make -f src/posix/Makefile-posix PLATFORM_NETIF=1 PLATFORM_UDP=1 + make -f src/posix/Makefile-posix PLATFORM_NETIF=1 PLATFORM_UDP=1 UDP_FORWARD=0 } check() { diff --git a/examples/platforms/efr32/sleepy-demo/efr32-sleepy-demo-ftd/main.c b/examples/platforms/efr32/sleepy-demo/efr32-sleepy-demo-ftd/main.c index 300b45f1a..59f4ec575 100644 --- a/examples/platforms/efr32/sleepy-demo/efr32-sleepy-demo-ftd/main.c +++ b/examples/platforms/efr32/sleepy-demo/efr32-sleepy-demo-ftd/main.c @@ -233,8 +233,7 @@ void initUdp(void) memset(&sockaddr, 0, sizeof(sockaddr)); otIp6AddressFromString(MULTICAST_ADDR, &sockaddr.mAddress); - sockaddr.mPort = MULTICAST_PORT; - sockaddr.mScopeId = OT_NETIF_INTERFACE_ID_THREAD; + sockaddr.mPort = MULTICAST_PORT; error = otUdpOpen(instance, &sFtdSocket, sFtdReceiveCallback, NULL); if (error != OT_ERROR_NONE) @@ -273,8 +272,7 @@ void applicationTick(void) { memset(&messageInfo, 0, sizeof(messageInfo)); memcpy(&messageInfo.mPeerAddr, &sSwitchAddress, sizeof messageInfo.mPeerAddr); - messageInfo.mPeerPort = RECV_PORT; - messageInfo.mInterfaceId = OT_NETIF_INTERFACE_ID_THREAD; + messageInfo.mPeerPort = RECV_PORT; message = otUdpNewMessage(instance, NULL); diff --git a/examples/platforms/efr32/sleepy-demo/efr32-sleepy-demo-mtd/main.c b/examples/platforms/efr32/sleepy-demo/efr32-sleepy-demo-mtd/main.c index 441aed276..cc9f014f8 100644 --- a/examples/platforms/efr32/sleepy-demo/efr32-sleepy-demo-mtd/main.c +++ b/examples/platforms/efr32/sleepy-demo/efr32-sleepy-demo-mtd/main.c @@ -270,12 +270,10 @@ void initUdp(void) memset(&sMulticastSockAddr, 0, sizeof sMulticastSockAddr); otIp6AddressFromString(MULTICAST_ADDR, &sMulticastSockAddr.mAddress); - sMulticastSockAddr.mPort = MULTICAST_PORT; - sMulticastSockAddr.mScopeId = OT_NETIF_INTERFACE_ID_THREAD; + sMulticastSockAddr.mPort = MULTICAST_PORT; memset(&sockaddr, 0, sizeof(sockaddr)); - sockaddr.mPort = RECV_PORT; - sockaddr.mScopeId = OT_NETIF_INTERFACE_ID_THREAD; + sockaddr.mPort = RECV_PORT; error = otUdpOpen(instance, &sMtdSocket, mtdReceiveCallback, NULL); @@ -330,8 +328,7 @@ void applicationTick(void) memset(&messageInfo, 0, sizeof(messageInfo)); memcpy(&messageInfo.mPeerAddr, &sMulticastSockAddr.mAddress, sizeof messageInfo.mPeerAddr); - messageInfo.mPeerPort = sMulticastSockAddr.mPort; - messageInfo.mInterfaceId = sMulticastSockAddr.mScopeId; + messageInfo.mPeerPort = sMulticastSockAddr.mPort; message = otUdpNewMessage(instance, NULL); diff --git a/include/openthread/ip6.h b/include/openthread/ip6.h index 5380aae7a..8dd37a0a1 100644 --- a/include/openthread/ip6.h +++ b/include/openthread/ip6.h @@ -122,16 +122,6 @@ typedef struct otNetifMulticastAddress const struct otNetifMulticastAddress *mNext; ///< A pointer to the next network interface multicast address. } otNetifMulticastAddress; -/** - * This enumeration represents the list of allowable values for an InterfaceId. - * - */ -typedef enum otNetifInterfaceId -{ - OT_NETIF_INTERFACE_ID_HOST = -1, ///< The interface ID telling packets received by host side interfaces. - OT_NETIF_INTERFACE_ID_THREAD = 1, ///< The Thread Network interface ID. -} otNetifInterfaceId; - /** * This structure represents an IPv6 socket address. * @@ -149,19 +139,13 @@ typedef struct otSockAddr */ typedef struct otMessageInfo { - otIp6Address mSockAddr; ///< The local IPv6 address. - otIp6Address mPeerAddr; ///< The peer IPv6 address. - uint16_t mSockPort; ///< The local transport-layer port. - uint16_t mPeerPort; ///< The peer transport-layer port. - int8_t mInterfaceId; ///< The IPv6 interface identifier. - uint8_t mHopLimit; ///< The IPv6 hop limit. - - /** - * A pointer to link-specific information. In case @p mInterfaceId is set to OT_NETIF_INTERFACE_ID_THREAD, - * @p mLinkInfo points to otThreadLinkInfo(). This field is only valid for messages received from the - * Thread radio and is ignored on transmission. - */ - const void *mLinkInfo; + otIp6Address mSockAddr; ///< The local IPv6 address. + otIp6Address mPeerAddr; ///< The peer IPv6 address. + uint16_t mSockPort; ///< The local transport-layer port. + uint16_t mPeerPort; ///< The peer transport-layer port. + const void * mLinkInfo; ///< A pointer to link-specific information. + uint8_t mHopLimit; ///< The IPv6 hop limit. + bool mIsHostInterface : 1; ///< TRUE if packets sent/received via host interface, FALSE otherwise. } otMessageInfo; /** diff --git a/src/cli/cli.cpp b/src/cli/cli.cpp index 2846e974f..62933f914 100644 --- a/src/cli/cli.cpp +++ b/src/cli/cli.cpp @@ -986,8 +986,6 @@ void Interpreter::ProcessDns(int argc, char *argv[]) strcpy(mResolvingHostname, argv[1]); - messageInfo.mInterfaceId = OT_NETIF_INTERFACE_ID_THREAD; - if (argc > 2) { SuccessOrExit(error = messageInfo.GetPeerAddr().FromString(argv[2])); @@ -1980,7 +1978,6 @@ void Interpreter::ProcessPing(int argc, char *argv[]) VerifyOrExit(!mPingTimer.IsRunning(), error = OT_ERROR_BUSY); SuccessOrExit(error = mMessageInfo.GetPeerAddr().FromString(argv[0])); - mMessageInfo.mInterfaceId = OT_NETIF_INTERFACE_ID_THREAD; mLength = 8; mCount = 1; @@ -2914,8 +2911,6 @@ void Interpreter::ProcessSntp(int argc, char *argv[]) { VerifyOrExit(!mSntpQueryingInProgress, error = OT_ERROR_BUSY); - messageInfo.mInterfaceId = OT_NETIF_INTERFACE_ID_THREAD; - if (argc > 1) { SuccessOrExit(error = messageInfo.GetPeerAddr().FromString(argv[1])); diff --git a/src/cli/cli_coap.cpp b/src/cli/cli_coap.cpp index 99ec88dc1..6330875b9 100644 --- a/src/cli/cli_coap.cpp +++ b/src/cli/cli_coap.cpp @@ -228,9 +228,8 @@ otError Coap::ProcessRequest(int argc, char *argv[]) } memset(&messageInfo, 0, sizeof(messageInfo)); - messageInfo.mPeerAddr = coapDestinationIp; - messageInfo.mPeerPort = OT_DEFAULT_COAP_PORT; - messageInfo.mInterfaceId = OT_NETIF_INTERFACE_ID_THREAD; + messageInfo.mPeerAddr = coapDestinationIp; + messageInfo.mPeerPort = OT_DEFAULT_COAP_PORT; if ((coapType == OT_COAP_TYPE_CONFIRMABLE) || (coapCode == OT_COAP_CODE_GET)) { diff --git a/src/cli/cli_coap_secure.cpp b/src/cli/cli_coap_secure.cpp index be9591180..2535fa34b 100644 --- a/src/cli/cli_coap_secure.cpp +++ b/src/cli/cli_coap_secure.cpp @@ -278,9 +278,8 @@ otError CoapSecure::ProcessRequest(int argc, char *argv[]) } memset(&messageInfo, 0, sizeof(messageInfo)); - messageInfo.mPeerAddr = coapDestinationIp; - messageInfo.mPeerPort = OT_DEFAULT_COAP_PORT; - messageInfo.mInterfaceId = OT_NETIF_INTERFACE_ID_THREAD; + messageInfo.mPeerAddr = coapDestinationIp; + messageInfo.mPeerPort = OT_DEFAULT_COAP_PORT; if ((coapType == OT_COAP_TYPE_CONFIRMABLE) || (coapCode == OT_COAP_CODE_GET)) { @@ -311,8 +310,7 @@ otError CoapSecure::ProcessConnect(int argc, char *argv[]) // Destination IPv6 address memset(&sockaddr, 0, sizeof(sockaddr)); SuccessOrExit(error = otIp6AddressFromString(argv[1], &sockaddr.mAddress)); - sockaddr.mPort = OT_DEFAULT_COAP_SECURE_PORT; - sockaddr.mScopeId = OT_NETIF_INTERFACE_ID_THREAD; + sockaddr.mPort = OT_DEFAULT_COAP_SECURE_PORT; // check for port specification if (argc > 2) diff --git a/src/cli/cli_udp.cpp b/src/cli/cli_udp.cpp index 8c0cbe4f3..5dfff6db2 100644 --- a/src/cli/cli_udp.cpp +++ b/src/cli/cli_udp.cpp @@ -84,8 +84,7 @@ otError UdpExample::ProcessBind(int argc, char *argv[]) error = Interpreter::ParseLong(argv[1], value); SuccessOrExit(error); - sockaddr.mPort = static_cast(value); - sockaddr.mScopeId = OT_NETIF_INTERFACE_ID_THREAD; + sockaddr.mPort = static_cast(value); error = otUdpBind(&mSocket, &sockaddr); @@ -109,8 +108,7 @@ otError UdpExample::ProcessConnect(int argc, char *argv[]) error = Interpreter::ParseLong(argv[1], value); SuccessOrExit(error); - sockaddr.mPort = static_cast(value); - sockaddr.mScopeId = OT_NETIF_INTERFACE_ID_THREAD; + sockaddr.mPort = static_cast(value); error = otUdpConnect(&mSocket, &sockaddr); @@ -155,8 +153,7 @@ otError UdpExample::ProcessSend(int argc, char *argv[]) error = Interpreter::ParseLong(argv[curArg++], value); SuccessOrExit(error); - messageInfo.mPeerPort = static_cast(value); - messageInfo.mInterfaceId = OT_NETIF_INTERFACE_ID_THREAD; + messageInfo.mPeerPort = static_cast(value); } message = otUdpNewMessage(mInterpreter.mInstance, NULL); diff --git a/src/core/api/ip6_api.cpp b/src/core/api/ip6_api.cpp index 4ea69c1fe..26adc1eea 100644 --- a/src/core/api/ip6_api.cpp +++ b/src/core/api/ip6_api.cpp @@ -162,13 +162,9 @@ void otIp6SetReceiveFilterEnabled(otInstance *aInstance, bool aEnabled) otError otIp6Send(otInstance *aInstance, otMessage *aMessage) { - otError error; Instance &instance = *static_cast(aInstance); - error = instance.Get().SendRaw(*static_cast(aMessage), - instance.Get().GetInterfaceId()); - - return error; + return instance.Get().SendRaw(*static_cast(aMessage)); } otMessage *otIp6NewMessage(otInstance *aInstance, const otMessageSettings *aSettings) diff --git a/src/core/api/udp_api.cpp b/src/core/api/udp_api.cpp index 6d955222c..a51358cdb 100644 --- a/src/core/api/udp_api.cpp +++ b/src/core/api/udp_api.cpp @@ -120,7 +120,7 @@ void otUdpForwardReceive(otInstance * aInstance, messageInfo.SetSockPort(aSockPort); messageInfo.SetPeerAddr(*static_cast(aPeerAddr)); messageInfo.SetPeerPort(aPeerPort); - messageInfo.SetInterfaceId(OT_NETIF_INTERFACE_ID_HOST); + messageInfo.SetIsHostInterface(true); instance.Get().HandlePayload(*static_cast(aMessage), messageInfo); diff --git a/src/core/coap/coap.cpp b/src/core/coap/coap.cpp index 8408a6ebb..8835665c7 100644 --- a/src/core/coap/coap.cpp +++ b/src/core/coap/coap.cpp @@ -301,7 +301,6 @@ void CoapBase::HandleRetransmissionTimer(void) messageInfo.SetPeerAddr(coapMetadata.mDestinationAddress); messageInfo.SetPeerPort(coapMetadata.mDestinationPort); messageInfo.SetSockAddr(coapMetadata.mSourceAddress); - messageInfo.SetInterfaceId(Get().GetInterfaceId()); SendCopy(*message, messageInfo); } diff --git a/src/core/common/message.cpp b/src/core/common/message.cpp index 8b7bd2c0b..14cd4222d 100644 --- a/src/core/common/message.cpp +++ b/src/core/common/message.cpp @@ -639,7 +639,6 @@ Message *Message::Clone(uint16_t aLength) const // Copy selected message information. messageCopy->SetOffset(GetOffset()); - messageCopy->SetInterfaceId(GetInterfaceId()); messageCopy->SetSubType(GetSubType()); messageCopy->SetLinkSecurityEnabled(IsLinkSecurityEnabled()); #if OPENTHREAD_CONFIG_ENABLE_TIME_SYNC diff --git a/src/core/common/message.hpp b/src/core/common/message.hpp index e1130a7c6..c72c5a855 100644 --- a/src/core/common/message.hpp +++ b/src/core/common/message.hpp @@ -95,7 +95,6 @@ struct MessageInfo uint8_t mChildMask[8]; ///< A bit-vector to indicate which sleepy children need to receive this. uint8_t mTimeout; ///< Seconds remaining before dropping the message. - int8_t mInterfaceId; ///< The interface ID. union { uint16_t mPanId; ///< Used for MLE Discover Request and Response messages. @@ -590,22 +589,6 @@ public: */ void DecrementTimeout(void) { mBuffer.mHead.mInfo.mTimeout--; } - /** - * This method returns the interface ID. - * - * @returns The interface ID. - * - */ - int8_t GetInterfaceId(void) const { return mBuffer.mHead.mInfo.mInterfaceId; } - - /** - * This method sets the interface ID. - * - * @param[in] aInterfaceId The interface ID value. - * - */ - void SetInterfaceId(int8_t aInterfaceId) { mBuffer.mHead.mInfo.mInterfaceId = aInterfaceId; } - /** * This method returns whether or not message forwarding is scheduled for direct transmission. * diff --git a/src/core/meshcop/announce_begin_client.cpp b/src/core/meshcop/announce_begin_client.cpp index a2a0e54c5..819d4ea44 100644 --- a/src/core/meshcop/announce_begin_client.cpp +++ b/src/core/meshcop/announce_begin_client.cpp @@ -94,7 +94,6 @@ otError AnnounceBeginClient::SendRequest(uint32_t aChannelMask, messageInfo.SetSockAddr(Get().GetMeshLocal16()); messageInfo.SetPeerAddr(aAddress); messageInfo.SetPeerPort(kCoapUdpPort); - messageInfo.SetInterfaceId(Get().GetInterfaceId()); SuccessOrExit(error = Get().SendMessage(*message, messageInfo)); diff --git a/src/core/meshcop/commissioner.cpp b/src/core/meshcop/commissioner.cpp index 4c423ac86..b1aa0cf4e 100644 --- a/src/core/meshcop/commissioner.cpp +++ b/src/core/meshcop/commissioner.cpp @@ -1075,7 +1075,6 @@ otError Commissioner::SendRelayTransmit(Message &aMessage, const Ip6::MessageInf messageInfo.SetPeerAddr(Get().GetMeshLocal16()); messageInfo.GetPeerAddr().mFields.m16[7] = HostSwap16(mJoinerRloc); messageInfo.SetPeerPort(kCoapUdpPort); - messageInfo.SetInterfaceId(Get().GetInterfaceId()); SuccessOrExit(error = Get().SendMessage(*message, messageInfo)); diff --git a/src/core/meshcop/dtls.cpp b/src/core/meshcop/dtls.cpp index 29ad22ed5..467036ece 100644 --- a/src/core/meshcop/dtls.cpp +++ b/src/core/meshcop/dtls.cpp @@ -151,15 +151,6 @@ otError Dtls::Connect(const Ip6::SockAddr &aSockAddr) memcpy(&mPeerAddress.mPeerAddr, &aSockAddr.mAddress, sizeof(mPeerAddress.mPeerAddr)); mPeerAddress.mPeerPort = aSockAddr.mPort; - if (aSockAddr.GetAddress().IsLinkLocal() || aSockAddr.GetAddress().IsMulticast()) - { - mPeerAddress.mInterfaceId = aSockAddr.mScopeId; - } - else - { - mPeerAddress.mInterfaceId = 0; - } - error = Setup(true); exit: @@ -189,7 +180,6 @@ void Dtls::HandleUdpReceive(Message &aMessage, const Ip6::MessageInfo &aMessageI mPeerAddress.SetPeerAddr(aMessageInfo.GetPeerAddr()); mPeerAddress.SetPeerPort(aMessageInfo.GetPeerPort()); - mPeerAddress.SetInterfaceId(aMessageInfo.GetInterfaceId()); if (Get().IsUnicastAddress(aMessageInfo.GetSockAddr())) { diff --git a/src/core/meshcop/energy_scan_client.cpp b/src/core/meshcop/energy_scan_client.cpp index 067b1a02b..372f68029 100644 --- a/src/core/meshcop/energy_scan_client.cpp +++ b/src/core/meshcop/energy_scan_client.cpp @@ -106,7 +106,6 @@ otError EnergyScanClient::SendQuery(uint32_t aChannelM messageInfo.SetSockAddr(Get().GetMeshLocal16()); messageInfo.SetPeerAddr(aAddress); messageInfo.SetPeerPort(kCoapUdpPort); - messageInfo.SetInterfaceId(Get().GetInterfaceId()); SuccessOrExit(error = Get().SendMessage(*message, messageInfo)); otLogInfoMeshCoP("sent energy scan query"); diff --git a/src/core/meshcop/joiner.cpp b/src/core/meshcop/joiner.cpp index 17ba8d780..3162cdc90 100644 --- a/src/core/meshcop/joiner.cpp +++ b/src/core/meshcop/joiner.cpp @@ -341,8 +341,7 @@ otError Joiner::Connect(JoinerRouter &aRouter) sockaddr.GetAddress().mFields.m16[0] = HostSwap16(0xfe80); sockaddr.GetAddress().SetIid(aRouter.mExtAddr); - sockaddr.mPort = aRouter.mJoinerUdpPort; - sockaddr.mScopeId = OT_NETIF_INTERFACE_ID_THREAD; + sockaddr.mPort = aRouter.mJoinerUdpPort; SuccessOrExit(error = Get().Connect(sockaddr, Joiner::HandleSecureCoapClientConnect, this)); diff --git a/src/core/meshcop/joiner_router.cpp b/src/core/meshcop/joiner_router.cpp index 43be7e1c0..e5ca05791 100644 --- a/src/core/meshcop/joiner_router.cpp +++ b/src/core/meshcop/joiner_router.cpp @@ -242,7 +242,6 @@ void JoinerRouter::HandleRelayTransmit(Coap::Message &aMessage, const Ip6::Messa messageInfo.mPeerAddr.mFields.m16[0] = HostSwap16(0xfe80); memcpy(messageInfo.mPeerAddr.mFields.m8 + 8, joinerIid.GetIid(), 8); messageInfo.SetPeerPort(joinerPort.GetUdpPort()); - messageInfo.SetInterfaceId(Get().GetInterfaceId()); SuccessOrExit(error = mSocket.SendTo(*message, messageInfo)); diff --git a/src/core/meshcop/panid_query_client.cpp b/src/core/meshcop/panid_query_client.cpp index 7d5b96313..c10841783 100644 --- a/src/core/meshcop/panid_query_client.cpp +++ b/src/core/meshcop/panid_query_client.cpp @@ -93,7 +93,6 @@ otError PanIdQueryClient::SendQuery(uint16_t aPanId, messageInfo.SetSockAddr(Get().GetMeshLocal16()); messageInfo.SetPeerAddr(aAddress); messageInfo.SetPeerPort(kCoapUdpPort); - messageInfo.SetInterfaceId(Get().GetInterfaceId()); SuccessOrExit(error = Get().SendMessage(*message, messageInfo)); otLogInfoMeshCoP("sent panid query"); diff --git a/src/core/net/dhcp6_client.cpp b/src/core/net/dhcp6_client.cpp index e15aaa7b0..47f3e7749 100644 --- a/src/core/net/dhcp6_client.cpp +++ b/src/core/net/dhcp6_client.cpp @@ -282,8 +282,7 @@ otError Dhcp6Client::Solicit(uint16_t aRloc16) messageInfo.GetPeerAddr().mFields.m16[6] = HostSwap16(0xfe00); messageInfo.GetPeerAddr().mFields.m16[7] = HostSwap16(aRloc16); messageInfo.SetSockAddr(Get().GetMeshLocal16()); - messageInfo.mPeerPort = kDhcpServerPort; - messageInfo.mInterfaceId = Get().GetInterfaceId(); + messageInfo.mPeerPort = kDhcpServerPort; SuccessOrExit(error = mSocket.SendTo(*message, messageInfo)); otLogInfoIp6("solicit"); diff --git a/src/core/net/icmp6.cpp b/src/core/net/icmp6.cpp index 407d130e4..e4a981b42 100644 --- a/src/core/net/icmp6.cpp +++ b/src/core/net/icmp6.cpp @@ -232,8 +232,6 @@ otError Icmp::HandleEchoRequest(Message &aRequestMessage, const MessageInfo &aMe replyMessageInfo.SetSockAddr(aMessageInfo.GetSockAddr()); } - replyMessageInfo.SetInterfaceId(aMessageInfo.mInterfaceId); - SuccessOrExit(error = Get().SendDatagram(*replyMessage, replyMessageInfo, kProtoIcmp6)); replyMessage->Read(replyMessage->GetOffset(), sizeof(icmp6Header), &icmp6Header); diff --git a/src/core/net/ip6.cpp b/src/core/net/ip6.cpp index 05cf0116f..03a7a5b92 100644 --- a/src/core/net/ip6.cpp +++ b/src/core/net/ip6.cpp @@ -306,7 +306,7 @@ otError Ip6::InsertMplOption(Message &aMessage, Header &aHeader, MessageInfo &aM if ((messageCopy = aMessage.Clone()) != NULL) { - HandleDatagram(*messageCopy, NULL, aMessageInfo.GetInterfaceId(), NULL, true); + HandleDatagram(*messageCopy, NULL, NULL, true); otLogInfoIp6("Message copy for indirect transmission to sleepy children"); } else @@ -470,11 +470,6 @@ otError Ip6::SendDatagram(Message &aMessage, MessageInfo &aMessageInfo, IpProto header.SetDestination(aMessageInfo.GetPeerAddr()); - if (header.GetDestination().IsLinkLocal() || header.GetDestination().IsLinkLocalMulticast()) - { - VerifyOrExit(aMessageInfo.GetInterfaceId() != 0, error = OT_ERROR_DROP); - } - if (aMessageInfo.GetPeerAddr().IsRealmLocalMulticast()) { SuccessOrExit(error = AddMplOption(aMessage, header)); @@ -508,7 +503,6 @@ otError Ip6::SendDatagram(Message &aMessage, MessageInfo &aMessageInfo, IpProto if ((messageCopy = aMessage.Clone()) != NULL) { otLogInfoIp6("Message copy for indirect transmission to sleepy children"); - messageCopy->SetInterfaceId(aMessageInfo.GetInterfaceId()); EnqueueDatagram(*messageCopy); } else @@ -524,7 +518,6 @@ exit: if (error == OT_ERROR_NONE) { - aMessage.SetInterfaceId(aMessageInfo.GetInterfaceId()); EnqueueDatagram(aMessage); } @@ -543,7 +536,7 @@ void Ip6::HandleSendQueue(void) while ((message = mSendQueue.GetHead()) != NULL) { mSendQueue.Dequeue(*message); - HandleDatagram(*message, NULL, message->GetInterfaceId(), NULL, false); + HandleDatagram(*message, NULL, NULL, false); } } @@ -793,7 +786,7 @@ exit: return error; } -otError Ip6::SendRaw(Message &aMessage, int8_t aInterfaceId) +otError Ip6::SendRaw(Message &aMessage) { otError error = OT_ERROR_NONE; Header header; @@ -804,7 +797,6 @@ otError Ip6::SendRaw(Message &aMessage, int8_t aInterfaceId) messageInfo.SetPeerAddr(header.GetSource()); messageInfo.SetSockAddr(header.GetDestination()); - messageInfo.SetInterfaceId(aInterfaceId); messageInfo.SetHopLimit(header.GetHopLimit()); messageInfo.SetLinkInfo(NULL); @@ -813,7 +805,7 @@ otError Ip6::SendRaw(Message &aMessage, int8_t aInterfaceId) SuccessOrExit(error = InsertMplOption(aMessage, header, messageInfo)); } - error = HandleDatagram(aMessage, NULL, aInterfaceId, NULL, true); + error = HandleDatagram(aMessage, NULL, NULL, true); freed = true; exit: @@ -826,11 +818,7 @@ exit: return error; } -otError Ip6::HandleDatagram(Message & aMessage, - Netif * aNetif, - int8_t aInterfaceId, - const void *aLinkMessageInfo, - bool aFromNcpHost) +otError Ip6::HandleDatagram(Message &aMessage, Netif *aNetif, const void *aLinkMessageInfo, bool aFromNcpHost) { otError error = OT_ERROR_NONE; MessageInfo messageInfo; @@ -846,7 +834,6 @@ otError Ip6::HandleDatagram(Message & aMessage, messageInfo.SetPeerAddr(header.GetSource()); messageInfo.SetSockAddr(header.GetDestination()); - messageInfo.SetInterfaceId(aInterfaceId); messageInfo.SetHopLimit(header.GetHopLimit()); messageInfo.SetLinkInfo(aLinkMessageInfo); @@ -891,7 +878,6 @@ otError Ip6::HandleDatagram(Message & aMessage, } } - aMessage.SetInterfaceId(aInterfaceId); aMessage.SetOffset(sizeof(header)); // process IPv6 Extension Headers @@ -906,7 +892,7 @@ otError Ip6::HandleDatagram(Message & aMessage, // Remove encapsulating header. aMessage.RemoveHeader(aMessage.GetOffset()); - HandleDatagram(aMessage, aNetif, aInterfaceId, aLinkMessageInfo, aFromNcpHost); + HandleDatagram(aMessage, aNetif, aLinkMessageInfo, aFromNcpHost); ExitNow(tunnel = true); } diff --git a/src/core/net/ip6.hpp b/src/core/net/ip6.hpp index 23e7dcad3..edbe30dc2 100644 --- a/src/core/net/ip6.hpp +++ b/src/core/net/ip6.hpp @@ -186,7 +186,6 @@ public: * processing is complete, including when a value other than `OT_ERROR_NONE` is returned. * * @param[in] aMessage A reference to the message. - * @param[in] aInterfaceId The interface identifier of the network interface that received the message. * * @retval OT_ERROR_NONE Successfully processed the message. * @retval OT_ERROR_DROP Message was well-formed but not fully processed due to packet processing rules. @@ -195,14 +194,13 @@ public: * @retval OT_ERROR_PARSE Encountered a malformed header when processing the message. * */ - otError SendRaw(Message &aMessage, int8_t aInterfaceId); + otError SendRaw(Message &aMessage); /** * This method processes a received IPv6 datagram. * * @param[in] aMessage A reference to the message. * @param[in] aNetif A pointer to the network interface that received the message. - * @param[in] aInterfaceId The interface identifier of the network interface that received the message. * @param[in] aLinkMessageInfo A pointer to link-specific message information. * @param[in] aFromNcpHost TRUE if the message was submitted by the NCP host, FALSE otherwise. * @@ -213,11 +211,7 @@ public: * @retval OT_ERROR_PARSE Encountered a malformed header when processing the message. * */ - otError HandleDatagram(Message & aMessage, - Netif * aNetif, - int8_t aInterfaceId, - const void *aLinkMessageInfo, - bool aFromNcpHost); + otError HandleDatagram(Message &aMessage, Netif *aNetif, const void *aLinkMessageInfo, bool aFromNcpHost); /** * This methods adds a full IPv6 packet to the transmit queue. diff --git a/src/core/net/netif.cpp b/src/core/net/netif.cpp index 93120da9a..41d53bf5f 100644 --- a/src/core/net/netif.cpp +++ b/src/core/net/netif.cpp @@ -80,11 +80,10 @@ const otNetifMulticastAddress Netif::kLinkLocalAllRoutersMulticastAddress = { {{{0xff, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02}}}, &Netif::kRealmLocalAllRoutersMulticastAddress}; -Netif::Netif(Instance &aInstance, int8_t aInterfaceId) +Netif::Netif(Instance &aInstance) : InstanceLocator(aInstance) , mUnicastAddresses(NULL) , mMulticastAddresses(NULL) - , mInterfaceId(aInterfaceId) , mMulticastPromiscuous(false) , mNext(NULL) , mAddressCallback(NULL) diff --git a/src/core/net/netif.hpp b/src/core/net/netif.hpp index a0cedf6e4..8987c283b 100644 --- a/src/core/net/netif.hpp +++ b/src/core/net/netif.hpp @@ -189,10 +189,9 @@ public: * This constructor initializes the network interface. * * @param[in] aInstance A reference to the OpenThread instance. - * @param[in] aInterfaceId The interface ID for this object. * */ - Netif(Instance &aInstance, int8_t aInterfaceId); + Netif(Instance &aInstance); /** * This method returns the next network interface in the list. @@ -201,14 +200,6 @@ public: */ Netif *GetNext(void) const { return mNext; } - /** - * This method returns the network interface identifier. - * - * @returns The network interface identifier. - * - */ - int8_t GetInterfaceId(void) const { return mInterfaceId; } - /** * This method registers a callback to notify internal IPv6 address changes. * @@ -480,7 +471,6 @@ private: NetifUnicastAddress * mUnicastAddresses; NetifMulticastAddress *mMulticastAddresses; - int8_t mInterfaceId; bool mMulticastPromiscuous; Netif * mNext; diff --git a/src/core/net/socket.hpp b/src/core/net/socket.hpp index 974855366..8eee000c9 100644 --- a/src/core/net/socket.hpp +++ b/src/core/net/socket.hpp @@ -133,22 +133,6 @@ public: */ void SetPeerPort(uint16_t aPort) { mPeerPort = aPort; } - /** - * This method gets the Interface ID. - * - * @returns The Interface ID. - * - */ - int8_t GetInterfaceId(void) const { return mInterfaceId; } - - /** - * This method sets the Interface ID. - * - * @param[in] aInterfaceId The Interface ID. - * - */ - void SetInterfaceId(int8_t aInterfaceId) { mInterfaceId = aInterfaceId; } - /** * This method gets the Hop Limit. * @@ -180,6 +164,23 @@ public: * */ void SetLinkInfo(const void *aLinkInfo) { mLinkInfo = aLinkInfo; } + + /** + * This method indicates whether peer is via the host interface. + * + * @retval TRUE if the peer is via the host interface. + * @retval FALSE if the peer is via the Thread interface. + * + */ + bool IsHostInterface(void) const { return mIsHostInterface; } + + /** + * This method sets whether the peer is via the host interface. + * + * @param[in] aIsHost TRUE if the peer is via the host interface, FALSE otherwise. + * + */ + void SetIsHostInterface(bool aIsHost) { mIsHostInterface = aIsHost; } }; /** diff --git a/src/core/net/udp6.cpp b/src/core/net/udp6.cpp index 5727dc44c..126ea10a2 100644 --- a/src/core/net/udp6.cpp +++ b/src/core/net/udp6.cpp @@ -323,7 +323,7 @@ otError Udp::SendDatagram(Message &aMessage, MessageInfo &aMessageInfo, IpProto otError error = OT_ERROR_NONE; #if OPENTHREAD_ENABLE_UDP_FORWARD - if (aMessageInfo.GetInterfaceId() == OT_NETIF_INTERFACE_ID_HOST) + if (aMessageInfo.IsHostInterface()) { VerifyOrExit(mUdpForwarder != NULL, error = OT_ERROR_NO_ROUTE); mUdpForwarder(&aMessage, aMessageInfo.mPeerPort, &aMessageInfo.GetPeerAddr(), aMessageInfo.mSockPort, @@ -402,11 +402,6 @@ void Udp::HandlePayload(Message &aMessage, MessageInfo &aMessageInfo) continue; } - if (socket->GetSockName().mScopeId != 0 && socket->GetSockName().mScopeId != aMessageInfo.mInterfaceId) - { - continue; - } - if (!aMessageInfo.GetSockAddr().IsMulticast() && !socket->GetSockName().GetAddress().IsUnspecified() && socket->GetSockName().GetAddress() != aMessageInfo.GetSockAddr()) { diff --git a/src/core/openthread-core-config-check.h b/src/core/openthread-core-config-check.h index 290189a98..cd2a6cdaa 100644 --- a/src/core/openthread-core-config-check.h +++ b/src/core/openthread-core-config-check.h @@ -34,6 +34,10 @@ #ifndef OPENTHREAD_CORE_CONFIG_CHECK_H_ #define OPENTHREAD_CORE_CONFIG_CHECK_H_ +#if OPENTHREAD_ENABLE_PLATFORM_UDP && OPENTHREAD_ENABLE_UDP_FORWARD +#error "OPENTHREAD_ENABLE_PLATFORM_UDP and OPENTHREAD_ENABLE_UDP_FORWARD must not both be set." +#endif + /* * Removed or replaced OPENTHREAD_CONFIG options. * diff --git a/src/core/thread/address_resolver.cpp b/src/core/thread/address_resolver.cpp index f0781b3b1..15e791436 100644 --- a/src/core/thread/address_resolver.cpp +++ b/src/core/thread/address_resolver.cpp @@ -333,7 +333,6 @@ otError AddressResolver::SendAddressQuery(const Ip6::Address &aEid) messageInfo.GetPeerAddr().mFields.m16[7] = HostSwap16(0x0002); messageInfo.SetSockAddr(Get().GetMeshLocal16()); messageInfo.SetPeerPort(kCoapUdpPort); - messageInfo.SetInterfaceId(Get().GetInterfaceId()); SuccessOrExit(error = Get().SendMessage(*message, messageInfo)); @@ -477,7 +476,6 @@ otError AddressResolver::SendAddressError(const ThreadTargetTlv & aTarget, messageInfo.SetSockAddr(Get().GetMeshLocal16()); messageInfo.SetPeerPort(kCoapUdpPort); - messageInfo.SetInterfaceId(Get().GetInterfaceId()); SuccessOrExit(error = Get().SendMessage(*message, messageInfo)); diff --git a/src/core/thread/mesh_forwarder.cpp b/src/core/thread/mesh_forwarder.cpp index 943efe122..548ae3602 100644 --- a/src/core/thread/mesh_forwarder.cpp +++ b/src/core/thread/mesh_forwarder.cpp @@ -1501,7 +1501,7 @@ otError MeshForwarder::HandleDatagram(Message & aMessage, mIpCounters.mRxSuccess++; } - return Get().HandleDatagram(aMessage, &netif, netif.GetInterfaceId(), &aLinkInfo, false); + return Get().HandleDatagram(aMessage, &netif, &aLinkInfo, false); } otError MeshForwarder::GetFramePriority(const uint8_t * aFrame, diff --git a/src/core/thread/mle.cpp b/src/core/thread/mle.cpp index 348e27986..c732cb714 100644 --- a/src/core/thread/mle.cpp +++ b/src/core/thread/mle.cpp @@ -2554,7 +2554,6 @@ otError Mle::SendMessage(Message &aMessage, const Ip6::Address &aDestination) messageInfo.SetPeerAddr(aDestination); messageInfo.SetSockAddr(mLinkLocal64.GetAddress()); messageInfo.SetPeerPort(kUdpPort); - messageInfo.SetInterfaceId(Get().GetInterfaceId()); messageInfo.SetHopLimit(kMleHopLimit); SuccessOrExit(error = mSocket.SendTo(aMessage, messageInfo)); @@ -3991,7 +3990,6 @@ otError Mle::CheckReachability(uint16_t aMeshSource, uint16_t aMeshDest, Ip6::He messageInfo.GetPeerAddr() = GetMeshLocal16(); messageInfo.GetPeerAddr().mFields.m16[7] = HostSwap16(aMeshSource); - messageInfo.SetInterfaceId(Get().GetInterfaceId()); Get().SendError(Ip6::IcmpHeader::kTypeDstUnreach, Ip6::IcmpHeader::kCodeDstUnreachNoRoute, messageInfo, aIp6Header); @@ -4017,7 +4015,6 @@ otError Mle::InformPreviousParent(void) messageInfo.SetSockAddr(GetMeshLocal64()); messageInfo.SetPeerAddr(GetMeshLocal16()); messageInfo.GetPeerAddr().mFields.m16[7] = HostSwap16(mPreviousParentRloc); - messageInfo.SetInterfaceId(Get().GetInterfaceId()); SuccessOrExit(error = Get().SendDatagram(*message, messageInfo, Ip6::kProtoNone)); diff --git a/src/core/thread/mle_router.cpp b/src/core/thread/mle_router.cpp index 8eb1e620b..d0004c064 100644 --- a/src/core/thread/mle_router.cpp +++ b/src/core/thread/mle_router.cpp @@ -3766,7 +3766,6 @@ otError MleRouter::CheckReachability(uint16_t aMeshSource, uint16_t aMeshDest, I messageInfo.GetPeerAddr() = GetMeshLocal16(); messageInfo.GetPeerAddr().mFields.m16[7] = HostSwap16(aMeshSource); - messageInfo.SetInterfaceId(Get().GetInterfaceId()); Get().SendError(Ip6::IcmpHeader::kTypeDstUnreach, Ip6::IcmpHeader::kCodeDstUnreachNoRoute, messageInfo, aIp6Header); diff --git a/src/core/thread/network_diagnostic.cpp b/src/core/thread/network_diagnostic.cpp index 23e106b01..5ddacb1bc 100644 --- a/src/core/thread/network_diagnostic.cpp +++ b/src/core/thread/network_diagnostic.cpp @@ -118,7 +118,6 @@ otError NetworkDiagnostic::SendDiagnosticGet(const Ip6::Address &aDestination, messageInfo.SetSockAddr(Get().GetMeshLocal16()); messageInfo.SetPeerAddr(aDestination); messageInfo.SetPeerPort(kCoapUdpPort); - messageInfo.SetInterfaceId(Get().GetInterfaceId()); SuccessOrExit(error = Get().SendMessage(*message, messageInfo, handler, this)); @@ -503,7 +502,6 @@ void NetworkDiagnostic::HandleDiagnosticGetQuery(Coap::Message &aMessage, const messageInfo.SetSockAddr(Get().GetMeshLocal16()); messageInfo.SetPeerAddr(aMessageInfo.GetPeerAddr()); messageInfo.SetPeerPort(kCoapUdpPort); - messageInfo.SetInterfaceId(Get().GetInterfaceId()); SuccessOrExit(error = FillRequestedTlvs(aMessage, *message, networkDiagnosticTlv)); @@ -606,7 +604,6 @@ otError NetworkDiagnostic::SendDiagnosticReset(const Ip6::Address &aDestination, messageInfo.SetSockAddr(Get().GetMeshLocal16()); messageInfo.SetPeerAddr(aDestination); messageInfo.SetPeerPort(kCoapUdpPort); - messageInfo.SetInterfaceId(Get().GetInterfaceId()); SuccessOrExit(error = Get().SendMessage(*message, messageInfo)); diff --git a/src/core/thread/thread_netif.cpp b/src/core/thread/thread_netif.cpp index 2b29c52f1..8912db0d4 100644 --- a/src/core/thread/thread_netif.cpp +++ b/src/core/thread/thread_netif.cpp @@ -48,7 +48,7 @@ namespace ot { ThreadNetif::ThreadNetif(Instance &aInstance) - : Netif(aInstance, OT_NETIF_INTERFACE_ID_THREAD) + : Netif(aInstance) , mCoap(aInstance) #if OPENTHREAD_ENABLE_DHCP6_CLIENT , mDhcp6Client(aInstance) diff --git a/src/posix/platform/udp.cpp b/src/posix/platform/udp.cpp index 1add07227..0b42ac358 100644 --- a/src/posix/platform/udp.cpp +++ b/src/posix/platform/udp.cpp @@ -92,7 +92,7 @@ static otError transmitPacket(int aFd, uint8_t *aPayload, uint16_t aLength, cons peerAddr.sin6_family = AF_INET6; memcpy(&peerAddr.sin6_addr, &aMessageInfo.mPeerAddr, sizeof(peerAddr.sin6_addr)); - if (IsLinkLocal(peerAddr.sin6_addr) && aMessageInfo.mInterfaceId == OT_NETIF_INTERFACE_ID_THREAD) + if (IsLinkLocal(peerAddr.sin6_addr) && !aMessageInfo.mIsHostInterface) { // sin6_scope_id only works for link local destinations peerAddr.sin6_scope_id = sPlatNetifIndex; @@ -135,7 +135,7 @@ static otError transmitPacket(int aFd, uint8_t *aPayload, uint16_t aLength, cons cmsg->cmsg_type = IPV6_PKTINFO; cmsg->cmsg_len = CMSG_LEN(sizeof(pktinfo)); - pktinfo.ipi6_ifindex = (aMessageInfo.mInterfaceId == OT_NETIF_INTERFACE_ID_THREAD ? sPlatNetifIndex : 0); + pktinfo.ipi6_ifindex = aMessageInfo.mIsHostInterface ? 0 : sPlatNetifIndex; memcpy(&pktinfo.ipi6_addr, &aMessageInfo.mSockAddr, sizeof(pktinfo.ipi6_addr)); memcpy(CMSG_DATA(cmsg), &pktinfo, sizeof(pktinfo)); @@ -197,8 +197,7 @@ static otError receivePacket(int aFd, uint8_t *aPayload, uint16_t &aLength, otMe memcpy(&pktinfo, CMSG_DATA(cmsg), sizeof(pktinfo)); - aMessageInfo.mInterfaceId = - (pktinfo.ipi6_ifindex == sPlatNetifIndex ? static_cast(OT_NETIF_INTERFACE_ID_THREAD) : 0); + aMessageInfo.mIsHostInterface = (pktinfo.ipi6_ifindex != sPlatNetifIndex); memcpy(&aMessageInfo.mSockAddr, &pktinfo.ipi6_addr, sizeof(aMessageInfo.mSockAddr)); } }