kvm tools: Fill DHCP options with domain name and DNS server IP

Domain name and DNS server IP address are filled.

Signed-off-by: Asias He <asias.hejun@gmail.com>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
This commit is contained in:
Asias He
2015-06-01 16:39:46 +01:00
committed by Will Deacon
parent bdcc9e40df
commit 32a44aaf03
2 changed files with 31 additions and 0 deletions
+4
View File
@@ -46,6 +46,10 @@
#define UIP_DHCP_MAX_DOMAIN_NAME_LEN 256
#define UIP_DHCP_TAG_MSG_TYPE 53
#define UIP_DHCP_TAG_MSG_TYPE_LEN 1
#define UIP_DHCP_TAG_DNS_SERVER 6
#define UIP_DHCP_TAG_DNS_SERVER_LEN 4
#define UIP_DHCP_TAG_DOMAIN_NAME 15
/*
* IP package maxium len == 64 KBytes
* IP header == 20 Bytes
+27
View File
@@ -64,3 +64,30 @@ out:
fclose(fp);
return ret;
}
static int uip_dhcp_fill_option_name_and_server(struct uip_info *info, u8 *opt, int i)
{
u8 domain_name_len;
u32 *addr;
int n;
if (info->domain_name) {
domain_name_len = strlen(info->domain_name);
opt[i++] = UIP_DHCP_TAG_DOMAIN_NAME;
opt[i++] = domain_name_len;
memcpy(&opt[i], info->domain_name, domain_name_len);
i += domain_name_len;
}
for (n = 0; n < UIP_DHCP_MAX_DNS_SERVER_NR; n++) {
if (info->dns_ip[n] == 0)
continue;
opt[i++] = UIP_DHCP_TAG_DNS_SERVER;
opt[i++] = UIP_DHCP_TAG_DNS_SERVER_LEN;
addr = (u32 *)&opt[i];
*addr = htonl(info->dns_ip[n]);
i += UIP_DHCP_TAG_DNS_SERVER_LEN;
}
return i;
}