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
42#define SOCK_STREAM 1
43#define SOCK_DGRAM 2
44#define SOCK_RAW 3
45
46#define IPPROTOCOL_ICMP 1
47#define IPPROTOCOL_TCP 6
48#define IPPROTOCOL_UDP 17
49
50/* IO Control Codes */
51//Routing Table codes
52#define SOCK_ROUTE_TABLE_ADD 0x120
53#define SOCK_ROUTE_TABLE_DELETE 0x121
54#define SOCK_ROUTE_TABLE_GETNUMENTRY 0x122
55#define SOCK_ROUTE_TABLE_GETENTRY 0x123
56#define SOCK_ADD_DNS_SERVER 0x124
57#define SOCK_GET_DNS_SERVER 0x125
58
59
60typedef size_t socklen_t;
61
62
63typedef struct _sockaddr_ {
64 unsigned short sa_family; //address family
65 char sa_data[14];
67
78
79typedef struct _iovec_ {
80 void* iov_base;
81 size_t iov_len;
83
93
94
95#define SOCK_STATE_WAITING_FOR_CONNECTION 1
96#define SOCK_STATE_CONNECTION_RST 0
97
98#ifdef ARCH_X64
99#pragma pack(push,1)
100#endif
101typedef struct _socket_ {
102 void* binedDev;
106 unsigned packID;
108 int(*receive)(struct _socket_* sock, msghdr *msg, int flags);
109 int(*send)(struct _socket_* sock, msghdr* msg, int flags);
110 void(*close)(struct _socket_* sock);
111 int(*connect)(struct _socket_* sock, sockaddr* addr, socklen_t addrlen);
112 int(*bind)(struct _socket_* sock, sockaddr* addr, socklen_t addrlen);
114#ifdef ARCH_X64
115#pragma pack(pop)
116#endif
117
120
124
125typedef struct _sockaddr_in_ {
127 unsigned short sin_port;
129 char sin_zero[8];
131
132
134/*
135 * AuSocketAdd -- add some data to socket
136 * @param sock -- Pointer to the socket
137 * @param data -- data to add
138 * @param sz -- Size of the data
139 */
140extern void AuSocketAdd(AuSocket* sock, void* data, size_t sz);
141
142/*
143 * AuSocketGet -- retreives previously stacked
144 * data from the socket
145 * @param sock -- Pointer to the socket
146 */
147extern void* AuSocketGet(AuSocket* sock);
148/*
149* AuSocketInstall -- install the socket
150* interface
151*/
152extern void AuSocketInstall();
153/*
154* AuCreateSocket -- create a new socket for specific
155* domain
156* @param domain -- domain type -- IPV4_INET, RAW or IPV6_INET
157* @param type -- type
158* @param protocol -- protocol version
159*/
160extern int AuCreateSocket(int domain, int type, int protocol);
161
162extern int AuSocketSetOpt(int sockfd, int level, int optname, const void* optval, socklen_t optlen);
163
164/*
165* AuRawSocketGetList -- get raw socket list
166*/
167extern list_t* AuRawSocketGetList();
168
169
170/*
171 * SocketIOControl -- Global socket io control function
172 * @param file -- Pointer to the socket file
173 * @param code -- IO Control Code
174 * @param arg -- extra argument
175 */
176extern int SocketIOControl(AuVFSNode* file, int code, void* arg);
177
178#endif
struct _socket_ AuSocket
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:119
uint32_t in_addr_t
Definition socket.h:118
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:60
void AuSocketInstall()
AuSocketInstall – install the socket interface.
Definition socket.cpp:349
uint32_t in_addr_t
Definition socket.h:115
size_t socklen_t
Definition socket.h:60
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:95
Definition socket.h:68
int ai_family
Definition socket.h:70
int ai_protocol
Definition socket.h:72
char * ai_canonname
Definition socket.h:75
sockaddr * ai_addr
Definition socket.h:74
int ai_flags
Definition socket.h:69
int ai_socktype
Definition socket.h:71
struct _addinfo_ * ai_next
Definition socket.h:76
socklen_t ai_addrlen
Definition socket.h:73
Definition socket.h:79
void * iov_base
Definition socket.h:80
size_t iov_len
Definition socket.h:81
Definition list.h:46
Definition socket.h:84
void * msg_name
Definition socket.h:85
iovec * msg_iov
Definition socket.h:87
size_t msg_iovlen
Definition socket.h:88
int msg_flags
Definition socket.h:91
void * msg_control
Definition socket.h:89
size_t msg_controllen
Definition socket.h:90
socklen_t msg_namelen
Definition socket.h:86
Definition socket.h:63
char sa_data[14]
Definition socket.h:65
unsigned short sa_family
Definition socket.h:64
Definition socket.h:125
unsigned short sin_port
Definition socket.h:127
struct in_addr sin_addr
Definition socket.h:128
char sin_zero[8]
Definition socket.h:129
short sin_family
Definition socket.h:126
Definition socket.h:101
AuStack * rxstack
Definition socket.h:103
unsigned packID
Definition socket.h:106
uint16_t ipv4Iden
Definition socket.h:107
int(* send)(struct _socket_ *sock, msghdr *msg, int flags)
Definition socket.h:109
void(* close)(struct _socket_ *sock)
Definition socket.h:110
int(* bind)(struct _socket_ *sock, sockaddr *addr, socklen_t addrlen)
Definition socket.h:112
uint8_t sockState
Definition socket.h:105
uint16_t sessionPort
Definition socket.h:104
void * binedDev
Definition socket.h:102
int(* receive)(struct _socket_ *sock, msghdr *msg, int flags)
Definition socket.h:108
int(* connect)(struct _socket_ *sock, sockaddr *addr, socklen_t addrlen)
Definition socket.h:111
Definition stack.h:41
Definition socket.h:121
in_addr_t s_addr
Definition socket.h:122