move eventfd stuff out to own file
[trinity.git] / include / net.h
blobeed4415df532492a1bf32638172e72854f1778ec
1 #pragma once
3 #include <sys/types.h> /* See NOTES */
4 #include <sys/socket.h>
5 #include <netinet/in.h>
7 extern unsigned int nr_sockets;
9 /* protocol decoding */
10 extern unsigned int specific_proto;
13 /* glibc headers might be older than the kernel, so chances are we know
14 * about more protocols than glibc does. So we define our own PF_MAX */
15 #define TRINITY_PF_MAX 41
17 #define TYPE_MAX 10
18 #define PROTO_MAX 256
20 #define PF_NOHINT (-1)
22 struct socket_triplet {
23 unsigned int family;
24 unsigned int type;
25 unsigned int protocol;
28 struct sockopt {
29 unsigned int level;
30 unsigned long optname;
31 unsigned long optval;
32 unsigned long optlen;
35 /* We create one of these per socket fd we open, and store them in shm->sockets */
36 struct socketinfo {
37 struct socket_triplet triplet;
38 int fd;
41 unsigned int open_sockets(void);
42 void close_sockets(void);
44 void generate_sockaddr(struct sockaddr **addr, socklen_t *addrlen, int pf);
46 void sso_socket(struct socket_triplet *triplet, struct sockopt *so, int fd);
48 void rand_proto_type(struct socket_triplet *st);
49 int sanitise_socket_triplet(struct socket_triplet *st);
50 void gen_socket_args(struct socket_triplet *st);
52 /* Ethernet */
53 int get_random_ether_type(void);
55 /* ipv4 */
56 in_addr_t random_ipv4_address(void);
57 void ipv4_gen_sockaddr(struct sockaddr **addr, socklen_t *addrlen);
58 void inet_rand_socket(struct socket_triplet *st);
59 void ip_setsockopt(struct sockopt *so);
61 /* ipv6 */
62 void ipv6_gen_sockaddr(struct sockaddr **addr, socklen_t *addrlen);
63 void inet6_rand_socket(struct socket_triplet *st);
64 void inet6_setsockopt(struct sockopt *so);
66 /* pppox */
67 void pppox_gen_sockaddr(struct sockaddr **addr, socklen_t *addrlen);
68 void pppol2tp_setsockopt(struct sockopt *so);
70 /* unix */
71 void unix_gen_sockaddr(struct sockaddr **addr, socklen_t *addrlen);
72 void unix_rand_socket(struct socket_triplet *st);
74 /* bpf */
75 void bpf_gen_filter(unsigned long **addr, unsigned long *addrlen);
76 void bpf_gen_seccomp(unsigned long **addr, unsigned long *addrlen);
78 /* caif */
79 void caif_gen_sockaddr(struct sockaddr **addr, socklen_t *addrlen);
80 void caif_rand_socket(struct socket_triplet *st);
81 void caif_setsockopt(struct sockopt *so);
83 /* alg */
84 void alg_gen_sockaddr(struct sockaddr **addr, socklen_t *addrlen);
85 void alg_setsockopt(struct sockopt *so);
87 /* nfc */
88 void nfc_gen_sockaddr(struct sockaddr **addr, socklen_t *addrlen);
89 void nfc_rand_socket(struct socket_triplet *st);
90 void nfc_setsockopt(struct sockopt *so);
92 /* ax25 */
93 void ax25_gen_sockaddr(struct sockaddr **addr, socklen_t *addrlen);
94 void ax25_rand_socket(struct socket_triplet *st);
95 void ax25_setsockopt(struct sockopt *so);
97 /* ipx */
98 void ipx_gen_sockaddr(struct sockaddr **addr, socklen_t *addrlen);
99 void ipx_rand_socket(struct socket_triplet *st);
100 void ipx_setsockopt(struct sockopt *so);
102 /* appletalk */
103 void atalk_gen_sockaddr(struct sockaddr **addr, socklen_t *addrlen);
104 void atalk_rand_socket(struct socket_triplet *st);
105 void atalk_setsockopt(struct sockopt *so);
107 /* atm */
108 void atmpvc_gen_sockaddr(struct sockaddr **addr, socklen_t *addrlen);
109 void atmsvc_gen_sockaddr(struct sockaddr **addr, socklen_t *addrlen);
110 void atm_setsockopt(struct sockopt *so);
112 /* x25 */
113 void x25_gen_sockaddr(struct sockaddr **addr, socklen_t *addrlen);
114 void x25_rand_socket(struct socket_triplet *st);
115 void x25_setsockopt(struct sockopt *so);
117 /* rose */
118 void rose_gen_sockaddr(struct sockaddr **addr, socklen_t *addrlen);
119 void rose_setsockopt(struct sockopt *so);
121 /* decnet */
122 void decnet_gen_sockaddr(struct sockaddr **addr, socklen_t *addrlen);
123 void decnet_rand_socket(struct socket_triplet *st);
124 void decnet_setsockopt(struct sockopt *so);
126 /* llc */
127 void llc_gen_sockaddr(struct sockaddr **addr, socklen_t *addrlen);
128 void llc_rand_socket(struct socket_triplet *st);
129 void llc_setsockopt(struct sockopt *so);
131 /* netlink */
132 void netlink_gen_sockaddr(struct sockaddr **addr, socklen_t *addrlen);
133 void netlink_rand_socket(struct socket_triplet *st);
134 void netlink_setsockopt(struct sockopt *so);
136 /* packet */
137 void packet_gen_sockaddr(struct sockaddr **addr, socklen_t *addrlen);
138 void packet_rand_socket(struct socket_triplet *st);
139 void packet_setsockopt(struct sockopt *so);
141 /* econet */
142 void econet_gen_sockaddr(struct sockaddr **addr, socklen_t *addrlen);
144 /* irda */
145 void irda_gen_sockaddr(struct sockaddr **addr, socklen_t *addrlen);
146 void irda_rand_socket(struct socket_triplet *st);
147 void irda_setsockopt(struct sockopt *so);
149 /* can */
150 void can_gen_sockaddr(struct sockaddr **addr, socklen_t *addrlen);
151 void can_rand_socket(struct socket_triplet *st);
153 /* tipc */
154 void tipc_gen_sockaddr(struct sockaddr **addr, socklen_t *addrlen);
155 void tipc_rand_socket(struct socket_triplet *st);
156 void tipc_setsockopt(struct sockopt *so);
158 /* phonet */
159 void phonet_gen_sockaddr(struct sockaddr **addr, socklen_t *addrlen);
160 void phonet_rand_socket(struct socket_triplet *st);
162 /* rds */
163 void rds_gen_sockaddr(struct sockaddr **addr, socklen_t *addrlen);
164 void rds_rand_socket(struct socket_triplet *st);
165 void rds_setsockopt(struct sockopt *so);
167 /* setsockopt functions */
168 void socket_setsockopt(struct sockopt *so);
169 void tcp_setsockopt(struct sockopt *so);
170 void udp_setsockopt(struct sockopt *so);
171 void udplite_setsockopt(struct sockopt *so);
172 void icmpv6_setsockopt(struct sockopt *so);
173 void sctp_setsockopt(struct sockopt *so);
174 void raw_setsockopt(struct sockopt *so);
175 void netrom_setsockopt(struct sockopt *so);
176 void aal_setsockopt(struct sockopt *so);
177 void netbeui_setsockopt(struct sockopt *so);
178 void dccp_setsockopt(struct sockopt *so);
179 void rxrpc_setsockopt(struct sockopt *so);
180 void bluetooth_setsockopt(struct sockopt *so);
181 void pnpipe_setsockopt(struct sockopt *so);
182 void iucv_setsockopt(struct sockopt *so);