From: Brett Gordon Date: Sat, 25 Feb 2017 21:20:34 +0000 (-0500) Subject: libs: missed a header. X-Git-Url: https://git.ndcode.org/public/gitweb.cgi?a=commitdiff_plain;h=a818d53235d451073a8e03f6d40c44d1c15afbc5;p=FUZIX.git libs: missed a header. --- diff --git a/Library/include/sys/netdev.h b/Library/include/sys/netdev.h new file mode 100644 index 00000000..ba95dd9f --- /dev/null +++ b/Library/include/sys/netdev.h @@ -0,0 +1,156 @@ +#ifndef _DEV_NET_NETDEV_H +#define _DEV_NET_NETDEV_H + +#define AF_INET 1 + +#define SOCK_RAW 1 +#define SOCK_DGRAM 2 +#define SOCK_STREAM 3 + +#define IPPROTO_ICMP 1 +#define IPPROTO_TCP 6 +#define IPPROTO_UDP 17 +#define IPPROTO_RAW 255 + +#include + + +/* This one is used internally to deal with many argumented net + functions */ +struct sockio { + uint16_t sio_flags; /* Keep the order so we can use partial */ + uint16_t sio_addr_len; /* structs for simple cases */ + struct sockaddr_in sio_addr; +}; + +#define INADDR_ANY 0L +#define INADDR_BROADCAST 0xFFFFFFFFUL +#define INADDR_LOOPBACK 0x7F000001UL +#define IN_LOOPBACK(a) (((a) >> 24) == 0x7F) + + +#ifndef NSOCKET +#define NSOCKET 8 +#endif + + +struct sockaddrs { + uint32_t addr; + uint16_t port; +}; + +struct socket +{ + uint8_t s_type; + uint8_t s_state; +#define SS_UNUSED 0 /* Free slot */ +#define SS_INIT 1 /* Initializing state (for IP offloaders) */ +#define SS_UNCONNECTED 2 /* Created */ +#define SS_BOUND 3 /* Bind or autobind */ +#define SS_LISTENING 4 /* Listen called */ +#define SS_ACCEPTING 5 /* Accepting in progress */ +#define SS_ACCEPTWAIT 6 /* Waiting for accept to harvest */ +#define SS_CONNECTING 7 /* Connect initiated */ +#define SS_CONNECTED 8 /* Connect has completed */ +#define SS_CLOSEWAIT 9 /* Remote has closed */ +#define SS_CLOSING 10 /* Protocol close in progress */ +#define SS_CLOSED 11 /* Protocol layers done, not close()d */ + /* FIXME: need state for shutdown handling */ + uint8_t s_data; /* Socket we are an accept() for */ + uint8_t s_error; + uint8_t s_num; /* To save expensive maths */ + struct sockaddrs s_addr[3]; +#define SADDR_SRC 0 +#define SADDR_DST 1 +#define SADDR_TMP 2 + uint8_t s_flag; +#define SFLAG_ATMP 1 /* Use SADDR_TMP */ + uint8_t s_iflag; /* Flags touched in IRQ handlers */ +#define SI_SHUTR 1 +#define SI_SHUTW 2 +#define SI_DATA 4 /* Data is ready */ +#define SI_EOF 8 /* At EOF */ +#define SI_THROTTLE 16 /* Transmit is throttled */ + void *s_priv; /* Private pointer for lower layers */ +}; + +#define NSOCKTYPE 3 +#define SOCKTYPE_TCP 0 +#define SOCKTYPE_UDP 1 +#define SOCKTYPE_RAW 2 + +struct netdevice +{ + uint8_t mac_len; + const char *name; + uint16_t flags; +#define IFF_POINTOPOINT 1 +}; + +/* Not applicable in userspace ? */ + + +/* extern struct socket sockets[NSOCKET]; */ +/* extern uint32_t our_address; */ + +/* /\* Network layer syscalls *\/ */ +/* extern arg_t _socket(void); */ +/* extern arg_t _listen(void); */ +/* extern arg_t _bind(void); */ +/* extern arg_t _connect(void); */ +/* extern arg_t _accept(void); */ +/* extern arg_t _getsockaddrs(void); */ +/* extern arg_t _sendto(void); */ +/* extern arg_t _recvfrom(void); */ +/* extern arg_t _shutdown(void); */ + +/* /\* Hooks for inode.c into the networking *\/ */ +/* extern void sock_close(inoptr ino); */ +/* extern int sock_read(inoptr ino, uint8_t flag); */ +/* extern int sock_write(inoptr ino, uint8_t flag); */ +/* extern bool issocket(inoptr ino); */ + +/* /\* Hooks between the network implementation and the socket layer *\/ */ +/* extern int net_init(struct socket *s); */ +/* extern int net_bind(struct socket *s); */ +/* extern int net_connect(struct socket *s); */ +/* extern void net_close(struct socket *s); */ +/* extern int net_listen(struct socket *s); */ +/* extern arg_t net_read(struct socket *s, uint8_t flag); */ +/* extern arg_t net_write(struct socket *s, uint8_t flag); */ +/* extern arg_t net_ioctl(uint8_t op, void *p); */ +/* extern arg_t net_shutdown(struct socket *s, uint8_t how); /\* bit 0 rd, bit 1 wr *\/ */ +/* extern void netdev_init(void); */ +/* extern struct socket *sock_find(uint8_t type, uint8_t sv, struct sockaddrs *sa); */ +/* extern void sock_init(void); */ + +/* extern struct netdevice net_dev; */ +/* Socket IOCTLS */ + +#define SIOCGIFADDR 0x4401 +#define SIOCSIFADDR 0x4402 +#define SIOCGIFMASK 0x4403 +#define SIOCSIFMASK 0x4404 +#define SIOCGIFHWADDR 0x4405 +#define SIOCSIFHWADDR 0x4406 +#define SIOCGIFGW 0x4407 +#define SIOCSIFGW 0x4408 + +#define IFNAMSIZ 5 + +struct ifreq { + char ifr_name[IFNAMSIZ]; /* Interface name */ + union { + struct sockaddr ifr_addr; + struct sockaddr ifr_dstaddr; + struct sockaddr ifr_broadaddr; + struct sockaddr ifr_netmask; + struct sockaddr ifr_hwaddr; + struct sockaddr ifr_gwaddr; /* belongs in router.h ?*/ + uint8_t ifr_flags; + uint16_t ifr_ifindex; + uint16_t ifr_metric; + uint16_t ifr_mtu; + }; +}; +#endif