protected BasePacketHandler handleIcmp6Packet( PacketWrapping<ICMP6Packet> pw, UpdateContext ctx ) {
		if( !(ipAddress instanceof IP6Address) ) return this;
		IP6Address ip6Address = (IP6Address)ipAddress;
		
		final ICMP6Packet icmp6Packet = pw.payload;
		final IP6Address sourceAddress = icmp6Packet.ip6Packet.getSourceAddress();
		final long sourceBitAddress = ((Message)pw.parent.parent.parent.payload).sourceAddress;
		
		final int ethernetIp6HeaderSize = 14+40;
		final byte icmp6Type = icmp6Packet.getType();
		
		switch( icmp6Type ) {
		case ICMP6Packet.NEIGHBOR_SOLICITATION: {
			if( !icmp6Packet.checkNeighborSolicitationTargetAddress(ip6Address) ) break;
			// Otherwise we gotta respond!!!
			
			// FINDINGS (based on pinging from an Ubuntu 12.04 machine
			// and watching the packets go by in Wireshark)
			// ttyl = 64 DOES NOT WORK, even if everything else is right.  255 works.
			// router can be zero, override can be zero.
			
			int icmpLength = ICMP6Packet.NEIGHBOR_ADVERTISEMENT_SIZE;
			
			byte[] response = new byte[ethernetIp6HeaderSize+icmpLength];
			int off = 0;
			off = encodeIcmp6ResponseHeaders( pw, icmpLength, response, off );
			off = ICMP6Packet.encodeNeighborAdvertisement(ip6Address, sourceAddress, ip6Address, isRouter(), true, false, ethernetAddress, response, off);
			outsendEthernet( response, 0, response.length, sourceBitAddress, "ICMPv6 neighbor advertisement", ctx );
			break;
		} case ICMP6Packet.PING6: {
			// See RFC 4443: http://tools.ietf.org/html/rfc4443#page-13
			// Identifier and sequence are arbitrary, so for echo response
			// purposes we'll just treat them as part of the data.
			byte[] response = new byte[BlobUtil.toInt(ethernetIp6HeaderSize+icmp6Packet.getSize())];
			int off = 0;
			off = encodeIcmp6ResponseHeaders( pw, BlobUtil.toInt(icmp6Packet.getSize()), response, off );
			off = ICMP6Packet.encodePong(ip6Address, sourceAddress, icmp6Packet, response, off);
			outsendEthernet( response, 0, response.length, sourceBitAddress, "ICMPv6 echo response", ctx );
			break;
		} default:
			if( debug ) {
				System.err.println(String.format("Ignoring unsupported ICMPv6 packet type: %02x", icmp6Type));
			}
		}
		
		return this;
	}