15d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#ifndef _LIBSLIRP_H
25d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#define _LIBSLIRP_H
35d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
45d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#include <stdint.h>
57339b55944e97077e4f74c4be34cd956ae44198brich cannings#include <stdio.h>
6cc330d4169441727fecf1da08aee806fc021c4e2David 'Digit' Turner#include "android/sockets.h"
77339b55944e97077e4f74c4be34cd956ae44198brich cannings#include "slirp.h"
85d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#ifdef _WIN32
95d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#  define WIN32_LEAN_AND_MEAN
105d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#  define socket_close  winsock2_socket_close3
115d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#  include <winsock2.h>
125d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#  undef socket_close
135d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#else
145d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#  include <sys/select.h>
155d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#endif
165d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
175d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#ifdef __cplusplus
185d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerextern "C" {
195d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#endif
205d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
217339b55944e97077e4f74c4be34cd956ae44198brich canningsstruct mbuf;
227339b55944e97077e4f74c4be34cd956ae44198brich cannings
235d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerint    inet_strtoip(const char*  str, uint32_t  *ip);
245d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerchar*  inet_iptostr(uint32_t  ip);
255d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
265d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnervoid slirp_init(int restricted, const char *special_ip);
275d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
285d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnervoid slirp_select_fill(int *pnfds,
295d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                       fd_set *readfds, fd_set *writefds, fd_set *xfds);
305d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
315d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnervoid slirp_select_poll(fd_set *readfds, fd_set *writefds, fd_set *xfds);
325d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
335d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnervoid slirp_input(const uint8_t *pkt, int pkt_len);
345d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
355d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner/* you must provide the following functions: */
365d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerint slirp_can_output(void);
375d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnervoid slirp_output(const uint8_t *pkt, int pkt_len);
385d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
397339b55944e97077e4f74c4be34cd956ae44198brich cannings/* ---------------------------------------------------*/
407339b55944e97077e4f74c4be34cd956ae44198brich cannings/* User mode network stack restrictions */
417339b55944e97077e4f74c4be34cd956ae44198brich canningsvoid slirp_drop_udp();
427339b55944e97077e4f74c4be34cd956ae44198brich canningsvoid slirp_drop_tcp();
437339b55944e97077e4f74c4be34cd956ae44198brich canningsvoid slirp_add_allow(unsigned long dst_addr, int dst_lport,
447339b55944e97077e4f74c4be34cd956ae44198brich cannings                     int dst_hport, u_int8_t proto);
457339b55944e97077e4f74c4be34cd956ae44198brich canningsvoid slirp_drop_log_fd(FILE* fd);
46d952f28e527175cc3df9ebd91e739e34df2194c9rich cannings
47d952f28e527175cc3df9ebd91e739e34df2194c9rich cannings/** Get the drop log fd */
48d952f28e527175cc3df9ebd91e739e34df2194c9rich canningsFILE* get_slirp_drop_log_fd(void);
497339b55944e97077e4f74c4be34cd956ae44198brich canningsint slirp_should_drop(unsigned long dst_addr,
507339b55944e97077e4f74c4be34cd956ae44198brich cannings                      int dst_port,
517339b55944e97077e4f74c4be34cd956ae44198brich cannings                      u_int8_t proto);
527339b55944e97077e4f74c4be34cd956ae44198brich canningsint slirp_drop_log(const char* format, ...);
537339b55944e97077e4f74c4be34cd956ae44198brich cannings
547339b55944e97077e4f74c4be34cd956ae44198brich cannings/* for network forwards */
557339b55944e97077e4f74c4be34cd956ae44198brich canningsvoid slirp_add_net_forward(unsigned long dest_ip, unsigned long dest_mask,
567339b55944e97077e4f74c4be34cd956ae44198brich cannings                           int dest_lport, int dest_hport,
577339b55944e97077e4f74c4be34cd956ae44198brich cannings                           unsigned long redirect_ip, int redirect_port);
587339b55944e97077e4f74c4be34cd956ae44198brich cannings
597339b55944e97077e4f74c4be34cd956ae44198brich canningsint slirp_should_net_forward(unsigned long remote_ip, int remote_port,
607339b55944e97077e4f74c4be34cd956ae44198brich cannings                             unsigned long *redirect_ip, int *redirect_port);
617339b55944e97077e4f74c4be34cd956ae44198brich cannings/* ---------------------------------------------------*/
627339b55944e97077e4f74c4be34cd956ae44198brich cannings
637339b55944e97077e4f74c4be34cd956ae44198brich cannings/**
647339b55944e97077e4f74c4be34cd956ae44198brich cannings * Additional network stack modifications, aiming to detect and log
657339b55944e97077e4f74c4be34cd956ae44198brich cannings * any network activity initiated by any binary outisde the context of
667339b55944e97077e4f74c4be34cd956ae44198brich cannings * the running browser.
677339b55944e97077e4f74c4be34cd956ae44198brich cannings */
687339b55944e97077e4f74c4be34cd956ae44198brich cannings
697339b55944e97077e4f74c4be34cd956ae44198brich canningsvoid slirp_dns_log_fd(FILE* fd);
70d952f28e527175cc3df9ebd91e739e34df2194c9rich cannings/** Get the dns log fd */
71d952f28e527175cc3df9ebd91e739e34df2194c9rich canningsFILE* get_slirp_dns_log_fd(void);
727339b55944e97077e4f74c4be34cd956ae44198brich cannings/** Logs the DNS name in DNS query issued by the VM. */
737339b55944e97077e4f74c4be34cd956ae44198brich canningsint slirp_log_dns(struct mbuf* m, int dropped);
747339b55944e97077e4f74c4be34cd956ae44198brich cannings/** IP packet dump of DNS queris and responses. */
757339b55944e97077e4f74c4be34cd956ae44198brich canningsint slirp_dump_dns(struct mbuf* m);
767339b55944e97077e4f74c4be34cd956ae44198brich cannings/** Sets an upper limit for the number of allowed DNS requests from
777339b55944e97077e4f74c4be34cd956ae44198brich cannings * the VM.
787339b55944e97077e4f74c4be34cd956ae44198brich cannings */
797339b55944e97077e4f74c4be34cd956ae44198brich canningsvoid slirp_set_max_dns_conns(int max_dns_conns);
807339b55944e97077e4f74c4be34cd956ae44198brich cannings/* Returns the max number of allowed DNS requests.*/
817339b55944e97077e4f74c4be34cd956ae44198brich canningsint slirp_get_max_dns_conns();
827339b55944e97077e4f74c4be34cd956ae44198brich cannings
837339b55944e97077e4f74c4be34cd956ae44198brich cannings/**
847339b55944e97077e4f74c4be34cd956ae44198brich cannings * Modifications for implementing "-net-forward-tcp2sink' option.
857339b55944e97077e4f74c4be34cd956ae44198brich cannings */
867339b55944e97077e4f74c4be34cd956ae44198brich cannings
877339b55944e97077e4f74c4be34cd956ae44198brich canningsvoid slirp_forward_dropped_tcp2sink(unsigned long sink_ip,  int sink_port);
887339b55944e97077e4f74c4be34cd956ae44198brich canningsint slirp_should_forward_dropped_tcp2sink();
897339b55944e97077e4f74c4be34cd956ae44198brich canningsunsigned long slirp_get_tcp_sink_ip();
907339b55944e97077e4f74c4be34cd956ae44198brich canningsint slirp_get_tcp_sink_port();
917339b55944e97077e4f74c4be34cd956ae44198brich cannings
927339b55944e97077e4f74c4be34cd956ae44198brich cannings
937339b55944e97077e4f74c4be34cd956ae44198brich cannings
947339b55944e97077e4f74c4be34cd956ae44198brich cannings
957339b55944e97077e4f74c4be34cd956ae44198brich cannings/* ---------------------------------------------------*/
967339b55944e97077e4f74c4be34cd956ae44198brich cannings
975d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnervoid slirp_redir_loop(void (*func)(void *opaque, int is_udp,
985d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                                   const SockAddress *laddr,
995d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                                   const SockAddress *faddr),
1005d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                     void *opaque);
1015d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerint slirp_redir_rm(int is_udp, int host_port);
1025d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerint slirp_redir(int is_udp, int host_port,
1035d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                uint32_t guest_addr, int guest_port);
1045d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
1055d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerint slirp_unredir(int is_udp, int host_port);
1065d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
1075d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerint slirp_add_dns_server(const SockAddress*  dns_addr);
1085d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerint slirp_get_system_dns_servers(void);
1095d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerint slirp_add_exec(int do_pty, const void *args, int addr_low_byte,
1105d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner                   int guest_port);
1115d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
1125d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerextern const char *tftp_prefix;
1135d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerextern char slirp_hostname[33];
1145d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerextern const char *bootp_filename;
1155d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
1165d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnervoid slirp_stats(void);
1175d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnervoid slirp_socket_recv(int addr_low_byte, int guest_port, const uint8_t *buf,
1185d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner		int size);
1195d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnersize_t slirp_socket_can_recv(int addr_low_byte, int guest_port);
1205d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
1215d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#ifdef __cplusplus
1225d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner}
1235d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#endif
1245d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner
1255d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#endif
126