18b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifndef __COMMON_H__
28b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define __COMMON_H__
38b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
48b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define CONFIG_QEMU
58b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
65d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner//#define DEBUG 1
75d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
85d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner// Uncomment the following line to enable SLIRP statistics printing in Qemu
95d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner//#define LOG_ENABLED
105d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
115d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#ifdef LOG_ENABLED
125d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define STAT(expr) expr
135d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#else
145d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define STAT(expr) do { } while(0)
155d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#endif
168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifndef CONFIG_QEMU
188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#include "version.h"
198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
205d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#include "config-host.h"
218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#include "slirp_config.h"
228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifdef _WIN32
248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project# include <inttypes.h>
258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projecttypedef uint8_t u_int8_t;
278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projecttypedef uint16_t u_int16_t;
288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projecttypedef uint32_t u_int32_t;
298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projecttypedef uint64_t u_int64_t;
308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projecttypedef char *caddr_t;
318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project# include <windows.h>
335d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner# include <winsock2.h>
345d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner# include <ws2tcpip.h>
358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project# include <sys/timeb.h>
368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project# include <iphlpapi.h>
375d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
385d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner# define EWOULDBLOCK WSAEWOULDBLOCK
395d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner# define EINPROGRESS WSAEINPROGRESS
405d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner# define ENOTCONN WSAENOTCONN
415d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner# define EHOSTUNREACH WSAEHOSTUNREACH
425d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner# define ENETUNREACH WSAENETUNREACH
435d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner# define ECONNREFUSED WSAECONNREFUSED
448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
455d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner# define ioctlsocket ioctl
465d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner# define closesocket(s) close(s)
478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project# define O_BINARY 0
488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#include <sys/types.h>
518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifdef HAVE_SYS_BITYPES_H
528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project# include <sys/bitypes.h>
538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#include <sys/time.h>
568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifdef NEED_TYPEDEFS
588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projecttypedef char int8_t;
598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projecttypedef unsigned char u_int8_t;
608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project# if SIZEOF_SHORT == 2
628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    typedef short int16_t;
638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    typedef unsigned short u_int16_t;
648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project# else
658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#  if SIZEOF_INT == 2
668b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    typedef int int16_t;
678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    typedef unsigned int u_int16_t;
688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#  else
698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    #error Cannot find a type with sizeof() == 2
708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#  endif
718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project# endif
728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project# if SIZEOF_SHORT == 4
748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   typedef short int32_t;
758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   typedef unsigned short u_int32_t;
768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project# else
778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#  if SIZEOF_INT == 4
788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    typedef int int32_t;
798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    typedef unsigned int u_int32_t;
808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#  else
818b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project    #error Cannot find a type with sizeof() == 4
828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#  endif
838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project# endif
848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif /* NEED_TYPEDEFS */
858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifdef HAVE_UNISTD_H
878b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project# include <unistd.h>
888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifdef HAVE_STDLIB_H
918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project# include <stdlib.h>
928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#include <stdio.h>
958b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#include <errno.h>
968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
978b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifndef HAVE_MEMMOVE
988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define memmove(x, y, z) bcopy(y, x, z)
998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
1008b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
1018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if TIME_WITH_SYS_TIME
1028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project# include <sys/time.h>
1038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project# include <time.h>
1048b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
1055d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner# ifdef HAVE_SYS_TIME_H
1068b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#  include <sys/time.h>
1078b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project# else
1088b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#  include <time.h>
1098b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project# endif
1108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
1118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
1128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifdef HAVE_STRING_H
1138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project# include <string.h>
1148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
1158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project# include <strings.h>
1168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
1178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
1188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifndef _WIN32
1198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#include <sys/uio.h>
1208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
1218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
1225d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#undef _P
1238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifndef NO_PROTOTYPES
1248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#  define   _P(x)   x
1258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
1268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#  define   _P(x)   ()
1278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
1288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
1298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifndef _WIN32
1305d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#include <netinet/in.h>
1318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#include <arpa/inet.h>
1328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
1338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
1348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifdef GETTIMEOFDAY_ONE_ARG
1358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define gettimeofday(x, y) gettimeofday(x)
1368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
1378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
1388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* Systems lacking strdup() definition in <string.h>. */
1398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if defined(ultrix)
1408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectchar *strdup _P((const char *));
1418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
1428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
1438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* Systems lacking malloc() definition in <stdlib.h>. */
1448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if defined(ultrix) || defined(hcx)
1458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectvoid *malloc _P((size_t arg));
1468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectvoid free _P((void *ptr));
1478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
1488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
1495d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#ifndef HAVE_INET_ATON
1505d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerint inet_aton _P((const char *cp, struct in_addr *ia));
1515d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#endif
1525d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
1535d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#include <fcntl.h>
1545d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#ifndef NO_UNIX_SOCKETS
1555d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#include <sys/un.h>
1565d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#endif
1575d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#include <signal.h>
1585d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#ifdef HAVE_SYS_SIGNAL_H
1595d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner# include <sys/signal.h>
1605d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#endif
1615d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#ifndef _WIN32
1625d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#include <sys/socket.h>
1635d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#endif
1645d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
1655d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#if defined(HAVE_SYS_IOCTL_H)
1665d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner# include <sys/ioctl.h>
1675d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#endif
1685d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
1695d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#ifdef HAVE_SYS_SELECT_H
1705d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner# include <sys/select.h>
1715d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#endif
1725d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
1735d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#ifdef HAVE_SYS_WAIT_H
1745d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner# include <sys/wait.h>
1755d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#endif
1765d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
1775d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#ifdef HAVE_SYS_FILIO_H
1785d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner# include <sys/filio.h>
1795d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#endif
1805d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
1815d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#ifdef USE_PPP
1825d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#include <ppp/slirppp.h>
1835d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#endif
1845d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
1858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifdef __STDC__
1868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#include <stdarg.h>
1878b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
1888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#include <varargs.h>
1898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
1908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
1915d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#include <sys/stat.h>
1925d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
1938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* Avoid conflicting with the libc insque() and remque(), which
1948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project   have different prototypes. */
1958b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define insque slirp_insque
1968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define remque slirp_remque
1978b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
1988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifdef HAVE_SYS_STROPTS_H
1998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#include <sys/stropts.h>
2008b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
2018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
2028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#include "debug.h"
2038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
2048b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#include "ip.h"
2058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#include "tcp.h"
2068b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#include "tcp_timer.h"
2078b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#include "tcp_var.h"
2088b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#include "tcpip.h"
2098b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#include "udp.h"
2108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#include "icmp_var.h"
2118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#include "mbuf.h"
2128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#include "sbuf.h"
2138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#include "socket.h"
2148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#include "if.h"
2158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#include "main.h"
2168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#include "misc.h"
2178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#include "ctl.h"
2188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifdef USE_PPP
2198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#include "ppp/pppd.h"
2208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#include "ppp/ppp.h"
2218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
2228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
2238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#include "bootp.h"
2248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#include "tftp.h"
2258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#include "libslirp.h"
2268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
2278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern struct ttys *ttys_unit[MAX_INTERFACES];
2288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
2298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifndef NULL
2308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define NULL (void *)0
2318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
2328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
2338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifndef FULL_BOLT
2348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectvoid if_start _P((void));
2358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
2368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectvoid if_start _P((struct ttys *));
2378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
2388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
2398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifdef BAD_SPRINTF
2408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project# define vsprintf vsprintf_len
2418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project# define sprintf sprintf_len
2428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project extern int vsprintf_len _P((char *, const char *, va_list));
2438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project extern int sprintf_len _P((char *, const char *, ...));
2448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
2458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
2468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifdef DECLARE_SPRINTF
2478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project# ifndef BAD_SPRINTF
2488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project extern int vsprintf _P((char *, const char *, va_list));
2498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project# endif
2508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project extern int vfprintf _P((FILE *, const char *, va_list));
2518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
2528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
2538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifndef HAVE_STRERROR
2548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project extern char *strerror _P((int error));
2558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
2568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
2578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifndef HAVE_INDEX
2588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project char *index _P((const char *, int));
2598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
2608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
2618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifndef HAVE_GETHOSTID
2628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project long gethostid _P((void));
2638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
2648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
2658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectvoid lprint _P((const char *, ...));
2668b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
2675d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#ifndef _WIN32
2685d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#include <netdb.h>
2695d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#endif
2708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
2718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define DEFAULT_BAUD 115200
2728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
2735d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define SO_OPTIONS DO_KEEPALIVE
2745d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define TCP_MAXIDLE (TCPTV_KEEPCNT * TCPTV_KEEPINTVL)
2755d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
2768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* cksum.c */
2775d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerint cksum(struct mbuf *m, int len);
2788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
2798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* if.c */
2808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectvoid if_init _P((void));
2815d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnervoid if_output _P((struct socket *, struct mbuf *));
2828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
2838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* ip_input.c */
2848b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectvoid ip_init _P((void));
2855d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnervoid ip_input _P((struct mbuf *));
2868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectvoid ip_slowtimo _P((void));
2875d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnervoid ip_stripoptions _P((register struct mbuf *, struct mbuf *));
2888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
2898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* ip_output.c */
2905d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerint ip_output _P((struct socket *, struct mbuf *));
2918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
2928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* tcp_input.c */
2935d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnervoid tcp_input _P((register struct mbuf *, int, struct socket *));
2948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectint tcp_mss _P((register struct tcpcb *, u_int));
2958b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
2968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* tcp_output.c */
2978b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectint tcp_output _P((register struct tcpcb *));
2988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectvoid tcp_setpersist _P((register struct tcpcb *));
2998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
3008b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* tcp_subr.c */
3018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectvoid tcp_init _P((void));
3028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectvoid tcp_template _P((struct tcpcb *));
3035d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnervoid tcp_respond _P((struct tcpcb *, register struct tcpiphdr *, register struct mbuf *, tcp_seq, tcp_seq, int));
3048b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstruct tcpcb * tcp_newtcpcb _P((struct socket *));
3058b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstruct tcpcb * tcp_close _P((register struct tcpcb *));
3068b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectvoid tcp_sockclosed _P((struct tcpcb *));
3078b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectint tcp_fconnect _P((struct socket *));
3088b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectvoid tcp_connect _P((struct socket *));
3098b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectint tcp_attach _P((struct socket *));
3108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectu_int8_t tcp_tos _P((struct socket *));
3115d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerint tcp_emu _P((struct socket *, struct mbuf *));
3128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectint tcp_ctl _P((struct socket *));
3138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstruct tcpcb *tcp_drop(struct tcpcb *tp, int err);
3148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
3158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifdef USE_PPP
3168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define MIN_MRU MINMRU
3178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define MAX_MRU MAXMRU
3188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else
3198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define MIN_MRU 128
3208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define MAX_MRU 16384
3218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
3228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
3238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifndef _WIN32
3248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define min(x,y) ((x) < (y) ? (x) : (y))
3258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define max(x,y) ((x) > (y) ? (x) : (y))
3268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
3278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
3285d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#ifdef _WIN32
3295d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#undef errno
3305d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define errno (WSAGetLastError())
3315d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#endif
3325d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
3338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
334