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;
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
break;
+ case DOMAIN_NAME_SERVER:
+ if (opt_len == sizeof(dhcps_offer_t)) {
+ option_arg = &dhcps_dns;
+ }
+
+ break;
+
default:
break;
}
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
}
}
-#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;
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