kvm tools: Make host side IP configurable

Add --host-ip-addr parameter to allow changing the host-side IP address.
Add a networking group to the cmdline menu.

Reviewed-by: Asias He <asias.hejun@gmail.com>
Signed-off-by: Sasha Levin <levinsasha928@gmail.com>
Signed-off-by: Pekka Enberg <penberg@kernel.org>
This commit is contained in:
Sasha Levin
2015-06-01 16:39:42 +01:00
committed by Will Deacon
parent cb7202c13f
commit 4d67c820b2
3 changed files with 17 additions and 9 deletions
+1 -1
View File
@@ -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 */
+12 -3
View File
@@ -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);
+4 -5
View File
@@ -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);
}