change sockaddr generation to pass around correct types.
[trinity.git] / net / caif.c
blobc725d36820493881d4528082d83980b2e61e4897
1 #include <sys/types.h>
2 #include <sys/socket.h>
3 #include <sys/un.h>
4 #include <netinet/in.h>
5 #include <stdlib.h>
6 #include "config.h"
7 #include "net.h"
8 #include "random.h"
9 #include "utils.h" // ARRAY_SIZE
10 #include "compat.h"
12 #define SOL_CAIF 278
14 #ifdef USE_CAIF
15 #include <linux/caif/caif_socket.h>
17 void caif_gen_sockaddr(struct sockaddr **addr, socklen_t *addrlen)
19 struct sockaddr_caif *caif;
20 unsigned int i;
22 caif = malloc(sizeof(struct sockaddr_caif));
23 if (caif == NULL)
24 return;
26 caif->family = PF_CAIF;
27 caif->u.at.type = rand();
28 for (i = 0; i < 16; i++)
29 caif->u.util.service[i] = rand();
30 caif->u.dgm.connection_id = rand();
31 caif->u.dgm.nsapi = rand();
32 caif->u.rfm.connection_id = rand();
33 for (i = 0; i < 16; i++)
34 caif->u.rfm.volume[i] = rand();
35 caif->u.dbg.type = rand();
36 caif->u.dbg.service = rand();
37 *addr = (struct sockaddr *) caif;
38 *addrlen = sizeof(struct sockaddr_caif);
41 void caif_rand_socket(struct socket_triplet *st)
43 st->protocol = rand() % _CAIFPROTO_MAX;
44 if (rand_bool())
45 st->type = SOCK_SEQPACKET;
46 else
47 st->type = SOCK_STREAM;
50 static const unsigned int caif_opts[] = { CAIFSO_LINK_SELECT, CAIFSO_REQ_PARAM };
51 #define NR_SOL_CAIF_OPTS ARRAY_SIZE(caif_opts)
53 void caif_setsockopt(struct sockopt *so)
55 unsigned char val;
57 so->level = SOL_CAIF;
59 val = rand() % NR_SOL_CAIF_OPTS;
60 so->optname = caif_opts[val];
62 #else
63 /* stub if we are built on something without RDS headers */
64 void caif_setsockopt(struct sockopt *so)
66 so->level = SOL_CAIF;
68 #endif