From nobody Mon Feb 9 00:54:06 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 63.128.21.124 as permitted sender) client-ip=63.128.21.124; envelope-from=libvir-list-bounces@redhat.com; helo=us-smtp-delivery-124.mimecast.com; Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of redhat.com designates 63.128.21.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=fail(p=none dis=none) header.from=suse.com ARC-Seal: i=1; a=rsa-sha256; t=1605001911; cv=none; d=zohomail.com; s=zohoarc; b=PipAoY9ZmvR2dt1ahTXPFRWaj/kxOL6ndrPONAjYQLEEp285yI9qQISsEaQilUvz1pcIkV/EmaCXf6J92MpLK6j43x5VGIGJC8O2Ekkj1iUfxvQsSbJyEeL7XHsUVW0b1yUI9tQdRoiL3dWBrKGnoPlh9dS7WNdM8kcQ7TNjNLA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1605001911; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=Dd5iRBSB7nKYYIYyXv+fJ2Tfq2HTJKpdKUXCrBXQAKc=; b=NzK5+lwih9semV3wcTPvaZQyWb2rzD8wh/Spj2+4LNoyNlOo2bjeV2+aHnQxuCQHhIJvVXBHaPNxGg361CD5M8Lj1hdjlxHC89ldxN1VbhpiqvjPfm6CZVb1PWYvhPD+cbgDSuFqdMOguqkzBMHVZ6jk5xqHzHv138jBgZI+Usw= ARC-Authentication-Results: i=1; mx.zohomail.com; spf=pass (zohomail.com: domain of redhat.com designates 63.128.21.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [63.128.21.124]) by mx.zohomail.com with SMTPS id 1605001911910272.98055365569826; Tue, 10 Nov 2020 01:51:51 -0800 (PST) Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-52-I0V2ixB6OiqntqyywAiOlg-1; Tue, 10 Nov 2020 04:51:47 -0500 Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 3785A107AFDF; Tue, 10 Nov 2020 09:51:42 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 00E1B5DA6A; Tue, 10 Nov 2020 09:51:41 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 4DDD31800B72; Tue, 10 Nov 2020 09:51:40 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.rdu2.redhat.com [10.11.54.6]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id 0AA9pd1u006572 for ; Tue, 10 Nov 2020 04:51:39 -0500 Received: by smtp.corp.redhat.com (Postfix) id 29BDC2156A3A; Tue, 10 Nov 2020 09:51:39 +0000 (UTC) Received: from mimecast-mx02.redhat.com (mimecast02.extmail.prod.ext.rdu2.redhat.com [10.11.55.18]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 238AD2156A36 for ; Tue, 10 Nov 2020 09:51:39 +0000 (UTC) Received: from us-smtp-1.mimecast.com (us-smtp-delivery-1.mimecast.com [205.139.110.120]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 03D538007D9 for ; Tue, 10 Nov 2020 09:51:39 +0000 (UTC) Received: from de-smtp-delivery-52.mimecast.com (de-smtp-delivery-52.mimecast.com [51.163.158.52]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-48-2Qu3G60qP66zXuSKz00kkg-1; Tue, 10 Nov 2020 04:51:36 -0500 Received: from EUR04-HE1-obe.outbound.protection.outlook.com (mail-he1eur04lp2055.outbound.protection.outlook.com [104.47.13.55]) (Using TLS) by relay.mimecast.com with ESMTP id de-mta-39-C3-N3QYnMhyC5BrnjW7vPw-7; Tue, 10 Nov 2020 10:51:34 +0100 Received: from AM6PR04MB5782.eurprd04.prod.outlook.com (2603:10a6:20b:aa::17) by AS8PR04MB7734.eurprd04.prod.outlook.com (2603:10a6:20b:2a6::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3541.21; Tue, 10 Nov 2020 09:51:31 +0000 Received: from AM6PR04MB5782.eurprd04.prod.outlook.com ([fe80::8945:92d8:e72a:6245]) by AM6PR04MB5782.eurprd04.prod.outlook.com ([fe80::8945:92d8:e72a:6245%6]) with mapi id 15.20.3541.025; Tue, 10 Nov 2020 09:51:31 +0000 Received: from t440p.suse.asia (60.251.47.115) by AM4P190CA0015.EURP190.PROD.OUTLOOK.COM (2603:10a6:200:56::25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3541.21 via Frontend Transport; Tue, 10 Nov 2020 09:51:29 +0000 X-MC-Unique: I0V2ixB6OiqntqyywAiOlg-1 X-MC-Unique: 2Qu3G60qP66zXuSKz00kkg-1 X-MC-Unique: C3-N3QYnMhyC5BrnjW7vPw-7 From: Lin Ma To: libvir-list@redhat.com Subject: [libvirt] [PATCH v2 03/13] virsh: Add serial/parallel device name completion to console command Date: Tue, 10 Nov 2020 17:50:54 +0800 Message-ID: <20201110095104.10783-4-lma@suse.com> In-Reply-To: <20201110095104.10783-1-lma@suse.com> References: <20201110095104.10783-1-lma@suse.com> X-Originating-IP: [60.251.47.115] X-ClientProxiedBy: AM4P190CA0015.EURP190.PROD.OUTLOOK.COM (2603:10a6:200:56::25) To AM6PR04MB5782.eurprd04.prod.outlook.com (2603:10a6:20b:aa::17) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 2f3d2b9c-4a40-492f-5a91-08d8855e3369 X-MS-TrafficTypeDiagnostic: AS8PR04MB7734: X-LD-Processed: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba,ExtFwd X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:1013 X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0 X-Microsoft-Antispam-Message-Info: CKne/2xrAE1jZCXAvuHYlo0mhi2BqtWaM9gYuQlLsE0YSkKHWf8WTod/RDqJ+pfV1hhNlxuI7KB46iPkLfXTieoihwcSZwryBDZ+W4Ql6sv8dG048AyyEqE9/8nK0zB9ARdRPwy/1BQ9z5D4w71I+lRse0jQ0XtYfq9rcMj21VnvUwDMhuHHvaUQhWBUipj4Z8lHj8bKszPe7RbcgqTYOF8yF2dII4prcNGoh9/fZk6vtsgMFGWcefzAz8pisH/a2AUgnWpmwMH/vvSPDwaItlVzkvRZB2OcKvKqGuu15j036ZAaFer+NBW8ACxTp6Hw/Q/zrBGEMCMwyTDcHwq0gg== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AM6PR04MB5782.eurprd04.prod.outlook.com; PTR:; CAT:NONE; SFS:(396003)(39860400002)(346002)(366004)(376002)(136003)(8936002)(2906002)(8676002)(66556008)(6666004)(2616005)(52116002)(107886003)(55236004)(6506007)(956004)(4326008)(6512007)(86362001)(36756003)(5660300002)(316002)(1076003)(66476007)(66946007)(478600001)(450100002)(16526019)(6916009)(26005)(186003)(6486002); DIR:OUT; SFP:1101 X-MS-Exchange-AntiSpam-MessageData: HCC/JJV8aObxrGfIRwFyfzm4ao7613kjmBbM+M5LIKgDTFEcja0VTGNwIwcuaI2fotq2G+ky0PFRQhuT+2BbfLe1lGBuUT3Mm1Q+ZjszCVwgG5d6g/ztn4YNqV7f+BPXaJBNBnb88+kPo/EbIRFFjWkhRBowvmiLsfwQxNmZjax+Nc8mh1dCQdrkUXsKnW8bEegWGA47WPv2ww1yEioSRtetzji8Z/Cti42t/vs2nHWAaeppTJsNPPyGS4WvdEtzoyUFMM2m0sFpgDaWCcS1eIZ0zIN5w45geEeD9MBKbl+EJU3S9G9Z0IlEBfOyUEeigg69AwfOp31vbit601Co2330BVGpPiHVhHO5muUM3czqGCweEiNy23YFZyI6vAz165ApClMB5znNrsr3CQPHKFTVHmOBWGOMW1Jie9yBwXLqCYuRtK1lkUKgFV190iU6qR3iTlYpGZPZ3dGA1lxMrwtF6gW1Zi1QxjqvZSmP3wUuciC34CTtrlD6CeeFpl1h4sVRO6hUkDEX9ilcUsEud7grhgMZAALRt6zP+lOknSJAs87LA+dTVIszRxMYVgMo6xaA42oQPut/w6ypQOS43Ipn/m41+2rRc3Ck5PuE50+X8OsMv9f7PPnpPlA8ZREFbu4M/liWBRzrHkJAjt+IL0zNxWGmJQs4k8jw6C6mUYgRwflR8Pg/aZCtd9sLUbiR5HpQo5FwqxZytCuPLBrTcDsh1KxgszqC26L0tNjWFSicctcHPeb7eIJ0rW0CJaIGmIV6AMOlboX7wxbbHZ9gjkbqK+FSlrGAuoGzTOXHa4FAu3sdpJYJXEyvHMnKsskIuoYETEtubHhQ4Wsbaacg5WVbq7+M29afxd9uHFFrfZSaPMYQ+QFlzqQx/WEXa5SRIAAEGjd0avvF42xR3eutmg== X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: 2f3d2b9c-4a40-492f-5a91-08d8855e3369 X-MS-Exchange-CrossTenant-AuthSource: AM6PR04MB5782.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Nov 2020 09:51:31.2665 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: UZZv4HpGo4BOxGWcl67H/pOoYMBzoFNwtBrdfBcpPOWU41DgMsZBKGtERhwxbOvp X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR04MB7734 X-Mimecast-Impersonation-Protect: Policy=CLT - Impersonation Protection Definition; Similar Internal Domain=false; Similar Monitored External Domain=false; Custom External Domain=false; Mimecast External Domain=false; Newly Observed Domain=false; Internal User Name=false; Custom Display Name List=false; Reply-to Address Mismatch=false; Targeted Threat Dictionary=false; Mimecast Threat Dictionary=false; Custom Threat Dictionary=false X-Scanned-By: MIMEDefang 2.78 on 10.11.54.6 X-MIME-Autoconverted: from quoted-printable to 8bit by lists01.pubmisc.prod.ext.phx2.redhat.com id 0AA9pd1u006572 X-loop: libvir-list@redhat.com Cc: mprivozn@redhat.com, Lin Ma X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=libvir-list-bounces@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Signed-off-by: Lin Ma --- tools/virsh-completer-domain.c | 55 ++++++++++++++++++++++++++++++++++ tools/virsh-completer-domain.h | 4 +++ tools/virsh-domain.c | 1 + 3 files changed, 60 insertions(+) diff --git a/tools/virsh-completer-domain.c b/tools/virsh-completer-domain.c index f653471b89..dc66317561 100644 --- a/tools/virsh-completer-domain.c +++ b/tools/virsh-completer-domain.c @@ -656,3 +656,58 @@ virshDomainVcpulistViaAgentCompleter(vshControl *ctl, virshDomainFree(dom); return ret; } + +char ** +virshDomainConsoleCompleter(vshControl *ctl, + const vshCmd *cmd, + unsigned int flags) +{ + virshControlPtr priv =3D ctl->privData; + g_autoptr(xmlDoc) xmldoc =3D NULL; + g_autoptr(xmlXPathContext) ctxt =3D NULL; + int nserials; + int nparallels; + g_autofree xmlNodePtr *serials =3D NULL; + g_autofree xmlNodePtr *parallels =3D NULL; + size_t i; + size_t offset =3D 0; + VIR_AUTOSTRINGLIST tmp =3D NULL; + + virCheckFlags(0, NULL); + + if (!priv->conn || virConnectIsAlive(priv->conn) <=3D 0) + return NULL; + + if (virshDomainGetXML(ctl, cmd, 0, &xmldoc, &ctxt) < 0) + return NULL; + + nserials =3D virXPathNodeSet("./devices/serial", ctxt, &serials); + if (nserials < 0) + return NULL; + + nparallels =3D virXPathNodeSet("./devices/parallel", ctxt, ¶llels); + if (nparallels < 0) + return NULL; + + tmp =3D g_new0(char *, nserials + nparallels + 1); + + for (i =3D 0; i < nserials; i++) { + ctxt->node =3D serials[i]; + + if (STRNEQ(virXPathString("string(./@type)", ctxt), "pty")) + continue; + + tmp[offset++] =3D virXPathString("string(./alias/@name)", ctxt); + } + + for (i =3D 0; i < nparallels; i++) { + ctxt->node =3D parallels[i]; + + if (STRNEQ(virXPathString("string(./@type)", ctxt), "pty")) + continue; + + tmp[offset++] =3D virXPathString("string(./alias/@name)", ctxt); + } + + return g_steal_pointer(&tmp); +} diff --git a/tools/virsh-completer-domain.h b/tools/virsh-completer-domain.h index d5021f6aa6..02fea2fe94 100644 --- a/tools/virsh-completer-domain.h +++ b/tools/virsh-completer-domain.h @@ -94,3 +94,7 @@ char ** virshDomainCpulistCompleter(vshControl *ctl, char ** virshDomainVcpulistViaAgentCompleter(vshControl *ctl, const vshCmd *cmd, unsigned int flags); + +char ** virshDomainConsoleCompleter(vshControl *ctl, + const vshCmd *cmd, + unsigned int flags); diff --git a/tools/virsh-domain.c b/tools/virsh-domain.c index 675d96440d..022dbdca3c 100644 --- a/tools/virsh-domain.c +++ b/tools/virsh-domain.c @@ -2960,6 +2960,7 @@ static const vshCmdOptDef opts_console[] =3D { VIRSH_COMMON_OPT_DOMAIN_FULL(VIR_CONNECT_LIST_DOMAINS_ACTIVE), {.name =3D "devname", /* sc_prohibit_devname */ .type =3D VSH_OT_STRING, + .completer =3D virshDomainConsoleCompleter, .help =3D N_("character device name") }, {.name =3D "force", --=20 2.26.0