mOS API description
mtcp_api.h
Go to the documentation of this file.
1 #ifndef __MTCP_API_H_
2 #define __MTCP_API_H_
3 
4 #include <stdint.h>
5 #include <netinet/in.h>
6 #include <sys/uio.h>
7 
8 #ifndef UNUSED
9 #define UNUSED(x) (void)x
10 #endif
11 
12 #ifndef INPORT_ANY
13 #define INPORT_ANY (uint16_t)0
14 #endif
15 
16 typedef unsigned char byte;
17 
18 #ifdef __cplusplus
19 extern "C" {
20 #endif
21 
24 {
25  int cpu;
26 };
27 
28 typedef struct mtcp_context *mctx_t;
29 
31 typedef void (*mtcp_sighandler_t)(int);
32 
35 {
38 
39  /* listening socket type */
43  /* (pending implementation) */
47 
48  /* stream socket type */
49 
53  /* (pending implementation) */
59 
60  /* for epoll */
62  /* for pipe */
64 };
65 
66 /* Configurable mTCP attributes
67  * This is automatically generated by mOS core after the
68  * mtcp_init() function call. You can change this option
69  * in your program using mtcp_get/set_conf().
70  */
71 struct mtcp_conf
72 {
74 #define APP_NAME_LEN 40
75 
76 #define MOS_APP 20
77 
78  int num_cores;
80  uint64_t cpu_mask;
81 
89 #define MOS_APP_ARGC 20
90  uint64_t app_cpu_mask[MOS_APP];
93  int num_app;
94 };
95 
96 /* Target to modify */
98 {
99  mctx_t mctx;
100  int socket_id;
101  struct conn_filter *cf;
102  int ep_id;
103 };
104 
105 /* Application need to specify those parameters. */
106 /* NOTE: This structure is not used in mos_release 0.2a
107  * This structure will be used by embedded mOS application using
108  * mOS server.
109  */
110 struct app_ops
111 {
114  void (*app_init)(int argc, char **argv);
116  void (*thread_init)(mctx_t mctx, void **app_ctx);
119  void (*run)(mctx_t mctx, void **app_ctx);
120 };
121 
122 
130 int
131 mtcp_init(const char *config_file);
132 
136 int
137 mtcp_destroy();
138 
143 int
144 mtcp_getconf(struct mtcp_conf *conf);
145 
150 int
151 mtcp_setconf(const struct mtcp_conf *conf);
152 
157 int
158 mtcp_core_affinitize(int cpu);
159 
165 mctx_t
166 mtcp_create_context(int cpu);
167 
172 int
173 mtcp_destroy_context(mctx_t mctx);
174 
182 mtcp_register_signal(int signum, mtcp_sighandler_t handler);
183 
189 int
190 mtcp_pipe(mctx_t mctx, int pipeid[2]);
191 
222 int
223 mtcp_getsockopt(mctx_t mctx, int sock, int level,
224  int optname, void *optval, socklen_t *optlen);
225 
251 int
252 mtcp_setsockopt(mctx_t mctx, int sock, int level,
253  int optname, const void *optval, socklen_t optlen);
254 
262 int
263 mtcp_setsock_nonblock(mctx_t mctx, int sock);
264 
277 int
278 mtcp_ioctl(mctx_t mctx, int sock, int request, void *argp);
279 
291 int
292 mtcp_socket(mctx_t mctx, int domain, int type, int protocol);
293 
297 int
298 mtcp_bind(mctx_t mctx, int sock,
299  const struct sockaddr *addr, socklen_t addrlen);
300 
306 int
307 mtcp_listen(mctx_t mctx, int sock, int backlog);
308 
316 int
317 mtcp_accept(mctx_t mctx, int sock, struct sockaddr *addr, socklen_t *addrlen);
318 
329 int
330 mtcp_init_rss(mctx_t mctx, in_addr_t saddr_base, int num_addr,
331  in_addr_t daddr, in_addr_t dport);
332 
336 int
337 mtcp_connect(mctx_t mctx, int sock,
338  const struct sockaddr *addr, socklen_t addrlen);
339 
343 int
344 mtcp_close(mctx_t mctx, int sock);
345 
351 int
352 mtcp_abort(mctx_t mctx, int sock);
353 
357 ssize_t
358 mtcp_read(mctx_t mctx, int sock, char *buf, size_t len);
359 
360 /* readv should work in atomic */
364 ssize_t
365 mtcp_readv(mctx_t mctx, int sock, struct iovec *iov, int numIOV);
366 
370 ssize_t
371 mtcp_write(mctx_t mctx, int sock, char *buf, size_t len);
372 
373 /* writev should work in atomic */
377 ssize_t
378 mtcp_writev(mctx_t mctx, int sock, struct iovec *iov, int numIOV);
379 
384 uint32_t
385 mtcp_get_connection_cnt(mctx_t mctx);
386 
387 #ifdef __cplusplus
388 };
389 #endif
390 
391 #endif /* __MTCP_API_H_ */
int mtcp_core_affinitize(int cpu)
Bind a thread to a specific CPU core.
struct conn_filter * cf
Definition: mtcp_api.h:101
int mtcp_close(mctx_t mctx, int sock)
Close flow, same as close()
regular mTCP connection socket
Definition: mtcp_api.h:51
unused
Definition: mtcp_api.h:37
int mtcp_accept(mctx_t mctx, int sock, struct sockaddr *addr, socklen_t *addrlen)
Accept new flow, same as accept()
#define MOS_APP
Maximum concurrently runable application.
Definition: mtcp_api.h:76
mtcp_sighandler_t mtcp_register_signal(int signum, mtcp_sighandler_t handler)
Register signal handler (mtcp_sighandler_t handler ) for int signum.
socket_type
Socket types.
Definition: mtcp_api.h:34
ssize_t mtcp_writev(mctx_t mctx, int sock, struct iovec *iov, int numIOV)
Write byte stream to flow in vector, same as writev()
void(* app_init)(int argc, char **argv)
Initialization function which is called for only once per each application.
Definition: mtcp_api.h:114
Definition: mtcp_api.h:97
int tcp_timewait
time wait time in sec
Definition: mtcp_api.h:86
mctx_t mtcp_create_context(int cpu)
Create mOS/mtcp context thread based on the parameters passed by mtcp_init() & mtcp_setconf() functio...
mctx_t mctx
mTCP context
Definition: mtcp_api.h:99
int max_num_buffers
number of socket buffers
Definition: mtcp_api.h:82
MOS monitor socket listening socket.
Definition: mtcp_api.h:46
int mtcp_init_rss(mctx_t mctx, in_addr_t saddr_base, int num_addr, in_addr_t daddr, in_addr_t dport)
Initialize RSS pool for decide appropriate port numbers.
int mtcp_init(const char *config_file)
Initialize mOS context with parameters mentioned in the config file.
int ep_id
Definition: mtcp_api.h:102
int mtcp_listen(mctx_t mctx, int sock, int backlog)
Listen a listening socket, same as listen()
regular mTCP connection listen socket
Definition: mtcp_api.h:41
MOS proxy socket.
Definition: mtcp_api.h:54
int mtcp_destroy()
Destroy the global mOS context.
struct mtcp_context * mctx_t
Definition: mtcp_api.h:28
uint64_t cpu_mask
Definition: mtcp_api.h:80
int sndbuf_size
size of send buffer
Definition: mtcp_api.h:84
char * app_argv[MOS_APP][MOS_APP_ARGC]
Definition: mtcp_api.h:91
int tcp_timeout
timeout in sec, -1 for not to check timeout
Definition: mtcp_api.h:87
uint64_t app_cpu_mask[MOS_APP]
Definition: mtcp_api.h:90
void(* run)(mctx_t mctx, void **app_ctx)
Function contains code which will be executed after initialization phase.
Definition: mtcp_api.h:119
Definition: mtcp_api.h:61
int rcvbuf_size
size of receive buffer
Definition: mtcp_api.h:83
int mtcp_setconf(const struct mtcp_conf *conf)
Update mOS base with parameters mentioned in *conf.
ssize_t mtcp_readv(mctx_t mctx, int sock, struct iovec *iov, int numIOV)
Read byte stream from flow in vector, same as readv()
#define MOS_APP_ARGC
Definition: mtcp_api.h:89
int mtcp_destroy_context(mctx_t mctx)
Destory mtcp context that was created by mOS/mTCP thread.
MOS monitor socket (raw, stateless)
Definition: mtcp_api.h:58
int mtcp_bind(mctx_t mctx, int sock, const struct sockaddr *addr, socklen_t addrlen)
Bind a socket, same as bind()
MOS monitor socket.
Definition: mtcp_api.h:56
ssize_t mtcp_read(mctx_t mctx, int sock, char *buf, size_t len)
Read byte stream from flow, same as read()
MOS proxy socket listening socket.
Definition: mtcp_api.h:44
int num_cores
number of cores to use
Definition: mtcp_api.h:78
Definition: mtcp_api.h:110
void(* mtcp_sighandler_t)(int)
mTCP signal handler type
Definition: mtcp_api.h:31
uint32_t mtcp_get_connection_cnt(mctx_t mctx)
Get concurrent flow count of the underlying mtcp manager context (per-thread)
int mtcp_abort(mctx_t mctx, int sock)
Abort flow by sending RST.
int mtcp_ioctl(mctx_t mctx, int sock, int request, void *argp)
Control socket.
int mtcp_connect(mctx_t mctx, int sock, const struct sockaddr *addr, socklen_t addrlen)
Connect new flow, same as connect()
int max_concurrency
number of concurrent flows per core
Definition: mtcp_api.h:79
int mtcp_pipe(mctx_t mctx, int pipeid[2])
Create pipe.
ssize_t mtcp_write(mctx_t mctx, int sock, char *buf, size_t len)
Write byte stream to flow, same as write()
int mtcp_getsockopt(mctx_t mctx, int sock, int level, int optname, void *optval, socklen_t *optlen)
Get socket options.
int mtcp_getconf(struct mtcp_conf *conf)
Load current mtcp configuration in *conf.
mTCP context
Definition: mtcp_api.h:23
int num_app
number of registered apps
Definition: mtcp_api.h:93
int socket_id
listing socket ID
Definition: mtcp_api.h:100
Definition: mtcp_api.h:63
int mtcp_setsockopt(mctx_t mctx, int sock, int level, int optname, const void *optval, socklen_t optlen)
Set socket options.
int cpu
Definition: mtcp_api.h:25
int app_argc[MOS_APP]
Definition: mtcp_api.h:92
int mtcp_socket(mctx_t mctx, int domain, int type, int protocol)
Create a socket.
unsigned char byte
Definition: mtcp_api.h:16
Definition: mtcp_api.h:71
int mtcp_setsock_nonblock(mctx_t mctx, int sock)
Set socket as nonblock.
void(* thread_init)(mctx_t mctx, void **app_ctx)
Initialization function which is called for each CPU core.
Definition: mtcp_api.h:116