From patchwork Thu Mar 3 11:59:08 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sergio Lopez Pascual X-Patchwork-Id: 12767387 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 8D2AAC433F5 for ; Thu, 3 Mar 2022 12:00:17 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231899AbiCCMBA (ORCPT ); Thu, 3 Mar 2022 07:01:00 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46588 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231488AbiCCMA6 (ORCPT ); Thu, 3 Mar 2022 07:00:58 -0500 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 85B8D16C4F8 for ; Thu, 3 Mar 2022 04:00:13 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1646308812; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=KdMdqEWeBP2boGVGfeEr3E5hnozpl+T46v4UlfqVOqc=; b=GZ8BhupHxleeNJFsCOb2vMRqIhhw3t9E4ZdOrbbmdm/+xomb2dSPWUmIlNd+Kw93QWYznl sQl2Uqh90tFa+f/2FNMLHK8V1HaRLbRM8ozLQQWfGZwmRB3dk+IXn+TXsc6bTGCGwrBB8g 8AJ9z/iDCdZjB2VoS+TxpVpGr8xxDnM= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-32-_3OU1C2pOTmZ7s9ykW7b-g-1; Thu, 03 Mar 2022 07:00:09 -0500 X-MC-Unique: _3OU1C2pOTmZ7s9ykW7b-g-1 Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 6F895801DDB; Thu, 3 Mar 2022 12:00:07 +0000 (UTC) Received: from toolbox.redhat.com (unknown [10.33.37.20]) by smtp.corp.redhat.com (Postfix) with ESMTP id 97A3A842CC; Thu, 3 Mar 2022 12:00:02 +0000 (UTC) From: Sergio Lopez To: qemu-devel@nongnu.org Cc: Christian Borntraeger , Alex Williamson , Cornelia Huck , Thomas Huth , Paolo Bonzini , Stefan Hajnoczi , "Michael S. Tsirkin" , David Hildenbrand , Elena Ufimtseva , kvm@vger.kernel.org, Halil Pasic , Fam Zheng , John G Johnson , Richard Henderson , Matthew Rosato , Hanna Reitz , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , qemu-s390x@nongnu.org, vgoyal@redhat.com, Jagannathan Raman , Kevin Wolf , qemu-block@nongnu.org, Eric Farman , Sergio Lopez Subject: [PATCH v3 1/4] event_notifier: add event_notifier_get_wfd() Date: Thu, 3 Mar 2022 12:59:08 +0100 Message-Id: <20220303115911.20962-2-slp@redhat.com> In-Reply-To: <20220303115911.20962-1-slp@redhat.com> References: <20220303115911.20962-1-slp@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org event_notifier_get_fd(const EventNotifier *e) always returns EventNotifier's read file descriptor (rfd). This is not a problem when the EventNotifier is backed by a an eventfd, as a single file descriptor is used both for reading and triggering events (rfd == wfd). But, when EventNotifier is backed by a pipe pair, we have two file descriptors, one that can only be used for reads (rfd), and the other only for writes (wfd). There's, at least, one known situation in which we need to obtain wfd instead of rfd, which is when setting up the file that's going to be sent to the peer in vhost's SET_VRING_CALL. Add a new event_notifier_get_wfd(const EventNotifier *e) that can be used to obtain wfd where needed. Signed-off-by: Sergio Lopez --- include/qemu/event_notifier.h | 1 + util/event_notifier-posix.c | 5 +++++ 2 files changed, 6 insertions(+) diff --git a/include/qemu/event_notifier.h b/include/qemu/event_notifier.h index b79add035d..8a4ff308e1 100644 --- a/include/qemu/event_notifier.h +++ b/include/qemu/event_notifier.h @@ -38,6 +38,7 @@ int event_notifier_test_and_clear(EventNotifier *); #ifdef CONFIG_POSIX void event_notifier_init_fd(EventNotifier *, int fd); int event_notifier_get_fd(const EventNotifier *); +int event_notifier_get_wfd(const EventNotifier *); #else HANDLE event_notifier_get_handle(EventNotifier *); #endif diff --git a/util/event_notifier-posix.c b/util/event_notifier-posix.c index 8307013c5d..16294e98d4 100644 --- a/util/event_notifier-posix.c +++ b/util/event_notifier-posix.c @@ -99,6 +99,11 @@ int event_notifier_get_fd(const EventNotifier *e) return e->rfd; } +int event_notifier_get_wfd(const EventNotifier *e) +{ + return e->wfd; +} + int event_notifier_set(EventNotifier *e) { static const uint64_t value = 1; From patchwork Thu Mar 3 11:59:09 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sergio Lopez Pascual X-Patchwork-Id: 12767388 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id AF047C433F5 for ; Thu, 3 Mar 2022 12:00:21 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232021AbiCCMBE (ORCPT ); Thu, 3 Mar 2022 07:01:04 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:46936 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231488AbiCCMBC (ORCPT ); Thu, 3 Mar 2022 07:01:02 -0500 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id B920316EAB8 for ; Thu, 3 Mar 2022 04:00:16 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1646308815; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=efzJa6/W9diGcwuLPP5Fb7/4uwCddpKtVjz83/Ys+RU=; b=U485DyfOOO0Lw6lKypm8oyImjySGyeiPwMFGKp1aslTn8Yl8X0eD1fukHZYFZqNJc7AOqn ZdMrgYSb4+pRysODuz4rGaEt4vgVHOa1a1IYWvVW8uPofWMOa6ArbdXCdAzEiNyiVF/M5N H18i0Chy9Ay0ubIu9Qr8nO4j6UQ179M= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-211-3W1kVpZMPwuJ_4tjpoIfAA-1; Thu, 03 Mar 2022 07:00:14 -0500 X-MC-Unique: 3W1kVpZMPwuJ_4tjpoIfAA-1 Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 9D791180FD72; Thu, 3 Mar 2022 12:00:12 +0000 (UTC) Received: from toolbox.redhat.com (unknown [10.33.37.20]) by smtp.corp.redhat.com (Postfix) with ESMTP id C2A4C842CC; Thu, 3 Mar 2022 12:00:07 +0000 (UTC) From: Sergio Lopez To: qemu-devel@nongnu.org Cc: Christian Borntraeger , Alex Williamson , Cornelia Huck , Thomas Huth , Paolo Bonzini , Stefan Hajnoczi , "Michael S. Tsirkin" , David Hildenbrand , Elena Ufimtseva , kvm@vger.kernel.org, Halil Pasic , Fam Zheng , John G Johnson , Richard Henderson , Matthew Rosato , Hanna Reitz , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , qemu-s390x@nongnu.org, vgoyal@redhat.com, Jagannathan Raman , Kevin Wolf , qemu-block@nongnu.org, Eric Farman , Sergio Lopez Subject: [PATCH v3 2/4] vhost: use wfd on functions setting vring call fd Date: Thu, 3 Mar 2022 12:59:09 +0100 Message-Id: <20220303115911.20962-3-slp@redhat.com> In-Reply-To: <20220303115911.20962-1-slp@redhat.com> References: <20220303115911.20962-1-slp@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org When ioeventfd is emulated using qemu_pipe(), only EventNotifier's wfd can be used for writing. Use the recently introduced event_notifier_get_wfd() function to obtain the fd that our peer must use to signal the vring. Signed-off-by: Sergio Lopez --- hw/virtio/vhost.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/hw/virtio/vhost.c b/hw/virtio/vhost.c index 7b03efccec..b643f42ea4 100644 --- a/hw/virtio/vhost.c +++ b/hw/virtio/vhost.c @@ -1287,7 +1287,7 @@ static int vhost_virtqueue_init(struct vhost_dev *dev, return r; } - file.fd = event_notifier_get_fd(&vq->masked_notifier); + file.fd = event_notifier_get_wfd(&vq->masked_notifier); r = dev->vhost_ops->vhost_set_vring_call(dev, &file); if (r) { VHOST_OPS_DEBUG(r, "vhost_set_vring_call failed"); @@ -1542,9 +1542,9 @@ void vhost_virtqueue_mask(struct vhost_dev *hdev, VirtIODevice *vdev, int n, if (mask) { assert(vdev->use_guest_notifier_mask); - file.fd = event_notifier_get_fd(&hdev->vqs[index].masked_notifier); + file.fd = event_notifier_get_wfd(&hdev->vqs[index].masked_notifier); } else { - file.fd = event_notifier_get_fd(virtio_queue_get_guest_notifier(vvq)); + file.fd = event_notifier_get_wfd(virtio_queue_get_guest_notifier(vvq)); } file.index = hdev->vhost_ops->vhost_get_vq_index(hdev, n); From patchwork Thu Mar 3 11:59:10 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sergio Lopez Pascual X-Patchwork-Id: 12767389 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 5F464C433F5 for ; Thu, 3 Mar 2022 12:00:31 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232903AbiCCMBO (ORCPT ); Thu, 3 Mar 2022 07:01:14 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47586 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232691AbiCCMBJ (ORCPT ); Thu, 3 Mar 2022 07:01:09 -0500 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 6A03316FDE9 for ; Thu, 3 Mar 2022 04:00:24 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1646308823; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=GU2PkYv/oO0WBN6akEtPQqLOjiJQ79hZYXxHxM/rB9g=; b=Z3vDCWnv18peahKMKJz4D7qb+Yazko2rBabvod6L2EzDE9FuwiYyMaoxdQswnWl0RQEK6g UpjyfAFC+MZ3xa9MqAQFcEvU1oDe+XBSrWqJLxHvv4UN3CwErfXyfve5d9MuNhwT/XgQwA yh48wGFGgqdNjSGdvYfL+pJRyiGvUIU= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-601-ws9u5eVDPgS5WbHEubGu6g-1; Thu, 03 Mar 2022 07:00:19 -0500 X-MC-Unique: ws9u5eVDPgS5WbHEubGu6g-1 Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id C917F824FA6; Thu, 3 Mar 2022 12:00:17 +0000 (UTC) Received: from toolbox.redhat.com (unknown [10.33.37.20]) by smtp.corp.redhat.com (Postfix) with ESMTP id 00CBE842CC; Thu, 3 Mar 2022 12:00:12 +0000 (UTC) From: Sergio Lopez To: qemu-devel@nongnu.org Cc: Christian Borntraeger , Alex Williamson , Cornelia Huck , Thomas Huth , Paolo Bonzini , Stefan Hajnoczi , "Michael S. Tsirkin" , David Hildenbrand , Elena Ufimtseva , kvm@vger.kernel.org, Halil Pasic , Fam Zheng , John G Johnson , Richard Henderson , Matthew Rosato , Hanna Reitz , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , qemu-s390x@nongnu.org, vgoyal@redhat.com, Jagannathan Raman , Kevin Wolf , qemu-block@nongnu.org, Eric Farman , Sergio Lopez Subject: [PATCH v3 3/4] configure, meson: allow enabling vhost-user on all POSIX systems Date: Thu, 3 Mar 2022 12:59:10 +0100 Message-Id: <20220303115911.20962-4-slp@redhat.com> In-Reply-To: <20220303115911.20962-1-slp@redhat.com> References: <20220303115911.20962-1-slp@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org With the possibility of using a pipe pair via qemu_pipe() as a replacement on operating systems that doesn't support eventfd, vhost-user can also work on all POSIX systems. This change allows enabling vhost-user on all non-Windows platforms and makes libvhost_user (which still depends on eventfd) a linux-only feature. Signed-off-by: Sergio Lopez --- configure | 4 ++-- meson.build | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/configure b/configure index c56ed53ee3..daccf4be7c 100755 --- a/configure +++ b/configure @@ -1659,8 +1659,8 @@ fi # vhost interdependencies and host support # vhost backends -if test "$vhost_user" = "yes" && test "$linux" != "yes"; then - error_exit "vhost-user is only available on Linux" +if test "$vhost_user" = "yes" && test "$mingw32" = "yes"; then + error_exit "vhost-user is not available on Windows" fi test "$vhost_vdpa" = "" && vhost_vdpa=$linux if test "$vhost_vdpa" = "yes" && test "$linux" != "yes"; then diff --git a/meson.build b/meson.build index 8df40bfac4..f2bc439c30 100644 --- a/meson.build +++ b/meson.build @@ -2701,7 +2701,7 @@ if have_system or have_user endif vhost_user = not_found -if 'CONFIG_VHOST_USER' in config_host +if targetos == 'linux' and 'CONFIG_VHOST_USER' in config_host libvhost_user = subproject('libvhost-user') vhost_user = libvhost_user.get_variable('vhost_user_dep') endif From patchwork Thu Mar 3 11:59:11 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sergio Lopez Pascual X-Patchwork-Id: 12767390 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 9CEAAC433F5 for ; Thu, 3 Mar 2022 12:00:33 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232917AbiCCMBR (ORCPT ); Thu, 3 Mar 2022 07:01:17 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47938 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232246AbiCCMBO (ORCPT ); Thu, 3 Mar 2022 07:01:14 -0500 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 9162F16FDDF for ; Thu, 3 Mar 2022 04:00:28 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1646308828; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=SChHcwg/89XMGoVWOn4WPsullesTZfsuoF5vcE1hxbw=; b=QxA6kedIPZQN3bFZTC5ucHtK0xDzM24Al4i61nunqWBDdyQzhPGM4o0Edx1xJAHPOEQx0x Ep9gg+NzPE097tunHb4vOI/xbWNGfLGCONuH4eIYcVp8MtwZMlpb+ZbUAqWzMUoX2M8ZQq ti/4SS1dblWVGL+vrDr/lCRDoB/gcC4= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-610-XBLt5vFsMViTWgAkHsQfNw-1; Thu, 03 Mar 2022 07:00:25 -0500 X-MC-Unique: XBLt5vFsMViTWgAkHsQfNw-1 Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id F344D801AAD; Thu, 3 Mar 2022 12:00:22 +0000 (UTC) Received: from toolbox.redhat.com (unknown [10.33.37.20]) by smtp.corp.redhat.com (Postfix) with ESMTP id 2C688842CC; Thu, 3 Mar 2022 12:00:18 +0000 (UTC) From: Sergio Lopez To: qemu-devel@nongnu.org Cc: Christian Borntraeger , Alex Williamson , Cornelia Huck , Thomas Huth , Paolo Bonzini , Stefan Hajnoczi , "Michael S. Tsirkin" , David Hildenbrand , Elena Ufimtseva , kvm@vger.kernel.org, Halil Pasic , Fam Zheng , John G Johnson , Richard Henderson , Matthew Rosato , Hanna Reitz , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , qemu-s390x@nongnu.org, vgoyal@redhat.com, Jagannathan Raman , Kevin Wolf , qemu-block@nongnu.org, Eric Farman , Sergio Lopez Subject: [PATCH v3 4/4] docs: vhost-user: add subsection for non-Linux platforms Date: Thu, 3 Mar 2022 12:59:11 +0100 Message-Id: <20220303115911.20962-5-slp@redhat.com> In-Reply-To: <20220303115911.20962-1-slp@redhat.com> References: <20220303115911.20962-1-slp@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org Add a section explaining how vhost-user is supported on platforms other than Linux. Signed-off-by: Sergio Lopez --- docs/interop/vhost-user.rst | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/docs/interop/vhost-user.rst b/docs/interop/vhost-user.rst index edc3ad84a3..590a626b92 100644 --- a/docs/interop/vhost-user.rst +++ b/docs/interop/vhost-user.rst @@ -38,6 +38,24 @@ conventions `. *Master* and *slave* can be either a client (i.e. connecting) or server (listening) in the socket communication. +Support for platforms other than Linux +-------------------------------------- + +While vhost-user was initially developed targeting Linux, nowadays is +supported on any platform that provides the following features: + +- The ability to share a mapping injected into the guest between + multiple processes, so both QEMU and the vhost-user daemon servicing + the device can access simultaneously the memory regions containing + the virtqueues and the data associated with each request. + +- AF_UNIX sockets with SCM_RIGHTS, so QEMU can communicate with the + vhost-user daemon and send it file descriptors when needed. + +- Either eventfd or pipe/pipe2. On platforms where eventfd is not + available, QEMU will automatically fallback to pipe2 or, as a last + resort, pipe. + Message Specification =====================