From mboxrd@z Thu Jan 1 00:00:00 1970 From: Asias He Subject: [PATCH 06/16] kvm tools: Fill DHCP options with domain name and DNS server IP Date: Sun, 17 Jul 2011 16:56:54 +0800 Message-ID: <1310893024-21615-7-git-send-email-asias.hejun@gmail.com> References: <1310893024-21615-1-git-send-email-asias.hejun@gmail.com> Cc: Cyrill Gorcunov , Ingo Molnar , Sasha Levin , Prasad Joshi , kvm@vger.kernel.org, Asias He To: Pekka Enberg Return-path: Received: from mail-iw0-f174.google.com ([209.85.214.174]:63499 "EHLO mail-iw0-f174.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753731Ab1GQI7U (ORCPT ); Sun, 17 Jul 2011 04:59:20 -0400 Received: by mail-iw0-f174.google.com with SMTP id 6so2294615iwn.19 for ; Sun, 17 Jul 2011 01:59:20 -0700 (PDT) In-Reply-To: <1310893024-21615-1-git-send-email-asias.hejun@gmail.com> Sender: kvm-owner@vger.kernel.org List-ID: Domain name and DNS server IP address are filled. Signed-off-by: Asias He --- tools/kvm/include/kvm/uip.h | 4 ++++ tools/kvm/net/uip/dhcp.c | 27 +++++++++++++++++++++++++++ 2 files changed, 31 insertions(+), 0 deletions(-) diff --git a/tools/kvm/include/kvm/uip.h b/tools/kvm/include/kvm/uip.h index e645d3f..2586583 100644 --- a/tools/kvm/include/kvm/uip.h +++ b/tools/kvm/include/kvm/uip.h @@ -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 diff --git a/tools/kvm/net/uip/dhcp.c b/tools/kvm/net/uip/dhcp.c index 9321cdc..79ddd00 100644 --- a/tools/kvm/net/uip/dhcp.c +++ b/tools/kvm/net/uip/dhcp.c @@ -63,3 +63,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; +} -- 1.7.5.4