Xenomai 3.3.2
Loading...
Searching...
No Matches
rtdm.h
1/*
2 * Copyright (C) 2014 Philippe Gerum <rpm@xenomai.org>.
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free Software
16 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
17 */
18#ifndef _XENOMAI_TRANK_RTDM_RTDM_H
19#define _XENOMAI_TRANK_RTDM_RTDM_H
20
21#include_next <rtdm/rtdm.h>
22
23#ifdef __cplusplus
24extern "C" {
25#endif
26
27#ifndef RTDM_NO_DEFAULT_USER_API
28
29#define rt_dev_call(__call, __args...) \
30({ \
31 int __ret; \
32 __ret = __RT(__call(__args)); \
33 __ret < 0 ? -errno : __ret; \
34})
35
36#define rt_dev_open(__args...) rt_dev_call(open, __args)
37#define rt_dev_ioctl(__args...) rt_dev_call(ioctl, __args)
38#define rt_dev_recvfrom(__args...) rt_dev_call(recvfrom, __args)
39
40static inline int rt_dev_socket(int domain, int type, int protocol)
41{
42 return rt_dev_call(socket, domain, type, protocol);
43}
44
45static inline ssize_t rt_dev_recvmsg(int fd, struct msghdr *msg, int flags)
46{
47 return rt_dev_call(recvmsg, fd, msg, flags);
48}
49
50static inline ssize_t rt_dev_recv(int fd, void *buf, size_t len, int flags)
51{
52 return rt_dev_call(recvfrom, fd, buf, len, flags, NULL, NULL);
53}
54
55static inline ssize_t rt_dev_sendmsg(int fd, const struct msghdr *msg, int flags)
56{
57 return rt_dev_call(sendmsg, fd, msg, flags);
58}
59
60static inline ssize_t rt_dev_sendto(int fd, const void *buf, size_t len,
61 int flags, const struct sockaddr *to,
62 socklen_t tolen)
63{
64 struct iovec iov;
65 struct msghdr msg;
66
67 iov.iov_base = (void *)buf;
68 iov.iov_len = len;
69
70 msg.msg_name = (struct sockaddr *)to;
71 msg.msg_namelen = tolen;
72 msg.msg_iov = &iov;
73 msg.msg_iovlen = 1;
74 msg.msg_control = NULL;
75 msg.msg_controllen = 0;
76
77 return rt_dev_call(sendmsg, fd, &msg, flags);
78}
79
80static inline ssize_t rt_dev_send(int fd, const void *buf, size_t len,
81 int flags)
82{
83 return rt_dev_call(sendto, fd, buf, len, flags, NULL, 0);
84}
85
86static inline int rt_dev_getsockopt(int fd, int level, int optname,
87 void *optval, socklen_t *optlen)
88{
89 struct _rtdm_getsockopt_args args = {
90 level, optname, optval, optlen
91 };
92
93 return rt_dev_call(ioctl, fd, _RTIOC_GETSOCKOPT, &args);
94}
95
96static inline int rt_dev_setsockopt(int fd, int level, int optname,
97 const void *optval, socklen_t optlen)
98{
99 struct _rtdm_setsockopt_args args = {
100 level, optname, (void *)optval, optlen
101 };
102
103 return rt_dev_call(ioctl, fd, _RTIOC_SETSOCKOPT, &args);
104}
105
106static inline int rt_dev_bind(int fd, const struct sockaddr *my_addr,
107 socklen_t addrlen)
108{
109 struct _rtdm_setsockaddr_args args = { my_addr, addrlen };
110
111 return rt_dev_call(ioctl, fd, _RTIOC_BIND, &args);
112}
113
114static inline int rt_dev_connect(int fd, const struct sockaddr *serv_addr,
115 socklen_t addrlen)
116{
117 struct _rtdm_setsockaddr_args args = { serv_addr, addrlen };
118
119 return rt_dev_call(ioctl, fd, _RTIOC_CONNECT, &args);
120}
121
122static inline int rt_dev_listen(int fd, int backlog)
123{
124 return rt_dev_call(ioctl, fd, _RTIOC_LISTEN, backlog);
125}
126
127static inline int rt_dev_accept(int fd, struct sockaddr *addr,
128 socklen_t *addrlen)
129{
130 struct _rtdm_getsockaddr_args args = { addr, addrlen };
131
132 return rt_dev_call(ioctl, fd, _RTIOC_ACCEPT, &args);
133}
134
135static inline int rt_dev_getsockname(int fd, struct sockaddr *name,
136 socklen_t *namelen)
137{
138 struct _rtdm_getsockaddr_args args = { name, namelen };
139
140 return rt_dev_call(ioctl, fd, _RTIOC_GETSOCKNAME, &args);
141}
142
143static inline int rt_dev_getpeername(int fd, struct sockaddr *name,
144 socklen_t *namelen)
145{
146 struct _rtdm_getsockaddr_args args = { name, namelen };
147
148 return rt_dev_call(ioctl, fd, _RTIOC_GETPEERNAME, &args);
149}
150
151static inline int rt_dev_shutdown(int fd, int how)
152{
153 return rt_dev_call(ioctl, fd, _RTIOC_SHUTDOWN, how);
154}
155
156static inline int rt_dev_close(int fd)
157{
158 return rt_dev_call(close, fd);
159}
160
161static inline ssize_t rt_dev_write(int fd, const void *buf, size_t len)
162{
163 return rt_dev_call(write, fd, buf, len);
164}
165
166static inline ssize_t rt_dev_read(int fd, void *buf, size_t len)
167{
168 return rt_dev_call(read, fd, buf, len);
169}
170
171#endif /* !RTDM_NO_DEFAULT_USER_API */
172
173#ifdef __cplusplus
174}
175#endif
176
177#endif /* _XENOMAI_TRANK_RTDM_RTDM_H */