module: added support for multiple USERSPACE receivers
[p2p-kernel-protocol.git] / module / p2pkp_net.c
1 #include "p2pkp_net.h"
2 #include "p2pkp_debug.h"
3
4 #include <linux/in.h>
5 #include <linux/errno.h>
6
7
8 /* send datagram */
9 int p2pkp_msgsend(struct socket *s, struct sockaddr_in *sin, char *buffer, int len)
10 {
11         /* message */
12         struct msghdr msg;
13         struct iovec iov;
14
15         /* build message */
16         iov.iov_base = buffer;
17         iov.iov_len = len;
18         msg.msg_name = sin;
19         msg.msg_namelen = sizeof(struct sockaddr_in);
20         msg.msg_iov = &iov;
21         msg.msg_iovlen = 1;
22         msg.msg_control = NULL;
23         msg.msg_controllen = 0;
24         msg.msg_flags = 0;
25
26         /* send the message down the socket */
27         return kernel_sendmsg(s, &msg, (struct kvec *) msg.msg_iov, 1, len);
28 }
29
30
31 int p2pkp_create_udp_sock(struct socket **sock)
32 {
33         if (!sock) {
34                 ERROR("socket memory not specified");
35                 return -EINVAL;
36         }
37
38         /* create UDP socket */
39         return sock_create_kern(PF_INET, SOCK_DGRAM, IPPROTO_UDP, sock);
40 }
41
42 void p2pkp_destroy_udp_sock(struct socket *sock)
43 {
44         sock_release(sock);
45 }