From e98bf3e6d7d33ccf82b16f010779cd5f841abd87 Mon Sep 17 00:00:00 2001 From: Jukka Rissanen Date: Wed, 22 Jan 2025 19:03:10 +0200 Subject: [PATCH] net: dns: Use dispatcher context in callbacks Feed the dispatcher context to dispatcher callbacks instead of resolver or responder context. The callback can then use the proper context because the dispatcher context contains those two context. This allows dispatcher callback to utilize all the information (like interface etc) stored in dispatcher context. Signed-off-by: Jukka Rissanen --- include/zephyr/net/dns_resolve.h | 5 +++-- subsys/net/lib/dns/dispatcher.c | 8 ++++---- subsys/net/lib/dns/mdns_responder.c | 7 +++---- subsys/net/lib/dns/resolve.c | 4 ++-- 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/include/zephyr/net/dns_resolve.h b/include/zephyr/net/dns_resolve.h index 33398dabdf1..14938031717 100644 --- a/include/zephyr/net/dns_resolve.h +++ b/include/zephyr/net/dns_resolve.h @@ -156,13 +156,14 @@ enum dns_socket_type { struct dns_resolve_context; struct mdns_responder_context; +struct dns_socket_dispatcher; /** * @typedef dns_socket_dispatcher_cb * @brief Callback used when the DNS socket dispatcher has found a handler for * this type of socket. * - * @param ctx DNS resolve or mDNS responder context. + * @param ctx struct dns_socket_dispatcher context. * @param sock Socket which is seeing traffic. * @param addr Socket address of the peer that sent the DNS packet. * @param addrlen Length of the socket address. @@ -171,7 +172,7 @@ struct mdns_responder_context; * * @return 0 if ok, <0 if error */ -typedef int (*dns_socket_dispatcher_cb)(void *ctx, int sock, +typedef int (*dns_socket_dispatcher_cb)(struct dns_socket_dispatcher *ctx, int sock, struct sockaddr *addr, size_t addrlen, struct net_buf *buf, size_t data_len); diff --git a/subsys/net/lib/dns/dispatcher.c b/subsys/net/lib/dns/dispatcher.c index c0803f093bd..a3b11a594c9 100644 --- a/subsys/net/lib/dns/dispatcher.c +++ b/subsys/net/lib/dns/dispatcher.c @@ -63,11 +63,11 @@ static int dns_dispatch(struct dns_socket_dispatcher *dispatcher, if (is_query) { if (dispatcher->type == DNS_SOCKET_RESPONDER) { /* Call the responder callback */ - ret = dispatcher->cb(dispatcher->ctx, sock, + ret = dispatcher->cb(dispatcher, sock, addr, addrlen, dns_data, data_len); } else if (dispatcher->pair) { - ret = dispatcher->pair->cb(dispatcher->pair->ctx, sock, + ret = dispatcher->pair->cb(dispatcher, sock, addr, addrlen, dns_data, data_len); } else { @@ -81,11 +81,11 @@ static int dns_dispatch(struct dns_socket_dispatcher *dispatcher, */ if (dispatcher->type == DNS_SOCKET_RESOLVER) { /* Call the resolver callback */ - ret = dispatcher->cb(dispatcher->ctx, sock, + ret = dispatcher->cb(dispatcher, sock, addr, addrlen, dns_data, data_len); } else if (dispatcher->pair) { - ret = dispatcher->pair->cb(dispatcher->pair->ctx, sock, + ret = dispatcher->pair->cb(dispatcher, sock, addr, addrlen, dns_data, data_len); } else { diff --git a/subsys/net/lib/dns/mdns_responder.c b/subsys/net/lib/dns/mdns_responder.c index 96206276c52..311c9ffc831 100644 --- a/subsys/net/lib/dns/mdns_responder.c +++ b/subsys/net/lib/dns/mdns_responder.c @@ -583,7 +583,8 @@ static int dns_read(int sock, if (!strncasecmp(hostname, result->data + 1, hostname_len) && (result->len - 1) >= hostname_len && &(result->data + 1)[hostname_len] == lquery) { - NET_DBG("%s query to our hostname %s.local", "mDNS", + NET_DBG("%s %s %s to our hostname %s.local", "mDNS", + family == AF_INET ? "IPv4" : "IPv6", "query", hostname); send_response(sock, family, src_addr, addrlen, result, qtype); @@ -668,14 +669,12 @@ static void setup_ipv4_addr(struct sockaddr_in *local_addr) #define INTERFACE_NAME_LEN 0 #endif -static int dispatcher_cb(void *my_ctx, int sock, +static int dispatcher_cb(struct dns_socket_dispatcher *ctx, int sock, struct sockaddr *addr, size_t addrlen, struct net_buf *dns_data, size_t len) { int ret; - ARG_UNUSED(my_ctx); - ret = dns_read(sock, dns_data, len, addr, addrlen); if (ret < 0 && ret != -EINVAL && ret != -ENOENT) { NET_DBG("%s read failed (%d)", "mDNS", ret); diff --git a/subsys/net/lib/dns/resolve.c b/subsys/net/lib/dns/resolve.c index c463b1e77ed..9ca70c1a060 100644 --- a/subsys/net/lib/dns/resolve.c +++ b/subsys/net/lib/dns/resolve.c @@ -201,11 +201,11 @@ static void dns_postprocess_server(struct dns_resolve_context *ctx, int idx) } } -static int dispatcher_cb(void *my_ctx, int sock, +static int dispatcher_cb(struct dns_socket_dispatcher *my_ctx, int sock, struct sockaddr *addr, size_t addrlen, struct net_buf *dns_data, size_t len) { - struct dns_resolve_context *ctx = my_ctx; + struct dns_resolve_context *ctx = my_ctx->resolve_ctx; struct net_buf *dns_cname = NULL; uint16_t query_hash = 0U; uint16_t dns_id = 0U;