• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #ifndef __COMMON_H__
2 #define __COMMON_H__
3 
4 #define CONFIG_QEMU
5 
6 //#define DEBUG 1
7 
8 // Uncomment the following line to enable SLIRP statistics printing in Qemu
9 //#define LOG_ENABLED
10 
11 #ifdef LOG_ENABLED
12 #define STAT(expr) expr
13 #else
14 #define STAT(expr) do { } while(0)
15 #endif
16 
17 #ifndef CONFIG_QEMU
18 #include "version.h"
19 #endif
20 #include "config-host.h"
21 #include "slirp_config.h"
22 
23 #include <stddef.h>
24 #include "sockets.h"
25 
26 #ifdef _WIN32
27 # include <inttypes.h>
28 
29 typedef uint8_t u_int8_t;
30 typedef uint16_t u_int16_t;
31 typedef uint32_t u_int32_t;
32 typedef uint64_t u_int64_t;
33 typedef char *caddr_t;
34 
35 # include <windows.h>
36 # include <sys/timeb.h>
37 # include <iphlpapi.h>
38 #else
39 # define O_BINARY 0
40 #endif
41 
42 #include <sys/types.h>
43 #ifdef HAVE_SYS_BITYPES_H
44 # include <sys/bitypes.h>
45 #endif
46 
47 #include <sys/time.h>
48 
49 #ifdef NEED_TYPEDEFS
50 typedef char int8_t;
51 typedef unsigned char u_int8_t;
52 
53 # if SIZEOF_SHORT == 2
54     typedef short int16_t;
55     typedef unsigned short u_int16_t;
56 # else
57 #  if SIZEOF_INT == 2
58     typedef int int16_t;
59     typedef unsigned int u_int16_t;
60 #  else
61     #error Cannot find a type with sizeof() == 2
62 #  endif
63 # endif
64 
65 # if SIZEOF_SHORT == 4
66    typedef short int32_t;
67    typedef unsigned short u_int32_t;
68 # else
69 #  if SIZEOF_INT == 4
70     typedef int int32_t;
71     typedef unsigned int u_int32_t;
72 #  else
73     #error Cannot find a type with sizeof() == 4
74 #  endif
75 # endif
76 #endif /* NEED_TYPEDEFS */
77 
78 #ifdef HAVE_UNISTD_H
79 # include <unistd.h>
80 #endif
81 
82 #ifdef HAVE_STDLIB_H
83 # include <stdlib.h>
84 #endif
85 
86 #include <stdio.h>
87 #include <errno.h>
88 
89 #ifndef HAVE_MEMMOVE
90 #define memmove(x, y, z) bcopy(y, x, z)
91 #endif
92 
93 #if TIME_WITH_SYS_TIME
94 # include <sys/time.h>
95 # include <time.h>
96 #else
97 # ifdef HAVE_SYS_TIME_H
98 #  include <sys/time.h>
99 # else
100 #  include <time.h>
101 # endif
102 #endif
103 
104 #ifdef HAVE_STRING_H
105 # include <string.h>
106 #else
107 # include <strings.h>
108 #endif
109 
110 #ifndef _WIN32
111 #include <sys/uio.h>
112 #endif
113 
114 #undef _P
115 #ifndef NO_PROTOTYPES
116 #  define   _P(x)   x
117 #else
118 #  define   _P(x)   ()
119 #endif
120 
121 #ifndef _WIN32
122 #include <arpa/inet.h>
123 #endif
124 
125 #ifdef GETTIMEOFDAY_ONE_ARG
126 #define gettimeofday(x, y) gettimeofday(x)
127 #endif
128 
129 /* Systems lacking strdup() definition in <string.h>. */
130 #if defined(ultrix)
131 char *strdup _P((const char *));
132 #endif
133 
134 /* Systems lacking malloc() definition in <stdlib.h>. */
135 #if defined(ultrix) || defined(hcx)
136 void *malloc _P((size_t arg));
137 void free _P((void *ptr));
138 #endif
139 
140 #ifdef __STDC__
141 #include <stdarg.h>
142 #else
143 #include <varargs.h>
144 #endif
145 
146 /* Avoid conflicting with the libc insque() and remque(), which
147    have different prototypes. */
148 #define insque slirp_insque
149 #define remque slirp_remque
150 
151 #ifdef HAVE_SYS_STROPTS_H
152 #include <sys/stropts.h>
153 #endif
154 
155 #include "debug.h"
156 
157 #include "ip.h"
158 #include "tcp.h"
159 #include "tcp_timer.h"
160 #include "tcp_var.h"
161 #include "tcpip.h"
162 #include "udp.h"
163 #include "icmp_var.h"
164 #include "mbuf.h"
165 #include "sbuf.h"
166 #include "socket.h"
167 #include "if.h"
168 #include "main.h"
169 #include "misc.h"
170 #include "ctl.h"
171 #ifdef USE_PPP
172 #include "ppp/pppd.h"
173 #include "ppp/ppp.h"
174 #endif
175 
176 #include "bootp.h"
177 #include "tftp.h"
178 #include "libslirp.h"
179 
180 extern struct ttys *ttys_unit[MAX_INTERFACES];
181 
182 #ifndef NULL
183 #define NULL (void *)0
184 #endif
185 
186 #ifndef FULL_BOLT
187 void if_start _P((void));
188 #else
189 void if_start _P((struct ttys *));
190 #endif
191 
192 #ifdef BAD_SPRINTF
193 # define vsprintf vsprintf_len
194 # define sprintf sprintf_len
195  extern int vsprintf_len _P((char *, const char *, va_list));
196  extern int sprintf_len _P((char *, const char *, ...));
197 #endif
198 
199 #ifdef DECLARE_SPRINTF
200 # ifndef BAD_SPRINTF
201  extern int vsprintf _P((char *, const char *, va_list));
202 # endif
203  extern int vfprintf _P((FILE *, const char *, va_list));
204 #endif
205 
206 #ifndef HAVE_STRERROR
207  extern char *strerror _P((int error));
208 #endif
209 
210 #ifndef HAVE_INDEX
211  char *index _P((const char *, int));
212 #endif
213 
214 #ifndef HAVE_GETHOSTID
215  long gethostid _P((void));
216 #endif
217 
218 void lprint _P((const char *, ...));
219 
220 
221 #define DEFAULT_BAUD 115200
222 
223 #define SO_OPTIONS DO_KEEPALIVE
224 #define TCP_MAXIDLE (TCPTV_KEEPCNT * TCPTV_KEEPINTVL)
225 
226 /* cksum.c */
227 int cksum(struct mbuf *m, int len);
228 
229 /* if.c */
230 void if_init _P((void));
231 void if_output _P((struct socket *, struct mbuf *));
232 
233 /* ip_input.c */
234 void ip_init _P((void));
235 void ip_input _P((struct mbuf *));
236 void ip_slowtimo _P((void));
237 void ip_stripoptions _P((register struct mbuf *, struct mbuf *));
238 
239 /* ip_output.c */
240 int ip_output _P((struct socket *, struct mbuf *));
241 
242 /* tcp_input.c */
243 void tcp_input _P((register struct mbuf *, int, struct socket *));
244 int tcp_mss _P((register struct tcpcb *, u_int));
245 
246 /* tcp_output.c */
247 int tcp_output _P((register struct tcpcb *));
248 void tcp_setpersist _P((register struct tcpcb *));
249 
250 /* tcp_subr.c */
251 void tcp_init _P((void));
252 void tcp_template _P((struct tcpcb *));
253 void tcp_respond _P((struct tcpcb *, register struct tcpiphdr *, register struct mbuf *, tcp_seq, tcp_seq, int));
254 struct tcpcb * tcp_newtcpcb _P((struct socket *));
255 struct tcpcb * tcp_close _P((register struct tcpcb *));
256 void tcp_sockclosed _P((struct tcpcb *));
257 int tcp_fconnect _P((struct socket *));
258 void tcp_connect _P((struct socket *));
259 int tcp_attach _P((struct socket *));
260 u_int8_t tcp_tos _P((struct socket *));
261 int tcp_emu _P((struct socket *, struct mbuf *));
262 int tcp_ctl _P((struct socket *));
263 struct tcpcb *tcp_drop(struct tcpcb *tp, int err);
264 
265 #ifdef USE_PPP
266 #define MIN_MRU MINMRU
267 #define MAX_MRU MAXMRU
268 #else
269 #define MIN_MRU 128
270 #define MAX_MRU 16384
271 #endif
272 
273 #ifndef _WIN32
274 #define min(x,y) ((x) < (y) ? (x) : (y))
275 #define max(x,y) ((x) > (y) ? (x) : (y))
276 #endif
277 
278 #endif
279