1/*
2 * Copyright 2008, Haiku, Inc. All Rights Reserved.
3 * This file may be used under the terms of the MIT License.
4 */
5#ifndef NET_STACK_INTERFACE_H
6#define NET_STACK_INTERFACE_H
7
8
9#include <sys/socket.h>
10
11
12// name of the kernel stack interface
13#define NET_STACK_INTERFACE_MODULE_NAME "network/stack/kernel_interface/v1"
14
15// name of the userland stack interface
16#define NET_STACK_USERLAND_INTERFACE_MODULE_NAME \
17	"network/stack/userland_interface/v1"
18
19
20struct net_socket;
21struct net_stat;
22
23
24struct net_stack_interface_module_info {
25	module_info info;
26
27	status_t (*open)(int family, int type, int protocol, net_socket** _socket);
28	status_t (*close)(net_socket* socket);
29	status_t (*free)(net_socket* socket);
30
31	status_t (*bind)(net_socket* socket, const struct sockaddr* address,
32					socklen_t addressLength);
33	status_t (*shutdown)(net_socket* socket, int how);
34	status_t (*connect)(net_socket* socket, const struct sockaddr* address,
35					socklen_t addressLength);
36	status_t (*listen)(net_socket* socket, int backlog);
37	status_t (*accept)(net_socket* socket, struct sockaddr* address,
38					socklen_t* _addressLength, net_socket** _acceptedSocket);
39
40	ssize_t (*recv)(net_socket* socket, void* data, size_t length, int flags);
41	ssize_t (*recvfrom)(net_socket* socket, void* data, size_t length,
42					int flags, struct sockaddr* address,
43					socklen_t* _addressLength);
44	ssize_t (*recvmsg)(net_socket* socket, struct msghdr* message, int flags);
45
46	ssize_t (*send)(net_socket* socket, const void* data, size_t length,
47					int flags);
48	ssize_t (*sendto)(net_socket* socket, const void* data, size_t length,
49					int flags, const struct sockaddr* address,
50					socklen_t addressLength);
51	ssize_t (*sendmsg)(net_socket* socket, const struct msghdr* message,
52					int flags);
53
54	status_t (*getsockopt)(net_socket* socket, int level, int option,
55					void* value, socklen_t* _length);
56	status_t (*setsockopt)(net_socket* socket, int level, int option,
57					const void* value, socklen_t length);
58
59	status_t (*getpeername)(net_socket* socket, struct sockaddr* address,
60					socklen_t* _addressLength);
61	status_t (*getsockname)(net_socket* socket, struct sockaddr* address,
62					socklen_t* _addressLength);
63
64	int (*sockatmark)(net_socket* socket);
65
66	status_t (*socketpair)(int family, int type, int protocol,
67					net_socket* _sockets[2]);
68
69	status_t (*ioctl)(net_socket* socket, uint32 op, void *buffer,
70					size_t length);
71	status_t (*select)(net_socket* socket, uint8 event,
72					struct selectsync *sync);
73	status_t (*deselect)(net_socket* socket, uint8 event,
74					struct selectsync *sync);
75
76	status_t (*get_next_socket_stat)(int family, uint32 *cookie,
77					struct net_stat *stat);
78};
79
80
81#endif	// NET_STACK_INTERFACE_H
82