This patch series implement user mode network for kvm tools.
This is a from-scratch, lightweight, 1K LOC, implementation of the {TCP,UDP}/IP
protocal stack in user mode. Usr mode network enables plain user without special
privileges to have network access in guest OS. Zero-configuration is needed
in host side.
uip stands for user mode {TCP,UDP}/IP. Currently, uip supports ARP, ICMP,
IPV4, UDP, TCP. So any network protocols above UDP/TCP should work as well,
e.g., HTTP, FTP, SSH, DNS.
--------------------------------
To use user mode network:
--------------------------------
1) Just add '-net user' option when you starts kvm tools.
2) Since DHCP is not implemented right now, guest needs to setup IP and DNS
manually.
# ifconfig eth0 192.168.33.15
# route add default gw 192.168.33.1
# echo "nameserver dns_ip" > /etc/resolv.conf
--------------------------------
Performance test:
--------------------------------
All tests are under a 100Mbps network system
TCP_STREAM
guest(using user mode network) -> remote server: 92.97 Mbps (CPU 10.29%)
host(where guest runs on) -> remote server: 93.68 Mbps (CPU 25.31%)
UDP_STREAM
guest(using user mode network) -> remote server: 94.5 Mbps (CPU 99.90%)
host(where guest runs on) -> remote server: 95.7 Mbps (CPU 25.51%)
Asias He (31):
kvm tools: Introduce ethernet frame buffer system for uip
kvm tools: Add ARP support for uip
kvm tools: Add IPV4 support for uip
kvm tools: Implement IP checksum for uip
kvm tools: Add ICMP support for uip
kvm tools: Introduce struct uip_udp to present UDP package
kvm tools: Introduce struct uip_pseudo_hdr to present UDP pseudo header
kvm tools: Introduce struct uip_udp_socket
kvm tools: Add two helpers to return UDP {header, total} length
kvm tools: Add helper to return ethernet header length
kvm tools: Implement uip_csum_udp() to calculate UDP checksum
kvm tools: Add UDP support for uip
kvm tools: Introduce struct uip_tcp to present TCP package.
kvm tools: Introduce struct uip_tcp_socket
kvm tools: Add helpers to return TCP {header, total, payload} length
kvm tools: Add helper to return start address of TCP payload
kvm tools: Add helpers to test whether SYN or FIN bit is set.
kvm tools: Add helper to allocate and get TCP initial sequence number
kvm tools: Implement uip_csum_tcp() to calculate TCP checksum
kvm tools: Add TCP support for uip
kvm tools: Introduce uip_init() for uip
kvm tools: Introduce uip_tx() for uip
kvm tools: Introduce uip_rx() for uip
kvm tools: Add MACRO for user and tap mode for virtio net
kvm tools: Reanme net_device to net_dev
kvm tools: Introduce -net {user, tap, none} options for virtio net
kvm tools: Change default guest MAC address to 00:15:15:15:15:15
kvm tools: Make virtio net work with user mode network
kvm tools: Make default network mode to user mode
kvm tools: Make default host ip address to 192.168.33.1
kvm tools: Introduce struct net_dev_operations
tools/kvm/Makefile | 8 +
tools/kvm/include/kvm/uip.h | 292 +++++++++++++++++++++++++++++++++
tools/kvm/include/kvm/virtio-net.h | 4 +
tools/kvm/kvm-run.c | 40 +++--
tools/kvm/uip/arp.c | 30 ++++
tools/kvm/uip/buf.c | 114 +++++++++++++
tools/kvm/uip/core.c | 188 +++++++++++++++++++++
tools/kvm/uip/csum.c | 92 +++++++++++
tools/kvm/uip/icmp.c | 29 ++++
tools/kvm/uip/ipv4.c | 29 ++++
tools/kvm/uip/tcp.c | 317 ++++++++++++++++++++++++++++++++++++
tools/kvm/uip/udp.c | 221 +++++++++++++++++++++++++
tools/kvm/virtio/net.c | 146 ++++++++++++-----
13 files changed, 1449 insertions(+), 61 deletions(-)
create mode 100644 tools/kvm/include/kvm/uip.h
create mode 100644 tools/kvm/uip/arp.c
create mode 100644 tools/kvm/uip/buf.c
create mode 100644 tools/kvm/uip/core.c
create mode 100644 tools/kvm/uip/csum.c
create mode 100644 tools/kvm/uip/icmp.c
create mode 100644 tools/kvm/uip/ipv4.c
create mode 100644 tools/kvm/uip/tcp.c
create mode 100644 tools/kvm/uip/udp.c
--
1.7.5.4
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html