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 majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html