From de9a267fece20d73efe27898f15028fd88aa8118 Mon Sep 17 00:00:00 2001 From: Philipp Marek Date: Wed, 7 Oct 2015 11:09:00 +0200 Subject: [PATCH] Shorter implementation of random_ether_addr(). --- src/PVE/Tools.pm | 20 ++++++-------------- 1 file changed, 6 insertions(+), 14 deletions(-) diff --git a/src/PVE/Tools.pm b/src/PVE/Tools.pm index 3f3958e..cda0797 100644 --- a/src/PVE/Tools.pm +++ b/src/PVE/Tools.pm @@ -940,21 +940,13 @@ sub random_ether_addr { my $rand = Digest::SHA::sha1_hex($$, rand(), $seconds, $microseconds); - my $mac = ''; - for (my $i = 0; $i < 6; $i++) { - my $ss = hex(substr($rand, $i*2, 2)); - if (!$i) { - $ss &= 0xfe; # clear multicast - $ss |= 2; # set local id - } - $ss = sprintf("%02X", $ss); +# clear multicast, set local id + vec($rand, 0, 8) = (vec($rand, 0, 8) & 0xfe) | 2; - if (!$i) { - $mac .= "$ss"; - } else { - $mac .= ":$ss"; - } - } + my $mac = sprintf("%02X:" x 6, unpack("C6", $rand)); + +# remove superfluous ":" at end + chop($mac); return $mac; } -- 2.39.2