2013年7月1日 星期一

[Linux] Qemu Settings : Networking

[Reference]
http://blog.chinaunix.net/uid-26061689-id-2981914.html
http://www.mediaonfire.com/en/tech_tips/QEMUNetworking.html
https://people.gnome.org/~markmc/qemu-networking.html
http://opencsl.openfoundry.org/Lab03_root_filesystem.rst.html
http://www.osslab.com.tw/Hardware/Open_Embedded_System/ARM/ARM_Simulator_on_x86_with_Qemu/%E5%9C%A8x86_%E6%A8%A1%E6%93%AC%E7%92%B0%E5%A2%83%E4%B8%8B%E6%B8%AC%E8%A9%A6ARM_Ubuntu
http://blog.roodo.com/use_the_force/archives/2717044.html
http://user.frdm.info/ckhung/b/sa/qemu.php
http://idobest.pixnet.net/blog/post/22040220-%5B%E8%BD%89%E8%B2%BC%5D-qemu-%E7%B6%B2%E8%B7%AF%E8%A8%AD%E5%AE%9A
http://mikelev.in/2010/07/qemu-network-qemu-networking/


The following steps showing about how to enable internet function for qemu:

00. Host PC environment 

Linux yen-desktop 3.2.0-48-generic #74-Ubuntu SMP Thu Jun 6 19:43:26 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux


01. Install packages

sudo apt-get install uml-utilities
sudo apt-get install bridge-utils

[Trying records]
sudo apt-get install uml-utilities
正在讀取套件清單... 完成
正在重建相依關係          
正在讀取狀態資料... 完成
uml-utilities 已經是最新版本了。
以下套件為自動安裝,並且已經無用:
  libtxc-dxtn-s2tc0 libllvm3.1
使用 'apt-get autoremove' 來將其移除。
升級 0 個,新安裝 0 個,移除 0 個,有 0 個未被升級。

sudo apt-get install bridge-utils
正在讀取套件清單... 完成
正在重建相依關係          
正在讀取狀態資料... 完成
bridge-utils 已經是最新版本了。
以下套件為自動安裝,並且已經無用:
  libtxc-dxtn-s2tc0 libllvm3.1
使用 'apt-get autoremove' 來將其移除。
升級 0 個,新安裝 0 個,移除 0 個,有 0 個未被升級。


02.Host PC Setting Commands

ifconfig eth0 down
brctl addbr br0
brctl addif br0 eth0
brctl stp br0 off
brctl setfd br0 1
brctl sethello br0 1
ifconfig br0 0.0.0.0 promisc up
ifconfig eth0 0.0.0.0 promisc up
dhclient br0
brctl show br0
brctl showstp br0

tunctl -t tap0 -u root
brctl addif br0 tap0
ifconfig tap0 0.0.0.0 promisc up
brctl showstp br0


[Trying records]

yen0430@yen-desktop:/$ brctl
Usage: brctl [commands]
commands:
        addbr           <bridge>                add bridge
        delbr           <bridge>                delete bridge
        addif           <bridge> <device>       add interface to bridge
        delif           <bridge> <device>       delete interface from bridge
        hairpin         <bridge> <port> {on|off}        turn hairpin on/off
        setageing       <bridge> <time>         set ageing time
        setbridgeprio   <bridge> <prio>         set bridge priority
        setfd           <bridge> <time>         set bridge forward delay
        sethello        <bridge> <time>         set hello time
        setmaxage       <bridge> <time>         set max message age
        setpathcost     <bridge> <port> <cost>  set path cost
        setportprio     <bridge> <port> <prio>  set port priority
        show            [ <bridge> ]            show a list of bridges
        showmacs        <bridge>                show a list of mac addrs
        showstp         <bridge>                show bridge stp info
        stp             <bridge> {on|off}       turn stp on/off

yen0430@yen-desktop:/$ sudo brctl addbr br0
[sudo] password for yen0430:
yen0430@yen-desktop:/$ sudo brctl addif br0 eth0
yen0430@yen-desktop:/$ sudo brctl stp br0 off
yen0430@yen-desktop:/$ sudo brctl setfd br0 1
yen0430@yen-desktop:/$ sudo brctl sethello br0 1
yen0430@yen-desktop:/$ sudo ifconfig br0 0.0.0.0 promisc up
yen0430@yen-desktop:/$ sudo ifconfig eth0 0.0.0.0 promisc up
yen0430@yen-desktop:/$ sudo dhclient br0
yen0430@yen-desktop:/$ sudo brctl show br0
bridge name     bridge id               STP enabled     interfaces
br0             8000.eca86b8de3e0       no              eth0
yen0430@yen-desktop:/$ sudo brctl showstp br0
br0
 bridge id              8000.eeeeeeeeeeeeeee
 designated root        8000.eeeeeeeeeeeee
 root port                 0                    path cost                  0
 max age                  20.00                 bridge max age            20.00
 hello time                1.00                 bridge hello time          1.00
 forward delay             1.00                 bridge forward delay       1.00
 ageing time             300.01
 hello timer               0.06                 tcn timer                  0.00
 topology change timer     0.00                 gc timer                 271.03
 flags

eth0 (1)
 port id                8001                    state                forwarding
 designated root        8000.eeeeeeeeeeee       path cost                  4
 designated bridge      8000.eeeeeeeeeeee       message age timer          0.00
 designated port        8001                    forward delay timer        0.00
 designated cost           0                    hold timer                 0.06
 flags

yen0430@yen-desktop:/$ ifconfig
br0       Link encap:Ethernet  HWaddr eeeeeeeeeeeeeeeeee
          inet addr:xxx.xx.4.92  Bcast:xxx.xx.255.255  Mask:255.255.0.0
          inet6 addr: fe80::eeeeeeeeeeeeeee/64 Scope:Link
          UP BROADCAST RUNNING PROMISC MULTICAST  MTU:1500  Metric:1
          RX packets:2196 errors:0 dropped:0 overruns:0 frame:0
          TX packets:258 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:375516 (375.5 KB)  TX bytes:36069 (36.0 KB)

eth0      Link encap:Ethernet  HWaddr eeeeeeeeeeeeee
          inet6 addr: fe80::eeeeeeeeeeeeeeeeeee/64 Scope:Link
          UP BROADCAST RUNNING PROMISC MULTICAST  MTU:1500  Metric:1
          RX packets:33131 errors:0 dropped:0 overruns:0 frame:0
          TX packets:13408 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:14094542 (14.0 MB)  TX bytes:2130457 (2.1 MB)
          Interrupt:20 Memory:f7c00000-f7c20000

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:2646 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2646 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:276862 (276.8 KB)  TX bytes:276862 (276.8 KB)

yen0430@yen-desktop:~$ sudo tunctl -t tap0 -u root
Set 'tap0' persistent and owned by uid 0
yen0430@yen-desktop:~$ sudo brctl addif br0 tap0
yen0430@yen-desktop:~$ sudo ifconfig tap0 0.0.0.0 promisc up
yen0430@yen-desktop:~$ sudo brctl showstp br0
br0
 bridge id              8000.eeeeeeeeeeeeeeeeee
 designated root        8000.eeeeeeeeeeeeeeee
 root port                 0                    path cost                  0
 max age                  20.00                 bridge max age            20.00
 hello time                1.00                 bridge hello time          1.00
 forward delay             1.00                 bridge forward delay       1.00
 ageing time             300.01
 hello timer               0.08                 tcn timer                  0.00
 topology change timer     0.00                 gc timer                  50.04
 flags

eth0 (1)
 port id                8001                    state                forwarding
 designated root        8000.eeeeeeeeeeeeee       path cost                  4
 designated bridge      8000.eeeeeeeeeeeee       message age timer          0.00
 designated port        8001                    forward delay timer        0.00
 designated cost           0                    hold timer                 0.11
 flags

tap0 (2)
 port id                8002                    state                  disabled
 designated root        8000.eeeeeeeeeeeee       path cost                100
 designated bridge      8000.eeeeeeeeeeeee       message age timer          0.00
 designated port        8002                    forward delay timer        0.00
 designated cost           0                    hold timer                 0.00
 flags

03. Add  br0 and tap0 to /etc/network/interfaces

yen0430@yen-desktop:~$ sudo vim /etc/network/interfaces
yen0430@yen-desktop:~$ cat /etc/network/interfaces
auto lo
iface lo inet loopback
# The bridge network interface(s)
auto br0
iface br0 inet dhcp
bridge_ports eth0
bridge_fd 9
bridge_hello 2
bridge_maxage 12
bridge_stp off
# The tap0 network interface(s)
auto tap0
iface tap0 inet manual
pre-up tunctl -t tap0 -u root
pre-up ifconfig tap0 0.0.0.0 promisc up
post-up brctl addif br0 tap0

04. Add eth0 to target machine/board root file system

yen0430@yen-desktop:~$ vim  ${TARGET_BOARD_ROOTFS}/etc/network/interfaces
# Configure Loopback
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp

[NOTES]
For buildroot, add these to " buildroot/system/skeleton/etc/network/interfaces " as default.


05. Run qemu

yen0430@yen-desktop:~$ sudo qemu-system-i386 -kernel output/images/bzImage -m 1024 -net nic,model=ne2k_pci -net tap
Could not open option rom 'pxe-ne2k_pci.rom': No such file or directory

[NOTES]

[qemu command]
qemu-system-i386
qemu-system-x86_64 

[use 'bzImage' as kernel image]
-kernel output/images/bzImage
Other items:
                   Linux/Multiboot boot specific:
                   -kernel bzImage use 'bzImage' as kernel image
                   -append cmdline use 'cmdline' as kernel command line
                   -initrd file    use 'file' as initial ram disk

[set virtual RAM size to megs MB [default=384]]
-m 1024

[create a new Network Interface Card and connect it to VLAN 'n']
-net nic,model=ne2k_pci

[connect the host TAP network interface to VLAN 'n' and use the network scripts 'file' (default=/etc/qemu-ifup) ]
-net tap