提交 4f42e2c4 编写于 作者: M Michal Privoznik

virsh: Introduce virshInterfaceNameCompleter

Signed-off-by: NMichal Privoznik <mprivozn@redhat.com>
Reviewed-by: NJohn Ferlan <jferlan@redhat.com>
上级 f81f8b62
...@@ -247,3 +247,50 @@ virshStorageVolNameCompleter(vshControl *ctl, ...@@ -247,3 +247,50 @@ virshStorageVolNameCompleter(vshControl *ctl,
virStoragePoolFree(pool); virStoragePoolFree(pool);
return NULL; return NULL;
} }
char **
virshInterfaceNameCompleter(vshControl *ctl,
const vshCmd *cmd ATTRIBUTE_UNUSED,
unsigned int flags)
{
virshControlPtr priv = ctl->privData;
virInterfacePtr *ifaces = NULL;
int nifaces = 0;
size_t i = 0;
char **ret = NULL;
virCheckFlags(VIR_CONNECT_LIST_INTERFACES_ACTIVE |
VIR_CONNECT_LIST_INTERFACES_INACTIVE,
NULL);
if (!priv->conn || virConnectIsAlive(priv->conn) <= 0)
return NULL;
if ((nifaces = virConnectListAllInterfaces(priv->conn, &ifaces, flags)) < 0)
return NULL;
if (VIR_ALLOC_N(ret, nifaces + 1) < 0)
goto error;
for (i = 0; i < nifaces; i++) {
const char *name = virInterfaceGetName(ifaces[i]);
if (VIR_STRDUP(ret[i], name) < 0)
goto error;
virInterfaceFree(ifaces[i]);
}
VIR_FREE(ifaces);
return ret;
error:
for (; i < nifaces; i++)
virInterfaceFree(ifaces[i]);
VIR_FREE(ifaces);
for (i = 0; i < nifaces; i++)
VIR_FREE(ret[i]);
VIR_FREE(ret);
return NULL;
}
...@@ -46,4 +46,8 @@ char ** virshStorageVolNameCompleter(vshControl *ctl, ...@@ -46,4 +46,8 @@ char ** virshStorageVolNameCompleter(vshControl *ctl,
const vshCmd *cmd, const vshCmd *cmd,
unsigned int flags); unsigned int flags);
char ** virshInterfaceNameCompleter(vshControl *ctl,
const vshCmd *cmd,
unsigned int flags);
#endif #endif
...@@ -23,11 +23,13 @@ ...@@ -23,11 +23,13 @@
* *
*/ */
#define VIRSH_COMMON_OPT_INTERFACE \ #define VIRSH_COMMON_OPT_INTERFACE(cflags) \
{.name = "interface", \ {.name = "interface", \
.type = VSH_OT_DATA, \ .type = VSH_OT_DATA, \
.flags = VSH_OFLAG_REQ, \ .flags = VSH_OFLAG_REQ, \
.help = N_("interface name or MAC address") \ .help = N_("interface name or MAC address"), \
.completer = virshInterfaceNameCompleter, \
.completer_flags = cflags, \
} }
#include <config.h> #include <config.h>
...@@ -107,7 +109,7 @@ static const vshCmdInfo info_interface_edit[] = { ...@@ -107,7 +109,7 @@ static const vshCmdInfo info_interface_edit[] = {
}; };
static const vshCmdOptDef opts_interface_edit[] = { static const vshCmdOptDef opts_interface_edit[] = {
VIRSH_COMMON_OPT_INTERFACE, VIRSH_COMMON_OPT_INTERFACE(0),
{.name = NULL} {.name = NULL}
}; };
...@@ -467,7 +469,7 @@ static const vshCmdInfo info_interface_dumpxml[] = { ...@@ -467,7 +469,7 @@ static const vshCmdInfo info_interface_dumpxml[] = {
}; };
static const vshCmdOptDef opts_interface_dumpxml[] = { static const vshCmdOptDef opts_interface_dumpxml[] = {
VIRSH_COMMON_OPT_INTERFACE, VIRSH_COMMON_OPT_INTERFACE(0),
{.name = "inactive", {.name = "inactive",
.type = VSH_OT_BOOL, .type = VSH_OT_BOOL,
.help = N_("show inactive defined XML") .help = N_("show inactive defined XML")
...@@ -564,7 +566,7 @@ static const vshCmdInfo info_interface_undefine[] = { ...@@ -564,7 +566,7 @@ static const vshCmdInfo info_interface_undefine[] = {
}; };
static const vshCmdOptDef opts_interface_undefine[] = { static const vshCmdOptDef opts_interface_undefine[] = {
VIRSH_COMMON_OPT_INTERFACE, VIRSH_COMMON_OPT_INTERFACE(0),
{.name = NULL} {.name = NULL}
}; };
...@@ -603,7 +605,7 @@ static const vshCmdInfo info_interface_start[] = { ...@@ -603,7 +605,7 @@ static const vshCmdInfo info_interface_start[] = {
}; };
static const vshCmdOptDef opts_interface_start[] = { static const vshCmdOptDef opts_interface_start[] = {
VIRSH_COMMON_OPT_INTERFACE, VIRSH_COMMON_OPT_INTERFACE(VIR_CONNECT_LIST_INTERFACES_INACTIVE),
{.name = NULL} {.name = NULL}
}; };
...@@ -642,7 +644,7 @@ static const vshCmdInfo info_interface_destroy[] = { ...@@ -642,7 +644,7 @@ static const vshCmdInfo info_interface_destroy[] = {
}; };
static const vshCmdOptDef opts_interface_destroy[] = { static const vshCmdOptDef opts_interface_destroy[] = {
VIRSH_COMMON_OPT_INTERFACE, VIRSH_COMMON_OPT_INTERFACE(VIR_CONNECT_LIST_INTERFACES_ACTIVE),
{.name = NULL} {.name = NULL}
}; };
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册