Example #1
0
    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)
Example #2
0
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)
Example #3
0
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()