Browse Source

mdns: add ipv6 support.

Nick Peng 4 months ago
parent
commit
e26ecf6a52
3 changed files with 21 additions and 13 deletions
  1. 15 12
      src/dns_client/client_mdns.c
  2. 4 1
      src/dns_client/dns_client.c
  3. 2 0
      src/include/smartdns/dns_client.h

+ 15 - 12
src/dns_client/client_mdns.c

@@ -40,7 +40,7 @@ int _dns_client_create_socket_udp_mdns(struct dns_server_info *server_info)
 	const int priority = SOCKET_PRIORITY;
 	const int ip_tos = SOCKET_IP_TOS;
 
-	fd = socket(AF_INET, SOCK_DGRAM, 0);
+	fd = socket(server_info->ai_family, SOCK_DGRAM, 0);
 	if (fd < 0) {
 		tlog(TLOG_ERROR, "create socket failed, %s", strerror(errno));
 		goto errout;
@@ -165,7 +165,7 @@ int _dns_client_add_mdns_server(void)
 			continue;
 		}
 
-		if (AF_INET != ifa->ifa_addr->sa_family) {
+		if (AF_INET != ifa->ifa_addr->sa_family && AF_INET6 != ifa->ifa_addr->sa_family) {
 			continue;
 		}
 
@@ -182,16 +182,19 @@ int _dns_client_add_mdns_server(void)
 		}
 
 		safe_strncpy(server_flags.ifname, ifa->ifa_name, sizeof(server_flags.ifname));
-		ret = _dns_client_server_add(DNS_MDNS_IP, "", DNS_MDNS_PORT, DNS_SERVER_MDNS, &server_flags);
-		if (ret != 0) {
-			tlog(TLOG_ERROR, "add mdns server failed.");
-			goto errout;
-		}
-
-		if (dns_client_add_to_group(DNS_SERVER_GROUP_MDNS, DNS_MDNS_IP, DNS_MDNS_PORT, DNS_SERVER_MDNS,
-									&server_flags) != 0) {
-			tlog(TLOG_ERROR, "add mdns server to group failed.");
-			goto errout;
+		char *dns_ip[] = {DNS_MDNS_IP, DNS_MDNS_IP6, 0};
+		for (int i = 0; dns_ip[i] != NULL; i++) {
+			ret = _dns_client_server_add(dns_ip[i], "", DNS_MDNS_PORT, DNS_SERVER_MDNS, &server_flags);
+			if (ret != 0) {
+				tlog(TLOG_ERROR, "add mdns server failed for %s.", dns_ip[i]);
+				goto errout;
+			}
+
+			if (dns_client_add_to_group(DNS_SERVER_GROUP_MDNS, dns_ip[i], DNS_MDNS_PORT, DNS_SERVER_MDNS,
+										&server_flags) != 0) {
+				tlog(TLOG_ERROR, "add mdns server to group failed for %s.", dns_ip[i]);
+				goto errout;
+			}
 		}
 	}
 

+ 4 - 1
src/dns_client/dns_client.c

@@ -270,7 +270,9 @@ int _dns_client_send_packet(struct dns_query_struct *query, void *packet, int le
 					_dns_server_inc_prohibit_server_num(server_info);
 					time(&server_info->last_send);
 					time(&server_info->last_recv);
-					tlog(TLOG_INFO, "server %s not alive, prohibit", server_info->ip);
+					if (server_info->type != DNS_SERVER_MDNS) {
+						tlog(TLOG_INFO, "server %s not alive, prohibit", server_info->ip);
+					}
 					_dns_client_shutdown_socket(server_info);
 				}
 
@@ -332,6 +334,7 @@ int _dns_client_send_packet(struct dns_query_struct *query, void *packet, int le
 			case DNS_SERVER_MDNS:
 				/* mdns query */
 				ret = _dns_client_send_udp_mdns(server_info, packet_data, packet_data_len);
+				send_err = errno;
 				break;
 			case DNS_SERVER_QUIC:
 				/* quic query */

+ 2 - 0
src/include/smartdns/dns_client.h

@@ -32,9 +32,11 @@ extern "C" {
 #define DNS_SERVER_GROUP_LOCAL "local"
 #ifdef TEST
 #define DNS_MDNS_IP "127.0.0.1"
+#define DNS_MDNS_IP6 "::1"
 #define DNS_MDNS_PORT 55353
 #else
 #define DNS_MDNS_IP "224.0.0.251"
+#define DNS_MDNS_IP6 "ff02::fb"
 #define DNS_MDNS_PORT 5353
 #endif