]>
git.argeo.org Git - lgpl/argeo-commons.git/blob - api/uuid/MacAddressUuidFactory.java
1 package org
.argeo
.api
.uuid
;
3 import java
.net
.InetAddress
;
4 import java
.net
.NetworkInterface
;
5 import java
.net
.SocketException
;
6 import java
.net
.UnknownHostException
;
10 * An {@link UUID} factory whose node id (for time based UUIDs) is the hardware
11 * MAC address as specified in RFC4122.
13 * @see https://datatracker.ietf.org/doc/html/rfc4122.html#section-4.1.6
15 public class MacAddressUuidFactory
extends ConcurrentUuidFactory
{
16 public final static UuidFactory DEFAULT
= new MacAddressUuidFactory();
18 public MacAddressUuidFactory() {
22 public MacAddressUuidFactory(long initialClockRange
) {
23 super(initialClockRange
, localHardwareAddressAsNodeId());
26 public static byte[] localHardwareAddressAsNodeId() {
27 InetAddress localHost
;
29 localHost
= InetAddress
.getLocalHost();
30 NetworkInterface nic
= NetworkInterface
.getByInetAddress(localHost
);
31 return hardwareAddressToNodeId(nic
);
32 } catch (UnknownHostException
| SocketException e
) {
33 throw new IllegalStateException(e
);
38 public static byte[] hardwareAddressToNodeId(NetworkInterface nic
) throws SocketException
{
39 byte[] hardwareAddress
= nic
.getHardwareAddress();
41 byte[] arr
= new byte[length
];
42 for (int i
= 0; i
< length
; i
++) {
43 arr
[i
] = hardwareAddress
[length
- 1 - i
];