Exemple #1
0
#!/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)
Exemple #2
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()