The new method called lxcNetworkParseDataIPs() is responsible to handle
IPv{4,6} settings now. The idea is let lxcNetworkWalkCallback() method
handle all entries related to network definition only.
Signed-off-by: Julio Faracco <jcfaracco(a)gmail.com>
---
src/lxc/lxc_native.c | 65 +++++++++++++++++++++++++-------------------
1 file changed, 37 insertions(+), 28 deletions(-)
diff --git a/src/lxc/lxc_native.c b/src/lxc/lxc_native.c
index 1eee3fc2bb..5bbbbf132c 100644
--- a/src/lxc/lxc_native.c
+++ b/src/lxc/lxc_native.c
@@ -552,6 +552,42 @@ lxcAddNetworkDefinition(lxcNetworkParseData *data)
return -1;
}
+static int
+lxcNetworkParseDataIPs(const char *name, virConfValuePtr value, lxcNetworkParseData
*parseData)
+{
+ int family = AF_INET;
+ char **ipparts = NULL;
+ virNetDevIPAddrPtr ip = NULL;
+
+ if (VIR_ALLOC(ip) < 0)
+ return -1;
+
+ if (STREQ(name, "lxc.network.ipv6"))
+ family = AF_INET6;
+
+ ipparts = virStringSplit(value->str, "/", 2);
+ if (virStringListLength((const char * const *)ipparts) != 2 ||
+ virSocketAddrParse(&ip->address, ipparts[0], family) < 0 ||
+ virStrToLong_ui(ipparts[1], NULL, 10, &ip->prefix) < 0) {
+
+ virReportError(VIR_ERR_INVALID_ARG,
+ _("Invalid CIDR address: '%s'"),
value->str);
+
+ virStringListFree(ipparts);
+ VIR_FREE(ip);
+ return -1;
+ }
+
+ virStringListFree(ipparts);
+
+ if (VIR_APPEND_ELEMENT(parseData->ips, parseData->nips, ip) < 0) {
+ VIR_FREE(ip);
+ return -1;
+ }
+
+ return 0;
+}
+
static int
lxcNetworkWalkCallback(const char *name, virConfValuePtr value, void *data)
{
@@ -597,35 +633,8 @@ lxcNetworkWalkCallback(const char *name, virConfValuePtr value, void
*data)
parseData->name = value->str;
else if (STREQ(name, "lxc.network.ipv4") ||
STREQ(name, "lxc.network.ipv6")) {
- int family = AF_INET;
- char **ipparts = NULL;
- virNetDevIPAddrPtr ip = NULL;
-
- if (VIR_ALLOC(ip) < 0)
+ if (lxcNetworkParseDataIPs(name, value, parseData) < 0)
return -1;
-
- if (STREQ(name, "lxc.network.ipv6"))
- family = AF_INET6;
-
- ipparts = virStringSplit(value->str, "/", 2);
- if (virStringListLength((const char * const *)ipparts) != 2 ||
- virSocketAddrParse(&ip->address, ipparts[0], family) < 0 ||
- virStrToLong_ui(ipparts[1], NULL, 10, &ip->prefix) < 0) {
-
- virReportError(VIR_ERR_INVALID_ARG,
- _("Invalid CIDR address: '%s'"),
value->str);
-
- virStringListFree(ipparts);
- VIR_FREE(ip);
- return -1;
- }
-
- virStringListFree(ipparts);
-
- if (VIR_APPEND_ELEMENT(parseData->ips, parseData->nips, ip) < 0) {
- VIR_FREE(ip);
- return -1;
- }
} else if (STREQ(name, "lxc.network.ipv4.gateway")) {
parseData->gateway_ipv4 = value->str;
} else if (STREQ(name, "lxc.network.ipv6.gateway")) {
--
2.19.1