[libvirt] [PATCH 06/33] Add an API for retrieving the MAC address of an interface

Daniel P. Berrange berrange at redhat.com
Thu Nov 3 17:30:02 UTC 2011


From: "Daniel P. Berrange" <berrange at redhat.com>

* src/util/bridge.c, src/util/bridge.h: Add virNetDevGetMAC
---
 src/util/bridge.c |   35 +++++++++++++++++++++++++++++++++++
 src/util/bridge.h |    3 +++
 2 files changed, 38 insertions(+), 0 deletions(-)

diff --git a/src/util/bridge.c b/src/util/bridge.c
index 247ce93..3a7012c 100644
--- a/src/util/bridge.c
+++ b/src/util/bridge.c
@@ -358,6 +358,41 @@ cleanup:
 }
 
 /**
+ * virNetDevGetMAC:
+ * @ifname: interface name to set MTU for
+ * @macaddr: MAC address (VIR_MAC_BUFLEN in size)
+ *
+ * This function gets the @macaddr for a given interface @ifname.
+ *
+ * Returns 0 in case of success or -1 on failure
+ */
+int virNetDevGetMAC(const char *ifname,
+                    unsigned char *macaddr)
+{
+    int fd = -1;
+    int ret = -1;
+    struct ifreq ifr;
+
+    if ((fd = virNetDevSetupControl(ifname, &ifr)) < 0)
+        return -1;
+
+    if (ioctl(fd, SIOCGIFHWADDR, &ifr) < 0) {
+        virReportSystemError(errno,
+                             _("Cannot get interface MAC on '%s'"),
+                             ifname);
+        goto cleanup;
+    }
+
+    memcpy(macaddr, ifr.ifr_hwaddr.sa_data, VIR_MAC_BUFLEN);
+
+    ret = 0;
+
+cleanup:
+    VIR_FORCE_CLOSE(fd);
+    return ret;
+}
+
+/**
  * virNetDevGetMTU:
  * @ifname: interface name get MTU for
  *
diff --git a/src/util/bridge.h b/src/util/bridge.h
index 0cc89c0..7504925 100644
--- a/src/util/bridge.h
+++ b/src/util/bridge.h
@@ -112,6 +112,9 @@ int virNetDevTapCreate(char **ifname,
 int virNetDevSetMAC(const char *ifname,
                     const unsigned char *macaddr)
     ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_RETURN_CHECK;
+int virNetDevGetMAC(const char *ifname,
+                    unsigned char *macaddr)
+    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_RETURN_CHECK;
 int virNetDevSetMTU(const char *ifname,
                     int mtu)
     ATTRIBUTE_NONNULL(1) ATTRIBUTE_RETURN_CHECK;
-- 
1.7.6.4




More information about the libvir-list mailing list