feature: Simple add dns64 support.
This commit is contained in:
@@ -61,6 +61,9 @@ static time_t dns_conf_dnsmasq_lease_file_time;
|
||||
struct dns_hosts_table dns_hosts_table;
|
||||
int dns_hosts_record_num;
|
||||
|
||||
/* DNS64 */
|
||||
struct dns_dns64 dns_conf_dns_dns64;
|
||||
|
||||
/* server ip/port */
|
||||
struct dns_bind_ip dns_conf_bind_ip[DNS_MAX_BIND_IP];
|
||||
int dns_conf_bind_ip_num = 0;
|
||||
@@ -1690,6 +1693,43 @@ static int _config_speed_check_mode(void *data, int argc, char *argv[])
|
||||
return _config_speed_check_mode_parser(&dns_conf_check_orders, mode);
|
||||
}
|
||||
|
||||
static int _config_dns64(void *data, int argc, char *argv[])
|
||||
{
|
||||
prefix_t prefix;
|
||||
char *subnet = NULL;
|
||||
const char *errmsg = NULL;
|
||||
void *p = NULL;
|
||||
|
||||
if (argc <= 1) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
subnet = argv[1];
|
||||
|
||||
p = prefix_pton(subnet, -1, &prefix, &errmsg);
|
||||
if (p == NULL) {
|
||||
goto errout;
|
||||
}
|
||||
|
||||
if (prefix.family != AF_INET6) {
|
||||
tlog(TLOG_ERROR, "dns64 subnet %s is not ipv6", subnet);
|
||||
goto errout;
|
||||
}
|
||||
|
||||
if (prefix.bitlen <= 0 || prefix.bitlen > 96) {
|
||||
tlog(TLOG_ERROR, "dns64 subnet %s is not valid", subnet);
|
||||
goto errout;
|
||||
}
|
||||
|
||||
memcpy(&dns_conf_dns_dns64.prefix, &prefix.add.sin6.s6_addr, sizeof(dns_conf_dns_dns64.prefix));
|
||||
dns_conf_dns_dns64.prefix_len = prefix.bitlen;
|
||||
|
||||
return 0;
|
||||
|
||||
errout:
|
||||
return -1;
|
||||
}
|
||||
|
||||
static int _config_bind_ip(int argc, char *argv[], DNS_BIND_TYPE type)
|
||||
{
|
||||
int index = dns_conf_bind_ip_num;
|
||||
@@ -3021,6 +3061,7 @@ static struct config_item _config_item[] = {
|
||||
CONF_YESNO("dualstack-ip-selection", &dns_conf_dualstack_ip_selection),
|
||||
CONF_YESNO("dualstack-ip-allow-force-AAAA", &dns_conf_dualstack_ip_allow_force_AAAA),
|
||||
CONF_INT("dualstack-ip-selection-threshold", &dns_conf_dualstack_ip_selection_threshold, 0, 1000),
|
||||
CONF_CUSTOM("dns64", _config_dns64, NULL),
|
||||
CONF_CUSTOM("log-level", _config_log_level, NULL),
|
||||
CONF_STRING("log-file", (char *)dns_conf_log_file, DNS_MAX_PATH),
|
||||
CONF_SIZE("log-size", &dns_conf_log_size, 0, 1024 * 1024 * 1024),
|
||||
|
||||
Reference in New Issue
Block a user