netinet6: embed the counter(9) arrays in struct in6_ifextra

Reviewed by:		tuexen
Differential Revision:	https://reviews.freebsd.org/D54723
This commit is contained in:
Gleb Smirnoff
2026-01-23 14:17:10 -08:00
parent 6857b3a04e
commit 3182dc4117
4 changed files with 18 additions and 29 deletions
+1 -2
View File
@@ -717,8 +717,7 @@ int icmp6_ratelimit(const struct in6_addr *, const int, const int);
#define icmp6_ifstat_inc(ifp, tag) \
do { \
if (ifp) \
counter_u64_add(((struct in6_ifextra *) \
((ifp)->if_inet6))->icmp6_ifstat[ \
counter_u64_add((ifp)->if_inet6->icmp6_ifstat[ \
offsetof(struct icmp6_ifstat, tag) / sizeof(uint64_t)], 1);\
} while (/*CONSTCOND*/ 0)
-6
View File
@@ -2610,14 +2610,8 @@ in6_ifarrival(void *arg __unused, struct ifnet *ifp)
ext = (struct in6_ifextra *)malloc(sizeof(*ext), M_IFADDR, M_WAITOK);
bzero(ext, sizeof(*ext));
ext->in6_ifstat = malloc(sizeof(counter_u64_t) *
sizeof(struct in6_ifstat) / sizeof(uint64_t), M_IFADDR, M_WAITOK);
COUNTER_ARRAY_ALLOC(ext->in6_ifstat,
sizeof(struct in6_ifstat) / sizeof(uint64_t), M_WAITOK);
ext->icmp6_ifstat = malloc(sizeof(counter_u64_t) *
sizeof(struct icmp6_ifstat) / sizeof(uint64_t), M_IFADDR,
M_WAITOK);
COUNTER_ARRAY_ALLOC(ext->icmp6_ifstat,
sizeof(struct icmp6_ifstat) / sizeof(uint64_t), M_WAITOK);
-2
View File
@@ -922,10 +922,8 @@ in6_ifdeparture(void *arg __unused, struct ifnet *ifp)
lltable_free(ext->lltable);
COUNTER_ARRAY_FREE(ext->in6_ifstat,
sizeof(struct in6_ifstat) / sizeof(uint64_t));
free(ext->in6_ifstat, M_IFADDR);
COUNTER_ARRAY_FREE(ext->icmp6_ifstat,
sizeof(struct icmp6_ifstat) / sizeof(uint64_t));
free(ext->icmp6_ifstat, M_IFADDR);
free(ext, M_IFADDR);
}
EVENTHANDLER_DEFINE(ifnet_departure_event, in6_ifdeparture, NULL,
+17 -19
View File
@@ -93,25 +93,6 @@ struct in6_addrlifetime {
u_int32_t ia6t_pltime; /* prefix lifetime */
};
struct nd_ifinfo;
struct scope6_id;
struct lltable;
struct mld_ifsoftc;
struct in6_multi;
struct in6_ifextra {
counter_u64_t *in6_ifstat;
counter_u64_t *icmp6_ifstat;
struct nd_ifinfo *nd_ifinfo;
struct scope6_id *scope6_id;
struct lltable *lltable;
struct mld_ifsoftc *mld_ifinfo;
u_int dad_failures; /* DAD failures when using RFC 7217 stable addresses */
};
#define LLTABLE6(ifp) ((ifp)->if_inet6->lltable)
#define DAD_FAILURES(ifp) ((ifp)->if_inet6->dad_failures)
#ifdef _KERNEL
SLIST_HEAD(in6_multi_head, in6_multi);
@@ -507,6 +488,23 @@ struct in6_rrenumreq {
#endif
#ifdef _KERNEL
/*
* Structure pointed at by ifp->if_inet6.
*/
struct in6_ifextra {
counter_u64_t in6_ifstat[sizeof(struct in6_ifstat) / sizeof(uint64_t)];
counter_u64_t icmp6_ifstat[sizeof(struct icmp6_ifstat) /
sizeof(uint64_t)];
struct nd_ifinfo *nd_ifinfo;
struct scope6_id *scope6_id;
struct lltable *lltable;
struct mld_ifsoftc *mld_ifinfo;
u_int dad_failures; /* DAD failures when using RFC 7217 stable addresses */
};
#define LLTABLE6(ifp) ((ifp)->if_inet6->lltable)
#define DAD_FAILURES(ifp) ((ifp)->if_inet6->dad_failures)
VNET_DECLARE(struct in6_ifaddrhead, in6_ifaddrhead);
VNET_DECLARE(struct in6_ifaddrlisthead *, in6_ifaddrhashtbl);
VNET_DECLARE(u_long, in6_ifaddrhmask);