]> xenbits.xensource.com Git - libvirt.git/commitdiff
virmacaddr: Track if MAC address is autogenerated
authorMichal Privoznik <mprivozn@redhat.com>
Mon, 2 Oct 2017 08:47:27 +0000 (10:47 +0200)
committerMichal Privoznik <mprivozn@redhat.com>
Wed, 4 Oct 2017 15:10:12 +0000 (17:10 +0200)
It will come handy to know if the MAC address was generated (e.g.
during XML parse) or if it was parsed since provided by user in
the XML.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Erik Skultety <eskultet@redhat.com>
src/util/virmacaddr.c
src/util/virmacaddr.h
tests/bhyveargv2xmlmock.c
tests/bhyvexml2argvmock.c

index 7afe032b9c8300bb98df2fabbc04ed1512c7d02e..409fdc34d5ee07e7e97aec70b231e8f47c9b0130 100644 (file)
@@ -107,6 +107,7 @@ void
 virMacAddrSet(virMacAddrPtr dst, const virMacAddr *src)
 {
     memcpy(dst, src, sizeof(*src));
+    dst->generated = false;
 }
 
 /**
@@ -120,6 +121,7 @@ void
 virMacAddrSetRaw(virMacAddrPtr dst, const unsigned char src[VIR_MAC_BUFLEN])
 {
     memcpy(dst->addr, src, VIR_MAC_BUFLEN);
+    dst->generated = false;
 }
 
 /**
@@ -149,6 +151,7 @@ virMacAddrParse(const char* str, virMacAddrPtr addr)
 {
     size_t i;
 
+    addr->generated = false;
     errno = 0;
     for (i = 0; i < VIR_MAC_BUFLEN; i++) {
         char *end_ptr;
@@ -217,6 +220,7 @@ virMacAddrParseHex(const char *str, virMacAddrPtr addr)
         str[VIR_MAC_HEXLEN])
         return -1;
 
+    addr->generated = false;
     for (i = 0; i < VIR_MAC_BUFLEN; i++)
         addr->addr[i] = (virHexToBin(str[2 * i]) << 4 |
                          virHexToBin(str[2 * i + 1]));
@@ -232,6 +236,7 @@ void virMacAddrGenerate(const unsigned char prefix[VIR_MAC_PREFIX_BUFLEN],
     addr->addr[3] = virRandomBits(8);
     addr->addr[4] = virRandomBits(8);
     addr->addr[5] = virRandomBits(8);
+    addr->generated = true;
 }
 
 /* The low order bit of the first byte is the "multicast" bit. */
index f4f5e2ce117288f7b5ee5f72be92dc646e786214..ef4285d6392744d653604d61b3274e1751401ee6 100644 (file)
@@ -36,6 +36,8 @@ typedef virMacAddr *virMacAddrPtr;
 
 struct _virMacAddr {
     unsigned char addr[VIR_MAC_BUFLEN];
+    bool generated; /* True if MAC address was autogenerated,
+                       false otherwise. */
 };
 
 int virMacAddrCompare(const char *mac1, const char *mac2);
index 1f08bebb7b4b3bddda63b63b6293276172bc90cd..dd25f4e13a6d0c3ddc0079957d8b430eebddddbe 100644 (file)
@@ -16,6 +16,7 @@ virMacAddrGenerate(const unsigned char prefix[VIR_MAC_PREFIX_BUFLEN],
     addr->addr[3] = 0;
     addr->addr[4] = 0;
     addr->addr[5] = 0;
+    addr->generated = true;
 }
 
 int
index 7afa0e34c43ca0ff6f8cecccfb4ca5a402fccd27..bec7f902aa93e9df3ebe06bc49b29fe066891ccb 100644 (file)
@@ -17,6 +17,7 @@ void virMacAddrGenerate(const unsigned char prefix[VIR_MAC_PREFIX_BUFLEN],
     addr->addr[3] = 0;
     addr->addr[4] = 0;
     addr->addr[5] = 0;
+    addr->generated = true;
 }
 
 int virNetDevTapCreateInBridgePort(const char *brname ATTRIBUTE_UNUSED,