99
99
100
100
#include <rtthread.h>
101
101
102
+ #ifdef RT_USING_NETDEV
103
+ #include "netdev.h"
104
+ #endif
105
+
102
106
/** Random generator function to create random TXIDs and source ports for queries */
103
107
#ifndef DNS_RAND_TXID
104
108
#if ((LWIP_DNS_SECURE & LWIP_DNS_SECURE_RAND_XID ) != 0 )
@@ -300,7 +304,9 @@ static u8_t dns_last_pcb_idx;
300
304
static u8_t dns_seqno ;
301
305
static struct dns_table_entry dns_table [DNS_TABLE_SIZE ];
302
306
static struct dns_req_entry dns_requests [DNS_MAX_REQUESTS ];
307
+ #ifndef RT_USING_NETDEV
303
308
static ip_addr_t dns_servers [DNS_MAX_SERVERS ];
309
+ #endif
304
310
305
311
#if LWIP_IPV4
306
312
const 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)
364
370
{
365
371
if (numdns < DNS_MAX_SERVERS ) {
366
372
if (dnsserver != NULL ) {
367
- dns_servers [numdns ] = (* dnsserver );
368
-
369
373
#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 );
373
374
struct netif * netif = NULL ;
374
375
375
376
/* set network interface device DNS server address */
376
377
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 );
378
379
}
380
+ #else
381
+ dns_servers [numdns ] = (* dnsserver );
379
382
#endif /* RT_USING_NETDEV */
380
383
} 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
381
390
dns_servers [numdns ] = * IP_ADDR_ANY ;
391
+ #endif
382
392
}
383
393
}
384
394
}
@@ -395,7 +405,11 @@ const ip_addr_t *
395
405
dns_getserver (u8_t numdns )
396
406
{
397
407
if (numdns < DNS_MAX_SERVERS ) {
408
+ #ifdef RT_USING_NETDEV
409
+ return & netdev_default -> dns_servers [numdns ];
410
+ #else
398
411
return & dns_servers [numdns ];
412
+ #endif
399
413
} else {
400
414
return IP_ADDR_ANY ;
401
415
}
@@ -770,11 +784,19 @@ dns_send(u8_t idx)
770
784
u8_t n ;
771
785
u8_t pcb_idx ;
772
786
struct dns_table_entry * entry = & dns_table [idx ];
787
+ const ip_addr_t * dns_addr ;
773
788
774
789
LWIP_DEBUGF (DNS_DEBUG , ("dns_send: dns_servers[%" U16_F "] \"%s\": request\n" ,
775
790
(u16_t )(entry -> server_idx ), entry -> name ));
776
791
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 )
778
800
#if LWIP_DNS_SUPPORT_MDNS_QUERIES
779
801
&& !entry -> is_mdns
780
802
#endif
@@ -859,7 +881,11 @@ dns_send(u8_t idx)
859
881
#endif /* LWIP_DNS_SUPPORT_MDNS_QUERIES */
860
882
{
861
883
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
863
889
}
864
890
err = udp_sendto (dns_pcbs [pcb_idx ], p , dst , dst_port );
865
891
@@ -1040,8 +1066,15 @@ dns_backupserver_available(struct dns_table_entry *pentry)
1040
1066
u8_t ret = 0 ;
1041
1067
1042
1068
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
+ }
1045
1078
}
1046
1079
}
1047
1080
@@ -1230,9 +1263,14 @@ dns_recv(void *arg, struct udp_pcb *pcb, struct pbuf *p, const ip_addr_t *addr,
1230
1263
if (!entry -> is_mdns )
1231
1264
#endif /* LWIP_DNS_SUPPORT_MDNS_QUERIES */
1232
1265
{
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
1233
1271
/* Check whether response comes from the same network address to which the
1234
1272
question was sent. (RFC 5452) */
1235
- if (!ip_addr_cmp (addr , & dns_servers [ entry -> server_idx ] )) {
1273
+ if (!ip_addr_cmp (addr , dns_addr )) {
1236
1274
goto ignore_packet ; /* ignore this packet */
1237
1275
}
1238
1276
}
@@ -1631,8 +1669,13 @@ dns_gethostbyname_addrtype(const char *hostname, ip_addr_t *addr, dns_found_call
1631
1669
if (!is_mdns )
1632
1670
#endif /* LWIP_DNS_SUPPORT_MDNS_QUERIES */
1633
1671
{
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
1634
1677
/* 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 )) {
1636
1679
return ERR_VAL ;
1637
1680
}
1638
1681
}
0 commit comments