[libvirt] [PATCH v4] npiv: Auto-generate WWN if it's not specified
Eric Blake
eblake at redhat.com
Fri Feb 3 18:05:21 UTC 2012
On 02/03/2012 04:17 AM, Osier Yang wrote:
> The auto-generated WWN comply with the new addressing schema of WWN:
>
> <quote>
> the first nibble is either hex 5 or 6 followed by a 3-byte vendor
> identifier and 36 bits for a vendor-specified serial number.
> </quote>
>
> We choose hex 5 for the first nibble. And use Qumranet's OUI
> (00:1A:4A) as the 3-byte vendor indentifier. The last 36 bits
> are auto-generated.
>
> +++ b/src/libvirt_private.syms
> @@ -1374,6 +1374,7 @@ virPidFileDeletePath;
> # virrandom.h
> virRandomBits;
> virRandomInitialize;
> +virWWNGenerate;
This should be named with a virRandom prefix; I like
virRandomGenerateWWN
> +#define QUMRANET_OUI "001a4a"
> +
> +int virWWNGenerate(char **wwn) {
Formatting, I would do:
int
virRandomGenerateWWN(char **wwn)
{
> + int suffix[5];
> +
> + suffix[0] = virRandomBits(16);
Eep. That's a waste of random bits (generating a uint16_t for just 4 bits).
> + suffix[1] = virRandomBits(256);
And that's a usage error. virRandomBits takes an argument 1-64, not larger.
> + suffix[2] = virRandomBits(256);
> + suffix[3] = virRandomBits(256);
> + suffix[4] = virRandomBits(256);
> +
> + if (virAsprintf(wwn, "%x%s%x%02x%02x%02x%02x", 0x5, QUMRANET_OUI,
Why not just:
if (virAsprintf(wwn, "5" QUMRANET_OUI "%010llx",
(unsigned long long) virRandomBits(36)) < 0)
and skip going through a temporary array.
--
Eric Blake eblake at redhat.com +1-919-301-3266
Libvirt virtualization library http://libvirt.org
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 620 bytes
Desc: OpenPGP digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20120203/cb13762b/attachment-0001.sig>
More information about the libvir-list
mailing list