From aa54cb9d3565f4e96a3612c76a41cb15255b7bae Mon Sep 17 00:00:00 2001 From: Lin Ma Date: Tue, 10 Nov 2020 17:51:00 +0800 Subject: [PATCH] virsh: Add mac completion to net-dhcp-leases command Signed-off-by: Lin Ma Signed-off-by: Michal Privoznik Reviewed-by: Michal Privoznik --- tools/virsh-completer-network.c | 44 +++++++++++++++++++++++++++++++++ tools/virsh-completer-network.h | 4 +++ tools/virsh-network.c | 3 ++- 3 files changed, 50 insertions(+), 1 deletion(-) diff --git a/tools/virsh-completer-network.c b/tools/virsh-completer-network.c index 73f7115ab2..3094b9d5d6 100644 --- a/tools/virsh-completer-network.c +++ b/tools/virsh-completer-network.c @@ -174,3 +174,47 @@ virshNetworkUUIDCompleter(vshControl *ctl, g_free(nets); return ret; } + + +char ** +virshNetworkDhcpMacCompleter(vshControl *ctl, + const vshCmd *cmd, + unsigned int flags) +{ + virshControlPtr priv = ctl->privData; + virNetworkDHCPLeasePtr *leases = NULL; + virNetworkPtr network = NULL; + int nleases; + size_t i = 0; + char **ret = NULL; + VIR_AUTOSTRINGLIST tmp = NULL; + + virCheckFlags(0, NULL); + + if (!priv->conn || virConnectIsAlive(priv->conn) <= 0) + return NULL; + + if (!(network = virshCommandOptNetwork(ctl, cmd, NULL))) + return NULL; + + if ((nleases = virNetworkGetDHCPLeases(network, NULL, &leases, flags)) < 0) + goto cleanup; + + tmp = g_new0(char *, nleases + 1); + + for (i = 0; i < nleases; i++) { + virNetworkDHCPLeasePtr lease = leases[i]; + tmp[i] = g_strdup(lease->mac); + } + + ret = g_steal_pointer(&tmp); + + cleanup: + if (leases) { + for (i = 0; i < nleases; i++) + virNetworkDHCPLeaseFree(leases[i]); + VIR_FREE(leases); + } + virNetworkFree(network); + return ret; +} diff --git a/tools/virsh-completer-network.h b/tools/virsh-completer-network.h index 8910e4525c..80df5c468e 100644 --- a/tools/virsh-completer-network.h +++ b/tools/virsh-completer-network.h @@ -37,3 +37,7 @@ char ** virshNetworkPortUUIDCompleter(vshControl *ctl, char ** virshNetworkUUIDCompleter(vshControl *ctl, const vshCmd *cmd, unsigned int flags); + +char ** virshNetworkDhcpMacCompleter(vshControl *ctl, + const vshCmd *cmd, + unsigned int flags); diff --git a/tools/virsh-network.c b/tools/virsh-network.c index 745afc537d..9e3b31a60c 100644 --- a/tools/virsh-network.c +++ b/tools/virsh-network.c @@ -1376,7 +1376,8 @@ static const vshCmdOptDef opts_network_dhcp_leases[] = { {.name = "mac", .type = VSH_OT_STRING, .flags = VSH_OFLAG_NONE, - .help = N_("MAC address") + .help = N_("MAC address"), + .completer = virshNetworkDhcpMacCompleter, }, {.name = NULL} }; -- 2.47.2