[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