Rev 8537 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
8343 | superturbo | 1 | #ifndef __SOCKET_H__ |
2 | #define __SOCKET_H__ |
||
3 | |||
4 | #include |
||
5 | |||
6 | // Socket Types |
||
7 | #define SOCK_STREAM 1 |
||
8 | #define SOCK_DGRAM 2 |
||
9 | #define SOCK_RAW 3 |
||
10 | |||
11 | // IP protocols |
||
12 | #define IPPROTO_IP 0 |
||
13 | #define IPPROTO_ICMP 1 |
||
14 | #define IPPROTO_TCP 6 |
||
15 | #define IPPROTO_UDP 17 |
||
16 | #define IPPROTO_RAW 255 |
||
17 | |||
18 | // IP options |
||
19 | #define IP_TTL 2 |
||
20 | |||
21 | // Address families |
||
22 | #define AF_UNSPEC 0 |
||
23 | #define AF_LOCAL 1 |
||
8522 | superturbo | 24 | #define AF_INET 2 // Default INET=IPv4 |
8343 | superturbo | 25 | #define AF_INET4 2 // IPv4 |
26 | #define AF_INET6 10 // IPv6 |
||
27 | |||
28 | #define PF_UNSPEC AF_UNSPEC |
||
29 | #define PF_LOCAL AF_LOCAL |
||
30 | #define PF_INET4 AF_INET4 |
||
31 | #define PF_INET6 AF_INET6 |
||
32 | |||
33 | // internal definition |
||
34 | #define AI_SUPPORTED 0x40F |
||
35 | |||
36 | // for system function 76 |
||
37 | #define API_ETH (0<<16) |
||
38 | #define API_IPv4 (1<<16) |
||
39 | #define API_ICMP (2<<16) |
||
40 | #define API_UDP (3<<16) |
||
41 | #define API_TCP (4<<16) |
||
42 | #define API_ARP (5<<16) |
||
43 | #define API_PPPOE (6<<16) |
||
44 | |||
45 | // Socket flags for user calls |
||
46 | #define MSG_NOFLAG 0 |
||
47 | #define MSG_PEEK 0x02 |
||
48 | #define MSG_DONTWAIT 0x40 |
||
49 | |||
50 | // Socket levels |
||
51 | #define SOL_SOCKET 0xffff |
||
52 | |||
53 | //Socket options |
||
54 | #define SO_BINDTODEVICE (1<<9) |
||
55 | #define SO_NONBLOCK (1<<31) |
||
56 | |||
8538 | superturbo | 57 | // Error Codes |
58 | #define ENOBUFS 1 |
||
59 | #define EINPROGRESS 2 |
||
60 | #define EOPNOTSUPP 4 |
||
61 | #define EWOULDBLOCK 6 |
||
62 | #define ENOTCONN 9 |
||
63 | #define EALREADY 10 |
||
64 | #define EINVALUE 11 |
||
65 | #define EMSGSIZE 12 |
||
66 | #define ENOMEM 18 |
||
67 | #define EADDRINUSE 20 |
||
68 | #define ECONNREFUSED 61 |
||
69 | #define ECONNRESET 52 |
||
70 | #define EISCONN 56 |
||
71 | #define ETIMEDOUT 60 |
||
72 | #define ECONNABORTED 53 |
||
73 | |||
74 | |||
8343 | superturbo | 75 | #define PORT(X) (X<<8) |
8538 | superturbo | 76 | int err_code; |
8343 | superturbo | 77 | |
78 | #pragma pack(push,1) |
||
8522 | superturbo | 79 | struct sockaddr{ |
8343 | superturbo | 80 | unsigned short sin_family; |
81 | unsigned short sin_port; |
||
82 | unsigned int sin_addr; |
||
83 | unsigned long long sin_zero; |
||
8522 | superturbo | 84 | }; |
8343 | superturbo | 85 | #pragma pack(pop) |
86 | |||
87 | #pragma pack(push,1) |
||
88 | typedef struct{ |
||
89 | unsigned int level; |
||
90 | unsigned int optionname; |
||
91 | unsigned int optlenght; |
||
92 | unsigned char options; |
||
93 | }optstruct; |
||
94 | #pragma pack(pop) |
||
95 | |||
96 | static inline int socket(int domain, int type, int protocol) |
||
97 | { |
||
98 | int socket; |
||
99 | asm volatile( |
||
100 | "int $0x40" |
||
8538 | superturbo | 101 | :"=b"(err_code), "=a"(socket) |
8343 | superturbo | 102 | :"a"(75), "b"(0), "c"(domain), "d"(type), "S"(protocol) |
103 | ); |
||
104 | return socket; |
||
105 | } |
||
106 | |||
107 | static inline int close(int socket) |
||
108 | { |
||
109 | int status; |
||
110 | asm volatile( |
||
111 | "int $0x40" |
||
8538 | superturbo | 112 | :"=b"(err_code), "=a"(status) |
8343 | superturbo | 113 | :"a"(75), "b"(1), "c"(socket) |
114 | ); |
||
115 | return status; |
||
116 | } |
||
8522 | superturbo | 117 | |
118 | static inline int bind(int socket, const struct sockaddr *addres, int addres_len) |
||
8343 | superturbo | 119 | { |
120 | int status; |
||
121 | asm volatile( |
||
122 | "int $0x40" |
||
8538 | superturbo | 123 | :"=b"(err_code), "=a"(status) |
8343 | superturbo | 124 | :"a"(75), "b"(2), "c"(socket), "d"(addres), "S"(addres_len) |
125 | ); |
||
126 | return status; |
||
127 | } |
||
128 | |||
129 | static inline int listen(int socket, int backlog) |
||
130 | { |
||
131 | int status; |
||
132 | asm volatile( |
||
133 | "int $0x40" |
||
8538 | superturbo | 134 | :"=b"(err_code), "=a"(status) |
8343 | superturbo | 135 | :"a"(75), "b"(3), "c"(socket), "d"(backlog) |
136 | ); |
||
137 | return status; |
||
138 | } |
||
139 | |||
8522 | superturbo | 140 | static inline int connect(int socket, const struct sockaddr* address, int socket_len) |
8343 | superturbo | 141 | { |
142 | int status; |
||
143 | asm volatile( |
||
144 | "int $0x40" |
||
8538 | superturbo | 145 | :"=b"(err_code), "=a"(status) |
8343 | superturbo | 146 | :"a"(75), "b"(4), "c"(socket), "d"(address), "S"(socket_len) |
147 | ); |
||
148 | return status; |
||
149 | } |
||
150 | |||
8522 | superturbo | 151 | static inline int accept(int socket, const struct sockaddr *address, int address_len) |
8343 | superturbo | 152 | { |
153 | int new_socket; |
||
154 | asm volatile( |
||
155 | "int $0x40" |
||
8538 | superturbo | 156 | :"=b"(err_code), "=a"(new_socket) |
8343 | superturbo | 157 | :"a"(75), "b"(5), "c"(socket), "d"(address), "S"(address_len) |
158 | ); |
||
159 | return new_socket; |
||
160 | } |
||
161 | |||
162 | static inline int send(int socket, const void *message, size_t msg_len, int flag) |
||
163 | { |
||
164 | int status; |
||
165 | asm volatile( |
||
166 | "int $0x40" |
||
8538 | superturbo | 167 | :"=b"(err_code), "=a"(status) |
8343 | superturbo | 168 | :"a"(75), "b"(6), "c"(socket), "d"(message), "S"(msg_len), "D"(flag) |
169 | ); |
||
170 | return status; |
||
171 | } |
||
172 | |||
173 | static inline int recv(int socket, void *buffer, size_t buff_len, int flag) |
||
174 | { |
||
175 | int status; |
||
176 | asm volatile( |
||
177 | "int $0x40" |
||
8538 | superturbo | 178 | :"=b"(err_code), "=a"(status) |
8343 | superturbo | 179 | :"a"(75), "b"(7), "c"(socket), "d"(buffer), "S"(buff_len), "D"(flag) |
180 | ); |
||
181 | return status; |
||
182 | } |
||
183 | |||
184 | static inline int setsockopt(int socket,const optstruct* opt) |
||
185 | { |
||
186 | int status; |
||
187 | asm volatile( |
||
188 | "int $0x40" |
||
8538 | superturbo | 189 | :"=b"(err_code), "=a"(status) |
8343 | superturbo | 190 | :"a"(75), "b"(8), "c"(socket),"d"(opt) |
191 | ); |
||
192 | return status; |
||
193 | } |
||
194 | |||
195 | static inline int getsockopt(int socket, optstruct* opt) |
||
196 | { |
||
197 | int status; |
||
198 | asm volatile( |
||
199 | "int $0x40" |
||
8538 | superturbo | 200 | :"=b"(err_code), "=a"(status) |
8343 | superturbo | 201 | :"a"(75), "b"(9), "c"(socket),"d"(opt) |
202 | ); |
||
203 | return status; |
||
204 | } |
||
205 | |||
206 | static inline int socketpair(int *socket1, int *socket2) |
||
207 | { |
||
208 | asm volatile( |
||
209 | "int $0x40" |
||
210 | :"=b"(*socket2), "=a"(*socket1) |
||
211 | :"a"(75), "b"(10) |
||
212 | ); |
||
8538 | superturbo | 213 | err_code=*socket2; |
8343 | superturbo | 214 | return *socket1; |
215 | } |
||
216 | #endif8) |