def _sendArpReply(self, packet): reply = EthernetFrame(dst = packet.src, src = TapPacketCodec.ETHER_ADDR_ANY, type = EthernetFrame.TYPE_ARP, payload = ARPPacket(htype = ARPPacket.HTYPE_ETHERNET, ptype = ARPPacket.PTYPE_IPV4, hlen = ARPPacket.HLEN_ETHERNET, plen = ARPPacket.PLEN_IPV4, oper = ARPPacket.OPER_REPLY, sha = TapPacketCodec.ETHER_ADDR_REMOTE, spa = packet.payload.tpa, tha = packet.payload.sha, tpa = packet.payload.spa)) self._harness.char_dev.send(reply.encode())
def _sendNeighborAdvertisement(self, packet): reply = EthernetFrame( dst = packet.payload.payload.payload.src_lladdr, src = TapPacketCodec.ETHER_ADDR_ANY, type = EthernetFrame.TYPE_IPV6, payload = IPv6Packet( src = socket.inet_pton(self.addr.af, self.addr.remote), dst = packet.payload.src, proto = IPv6Packet.PROTO_ICMPV6, payload = ICMPV6Packet( type = ICMPV6Packet.TYPE_NEIGHBOR_ADVERTISMENT, payload = ICMPV6NeighborAdvertisement( solicited = 1, override = 1, target = socket.inet_pton(self.addr.af, self.addr.remote), target_lladdr = TapPacketCodec.ETHER_ADDR_REMOTE)))) self._harness.char_dev.send(reply.encode())
def _decodePacket(self, packet): return EthernetFrame(packet)
def _framePacket(self, payload): return EthernetFrame(src = TapPacketCodec.ETHER_ADDR_REMOTE, dst = TapPacketCodec.ETHER_ADDR_ANY, type = TapPacketCodec.TYPE_MAP[self.addr.af], payload = payload).encode()
def _framePacket(self, payload): return EthernetFrame(src = TapPacketCodec.ETHER_ADDR_REMOTE, dst = self._harness.interface.lladdr.addr, type = TapPacketCodec.TYPE_MAP[self.addr.af], payload = payload).encode()