[libvirt PATCH 12/23] interface: use a constant for the sysfs bond device file prefix

Peter Krempa pkrempa at redhat.com
Fri Jun 19 10:25:13 UTC 2020


On Fri, Jun 19, 2020 at 10:32:49 +0100, Daniel Berrange wrote:
> Two methods needs to deal with the fixed filename prefix on the
> NIC name used by bond devices. The code is clearer if they both
> make use of a defined constant.
> 
> Signed-off-by: Daniel P. Berrangé <berrange at redhat.com>
> ---
>  src/interface/interface_backend_udev.c | 22 ++++++++++++----------
>  1 file changed, 12 insertions(+), 10 deletions(-)
> 
> diff --git a/src/interface/interface_backend_udev.c b/src/interface/interface_backend_udev.c
> index e388f98536..f0594aa59c 100644
> --- a/src/interface/interface_backend_udev.c
> +++ b/src/interface/interface_backend_udev.c
> @@ -527,8 +527,16 @@ udevInterfaceLookupByMACString(virConnectPtr conn, const char *macstr)
>      return ret;
>  }
>  
> +/*
> + * Name prefix for sysfs symlinks that indicate which
> + * NICs are part of the bonded device
> + */
> +#define BOND_NIC_PREFIX "slave_"
> +
>  /**
> - * Helper function for finding bond slaves using scandir()
> + * Helper function for finding NICs that are members of a
> + * bond device by using scandir() over the sysfs net interface
> + * dir
>   *
>   * @param entry - directory entry passed by scandir()
>   *
> @@ -542,7 +550,7 @@ udevBondScanDirFilter(const struct dirent *entry)
>       * interface sysfs entry and references the slaves as slave_eth0 for
>       * example.
>       */
> -    if (STRPREFIX(entry->d_name, "slave_"))
> +    if (STRPREFIX(entry->d_name, BOND_NIC_PREFIX))
>          return 1;
>  
>      return 0;
> @@ -763,21 +771,15 @@ udevGetIfaceDefBond(struct udev *udev,
>      ifacedef->data.bond.nbItf = slave_count;
>  
>      for (i = 0; i < slave_count; i++) {
> -        /* Names are slave_interface. e.g. slave_eth0
> -         * so we use the part after the _
> -         */
> -        tmp_str = strchr(slave_list[i]->d_name, '_');
> -        if (!tmp_str || strlen(tmp_str) < 2) {
> +        if (!STRPREFIX(nic_list[i]->d_name, BOND_NIC_PREFIX)) {

Fails to compile:

.../libvirt/src/interface/interface_backend_udev.c:774:24: error: 'nic_list' undeclared (first use in this function)
  774 |         if (!STRPREFIX(nic_list[i]->d_name, BOND_NIC_PREFIX)) {
      |                        ^~~~~~~~



>              virReportError(VIR_ERR_INTERNAL_ERROR,
>                             _("Invalid enslaved interface name '%s' seen for "
>                               "bond '%s'"), slave_list[i]->d_name, name);
>              goto error;
>          }
> -        /* go past the _ */
> -        tmp_str++;
>  
>          ifacedef->data.bond.itf[i] =
> -            udevGetIfaceDef(udev, tmp_str);
> +            udevGetIfaceDef(udev, nic_list[i]->d_name + strlen(BOND_NIC_PREFIX));
>          if (!ifacedef->data.bond.itf[i]) {
>              virReportError(VIR_ERR_INTERNAL_ERROR,
>                  _("Could not get interface information for '%s', which is "
> -- 
> 2.24.1
> 




More information about the libvir-list mailing list