9999
100100#include <rtthread.h>
101101
102+ #ifdef RT_USING_NETDEV
103+ #include "netdev.h"
104+ #endif
105+
102106/** Random generator function to create random TXIDs and source ports for queries */
103107#ifndef DNS_RAND_TXID
104108#if ((LWIP_DNS_SECURE & LWIP_DNS_SECURE_RAND_XID ) != 0 )
@@ -300,7 +304,9 @@ static u8_t dns_last_pcb_idx;
300304static u8_t dns_seqno ;
301305static struct dns_table_entry dns_table [DNS_TABLE_SIZE ];
302306static struct dns_req_entry dns_requests [DNS_MAX_REQUESTS ];
307+ #ifndef RT_USING_NETDEV
303308static ip_addr_t dns_servers [DNS_MAX_SERVERS ];
309+ #endif
304310
305311#if LWIP_IPV4
306312const ip_addr_t dns_mquery_v4group = DNS_MQUERY_IPV4_GROUP_INIT ;
@@ -364,21 +370,25 @@ dns_setserver(u8_t numdns, const ip_addr_t *dnsserver)
364370{
365371 if (numdns < DNS_MAX_SERVERS ) {
366372 if (dnsserver != NULL ) {
367- dns_servers [numdns ] = (* dnsserver );
368-
369373#ifdef RT_USING_NETDEV
370- extern struct netif * netif_list ;
371- extern struct netdev * netdev_get_by_name (const char * name );
372- extern void netdev_low_level_set_dns_server (struct netdev * netdev , uint8_t dns_num , const ip_addr_t * dns_server );
373374 struct netif * netif = NULL ;
374375
375376 /* set network interface device DNS server address */
376377 for (netif = netif_list ; netif != NULL ; netif = netif -> next ) {
377- netdev_low_level_set_dns_server (netdev_get_by_name (netif -> name ), numdns , dnsserver );
378+ netdev_set_dns_server (netdev_get_by_name (netif -> name ), numdns , dnsserver );
378379 }
380+ #else
381+ dns_servers [numdns ] = (* dnsserver );
379382#endif /* RT_USING_NETDEV */
380383 } else {
384+ #ifdef RT_USING_NETDEV
385+ struct netif * netif = NULL ;
386+ for (netif = netif_list ; netif != NULL ; netif = netif -> next ) {
387+ netdev_set_dns_server (netdev_get_by_name (netif -> name ), numdns , IP_ADDR_ANY );
388+ }
389+ #else
381390 dns_servers [numdns ] = * IP_ADDR_ANY ;
391+ #endif
382392 }
383393 }
384394}
@@ -395,7 +405,11 @@ const ip_addr_t *
395405dns_getserver (u8_t numdns )
396406{
397407 if (numdns < DNS_MAX_SERVERS ) {
408+ #ifdef RT_USING_NETDEV
409+ return & netdev_default -> dns_servers [numdns ];
410+ #else
398411 return & dns_servers [numdns ];
412+ #endif
399413 } else {
400414 return IP_ADDR_ANY ;
401415 }
@@ -770,11 +784,19 @@ dns_send(u8_t idx)
770784 u8_t n ;
771785 u8_t pcb_idx ;
772786 struct dns_table_entry * entry = & dns_table [idx ];
787+ const ip_addr_t * dns_addr ;
773788
774789 LWIP_DEBUGF (DNS_DEBUG , ("dns_send: dns_servers[%" U16_F "] \"%s\": request\n" ,
775790 (u16_t )(entry -> server_idx ), entry -> name ));
776791 LWIP_ASSERT ("dns server out of array" , entry -> server_idx < DNS_MAX_SERVERS );
777- if (ip_addr_isany_val (dns_servers [entry -> server_idx ])
792+
793+ #ifdef RT_USING_NETDEV
794+ dns_addr = & netdev_default -> dns_servers [entry -> server_idx ];
795+ #else
796+ dns_addr = & dns_servers [entry -> server_idx ];
797+ #endif
798+
799+ if (ip_addr_isany (dns_addr )
778800#if LWIP_DNS_SUPPORT_MDNS_QUERIES
779801 && !entry -> is_mdns
780802#endif
@@ -859,7 +881,11 @@ dns_send(u8_t idx)
859881#endif /* LWIP_DNS_SUPPORT_MDNS_QUERIES */
860882 {
861883 dst_port = DNS_SERVER_PORT ;
862- dst = & dns_servers [entry -> server_idx ];
884+ dst = dns_addr ;
885+ #ifdef RT_USING_NETDEV
886+ /* set netif index for this pcb, specify the network interface corresponding to the DNS server */
887+ dns_pcbs [pcb_idx ]-> netif_idx = netif_get_index ((struct netif * )netdev_default -> user_data );
888+ #endif
863889 }
864890 err = udp_sendto (dns_pcbs [pcb_idx ], p , dst , dst_port );
865891
@@ -1040,8 +1066,15 @@ dns_backupserver_available(struct dns_table_entry *pentry)
10401066 u8_t ret = 0 ;
10411067
10421068 if (pentry ) {
1043- if ((pentry -> server_idx + 1 < DNS_MAX_SERVERS ) && !ip_addr_isany_val (dns_servers [pentry -> server_idx + 1 ])) {
1044- ret = 1 ;
1069+ if ((pentry -> server_idx + 1 < DNS_MAX_SERVERS )) {
1070+ #ifdef RT_USING_NETDEV
1071+ const ip_addr_t * dns_addr = & netdev_default -> dns_servers [pentry -> server_idx + 1 ];
1072+ #else
1073+ const ip_addr_t * dns_addr = & dns_servers [pentry -> server_idx + 1 ];
1074+ #endif
1075+ if (!ip_addr_isany (dns_addr )) {
1076+ ret = 1 ;
1077+ }
10451078 }
10461079 }
10471080
@@ -1230,9 +1263,14 @@ dns_recv(void *arg, struct udp_pcb *pcb, struct pbuf *p, const ip_addr_t *addr,
12301263 if (!entry -> is_mdns )
12311264#endif /* LWIP_DNS_SUPPORT_MDNS_QUERIES */
12321265 {
1266+ #ifdef RT_USING_NETDEV
1267+ const ip_addr_t * dns_addr = & netdev_default -> dns_servers [entry -> server_idx ];
1268+ #else
1269+ const ip_addr_t * dns_addr = & dns_servers [entry -> server_idx ];
1270+ #endif
12331271 /* Check whether response comes from the same network address to which the
12341272 question was sent. (RFC 5452) */
1235- if (!ip_addr_cmp (addr , & dns_servers [ entry -> server_idx ] )) {
1273+ if (!ip_addr_cmp (addr , dns_addr )) {
12361274 goto ignore_packet ; /* ignore this packet */
12371275 }
12381276 }
@@ -1631,8 +1669,13 @@ dns_gethostbyname_addrtype(const char *hostname, ip_addr_t *addr, dns_found_call
16311669 if (!is_mdns )
16321670#endif /* LWIP_DNS_SUPPORT_MDNS_QUERIES */
16331671 {
1672+ #ifdef RT_USING_NETDEV
1673+ const ip_addr_t * dns_addr = & netdev_default -> dns_servers [0 ];
1674+ #else
1675+ const ip_addr_t * dns_addr = & dns_servers [0 ];
1676+ #endif
16341677 /* prevent calling found callback if no server is set, return error instead */
1635- if (ip_addr_isany_val ( dns_servers [ 0 ] )) {
1678+ if (ip_addr_isany ( dns_addr )) {
16361679 return ERR_VAL ;
16371680 }
16381681 }
0 commit comments