libslirp.h revision 2b114c590cf5a19f8047cd7bde9c7e5ae00aa22b
/* $Id$ */
/** @file
* NAT - slirp interface.
*/
/*
* Copyright (C) 2006-2012 Oracle Corporation
*
* This file is part of VirtualBox Open Source Edition (OSE), as
* available from http://www.virtualbox.org. This file is free software;
* General Public License (GPL) as published by the Free Software
* Foundation, in version 2 as it comes in the "COPYING" file of the
* VirtualBox OSE distribution. VirtualBox OSE is distributed in the
* hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
*/
#ifndef _LIBSLIRP_H
#define _LIBSLIRP_H
#ifdef RT_OS_WINDOWS
# include <winsock2.h>
# ifdef __cplusplus
extern "C" {
# endif
# ifdef __cplusplus
}
# endif
#else
# ifdef RT_OS_OS2 /* temporary workaround, see ticket #127 */
# endif
# include <poll.h>
#endif
struct mbuf;
#ifdef __cplusplus
extern "C" {
#endif
void slirp_term(PNATState);
void slirp_link_up(PNATState);
void slirp_link_down(PNATState);
#if defined(RT_OS_WINDOWS)
#else /* RT_OS_WINDOWS */
#endif /* !RT_OS_WINDOWS */
void slirp_set_ethaddr_and_activate_port_forwarding(PNATState pData, const uint8_t *ethaddr, uint32_t GuestIP);
/* you must provide the following functions: */
void slirp_arm_fast_timer(void *pvUser);
int slirp_can_output(void * pvUser);
void slirp_output_pending(void * pvUser);
int guest_port, const uint8_t *);
int guest_port);
int guest_port);
void slirp_set_mtu(PNATState, int);
/**
* This macrodefinition is shortcut for check of hosts where Slirp,
* receives notifications from host. For now it's Darwin only. But
* Main API has primitives for listening DNS change event since 4.3.
*/
#if (defined(RT_OS_DARWIN))
# define HAVE_NOTIFICATION_FOR_DNS_UPDATE 1
#else
# define HAVE_NOTIFICATION_FOR_DNS_UPDATE 0
#endif
/**
* This method help DrvNAT to select strategy: about VMRESUMEREASON_HOST_RESUME:
* - proceed with link termination (we let guest track host DNS settings)
* VBOX_NAT_DNS_EXTERNAL
* - enforce internal DNS update (we are using dnsproxy and track but don't export DNS host settings)
* VBOX_NAT_DNS_DNSPROXY
* - ignore (NAT configured to use hostresolver - we aren't track any host DNS changes)
* VBOX_NAT_DNS_HOSTRESOLVER
* @note: It's safe to call this method from any thread, because settings we're checking
* are immutable at runtime.
*/
#define VBOX_NAT_DNS_EXTERNAL 0
#define VBOX_NAT_DNS_DNSPROXY 1
#define VBOX_NAT_DNS_HOSTRESOLVER 2
#if defined(RT_OS_WINDOWS)
/*
* ICMP handle state change
*/
# define VBOX_ICMP_EVENT_INDEX 0
/**
* This event is for
* - slirp_input
* - slirp_link_up
* - slirp_link_down
* - wakeup
*/
# define VBOX_WAKEUP_EVENT_INDEX 1
/*
*/
# define VBOX_SOCKET_EVENT_INDEX 2
/*
* The number of events for WSAWaitForMultipleEvents().
*/
# define VBOX_EVENT_COUNT 3
#endif /* RT_OS_WINDOWS */
/*
* Returns the timeout.
*/
# ifndef RT_OS_WINDOWS
/*
* Returns the number of sockets.
*/
# endif
void slirp_add_host_resolver_mapping(PNATState pData, const char *pszHostName, const char *pszHostNamePattern, uint32_t u32HostIP);
#endif
#ifdef __cplusplus
}
#endif
#endif