Biblioteca de acesso ao meio fĂsico simulado do projeto TCP/IP do Zero.
A LibPhysical abstrai a comunicação UDP com o nó central (physical_medium) e fornece uma API simples para que os alunos possam construir protocolos de rede progressivamente ao longo da disciplina.
Objetivos đó ó ó „ó ó „ó ó ó ó ąó ó ó ó Łó Łó ó ąó ó ąó ó Łó ó ó ó Łó ó Šó ó ó ó ó ó ó ó ó €ó ó ąó ó ó ó ó ó ó ó ó Łó ó ó ó ó Ąó „ó ó ó ó Łó ó ó ó „ó ó ó Łó ó ó łó ó ó ó „ó €ó ó ó ó Șó ó ó ó Œó Œó œó ó ó ó ąó ó ó ąó ó Łó ó ó „ó łó ó łó ó ó ó ó ó Łó ó ó šó ó ąó ó ó ó ó ó Łó ó ó Žó ó Łó €ó ó ó ó ó ó ó ó ó ó ó ąó ó ó ó €ó ąó ó ó ó ó ó ó ąó ó ó ó ó ó ó ó ó ó ó ó ąó ąó ó Łó ó ó ó ó ó €ó łó Łó ąó ó ó Łó ó ó ó ó ó łó Łó ó ó ó ó ó ó ó ąó ó ó ó łó ó ó ó ó ó ó ó ó ó ó ąó ó ó „ó ó ó łó ó ó ó ó šó ó ó „ó €ó ó ąó ó ó ó ó ó ó ó ąó ó „ó ó ó ó ó ó Łó ó ó ó ó ąó ó „ó ó €ó ó ąó ó ó ó ó ó €ó ó Šó ó ó ó ó Łó ó ó ąó ąó ó Łó ó ó łó ó ó ó ó ó ó ó ąó ó ó ó ó ó ó ó
A biblioteca permite:
- Conectar-se ao meio fĂsico simulado;
- Obter um endereço MAC virtual;
- Obter um endereço IP virtual;
- Consultar se o meio estĂĄ livre;
- Enviar bytes brutos;
- Receber bytes brutos;
- Medir latĂȘncia atĂ© o nĂł central;
- Encerrar a conexĂŁo corretamente.
A biblioteca nĂŁo implementa:
- Ethernet
- IEEE 802
- CRC
- IP
- TCP
Esses protocolos serĂŁo desenvolvidos pelos alunos ao longo do curso đó ó ó „ó ó „ó ó ó ó ąó ó ó ó Łó Łó ó ąó ó ąó ó Łó ó ó ó Łó ó Šó ó ó ó ó ó ó ó ó €ó ó ąó ó ó ó ó ó ó ó ó Łó ó ó ó ó Ąó „ó ó ó ó Łó ó ó ó „ó ó ó Łó ó ó łó ó ó ó „ó €ó ó ó ó Șó ó ó ó Œó Œó œó ó ó ó ąó ó ó ąó ó Łó ó ó „ó łó ó łó ó ó ó ó ó Łó ó ó šó ó ąó ó ó ó ó ó Łó ó ó Žó ó Łó €ó ó ó ó ó ó ó ó ó ó ó ąó ó ó ó €ó ąó ó ó ó ó ó ó ąó ó ó ó ó ó ó ó ó ó ó ó ąó ąó ó Łó ó ó ó ó ó €ó łó Łó ąó ó ó Łó ó ó ó ó ó łó Łó ó ó ó ó ó ó ó ąó ó ó ó łó ó ó ó ó ó ó ó ó ó ó ąó ó ó „ó ó ó łó ó ó ó ó šó ó ó „ó €ó ó ąó ó ó ó ó ó ó ó ąó ó „ó ó ó ó ó ó Łó ó ó ó ó ąó ó „ó ó €ó ó ąó ó ó ó ó ó €ó ó Šó ó ó ó ó Łó ó ó ąó ąó ó Łó ó ó łó ó ó ó ó ó ó ó ąó ó ó ó ó ó ó ó .
Estrutura do Projeto đó ó ó „ó ó „ó ó ó ó ąó ó ó ó Łó Łó ó ąó ó ąó ó Łó ó ó ó Łó ó Šó ó ó ó ó ó ó ó ó €ó ó ąó ó ó ó ó ó ó ó ó Łó ó ó ó ó Ąó „ó ó ó ó Łó ó ó ó „ó ó ó Łó ó ó łó ó ó ó „ó €ó ó ó ó Șó ó ó ó Œó Œó œó ó ó ó ąó ó ó ąó ó Łó ó ó „ó łó ó łó ó ó ó ó ó Łó ó ó šó ó ąó ó ó ó ó ó Łó ó ó Žó ó Łó €ó ó ó ó ó ó ó ó ó ó ó ąó ó ó ó €ó ąó ó ó ó ó ó ó ąó ó ó ó ó ó ó ó ó ó ó ó ąó ąó ó Łó ó ó ó ó ó €ó łó Łó ąó ó ó Łó ó ó ó ó ó łó Łó ó ó ó ó ó ó ó ąó ó ó ó łó ó ó ó ó ó ó ó ó ó ó ąó ó ó „ó ó ó łó ó ó ó ó šó ó ó „ó €ó ó ąó ó ó ó ó ó ó ó ąó ó „ó ó ó ó ó ó Łó ó ó ó ó ąó ó „ó ó €ó ó ąó ó ó ó ó ó €ó ó Šó ó ó ó ó Łó ó ó ąó ąó ó Łó ó ó łó ó ó ó ó ó ó ó ąó ó ó ó ó ó ó ó
.
âââ Exemplos
â âââ WhoamI
â âââ whoami.c
âââ libphysical.c
âââ libphysical.h
âââ libphysical_rfc.txt
Compilação đó ó ó „ó ó „ó ó ó ó ąó ó ó ó Łó Łó ó ąó ó ąó ó Łó ó ó ó Łó ó Šó ó ó ó ó ó ó ó ó €ó ó ąó ó ó ó ó ó ó ó ó Łó ó ó ó ó Ąó „ó ó ó ó Łó ó ó ó „ó ó ó Łó ó ó łó ó ó ó „ó €ó ó ó ó Șó ó ó ó Œó Œó œó ó ó ó ąó ó ó ąó ó Łó ó ó „ó łó ó łó ó ó ó ó ó Łó ó ó šó ó ąó ó ó ó ó ó Łó ó ó Žó ó Łó €ó ó ó ó ó ó ó ó ó ó ó ąó ó ó ó €ó ąó ó ó ó ó ó ó ąó ó ó ó ó ó ó ó ó ó ó ó ąó ąó ó Łó ó ó ó ó ó €ó łó Łó ąó ó ó Łó ó ó ó ó ó łó Łó ó ó ó ó ó ó ó ąó ó ó ó łó ó ó ó ó ó ó ó ó ó ó ąó ó ó „ó ó ó łó ó ó ó ó šó ó ó „ó €ó ó ąó ó ó ó ó ó ó ó ąó ó „ó ó ó ó ó ó Łó ó ó ó ó ąó ó „ó ó €ó ó ąó ó ó ó ó ó €ó ó Šó ó ó ó ó Łó ó ó ąó ąó ó Łó ó ó łó ó ó ó ó ó ó ó ąó ó ó ó ó ó ó ó
Exemplo utilizando GCC:
gcc -Wall -Wextra -std=c11 \
whoami.c \
libphysical.c \
-o whoamiExemplo đ„ó ó ó „ó ó „ó ó ó ó ąó ó ó ó Łó Łó ó ąó ó ąó ó Łó ó ó ó Łó ó Šó ó ó ó ó ó ó ó ó €ó ó ąó ó ó ó ó ó ó ó ó Łó ó ó ó ó Ąó „ó ó ó ó Łó ó ó ó „ó ó ó Łó ó ó łó ó ó ó „ó €ó ó ó ó Șó ó ó ó Œó Œó œó ó ó ó ąó ó ó ąó ó Łó ó ó „ó łó ó łó ó ó ó ó ó Łó ó ó šó ó ąó ó ó ó ó ó Łó ó ó Žó ó Łó €ó ó ó ó ó ó ó ó ó ó ó ąó ó ó ó €ó ąó ó ó ó ó ó ó ąó ó ó ó ó ó ó ó ó ó ó ó ąó ąó ó Łó ó ó ó ó ó €ó łó Łó ąó ó ó Łó ó ó ó ó ó łó Łó ó ó ó ó ó ó ó ąó ó ó ó łó ó ó ó ó ó ó ó ó ó ó ąó ó ó „ó ó ó łó ó ó ó ó šó ó ó „ó €ó ó ąó ó ó ó ó ó ó ó ąó ó „ó ó ó ó ó ó Łó ó ó ó ó ąó ó „ó ó €ó ó ąó ó ó ó ó ó €ó ó Šó ó ó ó ó Łó ó ó ąó ąó ó Łó ó ó łó ó ó ó ó ó ó ó ąó ó ó ó ó ó ó ó
#include <stdio.h>
#include <stdint.h>
#include <arpa/inet.h>
#include "libphysical.h"
int main(void)
{
PhysicalHandle *h =
phy_connect(
"grupo_a",
"127.0.0.1",
9000
);
if (!h)
return 1;
uint8_t mac[6];
phy_mac_addr(h, mac);
uint32_t ip =
phy_virtual_ip(h);
struct in_addr addr;
addr.s_addr = htonl(ip);
printf(
"IP: %s\n",
inet_ntoa(addr)
);
phy_disconnect(h);
return 0;
}API Principal đ„ó ó ó „ó ó „ó ó ó ó ąó ó ó ó Łó Łó ó ąó ó ąó ó Łó ó ó ó Łó ó Šó ó ó ó ó ó ó ó ó €ó ó ąó ó ó ó ó ó ó ó ó Łó ó ó ó ó Ąó „ó ó ó ó Łó ó ó ó „ó ó ó Łó ó ó łó ó ó ó „ó €ó ó ó ó Șó ó ó ó Œó Œó œó ó ó ó ąó ó ó ąó ó Łó ó ó „ó łó ó łó ó ó ó ó ó Łó ó ó šó ó ąó ó ó ó ó ó Łó ó ó Žó ó Łó €ó ó ó ó ó ó ó ó ó ó ó ąó ó ó ó €ó ąó ó ó ó ó ó ó ąó ó ó ó ó ó ó ó ó ó ó ó ąó ąó ó Łó ó ó ó ó ó €ó łó Łó ąó ó ó Łó ó ó ó ó ó łó Łó ó ó ó ó ó ó ó ąó ó ó ó łó ó ó ó ó ó ó ó ó ó ó ąó ó ó „ó ó ó łó ó ó ó ó šó ó ó „ó €ó ó ąó ó ó ó ó ó ó ó ąó ó „ó ó ó ó ó ó Łó ó ó ó ó ąó ó „ó ó €ó ó ąó ó ó ó ó ó €ó ó Šó ó ó ó ó Łó ó ó ąó ąó ó Łó ó ó łó ó ó ó ó ó ó ó ąó ó ó ó ó ó ó ó
ConexĂŁo đó ó ó „ó ó „ó ó ó ó ąó ó ó ó Łó Łó ó ąó ó ąó ó Łó ó ó ó Łó ó Šó ó ó ó ó ó ó ó ó €ó ó ąó ó ó ó ó ó ó ó ó Łó ó ó ó ó Ąó „ó ó ó ó Łó ó ó ó „ó ó ó Łó ó ó łó ó ó ó „ó €ó ó ó ó Șó ó ó ó Œó Œó œó ó ó ó ąó ó ó ąó ó Łó ó ó „ó łó ó łó ó ó ó ó ó Łó ó ó šó ó ąó ó ó ó ó ó Łó ó ó Žó ó Łó €ó ó ó ó ó ó ó ó ó ó ó ąó ó ó ó €ó ąó ó ó ó ó ó ó ąó ó ó ó ó ó ó ó ó ó ó ó ąó ąó ó Łó ó ó ó ó ó €ó łó Łó ąó ó ó Łó ó ó ó ó ó łó Łó ó ó ó ó ó ó ó ąó ó ó ó łó ó ó ó ó ó ó ó ó ó ó ąó ó ó „ó ó ó łó ó ó ó ó šó ó ó „ó €ó ó ąó ó ó ó ó ó ó ó ąó ó „ó ó ó ó ó ó Łó ó ó ó ó ąó ó „ó ó €ó ó ąó ó ó ó ó ó €ó ó Šó ó ó ó ó Łó ó ó ąó ąó ó Łó ó ó łó ó ó ó ó ó ó ó ąó ó ó ó ó ó ó ó
PhysicalHandle *phy_connect(
const char *group_id,
const char *host,
uint16_t port
);Identidade Virtual đ€ó ó ó „ó ó „ó ó ó ó ąó ó ó ó Łó Łó ó ąó ó ąó ó Łó ó ó ó Łó ó Šó ó ó ó ó ó ó ó ó €ó ó ąó ó ó ó ó ó ó ó ó Łó ó ó ó ó Ąó „ó ó ó ó Łó ó ó ó „ó ó ó Łó ó ó łó ó ó ó „ó €ó ó ó ó Șó ó ó ó Œó Œó œó ó ó ó ąó ó ó ąó ó Łó ó ó „ó łó ó łó ó ó ó ó ó Łó ó ó šó ó ąó ó ó ó ó ó Łó ó ó Žó ó Łó €ó ó ó ó ó ó ó ó ó ó ó ąó ó ó ó €ó ąó ó ó ó ó ó ó ąó ó ó ó ó ó ó ó ó ó ó ó ąó ąó ó Łó ó ó ó ó ó €ó łó Łó ąó ó ó Łó ó ó ó ó ó łó Łó ó ó ó ó ó ó ó ąó ó ó ó łó ó ó ó ó ó ó ó ó ó ó ąó ó ó „ó ó ó łó ó ó ó ó šó ó ó „ó €ó ó ąó ó ó ó ó ó ó ó ąó ó „ó ó ó ó ó ó Łó ó ó ó ó ąó ó „ó ó €ó ó ąó ó ó ó ó ó €ó ó Šó ó ó ó ó Łó ó ó ąó ąó ó Łó ó ó łó ó ó ó ó ó ó ó ąó ó ó ó ó ó ó ó
void phy_mac_addr(
PhysicalHandle *h,
uint8_t mac_out[6]
);
uint32_t phy_virtual_ip(
PhysicalHandle *h
);DiagnĂłstico đó ó ó „ó ó „ó ó ó ó ąó ó ó ó Łó Łó ó ąó ó ąó ó Łó ó ó ó Łó ó Šó ó ó ó ó ó ó ó ó €ó ó ąó ó ó ó ó ó ó ó ó Łó ó ó ó ó Ąó „ó ó ó ó Łó ó ó ó „ó ó ó Łó ó ó łó ó ó ó „ó €ó ó ó ó Șó ó ó ó Œó Œó œó ó ó ó ąó ó ó ąó ó Łó ó ó „ó łó ó łó ó ó ó ó ó Łó ó ó šó ó ąó ó ó ó ó ó Łó ó ó Žó ó Łó €ó ó ó ó ó ó ó ó ó ó ó ąó ó ó ó €ó ąó ó ó ó ó ó ó ąó ó ó ó ó ó ó ó ó ó ó ó ąó ąó ó Łó ó ó ó ó ó €ó łó Łó ąó ó ó Łó ó ó ó ó ó łó Łó ó ó ó ó ó ó ó ąó ó ó ó łó ó ó ó ó ó ó ó ó ó ó ąó ó ó „ó ó ó łó ó ó ó ó šó ó ó „ó €ó ó ąó ó ó ó ó ó ó ó ąó ó „ó ó ó ó ó ó Łó ó ó ó ó ąó ó „ó ó €ó ó ąó ó ó ó ó ó €ó ó Šó ó ó ó ó Łó ó ó ąó ąó ó Łó ó ó łó ó ó ó ó ó ó ó ąó ó ó ó ó ó ó ó
long phy_ping(
PhysicalHandle *h
);int phy_medium_free(
PhysicalHandle *h
);TransmissĂŁo đó ó ó „ó ó „ó ó ó ó ąó ó ó ó Łó Łó ó ąó ó ąó ó Łó ó ó ó Łó ó Šó ó ó ó ó ó ó ó ó €ó ó ąó ó ó ó ó ó ó ó ó Łó ó ó ó ó Ąó „ó ó ó ó Łó ó ó ó „ó ó ó Łó ó ó łó ó ó ó „ó €ó ó ó ó Șó ó ó ó Œó Œó œó ó ó ó ąó ó ó ąó ó Łó ó ó „ó łó ó łó ó ó ó ó ó Łó ó ó šó ó ąó ó ó ó ó ó Łó ó ó Žó ó Łó €ó ó ó ó ó ó ó ó ó ó ó ąó ó ó ó €ó ąó ó ó ó ó ó ó ąó ó ó ó ó ó ó ó ó ó ó ó ąó ąó ó Łó ó ó ó ó ó €ó łó Łó ąó ó ó Łó ó ó ó ó ó łó Łó ó ó ó ó ó ó ó ąó ó ó ó łó ó ó ó ó ó ó ó ó ó ó ąó ó ó „ó ó ó łó ó ó ó ó šó ó ó „ó €ó ó ąó ó ó ó ó ó ó ó ąó ó „ó ó ó ó ó ó Łó ó ó ó ó ąó ó „ó ó €ó ó ąó ó ó ó ó ó €ó ó Šó ó ó ó ó Łó ó ó ąó ąó ó Łó ó ó łó ó ó ó ó ó ó ó ąó ó ó ó ó ó ó ó
int phy_send(
PhysicalHandle *h,
uint32_t dst_ip,
const uint8_t *data,
size_t len
);
ssize_t phy_recv(
PhysicalHandle *h,
uint32_t *src_ip,
uint8_t *buf,
size_t buf_len,
int timeout_ms
);Encerramento đó ó ó „ó ó „ó ó ó ó ąó ó ó ó Łó Łó ó ąó ó ąó ó Łó ó ó ó Łó ó Šó ó ó ó ó ó ó ó ó €ó ó ąó ó ó ó ó ó ó ó ó Łó ó ó ó ó Ąó „ó ó ó ó Łó ó ó ó „ó ó ó Łó ó ó łó ó ó ó „ó €ó ó ó ó Șó ó ó ó Œó Œó œó ó ó ó ąó ó ó ąó ó Łó ó ó „ó łó ó łó ó ó ó ó ó Łó ó ó šó ó ąó ó ó ó ó ó Łó ó ó Žó ó Łó €ó ó ó ó ó ó ó ó ó ó ó ąó ó ó ó €ó ąó ó ó ó ó ó ó ąó ó ó ó ó ó ó ó ó ó ó ó ąó ąó ó Łó ó ó ó ó ó €ó łó Łó ąó ó ó Łó ó ó ó ó ó łó Łó ó ó ó ó ó ó ó ąó ó ó ó łó ó ó ó ó ó ó ó ó ó ó ąó ó ó „ó ó ó łó ó ó ó ó šó ó ó „ó €ó ó ąó ó ó ó ó ó ó ó ąó ó „ó ó ó ó ó ó Łó ó ó ó ó ąó ó „ó ó €ó ó ąó ó ó ó ó ó €ó ó Šó ó ó ó ó Łó ó ó ąó ąó ó Łó ó ó łó ó ó ó ó ó ó ó ąó ó ó ó ó ó ó ó
void phy_disconnect(
PhysicalHandle *h
);A especificação completa do protocolo pode ser encontrada em:
libphysical_rfc.txt
A LibPhysical Ă© a primeira camada do projeto TCP/IP do Zero, uma iniciativa educacional cujo objetivo Ă© permitir que alunos implementem progressivamente uma pilha de protocolos completa.
Evolução prevista:
- LibPhysical
- Quadros IEEE 802
- CSMA/CA
- CRC
- IP
- TCP
- AplicaçÔes distribuĂdas
Uso acadĂȘmico e educacional. Projeto desenvolvido para fins didĂĄticos.