This repository contains the work done for the Google Summer of Code 2016 program with the QEMU organization.
Each folder contains the patches sent to each of the projects.
-
linux/vsockmon: Vsockmon virtual network device. As of 10-08-2016 it is still not merged in part because it was necessary to wait until the virtio-vsock transport was merged (01-08-2016).
Related links:
-
wireshark: Wireshark dissector for the vsockmon virtual network device, merged.
Related links:
-
tcpdump: Tcpdump printer for the vsockmon virtual network device. As of 10-08-2016 still not merged as we are waiting to get vsockmon merged to get a DLT_/LINKTYPE_ identifier (http://www.tcpdump.org/linktypes.html).
Related links:
-
linux/virtio-vsock: Several patches related to the virtio transport.
Related links:
- (merged) VSOCK-remove-more-space-available-check-filling-TX-vq: http://marc.info/?l=linux-netdev&m=147085351302516&w=2
- Add-timer-to-handle-OOM-situations: http://marc.info/?l=linux-netdev&m=147101054013730&w=2
- Fix-unbound-rx-buffer: http://marc.info/?l=linux-netdev&m=147101057413742&w=2
http://qemu-project.org/Google_Summer_of_Code_2016#AF_VSOCK_packet_capture_in_Linux_and_Wireshark
QEMU is an open source machine emulator and virtualizer. As a virtualizer, it achieves nearly native performance using the Kernel-based Virtual Machine (KVM) hypervisor.
Zero-configuration communication between the hypervisor and its guests can be achieved using the virtio-serial device. The virtio-serial device sits on top of the VirtIO API, which allows the para-virtualization of devices in the guest system independently of the hypervisor.
Virtio-serial has several limitations though. For example, it does not allow multiple connections to the same port, the number of ports is quite limited and it is implemented as a character device (which are not usually used as communication mechanisms). To overcome this limitations the driver virtio-vsock is being developed.
The virtio-vsock device supports the POSIX Sockets API, which is more familiar to developers since it is the mechanism usually used for interprocess communication. The use of sockets have several advantages: N:1 communication, block and stream protocols, API widely known... Furthermore, programs that already use sockets can easily transition to use the virtio-vsock device without major changes in their code.
However, the traffic sent through virtio-vsock is hidden to the outside world, as it is internally managed by the hypervisor and the driver. And being able to snoop this traffic is very important when debugging.
The goal of this project is to expose the traffic exchanged through the virtio-vsock socket interface so that programs like Wireshark or tcpdump can capture it. This will help developers wanting to make use of the virtio-vsock device and will contribute to its adoption by the community.
To achieve this, it would be necessary to implement a device driver that exposes the traffic and a Wireshark dissector to parse it.