def __init__(self, porta, use_fake, id_sessao, time_slot, max_retries, timeout_arq, timeout_session, check_interval): ''' Cria um objeto Protocolo, responsável por inicializar todas as subcamadas ''' if (use_fake): self.cb = fake_layer.FakeLayer(sys.stdin) else: tun = Tun("tun0", "10.0.0.1", "10.0.0.2", mask="255.255.255.252", mtu=1500, qlen=4) tun.start() self.cb = tun_layer.TunLayer(tun) self.e = enquadramento.Enquadramento(porta, 1024, 3) self.a = arq_mac.ARQ_MAC(timeout_arq, time_slot, id_sessao, max_retries) self.s = sessao.Sessao(timeout_session, check_interval) # Define organização das subcamadas self.cb.set_lower(self.s) self.s.set_upper(self.cb) self.s.set_lower(self.a) self.a.set_upper(self.s) self.a.set_lower(self.e) self.e.set_upper(self.a)
import os import time from tun import Tun tun = Tun("tun0", "10.0.0.1", "10.0.0.2", mask="255.255.255.252", mtu=1500, qlen=4) tun.start() while (True): quadro = tun.get_frame() print('Recebeu: ', quadro) time.sleep(1)
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()