On 07/12/2018 04:07 PM, Simon Kobyda wrote: > After you go through command mentioned above, completer > finds what state the device is currently in, and suggests > an opposite state. > > Signed-off-by: Simon Kobyda <skobyda@xxxxxxxxxx> > --- > > Changes in V2: > - Added "Signed-off-by" > - Changed format of commit message to make it more > readable > > tools/virsh-completer.c | 73 ++++++++++++++++++++++++++++++++++++++++- > tools/virsh-completer.h | 4 +++ > tools/virsh-domain.c | 1 + > 3 files changed, 77 insertions(+), 1 deletion(-) > > diff --git a/tools/virsh-completer.c b/tools/virsh-completer.c > index 2327e08340..e32fd82211 100644 > --- a/tools/virsh-completer.c > +++ b/tools/virsh-completer.c > @@ -32,6 +32,7 @@ > #include "internal.h" > #include "virutil.h" > #include "viralloc.h" > +#include "virmacaddr.h" > #include "virstring.h" > #include "virxml.h" > > @@ -750,7 +751,6 @@ virshDomainEventNameCompleter(vshControl *ctl ATTRIBUTE_UNUSED, > return NULL; > } > > - This is a spurious change and has nothing to do with the feature you're proposing. > char ** > virshPoolEventNameCompleter(vshControl *ctl ATTRIBUTE_UNUSED, > const vshCmd *cmd ATTRIBUTE_UNUSED, > @@ -776,6 +776,77 @@ virshPoolEventNameCompleter(vshControl *ctl ATTRIBUTE_UNUSED, > return NULL; > } > > +char ** > +virshDomainInterfaceStateCompleter(vshControl *ctl ATTRIBUTE_UNUSED, > + const vshCmd *cmd ATTRIBUTE_UNUSED, > + unsigned int flags) Misaligned function arguments. Also, I'm not quite sure why you marked @ctl as unused when it's being used at the very next line. Same goes for @cmd. > +{ > + virshControlPtr priv = ctl->privData; > + const char *iface = NULL; > + char **ret = NULL; > + xmlDocPtr xml = NULL; > + virMacAddr macaddr; > + char *state = NULL; > + char *xpath = NULL; > + char macstr[18] = ""; What's wrong with VIR_MAC_STRING_BUFLEN? > + xmlXPathContextPtr ctxt = NULL; > + xmlNodePtr *interfaces = NULL; > + int ninterfaces; > + > + virCheckFlags(0, NULL); > + > + if (!priv->conn || virConnectIsAlive(priv->conn) <= 0) > + return NULL; > + > + if (vshCommandOptStringReq(ctl, cmd, "interface", &iface) < 0) > + goto cleanup; > + > + if (virshDomainGetXML(ctl, cmd, flags, &xml, &ctxt) < 0) > + goto cleanup; > + > + /* normalize the mac addr */ > + if (virMacAddrParse(iface, &macaddr) == 0) > + virMacAddrFormat(&macaddr, macstr); > + > + if (virAsprintf(&xpath, "/domain/devices/interface[(mac/@address = '%s') or " > + " (target/@dev = '%s')]", > + macstr, iface) < 0) > + goto cleanup; > + > + if ((ninterfaces = virXPathNodeSet(xpath, ctxt, &interfaces)) < 0) > + goto cleanup; > + > + if (ninterfaces != 1) > + goto cleanup; > + > + ctxt->node = interfaces[0]; > + > + if (VIR_ALLOC_N(ret, 2) < 0) > + goto error; > + > + if ((state = virXPathString("string(./link/@state)", ctxt)) && > + STREQ(state, "down")) { > + if (VIR_STRDUP(ret[0], "up") < 0) > + goto error; > + } else { > + if (VIR_STRDUP(ret[0], "down") < 0) > + goto error; > + } > + > + cleanup: > + VIR_FREE(state); > + VIR_FREE(interfaces); > + VIR_FREE(xpath); > + xmlXPathFreeContext(ctxt); > + xmlFreeDoc(xml); > + return ret; > + > + error: > + virStringListFree(ret); > + ret = NULL; > + goto cleanup; > +} > + > Fixed all the small nits I've found, ACKed and pushed. Michal -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list