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