Beispiel #1
0
        self.fila = b''

    def registrar_recebedor(self, callback):
        self.callback = callback

    def enviar(self, dados):
        self.fila += dados


def rand_ip():
    return '%d.%d.%d.%d' % tuple(random.randint(1, 255) for i in range(4))


next_hop = rand_ip()
linha_serial = LinhaSerial()
enlace = CamadaEnlace({next_hop: linha_serial})


def caso(datagrama):
    enlace.enviar(datagrama, next_hop)
    assert linha_serial.fila == b'\xc0' + datagrama + b'\xc0', 'O início e o fim do quadro devem ser delimitados com o byte 0xC0'
    linha_serial.fila = b''


caso(b'\x01')
caso(b'\x00\x01')
caso(b'ABCDEF')
caso(b'\x10\x20\x30\x40\x50')
caso(128 * b' ')
caso(1024 * b' ')
caso(1500 * b' ')
Beispiel #2
0
        self.fila = b''

    def registrar_recebedor(self, callback):
        self.callback = callback

    def enviar(self, dados):
        self.fila += dados


def rand_ip():
    return '%d.%d.%d.%d' % tuple(random.randint(1, 255) for i in range(4))


next_hop = rand_ip()
linha_serial = LinhaSerial()
enlace = CamadaEnlace({next_hop: linha_serial})
datagramas = []


def recebedor(datagrama):
    datagramas.append(datagrama)


enlace.registrar_recebedor(recebedor)


def caso(entrada, saida):
    for datum in entrada:
        linha_serial.callback(datum)
    assert datagramas == saida, 'Ao receber os dados %r pela linha serial, deveriam ter sido reconhecidos os datagramas %r, mas foram reconhecidos %r' % (
        entrada, saida, datagramas)
Beispiel #3
0
server = Server()

# Integração com as demais camadas

driver = ZyboSerialDriver()
linha_serial = driver.obter_porta(4)
pty = driver.expor_porta_ao_linux(5)
outra_ponta = '192.168.123.1'
nossa_ponta = '192.168.123.2'
porta_tcp = 7000

print('Conecte o RX da porta 4 com o TX da porta 5 e vice-versa.')
print('Para conectar a outra ponta da camada física, execute:')
print()
print('sudo slattach -vLp slip {}'.format(pty.pty_name))
print('sudo ifconfig sl0 {} pointopoint {} mtu 1500'.format(
    outra_ponta, nossa_ponta))
print()
print('Acesse o serviço com o comando: nc {} {}'.format(nossa_ponta, porta_tcp))
print()

enlace = CamadaEnlace({outra_ponta: linha_serial})
rede = CamadaRede(enlace)
rede.definir_endereco_host(nossa_ponta)
rede.definir_tabela_encaminhamento([
    ('0.0.0.0/0', outra_ponta)
])
tcp = Tcp(rede, porta_tcp)
tcp.registrar_monitor_de_conexoes_aceitas(server.conexao_aceita)
asyncio.get_event_loop().run_forever()
Beispiel #4
0
serial3 = driver.obter_porta(6)
pty3 = driver.expor_porta_ao_linux(7)

print()
print('sudo slattach -vLp slip {}'.format(pty1.pty_name))
print('sudo slattach -vLp slip {}'.format(pty2.pty_name))
print('sudo slattach -vLp slip {}'.format(pty3.pty_name))
print()

# Os endereços IP que especificamos abaixo são os endereços da outra ponta do
# enlace. No caso do teste montado de acordo as mensagens acima, são os
# endereços atribuídos às interface de rede do Linux.
enlace = CamadaEnlace({
    '192.168.123.1': serial1,
    '192.168.124.1': serial2,
    '192.168.125.1': serial3
})

rede = CamadaRede(enlace)

# Este é o endereço IP do nosso roteador. Como os enlaces são ponto-a-ponto,
# ele não precisa estar em uma mesma subrede que os endereços IP atribuídos
# às interfaces do Linux.
rede.definir_endereco_host('192.168.122.1')

# A tabela de encaminhamento define através que qual enlace o nosso
# roteador pode alcançar cada faixa de endereços IP.
rede.definir_tabela_encaminhamento([
    ('192.168.123.0/24', '192.168.123.1'),
    ('192.168.124.0/24', '192.168.124.1'),