def run(self): while not self._stopping: # Read IPv4 header self._logger.debug("Waiting for IP header") hdr = self._read_chunk(ipv4_header.FIXED_LENGTH) if hdr == None: break hdr_parsed = ipv4_header(hdr) self._logger.debug("Pulled IP header:\n%s", hdr_parsed.dump()) # Read payload payload = self._read_chunk(hdr_parsed.get_total_length() - ipv4_header.FIXED_LENGTH) if payload == None: break self._logger.debug("Finished reading payload of size %d", len(payload)) # Re-combine packet and send to the MAC self._mac.send(hdr_parsed.get_dest_address(), hdr + payload)
def run(self): while not self._stopping: # Read next packet from the MAC self._logger.debug("Waiting for packet") pkt = self._mac.recv() if not pkt: break if len(pkt) < ipv4_header.FIXED_LENGTH: self._logger.error("Ignoring short packet of size %d", len(pkt)) # Print IP header for debugging self._logger.debug("Pushing IP packet:\n%s", ipv4_header(pkt).dump()) # Write data while len(pkt) > 0: bytes_written = os.write(self._fd, pkt) pkt = pkt[bytes_written:]