slirp.h revision 5d8f37ad78fc66901af50c762029a501561f3b23
158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#ifndef __COMMON_H__ 258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#define __COMMON_H__ 358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#define CONFIG_QEMU 558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)//#define DEBUG 1 758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// Uncomment the following line to enable SLIRP statistics printing in Qemu 9d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)//#define LOG_ENABLED 1058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 1158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#ifdef LOG_ENABLED 1258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#define STAT(expr) expr 1358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#else 1458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#define STAT(expr) do { } while(0) 1558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#endif 1658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 1758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#ifndef CONFIG_QEMU 1858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "version.h" 1958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#endif 2058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "config-host.h" 2158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "slirp_config.h" 2258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 2358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include <stddef.h> 2458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "sockets.h" 2558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 2658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#ifdef _WIN32 2758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)# include <inttypes.h> 2858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 2958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)typedef uint8_t u_int8_t; 3058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)typedef uint16_t u_int16_t; 3158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)typedef uint32_t u_int32_t; 3258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)typedef uint64_t u_int64_t; 3358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)typedef char *caddr_t; 3458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 3558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)# include <windows.h> 3658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)# include <sys/timeb.h> 3758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)# include <iphlpapi.h> 3858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#else 3958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)# define O_BINARY 0 4058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#endif 4158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 4258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include <sys/types.h> 4358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#ifdef HAVE_SYS_BITYPES_H 4458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)# include <sys/bitypes.h> 4558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#endif 4658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 4758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include <sys/time.h> 4858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 4958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#ifdef NEED_TYPEDEFS 50d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)typedef char int8_t; 5158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)typedef unsigned char u_int8_t; 5258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 5358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)# if SIZEOF_SHORT == 2 5458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) typedef short int16_t; 5558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) typedef unsigned short u_int16_t; 5658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)# else 5758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)# if SIZEOF_INT == 2 5858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) typedef int int16_t; 5958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) typedef unsigned int u_int16_t; 6058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)# else 6158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) #error Cannot find a type with sizeof() == 2 6258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)# endif 6358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)# endif 6458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 6558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)# if SIZEOF_SHORT == 4 6658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) typedef short int32_t; 6758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) typedef unsigned short u_int32_t; 6858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)# else 6958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)# if SIZEOF_INT == 4 7058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) typedef int int32_t; 7158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) typedef unsigned int u_int32_t; 7258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)# else 7358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) #error Cannot find a type with sizeof() == 4 7458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)# endif 7558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)# endif 7658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#endif /* NEED_TYPEDEFS */ 7758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 7858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#ifdef HAVE_UNISTD_H 79d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)# include <unistd.h> 8058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#endif 8158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 8258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#ifdef HAVE_STDLIB_H 8358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)# include <stdlib.h> 8458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#endif 8558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 8658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include <stdio.h> 8758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include <errno.h> 8858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 8958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#ifndef HAVE_MEMMOVE 9058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#define memmove(x, y, z) bcopy(y, x, z) 9158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#endif 9258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 9358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#if TIME_WITH_SYS_TIME 94d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)# include <sys/time.h> 9558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)# include <time.h> 9658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#else 9758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)# ifdef HAVE_SYS_TIME_H 9858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)# include <sys/time.h> 9958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)# else 10058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)# include <time.h> 10158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)# endif 10258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#endif 10358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 10458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#ifdef HAVE_STRING_H 10558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)# include <string.h> 10658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#else 10758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)# include <strings.h> 10858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#endif 10958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 11058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#ifndef _WIN32 11158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include <sys/uio.h> 11258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#endif 11358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 11458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#undef _P 11558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#ifndef NO_PROTOTYPES 116d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)# define _P(x) x 11758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#else 11858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)# define _P(x) () 11958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#endif 12058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 12158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#ifndef _WIN32 12258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include <arpa/inet.h> 12358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#endif 12458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 12558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#ifdef GETTIMEOFDAY_ONE_ARG 12658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#define gettimeofday(x, y) gettimeofday(x) 12758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#endif 12858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 12958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)/* Systems lacking strdup() definition in <string.h>. */ 13058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#if defined(ultrix) 13158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)char *strdup _P((const char *)); 13258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#endif 13358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 13458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)/* Systems lacking malloc() definition in <stdlib.h>. */ 13558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#if defined(ultrix) || defined(hcx) 13658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)void *malloc _P((size_t arg)); 13758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)void free _P((void *ptr)); 13858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#endif 13958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 14058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#ifdef __STDC__ 141d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include <stdarg.h> 14258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#else 14358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include <varargs.h> 14458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#endif 14558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 14658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)/* Avoid conflicting with the libc insque() and remque(), which 14758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) have different prototypes. */ 14858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#define insque slirp_insque 149d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#define remque slirp_remque 150d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 151d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#ifdef HAVE_SYS_STROPTS_H 152d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include <sys/stropts.h> 153d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#endif 154d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 155d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "debug.h" 156d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 157d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "ip.h" 158d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "tcp.h" 159d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "tcp_timer.h" 160d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "tcp_var.h" 161d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "tcpip.h" 16258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#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 180extern struct ttys *ttys_unit[MAX_INTERFACES]; 181 182#ifndef NULL 183#define NULL (void *)0 184#endif 185 186#ifndef FULL_BOLT 187void if_start _P((void)); 188#else 189void 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 218void 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 */ 227int cksum(struct mbuf *m, int len); 228 229/* if.c */ 230void if_init _P((void)); 231void if_output _P((struct socket *, struct mbuf *)); 232 233/* ip_input.c */ 234void ip_init _P((void)); 235void ip_input _P((struct mbuf *)); 236void ip_slowtimo _P((void)); 237void ip_stripoptions _P((register struct mbuf *, struct mbuf *)); 238 239/* ip_output.c */ 240int ip_output _P((struct socket *, struct mbuf *)); 241 242/* tcp_input.c */ 243void tcp_input _P((register struct mbuf *, int, struct socket *)); 244int tcp_mss _P((register struct tcpcb *, u_int)); 245 246/* tcp_output.c */ 247int tcp_output _P((register struct tcpcb *)); 248void tcp_setpersist _P((register struct tcpcb *)); 249 250/* tcp_subr.c */ 251void tcp_init _P((void)); 252void tcp_template _P((struct tcpcb *)); 253void tcp_respond _P((struct tcpcb *, register struct tcpiphdr *, register struct mbuf *, tcp_seq, tcp_seq, int)); 254struct tcpcb * tcp_newtcpcb _P((struct socket *)); 255struct tcpcb * tcp_close _P((register struct tcpcb *)); 256void tcp_sockclosed _P((struct tcpcb *)); 257int tcp_fconnect _P((struct socket *)); 258void tcp_connect _P((struct socket *)); 259int tcp_attach _P((struct socket *)); 260u_int8_t tcp_tos _P((struct socket *)); 261int tcp_emu _P((struct socket *, struct mbuf *)); 262int tcp_ctl _P((struct socket *)); 263struct 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