forked from jserv/nstack
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathnstack_socket.h
More file actions
118 lines (97 loc) · 2.73 KB
/
nstack_socket.h
File metadata and controls
118 lines (97 loc) · 2.73 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
/**
* nstack sockets.
* @addtogroup Socket
* @{
*/
#ifndef NSTACK_SOCKET_H
#define NSTACK_SOCKET_H
#include <stdint.h>
#include <sys/types.h>
#include "linker_set.h"
#include "nstack_in.h"
#include "queue_r.h"
#define NSTACK_SHMEM_SIZE \
(sizeof(struct nstack_sock_ctrl) + 2 * sizeof(struct queue_cb) + \
2 * NSTACK_DATAGRAM_BUF_SIZE)
#define NSTACK_SOCK_CTRL(x) ((struct nstack_sock_ctrl *) (x))
#define NSTACK_INGRESS_QADDR(x) \
((struct queue_cb *) ((uintptr_t) NSTACK_SOCK_CTRL(x) + \
sizeof(struct nstack_sock_ctrl)))
#define NSTACK_INGRESS_DADDR(x) \
((uint8_t *) ((uintptr_t) NSTACK_INGRESS_QADDR(x) + \
sizeof(struct queue_cb)))
#define NSTACK_EGRESS_QADDR(x) \
((struct queue_cb *) ((uintptr_t) NSTACK_INGRESS_DADDR(x) + \
NSTACK_DATAGRAM_BUF_SIZE))
#define NSTACK_EGRESS_DADDR(x) \
((uint8_t *) ((uintptr_t) NSTACK_EGRESS_QADDR(x) + sizeof(struct queue_cb)))
/**
* Socket domain.
*/
enum nstack_sock_dom {
XF_INET4, /*!< IPv4 address. */
XF_INET6, /*!< IPv6 address. */
};
/**
* Socket type.
*/
enum nstack_sock_type {
XSOCK_DGRAM, /*!< Unreliable datagram oriented service. */
XSOCK_STREAM, /*!< Reliable stream oriented service. */
};
/**
* Socket protocol.
*/
enum nstack_sock_proto {
XIP_PROTO_NONE = 0,
XIP_PROTO_TCP, /*!< TCP/IP. */
XIP_PROTO_UDP, /*!< UDP/IP. */
XIP_PROTO_LAST
};
/**
* Max port number.
*/
#define NSTACK_SOCK_PORT_MAX 49151
/**
* Socket addresss descriptor.
*/
struct nstack_sockaddr {
union {
in_addr_t inet4_addr; /*!< IPv4 address. */
};
union {
int port; /*!< Protocol port. */
};
};
struct nstack_sock_ctrl {
pid_t pid_inetd;
pid_t pid_end;
};
struct nstack_sock_info {
enum nstack_sock_dom sock_dom;
enum nstack_sock_type sock_type;
enum nstack_sock_proto sock_proto;
struct nstack_sockaddr sock_addr;
} info;
struct nstack_dgram {
struct nstack_sockaddr srcaddr;
struct nstack_sockaddr dstaddr;
size_t buf_size;
uint8_t buf[0];
};
#define NSTACK_MSG_PEEK 0x1
void *nstack_listen(const char *socket_path);
ssize_t nstack_recvfrom(void *socket,
void *restrict buffer,
size_t length,
int flags,
struct nstack_sockaddr *restrict address);
ssize_t nstack_sendto(void *socket,
const void *buffer,
size_t length,
int flags,
const struct nstack_sockaddr *dest_addr);
#endif /* NSTACK_SOCKET_H */
/**
* @}
*/