From caf268c45e0963b973a550d8a22f9cd11fa3855f Mon Sep 17 00:00:00 2001 From: Jonathan Hui Date: Thu, 13 Jun 2019 08:32:05 -0700 Subject: [PATCH] [route-table] remove unused Ip6::Routes (#3911) --- Android.mk | 1 - src/core/Makefile.am | 2 - src/core/common/instance.hpp | 5 -- src/core/net/ip6.cpp | 23 +++++- src/core/net/ip6.hpp | 19 +++-- src/core/net/ip6_routes.cpp | 132 ----------------------------------- src/core/net/ip6_routes.hpp | 125 --------------------------------- 7 files changed, 34 insertions(+), 273 deletions(-) delete mode 100644 src/core/net/ip6_routes.cpp delete mode 100644 src/core/net/ip6_routes.hpp diff --git a/Android.mk b/Android.mk index 6bec7b4f9..f07d38e0e 100644 --- a/Android.mk +++ b/Android.mk @@ -184,7 +184,6 @@ LOCAL_SRC_FILES := \ src/core/net/ip6_filter.cpp \ src/core/net/ip6_headers.cpp \ src/core/net/ip6_mpl.cpp \ - src/core/net/ip6_routes.cpp \ src/core/net/netif.cpp \ src/core/net/udp6.cpp \ src/core/phy/radio_weak.cpp \ diff --git a/src/core/Makefile.am b/src/core/Makefile.am index 19a605f52..624152250 100644 --- a/src/core/Makefile.am +++ b/src/core/Makefile.am @@ -190,7 +190,6 @@ SOURCES_COMMON = \ net/ip6_filter.cpp \ net/ip6_headers.cpp \ net/ip6_mpl.cpp \ - net/ip6_routes.cpp \ net/netif.cpp \ net/sntp_client.cpp \ net/udp6.cpp \ @@ -359,7 +358,6 @@ HEADERS_COMMON = \ net/ip6_filter.hpp \ net/ip6_headers.hpp \ net/ip6_mpl.hpp \ - net/ip6_routes.hpp \ net/netif.hpp \ net/sntp_client.hpp \ net/socket.hpp \ diff --git a/src/core/common/instance.hpp b/src/core/common/instance.hpp index 0f5eb3570..3a01fabea 100644 --- a/src/core/common/instance.hpp +++ b/src/core/common/instance.hpp @@ -511,11 +511,6 @@ template <> inline NetworkData::Leader &Instance::Get(void) return mThreadNetif.mNetworkDataLeader; } -template <> inline Ip6::Routes &Instance::Get(void) -{ - return mIp6.mRoutes; -} - template <> inline Ip6::Udp &Instance::Get(void) { return mIp6.mUdp; diff --git a/src/core/net/ip6.cpp b/src/core/net/ip6.cpp index 6b75920db..a30ca3f45 100644 --- a/src/core/net/ip6.cpp +++ b/src/core/net/ip6.cpp @@ -41,7 +41,6 @@ #include "common/message.hpp" #include "net/icmp6.hpp" #include "net/ip6_address.hpp" -#include "net/ip6_routes.hpp" #include "net/netif.hpp" #include "net/udp6.hpp" #include "thread/mle.hpp" @@ -58,7 +57,6 @@ Ip6::Ip6(Instance &aInstance) , mNetifListHead(NULL) , mSendQueue() , mSendQueueTask(aInstance, HandleSendQueue, this) - , mRoutes(aInstance) , mIcmp(aInstance) , mUdp(aInstance) , mMpl(aInstance) @@ -989,7 +987,7 @@ int8_t Ip6::FindForwardInterfaceId(const MessageInfo &aMessageInfo) // on-link global address ; } - else if ((interfaceId = mRoutes.Lookup(aMessageInfo.GetPeerAddr(), aMessageInfo.GetSockAddr())) > 0) + else if ((interfaceId = RouteLookup(aMessageInfo.GetPeerAddr(), aMessageInfo.GetSockAddr())) > 0) { // route ; @@ -1002,6 +1000,25 @@ int8_t Ip6::FindForwardInterfaceId(const MessageInfo &aMessageInfo) return interfaceId; } +int8_t Ip6::RouteLookup(const Address &aSource, const Address &aDestination) +{ + int8_t maxPrefixMatch = -1; + uint8_t prefixMatch; + int8_t rval = -1; + + for (Netif *netif = Get().GetNetifList(); netif; netif = netif->GetNext()) + { + if (netif->RouteLookup(aSource, aDestination, &prefixMatch) == OT_ERROR_NONE && + static_cast(prefixMatch) > maxPrefixMatch) + { + maxPrefixMatch = static_cast(prefixMatch); + rval = netif->GetInterfaceId(); + } + } + + return rval; +} + otError Ip6::AddNetif(Netif &aNetif) { otError error = OT_ERROR_NONE; diff --git a/src/core/net/ip6.hpp b/src/core/net/ip6.hpp index a9b3bec79..386194a56 100644 --- a/src/core/net/ip6.hpp +++ b/src/core/net/ip6.hpp @@ -48,7 +48,6 @@ #include "net/ip6_address.hpp" #include "net/ip6_headers.hpp" #include "net/ip6_mpl.hpp" -#include "net/ip6_routes.hpp" #include "net/netif.hpp" #include "net/socket.hpp" #include "net/udp6.hpp" @@ -381,6 +380,17 @@ public: */ int8_t GetOnLinkNetif(const Address &aAddress); + /** + * This method performs a route lookup. + * + * @param[in] aSource A reference to the IPv6 source address. + * @param[in] aDestination A reference to the IPv6 destination address. + * + * @returns The network interface identifier for the interface if a route is round, otherwise -1 + * + */ + int8_t RouteLookup(const Address &aSource, const Address &aDestination); + /** * This method returns a reference to the send queue. * @@ -435,10 +445,9 @@ private: PriorityQueue mSendQueue; Tasklet mSendQueueTask; - Routes mRoutes; - Icmp mIcmp; - Udp mUdp; - Mpl mMpl; + Icmp mIcmp; + Udp mUdp; + Mpl mMpl; }; /** diff --git a/src/core/net/ip6_routes.cpp b/src/core/net/ip6_routes.cpp deleted file mode 100644 index 57410635e..000000000 --- a/src/core/net/ip6_routes.cpp +++ /dev/null @@ -1,132 +0,0 @@ -/* - * Copyright (c) 2016, The OpenThread Authors. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of the copyright holder nor the - * names of its contributors may be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ - -/** - * @file - * This file implements IPv6 route tables. - */ - -#include "ip6_routes.hpp" - -#include "common/code_utils.hpp" -#include "common/instance.hpp" -#include "common/locator-getters.hpp" -#include "common/message.hpp" -#include "net/ip6.hpp" -#include "net/netif.hpp" - -namespace ot { -namespace Ip6 { - -Routes::Routes(Instance &aInstance) - : InstanceLocator(aInstance) - , mRoutes(NULL) -{ -} - -otError Routes::Add(Route &aRoute) -{ - otError error = OT_ERROR_NONE; - - for (Route *cur = mRoutes; cur; cur = cur->mNext) - { - VerifyOrExit(cur != &aRoute, error = OT_ERROR_ALREADY); - } - - aRoute.mNext = mRoutes; - mRoutes = &aRoute; - -exit: - return error; -} - -void Routes::Remove(Route &aRoute) -{ - if (&aRoute == mRoutes) - { - mRoutes = aRoute.mNext; - } - else - { - for (Route *cur = mRoutes; cur; cur = cur->mNext) - { - if (cur->mNext == &aRoute) - { - cur->mNext = aRoute.mNext; - break; - } - } - } - - aRoute.mNext = NULL; -} - -int8_t Routes::Lookup(const Address &aSource, const Address &aDestination) -{ - int8_t maxPrefixMatch = -1; - uint8_t prefixMatch; - int8_t rval = -1; - - for (Route *cur = mRoutes; cur; cur = cur->mNext) - { - prefixMatch = cur->mPrefix.PrefixMatch(aDestination); - - if (prefixMatch < cur->mPrefixLength) - { - continue; - } - - if (prefixMatch > cur->mPrefixLength) - { - prefixMatch = cur->mPrefixLength; - } - - if (maxPrefixMatch > static_cast(prefixMatch)) - { - continue; - } - - maxPrefixMatch = static_cast(prefixMatch); - rval = cur->mInterfaceId; - } - - for (Netif *netif = Get().GetNetifList(); netif; netif = netif->GetNext()) - { - if (netif->RouteLookup(aSource, aDestination, &prefixMatch) == OT_ERROR_NONE && - static_cast(prefixMatch) > maxPrefixMatch) - { - maxPrefixMatch = static_cast(prefixMatch); - rval = netif->GetInterfaceId(); - } - } - - return rval; -} - -} // namespace Ip6 -} // namespace ot diff --git a/src/core/net/ip6_routes.hpp b/src/core/net/ip6_routes.hpp deleted file mode 100644 index 91c4c4d22..000000000 --- a/src/core/net/ip6_routes.hpp +++ /dev/null @@ -1,125 +0,0 @@ -/* - * Copyright (c) 2016, The OpenThread Authors. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of the copyright holder nor the - * names of its contributors may be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef IP6_ROUTES_HPP_ -#define IP6_ROUTES_HPP_ - -/** - * @file - * This file includes definitions for manipulating IPv6 routing tables. - */ - -#include "openthread-core-config.h" - -#include "common/locator.hpp" -#include "common/message.hpp" -#include "net/ip6_address.hpp" -#include "net/ip6_routes.hpp" - -namespace ot { -namespace Ip6 { - -class Ip6; - -/** - * @addtogroup core-ip6-ip6 - * - * @{ - * - */ - -/** - * This structure represents an IPv6 route. - * - */ -struct Route -{ - Address mPrefix; ///< The IPv6 prefix. - uint8_t mPrefixLength; ///< The IPv6 prefix length. - int8_t mInterfaceId; ///< The interface identifier. - struct Route *mNext; ///< A pointer to the next IPv6 route. -}; - -/** - * This class implements IPv6 route management. - * - */ -class Routes : public InstanceLocator -{ -public: - /** - * This constructor initializes the object. - * - * @param[in] aInstance A reference to the OpenThread instance. - * - */ - explicit Routes(Instance &aInstance); - - /** - * This method adds an IPv6 route. - * - * @param[in] aRoute A reference to the IPv6 route. - * - * @retval OT_ERROR_NONE Successfully added the route. - * @retval OT_ERROR_ALREADY The route was already added. - * - */ - otError Add(Route &aRoute); - - /** - * This method removes an IPv6 route. - * - * @param[in] aRoute A reference to the IPv6 route. - * - */ - void Remove(Route &aRoute); - - /** - * This method performs source-destination route lookup. - * - * @param[in] aSource The IPv6 source address. - * @param[in] aDestination The IPv6 destination address. - * - * @returns The interface identifier for the best route or -1 if no route is available. - * - */ - int8_t Lookup(const Address &aSource, const Address &aDestination); - -private: - Route *mRoutes; -}; - -/** - * @} - * - */ - -} // namespace Ip6 -} // namespace ot - -#endif // IP6_ROUTES_HPP_