@@ -488,13 +488,34 @@ static int get_free_slot(struct dns_resolve_context *ctx)
488488 return - ENOENT ;
489489}
490490
491+ const char * dns_get_source_str (enum dns_server_source source )
492+ {
493+ switch (source ) {
494+ case DNS_SOURCE_UNKNOWN :
495+ return "unknown" ;
496+ case DNS_SOURCE_MANUAL :
497+ return "manual" ;
498+ case DNS_SOURCE_DHCPV4 :
499+ __fallthrough ;
500+ case DNS_SOURCE_DHCPV6 :
501+ return "DHCP" ;
502+ case DNS_SOURCE_IPV6_RA :
503+ return "IPv6 RA" ;
504+ case DNS_SOURCE_PPP :
505+ return "PPP" ;
506+ }
507+
508+ return "" ;
509+ }
510+
491511/* Must be invoked with context lock held */
492512static int dns_resolve_init_locked (struct dns_resolve_context * ctx ,
493513 const char * servers [],
494514 const struct sockaddr * servers_sa [],
495515 const struct net_socket_service_desc * svc ,
496516 uint16_t port , int interfaces [],
497- bool do_cleanup )
517+ bool do_cleanup ,
518+ enum dns_server_source source )
498519{
499520#if defined(CONFIG_NET_IPV6 )
500521 struct sockaddr_in6 local_addr6 = {
@@ -608,6 +629,8 @@ static int dns_resolve_init_locked(struct dns_resolve_context *ctx,
608629 }
609630 }
610631
632+ ctx -> servers [idx ].source = source ;
633+
611634 addr = & ctx -> servers [idx ].dns_server ;
612635
613636 (void )memset (addr , 0 , sizeof (* addr ));
@@ -624,13 +647,16 @@ static int dns_resolve_init_locked(struct dns_resolve_context *ctx,
624647
625648 dns_postprocess_server (ctx , idx );
626649
627- NET_DBG ("[%d] %.*s%s%s%s%s" , i , (int )server_len , servers [i ],
650+ NET_DBG ("[%d] %.*s%s%s%s%s%s%s%s " , i , (int )server_len , servers [i ],
628651 IS_ENABLED (CONFIG_MDNS_RESOLVER ) ?
629652 (ctx -> servers [i ].is_mdns ? " mDNS" : "" ) : "" ,
630653 IS_ENABLED (CONFIG_LLMNR_RESOLVER ) ?
631654 (ctx -> servers [i ].is_llmnr ? " LLMNR" : "" ) : "" ,
632655 iface_str != NULL ? " via " : "" ,
633- iface_str != NULL ? iface_str : "" );
656+ iface_str != NULL ? iface_str : "" ,
657+ source != DNS_SOURCE_UNKNOWN ? " (" : "" ,
658+ source != DNS_SOURCE_UNKNOWN ? dns_get_source_str (source ) : "" ,
659+ source != DNS_SOURCE_UNKNOWN ? ")" : "" );
634660 idx ++ ;
635661 }
636662
@@ -656,6 +682,8 @@ static int dns_resolve_init_locked(struct dns_resolve_context *ctx,
656682 break ;
657683 }
658684
685+ ctx -> servers [idx ].source = source ;
686+
659687 memcpy (& ctx -> servers [idx ].dns_server , servers_sa [i ],
660688 sizeof (ctx -> servers [idx ].dns_server ));
661689
@@ -668,15 +696,18 @@ static int dns_resolve_init_locked(struct dns_resolve_context *ctx,
668696
669697 dns_postprocess_server (ctx , idx );
670698
671- NET_DBG ("[%d] %s%s%s%s%s" , i ,
699+ NET_DBG ("[%d] %s%s%s%s%s%s%s%s " , i ,
672700 net_sprint_addr (servers_sa [i ]-> sa_family ,
673701 & net_sin (servers_sa [i ])-> sin_addr ),
674702 IS_ENABLED (CONFIG_MDNS_RESOLVER ) ?
675703 (ctx -> servers [i ].is_mdns ? " mDNS" : "" ) : "" ,
676704 IS_ENABLED (CONFIG_LLMNR_RESOLVER ) ?
677705 (ctx -> servers [i ].is_llmnr ? " LLMNR" : "" ) : "" ,
678706 interfaces != NULL ? " via " : "" ,
679- interfaces != NULL ? iface_str : "" );
707+ interfaces != NULL ? iface_str : "" ,
708+ source != DNS_SOURCE_UNKNOWN ? " (" : "" ,
709+ source != DNS_SOURCE_UNKNOWN ? dns_get_source_str (source ) : "" ,
710+ source != DNS_SOURCE_UNKNOWN ? ")" : "" );
680711 idx ++ ;
681712 }
682713
@@ -871,7 +902,7 @@ int dns_resolve_init_with_svc(struct dns_resolve_context *ctx, const char *serve
871902 }
872903
873904 ret = dns_resolve_init_locked (ctx , servers , servers_sa , svc , port ,
874- interfaces , true);
905+ interfaces , true, DNS_SOURCE_UNKNOWN );
875906
876907 k_mutex_unlock (& lock );
877908
@@ -2055,7 +2086,8 @@ static int do_dns_resolve_reconfigure(struct dns_resolve_context *ctx,
20552086 const char * servers [],
20562087 const struct sockaddr * servers_sa [],
20572088 int interfaces [],
2058- bool do_close )
2089+ bool do_close ,
2090+ enum dns_server_source source )
20592091{
20602092 int err ;
20612093
@@ -2092,7 +2124,8 @@ static int do_dns_resolve_reconfigure(struct dns_resolve_context *ctx,
20922124
20932125 err = dns_resolve_init_locked (ctx , servers , servers_sa ,
20942126 & resolve_svc , 0 , interfaces ,
2095- do_close );
2127+ do_close ,
2128+ source );
20962129
20972130unlock :
20982131 k_mutex_unlock (& ctx -> lock );
@@ -2104,26 +2137,30 @@ static int do_dns_resolve_reconfigure(struct dns_resolve_context *ctx,
21042137int dns_resolve_reconfigure_with_interfaces (struct dns_resolve_context * ctx ,
21052138 const char * servers [],
21062139 const struct sockaddr * servers_sa [],
2107- int interfaces [])
2140+ int interfaces [],
2141+ enum dns_server_source source )
21082142{
21092143 return do_dns_resolve_reconfigure (ctx ,
21102144 servers ,
21112145 servers_sa ,
21122146 interfaces ,
21132147 IS_ENABLED (CONFIG_DNS_RECONFIGURE_CLEANUP ) ?
2114- true : false);
2148+ true : false,
2149+ source );
21152150}
21162151
21172152int dns_resolve_reconfigure (struct dns_resolve_context * ctx ,
21182153 const char * servers [],
2119- const struct sockaddr * servers_sa [])
2154+ const struct sockaddr * servers_sa [],
2155+ enum dns_server_source source )
21202156{
21212157 return do_dns_resolve_reconfigure (ctx ,
21222158 servers ,
21232159 servers_sa ,
21242160 NULL ,
21252161 IS_ENABLED (CONFIG_DNS_RECONFIGURE_CLEANUP ) ?
2126- true : false);
2162+ true : false,
2163+ source );
21272164}
21282165
21292166int dns_resolve_remove (struct dns_resolve_context * ctx , int if_index )
0 commit comments