[libvirt] [PATCH v2 2/6] lxc: Rebase lxcNetworkParseData pointers to use new structures.
John Ferlan
jferlan at redhat.com
Sun Mar 17 14:06:28 UTC 2019
On 3/4/19 8:54 PM, Julio Faracco wrote:
> This commit refactor the code logic to introduce new array structures
> instead of single lxcNetworkParseData struct.
>
> Signed-off-by: Julio Faracco <jcfaracco at gmail.com>
> ---
> src/lxc/lxc_native.c | 94 +++++++++++++++-----------------------------
> 1 file changed, 32 insertions(+), 62 deletions(-)
>
lxc/lxc_native.c:679:27: error: unused variable 'networks'
[-Werror,-Wunused-variable]
lxcNetworkParseArray *networks = data;
^
1 error generated.
make[5]: *** [Makefile:10902:
lxc/libvirt_driver_lxc_impl_la-lxc_native.lo] Error 1
> diff --git a/src/lxc/lxc_native.c b/src/lxc/lxc_native.c
> index bf82cd1e98..a6afbbe865 100644
> --- a/src/lxc/lxc_native.c
> +++ b/src/lxc/lxc_native.c
> @@ -484,7 +484,7 @@ lxcAddNetworkRouteDefinition(const char *address,
> }
>
> static int
> -lxcAddNetworkDefinition(lxcNetworkParseData *data)
> +lxcAddNetworkDefinition(virDomainDefPtr def, lxcNetworkParseDataPtr data)
One argument per line...
Still I think too much going on at a time... Removal of the @def from
lxcNetworkParseData should be separated.
> {
> virDomainNetDefPtr net = NULL;
> virDomainHostdevDefPtr hostdev = NULL;
> @@ -532,9 +532,9 @@ lxcAddNetworkDefinition(lxcNetworkParseData *data)
> &hostdev->source.caps.u.net.ip.nroutes) < 0)
> goto error;
>
> - if (VIR_EXPAND_N(data->def->hostdevs, data->def->nhostdevs, 1) < 0)
> + if (VIR_EXPAND_N(def->hostdevs, def->nhostdevs, 1) < 0)
> goto error;
> - data->def->hostdevs[data->def->nhostdevs - 1] = hostdev;
> + def->hostdevs[def->nhostdevs - 1] = hostdev;
> } else {
> if (!(net = lxcCreateNetDef(data->type, data->link, data->mac,
> data->flag, data->macvlanmode,
> @@ -556,9 +556,9 @@ lxcAddNetworkDefinition(lxcNetworkParseData *data)
> &net->guestIP.nroutes) < 0)
> goto error;
>
> - if (VIR_EXPAND_N(data->def->nets, data->def->nnets, 1) < 0)
> + if (VIR_EXPAND_N(def->nets, def->nnets, 1) < 0)
> goto error;
> - data->def->nets[data->def->nnets - 1] = net;
> + def->nets[def->nnets - 1] = net;
> }
>
> return 1;
> @@ -572,44 +572,10 @@ lxcAddNetworkDefinition(lxcNetworkParseData *data)
> return -1;
> }
>
> -
> -static int
> -lxcNetworkParseDataType(virConfValuePtr value,
> - lxcNetworkParseData *parseData)
> -{
Another example of too much happening at one time... Strange to see
this "go away"
> - virDomainDefPtr def = parseData->def;
> - size_t networks = parseData->networks;
> - bool privnet = parseData->privnet;
> - int status;
> -
> - /* Store the previous NIC */
> - status = lxcAddNetworkDefinition(parseData);
> -
> - if (status < 0)
> - return -1;
> - else if (status > 0)
> - networks++;
> - else if (parseData->type != NULL && STREQ(parseData->type, "none"))
> - privnet = false;
> -
> - /* clean NIC to store a new one */
> - memset(parseData, 0, sizeof(*parseData));
> -
> - parseData->def = def;
> - parseData->networks = networks;
> - parseData->privnet = privnet;
> -
> - /* Keep the new value */
> - parseData->type = value->str;
> -
> - return 0;
> -}
> -
> -
> static int
> lxcNetworkParseDataIPs(const char *name,
> virConfValuePtr value,
> - lxcNetworkParseData *parseData)
> + lxcNetworkParseDataPtr parseData)
This hunk would be in previous patch
> {
> int family = AF_INET;
> char **ipparts = NULL;
> @@ -648,14 +614,13 @@ lxcNetworkParseDataIPs(const char *name,
> static int
> lxcNetworkParseDataSuffix(const char *entry,
> virConfValuePtr value,
> - lxcNetworkParseData *parseData)
> + lxcNetworkParseDataPtr parseData)
Same - previous patch
> {
> int elem = virLXCNetworkConfigEntryTypeFromString(entry);
>
> switch (elem) {
> case VIR_LXC_NETWORK_CONFIG_TYPE:
> - if (lxcNetworkParseDataType(value, parseData) < 0)
> - return -1;
> + parseData->type = value->str;
It's confusing why lxcNetworkParseDataType is no longer necessary
> break;
> case VIR_LXC_NETWORK_CONFIG_LINK:
> parseData->link = value->str;
> @@ -700,7 +665,7 @@ lxcNetworkParseDataSuffix(const char *entry,
> static int
> lxcNetworkParseDataEntry(const char *name,
> virConfValuePtr value,
> - lxcNetworkParseData *parseData)
> + lxcNetworkParseDataPtr parseData)
Again, previous patch
> {
> const char *suffix = STRSKIP(name, "lxc.network.");
>
> @@ -711,7 +676,8 @@ lxcNetworkParseDataEntry(const char *name,
> static int
> lxcNetworkWalkCallback(const char *name, virConfValuePtr value, void *data)
> {
> - lxcNetworkParseData *parseData = data;
> + lxcNetworkParseArray *networks = data;
As the compiler tells you @networks is not used
> + lxcNetworkParseDataPtr parseData = NULL;
If you took this one patch at a time, then @data "used" to be a pointer
to a structure of mostly empty data with a filled in @def and this
changes it to a NULL structure, which doesn't feel quite right. That
means lxcNetworkParseDataEntry gets called w/ NULL parameter in 3rd
parameter.
Going to stop here and wait for the next series... I think removing the
@networks and @privnet from _lxcNetworkParseData should be one step and
then the removal of @def another step.
John
>
> if (STRPREFIX(name, "lxc.network."))
> return lxcNetworkParseDataEntry(name, value, parseData);
> @@ -724,26 +690,26 @@ lxcConvertNetworkSettings(virDomainDefPtr def, virConfPtr properties)
> {
> int status;
> int result = -1;
> - size_t i;
> - lxcNetworkParseData data = {def, NULL, NULL, NULL, NULL,
> - NULL, NULL, NULL, NULL, 0,
> - NULL, NULL, true, 0};
> + size_t i, j;
> + bool privnet = true;
> + lxcNetworkParseArray nets = {NULL, 0};
>
> - if (virConfWalk(properties, lxcNetworkWalkCallback, &data) < 0)
> + if (virConfWalk(properties, lxcNetworkWalkCallback, &nets) < 0)
> goto error;
>
> + for (i = 0; i < nets.nnetworks; i++) {
> + lxcNetworkParseDataPtr data = nets.data[i];
>
> - /* Add the last network definition found */
> - status = lxcAddNetworkDefinition(&data);
> + /* Add network definitions */
> + status = lxcAddNetworkDefinition(def, data);
>
> - if (status < 0)
> - goto error;
> - else if (status > 0)
> - data.networks++;
> - else if (data.type != NULL && STREQ(data.type, "none"))
> - data.privnet = false;
> + if (status < 0)
> + goto error;
> + else if (data->type != NULL && STREQ(data->type, "none"))
> + privnet = false;
> + }
>
> - if (data.networks == 0 && data.privnet) {
> + if (nets.nnetworks == 0 && privnet) {
> /* When no network type is provided LXC only adds loopback */
> def->features[VIR_DOMAIN_FEATURE_PRIVNET] = VIR_TRISTATE_SWITCH_ON;
> }
> @@ -752,9 +718,13 @@ lxcConvertNetworkSettings(virDomainDefPtr def, virConfPtr properties)
> return result;
>
> error:
> - for (i = 0; i < data.nips; i++)
> - VIR_FREE(data.ips[i]);
> - VIR_FREE(data.ips);
> + for (i = 0; i < nets.nnetworks; i++) {
> + for (j = 0; j < nets.data[i]->nips; j++)
> + VIR_FREE(nets.data[i]->ips[j]);
> + VIR_FREE(nets.data[i]->ips);
> + }
> + for (i = 0; i < nets.nnetworks; i++)
> + VIR_FREE(nets.data[i]);
> return -1;
> }
>
>
More information about the libvir-list
mailing list