qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] Anyone have functioning networking with a FreeBSD host?


From: Bakul Shah
Subject: Re: [Qemu-devel] Anyone have functioning networking with a FreeBSD host?
Date: Sun, 13 Jun 2004 11:59:26 -0700

I am using /dev/tap based networking, not the usermode one.
It all works fine (thanks to some help from Juergen Lock).
BTW, I am using the latest FreeBSD port &
Freebsd-5.2-current.

- when using the tap device you need to ifconfig the interface.
  You can do this manually or via a script.  Either copy this
  script to /etc/qemu-ifup or run it from the command line.
  Something like

        echo ifconfig $1 192.168.0.1    > /etc/qemu-ifup
        chmod +x /etc/qemu-ifup

  This needs to be done on the *host*.

- make sure you are using -pci option (I needed this for
  a FreeBSD guest -- do not know why).

- You may wish to use the linux-test image from the qemu
  site, for debugging all this.  Give the *guest OS* an
  address like 192.168.0.2 or something in the same subnet as
  the tap interface.  Once the OS is up and its interface
  configured, you should be able to ping the this address
  from the host FreeBSD.  If this step works, you have a
  working connection between the guest and the host; the
  remaining work is all networking related, nothing to do
  with qemu per se.

- Networking related changes: you will have to enable
  forwarding on the host.  You will likely need to add static
  routes or update your NAT rules or both.  You may have to
  run dhcp proxy on the host....  Someone should come up with
  a script that figures out the right thing to do based on
  your setup.

Some random thoughts:

* When qemu opens the tap device, it always returns a new
  device.  You can change this behavior by patching vl.c.  On
  line 1104 change the `for' loop to start at 0 instead of -1
  -- line # as per the patched sources in the FreeBSD port.
  This loop first tries /dev/tap and then /dev/tap0,
  /dev/tap1 and so on.  The change skips /dev/tap.

* I am not sure if removing suser() test in if_tap.c is the
  right thing to do from a security perspective so I left this
  alone.

* I don't see why /dev/tap is an exclusive open device.  If
  multiple opens were allowed, a number of VMs can be on the
  same simulated network.  That is, qemu for each guest can
  open the same device and they will all *see* each other as
  well as the host!

* I first thought qemu should also have a qemu-ifdown script
  but may be it is better to wrap qemu in a shell script that
  does the initial setup and final cleanup.

* It would be nice if qemu exited only on a power down
  event instead of a reboot.  May be as an option.

Overall this is a very impressive emulator!  So far I have
brought up Linux, FreeBSD-5.2.1 and a trial version of Window
2003.  Kudos to Fabrice Bellard and the other wizardly
programmers!




reply via email to

[Prev in Thread] Current Thread [Next in Thread]