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
61
62typedef size_t socklen_t;
63
64
65typedef struct _sockaddr_ {
66 unsigned short sa_family; //address family
67 char sa_data[14];
69
80
81typedef struct _iovec_ {
82 void* iov_base;
83 size_t iov_len;
85
95
96
97#define SOCK_STATE_CONNECTION_RST 0
98#define SOCK_STATE_WAITING_FOR_CONNECTION 1
99#define SOCK_STATE_CONNECTED 2
100#define SOCK_STATE_CLOSED 3
101
102#ifdef ARCH_X64
103#pragma pack(push,1)
104#endif
105typedef struct _socket_ {
106 void* binedDev;
110 unsigned packID;
112 int(*receive)(struct _socket_* sock, msghdr *msg, int flags);
113 int(*send)(struct _socket_* sock, msghdr* msg, int flags);
114 void(*close)(struct _socket_* sock);
115 int(*connect)(struct _socket_* sock, sockaddr* addr, socklen_t addrlen);
116 int(*bind)(struct _socket_* sock, sockaddr* addr, socklen_t addrlen);
117 int(*listen)(struct _socket_* sock, int backlog);
118 int(*accept)(struct _socket_* sock, sockaddr* addr, socklen_t* addrlen);
119 void* proto;
121#ifdef ARCH_X64
122#pragma pack(pop)
123#endif
124
127
131
132typedef struct _sockaddr_in_ {
134 unsigned short sin_port;
136 char sin_zero[8];
138
139struct in6_addr {
141};
142
150
151
153/*
154 * AuSocketAdd -- add some data to socket
155 * @param sock -- Pointer to the socket
156 * @param data -- data to add
157 * @param sz -- Size of the data
158 */
159extern void AuSocketAdd(AuSocket* sock, void* data, size_t sz);
160
161/*
162 * AuSocketGet -- retreives previously stacked
163 * data from the socket
164 * @param sock -- Pointer to the socket
165 */
166extern void* AuSocketGet(AuSocket* sock);
167/*
168* AuSocketInstall -- install the socket
169* interface
170*/
171extern void AuSocketInstall();
172/*
173* AuCreateSocket -- create a new socket for specific
174* domain
175* @param domain -- domain type -- IPV4_INET, RAW or IPV6_INET
176* @param type -- type
177* @param protocol -- protocol version
178*/
179extern int AuCreateSocket(int domain, int type, int protocol);
180
181extern int AuSocketSetOpt(int sockfd, int level, int optname, const void* optval, socklen_t optlen);
182
183/*
184* AuRawSocketGetList -- get raw socket list
185*/
186extern list_t* AuRawSocketGetList();
187
188
189/*
190 * SocketIOControl -- Global socket io control function
191 * @param file -- Pointer to the socket file
192 * @param code -- IO Control Code
193 * @param arg -- extra argument
194 */
195extern int SocketIOControl(AuVFSNode* file, int code, void* arg);
196
197#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:126
uint32_t in_addr_t
Definition socket.h:125
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:62
void AuSocketInstall()
AuSocketInstall – install the socket interface.
Definition socket.cpp:349
uint32_t in_addr_t
Definition socket.h:116
size_t socklen_t
Definition socket.h:61
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
Definition vfs.h:98
Definition socket.h:70
int ai_family
Definition socket.h:72
int ai_protocol
Definition socket.h:74
char * ai_canonname
Definition socket.h:77
sockaddr * ai_addr
Definition socket.h:76
int ai_flags
Definition socket.h:71
int ai_socktype
Definition socket.h:73
struct _addinfo_ * ai_next
Definition socket.h:78
socklen_t ai_addrlen
Definition socket.h:75
Definition socket.h:81
void * iov_base
Definition socket.h:82
size_t iov_len
Definition socket.h:83
Definition list.h:46
Definition socket.h:86
void * msg_name
Definition socket.h:87
iovec * msg_iov
Definition socket.h:89
size_t msg_iovlen
Definition socket.h:90
int msg_flags
Definition socket.h:93
void * msg_control
Definition socket.h:91
size_t msg_controllen
Definition socket.h:92
socklen_t msg_namelen
Definition socket.h:88
Definition socket.h:65
char sa_data[14]
Definition socket.h:67
unsigned short sa_family
Definition socket.h:66
Definition socket.h:143
uint32_t sin6_scope_id
Definition socket.h:148
uint32_t sin6_flowinfo
Definition socket.h:146
unsigned short sin6_port
Definition socket.h:145
struct in6_addr sin6_addr
Definition socket.h:147
short sin6_family
Definition socket.h:144
Definition socket.h:132
unsigned short sin_port
Definition socket.h:134
struct in_addr sin_addr
Definition socket.h:135
char sin_zero[8]
Definition socket.h:136
short sin_family
Definition socket.h:133
Definition socket.h:105
AuStack * rxstack
Definition socket.h:107
unsigned packID
Definition socket.h:110
uint16_t ipv4Iden
Definition socket.h:111
int(* send)(struct _socket_ *sock, msghdr *msg, int flags)
Definition socket.h:113
void(* close)(struct _socket_ *sock)
Definition socket.h:114
int(* bind)(struct _socket_ *sock, sockaddr *addr, socklen_t addrlen)
Definition socket.h:116
int(* accept)(struct _socket_ *sock, sockaddr *addr, socklen_t *addrlen)
Definition socket.h:118
uint8_t sockState
Definition socket.h:109
uint16_t sessionPort
Definition socket.h:108
void * binedDev
Definition socket.h:106
int(* receive)(struct _socket_ *sock, msghdr *msg, int flags)
Definition socket.h:112
int(* connect)(struct _socket_ *sock, sockaddr *addr, socklen_t addrlen)
Definition socket.h:115
int(* listen)(struct _socket_ *sock, int backlog)
Definition socket.h:117
void * proto
Definition socket.h:119
Definition stack.h:41
Definition socket.h:139
uint8_t s6_addr[16]
Definition socket.h:140
Definition socket.h:128
in_addr_t s_addr
Definition socket.h:129