Re: [libvirt] [PATCH v3 09/20] virsh: add nwfilter binding commands

2018-06-22 Thread Daniel P . Berrangé
On Sun, Jun 17, 2018 at 08:27:27AM -0400, John Ferlan wrote:
> 
> 
> On 06/14/2018 08:32 AM, Daniel P. Berrangé wrote:
> > $ virsh nwfilter-binding-list
> >  Port Dev  Filter
> > --
> >  vnet0 clean-traffic
> >  vnet1 clean-traffic
> > 
> > $ virsh nwfilter-binding-dumpxml vnet1
> > 
> >   
> > f25arm7
> > 12ac8b8c-4f23-4248-ae42-fdcd50c400fd
> >   
> >   
> >   
> >   
> > 
> >   
> > 
> > 
> > Signed-off-by: Daniel P. Berrangé 
> > ---
> >  tools/virsh-completer.c |  45 ++
> >  tools/virsh-completer.h |   4 +
> >  tools/virsh-nwfilter.c  | 317 
> >  tools/virsh-nwfilter.h  |   8 +
> >  4 files changed, 374 insertions(+)
> > 
> 
> Will need virsh.pod changes to describe the new commands. I'm OK if you
> just post an update as a reply.

I'll send a further patch with POD docs

Regards,
Daniel
-- 
|: https://berrange.com  -o-https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org -o-https://fstop138.berrange.com :|
|: https://entangle-photo.org-o-https://www.instagram.com/dberrange :|

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list

Re: [libvirt] [PATCH v3 09/20] virsh: add nwfilter binding commands

2018-06-17 Thread John Ferlan


On 06/14/2018 08:32 AM, Daniel P. Berrangé wrote:
> $ virsh nwfilter-binding-list
>  Port Dev  Filter
> --
>  vnet0 clean-traffic
>  vnet1 clean-traffic
> 
> $ virsh nwfilter-binding-dumpxml vnet1
> 
>   
> f25arm7
> 12ac8b8c-4f23-4248-ae42-fdcd50c400fd
>   
>   
>   
>   
> 
>   
> 
> 
> Signed-off-by: Daniel P. Berrangé 
> ---
>  tools/virsh-completer.c |  45 ++
>  tools/virsh-completer.h |   4 +
>  tools/virsh-nwfilter.c  | 317 
>  tools/virsh-nwfilter.h  |   8 +
>  4 files changed, 374 insertions(+)
> 

Will need virsh.pod changes to describe the new commands. I'm OK if you
just post an update as a reply.

The rest looked fine - although a few more usage comments in the new
API's may be nice.

John

Would probably be a very interesting Avocado test to write - something
that continue creates/deletes the binding while perhaps the guest is
doing the start/destroy loop

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list

[libvirt] [PATCH v3 09/20] virsh: add nwfilter binding commands

2018-06-14 Thread Daniel P . Berrangé
$ virsh nwfilter-binding-list
 Port Dev  Filter
--
 vnet0 clean-traffic
 vnet1 clean-traffic

$ virsh nwfilter-binding-dumpxml vnet1

  
f25arm7
12ac8b8c-4f23-4248-ae42-fdcd50c400fd
  
  
  
  

  


Signed-off-by: Daniel P. Berrangé 
---
 tools/virsh-completer.c |  45 ++
 tools/virsh-completer.h |   4 +
 tools/virsh-nwfilter.c  | 317 
 tools/virsh-nwfilter.h  |   8 +
 4 files changed, 374 insertions(+)

diff --git a/tools/virsh-completer.c b/tools/virsh-completer.c
index d3effe59ea..0dc6ae82e1 100644
--- a/tools/virsh-completer.c
+++ b/tools/virsh-completer.c
@@ -473,6 +473,51 @@ virshNWFilterNameCompleter(vshControl *ctl,
 }
 
 
+char **
+virshNWFilterBindingNameCompleter(vshControl *ctl,
+  const vshCmd *cmd ATTRIBUTE_UNUSED,
+  unsigned int flags)
+{
+virshControlPtr priv = ctl->privData;
+virNWFilterBindingPtr *bindings = NULL;
+int nbindings = 0;
+size_t i = 0;
+char **ret = NULL;
+
+virCheckFlags(0, NULL);
+
+if (!priv->conn || virConnectIsAlive(priv->conn) <= 0)
+return NULL;
+
+if ((nbindings = virConnectListAllNWFilterBindings(priv->conn, , 
flags)) < 0)
+return NULL;
+
+if (VIR_ALLOC_N(ret, nbindings + 1) < 0)
+goto error;
+
+for (i = 0; i < nbindings; i++) {
+const char *name = virNWFilterBindingGetPortDev(bindings[i]);
+
+if (VIR_STRDUP(ret[i], name) < 0)
+goto error;
+
+virNWFilterBindingFree(bindings[i]);
+}
+VIR_FREE(bindings);
+
+return ret;
+
+ error:
+for (; i < nbindings; i++)
+virNWFilterBindingFree(bindings[i]);
+VIR_FREE(bindings);
+for (i = 0; i < nbindings; i++)
+VIR_FREE(ret[i]);
+VIR_FREE(ret);
+return NULL;
+}
+
+
 char **
 virshSecretUUIDCompleter(vshControl *ctl,
  const vshCmd *cmd ATTRIBUTE_UNUSED,
diff --git a/tools/virsh-completer.h b/tools/virsh-completer.h
index ee7eec68c5..fcff040135 100644
--- a/tools/virsh-completer.h
+++ b/tools/virsh-completer.h
@@ -66,6 +66,10 @@ char ** virshNWFilterNameCompleter(vshControl *ctl,
const vshCmd *cmd,
unsigned int flags);
 
+char ** virshNWFilterBindingNameCompleter(vshControl *ctl,
+  const vshCmd *cmd,
+  unsigned int flags);
+
 char ** virshSecretUUIDCompleter(vshControl *ctl,
  const vshCmd *cmd,
  unsigned int flags);
diff --git a/tools/virsh-nwfilter.c b/tools/virsh-nwfilter.c
index 06a002dffd..1cdbe5053a 100644
--- a/tools/virsh-nwfilter.c
+++ b/tools/virsh-nwfilter.c
@@ -443,6 +443,299 @@ cmdNWFilterEdit(vshControl *ctl, const vshCmd *cmd)
 return ret;
 }
 
+
+virNWFilterBindingPtr
+virshCommandOptNWFilterBindingBy(vshControl *ctl,
+ const vshCmd *cmd,
+ const char **name,
+ unsigned int flags)
+{
+virNWFilterBindingPtr binding = NULL;
+const char *n = NULL;
+const char *optname = "binding";
+virshControlPtr priv = ctl->privData;
+
+virCheckFlags(0, NULL);
+
+if (vshCommandOptStringReq(ctl, cmd, optname, ) < 0)
+return NULL;
+
+vshDebug(ctl, VSH_ERR_INFO, "%s: found option <%s>: %s\n",
+ cmd->def->name, optname, n);
+
+if (name)
+*name = n;
+
+vshDebug(ctl, VSH_ERR_DEBUG, "%s: <%s> trying as nwfilter binding port 
dev\n",
+ cmd->def->name, optname);
+binding = virNWFilterBindingLookupByPortDev(priv->conn, n);
+
+if (!binding)
+vshError(ctl, _("failed to get nwfilter binding '%s'"), n);
+
+return binding;
+}
+
+
+/*
+ * "nwfilter-binding-create" command
+ */
+static const vshCmdInfo info_nwfilter_binding_create[] = {
+{.name = "help",
+ .data = N_("create a network filter binding from an XML file")
+},
+{.name = "desc",
+ .data = N_("Create a new network filter binding.")
+},
+{.name = NULL}
+};
+
+static const vshCmdOptDef opts_nwfilter_binding_create[] = {
+VIRSH_COMMON_OPT_FILE(N_("file containing an XML network "
+ "filter binding description")),
+{.name = NULL}
+};
+
+static bool
+cmdNWFilterBindingCreate(vshControl *ctl, const vshCmd *cmd)
+{
+virNWFilterBindingPtr binding;
+const char *from = NULL;
+bool ret = true;
+char *buffer;
+virshControlPtr priv = ctl->privData;
+
+if (vshCommandOptStringReq(ctl, cmd, "file", ) < 0)
+return false;
+
+if (virFileReadAll(from, VSH_MAX_XML_FILE, ) < 0)
+return false;
+
+binding = virNWFilterBindingCreateXML(priv->conn, buffer, 0);
+VIR_FREE(buffer);
+
+