1 #ifndef MINIX_NET_LWIP_LWIP_H 2 #define MINIX_NET_LWIP_LWIP_H 3 4 #include <minix/drivers.h> 5 #include <minix/sockevent.h> 6 #include <minix/rmib.h> 7 #include <netinet/in.h> 8 #include <sys/ioctl.h> 9 #include <net/bpf.h> 10 11 #include "lwip/ip.h" 12 #include "lwiphooks.h" 13 14 #include "addr.h" 15 #include "ipsock.h" 16 #include "ifdev.h" 17 #include "util.h" 18 19 /* 20 * The standard sockaddr_dl is an absolute pain, because the actual structure 21 * is dynamically sized, while the standard definition is neither the minimum 22 * nor the maximum size. We use our own version, which uses the maximum size 23 * that we will ever produce and accept. This greatly simplifies dealing with 24 * this structure while also limiting stack usage a bit. 25 */ 26 struct sockaddr_dlx { 27 uint8_t sdlx_len; /* actual length of this structure */ 28 sa_family_t sdlx_family; /* address family, always AF_LINK */ 29 uint16_t sdlx_index; /* interface index */ 30 uint8_t sdlx_type; /* interface type (IFT_) */ 31 uint8_t sdlx_nlen; /* interface name length, w/o nul */ 32 uint8_t sdlx_alen; /* link-layer address length */ 33 uint8_t sdlx_slen; /* selector length, always 0 */ 34 uint8_t sdlx_data[IFNAMSIZ + NETIF_MAX_HWADDR_LEN]; 35 }; 36 37 STATIC_SOCKADDR_MAX_ASSERT(sockaddr_in); 38 STATIC_SOCKADDR_MAX_ASSERT(sockaddr_in6); 39 STATIC_SOCKADDR_MAX_ASSERT(sockaddr_dlx); 40 41 /* This is our own, much smaller internal version of sockaddr_storage. */ 42 union sockaddr_any { 43 struct sockaddr sa; 44 struct sockaddr_in sin; 45 struct sockaddr_in6 sin6; 46 struct sockaddr_dlx sdlx; 47 }; 48 49 /* Number of bits in each of the types of IP addresses. */ 50 #define IP4_BITS 32 /* number of bits in an IPv4 address */ 51 #define IP6_BITS 128 /* number of bits in an IPv6 address */ 52 53 /* 54 * Each socket module maintains its own set of sockets, but all sockets must be 55 * given globally unique identifiers. Therefore, we use these modifier masks, 56 * which are bitwise OR'ed with the per-module socket identifiers. 57 */ 58 #define SOCKID_TCP 0x00000000 59 #define SOCKID_UDP 0x00100000 60 #define SOCKID_RAW 0x00200000 61 #define SOCKID_RT 0x00400000 62 #define SOCKID_LNK 0x00800000 63 64 /* 65 * Static remote MIB node identifiers for nodes that are dynamically numbered 66 * on NetBSD, because they do not have a corresponding protocol family number. 67 */ 68 #define NET_INTERFACES (PF_MAX) /* net.interfaces (TODO) */ 69 #define NET_BPF (PF_MAX + 1) /* net.bpf */ 70 71 #define ROOT_EUID 0 /* effective user ID of superuser */ 72 73 /* 74 * Function declarations. Modules with more extended interfaces have their own 75 * header files. 76 */ 77 78 /* mempool.c */ 79 void mempool_init(void); 80 unsigned int mempool_cur_buffers(void); 81 unsigned int mempool_max_buffers(void); 82 83 /* pchain.c */ 84 struct pbuf **pchain_end(struct pbuf * pbuf); 85 size_t pchain_size(struct pbuf * pbuf); 86 87 /* addrpol.c */ 88 int addrpol_get_label(const ip_addr_t * ipaddr); 89 int addrpol_get_scope(const ip_addr_t * ipaddr, int is_src); 90 91 /* tcpsock.c */ 92 void tcpsock_init(void); 93 sockid_t tcpsock_socket(int domain, int protocol, struct sock ** sock, 94 const struct sockevent_ops ** ops); 95 96 /* udpsock.c */ 97 void udpsock_init(void); 98 sockid_t udpsock_socket(int domain, int protocol, struct sock ** sock, 99 const struct sockevent_ops ** ops); 100 101 /* rawsock.c */ 102 void rawsock_init(void); 103 sockid_t rawsock_socket(int domain, int protocol, struct sock ** sock, 104 const struct sockevent_ops ** ops); 105 106 /* loopif.c */ 107 void loopif_init(void); 108 ssize_t loopif_cksum(struct rmib_call * call, struct rmib_node * node, 109 struct rmib_oldp * oldp, struct rmib_newp * newp); 110 111 /* lnksock.c */ 112 void lnksock_init(void); 113 sockid_t lnksock_socket(int type, int protocol, struct sock ** sock, 114 const struct sockevent_ops ** ops); 115 116 /* mibtree.c */ 117 void mibtree_init(void); 118 void mibtree_register_inet(int domain, int protocol, struct rmib_node * node); 119 void mibtree_register_lwip(struct rmib_node * node); 120 121 /* ifconf.c */ 122 void ifconf_init(void); 123 int ifconf_ioctl(struct sock * sock, unsigned long request, 124 const struct sockdriver_data * data, endpoint_t user_endpt); 125 126 /* bpf_filter.c */ 127 u_int bpf_filter_ext(const struct bpf_insn * pc, const struct pbuf * pbuf, 128 const u_char * packet, u_int total, u_int len); 129 130 #endif /* !MINIX_NET_LWIP_LWIP_H */ 131