mirror of
https://github.com/espressif/openthread.git
synced 2026-09-12 04:00:10 +00:00
[netif] remove interface id specification from interfaces (#3925)
This commit is contained in:
@@ -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);
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
/**
|
||||
|
||||
@@ -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]));
|
||||
|
||||
@@ -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))
|
||||
{
|
||||
|
||||
@@ -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
@@ -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);
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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));
|
||||
|
||||
|
||||
@@ -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));
|
||||
|
||||
|
||||
@@ -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()))
|
||||
{
|
||||
|
||||
@@ -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");
|
||||
|
||||
@@ -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));
|
||||
|
||||
|
||||
@@ -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));
|
||||
|
||||
|
||||
@@ -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");
|
||||
|
||||
@@ -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");
|
||||
|
||||
@@ -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
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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
@@ -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
@@ -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; }
|
||||
};
|
||||
|
||||
/**
|
||||
|
||||
@@ -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())
|
||||
{
|
||||
|
||||
@@ -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.
|
||||
*
|
||||
|
||||
@@ -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));
|
||||
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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));
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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));
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user