doc: final revise of the document
[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 /* receive datagram */
31 int p2pkp_msgrecv(struct socket *s, struct sockaddr_in *sin, char *buffer, int len)
32 {
33         /* message */
34         struct msghdr msg;
35         struct iovec iov;
36
37         /* build message */
38         iov.iov_base = buffer;
39         iov.iov_len = len;
40         msg.msg_name = sin;
41         msg.msg_namelen = sizeof(struct sockaddr_in);
42         msg.msg_iov = &iov;
43         msg.msg_iovlen = 1;
44         msg.msg_control = NULL;
45         msg.msg_controllen = 0;
46         msg.msg_flags = 0;
47
48         /* send the message down the socket */
49         return kernel_recvmsg(s, &msg, (struct kvec *) msg.msg_iov, 1, len, 0);
50 }
51
52
53
54 int p2pkp_create_udp_sock(struct socket **sock)
55 {
56         if (!sock) {
57                 ERROR("socket memory not specified");
58                 return -EINVAL;
59         }
60
61         /* create UDP socket */
62         return sock_create_kern(PF_INET, SOCK_DGRAM, IPPROTO_UDP, sock);
63 }
64
65 void p2pkp_destroy_udp_sock(struct socket *sock)
66 {
67         sock_release(sock);
68 }