XenevaOS
Loading...
Searching...
No Matches
socket.h
Go to the documentation of this file.
1
30#ifndef __SOCKET_H__
31#define __SOCKET_H__
32
33#include <stdint.h>
34#include <Fs/vfs.h>
35#include <stack.h>
36#include <list.h>
37
38#define AF_UNSPEC 0
39#define AF_INET 1
40#define AF_RAW 2
41#define AF_INET6 3
42
43#define SOCK_STREAM 1
44#define SOCK_DGRAM 2
45#define SOCK_RAW 3
46
47#define IPPROTOCOL_ICMP 1
48#define IPPROTOCOL_TCP 6
49#define IPPROTOCOL_UDP 17
50#define IPPROTOCOL_ICMPV6 58
51
52/* IO Control Codes */
53//Routing Table codes
54#define SOCK_ROUTE_TABLE_ADD 0x120
55#define SOCK_ROUTE_TABLE_DELETE 0x121
56#define SOCK_ROUTE_TABLE_GETNUMENTRY 0x122
57#define SOCK_ROUTE_TABLE_GETENTRY 0x123
58#define SOCK_ADD_DNS_SERVER 0x124
59#define SOCK_GET_DNS_SERVER 0x125
60#define SOCK_NF_APPEND 0x126
61#define SOCK_NF_DELETE 0x127
62#define SOCK_NF_LIST 0x128
63#define SOCK_NF_FLUSH 0x129
64#define SOCK_NF_GETNUM 0x12A
65
66
67typedef size_t socklen_t;
68
69
70typedef struct _sockaddr_ {
71 unsigned short sa_family; //address family
72 char sa_data[14];
74
85
86typedef struct _iovec_ {
87 void* iov_base;
88 size_t iov_len;
90
100
101
102#define SOCK_STATE_CONNECTION_RST 0
103#define SOCK_STATE_WAITING_FOR_CONNECTION 1
104#define SOCK_STATE_CONNECTED 2
105#define SOCK_STATE_CLOSED 3
106
107#ifdef ARCH_X64
108#pragma pack(push,1)
109#endif
110typedef struct _socket_ {
111 void* binedDev;
115 unsigned packID;
117 int(*receive)(struct _socket_* sock, msghdr *msg, int flags);
118 int(*send)(struct _socket_* sock, msghdr* msg, int flags);
119 void(*close)(struct _socket_* sock);
120 int(*connect)(struct _socket_* sock, sockaddr* addr, socklen_t addrlen);
121 int(*bind)(struct _socket_* sock, sockaddr* addr, socklen_t addrlen);
122 int(*listen)(struct _socket_* sock, int backlog);
123 int(*accept)(struct _socket_* sock, sockaddr* addr, socklen_t* addrlen);
124 void* proto;
125 /* 1: AuTCPConnect returns before the handshake finishes. */
128#ifdef ARCH_X64
129#pragma pack(pop)
130#endif
131
134
138
139typedef struct _sockaddr_in_ {
141 unsigned short sin_port;
143 char sin_zero[8];
145
146struct in6_addr {
148};
149
157
158
160/*
161 * AuSocketAdd -- add some data to socket
162 * @param sock -- Pointer to the socket
163 * @param data -- data to add
164 * @param sz -- Size of the data
165 */
166extern void AuSocketAdd(AuSocket* sock, void* data, size_t sz);
167
168/*
169 * AuSocketGet -- retreives previously stacked
170 * data from the socket
171 * @param sock -- Pointer to the socket
172 */
173extern void* AuSocketGet(AuSocket* sock);
174/*
175* AuSocketInstall -- install the socket
176* interface
177*/
178extern void AuSocketInstall();
179/*
180* AuCreateSocket -- create a new socket for specific
181* domain
182* @param domain -- domain type -- IPV4_INET, RAW or IPV6_INET
183* @param type -- type
184* @param protocol -- protocol version
185*/
186extern int AuCreateSocket(int domain, int type, int protocol);
187
188extern int AuSocketSetOpt(int sockfd, int level, int optname, const void* optval, socklen_t optlen);
189
190/*
191* AuRawSocketGetList -- get raw socket list
192*/
193extern list_t* AuRawSocketGetList();
194
195
196/*
197 * SocketIOControl -- Global socket io control function
198 * @param file -- Pointer to the socket file
199 * @param code -- IO Control Code
200 * @param arg -- extra argument
201 */
202extern int SocketIOControl(AuVFSNode* file, int code, void* arg);
203
204#endif
struct _socket_ AuSocket
struct _sockaddr_in6_ sockaddr_in6
void * AuSocketGet(AuSocket *sock)
AuSocketGet – retreives previously stacked data from the socket.
Definition socket.cpp:71
int AuCreateSocket(int domain, int type, int protocol)
AuCreateSocket – create a new socket for specific domain.
Definition socket.cpp:333
struct _iovec_ iovec
struct _sockaddr_in_ sockaddr_in
AuSocket * AuNetCreateSocket()
Definition socket.cpp:144
struct _addrinfo_ addrinfo
list_t * AuRawSocketGetList()
AuRawSocketGetList – get raw socket list.
Definition socket.cpp:356
struct _sockaddr_ sockaddr
struct _msghdr_ msghdr
int AuSocketSetOpt(int sockfd, int level, int optname, const void *optval, socklen_t optlen)
Definition socket.cpp:124
uint16_t in_port_t
Definition socket.h:133
uint32_t in_addr_t
Definition socket.h:132
void AuSocketAdd(AuSocket *sock, void *data, size_t sz)
AuSocketAdd – add some data to socket.
Definition socket.cpp:57
int SocketIOControl(AuVFSNode *file, int code, void *arg)
SocketIOControl – Global socket io control function.
Definition socket.cpp:186
size_t socklen_t
Definition socket.h:67
void AuSocketInstall()
AuSocketInstall – install the socket interface.
Definition socket.cpp:349
uint8_t flags
Definition virtio.h:0
uint32_t in_addr_t
Definition socket.h:154
size_t socklen_t
Definition socket.h:63
unsigned int uint32_t
Definition acefiex.h:163
unsigned char uint8_t
Definition acefiex.h:161
unsigned short int uint16_t
Definition acefiex.h:162
const char * level
Definition drm_print.h:515
void * data
Definition kthread.h:30
Definition vfs.h:129
Definition socket.h:75
int ai_family
Definition socket.h:77
int ai_protocol
Definition socket.h:79
struct _addinfo_ * ai_next
Definition socket.h:83
char * ai_canonname
Definition socket.h:82
sockaddr * ai_addr
Definition socket.h:81
int ai_flags
Definition socket.h:76
int ai_socktype
Definition socket.h:78
socklen_t ai_addrlen
Definition socket.h:80
Definition socket.h:86
void * iov_base
Definition socket.h:87
size_t iov_len
Definition socket.h:88
Definition list.h:46
Definition socket.h:91
void * msg_name
Definition socket.h:92
iovec * msg_iov
Definition socket.h:94
size_t msg_iovlen
Definition socket.h:95
int msg_flags
Definition socket.h:98
void * msg_control
Definition socket.h:96
size_t msg_controllen
Definition socket.h:97
socklen_t msg_namelen
Definition socket.h:93
Definition socket.h:70
char sa_data[14]
Definition socket.h:72
unsigned short sa_family
Definition socket.h:71
Definition socket.h:150
uint32_t sin6_scope_id
Definition socket.h:155
uint32_t sin6_flowinfo
Definition socket.h:153
unsigned short sin6_port
Definition socket.h:152
struct in6_addr sin6_addr
Definition socket.h:154
short sin6_family
Definition socket.h:151
Definition socket.h:139
unsigned short sin_port
Definition socket.h:141
struct in_addr sin_addr
Definition socket.h:142
char sin_zero[8]
Definition socket.h:143
short sin_family
Definition socket.h:140
Definition socket.h:110
AuStack * rxstack
Definition socket.h:112
unsigned packID
Definition socket.h:115
uint16_t ipv4Iden
Definition socket.h:116
int(* send)(struct _socket_ *sock, msghdr *msg, int flags)
Definition socket.h:118
void(* close)(struct _socket_ *sock)
Definition socket.h:119
int(* bind)(struct _socket_ *sock, sockaddr *addr, socklen_t addrlen)
Definition socket.h:121
int(* accept)(struct _socket_ *sock, sockaddr *addr, socklen_t *addrlen)
Definition socket.h:123
uint8_t sockState
Definition socket.h:114
uint16_t sessionPort
Definition socket.h:113
void * binedDev
Definition socket.h:111
int(* receive)(struct _socket_ *sock, msghdr *msg, int flags)
Definition socket.h:117
uint8_t nonblock
Definition socket.h:126
int(* connect)(struct _socket_ *sock, sockaddr *addr, socklen_t addrlen)
Definition socket.h:120
int(* listen)(struct _socket_ *sock, int backlog)
Definition socket.h:122
void * proto
Definition socket.h:124
Definition stack.h:41
Definition fs.h:142
Definition socket.h:146
uint8_t s6_addr[16]
Definition socket.h:147
Definition socket.h:135
in_addr_t s_addr
Definition socket.h:136