18b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/*
28b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * Copyright (c) 1995 Danny Gasparovski.
38b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project *
48b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * Please read the file COPYRIGHT for the
58b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * terms and conditions of the copyright.
68b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project */
78b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
88b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifdef HAVE_SYS_SELECT_H
98b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#include <sys/select.h>
108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define TOWRITEMAX 512
138b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern struct timeval tt;
158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern int link_up;
168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern int slirp_socket;
178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern int slirp_socket_unit;
188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern int slirp_socket_port;
198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern u_int32_t slirp_socket_addr;
208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern char *slirp_socket_passwd;
218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern int ctty_closed;
225d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerextern int slirp_restrict;
238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/*
258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * Get the difference in 2 times from updtim()
268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * Allow for wraparound times, "just in case"
278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * x is the greater of the 2 (current time) and y is
288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * what it's being compared against.
298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project */
308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define TIME_DIFF(x,y) (x)-(y) < 0 ? ~0-(y)+(x) : (x)-(y)
318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define  DNS_ADDR_MAX  4
338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern char *slirp_tty;
358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern char *exec_shell;
368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern u_int curtime;
378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern fd_set *global_readfds, *global_writefds, *global_xfds;
388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern uint32_t ctl_addr_ip;
398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern uint32_t special_addr_ip;
408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern uint32_t alias_addr_ip;
418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern uint32_t our_addr_ip;
428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern uint32_t loopback_addr_ip;
438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern uint32_t dns_addr[DNS_ADDR_MAX];
448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern int      dns_addr_count;
458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern char *username;
468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern char *socket_path;
478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern int towrite_max;
488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern int ppp_exit;
498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern int tcp_keepintvl;
508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern uint8_t client_ethaddr[6];
515d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerextern const char *slirp_special_ip;
525d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerextern int slirp_restrict;
538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define PROTO_SLIP 0x1
558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifdef USE_PPP
568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define PROTO_PPP 0x2
578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif
588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project
598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectvoid if_encap(const uint8_t *ip_data, int ip_data_len);
605d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerssize_t slirp_send(struct socket *so, const void *buf, size_t len, int flags);
61