diff --git a/tools/virsh-completer-domain.c b/tools/virsh-completer-domain.c index 281091c41c..6bd09dcb0f 100644 --- a/tools/virsh-completer-domain.c +++ b/tools/virsh-completer-domain.c @@ -564,3 +564,34 @@ virshDomainVcpulistCompleter(vshControl *ctl, virshDomainFree(dom); return ret; } + + +char ** +virshDomainCpulistCompleter(vshControl *ctl, + const vshCmd *cmd, + unsigned int flags) +{ + virshControlPtr priv = ctl->privData; + size_t i; + int cpunum; + g_autofree unsigned char *cpumap = NULL; + unsigned int online; + VIR_AUTOSTRINGLIST cpulist = NULL; + const char *cpuid = NULL; + + virCheckFlags(0, NULL); + + if (vshCommandOptStringQuiet(ctl, cmd, "cpulist", &cpuid) < 0) + return NULL; + + if ((cpunum = virNodeGetCPUMap(priv->conn, &cpumap, &online, 0)) < 0) + return NULL; + + if (VIR_ALLOC_N(cpulist, cpunum + 1) < 0) + return NULL; + + for (i = 0; i < cpunum; i++) + cpulist[i] = g_strdup_printf("%zu", i); + + return virshCommaStringListComplete(cpuid, (const char **)cpulist); +} diff --git a/tools/virsh-completer-domain.h b/tools/virsh-completer-domain.h index d9ed5b44b3..d38efd5ea8 100644 --- a/tools/virsh-completer-domain.h +++ b/tools/virsh-completer-domain.h @@ -86,3 +86,7 @@ char ** virshDomainVcpuCompleter(vshControl *ctl, char ** virshDomainVcpulistCompleter(vshControl *ctl, const vshCmd *cmd, unsigned int flags); + +char ** virshDomainCpulistCompleter(vshControl *ctl, + const vshCmd *cmd, + unsigned int flags); diff --git a/tools/virsh-domain.c b/tools/virsh-domain.c index baec00645a..f0ca6f7b83 100644 --- a/tools/virsh-domain.c +++ b/tools/virsh-domain.c @@ -7008,6 +7008,7 @@ static const vshCmdOptDef opts_vcpupin[] = { {.name = "cpulist", .type = VSH_OT_STRING, .flags = VSH_OFLAG_EMPTY_OK, + .completer = virshDomainCpulistCompleter, .help = N_("host cpu number(s) to set, or omit option to query") }, VIRSH_COMMON_OPT_DOMAIN_CONFIG, @@ -7235,6 +7236,7 @@ static const vshCmdOptDef opts_emulatorpin[] = { {.name = "cpulist", .type = VSH_OT_STRING, .flags = VSH_OFLAG_EMPTY_OK, + .completer = virshDomainCpulistCompleter, .help = N_("host cpu number(s) to set, or omit option to query") }, VIRSH_COMMON_OPT_DOMAIN_CONFIG, @@ -7757,6 +7759,7 @@ static const vshCmdOptDef opts_iothreadpin[] = { {.name = "cpulist", .type = VSH_OT_DATA, .flags = VSH_OFLAG_REQ, + .completer = virshDomainCpulistCompleter, .help = N_("host cpu number(s) to set") }, VIRSH_COMMON_OPT_DOMAIN_CONFIG,