From nobody Thu Dec 18 22:28:25 2025 Delivered-To: importer@patchew.org Received-SPF: none (zohomail.com: 8.43.85.245 is neither permitted nor denied by domain of lists.libvirt.org) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; spf=none (zohomail.com: 8.43.85.245 is neither permitted nor denied by domain of lists.libvirt.org) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=fail(p=reject dis=none) header.from=linux.ibm.com Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1708608450939929.8155715390427; Thu, 22 Feb 2024 05:27:30 -0800 (PST) Received: by lists.libvirt.org (Postfix, from userid 996) id 97EC21E4A; Thu, 22 Feb 2024 08:27:29 -0500 (EST) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id D8C5D1D94; Thu, 22 Feb 2024 08:04:13 -0500 (EST) Received: by lists.libvirt.org (Postfix, from userid 996) id F1C851A67; Thu, 22 Feb 2024 08:03:45 -0500 (EST) Received: from mx0b-001b2d01.pphosted.com (mx0b-001b2d01.pphosted.com [148.163.158.5]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id AFC9A1D70 for ; Thu, 22 Feb 2024 08:02:39 -0500 (EST) Received: from pps.filterd (m0353723.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 41MCc7Hn019089 for ; Thu, 22 Feb 2024 13:02:39 GMT Received: from pps.reinject (localhost [127.0.0.1]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 3we6eqrhn1-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT) for ; Thu, 22 Feb 2024 13:02:38 +0000 Received: from m0353723.ppops.net (m0353723.ppops.net [127.0.0.1]) by pps.reinject (8.17.1.5/8.17.1.5) with ESMTP id 41MCpVLH031382 for ; Thu, 22 Feb 2024 13:02:32 GMT Received: from ppma11.dal12v.mail.ibm.com (db.9e.1632.ip4.static.sl-reverse.com [50.22.158.219]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 3we6eqrhas-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 22 Feb 2024 13:02:32 +0000 Received: from pps.filterd (ppma11.dal12v.mail.ibm.com [127.0.0.1]) by ppma11.dal12v.mail.ibm.com (8.17.1.19/8.17.1.19) with ESMTP id 41MAaUTK014427; Thu, 22 Feb 2024 13:02:17 GMT Received: from smtprelay05.fra02v.mail.ibm.com ([9.218.2.225]) by ppma11.dal12v.mail.ibm.com (PPS) with ESMTPS id 3wb9u2wqhq-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 22 Feb 2024 13:02:17 +0000 Received: from smtpav01.fra02v.mail.ibm.com (smtpav01.fra02v.mail.ibm.com [10.20.54.100]) by smtprelay05.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 41MD2CFP20906746 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 22 Feb 2024 13:02:14 GMT Received: from smtpav01.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 06BD420043; Thu, 22 Feb 2024 13:02:12 +0000 (GMT) Received: from smtpav01.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id D51F020073; Thu, 22 Feb 2024 13:02:11 +0000 (GMT) Received: from fiuczyvm.. (unknown [9.171.135.123]) by smtpav01.fra02v.mail.ibm.com (Postfix) with ESMTP; Thu, 22 Feb 2024 13:02:11 +0000 (GMT) X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-0.8 required=5.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,RCVD_IN_MSPIKE_H3,RCVD_IN_MSPIKE_WL,SPF_HELO_NONE, T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.4 From: Boris Fiuczynski To: devel@lists.libvirt.org Subject: [PATCH v5 11/12] virsh: add nodedev-update Date: Thu, 22 Feb 2024 14:02:08 +0100 Message-ID: <20240222130209.8316-12-fiuczy@linux.ibm.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240222130209.8316-1-fiuczy@linux.ibm.com> References: <20240222130209.8316-1-fiuczy@linux.ibm.com> X-TM-AS-GCONF: 00 X-Proofpoint-ORIG-GUID: sLEFunM_pnz-oJBNWjSJOgmAQfvM3mFq X-Proofpoint-GUID: GA8yRyQYHOBgu2RqSnlYhSV-UF8VNAln X-Proofpoint-UnRewURL: 0 URL was un-rewritten MIME-Version: 1.0 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.272,Aquarius:18.0.1011,Hydra:6.0.619,FMLib:17.11.176.26 definitions=2024-02-22_10,2024-02-22_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1015 mlxscore=0 suspectscore=0 spamscore=0 lowpriorityscore=0 bulkscore=0 mlxlogscore=999 adultscore=0 phishscore=0 priorityscore=1501 malwarescore=0 impostorscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2311290000 definitions=main-2402220104 Message-ID-Hash: PLPLEW67NAMRFGK2MECNBABLWONOTHM4 X-Message-ID-Hash: PLPLEW67NAMRFGK2MECNBABLWONOTHM4 X-MailFrom: fiuczy@linux.ibm.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-config-1; header-match-config-2; header-match-config-3; header-match-devel.lists.libvirt.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; suspicious-header CC: jjongsma@redhat.com, mhartmay@linux.ibm.com X-Mailman-Version: 3.2.2 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ZM-MESSAGEID: 1708608452662100001 Add ability to update node devices. Signed-off-by: Boris Fiuczynski --- docs/drvnodedev.rst | 4 +- docs/manpages/virsh.rst | 19 ++++++++ tools/virsh-nodedev.c | 98 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 120 insertions(+), 1 deletion(-) diff --git a/docs/drvnodedev.rst b/docs/drvnodedev.rst index 115d52ca02..b455fa67a4 100644 --- a/docs/drvnodedev.rst +++ b/docs/drvnodedev.rst @@ -23,7 +23,8 @@ NPIV) `__). Persistent virtual devices are managed with ``virsh nodedev-define`` and ``virsh nodedev-undefine``. Persistent devices can be configured to start manually or automatically using ``virsh nodedev-autostart``. Inactive devi= ces -can be made active with ``virsh nodedev-start``. +can be made active with ``virsh nodedev-start``. ``virsh nodedev-update`` +allows to modify devices (:since:`Since 10.1.0`). =20 Transient virtual devices are started and stopped with the commands ``virsh nodedev-create`` and ``virsh nodedev-destroy``. @@ -278,6 +279,7 @@ covers the following features: - display device details ( :since:`Since 3.4.0` ) - create transient mediated devices ( :since:`Since 6.5.0` ) - define persistent mediated devices ( :since:`Since 7.3.0` ) +- update mediated devices ( :since:`Since 10.1.0` ) =20 Because mediated devices are instantiated from vendor specific templates, = simply called 'types', information describing these types is contained within the diff --git a/docs/manpages/virsh.rst b/docs/manpages/virsh.rst index bc0ad6542b..8224aec8c3 100644 --- a/docs/manpages/virsh.rst +++ b/docs/manpages/virsh.rst @@ -5331,6 +5331,25 @@ If *--validate* is specified, validates the format o= f the XML document against an internal RNG schema. =20 =20 +nodedev-update +-------------- + +**Syntax:** + +:: + + nodedev-update device FILE [[--live] [--config] | [--current]] + +Update a device on the host. *device* can be either device name or wwn pair +in "wwnn,wwpn" format (only works for vHBA currently). *file* +contains xml for a top-level description of the node device. +*--current* can be either or both of *live* and *config*, depends on +the hypervisor's implementation. +Both *--live* and *--config* flags may be given, but *--current* is +exclusive. If no flag is specified, behavior is different depending +on hypervisor. + + nodedev-destroy --------------- =20 diff --git a/tools/virsh-nodedev.c b/tools/virsh-nodedev.c index 5942c43689..7b80747819 100644 --- a/tools/virsh-nodedev.c +++ b/tools/virsh-nodedev.c @@ -1299,6 +1299,98 @@ cmdNodeDeviceInfo(vshControl *ctl, const vshCmd *cmd) } =20 =20 +/* + * "nodedev-update" command + */ +static const vshCmdInfo info_node_device_update[] =3D { + {.name =3D "help", + .data =3D N_("Update a active and/or inactive node device") + }, + {.name =3D "desc", + .data =3D N_("Updates the configuration of a node device") + }, + {.name =3D NULL} +}; + +static const vshCmdOptDef opts_node_device_update[] =3D { + {.name =3D "device", + .type =3D VSH_OT_DATA, + .flags =3D VSH_OFLAG_REQ, + .help =3D N_("device name or wwn pair in 'wwnn,wwpn' format"), + .completer =3D virshNodeDeviceNameCompleter, + }, + VIRSH_COMMON_OPT_FILE(N_("file containing an XML description " + "of the device")), + VIRSH_COMMON_OPT_CONFIG(N_("affect next node device startup")), + VIRSH_COMMON_OPT_LIVE(N_("affect running node device")), + VIRSH_COMMON_OPT_CURRENT(N_("affect current state of node device")), + {.name =3D NULL} +}; + +static bool +cmdNodeDeviceUpdate(vshControl *ctl, const vshCmd *cmd) +{ + bool ret =3D false; + g_autoptr(virshNodeDevice) device =3D NULL; + const char *device_value =3D NULL; + const char *from =3D NULL; + g_autofree char *xml =3D NULL; + bool config =3D vshCommandOptBool(cmd, "config"); + bool live =3D vshCommandOptBool(cmd, "live"); + unsigned int flags =3D VIR_NODE_DEVICE_UPDATE_AFFECT_CURRENT; + + VSH_EXCLUSIVE_OPTIONS("current", "live"); + VSH_EXCLUSIVE_OPTIONS("current", "config"); + + if (vshCommandOptStringReq(ctl, cmd, "device", &device_value) < 0) + return false; + + device =3D vshFindNodeDevice(ctl, device_value); + + if (!device) + return false; + + if (vshCommandOptStringReq(ctl, cmd, "file", &from) < 0) + goto cleanup; + + if (virFileReadAll(from, VSH_MAX_XML_FILE, &xml) < 0) + goto cleanup; + + if (config) + flags |=3D VIR_NODE_DEVICE_UPDATE_AFFECT_CONFIG; + if (live) + flags |=3D VIR_NODE_DEVICE_UPDATE_AFFECT_LIVE; + + if (virNodeDeviceUpdate(device, xml, flags) < 0) { + vshError(ctl, _("Failed to update node device %1$s from '%2$s'"), + virNodeDeviceGetName(device), from); + goto cleanup; + } + + if (config) { + if (live) + vshPrintExtra(ctl, _("Updated node device %1$s persistent conf= ig and live state"), + virNodeDeviceGetName(device)); + else + vshPrintExtra(ctl, _("Updated node device %1$s persistent conf= ig"), + virNodeDeviceGetName(device)); + } else if (live) { + vshPrintExtra(ctl, _("Updated node device %1$s live state"), + virNodeDeviceGetName(device)); + } else if (virNodeDeviceIsActive(device)) { + vshPrintExtra(ctl, _("Updated node device %1$s live state"), + virNodeDeviceGetName(device)); + } else { + vshPrintExtra(ctl, _("Updated node device %1$s persistent config"), + virNodeDeviceGetName(device)); + } + + ret =3D true; + cleanup: + vshReportError(ctl); + return ret; +} + =20 const vshCmdDef nodedevCmds[] =3D { {.name =3D "nodedev-create", @@ -1383,5 +1475,11 @@ const vshCmdDef nodedevCmds[] =3D { .info =3D info_node_device_info, .flags =3D 0 }, + {.name =3D "nodedev-update", + .handler =3D cmdNodeDeviceUpdate, + .opts =3D opts_node_device_update, + .info =3D info_node_device_update, + .flags =3D 0 + }, {.name =3D NULL} }; --=20 2.42.0 _______________________________________________ Devel mailing list -- devel@lists.libvirt.org To unsubscribe send an email to devel-leave@lists.libvirt.org