[libvirt] [libvirt PATCHv3 10/10] support multiple static IP addresses

David L Stevens dlstevens at us.ibm.com
Wed Oct 12 19:50:21 UTC 2011


	This patch adds support for multiple static IP addresses in a
comma-separated list. For example:

    <interface type='network'>
      <filterref filter='clean-traffic'>
        <parameter name='ip_learning' value='none'/>
        <parameter name='IP' value='10.0.0.1,10.1.0.7,10.0.3.8,10.0.9.244'/>
      </filterref>
    ...

Signed-off-by: David L Stevens <dlstevens at us.ibm.com>
---
 src/nwfilter/nwfilter_gentech_driver.c |   26 ++++++++++++++++++++++++++
 1 files changed, 26 insertions(+), 0 deletions(-)

diff --git a/src/nwfilter/nwfilter_gentech_driver.c b/src/nwfilter/nwfilter_gentech_driver.c
index 577b48d..8f74a01 100644
--- a/src/nwfilter/nwfilter_gentech_driver.c
+++ b/src/nwfilter/nwfilter_gentech_driver.c
@@ -920,6 +920,8 @@ __virNWFilterInstantiateFilter(virConnectPtr conn,
     char *str_macaddr = NULL;
     const char *ipaddr;
     char *str_ipaddr = NULL;
+    char *ipaddrlist = NULL;
+    char *sep;
 
     techdriver = virNWFilterTechDriverForName(drvname);
 
@@ -983,6 +985,17 @@ __virNWFilterInstantiateFilter(virConnectPtr conn,
         goto err_exit_vars1;
     }
 
+    ipaddr = virHashLookup(filterparams->hashTable, NWFILTER_STD_VAR_IP);
+    if (ipaddr) {
+        sep = strchr(ipaddr, ',');
+        if (sep) {
+            str_ipaddr = strndup(ipaddr, sep-ipaddr);
+            ipaddrlist = strdup(sep + 1);
+            virNWFilterHashTablePut(vars, NWFILTER_STD_VAR_IP, str_ipaddr, 1);
+        }
+    }
+    str_ipaddr = NULL;
+
     filter = obj->def;
 
     switch (useNewFilter) {
@@ -1011,6 +1024,19 @@ __virNWFilterInstantiateFilter(virConnectPtr conn,
                                 driver,
                                 forceWithPendingReq);
 
+    /* add the rest of the IP list */
+    for (ipaddr = ipaddrlist; ipaddr; ipaddr = sep) {
+        sep = strchr(ipaddr, ',');
+        if (sep) {
+            str_ipaddr = strndup(ipaddr, sep-ipaddr);
+            sep++; /* skip ',' */
+        } else
+            str_ipaddr = strdup(ipaddr);
+        virNWFilterChangeVar(conn, techdriver, nettype, filter, ifname, vars,
+                             driver, NWFILTER_STD_VAR_IP, str_ipaddr, 0);
+
+    }
+    str_ipaddr = NULL;
     virNWFilterHashTableFree(vars);
 
 err_exit_vars1:
-- 
1.7.6.4




More information about the libvir-list mailing list