mirror of
https://github.com/espressif/esp-idf.git
synced 2025-09-30 19:19:21 +00:00
tcpip_adapter/lwip: make dhcp domain name server option configurable
Add api to configure dhcp option: domain name server 1.closes https://github.com/espressif/esp-idf/issues/162 2.closes https://github.com/espressif/esp-idf/issues/705
This commit is contained in:
@@ -84,6 +84,7 @@ static const u32_t magic_cookie = 0x63538263;
|
||||
static struct udp_pcb *pcb_dhcps = NULL;
|
||||
static ip4_addr_t broadcast_dhcps;
|
||||
static ip4_addr_t server_address;
|
||||
static ip4_addr_t dns_server = {0};
|
||||
static ip4_addr_t client_address; //added
|
||||
static ip4_addr_t client_address_plus;
|
||||
|
||||
@@ -91,8 +92,9 @@ static list_node *plist = NULL;
|
||||
static bool renew = false;
|
||||
|
||||
static dhcps_lease_t dhcps_poll;
|
||||
static dhcps_offer_t dhcps_offer = 0xFF;
|
||||
static dhcps_time_t dhcps_lease_time = DHCPS_LEASE_TIME_DEF; //minute
|
||||
static dhcps_offer_t dhcps_offer = 0xFF;
|
||||
static dhcps_offer_t dhcps_dns = 0xFF;
|
||||
|
||||
/******************************************************************************
|
||||
* FunctionName : dhcps_option_info
|
||||
@@ -127,6 +129,13 @@ void *dhcps_option_info(u8_t op_id, u32_t opt_len)
|
||||
|
||||
break;
|
||||
|
||||
case DOMAIN_NAME_SERVER:
|
||||
if (opt_len == sizeof(dhcps_offer_t)) {
|
||||
option_arg = &dhcps_dns;
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@@ -134,6 +143,53 @@ void *dhcps_option_info(u8_t op_id, u32_t opt_len)
|
||||
return option_arg;
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
* FunctionName : dhcps_set_option_info
|
||||
* Description : set the DHCP message option info
|
||||
* Parameters : op_id -- DHCP message option id
|
||||
* opt_info -- DHCP message option info
|
||||
* opt_len -- DHCP message option length
|
||||
* Returns : none
|
||||
*******************************************************************************/
|
||||
void dhcps_set_option_info(u8_t op_id, void *opt_info, u32_t opt_len)
|
||||
{
|
||||
if (opt_info == NULL) {
|
||||
return;
|
||||
}
|
||||
switch (op_id) {
|
||||
case IP_ADDRESS_LEASE_TIME:
|
||||
if (opt_len == sizeof(dhcps_time_t)) {
|
||||
dhcps_lease_time = *(dhcps_time_t *)opt_info;
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case REQUESTED_IP_ADDRESS:
|
||||
if (opt_len == sizeof(dhcps_lease_t)) {
|
||||
dhcps_poll = *(dhcps_lease_t *)opt_info;
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case ROUTER_SOLICITATION_ADDRESS:
|
||||
if (opt_len == sizeof(dhcps_offer_t)) {
|
||||
dhcps_offer = *(dhcps_offer_t *)opt_info;
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case DOMAIN_NAME_SERVER:
|
||||
if (opt_len == sizeof(dhcps_offer_t)) {
|
||||
dhcps_dns = *(dhcps_offer_t *)opt_info;
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
* FunctionName : node_insert_to_list
|
||||
* Description : insert the node to the list
|
||||
@@ -284,14 +340,19 @@ static u8_t *add_offer_options(u8_t *optptr)
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef USE_DNS
|
||||
*optptr++ = DHCP_OPTION_DNS_SERVER;
|
||||
*optptr++ = 4;
|
||||
*optptr++ = ip4_addr1(&ipadd);
|
||||
*optptr++ = ip4_addr2(&ipadd);
|
||||
*optptr++ = ip4_addr3(&ipadd);
|
||||
*optptr++ = ip4_addr4(&ipadd);
|
||||
#endif
|
||||
if (dhcps_dns_enabled(dhcps_dns)) {
|
||||
*optptr++ = ip4_addr1(&dns_server);
|
||||
*optptr++ = ip4_addr2(&dns_server);
|
||||
*optptr++ = ip4_addr3(&dns_server);
|
||||
*optptr++ = ip4_addr4(&dns_server);
|
||||
}else {
|
||||
*optptr++ = ip4_addr1(&ipadd);
|
||||
*optptr++ = ip4_addr2(&ipadd);
|
||||
*optptr++ = ip4_addr3(&ipadd);
|
||||
*optptr++ = ip4_addr4(&ipadd);
|
||||
}
|
||||
|
||||
#ifdef CLASS_B_NET
|
||||
*optptr++ = DHCP_OPTION_BROADCAST_ADDRESS;
|
||||
@@ -1216,5 +1277,33 @@ bool dhcp_search_ip_on_mac(u8_t *mac, ip4_addr_t *ip)
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
* FunctionName : dhcps_dns_setserver
|
||||
* Description : set DNS server address for dhcpserver
|
||||
* Parameters : dnsserver -- The DNS server address
|
||||
* Returns : none
|
||||
*******************************************************************************/
|
||||
void
|
||||
dhcps_dns_setserver(const ip_addr_t *dnsserver)
|
||||
{
|
||||
if (dnsserver != NULL) {
|
||||
dns_server = *(ip_2_ip4(dnsserver));
|
||||
} else {
|
||||
dns_server = *(ip_2_ip4(IP_ADDR_ANY));
|
||||
}
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
* FunctionName : dhcps_dns_getserver
|
||||
* Description : get DNS server address for dhcpserver
|
||||
* Parameters : none
|
||||
* Returns : ip4_addr_t
|
||||
*******************************************************************************/
|
||||
ip4_addr_t
|
||||
dhcps_dns_getserver()
|
||||
{
|
||||
return dns_server;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
Reference in New Issue
Block a user