[PATCH v2 00/31] Implement user mode network for kvm tools

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

 



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


[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux