From 268085c3bd09d3b98979134226494400abdf9d98 Mon Sep 17 00:00:00 2001 From: "Daniel P. Berrange" Date: Wed, 2 Nov 2011 16:10:56 +0000 Subject: [PATCH] Remove ifaceUp, ifaceDown, ifaceCtrl & ifaceIsUp APIs 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 a30db17726..f61aa30b57 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 78919838b4..899bd322fd 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 12bf7bc873..913beb569c 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 3603c68f03..5068adb535 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 d5791a2223..bc2352082d 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) ? VIR_NETDEV_VPORT_PROFILE_LINK_OP_PREASSOCIATE_RR : VIR_NETDEV_VPORT_PROFILE_LINK_OP_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, VIR_NETDEV_VPORT_PROFILE_LINK_OP_DISASSOCIATE);