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()
示例#5
0
 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()