libslirp.h revision d952f28e527175cc3df9ebd91e739e34df2194c9
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> 65d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#include "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