From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1FbPuu-0000NW-Vu for qemu-devel@nongnu.org; Wed, 03 May 2006 18:33:57 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1FbPur-0000NJ-6d for qemu-devel@nongnu.org; Wed, 03 May 2006 18:33:56 -0400 Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1FbPur-0000NG-0E for qemu-devel@nongnu.org; Wed, 03 May 2006 18:33:53 -0400 Received: from [64.233.162.201] (helo=nz-out-0102.google.com) by monty-python.gnu.org with esmtp (Exim 4.52) id 1FbPvK-0004Hw-8i for qemu-devel@nongnu.org; Wed, 03 May 2006 18:34:22 -0400 Received: by nz-out-0102.google.com with SMTP id n29so293389nzf for ; Wed, 03 May 2006 15:33:51 -0700 (PDT) Message-ID: Date: Wed, 3 May 2006 15:33:51 -0700 From: "Ed Swierk" Sender: eswierk@gmail.com MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_2336_19598291.1146695631876" Subject: [Qemu-devel] [PATCH] Allow user to configure -net user subnet 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 ------=_Part_2336_19598291.1146695631876 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: base64 Content-Disposition: inline SW4gZW52aXJvbm1lbnRzIHdoZXJlIHRoZSAxMC4wLjIuMC8yNCBzdWJuZXQgaXMgYWxyZWFkeSB1 c2VkIGZvcgphbm90aGVyIHB1cnBvc2UsIGl0J3MgdXNlZnVsIHRvIGJlIGFibGUgdG8gY29uZmln dXJlIGEgZGlmZmVyZW50IC1uZXQKdXNlciAoc2xpcnApIHN1Ym5ldCwgc3VjaCBhcyAxOTIuMTY4 LjEwMC4wLzI0LgoKVGhlIGF0dGFjaGVkIHBhdGNoIGFkZHMgYSBzdWJuZXQgb3B0aW9uIHRvIC11 c2VyIG5ldC4gQ3VycmVudGx5IG9ubHkKLzI0IHN1Ym5ldHMgKG1hc2sgMjU1LjI1NS4yNTUuMCkg YXJlIGFjY2VwdGVkLiBBbiBlcnJvciBpcyBnZW5lcmF0ZWQKaWYgdGhlIHNwZWNpZmllZCBzdWJu ZXQgaXMgbm90IG9mIHRoZSBmb3JtIFhYLllZLlpaLjAvMjQuIFRoaXMKcmVzdHJpY3Rpb24gY291 bGQgYmUgcmVsYXhlZCBpbiB0aGUgZnV0dXJlIHdpdGggbW9yZSBleHRlbnNpdmUgY2hhbmdlcwp0 byBzbGlycC4KCk9uZSBxdWlyayBpcyB0aGF0IHRoZSBkZWZhdWx0IGd1ZXN0LWhvc3QgZm9yIHRo ZSAtcmVkaXIgb3B0aW9uIHJlbWFpbnMKMTAuMC4yLjE1IGV2ZW4gaWYgdGhlIHVzZXIgcGFzc2Vz IGEgZGlmZmVyZW50IHN1Ym5ldCB0byAtbmV0IHVzZXIuCk9idmlvdXNseSB0aGlzIGNhbiBiZSB3 b3JrZWQgYXJvdW5kIGJ5IGV4cGxpY2l0bHkgc3BlY2lmeWluZyB0aGUKY29ycmVjdCBndWVzdC1o b3N0LiBUaGUgbmV4dCBwYXRjaCAocWVtdS1zbGlycC1vcHRpb25zLnBhdGNoKSBmaXhlcwp0aGlz IGlzc3VlLCBhbW9uZyBvdGhlcnMuCgotLUVkCg== ------=_Part_2336_19598291.1146695631876 Content-Type: text/x-patch; name=qemu-slirp-subnet-option.patch; charset=us-ascii Content-Transfer-Encoding: 7bit X-Attachment-Id: f_ems8qubt Content-Disposition: attachment; filename="qemu-slirp-subnet-option.patch" diff -BurN qemu.orig/slirp/libslirp.h qemu/slirp/libslirp.h --- qemu.orig/slirp/libslirp.h 2006-05-01 16:05:27.000000000 +0000 +++ qemu/slirp/libslirp.h 2006-05-02 17:27:59.000000000 +0000 @@ -13,6 +13,8 @@ extern "C" { #endif +#include "ctl.h" + void slirp_init(void); void slirp_select_fill(int *pnfds, @@ -33,6 +35,8 @@ extern const char *tftp_prefix; extern char slirp_hostname[33]; +extern struct in_addr special_addr; +extern struct in_addr alias_addr; #ifdef __cplusplus } diff -BurN qemu.orig/slirp/main.h qemu/slirp/main.h --- qemu.orig/slirp/main.h 2006-05-02 17:27:34.000000000 +0000 +++ qemu/slirp/main.h 2006-05-02 17:27:59.000000000 +0000 @@ -33,8 +33,6 @@ extern u_int curtime; extern fd_set *global_readfds, *global_writefds, *global_xfds; extern struct in_addr ctl_addr; -extern struct in_addr special_addr; -extern struct in_addr alias_addr; extern struct in_addr our_addr; extern struct in_addr loopback_addr; extern struct in_addr dns_addr; diff -BurN qemu.orig/slirp/slirp.c qemu/slirp/slirp.c --- qemu.orig/slirp/slirp.c 2006-05-02 17:27:34.000000000 +0000 +++ qemu/slirp/slirp.c 2006-05-02 17:27:59.000000000 +0000 @@ -155,8 +155,6 @@ fprintf (stderr, "Warning: No DNS servers found\n"); } - inet_aton(CTL_SPECIAL, &special_addr); - alias_addr.s_addr = special_addr.s_addr | htonl(CTL_ALIAS); getouraddr(); } diff -BurN qemu.orig/vl.c qemu/vl.c --- qemu.orig/vl.c 2006-05-01 16:05:27.000000000 +0000 +++ qemu/vl.c 2006-05-02 17:28:44.000000000 +0000 @@ -2400,7 +2400,7 @@ if (get_str_sep(buf, sizeof(buf), &p, ':') < 0) goto fail; if (buf[0] == '\0') { - pstrcpy(buf, sizeof(buf), "10.0.2.15"); + pstrcpy(buf, sizeof(buf), CTL_LOCAL); } if (!inet_aton(buf, &guest_addr)) goto fail; @@ -3170,6 +3170,22 @@ } else #ifdef CONFIG_SLIRP if (!strcmp(device, "user")) { + if (get_param_value(buf, sizeof(buf), "subnet", p)) { + char *len; + len = strchr(buf, 0) - 3; + if (len < buf || strcmp(len, "/24")) { + fprintf(stderr, "qemu: invalid subnet=%s (mask must be /24)\n", buf); + return -1; + } + *len = 0; + } else { + pstrcpy(buf, sizeof(buf), CTL_SPECIAL); + } + if (!inet_aton(buf, &special_addr) || (ntohl(special_addr.s_addr) & 0xff)) { + fprintf(stderr, "qemu: invalid subnet=%s\n", buf); + return -1; + } + alias_addr.s_addr = special_addr.s_addr | htonl(CTL_ALIAS); if (get_param_value(buf, sizeof(buf), "hostname", p)) { pstrcpy(slirp_hostname, sizeof(slirp_hostname), buf); } @@ -4628,9 +4644,9 @@ "-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][,hostname=host]\n" - " connect the user mode network stack to VLAN 'n' and send\n" - " hostname 'host' to DHCP clients\n" + "-net user[,vlan=n][,hostname=host][,subnet=addr/24]\n" + " connect the user mode network stack to VLAN 'n'; send\n" + " hostname 'host' to DHCP clients; use subnet addr\n" #endif #ifdef _WIN32 "-net tap[,vlan=n],ifname=name\n" ------=_Part_2336_19598291.1146695631876--