]> xenbits.xensource.com Git - libvirt.git/commitdiff
nwfilter: introduce virNWFilterBinding to decouple from virDomainNet
authorDaniel P. Berrangé <berrange@redhat.com>
Thu, 26 Apr 2018 11:26:51 +0000 (12:26 +0100)
committerDaniel P. Berrangé <berrange@redhat.com>
Thu, 3 May 2018 16:00:57 +0000 (17:00 +0100)
The virDomainNet struct contains everything related to configuring a
guest network device. Out of all of this info, only 5 fields are
relevant to configuring network filters. It will be more convenient for
future changes to the nwfilter driver if the relevant fields are kept in
a dedicated struct. Thus the virNWFilterBinding struct is created to
track this information.

Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
src/conf/nwfilter_conf.c
src/conf/nwfilter_conf.h
src/libvirt_private.syms

index 5d04f2a93cc5f7377f61b67a90bc103b40bfd080..452daa214a7006dcf8ccfc2d90541c5e67d7a68d 100644 (file)
@@ -2,7 +2,7 @@
  * nwfilter_conf.c: network filter XML processing
  *                  (derived from storage_conf.c)
  *
- * Copyright (C) 2006-2014 Red Hat, Inc.
+ * Copyright (C) 2006-2018 Red Hat, Inc.
  * Copyright (C) 2006-2008 Daniel P. Berrange
  *
  * Copyright (C) 2010-2011 IBM Corporation
@@ -3265,3 +3265,57 @@ virNWFilterRuleIsProtocolEthernet(virNWFilterRuleDefPtr rule)
         return true;
     return false;
 }
+
+
+void
+virNWFilterBindingFree(virNWFilterBindingPtr binding)
+{
+    if (!binding)
+        return;
+
+    VIR_FREE(binding->ownername);
+    VIR_FREE(binding->portdevname);
+    VIR_FREE(binding->linkdevname);
+    VIR_FREE(binding->filter);
+    virHashFree(binding->filterparams);
+
+    VIR_FREE(binding);
+}
+
+
+virNWFilterBindingPtr
+virNWFilterBindingCopy(virNWFilterBindingPtr src)
+{
+    virNWFilterBindingPtr ret;
+
+    if (VIR_ALLOC(ret) < 0)
+        return NULL;
+
+    if (VIR_STRDUP(ret->ownername, src->ownername) < 0)
+        goto error;
+
+    memcpy(ret->owneruuid, src->owneruuid, sizeof(ret->owneruuid));
+
+    if (VIR_STRDUP(ret->portdevname, src->portdevname) < 0)
+        goto error;
+
+    if (VIR_STRDUP(ret->linkdevname, src->linkdevname) < 0)
+        goto error;
+
+    ret->mac = src->mac;
+
+    if (VIR_STRDUP(ret->filter, src->filter) < 0)
+        goto error;
+
+    if (!(ret->filterparams = virNWFilterHashTableCreate(0)))
+        goto error;
+
+    if (virNWFilterHashTablePutAll(src->filterparams, ret->filterparams) < 0)
+        goto error;
+
+    return ret;
+
+ error:
+    virNWFilterBindingFree(ret);
+    return NULL;
+}
index a31db6d3ff4210f655b80bce8188ba2ac2d71b16..6fcbba4bd5a4fc1a422af7714596e2b4220c897a 100644 (file)
@@ -2,7 +2,7 @@
  * nwfilter_conf.h: network filter XML processing
  *                  (derived from storage_conf.h)
  *
- * Copyright (C) 2006-2010, 2012-2014 Red Hat, Inc.
+ * Copyright (C) 2006-2010, 2012-2018 Red Hat, Inc.
  * Copyright (C) 2006-2008 Daniel P. Berrange
  *
  * Copyright (C) 2010 IBM Corporation
@@ -545,6 +545,19 @@ struct _virNWFilterDef {
     virNWFilterEntryPtr *filterEntries;
 };
 
+typedef struct virNWFilterBinding virNWFilterBinding;
+typedef virNWFilterBinding *virNWFilterBindingPtr;
+
+struct virNWFilterBinding {
+    char *ownername;
+    unsigned char owneruuid[VIR_UUID_BUFLEN];
+    char *portdevname;
+    char *linkdevname;
+    virMacAddr mac;
+    char *filter;
+    virHashTablePtr filterparams;
+};
+
 
 typedef enum {
     STEP_APPLY_NEW,
@@ -650,6 +663,11 @@ virNWFilterRuleIsProtocolIPv6(virNWFilterRuleDefPtr rule);
 bool
 virNWFilterRuleIsProtocolEthernet(virNWFilterRuleDefPtr rule);
 
+void
+virNWFilterBindingFree(virNWFilterBindingPtr binding);
+virNWFilterBindingPtr
+virNWFilterBindingCopy(virNWFilterBindingPtr src);
+
 VIR_ENUM_DECL(virNWFilterRuleAction);
 VIR_ENUM_DECL(virNWFilterRuleDirection);
 VIR_ENUM_DECL(virNWFilterRuleProtocol);
index 7c7b19472b0d3b341ce7271ce4c58171540b85ce..ffaa38ccab0c49dcfe7314f5a53201d58c43dcf4 100644 (file)
@@ -780,6 +780,8 @@ virDomainNumatuneSpecifiedMaxNode;
 
 
 # conf/nwfilter_conf.h
+virNWFilterBindingCopy;
+virNWFilterBindingFree;
 virNWFilterCallbackDriversLock;
 virNWFilterCallbackDriversUnlock;
 virNWFilterChainSuffixTypeToString;