package com.netifera.platform.util.addresses;
/*
* The distinction between EUI-48 and MAC-48 identifiers is purely semantic:
* MAC-48 is used for network hardware; EUI-48 is used to identify other devices
* and software. (Thus, by definition, an EUI-48 is not in fact a "MAC address",
* although it is syntactically indistinguishable from one and assigned from the
* same numbering space.)
*/
public /*final*/ class MAC48Address extends AbstractMACAddress
implements Comparable<MAC48Address> {
private static final long serialVersionUID = 512830668584924625L;
public static final int MACLENGTH = 6;
public static final MAC48Address ANY =
new MAC48Address("00:00:00:00:00:00");
// null identifier
public static final MAC48Address BROADCAST =
new MAC48Address("ff:ff:ff:ff:ff:ff");
public MAC48Address(byte[] bytes) {
super(MACLENGTH, bytes);
}
public MAC48Address(String address) {
super(MACLENGTH, address);
}
public static String bytesToString(final byte[] bytes) {
return AbstractMACAddress.bytesToString(MACLENGTH, bytes);
}
public int compareTo(final MAC48Address anotherAddress) {
int val;
for (int i = 0; i < MACLENGTH; i++) {
val = (bytes[i] & 0xff) - (anotherAddress.bytes[i] & 0xff);
if (val != 0) {
return val;
}
}
return 0;
}
public MAC48Address newInstance() {
return new MAC48Address(bytes);
}
public EUI64Address toEUI64EncapsulatedAddress() {
byte[] eui = new byte[EUI64Address.MACLENGTH];
System.arraycopy(bytes, 0, eui, 0, OUI_SIZE);
eui[OUI_SIZE] = (byte) 0xff;
eui[OUI_SIZE + 1] = (byte) 0xff;
System.arraycopy(bytes, OUI_SIZE, eui, OUI_SIZE + 2,
MACLENGTH - OUI_SIZE);
return new EUI64Address(eui);
}
}