blob: da9dc5f7bf48393d4106277c1f14da3df2cb28a5 [file] [log] [blame]
Keith Burns (alagalah)b327c2b2017-10-09 08:52:59 -07001/*
2 * Copyright (c) 2017 Cisco and/or its affiliates.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at:
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16#ifndef included_vcom_h
17#define included_vcom_h
18
19/* VCOM DEBUG flag. Setting this to 1 or 0 turns off
20 ASSERT & other debugging code. */
21#ifndef VCOM_DEBUG
22#define VCOM_DEBUG 0
23#endif
24
Dave Wallace5c7cf1c2017-10-24 04:12:18 -040025#include <vcl/vcom_glibc_socket.h>
Keith Burns (alagalah)b327c2b2017-10-09 08:52:59 -070026
27#define MAX_VCOM_APP_NAME 256
28
29/* Returns 0 on success or -1 on error. */
30extern int vcom_set_app_name (char *__app_name);
31
32/*
33 *
34 * File descriptor based APIs
35 *
36 */
37
38/*
39 * vpp implementation of glibc APIs from <unistd.h>
40 */
41extern int vcom_close (int __fd);
42
43extern ssize_t __wur vcom_read (int __fd, void *__buf, size_t __nbytes);
44
45extern ssize_t __wur vcom_write (int __fd, const void *__buf, size_t __n);
46
47extern ssize_t __wur vcom_readv (int __fd, const struct iovec *__iov,
48 int __iovcnt);
49
50extern ssize_t __wur vcom_writev (int __fd, const struct iovec *__iov,
51 int __iovcnt);
52
53/*
54 * vpp implementation of glibc APIs from <fcntl.h>
55 */
56extern int vcom_fcntl (int __fd, int __cmd, ...);
57
58/*
Stevenb59f2272017-10-12 17:10:33 -070059 * VPP implementation of glibc APIs ioctl
60 */
61extern int vcom_ioctl (int __fd, unsigned long int __cmd, ...);
62
63/*
Keith Burns (alagalah)b327c2b2017-10-09 08:52:59 -070064 * vpp implementation of glibc APIs from <sys/select.h>
65 */
66extern int
67vcom_select (int __nfds, fd_set * __restrict __readfds,
68 fd_set * __restrict __writefds,
69 fd_set * __restrict __exceptfds,
70 struct timeval *__restrict __timeout);
71
72#ifdef __USE_XOPEN2K
73extern int
74vcom_pselect (int __nfds, fd_set * __restrict __readfds,
75 fd_set * __restrict __writefds,
76 fd_set * __restrict __exceptfds,
77 const struct timespec *__restrict __timeout,
78 const __sigset_t * __restrict __sigmask);
79#endif
80
81/*
82 * vpp implementation of glibc APIs from <sys/socket.h>
83 */
84extern int __THROW vcom_socket (int __domain, int __type, int __protocol);
85
86/* On Linux, the only supported domain for this call is AF_UNIX
87* (or synonymously, AF_LOCAL). Most implementations have the
88* same restriction.
89* vpp does not implement AF_UNIX domain in this release.
90* */
91extern int __THROW
92vcom_socketpair (int __domain, int __type, int __protocol, int __fds[2]);
93
94extern int __THROW
95vcom_bind (int __fd, __CONST_SOCKADDR_ARG __addr, socklen_t __len);
96
97extern int __THROW
98vcom_getsockname (int __fd, __SOCKADDR_ARG __addr,
99 socklen_t * __restrict __len);
100
101extern int
102vcom_connect (int __fd, __CONST_SOCKADDR_ARG __addr, socklen_t __len);
103
104extern int __THROW
105vcom_getpeername (int __fd, __SOCKADDR_ARG __addr,
106 socklen_t * __restrict __len);
107
108extern ssize_t
109vcom_send (int __fd, const void *__buf, size_t __n, int __flags);
110
111extern ssize_t vcom_recv (int __fd, void *__buf, size_t __n, int __flags);
112
113extern ssize_t
114vcom_sendto (int __fd, const void *__buf, size_t __n,
115 int __flags, __CONST_SOCKADDR_ARG __addr, socklen_t __addr_len);
116
117extern ssize_t
118vcom_recvfrom (int __fd, void *__restrict __buf,
119 size_t __n, int __flags,
120 __SOCKADDR_ARG __addr, socklen_t * __restrict __addr_len);
121
122extern ssize_t
123vcom_sendmsg (int __fd, const struct msghdr *__message, int __flags);
124
125#ifdef __USE_GNU
126extern int
127sendmmsg (int __fd, struct mmsghdr *__vmessages,
128 unsigned int __vlen, int __flags);
129#endif
130
131extern ssize_t vcom_recvmsg (int __fd, struct msghdr *__message, int __flags);
132
133#ifdef __USE_GNU
134extern int
135vcom_recvmmsg (int __fd, struct mmsghdr *__vmessages,
136 unsigned int __vlen, int __flags, struct timespec *__tmo);
137#endif
138
139extern int __THROW
140vcom_getsockopt (int __fd, int __level, int __optname,
141 void *__restrict __optval, socklen_t * __restrict __optlen);
142
143extern int __THROW
144vcom_setsockopt (int __fd, int __level, int __optname,
145 const void *__optval, socklen_t __optlen);
146
147extern int __THROW vcom_listen (int __fd, int __n);
148
149extern int
150vcom_accept (int __fd, __SOCKADDR_ARG __addr,
151 socklen_t * __restrict __addr_len);
152
153#ifdef __USE_GNU
154/*
155 * Similar to 'accept' but takes an additional parameter to specify
156 * flags.
157 * */
158/* TBD: implemented later */
159extern int
160vcom_accept4 (int __fd, __SOCKADDR_ARG __addr,
161 socklen_t * __restrict __addr_len, int __flags);
162#endif
163
164extern int __THROW vcom_shutdown (int __fd, int __how);
165
166extern int __THROW vcom_epoll_create (int __size);
167
168extern int __THROW vcom_epoll_create1 (int __flags);
169
170extern int __THROW
171vcom_epoll_ctl (int __epfd, int __op, int __fd, struct epoll_event *__event);
172
173extern int
174vcom_epoll_wait (int __epfd, struct epoll_event *__events,
175 int __maxevents, int __timeout);
176
177extern int
178vcom_epoll_pwait (int __epfd, struct epoll_event *__events,
179 int __maxevents, int __timeout, const __sigset_t * __ss);
180
shrinivasan ganapathy1d359632017-10-15 15:46:09 -0700181/*
182 * NOTE: observed __nfds is less than 128 from kubecon strace files
183 * for the POC, it's fair to assume that nfds is less than 1024.
184 * TBD: make it thread safe and design to scale.
185 * */
186#define MAX_POLL_NFDS_DEFAULT 1024
Keith Burns (alagalah)b327c2b2017-10-09 08:52:59 -0700187extern int vcom_poll (struct pollfd *__fds, nfds_t __nfds, int __timeout);
188
189#ifdef __USE_GNU
190extern int
191vcom_ppoll (struct pollfd *__fds, nfds_t __nfds,
192 const struct timespec *__timeout, const __sigset_t * __ss);
193#endif
194
195
196#endif /* included_vcom_h */
197
198/*
199 * fd.io coding-style-patch-verification: ON
200 *
201 * Local Variables:
202 * eval: (c-set-style "gnu")
203 * End:
204 */