From e35d6a4fde9a0671bc7d2527ff6b55b0ce1b4b1e Mon Sep 17 00:00:00 2001 From: dzwdz Date: Sun, 21 Aug 2022 22:33:09 +0200 Subject: user: rename ethdump to netstack --- src/user/app/netstack/proto.h | 70 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 src/user/app/netstack/proto.h (limited to 'src/user/app/netstack/proto.h') diff --git a/src/user/app/netstack/proto.h b/src/user/app/netstack/proto.h new file mode 100644 index 0000000..106f286 --- /dev/null +++ b/src/user/app/netstack/proto.h @@ -0,0 +1,70 @@ +#pragma once +#include +#include +#include + +typedef uint8_t mac_t[6]; +static const mac_t MAC_BROADCAST = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; + +extern struct net_state { + mac_t mac; + uint32_t ip; + + handle_t raw_h; +} state; + +enum { /* ethertype */ + ET_IPv4 = 0x800, + ET_ARP = 0x806, +}; + +struct ethernet { + const mac_t *src, *dst; + uint16_t type; +}; + +struct ipv4 { + struct ethernet e; + uint32_t src, dst; + uint16_t id, fraginfo; + uint8_t proto; + const uint8_t *header; size_t hlen; +}; + +struct icmp { + struct ipv4 ip; + uint8_t type, code; +}; + + +/* NOT THREADSAFE, YET USED FROM CONCURRENT THREADS + * will break if i implement a scheduler*/ +struct ethq { + struct ethq *next; + handle_t h; +}; +extern struct ethq *ether_queue; + +void arp_parse(const uint8_t *buf, size_t len); + +void icmp_parse(const uint8_t *buf, size_t len, struct ipv4 ip); +void icmp_send(const void *payload, size_t len, struct icmp i); + +void ipv4_parse(const uint8_t *buf, size_t len, struct ethernet ether); +void ipv4_send(const void *payload, size_t len, struct ipv4 ip); + +void ether_parse(const uint8_t *buf, size_t len); +uint8_t *ether_start(size_t len, struct ethernet ether); +void ether_finish(uint8_t *pkt); + +struct udp_conn; +void udp_parse(const uint8_t *buf, size_t len, struct ipv4 ip); +/* calls callback once, after a client connects. */ +void udp_listen(uint16_t port, + void (*on_conn)(struct udp_conn *, void *carg), + void (*on_recv)(const void *, size_t, void *carg), + void *carg); +// TODO udp_onclosed +void udpc_send(struct udp_conn *, const void *buf, size_t len); +/* frees */ +void udpc_close(struct udp_conn *); -- cgit v1.2.3