From patchwork Thu Apr 14 05:24:41 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sasha Levin X-Patchwork-Id: 706221 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by demeter1.kernel.org (8.14.4/8.14.3) with ESMTP id p3E5PVTJ019954 for ; Thu, 14 Apr 2011 05:25:31 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753400Ab1DNFZ0 (ORCPT ); Thu, 14 Apr 2011 01:25:26 -0400 Received: from mail-wy0-f174.google.com ([74.125.82.174]:62376 "EHLO mail-wy0-f174.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753324Ab1DNFZD (ORCPT ); Thu, 14 Apr 2011 01:25:03 -0400 Received: by wya21 with SMTP id 21so1075191wya.19 for ; Wed, 13 Apr 2011 22:25:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:from:to:cc:subject:date:message-id:x-mailer :in-reply-to:references; bh=y+16X/RyFcVE958re//l48bFe5xlHdvDrCMA1lLD9vI=; b=ly4Vvz3f/Uoi+8+zDM7k8hEKgFzzo1hHwp3WUxHZINo6bx1isXeuFnyKG7ngplR4VS bGMVFDpgpPq3gvZHMSpkLlVayZVAKw7KBUnjFmJmgf2I7zRRA1OXp2KOshp+keYVzoog iMX0FCSQBb9MnbrrwyeIiJQ0Pix8Zr4pcX42I= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=from:to:cc:subject:date:message-id:x-mailer:in-reply-to:references; b=Z3vobr7ngr45tI+M1bSZdAQSSkOvNhS0nqOJGnPHkgeZtkSbQaqLpwml4gC2RPHmiW 5Bn7oPImFWLqqohvfGMzPhqy8TyK7SZvxua4HtnIuLrnXyq/x9xUSDAj4eCE9cGqgeOT /5TCprHMtsPGfIVtUJzmfNQS6R2fzZp/ywWHU= Received: by 10.227.110.147 with SMTP id n19mr339203wbp.51.1302758701770; Wed, 13 Apr 2011 22:25:01 -0700 (PDT) Received: from localhost.localdomain (bzq-79-177-209-247.red.bezeqint.net [79.177.209.247]) by mx.google.com with ESMTPS id bd8sm747766wbb.14.2011.04.13.22.25.00 (version=TLSv1/SSLv3 cipher=OTHER); Wed, 13 Apr 2011 22:25:01 -0700 (PDT) From: Sasha Levin To: penberg@kernel.org, asias.hejun@gmail.com, gorcunov@gmail.com Cc: kvm@vger.kernel.org, Sasha Levin Subject: [PATCH 2/2 V2] kvm tools: Make host side IP configurable Date: Thu, 14 Apr 2011 08:24:41 +0300 Message-Id: <1302758681-8829-2-git-send-email-levinsasha928@gmail.com> X-Mailer: git-send-email 1.7.5.rc1 In-Reply-To: <1302758681-8829-1-git-send-email-levinsasha928@gmail.com> References: <1302758681-8829-1-git-send-email-levinsasha928@gmail.com> Sender: kvm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org X-Greylist: IP, sender and recipient auto-whitelisted, not delayed by milter-greylist-4.2.6 (demeter1.kernel.org [140.211.167.41]); Thu, 14 Apr 2011 05:25:31 +0000 (UTC) Add --host-ip-addr parameter to allow changing the host-side IP address. Add a networking group to the cmdline menu. Signed-off-by: Sasha Levin Reviewed-by: Asias He --- tools/kvm/include/kvm/virtio-net.h | 2 +- tools/kvm/kvm-run.c | 15 ++++++++++++--- tools/kvm/virtio-net.c | 9 ++++----- 3 files changed, 17 insertions(+), 9 deletions(-) diff --git a/tools/kvm/include/kvm/virtio-net.h b/tools/kvm/include/kvm/virtio-net.h index a1cab15..9800a41 100644 --- a/tools/kvm/include/kvm/virtio-net.h +++ b/tools/kvm/include/kvm/virtio-net.h @@ -2,6 +2,6 @@ #define KVM__VIRTIO_NET_H struct kvm; -void virtio_net__init(struct kvm *self); +void virtio_net__init(struct kvm *self, const char *host_ip_addr); #endif /* KVM__VIRTIO_NET_H */ diff --git a/tools/kvm/kvm-run.c b/tools/kvm/kvm-run.c index 6046a0a..d71057c 100644 --- a/tools/kvm/kvm-run.c +++ b/tools/kvm/kvm-run.c @@ -31,6 +31,7 @@ #define DEFAULT_KVM_DEV "/dev/kvm" #define DEFAULT_CONSOLE "serial" #define DEFAULT_NETWORK "none" +#define DEFAULT_HOST_ADDR "192.168.33.2" #define MB_SHIFT (20) #define MIN_RAM_SIZE_MB (64ULL) @@ -66,6 +67,7 @@ static const char *image_filename; static const char *console; static const char *kvm_dev; static const char *network; +static const char *host_ip_addr; static bool single_step; static bool readonly_image; extern bool ioport_debug; @@ -87,8 +89,6 @@ static const struct option options[] = { "Don't write changes back to disk image"), OPT_STRING('c', "console", &console, "serial or virtio", "Console to use"), - OPT_STRING('n', "network", &network, "virtio", - "Network to use"), OPT_GROUP("Kernel options:"), OPT_STRING('k', "kernel", &kernel_filename, "kernel", @@ -98,6 +98,12 @@ static const struct option options[] = { OPT_STRING('p', "params", &kernel_cmdline, "params", "Kernel command line arguments"), + OPT_GROUP("Networking options:"), + OPT_STRING('n', "network", &network, "virtio", + "Network to use"), + OPT_STRING('\0', "host-ip-addr", &host_ip_addr, "a.b.c.d", + "Assign this address to the host side networking"), + OPT_GROUP("Debug options:"), OPT_STRING('d', "kvm-dev", &kvm_dev, "kvm-dev", "KVM device file"), OPT_BOOLEAN('s', "single-step", &single_step, @@ -218,6 +224,9 @@ int kvm_cmd_run(int argc, const char **argv, const char *prefix) else active_console = CONSOLE_8250; + if (!host_ip_addr) + host_ip_addr = DEFAULT_HOST_ADDR; + term_init(); kvm = kvm__init(kvm_dev, ram_size); @@ -259,7 +268,7 @@ int kvm_cmd_run(int argc, const char **argv, const char *prefix) network = DEFAULT_NETWORK; if (!strncmp(network, "virtio", 6)) - virtio_net__init(kvm); + virtio_net__init(kvm, host_ip_addr); kvm__start_timer(kvm); diff --git a/tools/kvm/virtio-net.c b/tools/kvm/virtio-net.c index 622cfc6..90a6a17 100644 --- a/tools/kvm/virtio-net.c +++ b/tools/kvm/virtio-net.c @@ -276,7 +276,7 @@ static struct pci_device_header virtio_net_pci_device = { .irq_line = VIRTIO_NET_IRQ, }; -static void virtio_net__tap_init(void) +static void virtio_net__tap_init(const char *host_ip_addr) { struct ifreq ifr; int sock = socket(AF_INET, SOCK_STREAM, 0); @@ -301,8 +301,7 @@ static void virtio_net__tap_init(void) strncpy(ifr.ifr_name, net_device.tap_name, sizeof(net_device.tap_name)); - /*FIXME: Remove this after user can specify ip address and netmask*/ - sin.sin_addr.s_addr = inet_addr("192.168.33.2"); + sin.sin_addr.s_addr = inet_addr(host_ip_addr); memcpy(&(ifr.ifr_addr), &sin, sizeof(ifr.ifr_addr)); ifr.ifr_addr.sa_family = AF_INET; @@ -331,11 +330,11 @@ static void virtio_net__io_thread_init(struct kvm *self) pthread_create(&net_device.io_tx_thread, NULL, virtio_net_tx_thread, (void *)self); } -void virtio_net__init(struct kvm *self) +void virtio_net__init(struct kvm *self, const char *host_ip_addr) { pci__register(&virtio_net_pci_device, PCI_VIRTIO_NET_DEVNUM); ioport__register(IOPORT_VIRTIO_NET, &virtio_net_io_ops, IOPORT_VIRTIO_NET_SIZE); - virtio_net__tap_init(); + virtio_net__tap_init(host_ip_addr); virtio_net__io_thread_init(self); }