From nobody Sun May 19 00:17:11 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=redhat.com Return-Path: Received: from lists.gnu.org (208.118.235.17 [208.118.235.17]) by mx.zohomail.com with SMTPS id 1538589413352985.5111188167673; Wed, 3 Oct 2018 10:56:53 -0700 (PDT) Received: from localhost ([::1]:51468 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1g7lO4-0004ir-T8 for importer@patchew.org; Wed, 03 Oct 2018 13:56:40 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:50171) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1g7lN7-0003bN-GR for qemu-devel@nongnu.org; Wed, 03 Oct 2018 13:55:43 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1g7lN6-0004Rj-Hx for qemu-devel@nongnu.org; Wed, 03 Oct 2018 13:55:41 -0400 Received: from mx1.redhat.com ([209.132.183.28]:46676) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1g7lN0-0004OZ-Ga; Wed, 03 Oct 2018 13:55:34 -0400 Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 756A4308FBA3; Wed, 3 Oct 2018 17:55:33 +0000 (UTC) Received: from red.redhat.com (ovpn-126-73.rdu2.redhat.com [10.10.126.73]) by smtp.corp.redhat.com (Postfix) with ESMTP id 2C4F8106225A; Wed, 3 Oct 2018 17:55:27 +0000 (UTC) From: Eric Blake To: qemu-devel@nongnu.org Date: Wed, 3 Oct 2018 12:55:24 -0500 Message-Id: <20181003175524.597407-1-eblake@redhat.com> X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.43]); Wed, 03 Oct 2018 17:55:33 +0000 (UTC) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [PATCH v2] nbd: Flip qemu-nbd to prefer newstyle; add -O for old behavior X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Paolo Bonzini , vsementsov@virtuozzo.com, rjones@redhat.com, "open list:Network Block Dev..." Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RDMRC_1 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Oldstyle NBD negotiation cannot perform any of the extensions that we have recently been relying on. While you can always pass -x "" to get newstyle negotiation, these days, it is better to just default to newstyle (with an empty export name) and fall back to oldstyle only on an explicit request. qemu as client can manage either style since 2.6.0, commit 69b49502d8 For comparison: nbdkit 1.3 switched its default to newstyle (Jan 2018): https://github.com/libguestfs/nbdkit/commit/b2a8aecc https://github.com/libguestfs/nbdkit/commit/8158e773 nbd 3.10 dropped oldstyle long ago (Mar 2015): https://github.com/NetworkBlockDevice/nbd/commit/36940193 Signed-off-by: Eric Blake Reviewed-by: Vladimir Sementsov-Ogievskiy Reviewed-by: Vladimir Sementsov-Ogievskiy --- v2: improve 'qemu-nbd --help', drop redundant variable 'newproto' --- qemu-nbd.c | 37 +++++++++++++++++++++++-------------- 1 file changed, 23 insertions(+), 14 deletions(-) diff --git a/qemu-nbd.c b/qemu-nbd.c index 51b9d38c727..e35c97e7ca4 100644 --- a/qemu-nbd.c +++ b/qemu-nbd.c @@ -56,7 +56,7 @@ #define MBR_SIZE 512 static NBDExport *exp; -static bool newproto; +static bool oldstyle; static int verbose; static char *srcpath; static SocketAddress *saddr; @@ -84,8 +84,9 @@ static void usage(const char *name) " -e, --shared=3DNUM device can be shared by NUM clients (defaul= t '1')\n" " -t, --persistent don't exit on the last connection\n" " -v, --verbose display extra debugging information\n" -" -x, --export-name=3DNAME expose export by name\n" -" -D, --description=3DTEXT with -x, also export a human-readable descr= iption\n" +" -x, --export-name=3DNAME expose export by name (default "")\n" +" -D, --description=3DTEXT expose a human-readable description of expo= rt\n" +" -O, --oldstyle force oldstyle (not with -x, -D, or --tls-cre= ds)\n" "\n" "Exposing part of the image:\n" " -o, --offset=3DOFFSET offset into the image\n" @@ -354,7 +355,7 @@ static void nbd_accept(QIONetListener *listener, QIOCha= nnelSocket *cioc, nb_fds++; nbd_update_server_watch(); - nbd_client_new(newproto ? NULL : exp, cioc, + nbd_client_new(oldstyle ? exp : NULL, cioc, tlscreds, NULL, nbd_client_closed); } @@ -502,7 +503,7 @@ int main(int argc, char **argv) off_t fd_size; QemuOpts *sn_opts =3D NULL; const char *sn_id_or_name =3D NULL; - const char *sopt =3D "hVb:o:p:rsnP:c:dvk:e:f:tl:x:T:D:"; + const char *sopt =3D "hVb:o:p:rsnP:c:dvk:e:f:tl:x:T:D:O"; struct option lopt[] =3D { { "help", no_argument, NULL, 'h' }, { "version", no_argument, NULL, 'V' }, @@ -529,6 +530,7 @@ int main(int argc, char **argv) { "object", required_argument, NULL, QEMU_NBD_OPT_OBJECT }, { "export-name", required_argument, NULL, 'x' }, { "description", required_argument, NULL, 'D' }, + { "oldstyle", no_argument, NULL, 'O' }, { "tls-creds", required_argument, NULL, QEMU_NBD_OPT_TLSCREDS }, { "image-opts", no_argument, NULL, QEMU_NBD_OPT_IMAGE_OPTS }, { "trace", required_argument, NULL, 'T' }, @@ -723,6 +725,9 @@ int main(int argc, char **argv) case 'D': export_description =3D optarg; break; + case 'O': + oldstyle =3D true; + break; case 'v': verbose =3D 1; break; @@ -799,7 +804,16 @@ int main(int argc, char **argv) } } + if (!oldstyle && !export_name) { + /* Set the default NBD protocol export name, to favor new style. */ + export_name =3D ""; + } + if (tlscredsid) { + if (oldstyle) { + error_report("TLS is incompatible with oldstyle"); + exit(EXIT_FAILURE); + } if (sockpath) { error_report("TLS is only supported with IPv4/IPv6"); exit(EXIT_FAILURE); @@ -808,11 +822,6 @@ int main(int argc, char **argv) error_report("TLS is not supported with a host device"); exit(EXIT_FAILURE); } - if (!export_name) { - /* Set the default NBD protocol export name, since - * we *must* use new style protocol for TLS */ - export_name =3D ""; - } tlscreds =3D nbd_get_tls_creds(tlscredsid, &local_err); if (local_err) { error_report("Failed to get TLS creds %s", @@ -1013,13 +1022,13 @@ int main(int argc, char **argv) error_report_err(local_err); exit(EXIT_FAILURE); } + if (oldstyle && (export_name || export_description)) { + error_report("oldstyle negotiation cannot set export details"); + exit(EXIT_FAILURE); + } if (export_name) { nbd_export_set_name(exp, export_name); nbd_export_set_description(exp, export_description); - newproto =3D true; - } else if (export_description) { - error_report("Export description requires an export name"); - exit(EXIT_FAILURE); } if (device) { --=20 2.17.1