checkArgument(icmpv6.getIcmpType() == ICMP6.NEIGHBOR_SOLICITATION, "ICMP6 type must be NEIGHBOR_SOLICITATION"); ipv6.setNextHeader(IPv6.PROTOCOL_ICMP6); ICMP6 icmp6 = new ICMP6(); icmp6.setIcmpType(ICMP6.NEIGHBOR_ADVERTISEMENT); icmp6.setIcmpCode(RESERVED_CODE); srcMac.toBytes()); icmp6.setPayload(nadv); ipv6.setPayload(icmp6); eth.setPayload(ipv6);
if (icmpv6.getIcmpType() == ICMP6.NEIGHBOR_SOLICITATION) { type = NeighbourMessageType.REQUEST; NeighborSolicitation nsol = (NeighborSolicitation) icmpv6.getPayload(); target = Ip6Address.valueOf(nsol.getTargetAddress()); } else if (icmpv6.getIcmpType() == ICMP6.NEIGHBOR_ADVERTISEMENT) { type = NeighbourMessageType.REPLY;
final ICMP6 icmp6 = (ICMP6) payload; sb.append("\nicmp6_type: "); sb.append(icmp6.getIcmpType()); sb.append("\nicmp6_code: "); sb.append(icmp6.getIcmpCode());
@Override public void process(PacketContext context) { // Stop processing if the packet has been handled, since we // can't do any more to it. if (context.isHandled()) { return; } InboundPacket pkt = context.inPacket(); Ethernet ethPkt = pkt.parsed(); if (ethPkt == null) { return; } if (ethPkt.getEtherType() == TYPE_ARP) { // handle ARP packets handlePacket(context); } else if (ethPkt.getEtherType() == TYPE_IPV6) { IPv6 ipv6 = (IPv6) ethPkt.getPayload(); if (ipv6.getNextHeader() == IPv6.PROTOCOL_ICMP6) { ICMP6 icmp6 = (ICMP6) ipv6.getPayload(); if (icmp6.getIcmpType() == NEIGHBOR_SOLICITATION || icmp6.getIcmpType() == NEIGHBOR_ADVERTISEMENT) { // handle ICMPv6 solicitations and advertisements (NDP) handlePacket(context); } } } } }
/** * Deserializer function for ICMPv6 packets. * * @return deserializer function */ public static Deserializer<ICMP6> deserializer() { return (data, offset, length) -> { checkInput(data, offset, length, HEADER_LENGTH); ICMP6 icmp6 = new ICMP6(); ByteBuffer bb = ByteBuffer.wrap(data, offset, length); icmp6.icmpType = bb.get(); icmp6.icmpCode = bb.get(); icmp6.checksum = bb.getShort(); Deserializer<? extends IPacket> deserializer; if (ICMP6.TYPE_DESERIALIZER_MAP.containsKey(icmp6.icmpType)) { deserializer = TYPE_DESERIALIZER_MAP.get(icmp6.icmpType); } else { deserializer = Data.deserializer(); } icmp6.payload = deserializer.deserialize(data, bb.position(), bb.limit() - bb.position()); icmp6.payload.setParent(icmp6); return icmp6; }; }
if (ipv6Pkt.getNextHeader() == IPv6.PROTOCOL_ICMP6) { ICMP6 icmp6Pkt = (ICMP6) ipv6Pkt.getPayload(); if (icmp6Pkt.getIcmpType() == NEIGHBOR_SOLICITATION || icmp6Pkt.getIcmpType() == NEIGHBOR_ADVERTISEMENT) {
ipv6.setHopLimit(NDP_HOP_LIMIT); ICMP6 icmp6 = new ICMP6(); icmp6.setIcmpType(ICMP6.NEIGHBOR_SOLICITATION); icmp6.setIcmpCode(RESERVED_CODE); icmp6.setPayload(ns); ipv6.setPayload(icmp6); ethernet.setPayload(ipv6);
ipv6.setHopLimit((byte) 255); ICMP6 icmp6 = new ICMP6(); icmp6.setIcmpType(ICMP6.NEIGHBOR_SOLICITATION); icmp6.setIcmpCode((byte) 0); icmp6.setPayload(ns); ipv6.setPayload(icmp6); ethernet.setPayload(ipv6);
if (icmpv6.getIcmpType() != ICMP6.NEIGHBOR_SOLICITATION) { return null; ipv6.setHopLimit((byte) 255); ICMP6 icmp6 = new ICMP6(); icmp6.setIcmpType(ICMP6.NEIGHBOR_ADVERTISEMENT); icmp6.setIcmpCode((byte) 0); srcMac); icmp6.setPayload(nadv); ipv6.setPayload(icmp6); eth.setPayload(ipv6);
ipv6.setHopLimit((byte) 255); ICMP6 icmp6 = new ICMP6(); icmp6.setIcmpType(ICMP6.NEIGHBOR_ADVERTISEMENT); icmp6.setIcmpCode((byte) 0); srcMac.toBytes()); icmp6.setPayload(nadv); ipv6.setPayload(icmp6); eth.setPayload(ipv6);
ipv6Reply.setNextHeader(IPv6.PROTOCOL_ICMP6); ICMP6 icmpv6Reply = new ICMP6(); icmpv6Reply.setPayload(ipv6Request.getPayload().getPayload()); icmpv6Reply.setIcmpType(ICMP6.ECHO_REPLY); icmpv6Reply.setIcmpCode((byte) 0); ipv6Reply.setPayload(icmpv6Reply);