[netif] remove interface id specification from interfaces (#3925)

This commit is contained in:
Jonathan Hui
2019-06-20 09:30:56 -07:00
parent df16da30f8
commit 1631d23a13
36 changed files with 62 additions and 177 deletions
+1 -1
View File
@@ -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() {
@@ -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);
@@ -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);
+7 -23
View File
@@ -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;
/**
-5
View File
@@ -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]));
+2 -3
View File
@@ -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))
{
+3 -5
View File
@@ -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)
+3 -6
View File
@@ -84,8 +84,7 @@ otError UdpExample::ProcessBind(int argc, char *argv[])
error = Interpreter::ParseLong(argv[1], value);
SuccessOrExit(error);
sockaddr.mPort = static_cast<uint16_t>(value);
sockaddr.mScopeId = OT_NETIF_INTERFACE_ID_THREAD;
sockaddr.mPort = static_cast<uint16_t>(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<uint16_t>(value);
sockaddr.mScopeId = OT_NETIF_INTERFACE_ID_THREAD;
sockaddr.mPort = static_cast<uint16_t>(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<uint16_t>(value);
messageInfo.mInterfaceId = OT_NETIF_INTERFACE_ID_THREAD;
messageInfo.mPeerPort = static_cast<uint16_t>(value);
}
message = otUdpNewMessage(mInterpreter.mInstance, NULL);
+1 -5
View File
@@ -162,13 +162,9 @@ void otIp6SetReceiveFilterEnabled(otInstance *aInstance, bool aEnabled)
otError otIp6Send(otInstance *aInstance, otMessage *aMessage)
{
otError error;
Instance &instance = *static_cast<Instance *>(aInstance);
error = instance.Get<Ip6::Ip6>().SendRaw(*static_cast<Message *>(aMessage),
instance.Get<ThreadNetif>().GetInterfaceId());
return error;
return instance.Get<Ip6::Ip6>().SendRaw(*static_cast<Message *>(aMessage));
}
otMessage *otIp6NewMessage(otInstance *aInstance, const otMessageSettings *aSettings)
+1 -1
View File
@@ -120,7 +120,7 @@ void otUdpForwardReceive(otInstance * aInstance,
messageInfo.SetSockPort(aSockPort);
messageInfo.SetPeerAddr(*static_cast<const ot::Ip6::Address *>(aPeerAddr));
messageInfo.SetPeerPort(aPeerPort);
messageInfo.SetInterfaceId(OT_NETIF_INTERFACE_ID_HOST);
messageInfo.SetIsHostInterface(true);
instance.Get<Ip6::Udp>().HandlePayload(*static_cast<ot::Message *>(aMessage), messageInfo);
-1
View File
@@ -301,7 +301,6 @@ void CoapBase::HandleRetransmissionTimer(void)
messageInfo.SetPeerAddr(coapMetadata.mDestinationAddress);
messageInfo.SetPeerPort(coapMetadata.mDestinationPort);
messageInfo.SetSockAddr(coapMetadata.mSourceAddress);
messageInfo.SetInterfaceId(Get<ThreadNetif>().GetInterfaceId());
SendCopy(*message, messageInfo);
}
-1
View File
@@ -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
-17
View File
@@ -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.
*
@@ -94,7 +94,6 @@ otError AnnounceBeginClient::SendRequest(uint32_t aChannelMask,
messageInfo.SetSockAddr(Get<Mle::MleRouter>().GetMeshLocal16());
messageInfo.SetPeerAddr(aAddress);
messageInfo.SetPeerPort(kCoapUdpPort);
messageInfo.SetInterfaceId(Get<ThreadNetif>().GetInterfaceId());
SuccessOrExit(error = Get<Coap::Coap>().SendMessage(*message, messageInfo));
-1
View File
@@ -1075,7 +1075,6 @@ otError Commissioner::SendRelayTransmit(Message &aMessage, const Ip6::MessageInf
messageInfo.SetPeerAddr(Get<Mle::MleRouter>().GetMeshLocal16());
messageInfo.GetPeerAddr().mFields.m16[7] = HostSwap16(mJoinerRloc);
messageInfo.SetPeerPort(kCoapUdpPort);
messageInfo.SetInterfaceId(Get<ThreadNetif>().GetInterfaceId());
SuccessOrExit(error = Get<Coap::Coap>().SendMessage(*message, messageInfo));
-10
View File
@@ -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<ThreadNetif>().IsUnicastAddress(aMessageInfo.GetSockAddr()))
{
-1
View File
@@ -106,7 +106,6 @@ otError EnergyScanClient::SendQuery(uint32_t aChannelM
messageInfo.SetSockAddr(Get<Mle::MleRouter>().GetMeshLocal16());
messageInfo.SetPeerAddr(aAddress);
messageInfo.SetPeerPort(kCoapUdpPort);
messageInfo.SetInterfaceId(Get<ThreadNetif>().GetInterfaceId());
SuccessOrExit(error = Get<Coap::Coap>().SendMessage(*message, messageInfo));
otLogInfoMeshCoP("sent energy scan query");
+1 -2
View File
@@ -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<Coap::CoapSecure>().Connect(sockaddr, Joiner::HandleSecureCoapClientConnect, this));
-1
View File
@@ -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<ThreadNetif>().GetInterfaceId());
SuccessOrExit(error = mSocket.SendTo(*message, messageInfo));
-1
View File
@@ -93,7 +93,6 @@ otError PanIdQueryClient::SendQuery(uint16_t aPanId,
messageInfo.SetSockAddr(Get<Mle::MleRouter>().GetMeshLocal16());
messageInfo.SetPeerAddr(aAddress);
messageInfo.SetPeerPort(kCoapUdpPort);
messageInfo.SetInterfaceId(Get<ThreadNetif>().GetInterfaceId());
SuccessOrExit(error = Get<Coap::Coap>().SendMessage(*message, messageInfo));
otLogInfoMeshCoP("sent panid query");
+1 -2
View File
@@ -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<Mle::MleRouter>().GetMeshLocal16());
messageInfo.mPeerPort = kDhcpServerPort;
messageInfo.mInterfaceId = Get<ThreadNetif>().GetInterfaceId();
messageInfo.mPeerPort = kDhcpServerPort;
SuccessOrExit(error = mSocket.SendTo(*message, messageInfo));
otLogInfoIp6("solicit");
-2
View File
@@ -232,8 +232,6 @@ otError Icmp::HandleEchoRequest(Message &aRequestMessage, const MessageInfo &aMe
replyMessageInfo.SetSockAddr(aMessageInfo.GetSockAddr());
}
replyMessageInfo.SetInterfaceId(aMessageInfo.mInterfaceId);
SuccessOrExit(error = Get<Ip6>().SendDatagram(*replyMessage, replyMessageInfo, kProtoIcmp6));
replyMessage->Read(replyMessage->GetOffset(), sizeof(icmp6Header), &icmp6Header);
+6 -20
View File
@@ -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);
}
+2 -8
View File
@@ -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.
+1 -2
View File
@@ -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)
+1 -11
View File
@@ -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;
+17 -16
View File
@@ -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; }
};
/**
+1 -6
View File
@@ -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())
{
+4
View File
@@ -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.
*
-2
View File
@@ -333,7 +333,6 @@ otError AddressResolver::SendAddressQuery(const Ip6::Address &aEid)
messageInfo.GetPeerAddr().mFields.m16[7] = HostSwap16(0x0002);
messageInfo.SetSockAddr(Get<Mle::MleRouter>().GetMeshLocal16());
messageInfo.SetPeerPort(kCoapUdpPort);
messageInfo.SetInterfaceId(Get<ThreadNetif>().GetInterfaceId());
SuccessOrExit(error = Get<Coap::Coap>().SendMessage(*message, messageInfo));
@@ -477,7 +476,6 @@ otError AddressResolver::SendAddressError(const ThreadTargetTlv & aTarget,
messageInfo.SetSockAddr(Get<Mle::MleRouter>().GetMeshLocal16());
messageInfo.SetPeerPort(kCoapUdpPort);
messageInfo.SetInterfaceId(Get<ThreadNetif>().GetInterfaceId());
SuccessOrExit(error = Get<Coap::Coap>().SendMessage(*message, messageInfo));
+1 -1
View File
@@ -1501,7 +1501,7 @@ otError MeshForwarder::HandleDatagram(Message & aMessage,
mIpCounters.mRxSuccess++;
}
return Get<Ip6::Ip6>().HandleDatagram(aMessage, &netif, netif.GetInterfaceId(), &aLinkInfo, false);
return Get<Ip6::Ip6>().HandleDatagram(aMessage, &netif, &aLinkInfo, false);
}
otError MeshForwarder::GetFramePriority(const uint8_t * aFrame,
-3
View File
@@ -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<ThreadNetif>().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<ThreadNetif>().GetInterfaceId());
Get<Ip6::Icmp>().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<ThreadNetif>().GetInterfaceId());
SuccessOrExit(error = Get<Ip6::Ip6>().SendDatagram(*message, messageInfo, Ip6::kProtoNone));
-1
View File
@@ -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<ThreadNetif>().GetInterfaceId());
Get<Ip6::Icmp>().SendError(Ip6::IcmpHeader::kTypeDstUnreach, Ip6::IcmpHeader::kCodeDstUnreachNoRoute, messageInfo,
aIp6Header);
-3
View File
@@ -118,7 +118,6 @@ otError NetworkDiagnostic::SendDiagnosticGet(const Ip6::Address &aDestination,
messageInfo.SetSockAddr(Get<Mle::MleRouter>().GetMeshLocal16());
messageInfo.SetPeerAddr(aDestination);
messageInfo.SetPeerPort(kCoapUdpPort);
messageInfo.SetInterfaceId(Get<ThreadNetif>().GetInterfaceId());
SuccessOrExit(error = Get<Coap::Coap>().SendMessage(*message, messageInfo, handler, this));
@@ -503,7 +502,6 @@ void NetworkDiagnostic::HandleDiagnosticGetQuery(Coap::Message &aMessage, const
messageInfo.SetSockAddr(Get<Mle::MleRouter>().GetMeshLocal16());
messageInfo.SetPeerAddr(aMessageInfo.GetPeerAddr());
messageInfo.SetPeerPort(kCoapUdpPort);
messageInfo.SetInterfaceId(Get<ThreadNetif>().GetInterfaceId());
SuccessOrExit(error = FillRequestedTlvs(aMessage, *message, networkDiagnosticTlv));
@@ -606,7 +604,6 @@ otError NetworkDiagnostic::SendDiagnosticReset(const Ip6::Address &aDestination,
messageInfo.SetSockAddr(Get<Mle::MleRouter>().GetMeshLocal16());
messageInfo.SetPeerAddr(aDestination);
messageInfo.SetPeerPort(kCoapUdpPort);
messageInfo.SetInterfaceId(Get<ThreadNetif>().GetInterfaceId());
SuccessOrExit(error = Get<Coap::Coap>().SendMessage(*message, messageInfo));
+1 -1
View File
@@ -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)
+3 -4
View File
@@ -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<int8_t>(OT_NETIF_INTERFACE_ID_THREAD) : 0);
aMessageInfo.mIsHostInterface = (pktinfo.ipi6_ifindex != sPlatNetifIndex);
memcpy(&aMessageInfo.mSockAddr, &pktinfo.ipi6_addr, sizeof(aMessageInfo.mSockAddr));
}
}