@Override public boolean equals(Object obj) { if (obj == this) { return true; } if (!this.getClass().isInstance(obj)) { return false; } SnapHeader other = (SnapHeader) obj; return oui.equals(other.oui) && protocolId.equals(other.protocolId); }
@Override protected List<byte[]> getRawFields() { List<byte[]> rawFields = new ArrayList<byte[]>(); rawFields.add(oui.valueAsByteArray()); rawFields.add(ByteArrays.toByteArray(protocolId.value())); return rawFields; }
/** * @param value value * @return a Oui object. */ public static Oui getInstance(Integer value) { if (registry.containsKey(value)) { return registry.get(value); } else { return new Oui(value, "unknown"); } }
/** * @param value value * @return a Oui object. */ public static Oui getInstance(byte[] value) { if (value.length != 3) { throw new IllegalArgumentException("value length must be 3"); } return getInstance(ByteArrays.getInt(new byte[] {(byte) 0, value[0], value[1], value[2]}, 0)); }
@Override protected int calcHashCode() { int result = 17; result = 31 * result + oui.hashCode(); result = 31 * result + protocolId.hashCode(); return result; } }
/** * @param version version * @return a Oui object. */ public static Oui register(Oui version) { return registry.put(version.value(), version); }
private SnapHeader(byte[] rawData, int offset, int length) throws IllegalRawDataException { if (length < SNAP_HEADER_SIZE) { StringBuilder sb = new StringBuilder(200); sb.append("The data is too short to build a SNAP header(") .append(SNAP_HEADER_SIZE) .append(" bytes). data: ") .append(ByteArrays.toHexString(rawData, " ")) .append(", offset: ") .append(offset) .append(", length: ") .append(length); throw new IllegalRawDataException(sb.toString()); } this.oui = Oui.getInstance(ByteArrays.getSubArray(rawData, offset + OUI_OFFSET, 3)); this.protocolId = EtherType.getInstance(ByteArrays.getShort(rawData, offset + PROTOCOL_ID_OFFSET)); }
@Override protected int calcHashCode() { int result = 17; result = 31 * result + oui.hashCode(); result = 31 * result + protocolId.hashCode(); return result; } }
@Override protected List<byte[]> getRawFields() { List<byte[]> rawFields = new ArrayList<byte[]>(); rawFields.add(oui.valueAsByteArray()); rawFields.add(ByteArrays.toByteArray(protocolId.value())); return rawFields; }
@Override public boolean equals(Object obj) { if (obj == this) { return true; } if (!this.getClass().isInstance(obj)) { return false; } SnapHeader other = (SnapHeader) obj; return oui.equals(other.oui) && protocolId.equals(other.protocolId); }
/** */ @Override public String valueAsString() { return ByteArrays.toHexString(value(), "-").substring(3); }
/** @return OUI */ public Oui getOui() { return Oui.getInstance(ByteArrays.getInt(getAddress(), 0) >>> 8); }
/** * @param value value * @return a Oui object. */ public static Oui getInstance(Integer value) { if (registry.containsKey(value)) { return registry.get(value); } else { return new Oui(value, "unknown"); } }
public static byte[] convertToEui64(MacAddress macAddr) { byte[] eui64 = new byte[8]; byte[] oui = macAddr.getOui().valueAsByteArray(); oui[0] = (byte)(oui[0] ^ 0x02); System.arraycopy(oui, 0, eui64, 0, 3); eui64[3] = (byte)0xFF; eui64[4] = (byte)0xFE; System.arraycopy(macAddr.getAddress(), 3, eui64, 5, 3); return eui64; }
public boolean isVirtualMacAddress(MacAddress macAddress) { return macAddress.getOui().equals(VIRTUAL_MACADDRESS_OUI); }
/** @return a byte array representation of this value. */ public byte[] valueAsByteArray() { return ByteArrays.getSubArray(ByteArrays.toByteArray(value()), 1, 3); }
/** * @param value value * @return a Oui object. */ public static Oui getInstance(byte[] value) { if (value.length != 3) { throw new IllegalArgumentException("value length must be 3"); } return getInstance(ByteArrays.getInt(new byte[] {(byte) 0, value[0], value[1], value[2]}, 0)); }
public MacAddress generateVirtualMacAddress() { int serialNumber; synchronized (counterLock) { if (counter > MAX_SERIAL_NUMBER) { throw new AssertionError("too many MAC addresses."); } serialNumber = counter; counter++; } // TODO IPv6 byte[] rawAddr = new byte[6]; System.arraycopy( VIRTUAL_MACADDRESS_OUI.valueAsByteArray(), 0, rawAddr, 0, 3 ); System.arraycopy( ByteArrays.toByteArray(serialNumber), 1, rawAddr, 3, 3 ); MacAddress macAddr = MacAddress.getByAddress(rawAddr); return macAddr; }