In a container environment if the vhost-user backend restarts, there's no way for it to reconnect to virtio-user currently. To address this, support for server mode is added. In this mode the socket file is created by virtio-user, which the backend connects to. This means that if the backend restarts, it can reconnect to virtio-user and continue communications.
The series add support for the feature and target for 18.05 release. virtio-user adds support for server mode in this patch. Client mode vhost-user startup firstly, server mode virtio-user startups and creates the socket file to exchange vhost messages. If the connection is broken, client mode vhost-user can support to reconnect virtio-user. Server mode virtio-user supports many times' vhost-user reconnections with the same parameter configurations. Virtio-user supports only one connection at the same time in server/client mode. How to test? The following scripts are as reference. step1: ./x86_64-native-linuxapp-gcc/app/testpmd -c 0x3e000 -n 4 --socket-mem 256,0 \ --vdev 'net_vhost0,iface=/tmp/sock0,client=1,queues=1' -- -i --rxq=1 --txq=1 \ --nb-cores=1 --no-numa step2: ./x86_64-native-linuxapp-gcc/app/testpmd -c 0x3 -n 4 -m 256,0 --no-pci \ --file-prefix=testpmd0 --vdev=net_virtio_user0,mac=00:11:22:33:44:10, \ path=/tmp/sock0,server=1,queues=1 -- -i --rxq=1 --txq=1 --no-numa step3: at the virtio-user side, run "start" step4: at the vhost-user side, run "start tx_first 40000" Then you can get the numbers by running "show port stats all" at both sides. Vhost-user restarts (quit and startup again)and can reconnect virtio-user successfully again and continue communications. Changes in V4: 1. Don't create new pthread any more and use librte_eal interrupt thread. 2. virtio-user doesn't work in blocking mode any more for the first connection. Client mode vhost-user startups firstly, then server mode creates socket file and startups. Keep consistency with client mode virtio-user. Changes in V3: 1. use EAL epoll mechanism instead of vhost events. Cancel to export vhost event APIs. 2. rebase the code on top of dpdk-next-virtio Changes in V2: 1. split two patches 1/5 and 2/5 from v1 patchset to fix some existing issues which is not strongly related to support for server mode 2. move fdset related functions to librte_eal from librte_vhost exposed as new APIs. 3. release note is added in the patch 5/5. 4. squash data structure change patch into 4/5 according to Maxime's suggestion. Zhiyong Yang (1): net/virtio-user: add support for server mode doc/guides/rel_notes/release_18_05.rst | 6 ++ drivers/net/virtio/virtio_user/vhost_user.c | 64 ++++++++++++-- drivers/net/virtio/virtio_user/virtio_user_dev.c | 45 +++++++--- drivers/net/virtio/virtio_user/virtio_user_dev.h | 4 + drivers/net/virtio/virtio_user_ethdev.c | 103 +++++++++++++++++++++-- 5 files changed, 194 insertions(+), 28 deletions(-) -- 2.14.3