Throughout the code, we have several places need to construct a path somewhere in /sys/class/net/... They are not consistent and nearly each code piece invents its own way how to do it. So unify this by: 1) use virNetDevSysfsFile() wherever possible 2) At least use common macro SYSFS_NET_DIR declared in virnetdev.h at the rest of places which can't go with 1) Signed-off-by: Michal Privoznik <mprivozn@xxxxxxxxxx> --- src/Makefile.am | 4 ++-- src/parallels/parallels_network.c | 3 +-- src/util/virnetdev.c | 5 ++--- src/util/virnetdev.h | 2 ++ src/util/virnetdevbridge.c | 1 - src/util/virnetdevmacvlan.c | 28 ++++++++++++++-------------- 6 files changed, 21 insertions(+), 22 deletions(-) diff --git a/src/Makefile.am b/src/Makefile.am index 91a4c17..3c9eac6 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -1383,8 +1383,8 @@ noinst_LTLIBRARIES += libvirt_driver_parallels.la libvirt_la_BUILT_LIBADD += libvirt_driver_parallels.la libvirt_driver_parallels_la_CFLAGS = \ -I$(srcdir)/conf $(AM_CFLAGS) \ - $(PARALLELS_SDK_CFLAGS) -libvirt_driver_parallels_la_LIBADD = $(PARALLELS_SDK_LIBS) + $(PARALLELS_SDK_CFLAGS) $(LIBNL_CFLAGS) +libvirt_driver_parallels_la_LIBADD = $(PARALLELS_SDK_LIBS) $(LIBNL_LIBS) libvirt_driver_parallels_la_SOURCES = $(PARALLELS_DRIVER_SOURCES) endif WITH_PARALLELS diff --git a/src/parallels/parallels_network.c b/src/parallels/parallels_network.c index 47f4886..47353a7 100644 --- a/src/parallels/parallels_network.c +++ b/src/parallels/parallels_network.c @@ -28,6 +28,7 @@ #include "viralloc.h" #include "virerror.h" #include "virfile.h" +#include "virnetdev.h" #include "md5.h" #include "parallels_utils.h" #include "virstring.h" @@ -39,8 +40,6 @@ virReportErrorHelper(VIR_FROM_TEST, VIR_ERR_OPERATION_FAILED, __FILE__, \ __FUNCTION__, __LINE__, _("Can't parse prlctl output")) -#define SYSFS_NET_DIR "/sys/class/net" - static int parallelsGetBridgedNetInfo(virNetworkDefPtr def, virJSONValuePtr jobj) { const char *ifname; diff --git a/src/util/virnetdev.c b/src/util/virnetdev.c index 9ef75f2..a816e5d 100644 --- a/src/util/virnetdev.c +++ b/src/util/virnetdev.c @@ -1612,14 +1612,13 @@ int virNetDevValidateConfig(const char *ifname ATTRIBUTE_UNUSED, #ifdef __linux__ -# define NET_SYSFS "/sys/class/net/" int virNetDevSysfsFile(char **pf_sysfs_device_link, const char *ifname, const char *file) { - if (virAsprintf(pf_sysfs_device_link, NET_SYSFS "%s/%s", ifname, file) < 0) + if (virAsprintf(pf_sysfs_device_link, SYSFS_NET_DIR "%s/%s", ifname, file) < 0) return -1; return 0; } @@ -1629,7 +1628,7 @@ virNetDevSysfsDeviceFile(char **pf_sysfs_device_link, const char *ifname, const char *file) { - if (virAsprintf(pf_sysfs_device_link, NET_SYSFS "%s/device/%s", ifname, + if (virAsprintf(pf_sysfs_device_link, SYSFS_NET_DIR "%s/device/%s", ifname, file) < 0) return -1; return 0; diff --git a/src/util/virnetdev.h b/src/util/virnetdev.h index 3535319..3e44d9f 100644 --- a/src/util/virnetdev.h +++ b/src/util/virnetdev.h @@ -219,6 +219,8 @@ int virNetDevSetRcvAllMulti(const char *ifname, bool receive) ATTRIBUTE_NONNULL(1) ATTRIBUTE_RETURN_CHECK; int virNetDevGetRcvAllMulti(const char *ifname, bool *receive) ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_RETURN_CHECK; + +# define SYSFS_NET_DIR "/sys/class/net" int virNetDevSysfsFile(char **pf_sysfs_device_link, const char *ifname, const char *file) diff --git a/src/util/virnetdevbridge.c b/src/util/virnetdevbridge.c index 6be8aa3..e601bdc 100644 --- a/src/util/virnetdevbridge.c +++ b/src/util/virnetdevbridge.c @@ -114,7 +114,6 @@ static int virNetDevBridgeCmd(const char *brname, #endif #if defined(HAVE_STRUCT_IFREQ) && defined(__linux__) -# define SYSFS_NET_DIR "/sys/class/net" /* * Bridge parameters can be set via sysfs on newish kernels, * or by ioctl on older kernels. Perhaps we could just use diff --git a/src/util/virnetdevmacvlan.c b/src/util/virnetdevmacvlan.c index 5fd2097..0eabee5 100644 --- a/src/util/virnetdevmacvlan.c +++ b/src/util/virnetdevmacvlan.c @@ -236,19 +236,15 @@ static int virNetDevMacVLanTapOpen(const char *ifname, int retries) { - FILE *file; - char path[64]; + int ret = -1; + FILE *file = NULL; + char *path; int ifindex; char tapname[50]; int tapfd; - if (snprintf(path, sizeof(path), - "/sys/class/net/%s/ifindex", ifname) >= sizeof(path)) { - virReportSystemError(errno, - "%s", - _("buffer for ifindex path is too small")); + if (virNetDevSysfsFile(&path, ifname, "ifindex") < 0) return -1; - } file = fopen(path, "r"); @@ -256,15 +252,14 @@ int virNetDevMacVLanTapOpen(const char *ifname, virReportSystemError(errno, _("cannot open macvtap file %s to determine " "interface index"), path); - return -1; + goto cleanup; } if (fscanf(file, "%d", &ifindex) != 1) { virReportSystemError(errno, "%s", _("cannot determine macvtap's tap device " "interface index")); - VIR_FORCE_FCLOSE(file); - return -1; + goto cleanup; } VIR_FORCE_FCLOSE(file); @@ -288,12 +283,17 @@ int virNetDevMacVLanTapOpen(const char *ifname, break; } - if (tapfd < 0) + if (tapfd < 0) { virReportSystemError(errno, _("cannot open macvtap tap device %s"), tapname); - - return tapfd; + goto cleanup; + } + ret = tapfd; + cleanup: + VIR_FREE(path); + VIR_FORCE_FCLOSE(file); + return ret; } -- 2.0.5 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list