From: Michal Privoznik Date: Mon, 2 Oct 2017 08:47:27 +0000 (+0200) Subject: virmacaddr: Track if MAC address is autogenerated X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=7e62c4cd26d;p=libvirt.git virmacaddr: Track if MAC address is autogenerated 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 Reviewed-by: Erik Skultety --- diff --git a/src/util/virmacaddr.c b/src/util/virmacaddr.c index 7afe032b9c..409fdc34d5 100644 --- a/src/util/virmacaddr.c +++ b/src/util/virmacaddr.c @@ -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. */ diff --git a/src/util/virmacaddr.h b/src/util/virmacaddr.h index f4f5e2ce11..ef4285d639 100644 --- a/src/util/virmacaddr.h +++ b/src/util/virmacaddr.h @@ -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); diff --git a/tests/bhyveargv2xmlmock.c b/tests/bhyveargv2xmlmock.c index 1f08bebb7b..dd25f4e13a 100644 --- a/tests/bhyveargv2xmlmock.c +++ b/tests/bhyveargv2xmlmock.c @@ -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 diff --git a/tests/bhyvexml2argvmock.c b/tests/bhyvexml2argvmock.c index 7afa0e34c4..bec7f902aa 100644 --- a/tests/bhyvexml2argvmock.c +++ b/tests/bhyvexml2argvmock.c @@ -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,