20bc99aa3ad84a338b7a9c1edc14682bce25d761vboxsync * NAT - slirp state/configuration.
76161aaad6df05f1375432ae87dcf476093fb347vboxsync * Copyright (C) 2006-2012 Oracle Corporation
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync * available from http://www.virtualbox.org. This file is free software;
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync * you can redistribute it and/or modify it under the terms of the GNU
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync * General Public License (GPL) as published by the Free Software
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
a16eb14ad7a4b5ef91ddc22d3e8e92d930f736fcvboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync/** Where to start DHCP IP number allocation. */
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync/** DHCP Lease time. */
5976f22e5ab5ac4cefd7fd6dfda935b6bc228612vboxsync * ARP cache this is naive implementaion of ARP
5976f22e5ab5ac4cefd7fd6dfda935b6bc228612vboxsync * cache of mapping 4 byte IPv4 address to 6 byte
5e71f033c9ab9f32430762f22e66a8a693652af3vboxsync * ethernet one.
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync/** TFTP session entry. */
76161aaad6df05f1375432ae87dcf476093fb347vboxsync /** host name to map.
76161aaad6df05f1375432ae87dcf476093fb347vboxsync * @note If pszCName isn't null pszPattern won't be used (see alias_dns.c for
76161aaad6df05f1375432ae87dcf476093fb347vboxsync * details).
76161aaad6df05f1375432ae87dcf476093fb347vboxsync /** Pattern (simple) of hostnames to map to the specified IP. */
76161aaad6df05f1375432ae87dcf476093fb347vboxsync /** The IP Address. */
76161aaad6df05f1375432ae87dcf476093fb347vboxsync /** List entry. */
783e463acf52ae50e2c72c01713f5e1e9fbf41advboxsynctypedef LIST_HEAD(DNSMAPPINGLISTHEAD, DNSMAPPINGENTRY) DNSMAPPINGLISTHEAD;
8fc07f8b2a216c62595bd55cc67716cde0cc8f85vboxsyncLIST_HEAD(port_forward_rule_list, port_forward_rule);
67ca8b37c901c98c191bb7216ef7574c83a0b0f8vboxsync/* forward declaration */
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync/** Main state/configuration structure for slirp NAT. */
6de922ee8158732706074aacb20c2a5dc6d4d7a3vboxsync#define PROFILE_COUNTER(name, dsc) STAMPROFILE Stat ## name
6de922ee8158732706074aacb20c2a5dc6d4d7a3vboxsync#define COUNTING_COUNTER(name, dsc) STAMCOUNTER Stat ## name
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync /* Stuff from boot.c */
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync /* Stuff from if.c */
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync /* Stuff from icmp.c */
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync /* Stuff from ip_input.c */
10efab965f6b58c5435453c8a0091db99afb208bvboxsync int maxnipq; /* Administrative limit on # of reass queues*/
10efab965f6b58c5435453c8a0091db99afb208bvboxsync int maxfragsperpacket; /* Maximum number of IPv4 fragments allowed per packet */
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync /* Stuff from mbuf.c */
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync /* Stuff from slirp.c */
b625a4fa00a99203526872a8296ad215f22aca8evboxsync ULONG (WINAPI * pfGetAdaptersAddresses)(ULONG, ULONG, PVOID, PIP_ADAPTER_ADDRESSES, PULONG);
9c49c73dd1a2b84de46465cf04f6623b7de9eedcvboxsync uint32_t dnsgen; /* XXX: merge with dnsLastUpdate? */
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync /* Stuff from tcp_input.c */
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync /* Stuff from tcp_timer.c */
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync /* Stuff from tftp.c */
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync /* Stuff from udp.c */
dbb9701e09224046f9ebf3b9528b6d3bbe070486vboxsync /* counter of sockets needed for allocation enough room to
dbb9701e09224046f9ebf3b9528b6d3bbe070486vboxsync * process sockets with poll/epoll
dbb9701e09224046f9ebf3b9528b6d3bbe070486vboxsync * NSOCK_INC/DEC should be injected before every
dbb9701e09224046f9ebf3b9528b6d3bbe070486vboxsync * operation on socket queue (tcb, udb)
4644d8b290a0c469b138b84661668c6c0ac0ffe5vboxsync# define NSOCK_INC_EX(ex) do {ex->pData->nsock++;} while (0)
4644d8b290a0c469b138b84661668c6c0ac0ffe5vboxsync# define NSOCK_DEC_EX(ex) do {ex->pData->nsock--;} while (0)
c3b25f6ef0a1ab2cf0c700db2298f0915af790ecvboxsync# define VBOX_SOCKET_EVENT (pData->phEvents[VBOX_SOCKET_EVENT_INDEX])
8b3feadd62b50ffae44c97374ff6add5fd69da37vboxsync int nmbclusters; /* limits number of mbuf clusters */
8b3feadd62b50ffae44c97374ff6add5fd69da37vboxsync int nmbjumbop; /* limits number of page size jumbo clusters */
8b3feadd62b50ffae44c97374ff6add5fd69da37vboxsync int nmbjumbo9; /* limits number of 9k jumbo clusters */
8b3feadd62b50ffae44c97374ff6add5fd69da37vboxsync int nmbjumbo16; /* limits number of 16k jumbo clusters */
779ecf7c23c17f2f16d9eac1f3a0cce5e73d8401vboxsync * in (r89055) using of this behaviour has been changed and mean that Slirp
2b114c590cf5a19f8047cd7bde9c7e5ae00aa22bvboxsync * can't parse hosts strucutures/files to provide to guest host name-resolving
2b114c590cf5a19f8047cd7bde9c7e5ae00aa22bvboxsync * configuration, instead Slirp provides .{interface-number + 1}.3 as a nameserver
779ecf7c23c17f2f16d9eac1f3a0cce5e73d8401vboxsync * and proxies DNS queiries to Host's Name Resolver API.
779ecf7c23c17f2f16d9eac1f3a0cce5e73d8401vboxsync * Flag whether using the host resolver mode is permanent
2b114c590cf5a19f8047cd7bde9c7e5ae00aa22bvboxsync * because the user configured it that way.
f9887098d969fe46622baed60cd2d28aba576052vboxsync /* this field control behaviour of DHCP server */
ac50f06afde48ac748508b14be3d44428d3500d1vboxsync LIST_HEAD(handler_chain, proto_handler) handler_chain;
58f7b4458f55fbe1164a68a6a137e1c3c0cb43a2vboxsync /** Critical R/W section to protect the handler chain list. */
8fc07f8b2a216c62595bd55cc67716cde0cc8f85vboxsync struct port_forward_rule_list port_forward_rule_head;
817bcc5853f9943b8c3d16414695913855df442fvboxsync /* libalis modules' handlers*/
817bcc5853f9943b8c3d16414695913855df442fvboxsync /* array of home addresses */
817bcc5853f9943b8c3d16414695913855df442fvboxsync /* size of pInSockAddrHomeAddress in elements */
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync/** Default IP time to live. */
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync/** Number of permanent buffers in mbuf. */
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync/** Use a fixed time before sending keepalive. */
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync/** Use a fixed interval between keepalive. */
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync/** Maximum idle time before timing out a connection. */
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync/** Default TCP socket options. */
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync/** Default TCP MSS value. */
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync/** Default TCP round trip time. */
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync/** Enable RFC1323 performance enhancements.
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync * @todo check if it really works, it was turned off before. */
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync/** TCP receive buffer size. */
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync/** TCP receive buffer size. */
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync/* TCP duplicate ACK retransmit threshold. */
0e2909d08a4e4c8a6428f137f71224fb3c180c7cvboxsync#define tcp_reass_overflows pData->tcp_reass_overflows
5cb306e00c2e570668926078f05ffdc7f2ff08d7vboxsync# define QSOCKET_LOCK_DESTROY(queue) do {} while (0)
c6f6969abc1ac8c400ed863e07b357b0fee7eaadvboxsync for ((so) = VBOX_X2(queue_ ## label ## _label).so_next; \
3f7363f70639b293c86f983c5304501c72d1fbadvboxsync Log5(("%s:%d Processing so:%R[natsock]\n", __FUNCTION__, __LINE__, (so)));
5cb306e00c2e570668926078f05ffdc7f2ff08d7vboxsync# define DO_TCP_OUTPUT(data, sotcb) tcp_output((data), (sotcb))
5cb306e00c2e570668926078f05ffdc7f2ff08d7vboxsync# define DO_TCP_INPUT(data, mbuf, size, so) tcp_input((data), (mbuf), (size), (so))
5cb306e00c2e570668926078f05ffdc7f2ff08d7vboxsync# define DO_TCP_CONNECT(data, so) tcp_connect((data), (so))
5cb306e00c2e570668926078f05ffdc7f2ff08d7vboxsync# define DO_SORECFROM(data, so) sorecvfrom((data), (so))
5cb306e00c2e570668926078f05ffdc7f2ff08d7vboxsync# define SOLOOKUP(so, label, src, sport, dst, dport) \
a87795a36f9fc85d5e915fca513880bfde72cb9fvboxsync (so) = solookup(&VBOX_X2(queue_ ## label ## _label), (src), (sport), (dst), (dport)); \
5cb306e00c2e570668926078f05ffdc7f2ff08d7vboxsync } while (0)
5cb306e00c2e570668926078f05ffdc7f2ff08d7vboxsync# define DO_UDP_DETACH(data, so, ignored) udp_detach((data), (so))
ca794f37ff137134ba3aa96994bdb45d54ac8e27vboxsync#define TCP_OUTPUT(data, sotcb) DO_TCP_OUTPUT((data), (sotcb))
ca794f37ff137134ba3aa96994bdb45d54ac8e27vboxsync#define TCP_INPUT(data, mbuf, size, so) DO_TCP_INPUT((data), (mbuf), (size), (so))
ca794f37ff137134ba3aa96994bdb45d54ac8e27vboxsync#define TCP_CONNECT(data, so) DO_TCP_CONNECT((data), (so))
ca794f37ff137134ba3aa96994bdb45d54ac8e27vboxsync#define SOREAD(ret, data, so, ifclose) DO_SOREAD((ret), (data), (so), (ifclose))
ca794f37ff137134ba3aa96994bdb45d54ac8e27vboxsync#define SOWRITE(ret, data, so) DO_SOWRITE((ret), (data), (so))
ca794f37ff137134ba3aa96994bdb45d54ac8e27vboxsync#define SORECVFROM(data, so) DO_SORECFROM((data), (so))
56290882c6269fb7c8cfdc42894e2ab9859eeb7evboxsync#define UDP_DETACH(data, so, so_next) DO_UDP_DETACH((data), (so), (so_next))
40edc1763e249e55da538281100614c767e9c839vboxsync#define authoritative_port pData->authoritative_port
40edc1763e249e55da538281100614c767e9c839vboxsync#define authoritative_timeout pData->authoritative_timeout
40edc1763e249e55da538281100614c767e9c839vboxsync#define authoritative_queries pData->authoritative_queries
40edc1763e249e55da538281100614c767e9c839vboxsync#define authoritative_addr pData->authoritative_addr
6ae6bcfc5fb10d8056190f96771187fbc9ed5461vboxsyncstatic inline uma_zone_t slirp_zone_pack(PNATState pData)
6ae6bcfc5fb10d8056190f96771187fbc9ed5461vboxsyncstatic inline uma_zone_t slirp_zone_jumbop(PNATState pData)
6ae6bcfc5fb10d8056190f96771187fbc9ed5461vboxsyncstatic inline uma_zone_t slirp_zone_jumbo9(PNATState pData)
6ae6bcfc5fb10d8056190f96771187fbc9ed5461vboxsyncstatic inline uma_zone_t slirp_zone_jumbo16(PNATState pData)
6ae6bcfc5fb10d8056190f96771187fbc9ed5461vboxsyncstatic inline uma_zone_t slirp_zone_ext_refcnt(PNATState pData)
6ae6bcfc5fb10d8056190f96771187fbc9ed5461vboxsyncstatic inline uma_zone_t slirp_zone_mbuf(PNATState pData)
6ae6bcfc5fb10d8056190f96771187fbc9ed5461vboxsyncstatic inline uma_zone_t slirp_zone_clust(PNATState pData)
eb6509c759a277527b791759757d9d9a5b1c5e32vboxsync#endif /* !___slirp_state_h */