From a4af2ac8dc5df67469727aba67ac2ad8c5feaccf Mon Sep 17 00:00:00 2001 From: Tomasz Bursztyka Date: Mon, 20 Nov 2023 18:54:23 +0100 Subject: [PATCH] net/ip: Removing useless extra data capability in neighbors This is not used by anyone, and is unlikely to be useful actually. Helps to save 4 bytes for each instance of struct net_nbr also (removing a 2 bytes attributes, which was anyway generating a 4bytes loss due to structure misalignment). Removing relevant useless functions related to it as well. Signed-off-by: Tomasz Bursztyka --- subsys/net/ip/ipv6_nbr.c | 7 ++-- subsys/net/ip/nbr.c | 3 +- subsys/net/ip/nbr.h | 21 +--------- subsys/net/ip/route.c | 74 +---------------------------------- subsys/net/ip/route.h | 16 -------- tests/net/neighbor/src/main.c | 2 +- 6 files changed, 9 insertions(+), 114 deletions(-) diff --git a/subsys/net/ip/ipv6_nbr.c b/subsys/net/ip/ipv6_nbr.c index 528156cafa7e4d..992078062f07d2 100644 --- a/subsys/net/ip/ipv6_nbr.c +++ b/subsys/net/ip/ipv6_nbr.c @@ -80,7 +80,7 @@ static void ipv6_nd_restart_reachable_timer(struct net_nbr *nbr, int64_t time); #define DELAY_FIRST_PROBE_TIME (5 * MSEC_PER_SEC) #define RETRANS_TIMER 1000 /* ms */ -extern void net_neighbor_data_remove(struct net_nbr *nbr); +extern void net_neighbor_remove(struct net_nbr *nbr); extern void net_neighbor_table_clear(struct net_nbr_table *table); /** Neighbor Solicitation reply timer */ @@ -89,8 +89,7 @@ static struct k_work_delayable ipv6_ns_reply_timer; NET_NBR_POOL_INIT(net_neighbor_pool, CONFIG_NET_IPV6_MAX_NEIGHBORS, sizeof(struct net_ipv6_nbr_data), - net_neighbor_data_remove, - 0); + net_neighbor_remove); NET_NBR_TABLE_INIT(NET_NBR_GLOBAL, neighbor, @@ -665,7 +664,7 @@ struct net_nbr *net_ipv6_nbr_add(struct net_if *iface, return nbr; } -void net_neighbor_data_remove(struct net_nbr *nbr) +void net_neighbor_remove(struct net_nbr *nbr) { NET_DBG("Neighbor %p removed", nbr); diff --git a/subsys/net/ip/nbr.c b/subsys/net/ip/nbr.c index 2396fe033729a4..8cf42862d0da24 100644 --- a/subsys/net/ip/nbr.c +++ b/subsys/net/ip/nbr.c @@ -62,8 +62,7 @@ static inline struct net_nbr *get_nbr(struct net_nbr *start, int idx) NET_ASSERT(idx < CONFIG_NET_IPV6_MAX_NEIGHBORS); return (struct net_nbr *)((uint8_t *)start + - ((sizeof(struct net_nbr) + - start->size + start->extra_data_size) * idx)); + ((sizeof(struct net_nbr) + start->size) * idx)); } struct net_nbr *net_nbr_get(struct net_nbr_table *table) diff --git a/subsys/net/ip/nbr.h b/subsys/net/ip/nbr.h index ee6246f07a12cb..bab4249acba022 100644 --- a/subsys/net/ip/nbr.h +++ b/subsys/net/ip/nbr.h @@ -56,9 +56,6 @@ struct net_nbr { /** Amount of data that this neighbor buffer can store. */ const uint16_t size; - /** Extra data size associated with this neighbor */ - const uint16_t extra_data_size; - /** Interface this neighbor is found */ struct net_if *iface; @@ -75,17 +72,15 @@ struct net_nbr { }; /* This is an array of struct net_nbr + some additional data */ -#define NET_NBR_POOL_INIT(_name, _count, _size, _remove, _extra_size) \ +#define NET_NBR_POOL_INIT(_name, _count, _size, _remove) \ struct { \ struct net_nbr nbr; \ uint8_t data[ROUND_UP(_size, 4)] __net_nbr_align; \ - uint8_t extra[ROUND_UP(_extra_size, 4)] __net_nbr_align;\ } _name[_count] = { \ [0 ... (_count - 1)] = { .nbr = { \ .idx = NET_NBR_LLADDR_UNKNOWN, \ .remove = _remove, \ - .size = ROUND_UP(_size, 4), \ - .extra_data_size = ROUND_UP(_extra_size, 4) } },\ + .size = ROUND_UP(_size, 4) } }, \ } struct net_nbr_table { @@ -115,18 +110,6 @@ struct net_nbr_table { } \ } -/** - * @brief Get a pointer to the extra data of a neighbor entry. - * - * @param nbr A valid pointer to neighbor - * - * @return Pointer to the extra data of the nbr. - */ -static inline void *net_nbr_extra_data(struct net_nbr *nbr) -{ - return (void *)ROUND_UP((nbr->__nbr + nbr->size), sizeof(int)); -} - /** * @brief Decrement the reference count. If count goes to 0, the neighbor * is released and returned to free list. diff --git a/subsys/net/ip/route.c b/subsys/net/ip/route.c index 5922a923df93bd..6d4ae1ff5f7bf4 100644 --- a/subsys/net/ip/route.c +++ b/subsys/net/ip/route.c @@ -29,10 +29,6 @@ LOG_MODULE_REGISTER(net_route, CONFIG_NET_ROUTE_LOG_LEVEL); #include "nbr.h" #include "route.h" -#if !defined(NET_ROUTE_EXTRA_DATA_SIZE) -#define NET_ROUTE_EXTRA_DATA_SIZE 0 -#endif - /* We keep track of the routes in a separate list so that we can remove * the oldest routes (at tail) if needed. */ @@ -55,8 +51,7 @@ static void net_route_nexthop_remove(struct net_nbr *nbr) NET_NBR_POOL_INIT(net_route_nexthop_pool, CONFIG_NET_MAX_NEXTHOPS, sizeof(struct net_route_nexthop), - net_route_nexthop_remove, - 0); + net_route_nexthop_remove); static inline struct net_route_nexthop *net_nexthop_data(struct net_nbr *nbr) { @@ -115,8 +110,7 @@ static void net_route_entries_table_clear(struct net_nbr_table *table) NET_NBR_POOL_INIT(net_route_entries_pool, CONFIG_NET_MAX_ROUTES, sizeof(struct net_route_entry), - net_route_entry_remove, - NET_ROUTE_EXTRA_DATA_SIZE); + net_route_entry_remove); NET_NBR_TABLE_INIT(NET_NBR_LOCAL, nbr_routes, net_route_entries_pool, net_route_entries_table_clear); @@ -665,70 +659,6 @@ int net_route_del_by_nexthop(struct net_if *iface, struct in6_addr *nexthop) return 0; } -int net_route_del_by_nexthop_data(struct net_if *iface, - struct in6_addr *nexthop, - void *data) -{ - int count = 0, status = 0; - struct net_nbr *nbr_nexthop; - struct net_route_nexthop *nexthop_route; - int i, ret; - - NET_ASSERT(iface); - NET_ASSERT(nexthop); - - net_ipv6_nbr_lock(); - - nbr_nexthop = net_ipv6_nbr_lookup(iface, nexthop); - if (!nbr_nexthop) { - net_ipv6_nbr_unlock(); - return -EINVAL; - } - - for (i = 0; i < CONFIG_NET_MAX_ROUTES; i++) { - struct net_nbr *nbr = get_nbr(i); - struct net_route_entry *route = net_route_data(nbr); - - SYS_SLIST_FOR_EACH_CONTAINER(&route->nexthop, nexthop_route, - node) { - void *extra_data; - - if (nexthop_route->nbr != nbr_nexthop) { - continue; - } - - if (nbr->extra_data_size == 0U) { - continue; - } - - /* Routing engine specific extra data needs - * to match too. - */ - extra_data = net_nbr_extra_data(nbr_nexthop); - if (extra_data != data) { - continue; - } - - ret = net_route_del(route); - if (!ret) { - count++; - } else { - status = ret; - } - - break; - } - } - - net_ipv6_nbr_unlock(); - - if (count) { - return count; - } - - return status; -} - struct in6_addr *net_route_get_nexthop(struct net_route_entry *route) { struct net_route_nexthop *nexthop_route; diff --git a/subsys/net/ip/route.h b/subsys/net/ip/route.h index e54451234c6689..1f2d36ee4a86e7 100644 --- a/subsys/net/ip/route.h +++ b/subsys/net/ip/route.h @@ -138,22 +138,6 @@ int net_route_del(struct net_route_entry *entry); int net_route_del_by_nexthop(struct net_if *iface, struct in6_addr *nexthop); -/** - * @brief Delete a route from routing table by nexthop if the routing engine - * specific data matches. - * - * @detail The routing engine specific data could be the RPL data. - * - * @param iface Network interface to use. - * @param nexthop IPv6 address of the nexthop device. - * @param data Routing engine specific data. - * - * @return number of routes deleted, <0 if error - */ -int net_route_del_by_nexthop_data(struct net_if *iface, - struct in6_addr *nexthop, - void *data); - /** * @brief Update the route lifetime. * diff --git a/tests/net/neighbor/src/main.c b/tests/net/neighbor/src/main.c index c6a04c1c16ccc5..b598bd1ce5c34a 100644 --- a/tests/net/neighbor/src/main.c +++ b/tests/net/neighbor/src/main.c @@ -45,7 +45,7 @@ static void net_neighbor_table_clear(struct net_nbr_table *table) } NET_NBR_POOL_INIT(net_test_neighbor_pool, CONFIG_NET_IPV6_MAX_NEIGHBORS, - 0, net_neighbor_data_remove, 0); + 0, net_neighbor_data_remove); NET_NBR_TABLE_INIT(NET_NBR_LOCAL, test_neighbor, net_test_neighbor_pool, net_neighbor_table_clear);