@Override public IpV6NeighborDiscoverySourceLinkLayerAddressOption build() { return new IpV6NeighborDiscoverySourceLinkLayerAddressOption(this); } }
@Override public String toString() { StringBuilder sb = new StringBuilder(); sb.append("[Type: ").append(getType()); sb.append("] [Length: ").append(getLengthAsInt()).append(" (").append(getLengthAsInt() * 8); sb.append(" bytes)] [linkLayerAddress: ").append(ByteArrays.toHexString(linkLayerAddress, " ")); sb.append("]"); return sb.toString(); }
@Override public IpV6NeighborDiscoveryOption newInstance(byte[] rawData, int offset, int length) throws IllegalRawDataException { return IpV6NeighborDiscoverySourceLinkLayerAddressOption.newInstance( rawData, offset, length); }
private IpV6NeighborDiscoverySourceLinkLayerAddressOption(Builder builder) { if (builder == null || builder.linkLayerAddress == null) { StringBuilder sb = new StringBuilder(); sb.append("builder: ") .append(builder) .append(" builder.linkLayerAddress: ") .append(builder.linkLayerAddress); throw new NullPointerException(sb.toString()); } this.linkLayerAddress = new byte[builder.linkLayerAddress.length]; System.arraycopy( builder.linkLayerAddress, 0, this.linkLayerAddress, 0, builder.linkLayerAddress.length); if (builder.correctLengthAtBuild) { if (length() % 8 != 0) { StringBuilder sb = new StringBuilder(); sb.append("linkLayerAddress's length is invalid. linkLayerAddress: ") .append(ByteArrays.toHexString(linkLayerAddress, " ")); throw new IllegalArgumentException(sb.toString()); } this.length = (byte) (length() / 8); } else { this.length = builder.length; } }
private static void cacheByNs(Packet packet, NdpCache ndpCache) { IpV6Packet ipv6Packet = packet.get(IpV6Packet.class); if (ipv6Packet == null) { return; } Inet6Address srcAddr = ipv6Packet.getHeader().getSrcAddr(); if (srcAddr.equals(IpV6Helper.UNSPECIFIED_ADDRESS)) { return; } IcmpV6NeighborSolicitationPacket nsPacket = packet.get(IcmpV6NeighborSolicitationPacket.class); IpV6NeighborDiscoverySourceLinkLayerAddressOption srcLinkOpt = null; for (IpV6NeighborDiscoveryOption opt: nsPacket.getHeader().getOptions()) { if (opt.getType().equals(IpV6NeighborDiscoveryOptionType.SOURCE_LINK_LAYER_ADDRESS)) { srcLinkOpt = (IpV6NeighborDiscoverySourceLinkLayerAddressOption)opt; break; } } if (srcLinkOpt == null) { return; } // if new, isRouter flag of Neighbor Cache is false. // if update, isRouter is not changed. NeighborDiscoveryHelper.cache(ndpCache, srcAddr, srcLinkOpt.getLinkLayerAddressAsMacAddress()); }
@Override public IpV6NeighborDiscoveryOption newInstance(byte[] rawData, int offset, int length) throws IllegalRawDataException { return IpV6NeighborDiscoverySourceLinkLayerAddressOption.newInstance( rawData, offset, length); }
private IpV6NeighborDiscoverySourceLinkLayerAddressOption(Builder builder) { if (builder == null || builder.linkLayerAddress == null) { StringBuilder sb = new StringBuilder(); sb.append("builder: ") .append(builder) .append(" builder.linkLayerAddress: ") .append(builder.linkLayerAddress); throw new NullPointerException(sb.toString()); } this.linkLayerAddress = new byte[builder.linkLayerAddress.length]; System.arraycopy( builder.linkLayerAddress, 0, this.linkLayerAddress, 0, builder.linkLayerAddress.length); if (builder.correctLengthAtBuild) { if (length() % 8 != 0) { StringBuilder sb = new StringBuilder(); sb.append("linkLayerAddress's length is invalid. linkLayerAddress: ") .append(ByteArrays.toHexString(linkLayerAddress, " ")); throw new IllegalArgumentException(sb.toString()); } this.length = (byte) (length() / 8); } else { this.length = builder.length; } }
throw new IllegalRawDataException(sb.toString()); if (rawData[TYPE_OFFSET + offset] != getType().value()) { StringBuilder sb = new StringBuilder(100); sb.append("The type must be: ") .append(getType().valueAsString()) .append(" rawData: ") .append(ByteArrays.toHexString(rawData, " ")) int lengthInByte = getLengthAsInt() * 8; if (length < lengthInByte) { StringBuilder sb = new StringBuilder(100);
/** * A static factory method. This method validates the arguments by {@link * ByteArrays#validateBounds(byte[], int, int)}, which may throw exceptions undocumented here. * * @param rawData rawData * @param offset offset * @param length length * @return a new IpV6NeighborDiscoverySourceLinkLayerAddressOption object. * @throws IllegalRawDataException if parsing the raw data fails. */ public static IpV6NeighborDiscoverySourceLinkLayerAddressOption newInstance( byte[] rawData, int offset, int length) throws IllegalRawDataException { ByteArrays.validateBounds(rawData, offset, length); return new IpV6NeighborDiscoverySourceLinkLayerAddressOption(rawData, offset, length); }
@Override public String toString() { StringBuilder sb = new StringBuilder(); sb.append("[Type: ").append(getType()); sb.append("] [Length: ").append(getLengthAsInt()).append(" (").append(getLengthAsInt() * 8); sb.append(" bytes)] [linkLayerAddress: ").append(ByteArrays.toHexString(linkLayerAddress, " ")); sb.append("]"); return sb.toString(); }
@Override public IpV6NeighborDiscoverySourceLinkLayerAddressOption build() { return new IpV6NeighborDiscoverySourceLinkLayerAddressOption(this); } }
throw new IllegalRawDataException(sb.toString()); if (rawData[TYPE_OFFSET + offset] != getType().value()) { StringBuilder sb = new StringBuilder(100); sb.append("The type must be: ") .append(getType().valueAsString()) .append(" rawData: ") .append(ByteArrays.toHexString(rawData, " ")) int lengthInByte = getLengthAsInt() * 8; if (length < lengthInByte) { StringBuilder sb = new StringBuilder(100);
/** * A static factory method. This method validates the arguments by {@link * ByteArrays#validateBounds(byte[], int, int)}, which may throw exceptions undocumented here. * * @param rawData rawData * @param offset offset * @param length length * @return a new IpV6NeighborDiscoverySourceLinkLayerAddressOption object. * @throws IllegalRawDataException if parsing the raw data fails. */ public static IpV6NeighborDiscoverySourceLinkLayerAddressOption newInstance( byte[] rawData, int offset, int length) throws IllegalRawDataException { ByteArrays.validateBounds(rawData, offset, length); return new IpV6NeighborDiscoverySourceLinkLayerAddressOption(rawData, offset, length); }