From 115defd163ff4977cfffbaa5a02e8d19d89e03d2 Mon Sep 17 00:00:00 2001 From: pbrook Date: Sun, 16 Apr 2006 11:06:58 +0000 Subject: [PATCH] Set slirp client hostname. git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@1813 c046a42c-6fe2-441c-8c8c-71466251a162 --- qemu-doc.texi | 5 +++-- slirp/bootp.c | 8 ++++++++ slirp/libslirp.h | 1 + slirp/slirp.c | 2 ++ vl.c | 10 ++++++++-- 5 files changed, 22 insertions(+), 4 deletions(-) diff --git a/qemu-doc.texi b/qemu-doc.texi index 7ab0520..e97e51a 100644 --- a/qemu-doc.texi +++ b/qemu-doc.texi @@ -262,9 +262,10 @@ Qemu can emulate several different models of network card. Valid values for @code{smc91c111} and @code{lance}. Not all devices are supported on all targets. -@item -net user[,vlan=n] +@item -net user[,vlan=n][,hostname=name] Use the user mode network stack which requires no administrator -priviledge to run. +priviledge to run. @option{hotname=name} can be used to specify the client +hostname reported by the builtin DHCP server. @item -net tap[,vlan=n][,fd=h][,ifname=name][,script=file] Connect the host TAP network interface @var{name} to VLAN @var{n} and diff --git a/slirp/bootp.c b/slirp/bootp.c index 9f0652f..62cbcfd 100644 --- a/slirp/bootp.c +++ b/slirp/bootp.c @@ -228,6 +228,14 @@ static void bootp_reply(struct bootp_t *bp) val = htonl(LEASE_TIME); memcpy(q, &val, 4); q += 4; + + if (*slirp_hostname) { + val = strlen(slirp_hostname); + *q++ = RFC1533_HOSTNAME; + *q++ = val; + memcpy(q, slirp_hostname, val); + q += val; + } } *q++ = RFC1533_END; diff --git a/slirp/libslirp.h b/slirp/libslirp.h index cff159e..36c8ec2 100644 --- a/slirp/libslirp.h +++ b/slirp/libslirp.h @@ -32,6 +32,7 @@ int slirp_add_exec(int do_pty, const char *args, int addr_low_byte, int guest_port); extern const char *tftp_prefix; +extern const char slirp_hostname[33]; #ifdef __cplusplus } diff --git a/slirp/slirp.c b/slirp/slirp.c index 404cce8..28b8c88 100644 --- a/slirp/slirp.c +++ b/slirp/slirp.c @@ -25,6 +25,8 @@ struct ex_list *exec_list; /* XXX: suppress those select globals */ fd_set *global_readfds, *global_writefds, *global_xfds; +const char slirp_hostname[33]; + #ifdef _WIN32 static int get_dns_addr(struct in_addr *pdns_addr) diff --git a/vl.c b/vl.c index 8fba6e7..4f9b8c8 100644 --- a/vl.c +++ b/vl.c @@ -3151,6 +3151,11 @@ int net_client_init(const char *str) } else #ifdef CONFIG_SLIRP if (!strcmp(device, "user")) { + if (get_param_value(buf, sizeof(buf), "hostname", p)) { + if (strlen(buf) > 32) + buf[32] = 0; + strcpy(slirp_hostname, buf); + } ret = net_slirp_init(vlan); } else #endif @@ -4597,8 +4602,9 @@ void help(void) "-net nic[,vlan=n][,macaddr=addr][,model=type]\n" " create a new Network Interface Card and connect it to VLAN 'n'\n" #ifdef CONFIG_SLIRP - "-net user[,vlan=n]\n" - " connect the user mode network stack to VLAN 'n'\n" + "-net user[,vlan=n][,hostname=host]\n" + " connect the user mode network stack to VLAN 'n' and send\n" + " hostname 'host' to DHCP clients\n" #endif #ifdef _WIN32 "-net tap[,vlan=n],ifname=name\n" -- 2.7.4