Xenomai  3.0-rc3
rtdm.h
Go to the documentation of this file.
1 
20 #ifndef _COBALT_RTDM_RTDM_H
21 #define _COBALT_RTDM_RTDM_H
22 
23 #include <linux/types.h>
24 #include <linux/fcntl.h>
25 #include <linux/ioctl.h>
26 #include <linux/sched.h>
27 #include <linux/socket.h>
28 #include <cobalt/kernel/ppd.h>
29 #include <rtdm/fd.h>
30 
31 typedef __u32 socklen_t;
32 
33 #include <rtdm/uapi/rtdm.h>
34 
35 int __rtdm_dev_open(const char *path, int oflag);
36 
37 int __rtdm_dev_socket(int protocol_family,
38  int socket_type, int protocol);
39 
40 static inline int rtdm_open(const char *path, int oflag, ...)
41 {
42  return __rtdm_dev_open(path, oflag);
43 }
44 
45 static inline int rtdm_socket(int protocol_family,
46  int socket_type, int protocol)
47 {
48  return __rtdm_dev_socket(protocol_family, socket_type, protocol);
49 }
50 
51 static inline int rtdm_close(int fd)
52 {
53  return rtdm_fd_close(fd, RTDM_FD_MAGIC);
54 }
55 
56 #define rtdm_fcntl(__fd, __cmd, __args...) \
57  rtdm_fd_fcntl(__fd, __cmd, ##__args)
58 
59 #define rtdm_ioctl(__fd, __request, __args...) \
60  rtdm_fd_ioctl(__fd, __request, ##__args)
61 
62 static inline ssize_t rtdm_read(int fd, void *buf, size_t count)
63 {
64  return rtdm_fd_read(fd, buf, count);
65 }
66 
67 static inline ssize_t rtdm_write(int fd, const void *buf, size_t count)
68 {
69  return rtdm_fd_write(fd, buf, count);
70 }
71 
72 static inline ssize_t rtdm_recvmsg(int s, struct msghdr *msg, int flags)
73 {
74  return rtdm_fd_recvmsg(s, msg, flags);
75 }
76 
77 static inline ssize_t rtdm_sendmsg(int s, const struct msghdr *msg, int flags)
78 {
79  return rtdm_fd_sendmsg(s, msg, flags);
80 }
81 
82 static inline
83 ssize_t rtdm_recvfrom(int s, void *buf, size_t len, int flags,
84  struct sockaddr *from,
85  socklen_t *fromlen)
86 {
87  struct msghdr msg;
88  struct iovec iov;
89  ssize_t ret;
90 
91  iov.iov_base = buf;
92  iov.iov_len = len;
93  msg.msg_name = from;
94  msg.msg_namelen = from ? *fromlen : 0;
95  msg.msg_iov = &iov;
96  msg.msg_iovlen = 1;
97  msg.msg_control = NULL;
98  msg.msg_controllen = 0;
99 
100  ret = rtdm_recvmsg(s, &msg, flags);
101  if (ret < 0)
102  return ret;
103 
104  if (from)
105  *fromlen = msg.msg_namelen;
106 
107  return ret;
108 }
109 
110 static inline ssize_t rtdm_recv(int s, void *buf, size_t len, int flags)
111 {
112  return rtdm_recvfrom(s, buf, len, flags, NULL, NULL);
113 }
114 
115 static inline ssize_t rtdm_sendto(int s, const void *buf, size_t len,
116  int flags, const struct sockaddr *to,
117  socklen_t tolen)
118 {
119  struct msghdr msg;
120  struct iovec iov;
121 
122  iov.iov_base = (void *)buf;
123  iov.iov_len = len;
124  msg.msg_name = (struct sockaddr *)to;
125  msg.msg_namelen = tolen;
126  msg.msg_iov = &iov;
127  msg.msg_iovlen = 1;
128  msg.msg_control = NULL;
129  msg.msg_controllen = 0;
130 
131  return rtdm_sendmsg(s, &msg, flags);
132 }
133 
134 static inline ssize_t rtdm_send(int s, const void *buf, size_t len, int flags)
135 {
136  return rtdm_sendto(s, buf, len, flags, NULL, 0);
137 }
138 
139 static inline int rtdm_getsockopt(int s, int level, int optname,
140  void *optval, socklen_t *optlen)
141 {
142  struct _rtdm_getsockopt_args args = {
143  level, optname, optval, optlen
144  };
145 
146  return rtdm_ioctl(s, _RTIOC_GETSOCKOPT, &args);
147 }
148 
149 static inline int rtdm_setsockopt(int s, int level, int optname,
150  const void *optval, socklen_t optlen)
151 {
152  struct _rtdm_setsockopt_args args = {
153  level, optname, (void *)optval, optlen
154  };
155 
156  return rtdm_ioctl(s, _RTIOC_SETSOCKOPT, &args);
157 }
158 
159 static inline int rtdm_bind(int s, const struct sockaddr *my_addr,
160  socklen_t addrlen)
161 {
162  struct _rtdm_setsockaddr_args args = {
163  my_addr, addrlen
164  };
165 
166  return rtdm_ioctl(s, _RTIOC_BIND, &args);
167 }
168 
169 static inline int rtdm_connect(int s, const struct sockaddr *serv_addr,
170  socklen_t addrlen)
171 {
172  struct _rtdm_setsockaddr_args args = {
173  serv_addr, addrlen
174  };
175 
176  return rtdm_ioctl(s, _RTIOC_CONNECT, &args);
177 }
178 
179 static inline int rtdm_listen(int s, int backlog)
180 {
181  return rtdm_ioctl(s, _RTIOC_LISTEN, backlog);
182 }
183 
184 static inline int rtdm_accept(int s, struct sockaddr *addr,
185  socklen_t *addrlen)
186 {
187  struct _rtdm_getsockaddr_args args = {
188  addr, addrlen
189  };
190 
191  return rtdm_ioctl(s, _RTIOC_ACCEPT, &args);
192 }
193 
194 static inline int rtdm_getsockname(int s, struct sockaddr *name,
195  socklen_t *namelen)
196 {
197  struct _rtdm_getsockaddr_args args = {
198  name, namelen
199  };
200 
201  return rtdm_ioctl(s, _RTIOC_GETSOCKNAME, &args);
202 }
203 
204 static inline int rtdm_getpeername(int s, struct sockaddr *name,
205  socklen_t *namelen)
206 {
207  struct _rtdm_getsockaddr_args args = {
208  name, namelen
209  };
210 
211  return rtdm_ioctl(s, _RTIOC_GETPEERNAME, &args);
212 }
213 
214 static inline int rtdm_shutdown(int s, int how)
215 {
216  return rtdm_ioctl(s, _RTIOC_SHUTDOWN, how);
217 }
218 
219 #endif /* _COBALT_RTDM_RTDM_H */
int rtdm_connect(int fd, const struct sockaddr *serv_addr, socklen_t addrlen)
Connect to remote address.
int rtdm_shutdown(int fd, int how)
Shut down parts of a connection.
int rtdm_setsockopt(int fd, int level, int optname, const void *optval, socklen_t optlen)
Set socket option.
int rtdm_bind(int fd, const struct sockaddr *my_addr, socklen_t addrlen)
Bind to local address.
int rtdm_open(const char *path, int oflag,...)
Open a device.
ssize_t rtdm_sendto(int fd, const void *buf, size_t len, int flags, const struct sockaddr *to, socklen_t tolen)
Transmit message to socket.
int rtdm_ioctl(int fd, int request,...)
Issue an IOCTL.
int rtdm_getpeername(int fd, struct sockaddr *name, socklen_t *namelen)
Get socket destination address.
int rtdm_socket(int protocol_family, int socket_type, int protocol)
Create a socket.
int rtdm_listen(int fd, int backlog)
Listen to incoming connection requests.
Real-Time Driver Model for Xenomai, user API header.
int rtdm_close(int fd)
Close a device or socket.
ssize_t rtdm_sendmsg(int fd, const struct msghdr *msg, int flags)
Transmit message to socket.
ssize_t rtdm_read(int fd, void *buf, size_t nbyte)
Read from device.
ssize_t rtdm_send(int fd, const void *buf, size_t len, int flags)
Transmit message to socket.
ssize_t rtdm_write(int fd, const void *buf, size_t nbyte)
Write to device.
int rtdm_accept(int fd, struct sockaddr *addr, socklen_t *addrlen)
Accept a connection request.
ssize_t rtdm_recvfrom(int fd, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlen)
Receive message from socket.
int rtdm_getsockopt(int fd, int level, int optname, void *optval, socklen_t *optlen)
Get socket option.
int rtdm_getsockname(int fd, struct sockaddr *name, socklen_t *namelen)
Get local socket address.
ssize_t rtdm_recv(int fd, void *buf, size_t len, int flags)
Receive message from socket.
ssize_t rtdm_recvmsg(int fd, struct msghdr *msg, int flags)
Receive message from socket.