private IcmpV6NeighborAdvertisementPacket(Builder builder) { if (builder == null || builder.targetAddress == null || builder.options == null) { StringBuilder sb = new StringBuilder(); sb.append("builder: ") .append(builder) .append(" builder.targetAddress: ") .append(builder.targetAddress) .append(" builder.options: ") .append(builder.options); throw new NullPointerException(sb.toString()); } this.header = new IcmpV6NeighborAdvertisementHeader(builder); }
@Override protected String buildString() { StringBuilder sb = new StringBuilder(); String ls = System.getProperty("line.separator"); sb.append("[ICMPv6 Neighbor Advertisement Header (") .append(length()) .append(" bytes)]") .append(ls); sb.append(" Router flag: ").append(routerFlag).append(ls); sb.append(" Solicited flag: ").append(solicitedFlag).append(ls); sb.append(" Override flag: ").append(overrideFlag).append(ls); sb.append(" Reserved: ").append(reserved).append(ls); sb.append(" Target Address: ").append(targetAddress).append(ls); for (IpV6NeighborDiscoveryOption opt : options) { sb.append(" Option: ").append(opt).append(ls); } return sb.toString(); }
private static void cacheByNa(Packet packet, NdpCache ndpCache) { IcmpV6NeighborAdvertisementPacket naPacket = packet.get(IcmpV6NeighborAdvertisementPacket.class); InetAddress ipAddr = naPacket.getHeader().getTargetAddress(); MacAddress macAddr = null; for (IpV6NeighborDiscoveryOption opt: naPacket.getHeader().getOptions()) { if (opt.getType().equals(IpV6NeighborDiscoveryOptionType.TARGET_LINK_LAYER_ADDRESS)) { macAddr = ((IpV6NeighborDiscoveryTargetLinkLayerAddressOption)opt).getLinkLayerAddressAsMacAddress(); } } if (macAddr == null) { return; } // According to RFC 2461, If no entry exists, the advertisement SHOULD be silently discarded. // But cache it here with no check for entry existance. NeighborDiscoveryHelper.cache(ndpCache, ipAddr, macAddr); }
@Override protected String buildString() { StringBuilder sb = new StringBuilder(); String ls = System.getProperty("line.separator"); sb.append("[ICMPv6 Neighbor Advertisement Header (") .append(length()) .append(" bytes)]") .append(ls); sb.append(" Router flag: ").append(routerFlag).append(ls); sb.append(" Solicited flag: ").append(solicitedFlag).append(ls); sb.append(" Override flag: ").append(overrideFlag).append(ls); sb.append(" Reserved: ").append(reserved).append(ls); sb.append(" Target Address: ").append(targetAddress).append(ls); for (IpV6NeighborDiscoveryOption opt : options) { sb.append(" Option: ").append(opt).append(ls); } return sb.toString(); }
private IcmpV6NeighborAdvertisementPacket(Builder builder) { if (builder == null || builder.targetAddress == null || builder.options == null) { StringBuilder sb = new StringBuilder(); sb.append("builder: ") .append(builder) .append(" builder.targetAddress: ") .append(builder.targetAddress) .append(" builder.options: ") .append(builder.options); throw new NullPointerException(sb.toString()); } this.header = new IcmpV6NeighborAdvertisementHeader(builder); }
private IcmpV6NeighborAdvertisementPacket(byte[] rawData, int offset, int length) throws IllegalRawDataException { this.header = new IcmpV6NeighborAdvertisementHeader(rawData, offset, length); }
@Test public void testGetHeader() { IcmpV6NeighborAdvertisementHeader h = packet.getHeader(); assertEquals(targetAddress, h.getTargetAddress()); assertEquals(reserved, h.getReserved()); Iterator<IpV6NeighborDiscoveryOption> iter = h.getOptions().iterator(); for (IpV6NeighborDiscoveryOption expected : options) { IpV6NeighborDiscoveryOption actual = iter.next(); assertEquals(0, p.getHeader().getReserved()); assertEquals(536870911, p.getHeader().getReserved());
private IcmpV6NeighborAdvertisementPacket(byte[] rawData, int offset, int length) throws IllegalRawDataException { this.header = new IcmpV6NeighborAdvertisementHeader(rawData, offset, length); }