From: "Daniel P. Berrange" <berrange@xxxxxxxxxx> The ifaceUp, ifaceDown, ifaceCtrl & ifaceIsUp APIs can be replaced with calls to virNetDevSetOnline and virNetDevIsOnline * src/util/interface.c, src/util/interface.h: Delete ifaceUp, ifaceDown, ifaceCtrl & ifaceIsUp * src/nwfilter/nwfilter_gentech_driver.c, src/util/macvtap.c: Update to use virNetDevSetOnline and virNetDevIsOnline --- src/libvirt_private.syms | 3 - src/nwfilter/nwfilter_gentech_driver.c | 4 +- src/util/interface.c | 150 -------------------------------- src/util/interface.h | 12 --- src/util/macvtap.c | 18 ++-- 5 files changed, 10 insertions(+), 177 deletions(-) diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index 4bc9217..a88b806 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -576,8 +576,6 @@ virHookPresent; # interface.h ifaceCheck; -ifaceCtrl; -ifaceGetFlags; ifaceGetIndex; ifaceGetMacAddress; ifaceGetIPAddress; @@ -585,7 +583,6 @@ ifaceGetNthParent; ifaceGetPhysicalFunction; ifaceGetVirtualFunctionIndex; ifaceGetVlanID; -ifaceIsUp; ifaceIsVirtualFunction; ifaceLinkDel; ifaceMacvtapLinkAdd; diff --git a/src/nwfilter/nwfilter_gentech_driver.c b/src/nwfilter/nwfilter_gentech_driver.c index 7891983..899bd32 100644 --- a/src/nwfilter/nwfilter_gentech_driver.c +++ b/src/nwfilter/nwfilter_gentech_driver.c @@ -34,7 +34,7 @@ #include "nwfilter_gentech_driver.h" #include "nwfilter_ebiptables_driver.h" #include "nwfilter_learnipaddr.h" - +#include "virnetdev.h" #define VIR_FROM_THIS VIR_FROM_NWFILTER @@ -963,7 +963,7 @@ virNWFilterInstantiateFilterLate(virConnectPtr conn, if (rc) { /* something went wrong... 'DOWN' the interface */ if ((ifaceCheck(false, ifname, NULL, ifindex) < 0) || - (ifaceDown(ifname) < 0)) { + (virNetDevSetOnline(ifname, false) < 0)) { /* assuming interface disappeared... */ _virNWFilterTeardownFilter(ifname); } diff --git a/src/util/interface.c b/src/util/interface.c index 12bf7bc..913beb5 100644 --- a/src/util/interface.c +++ b/src/util/interface.c @@ -54,156 +54,6 @@ virReportErrorHelper(VIR_FROM_NET, code, __FILE__, \ __FUNCTION__, __LINE__, __VA_ARGS__) -#if __linux__ -static int -getFlags(int fd, const char *ifname, struct ifreq *ifr) { - - memset(ifr, 0, sizeof(*ifr)); - - if (virStrncpy(ifr->ifr_name, - ifname, strlen(ifname), sizeof(ifr->ifr_name)) == NULL) - return -ENODEV; - - if (ioctl(fd, SIOCGIFFLAGS, ifr) < 0) - return -errno; - - return 0; -} - - -/** - * ifaceGetFlags - * - * @ifname : name of the interface - * @flags : pointer to short holding the flags on success - * - * Get the flags of the interface. Returns 0 on success, -errno on failure. - */ -int -ifaceGetFlags(const char *ifname, short *flags) { - struct ifreq ifr; - int rc; - int fd = socket(PF_PACKET, SOCK_DGRAM, 0); - - if (fd < 0) - return -errno; - - rc = getFlags(fd, ifname, &ifr); - - *flags = ifr.ifr_flags; - - VIR_FORCE_CLOSE(fd); - - return rc; -} - - -int -ifaceIsUp(const char *ifname, bool *up) { - short flags = 0; - int rc = ifaceGetFlags(ifname, &flags); - - if (rc < 0) - return rc; - - *up = ((flags & IFF_UP) == IFF_UP); - - return 0; -} -#else - -/* Note: Showstopper on cygwin is only missing PF_PACKET */ - -int - -ifaceGetFlags(const char *ifname ATTRIBUTE_UNUSED, - short *flags ATTRIBUTE_UNUSED) { - ifaceError(VIR_ERR_INTERNAL_ERROR, "%s", - _("ifaceGetFlags is not supported on non-linux platforms")); - return -ENOSYS; -} - -int -ifaceIsUp(const char *ifname ATTRIBUTE_UNUSED, - bool *up ATTRIBUTE_UNUSED) { - - ifaceError(VIR_ERR_INTERNAL_ERROR, "%s", - _("ifaceIsUp is not supported on non-linux platforms")); - return -ENOSYS; -} - -#endif /* __linux__ */ - -/* - * chgIfaceFlags: Change flags on an interface - * - * @ifname : name of the interface - * @flagclear : the flags to clear - * @flagset : the flags to set - * - * The new flags of the interface will be calculated as - * flagmask = (~0 ^ flagclear) - * newflags = (curflags & flagmask) | flagset; - * - * Returns 0 on success, -errno on failure. - */ -#ifdef __linux__ -static int chgIfaceFlags(const char *ifname, short flagclear, short flagset) { - struct ifreq ifr; - int rc = 0; - short flags; - short flagmask = (~0 ^ flagclear); - int fd = socket(PF_PACKET, SOCK_DGRAM, 0); - - if (fd < 0) - return -errno; - - rc = getFlags(fd, ifname, &ifr); - if (rc < 0) - goto cleanup; - - flags = (ifr.ifr_flags & flagmask) | flagset; - - if (ifr.ifr_flags != flags) { - ifr.ifr_flags = flags; - - if (ioctl(fd, SIOCSIFFLAGS, &ifr) < 0) - rc = -errno; - } - -cleanup: - VIR_FORCE_CLOSE(fd); - return rc; -} - - -/* - * ifaceCtrl - * @name: name of the interface - * @up: true (1) for up, false (0) for down - * - * Function to control if an interface is activated (up, 1) or not (down, 0) - * - * Returns 0 on success, -errno on failure. - */ -int -ifaceCtrl(const char *name, bool up) -{ - return chgIfaceFlags(name, - (up) ? 0 : IFF_UP, - (up) ? IFF_UP : 0); -} - -#else - -int -ifaceCtrl(const char *name ATTRIBUTE_UNUSED, bool up ATTRIBUTE_UNUSED) -{ - return -ENOSYS; -} - -#endif /* __linux__ */ - /** * ifaceCheck * diff --git a/src/util/interface.h b/src/util/interface.h index 3603c68..5068adb 100644 --- a/src/util/interface.h +++ b/src/util/interface.h @@ -29,18 +29,6 @@ struct nlattr; # define NET_SYSFS "/sys/class/net/" -int ifaceGetFlags(const char *name, short *flags); -int ifaceIsUp(const char *name, bool *up); - -int ifaceCtrl(const char *name, bool up); - -static inline int ifaceUp(const char *name) { - return ifaceCtrl(name, true); -} - -static inline int ifaceDown(const char *name) { - return ifaceCtrl(name, false); -} int ifaceCheck(bool reportError, const char *ifname, const unsigned char *macaddr, int ifindex); diff --git a/src/util/macvtap.c b/src/util/macvtap.c index c4629ed..bd3c33c 100644 --- a/src/util/macvtap.c +++ b/src/util/macvtap.c @@ -50,6 +50,7 @@ #include "util.h" #include "macvtap.h" +#include "virnetdev.h" VIR_ENUM_IMPL(virMacvtapMode, VIR_MACVTAP_MODE_LAST, "vepa", @@ -342,13 +343,7 @@ create_name: goto link_del_exit; } - rc = ifaceUp(cr_ifname); - if (rc < 0) { - virReportSystemError(errno, - _("cannot 'up' interface %s -- another " - "macvtap device may be 'up' and have the same " - "MAC address"), - cr_ifname); + if (virNetDevSetOnline(cr_ifname, true) < 0) { rc = -1; goto disassociate_exit; } @@ -1129,8 +1124,11 @@ vpAssociatePortProfileId(const char *macvtap_ifname, (vmOp == VIR_VM_OP_MIGRATE_IN_START) ? PREASSOCIATE_RR : ASSOCIATE); - if (vmOp != VIR_VM_OP_MIGRATE_IN_START && !rc) - ifaceUp(linkdev); + if (vmOp != VIR_VM_OP_MIGRATE_IN_START && !rc) { + /* XXX bogus error handling */ + ignore_value(virNetDevSetOnline(linkdev, true)); + } + break; } @@ -1180,7 +1178,7 @@ vpDisassociatePortProfileId(const char *macvtap_ifname, /* avoid disassociating twice */ if (vmOp == VIR_VM_OP_MIGRATE_IN_FINISH) break; - ifaceDown(linkdev); + ignore_value(virNetDevSetOnline(linkdev, false)); rc = doPortProfileOp8021Qbh(linkdev, macvtap_macaddr, virtPort, NULL, DISASSOCIATE); break; -- 1.7.6.4 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list