slirp.h revision 413f05aaf54fa08c0ae7e997327a4f4a473c0a8d
1#ifndef __COMMON_H__ 2#define __COMMON_H__ 3 4#define CONFIG_QEMU 5 6#define DEBUG 1 7 8#ifndef CONFIG_QEMU 9#include "version.h" 10#endif 11#include "config.h" 12#include "slirp_config.h" 13 14#ifdef _WIN32 15# include <inttypes.h> 16 17typedef uint8_t u_int8_t; 18typedef uint16_t u_int16_t; 19typedef uint32_t u_int32_t; 20typedef uint64_t u_int64_t; 21typedef char *caddr_t; 22 23# include <windows.h> 24# include <winsock2.h> 25# include <sys/timeb.h> 26# include <iphlpapi.h> 27 28# define EWOULDBLOCK WSAEWOULDBLOCK 29# define EINPROGRESS WSAEINPROGRESS 30# define ENOTCONN WSAENOTCONN 31# define EHOSTUNREACH WSAEHOSTUNREACH 32# define ENETUNREACH WSAENETUNREACH 33# define ECONNREFUSED WSAECONNREFUSED 34#else 35# define ioctlsocket ioctl 36# define closesocket(s) close(s) 37# define O_BINARY 0 38#endif 39 40#include <sys/types.h> 41#ifdef HAVE_SYS_BITYPES_H 42# include <sys/bitypes.h> 43#endif 44 45#include <sys/time.h> 46 47#ifdef NEED_TYPEDEFS 48typedef char int8_t; 49typedef unsigned char u_int8_t; 50 51# if SIZEOF_SHORT == 2 52 typedef short int16_t; 53 typedef unsigned short u_int16_t; 54# else 55# if SIZEOF_INT == 2 56 typedef int int16_t; 57 typedef unsigned int u_int16_t; 58# else 59 #error Cannot find a type with sizeof() == 2 60# endif 61# endif 62 63# if SIZEOF_SHORT == 4 64 typedef short int32_t; 65 typedef unsigned short u_int32_t; 66# else 67# if SIZEOF_INT == 4 68 typedef int int32_t; 69 typedef unsigned int u_int32_t; 70# else 71 #error Cannot find a type with sizeof() == 4 72# endif 73# endif 74#endif /* NEED_TYPEDEFS */ 75 76#ifdef HAVE_UNISTD_H 77# include <unistd.h> 78#endif 79 80#ifdef HAVE_STDLIB_H 81# include <stdlib.h> 82#endif 83 84#include <stdio.h> 85#include <errno.h> 86 87#ifndef HAVE_MEMMOVE 88#define memmove(x, y, z) bcopy(y, x, z) 89#endif 90 91#if TIME_WITH_SYS_TIME 92# include <sys/time.h> 93# include <time.h> 94#else 95# if HAVE_SYS_TIME_H 96# include <sys/time.h> 97# else 98# include <time.h> 99# endif 100#endif 101 102#ifdef HAVE_STRING_H 103# include <string.h> 104#else 105# include <strings.h> 106#endif 107 108#ifndef _WIN32 109#include <sys/uio.h> 110#endif 111 112#ifndef _P 113#ifndef NO_PROTOTYPES 114# define _P(x) x 115#else 116# define _P(x) () 117#endif 118#endif 119 120#ifndef _WIN32 121#include <netinet/in.h> 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) 131char *strdup _P((const char *)); 132#endif 133 134/* Systems lacking malloc() definition in <stdlib.h>. */ 135#if defined(ultrix) || defined(hcx) 136void *malloc _P((size_t arg)); 137void free _P((void *ptr)); 138#endif 139 140#ifndef HAVE_INET_ATON 141int inet_aton _P((const char *cp, struct in_addr *ia)); 142#endif 143 144#include <fcntl.h> 145#ifndef NO_UNIX_SOCKETS 146#include <sys/un.h> 147#endif 148#include <signal.h> 149#ifdef HAVE_SYS_SIGNAL_H 150# include <sys/signal.h> 151#endif 152#ifndef _WIN32 153#include <sys/socket.h> 154#endif 155 156#if defined(HAVE_SYS_IOCTL_H) 157# include <sys/ioctl.h> 158#endif 159 160#ifdef HAVE_SYS_SELECT_H 161# include <sys/select.h> 162#endif 163 164#ifdef HAVE_SYS_WAIT_H 165# include <sys/wait.h> 166#endif 167 168#ifdef HAVE_SYS_FILIO_H 169# include <sys/filio.h> 170#endif 171 172#ifdef USE_PPP 173#include <ppp/slirppp.h> 174#endif 175 176#ifdef __STDC__ 177#include <stdarg.h> 178#else 179#include <varargs.h> 180#endif 181 182#include <sys/stat.h> 183 184/* Avoid conflicting with the libc insque() and remque(), which 185 have different prototypes. */ 186#define insque slirp_insque 187#define remque slirp_remque 188 189#ifdef HAVE_SYS_STROPTS_H 190#include <sys/stropts.h> 191#endif 192 193#include "debug.h" 194 195#include "ip.h" 196#include "tcp.h" 197#include "tcp_timer.h" 198#include "tcp_var.h" 199#include "tcpip.h" 200#include "udp.h" 201#include "icmp_var.h" 202#include "mbuf.h" 203#include "sbuf.h" 204#include "socket.h" 205#include "if.h" 206#include "main.h" 207#include "misc.h" 208#include "ctl.h" 209#ifdef USE_PPP 210#include "ppp/pppd.h" 211#include "ppp/ppp.h" 212#endif 213 214#include "bootp.h" 215#include "tftp.h" 216#include "libslirp.h" 217 218extern struct ttys *ttys_unit[MAX_INTERFACES]; 219 220#ifndef NULL 221#define NULL (void *)0 222#endif 223 224#ifndef FULL_BOLT 225void if_start _P((void)); 226#else 227void if_start _P((struct ttys *)); 228#endif 229 230#ifdef BAD_SPRINTF 231# define vsprintf vsprintf_len 232# define sprintf sprintf_len 233 extern int vsprintf_len _P((char *, const char *, va_list)); 234 extern int sprintf_len _P((char *, const char *, ...)); 235#endif 236 237#ifdef DECLARE_SPRINTF 238# ifndef BAD_SPRINTF 239 extern int vsprintf _P((char *, const char *, va_list)); 240# endif 241 extern int vfprintf _P((FILE *, const char *, va_list)); 242#endif 243 244#ifndef HAVE_STRERROR 245 extern char *strerror _P((int error)); 246#endif 247 248#ifndef HAVE_INDEX 249 char *index _P((const char *, int)); 250#endif 251 252#ifndef HAVE_GETHOSTID 253 long gethostid _P((void)); 254#endif 255 256void lprint _P((const char *, ...)); 257 258extern int do_echo; 259 260#if SIZEOF_CHAR_P == 4 261# define insque_32 insque 262# define remque_32 remque 263#else 264 inline void insque_32 _P((void *, void *)); 265 inline void remque_32 _P((void *)); 266#endif 267 268#ifndef _WIN32 269#include <netdb.h> 270#endif 271 272#define DEFAULT_BAUD 115200 273 274/* cksum.c */ 275int cksum(struct mbuf *m, int len); 276 277/* if.c */ 278void if_init _P((void)); 279void if_output _P((struct socket *, struct mbuf *)); 280 281/* ip_input.c */ 282void ip_init _P((void)); 283void ip_input _P((struct mbuf *)); 284struct ip * ip_reass _P((register struct ipasfrag *, register struct ipq *)); 285void ip_freef _P((struct ipq *)); 286void ip_enq _P((register struct ipasfrag *, register struct ipasfrag *)); 287void ip_deq _P((register struct ipasfrag *)); 288void ip_slowtimo _P((void)); 289void ip_stripoptions _P((register struct mbuf *, struct mbuf *)); 290 291/* ip_output.c */ 292int ip_output _P((struct socket *, struct mbuf *)); 293 294/* tcp_input.c */ 295int tcp_reass _P((register struct tcpcb *, register struct tcpiphdr *, struct mbuf *)); 296void tcp_input _P((register struct mbuf *, int, struct socket *)); 297void tcp_dooptions _P((struct tcpcb *, u_char *, int, struct tcpiphdr *)); 298void tcp_xmit_timer _P((register struct tcpcb *, int)); 299int tcp_mss _P((register struct tcpcb *, u_int)); 300 301/* tcp_output.c */ 302int tcp_output _P((register struct tcpcb *)); 303void tcp_setpersist _P((register struct tcpcb *)); 304 305/* tcp_subr.c */ 306void tcp_init _P((void)); 307void tcp_template _P((struct tcpcb *)); 308void tcp_respond _P((struct tcpcb *, register struct tcpiphdr *, register struct mbuf *, tcp_seq, tcp_seq, int)); 309struct tcpcb * tcp_newtcpcb _P((struct socket *)); 310struct tcpcb * tcp_close _P((register struct tcpcb *)); 311void tcp_drain _P((void)); 312void tcp_sockclosed _P((struct tcpcb *)); 313int tcp_fconnect _P((struct socket *)); 314void tcp_connect _P((struct socket *)); 315int tcp_attach _P((struct socket *)); 316u_int8_t tcp_tos _P((struct socket *)); 317int tcp_emu _P((struct socket *, struct mbuf *)); 318int tcp_ctl _P((struct socket *)); 319struct tcpcb *tcp_drop(struct tcpcb *tp, int err); 320 321#ifdef USE_PPP 322#define MIN_MRU MINMRU 323#define MAX_MRU MAXMRU 324#else 325#define MIN_MRU 128 326#define MAX_MRU 16384 327#endif 328 329#ifndef _WIN32 330#define min(x,y) ((x) < (y) ? (x) : (y)) 331#define max(x,y) ((x) > (y) ? (x) : (y)) 332#endif 333 334#ifdef _WIN32 335#undef errno 336#define errno (WSAGetLastError()) 337#endif 338 339#endif 340