#!/usr/bin/python3 from tun import Tun import os import time tun = Tun("tun0", "10.0.0.1", "10.0.0.2", mask="255.255.255.252", mtu=1500, qlen=4) tun.start() while True: proto, payload = tun.get_frame() print("recebeu: proto=%s, payload=" % hex(proto), payload) # aqui envio de volta pra tun o pacote recebido ... # você pode ver o pacote duplicado com o wireshark tun.send_frame(payload, proto)
class Enlayce: def __init__(self, p_serial, idSessao, timeout, ip1, ip2, bytes_min=0, bytes_max=256): self.min_bytes = bytes_min self.max_bytes = bytes_max self.timeout = timeout self.ser = serial.Serial( p_serial, 9600, timeout=self.timeout) #timeout = timeout do método read da Serial self.enq = enquadramento.Enquadramento(self.ser, 0.05) self.arq = ARQ.ARQ(self.enq, idSessao, self.timeout) self.sessao = sessao.Sessao(self.arq, self.timeout) self.tun = Tun("tun1", ip1, ip2, mask="255.255.255.252", mtu=1500, qlen=4) self.tun.start() self.cb_tun = CallbackTun(self.tun, self) #self = próprio enlayce self.sched = poller.Poller() self.sched.adiciona(self.cb_tun) self.cb_serial = CallbackStdin(self) self.timer = CallbackTimer(0.01, self) self.sched.adiciona(self.cb_serial) self.sched.adiciona(self.timer) self.sched.despache() def envia(self, dado): #print('Enlayce envia!') if (self.sessao.conectado() == False): self.sessao.inicia() return print('Enviando') print(dado) return self.sessao.envia( dado ) #retorna para a aplicação quando chegar o ack da outra aplicação, desbloqueando a mesma para um novo envio def recebe(self): #if (self.sessao.conectado() == False): # self.sessao.espera_conexao() tam, buf = self.sessao.recebe() if ((type(buf) == bytearray) and buf != bytearray()): print('Recebeu') print(buf) self.tun.send_frame(buf, Tun.PROTO_IPV4) def encerra(self): return self.sessao.encerra() def func_timeout(self): self.enq.func_timeout() self.arq.func_timeout() self.sessao.func_timeout()