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
20 #define PF_NOHINT (-1)
22 struct socket_triplet
{
25 unsigned int protocol
;
30 unsigned long optname
;
35 /* We create one of these per socket fd we open, and store them in shm->sockets */
37 struct socket_triplet triplet
;
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
);
53 int get_random_ether_type(void);
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
);
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
);
67 void pppox_gen_sockaddr(struct sockaddr
**addr
, socklen_t
*addrlen
);
68 void pppol2tp_setsockopt(struct sockopt
*so
);
71 void unix_gen_sockaddr(struct sockaddr
**addr
, socklen_t
*addrlen
);
72 void unix_rand_socket(struct socket_triplet
*st
);
75 void bpf_gen_filter(unsigned long **addr
, unsigned long *addrlen
);
76 void bpf_gen_seccomp(unsigned long **addr
, unsigned long *addrlen
);
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
);
84 void alg_gen_sockaddr(struct sockaddr
**addr
, socklen_t
*addrlen
);
85 void alg_setsockopt(struct sockopt
*so
);
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
);
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
);
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
);
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
);
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
);
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
);
118 void rose_gen_sockaddr(struct sockaddr
**addr
, socklen_t
*addrlen
);
119 void rose_setsockopt(struct sockopt
*so
);
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
);
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
);
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
);
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
);
142 void econet_gen_sockaddr(struct sockaddr
**addr
, socklen_t
*addrlen
);
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
);
150 void can_gen_sockaddr(struct sockaddr
**addr
, socklen_t
*addrlen
);
151 void can_rand_socket(struct socket_triplet
*st
);
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
);
159 void phonet_gen_sockaddr(struct sockaddr
**addr
, socklen_t
*addrlen
);
160 void phonet_rand_socket(struct socket_triplet
*st
);
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
);