File:  [Qemu by Fabrice Bellard] / qemu / slirp / slirp.h
Revision 1.1.1.8 (vendor branch): download - view: text, annotated - select for diffs
Tue Apr 24 19:02:47 2018 UTC (3 years, 1 month ago) by root
Branches: qemu, MAIN
CVS tags: qemu1000, qemu0151, HEAD
qemu 0.15.1

    1: #ifndef __COMMON_H__
    2: #define __COMMON_H__
    3: 
    4: #include "config-host.h"
    5: #include "slirp_config.h"
    6: 
    7: #ifdef _WIN32
    8: # include <inttypes.h>
    9: 
   10: typedef char *caddr_t;
   11: 
   12: # include <windows.h>
   13: # include <winsock2.h>
   14: # include <ws2tcpip.h>
   15: # include <sys/timeb.h>
   16: # include <iphlpapi.h>
   17: 
   18: # define EWOULDBLOCK WSAEWOULDBLOCK
   19: # define EINPROGRESS WSAEINPROGRESS
   20: # define ENOTCONN WSAENOTCONN
   21: # define EHOSTUNREACH WSAEHOSTUNREACH
   22: # define ENETUNREACH WSAENETUNREACH
   23: # define ECONNREFUSED WSAECONNREFUSED
   24: #else
   25: # define ioctlsocket ioctl
   26: # define closesocket(s) close(s)
   27: # if !defined(__HAIKU__)
   28: #  define O_BINARY 0
   29: # endif
   30: #endif
   31: 
   32: #include <sys/types.h>
   33: #ifdef HAVE_SYS_BITYPES_H
   34: # include <sys/bitypes.h>
   35: #endif
   36: 
   37: #include <sys/time.h>
   38: 
   39: #ifdef HAVE_UNISTD_H
   40: # include <unistd.h>
   41: #endif
   42: 
   43: #ifdef HAVE_STDLIB_H
   44: # include <stdlib.h>
   45: #endif
   46: 
   47: #include <stdio.h>
   48: #include <errno.h>
   49: 
   50: #ifndef HAVE_MEMMOVE
   51: #define memmove(x, y, z) bcopy(y, x, z)
   52: #endif
   53: 
   54: #if TIME_WITH_SYS_TIME
   55: # include <sys/time.h>
   56: # include <time.h>
   57: #else
   58: # ifdef HAVE_SYS_TIME_H
   59: #  include <sys/time.h>
   60: # else
   61: #  include <time.h>
   62: # endif
   63: #endif
   64: 
   65: #ifdef HAVE_STRING_H
   66: # include <string.h>
   67: #else
   68: # include <strings.h>
   69: #endif
   70: 
   71: #ifndef _WIN32
   72: #include <sys/uio.h>
   73: #endif
   74: 
   75: #ifndef _WIN32
   76: #include <netinet/in.h>
   77: #include <arpa/inet.h>
   78: #endif
   79: 
   80: /* Systems lacking strdup() definition in <string.h>. */
   81: #if defined(ultrix)
   82: char *strdup(const char *);
   83: #endif
   84: 
   85: /* Systems lacking malloc() definition in <stdlib.h>. */
   86: #if defined(ultrix) || defined(hcx)
   87: void *malloc(size_t arg);
   88: void free(void *ptr);
   89: #endif
   90: 
   91: #ifndef HAVE_INET_ATON
   92: int inet_aton(const char *cp, struct in_addr *ia);
   93: #endif
   94: 
   95: #include <fcntl.h>
   96: #ifndef NO_UNIX_SOCKETS
   97: #include <sys/un.h>
   98: #endif
   99: #include <signal.h>
  100: #ifdef HAVE_SYS_SIGNAL_H
  101: # include <sys/signal.h>
  102: #endif
  103: #ifndef _WIN32
  104: #include <sys/socket.h>
  105: #endif
  106: 
  107: #if defined(HAVE_SYS_IOCTL_H)
  108: # include <sys/ioctl.h>
  109: #endif
  110: 
  111: #ifdef HAVE_SYS_SELECT_H
  112: # include <sys/select.h>
  113: #endif
  114: 
  115: #ifdef HAVE_SYS_WAIT_H
  116: # include <sys/wait.h>
  117: #endif
  118: 
  119: #ifdef HAVE_SYS_FILIO_H
  120: # include <sys/filio.h>
  121: #endif
  122: 
  123: #ifdef USE_PPP
  124: #include <ppp/slirppp.h>
  125: #endif
  126: 
  127: #ifdef __STDC__
  128: #include <stdarg.h>
  129: #else
  130: #include <varargs.h>
  131: #endif
  132: 
  133: #include <sys/stat.h>
  134: 
  135: /* Avoid conflicting with the libc insque() and remque(), which
  136:    have different prototypes. */
  137: #define insque slirp_insque
  138: #define remque slirp_remque
  139: 
  140: #ifdef HAVE_SYS_STROPTS_H
  141: #include <sys/stropts.h>
  142: #endif
  143: 
  144: #include "debug.h"
  145: 
  146: #include "qemu-queue.h"
  147: 
  148: #include "libslirp.h"
  149: #include "ip.h"
  150: #include "tcp.h"
  151: #include "tcp_timer.h"
  152: #include "tcp_var.h"
  153: #include "tcpip.h"
  154: #include "udp.h"
  155: #include "ip_icmp.h"
  156: #include "mbuf.h"
  157: #include "sbuf.h"
  158: #include "socket.h"
  159: #include "if.h"
  160: #include "main.h"
  161: #include "misc.h"
  162: #ifdef USE_PPP
  163: #include "ppp/pppd.h"
  164: #include "ppp/ppp.h"
  165: #endif
  166: 
  167: #include "bootp.h"
  168: #include "tftp.h"
  169: 
  170: /* osdep.c */
  171: int qemu_socket(int domain, int type, int protocol);
  172: 
  173: 
  174: struct Slirp {
  175:     QTAILQ_ENTRY(Slirp) entry;
  176: 
  177:     /* virtual network configuration */
  178:     struct in_addr vnetwork_addr;
  179:     struct in_addr vnetwork_mask;
  180:     struct in_addr vhost_addr;
  181:     struct in_addr vdhcp_startaddr;
  182:     struct in_addr vnameserver_addr;
  183: 
  184:     /* ARP cache for the guest IP addresses (XXX: allow many entries) */
  185:     uint8_t client_ethaddr[6];
  186: 
  187:     struct in_addr client_ipaddr;
  188:     char client_hostname[33];
  189: 
  190:     int restricted;
  191:     struct timeval tt;
  192:     struct ex_list *exec_list;
  193: 
  194:     /* mbuf states */
  195:     struct mbuf m_freelist, m_usedlist;
  196:     int mbuf_alloced;
  197: 
  198:     /* if states */
  199:     int if_queued;          /* number of packets queued so far */
  200:     struct mbuf if_fastq;   /* fast queue (for interactive data) */
  201:     struct mbuf if_batchq;  /* queue for non-interactive data */
  202:     struct mbuf *next_m;    /* pointer to next mbuf to output */
  203: 
  204:     /* ip states */
  205:     struct ipq ipq;         /* ip reass. queue */
  206:     uint16_t ip_id;         /* ip packet ctr, for ids */
  207: 
  208:     /* bootp/dhcp states */
  209:     BOOTPClient bootp_clients[NB_BOOTP_CLIENTS];
  210:     char *bootp_filename;
  211: 
  212:     /* tcp states */
  213:     struct socket tcb;
  214:     struct socket *tcp_last_so;
  215:     tcp_seq tcp_iss;        /* tcp initial send seq # */
  216:     uint32_t tcp_now;       /* for RFC 1323 timestamps */
  217: 
  218:     /* udp states */
  219:     struct socket udb;
  220:     struct socket *udp_last_so;
  221: 
  222:     /* icmp states */
  223:     struct socket icmp;
  224:     struct socket *icmp_last_so;
  225: 
  226:     /* tftp states */
  227:     char *tftp_prefix;
  228:     struct tftp_session tftp_sessions[TFTP_SESSIONS_MAX];
  229: 
  230:     void *opaque;
  231: };
  232: 
  233: extern Slirp *slirp_instance;
  234: 
  235: #ifndef NULL
  236: #define NULL (void *)0
  237: #endif
  238: 
  239: #ifndef FULL_BOLT
  240: void if_start(Slirp *);
  241: #else
  242: void if_start(struct ttys *);
  243: #endif
  244: 
  245: #ifndef HAVE_STRERROR
  246:  char *strerror(int error);
  247: #endif
  248: 
  249: #ifndef HAVE_INDEX
  250:  char *index(const char *, int);
  251: #endif
  252: 
  253: #ifndef HAVE_GETHOSTID
  254:  long gethostid(void);
  255: #endif
  256: 
  257: void lprint(const char *, ...) GCC_FMT_ATTR(1, 2);
  258: 
  259: #ifndef _WIN32
  260: #include <netdb.h>
  261: #endif
  262: 
  263: #define DEFAULT_BAUD 115200
  264: 
  265: #define SO_OPTIONS DO_KEEPALIVE
  266: #define TCP_MAXIDLE (TCPTV_KEEPCNT * TCPTV_KEEPINTVL)
  267: 
  268: /* cksum.c */
  269: int cksum(struct mbuf *m, int len);
  270: 
  271: /* if.c */
  272: void if_init(Slirp *);
  273: void if_output(struct socket *, struct mbuf *);
  274: 
  275: /* ip_input.c */
  276: void ip_init(Slirp *);
  277: void ip_input(struct mbuf *);
  278: void ip_slowtimo(Slirp *);
  279: void ip_stripoptions(register struct mbuf *, struct mbuf *);
  280: 
  281: /* ip_output.c */
  282: int ip_output(struct socket *, struct mbuf *);
  283: 
  284: /* tcp_input.c */
  285: void tcp_input(register struct mbuf *, int, struct socket *);
  286: int tcp_mss(register struct tcpcb *, u_int);
  287: 
  288: /* tcp_output.c */
  289: int tcp_output(register struct tcpcb *);
  290: void tcp_setpersist(register struct tcpcb *);
  291: 
  292: /* tcp_subr.c */
  293: void tcp_init(Slirp *);
  294: void tcp_template(struct tcpcb *);
  295: void tcp_respond(struct tcpcb *, register struct tcpiphdr *, register struct mbuf *, tcp_seq, tcp_seq, int);
  296: struct tcpcb * tcp_newtcpcb(struct socket *);
  297: struct tcpcb * tcp_close(register struct tcpcb *);
  298: void tcp_sockclosed(struct tcpcb *);
  299: int tcp_fconnect(struct socket *);
  300: void tcp_connect(struct socket *);
  301: int tcp_attach(struct socket *);
  302: uint8_t tcp_tos(struct socket *);
  303: int tcp_emu(struct socket *, struct mbuf *);
  304: int tcp_ctl(struct socket *);
  305: struct tcpcb *tcp_drop(struct tcpcb *tp, int err);
  306: 
  307: #ifdef USE_PPP
  308: #define MIN_MRU MINMRU
  309: #define MAX_MRU MAXMRU
  310: #else
  311: #define MIN_MRU 128
  312: #define MAX_MRU 16384
  313: #endif
  314: 
  315: #ifndef _WIN32
  316: #define min(x,y) ((x) < (y) ? (x) : (y))
  317: #define max(x,y) ((x) > (y) ? (x) : (y))
  318: #endif
  319: 
  320: #ifdef _WIN32
  321: #undef errno
  322: #define errno (WSAGetLastError())
  323: #endif
  324: 
  325: #endif

unix.superglobalmegacorp.com