From d8084108cc750962dafcd3716f5d243de2e56418 Mon Sep 17 00:00:00 2001 From: Denys Fedoryshchenko Date: Thu, 27 Aug 2026 09:14:05 +0300 Subject: ipv6: use a dedicated type for per-session DNS DNS-Server-IPv6-Address carries a full IPv6 address, so storing it in ipv6db_addr_t also carried an unused prefix length and flags. Introduce dedicated DNS list and address types so the representation matches the data. Suggested-by: Vladislav Grishenko <566150+themiron@users.noreply.github.com> Link: https://github.com/accel-ppp/accel-ppp/commit/4f562467dbdf819395e138617c2a057e02595b9e#r197215804 --- accel-pppd/include/ap_session.h | 8 ++++---- accel-pppd/include/ipv6_dns.h | 12 ++++++++++-- 2 files changed, 14 insertions(+), 6 deletions(-) (limited to 'accel-pppd/include') diff --git a/accel-pppd/include/ap_session.h b/accel-pppd/include/ap_session.h index a0733986..3bc8360b 100644 --- a/accel-pppd/include/ap_session.h +++ b/accel-pppd/include/ap_session.h @@ -41,6 +41,7 @@ struct ap_session; struct backup_data; struct rtnl_link_stats; +struct ipv6_dns_t; struct ap_ctrl { struct triton_context_t *ctx; @@ -87,10 +88,9 @@ struct ap_session struct ipv6db_prefix_t *ipv6_dp; /* Per session IPv6 DNS servers, NULL when none were assigned and the globally configured ones ([ipv6-dns]) should be advertised instead. - Only addr_list, and only the addr member of its entries, is - meaningful here. Owned by whoever sets it, currently the radius - module from the DNS-Server-IPv6-Address attribute (RFC 6911) */ - struct ipv6db_item_t *ipv6_dns; + Owned by whoever sets it, currently the radius module from the + DNS-Server-IPv6-Address attribute (RFC 6911) */ + struct ipv6_dns_t *ipv6_dns; char *ipv4_pool_name; char *ipv6_pool_name; char *dpv6_pool_name; diff --git a/accel-pppd/include/ipv6_dns.h b/accel-pppd/include/ipv6_dns.h index b604d006..b1d74708 100644 --- a/accel-pppd/include/ipv6_dns.h +++ b/accel-pppd/include/ipv6_dns.h @@ -4,9 +4,17 @@ #include #include "list.h" -#include "ipdb.h" #include "ap_session.h" +struct ipv6_dns_addr_t { + struct list_head entry; + struct in6_addr addr; +}; + +struct ipv6_dns_t { + struct list_head addr_list; +}; + /* * Pick the IPv6 DNS servers to advertise to a session. * @@ -22,7 +30,7 @@ static inline int ipv6_dns_get(const struct ap_session *ses, const struct in6_addr *conf_dns, int conf_dns_count, struct in6_addr *dns, int max) { - struct ipv6db_addr_t *a; + struct ipv6_dns_addr_t *a; int count = 0; if (ses && ses->ipv6_dns) { -- cgit v1.2.3