From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from list by monty-python.gnu.org with tmda-scanned (Exim 4.34) id 1BNxGr-0006kf-2U for qemu-devel@nongnu.org; Wed, 12 May 2004 13:11:53 -0400 Received: from mail by monty-python.gnu.org with spam-scanned (Exim 4.34) id 1BNxDm-0005zt-72 for qemu-devel@nongnu.org; Wed, 12 May 2004 13:09:13 -0400 Received: from [130.136.10.114] (helo=pob.cs.unibo.it) by monty-python.gnu.org with esmtp (Exim 4.34) id 1BNvh1-0000je-Gd for qemu-devel@nongnu.org; Wed, 12 May 2004 11:30:47 -0400 Date: Wed, 12 May 2004 17:30:48 +0200 Message-ID: <20040512153048.GC7093@cs.unibo.it> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline From: renzo@cs.unibo.it (Renzo Davoli) Subject: [Qemu-devel] [patch] slirp bootp, Request&Discover Reply-To: qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org I have done some tests with Win98. Sometimes it starts asking for an address with a DHCPdiscover sometimes with a DHCPrequest. In the latter case using the current cvs of bootp.c there is no answer as there is no MAC address registered yet. Maybe it is a workaround (although a working workaround ;-) but I propose to manage a DHCPrequest with no registered MAC address as it were a DHCPdiscover. The patch is here enclosed. ciao renzo ----------- --- bootp.cvs.c 2004-05-04 14:20:25.000000000 +0200 +++ bootp.c 2004-05-12 17:19:50.000000000 +0200 @@ -149,20 +149,18 @@ m->m_data += sizeof(struct udpiphdr); memset(rbp, 0, sizeof(struct bootp_t)); - if (dhcp_msg_type == DHCPDISCOVER) { + bc=NULL; + if (dhcp_msg_type == DHCPREQUEST) + bc = find_addr(&daddr.sin_addr, bp->bp_hwaddr); + if (!bc) { bc = get_new_addr(&daddr.sin_addr); if (!bc) { dprintf("no address left\n"); return; } memcpy(bc->macaddr, client_ethaddr, 6); - } else { - bc = find_addr(&daddr.sin_addr, bp->bp_hwaddr); - if (!bc) { - dprintf("no address assigned\n"); - return; - } } + dprintf("offered addr=%08x\n", ntohl(daddr.sin_addr.s_addr)); saddr.sin_addr.s_addr = htonl(ntohl(special_addr.s_addr) | CTL_ALIAS);