a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync/** @file
20bc99aa3ad84a338b7a9c1edc14682bce25d761vboxsync * NAT - slirp state/configuration.
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync */
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync/*
76161aaad6df05f1375432ae87dcf476093fb347vboxsync * Copyright (C) 2006-2012 Oracle Corporation
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync *
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 */
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync
eb6509c759a277527b791759757d9d9a5b1c5e32vboxsync#ifndef ___slirp_state_h
eb6509c759a277527b791759757d9d9a5b1c5e32vboxsync#define ___slirp_state_h
eb6509c759a277527b791759757d9d9a5b1c5e32vboxsync
ca794f37ff137134ba3aa96994bdb45d54ac8e27vboxsync#include <iprt/req.h>
50bce6f90329f810ed7b9ea1a758f76adba98f61vboxsync#include <iprt/critsect.h>
bca329d964c68b6cc29604b2fc773ba4646c2bc8vboxsync
bca329d964c68b6cc29604b2fc773ba4646c2bc8vboxsync#define COUNTERS_INIT
bca329d964c68b6cc29604b2fc773ba4646c2bc8vboxsync#include "counters.h"
bca329d964c68b6cc29604b2fc773ba4646c2bc8vboxsync
2e77ff8c095da5ee3bde45932b06d6eff0abb267vboxsync#include "ip_icmp.h"
40edc1763e249e55da538281100614c767e9c839vboxsync#include "dnsproxy/dnsproxy.h"
8872a043919e5dda55b40134d4a521e91b930755vboxsync
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync/** Where to start DHCP IP number allocation. */
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync#define START_ADDR 15
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync/** DHCP Lease time. */
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync#define LEASE_TIME (24 * 3600)
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync
5e71f033c9ab9f32430762f22e66a8a693652af3vboxsync/*
5976f22e5ab5ac4cefd7fd6dfda935b6bc228612vboxsync * ARP cache this is naive implementaion of ARP
5976f22e5ab5ac4cefd7fd6dfda935b6bc228612vboxsync * cache of mapping 4 byte IPv4 address to 6 byte
5e71f033c9ab9f32430762f22e66a8a693652af3vboxsync * ethernet one.
5e71f033c9ab9f32430762f22e66a8a693652af3vboxsync */
5e71f033c9ab9f32430762f22e66a8a693652af3vboxsyncstruct arp_cache_entry
5e71f033c9ab9f32430762f22e66a8a693652af3vboxsync{
5e71f033c9ab9f32430762f22e66a8a693652af3vboxsync uint32_t ip;
5e71f033c9ab9f32430762f22e66a8a693652af3vboxsync uint8_t ether[6];
5e71f033c9ab9f32430762f22e66a8a693652af3vboxsync LIST_ENTRY(arp_cache_entry) list;
5e71f033c9ab9f32430762f22e66a8a693652af3vboxsync};
5e71f033c9ab9f32430762f22e66a8a693652af3vboxsyncLIST_HEAD(arp_cache_head, arp_cache_entry);
5e71f033c9ab9f32430762f22e66a8a693652af3vboxsync
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync/** TFTP session entry. */
5dcc3913becffb1c14a19e3323ced88b9bf01d97vboxsyncstruct dns_domain_entry
5dcc3913becffb1c14a19e3323ced88b9bf01d97vboxsync{
40edc1763e249e55da538281100614c767e9c839vboxsync char *dd_pszDomain;
40edc1763e249e55da538281100614c767e9c839vboxsync LIST_ENTRY(dns_domain_entry) dd_list;
5dcc3913becffb1c14a19e3323ced88b9bf01d97vboxsync};
5dcc3913becffb1c14a19e3323ced88b9bf01d97vboxsyncLIST_HEAD(dns_domain_list_head, dns_domain_entry);
5dcc3913becffb1c14a19e3323ced88b9bf01d97vboxsync
783e463acf52ae50e2c72c01713f5e1e9fbf41advboxsync#ifdef VBOX_WITH_DNSMAPPING_IN_HOSTRESOLVER
783e463acf52ae50e2c72c01713f5e1e9fbf41advboxsynctypedef struct DNSMAPPINGENTRY
783e463acf52ae50e2c72c01713f5e1e9fbf41advboxsync{
76161aaad6df05f1375432ae87dcf476093fb347vboxsync /** host name to map.
76161aaad6df05f1375432ae87dcf476093fb347vboxsync * @note If pszCName isn't null pszPattern won't be used (see alias_dns.c for
76161aaad6df05f1375432ae87dcf476093fb347vboxsync * details).
914f55284d54ce9f050af36a0622071501278f0dvboxsync */
783e463acf52ae50e2c72c01713f5e1e9fbf41advboxsync char *pszCName;
76161aaad6df05f1375432ae87dcf476093fb347vboxsync /** Pattern (simple) of hostnames to map to the specified IP. */
914f55284d54ce9f050af36a0622071501278f0dvboxsync char *pszPattern;
76161aaad6df05f1375432ae87dcf476093fb347vboxsync /** The IP Address. */
783e463acf52ae50e2c72c01713f5e1e9fbf41advboxsync uint32_t u32IpAddress;
76161aaad6df05f1375432ae87dcf476093fb347vboxsync /** List entry. */
783e463acf52ae50e2c72c01713f5e1e9fbf41advboxsync LIST_ENTRY(DNSMAPPINGENTRY) MapList;
783e463acf52ae50e2c72c01713f5e1e9fbf41advboxsync} DNSMAPPINGENTRY, *PDNSMAPPINGENTRY;
783e463acf52ae50e2c72c01713f5e1e9fbf41advboxsynctypedef LIST_HEAD(DNSMAPPINGLISTHEAD, DNSMAPPINGENTRY) DNSMAPPINGLISTHEAD;
783e463acf52ae50e2c72c01713f5e1e9fbf41advboxsync#endif
783e463acf52ae50e2c72c01713f5e1e9fbf41advboxsync
798637dd24a31b73d512490bdb57bc3b3cf1f295vboxsyncstruct dns_entry
798637dd24a31b73d512490bdb57bc3b3cf1f295vboxsync{
40edc1763e249e55da538281100614c767e9c839vboxsync struct in_addr de_addr;
40edc1763e249e55da538281100614c767e9c839vboxsync TAILQ_ENTRY(dns_entry) de_list;
798637dd24a31b73d512490bdb57bc3b3cf1f295vboxsync};
54fe561ef34bc91e6d39efe592aa5fc2d31a0cbdvboxsyncTAILQ_HEAD(dns_list_head, dns_entry);
6ae6bcfc5fb10d8056190f96771187fbc9ed5461vboxsyncTAILQ_HEAD(if_queue, mbuf);
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync
8fc07f8b2a216c62595bd55cc67716cde0cc8f85vboxsyncstruct port_forward_rule
8fc07f8b2a216c62595bd55cc67716cde0cc8f85vboxsync{
8fc07f8b2a216c62595bd55cc67716cde0cc8f85vboxsync uint16_t proto;
8fc07f8b2a216c62595bd55cc67716cde0cc8f85vboxsync uint16_t host_port;
8fc07f8b2a216c62595bd55cc67716cde0cc8f85vboxsync uint16_t guest_port;
8fc07f8b2a216c62595bd55cc67716cde0cc8f85vboxsync struct in_addr guest_addr;
8fc07f8b2a216c62595bd55cc67716cde0cc8f85vboxsync struct in_addr bind_ip;
8fc07f8b2a216c62595bd55cc67716cde0cc8f85vboxsync uint8_t mac_address[6]; /*need ETH_ALEN here */
8fc07f8b2a216c62595bd55cc67716cde0cc8f85vboxsync int activated;
b4bcdbd7ac35c938e6f71a6403fe9f3ebf106a07vboxsync struct socket *so;
8fc07f8b2a216c62595bd55cc67716cde0cc8f85vboxsync LIST_ENTRY(port_forward_rule) list;
8fc07f8b2a216c62595bd55cc67716cde0cc8f85vboxsync};
8fc07f8b2a216c62595bd55cc67716cde0cc8f85vboxsyncLIST_HEAD(port_forward_rule_list, port_forward_rule);
8fc07f8b2a216c62595bd55cc67716cde0cc8f85vboxsync
50bce6f90329f810ed7b9ea1a758f76adba98f61vboxsync
cd0a67b2dd5f66f87aca9ad79dda62a2ce142817vboxsync#ifdef RT_OS_WINDOWS
cd0a67b2dd5f66f87aca9ad79dda62a2ce142817vboxsyncstruct pong;
cd0a67b2dd5f66f87aca9ad79dda62a2ce142817vboxsyncTAILQ_HEAD(pong_tailq, pong);
cd0a67b2dd5f66f87aca9ad79dda62a2ce142817vboxsync#endif
50bce6f90329f810ed7b9ea1a758f76adba98f61vboxsync
67ca8b37c901c98c191bb7216ef7574c83a0b0f8vboxsync/* forward declaration */
67ca8b37c901c98c191bb7216ef7574c83a0b0f8vboxsyncstruct proto_handler;
67ca8b37c901c98c191bb7216ef7574c83a0b0f8vboxsync
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync/** Main state/configuration structure for slirp NAT. */
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsynctypedef struct NATState
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync{
6de922ee8158732706074aacb20c2a5dc6d4d7a3vboxsync#define PROFILE_COUNTER(name, dsc) STAMPROFILE Stat ## name
6de922ee8158732706074aacb20c2a5dc6d4d7a3vboxsync#define COUNTING_COUNTER(name, dsc) STAMCOUNTER Stat ## name
6de922ee8158732706074aacb20c2a5dc6d4d7a3vboxsync#include "counters.h"
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync /* Stuff from boot.c */
4d2d5cf0178f63cef304849148e19b4811f3a03bvboxsync void *pbootp_clients;
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync const char *bootp_filename;
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync /* Stuff from if.c */
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync int if_mtu, if_mru;
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync int if_comp;
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync int if_maxlinkhdr;
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync int if_queued;
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync int if_thresh;
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync /* Stuff from icmp.c */
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync struct icmpstat_t icmpstat;
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync /* Stuff from ip_input.c */
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync struct ipstat_t ipstat;
0cd53fba053be1efbb4a1f77aa490b7b8bfb6085vboxsync struct ipqhead ipq[IPREASS_NHASH];
10efab965f6b58c5435453c8a0091db99afb208bvboxsync int maxnipq; /* Administrative limit on # of reass queues*/
10efab965f6b58c5435453c8a0091db99afb208bvboxsync int maxfragsperpacket; /* Maximum number of IPv4 fragments allowed per packet */
10efab965f6b58c5435453c8a0091db99afb208bvboxsync int nipq; /* total number of reass queues */
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync uint16_t ip_currid;
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync /* Stuff from mbuf.c */
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync /* Stuff from slirp.c */
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync void *pvUser;
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync uint32_t curtime;
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync uint32_t time_fasttimo;
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync uint32_t last_slowtimo;
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync bool do_slowtimo;
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync bool link_up;
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync struct timeval tt;
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync struct in_addr our_addr;
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync struct in_addr alias_addr;
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync struct in_addr special_addr;
8cb3f4e146e6f5fb0182a20b628d1a4b0b701f2cvboxsync
8cb3f4e146e6f5fb0182a20b628d1a4b0b701f2cvboxsync int tcp_rcvspace;
8cb3f4e146e6f5fb0182a20b628d1a4b0b701f2cvboxsync int tcp_sndspace;
8cb3f4e146e6f5fb0182a20b628d1a4b0b701f2cvboxsync int socket_rcv;
8cb3f4e146e6f5fb0182a20b628d1a4b0b701f2cvboxsync int socket_snd;
9ade170e79b0b54e7cb240c69462fd7788d616a7vboxsync int soMaxConn;
40edc1763e249e55da538281100614c767e9c839vboxsync#ifdef RT_OS_WINDOWS
b625a4fa00a99203526872a8296ad215f22aca8evboxsync ULONG (WINAPI * pfGetAdaptersAddresses)(ULONG, ULONG, PVOID, PIP_ADAPTER_ADDRESSES, PULONG);
40edc1763e249e55da538281100614c767e9c839vboxsync#endif
15425aa11cac2994aa42c3a63aa0cffe4c5ad87evboxsync struct dns_list_head pDnsList;
15425aa11cac2994aa42c3a63aa0cffe4c5ad87evboxsync struct dns_domain_list_head pDomainList;
9c49c73dd1a2b84de46465cf04f6623b7de9eedcvboxsync uint32_t dnsgen; /* XXX: merge with dnsLastUpdate? */
116ffb157097d85727c1824d999bc69f0f20657bvboxsync struct in_addr tftp_server;
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync struct in_addr loopback_addr;
22e854f9b80b7f9baca4164e97a3c2b94271422cvboxsync uint32_t dnsLastUpdate;
10999a6cc03d38b63eb6b2dbeb901128b19fc952vboxsync uint32_t netmask;
8fc07f8b2a216c62595bd55cc67716cde0cc8f85vboxsync uint8_t client_ethaddr[6];
b895bb5ba480cbdcd7abe96183427d61bd56a3d0vboxsync const uint8_t *slirp_ethaddr;
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync char slirp_hostname[33];
cae344fd3225e3b7b528b87e69f06528b7f0b495vboxsync bool fPassDomain;
8363d834435c133dceafba6aedab1041584efb8cvboxsync struct in_addr bindIP;
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync /* Stuff from tcp_input.c */
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync struct socket tcb;
34c17e36dc11126d142ed742b0a0eaed3a5e7a92vboxsync
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync struct socket *tcp_last_so;
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync tcp_seq tcp_iss;
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync /* Stuff from tcp_timer.c */
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync struct tcpstat_t tcpstat;
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync uint32_t tcp_now;
0e2909d08a4e4c8a6428f137f71224fb3c180c7cvboxsync int tcp_reass_qsize;
0e2909d08a4e4c8a6428f137f71224fb3c180c7cvboxsync int tcp_reass_maxqlen;
0e2909d08a4e4c8a6428f137f71224fb3c180c7cvboxsync int tcp_reass_maxseg;
0e2909d08a4e4c8a6428f137f71224fb3c180c7cvboxsync int tcp_reass_overflows;
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync /* Stuff from tftp.c */
9bbeb13105c5e186e7e0b8169c72f8e9faea5502vboxsync void *pvTftpSessions;
9bbeb13105c5e186e7e0b8169c72f8e9faea5502vboxsync int cTftpSession;
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync const char *tftp_prefix;
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync /* Stuff from udp.c */
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync struct udpstat_t udpstat;
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync struct socket udb;
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync struct socket *udp_last_so;
55404da447d5e184a923fd032ade353582b55470vboxsync
dbb9701e09224046f9ebf3b9528b6d3bbe070486vboxsync# ifndef RT_OS_WINDOWS
dbb9701e09224046f9ebf3b9528b6d3bbe070486vboxsync /* counter of sockets needed for allocation enough room to
dbb9701e09224046f9ebf3b9528b6d3bbe070486vboxsync * process sockets with poll/epoll
dbb9701e09224046f9ebf3b9528b6d3bbe070486vboxsync *
dbb9701e09224046f9ebf3b9528b6d3bbe070486vboxsync * NSOCK_INC/DEC should be injected before every
dbb9701e09224046f9ebf3b9528b6d3bbe070486vboxsync * operation on socket queue (tcb, udb)
dbb9701e09224046f9ebf3b9528b6d3bbe070486vboxsync */
dbb9701e09224046f9ebf3b9528b6d3bbe070486vboxsync int nsock;
dbb9701e09224046f9ebf3b9528b6d3bbe070486vboxsync# define NSOCK_INC() do {pData->nsock++;} while (0)
dbb9701e09224046f9ebf3b9528b6d3bbe070486vboxsync# define NSOCK_DEC() do {pData->nsock--;} while (0)
4644d8b290a0c469b138b84661668c6c0ac0ffe5vboxsync# define NSOCK_INC_EX(ex) do {ex->pData->nsock++;} while (0)
4644d8b290a0c469b138b84661668c6c0ac0ffe5vboxsync# define NSOCK_DEC_EX(ex) do {ex->pData->nsock--;} while (0)
dbb9701e09224046f9ebf3b9528b6d3bbe070486vboxsync# else
dbb9701e09224046f9ebf3b9528b6d3bbe070486vboxsync# define NSOCK_INC() do {} while (0)
dbb9701e09224046f9ebf3b9528b6d3bbe070486vboxsync# define NSOCK_DEC() do {} while (0)
4644d8b290a0c469b138b84661668c6c0ac0ffe5vboxsync# define NSOCK_INC_EX(ex) do {} while (0)
4644d8b290a0c469b138b84661668c6c0ac0ffe5vboxsync# define NSOCK_DEC_EX(ex) do {} while (0)
dbb9701e09224046f9ebf3b9528b6d3bbe070486vboxsync# endif
55404da447d5e184a923fd032ade353582b55470vboxsync
55404da447d5e184a923fd032ade353582b55470vboxsync struct socket icmp_socket;
cd0a67b2dd5f66f87aca9ad79dda62a2ce142817vboxsync# if !defined(RT_OS_WINDOWS)
55404da447d5e184a923fd032ade353582b55470vboxsync struct icmp_storage icmp_msg_head;
61599a1b6831c4446e567bf803ec99bc7aba798cvboxsync int cIcmpCacheSize;
61599a1b6831c4446e567bf803ec99bc7aba798cvboxsync int iIcmpCacheLimit;
cd0a67b2dd5f66f87aca9ad79dda62a2ce142817vboxsync# else
cd0a67b2dd5f66f87aca9ad79dda62a2ce142817vboxsync struct pong_tailq pongs_expected;
cd0a67b2dd5f66f87aca9ad79dda62a2ce142817vboxsync struct pong_tailq pongs_received;
cd0a67b2dd5f66f87aca9ad79dda62a2ce142817vboxsync size_t cbIcmpPending;
e1f457447f1c11fde1ecd1aef177850a02c3f92dvboxsync# endif
cd0a67b2dd5f66f87aca9ad79dda62a2ce142817vboxsync
ef0c0f0afcec83a3da370a0d2e5474b204f32582vboxsync#if defined(RT_OS_WINDOWS)
c3b25f6ef0a1ab2cf0c700db2298f0915af790ecvboxsync# define VBOX_SOCKET_EVENT (pData->phEvents[VBOX_SOCKET_EVENT_INDEX])
765d8cb2ce060e2264777a467a6d8e0249817842vboxsync HANDLE phEvents[VBOX_EVENT_COUNT];
51504f113cf59edaee36f3134f8f0c2ef954e36fvboxsync#endif
fe0336dab2332556574fab2b79ab4210a7989127vboxsync#ifdef zone_mbuf
fe0336dab2332556574fab2b79ab4210a7989127vboxsync# undef zone_mbuf
fe0336dab2332556574fab2b79ab4210a7989127vboxsync#endif
6ae6bcfc5fb10d8056190f96771187fbc9ed5461vboxsync uma_zone_t zone_mbuf;
fe0336dab2332556574fab2b79ab4210a7989127vboxsync#ifdef zone_clust
fe0336dab2332556574fab2b79ab4210a7989127vboxsync# undef zone_clust
fe0336dab2332556574fab2b79ab4210a7989127vboxsync#endif
6ae6bcfc5fb10d8056190f96771187fbc9ed5461vboxsync uma_zone_t zone_clust;
fe0336dab2332556574fab2b79ab4210a7989127vboxsync#ifdef zone_pack
fe0336dab2332556574fab2b79ab4210a7989127vboxsync# undef zone_pack
fe0336dab2332556574fab2b79ab4210a7989127vboxsync#endif
6ae6bcfc5fb10d8056190f96771187fbc9ed5461vboxsync uma_zone_t zone_pack;
fe0336dab2332556574fab2b79ab4210a7989127vboxsync#ifdef zone_jumbop
fe0336dab2332556574fab2b79ab4210a7989127vboxsync# undef zone_jumbop
fe0336dab2332556574fab2b79ab4210a7989127vboxsync#endif
6ae6bcfc5fb10d8056190f96771187fbc9ed5461vboxsync uma_zone_t zone_jumbop;
fe0336dab2332556574fab2b79ab4210a7989127vboxsync#ifdef zone_jumbo9
fe0336dab2332556574fab2b79ab4210a7989127vboxsync# undef zone_jumbo9
fe0336dab2332556574fab2b79ab4210a7989127vboxsync#endif
6ae6bcfc5fb10d8056190f96771187fbc9ed5461vboxsync uma_zone_t zone_jumbo9;
fe0336dab2332556574fab2b79ab4210a7989127vboxsync#ifdef zone_jumbo16
fe0336dab2332556574fab2b79ab4210a7989127vboxsync# undef zone_jumbo16
fe0336dab2332556574fab2b79ab4210a7989127vboxsync#endif
6ae6bcfc5fb10d8056190f96771187fbc9ed5461vboxsync uma_zone_t zone_jumbo16;
fe0336dab2332556574fab2b79ab4210a7989127vboxsync#ifdef zone_ext_refcnt
fe0336dab2332556574fab2b79ab4210a7989127vboxsync# undef zone_ext_refcnt
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 */
6ae6bcfc5fb10d8056190f96771187fbc9ed5461vboxsync struct mbstat mbstat;
6ae6bcfc5fb10d8056190f96771187fbc9ed5461vboxsync#endif
fe0336dab2332556574fab2b79ab4210a7989127vboxsync uma_zone_t zone_ext_refcnt;
779ecf7c23c17f2f16d9eac1f3a0cce5e73d8401vboxsync /**
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 */
6e0b1e7dbe7efb01d4f11ccbb2bc88ba22b38413vboxsync bool fUseHostResolver;
779ecf7c23c17f2f16d9eac1f3a0cce5e73d8401vboxsync /**
779ecf7c23c17f2f16d9eac1f3a0cce5e73d8401vboxsync * Flag whether using the host resolver mode is permanent
2b114c590cf5a19f8047cd7bde9c7e5ae00aa22bvboxsync * because the user configured it that way.
779ecf7c23c17f2f16d9eac1f3a0cce5e73d8401vboxsync */
55c6dd0c4e495858f1681a45e28e04c791ef066evboxsync bool fUseHostResolverPermanent;
c32507d221931a4069a5733c06d8b69d96dd7f65vboxsync /* from dnsproxy/dnsproxy.h*/
c32507d221931a4069a5733c06d8b69d96dd7f65vboxsync unsigned int authoritative_port;
c32507d221931a4069a5733c06d8b69d96dd7f65vboxsync unsigned int authoritative_timeout;
c32507d221931a4069a5733c06d8b69d96dd7f65vboxsync unsigned int recursive_port;
c32507d221931a4069a5733c06d8b69d96dd7f65vboxsync unsigned int recursive_timeout;
c32507d221931a4069a5733c06d8b69d96dd7f65vboxsync unsigned int stats_timeout;
c32507d221931a4069a5733c06d8b69d96dd7f65vboxsync unsigned int port;
c32507d221931a4069a5733c06d8b69d96dd7f65vboxsync
c32507d221931a4069a5733c06d8b69d96dd7f65vboxsync unsigned long active_queries;
c32507d221931a4069a5733c06d8b69d96dd7f65vboxsync unsigned long all_queries;
c32507d221931a4069a5733c06d8b69d96dd7f65vboxsync unsigned long authoritative_queries;
c32507d221931a4069a5733c06d8b69d96dd7f65vboxsync unsigned long recursive_queries;
c32507d221931a4069a5733c06d8b69d96dd7f65vboxsync unsigned long removed_queries;
c32507d221931a4069a5733c06d8b69d96dd7f65vboxsync unsigned long dropped_queries;
c32507d221931a4069a5733c06d8b69d96dd7f65vboxsync unsigned long answered_queries;
c32507d221931a4069a5733c06d8b69d96dd7f65vboxsync unsigned long dropped_answers;
c32507d221931a4069a5733c06d8b69d96dd7f65vboxsync unsigned long late_answers;
c32507d221931a4069a5733c06d8b69d96dd7f65vboxsync unsigned long hash_collisions;
c32507d221931a4069a5733c06d8b69d96dd7f65vboxsync /*dnsproxy/dnsproxy.c*/
c32507d221931a4069a5733c06d8b69d96dd7f65vboxsync unsigned short queryid;
c32507d221931a4069a5733c06d8b69d96dd7f65vboxsync struct sockaddr_in authoritative_addr;
c32507d221931a4069a5733c06d8b69d96dd7f65vboxsync struct sockaddr_in recursive_addr;
c32507d221931a4069a5733c06d8b69d96dd7f65vboxsync int sock_query;
c32507d221931a4069a5733c06d8b69d96dd7f65vboxsync int sock_answer;
c32507d221931a4069a5733c06d8b69d96dd7f65vboxsync /* dnsproxy/hash.c */
40edc1763e249e55da538281100614c767e9c839vboxsync#define HASHSIZE 10
40edc1763e249e55da538281100614c767e9c839vboxsync#define HASH(id) (id & ((1 << HASHSIZE) - 1))
c32507d221931a4069a5733c06d8b69d96dd7f65vboxsync struct request *request_hash[1 << HASHSIZE];
f9887098d969fe46622baed60cd2d28aba576052vboxsync /* this field control behaviour of DHCP server */
6e0b1e7dbe7efb01d4f11ccbb2bc88ba22b38413vboxsync bool fUseDnsProxy;
40edc1763e249e55da538281100614c767e9c839vboxsync
c8d1cc47ca3870a45535dffe912d952beccc9f9dvboxsync LIST_HEAD(RT_NOTHING, libalias) instancehead;
62a515eec8de1b7804ec6997c0f2013fef5c5a6bvboxsync int i32AliasMode;
39ec8d83ad0f1861d9b086da757b4df372470322vboxsync struct libalias *proxy_alias;
ac50f06afde48ac748508b14be3d44428d3500d1vboxsync LIST_HEAD(handler_chain, proto_handler) handler_chain;
58f7b4458f55fbe1164a68a6a137e1c3c0cb43a2vboxsync /** Critical R/W section to protect the handler chain list. */
58f7b4458f55fbe1164a68a6a137e1c3c0cb43a2vboxsync RTCRITSECTRW CsRwHandlerChain;
8fc07f8b2a216c62595bd55cc67716cde0cc8f85vboxsync struct port_forward_rule_list port_forward_rule_head;
d1db5342e0737eaebe3b6af1bca4fdc042cd1005vboxsync int cRedirectionsActive;
d1db5342e0737eaebe3b6af1bca4fdc042cd1005vboxsync int cRedirectionsStored;
5e71f033c9ab9f32430762f22e66a8a693652af3vboxsync struct arp_cache_head arp_cache;
817bcc5853f9943b8c3d16414695913855df442fvboxsync /* libalis modules' handlers*/
67ca8b37c901c98c191bb7216ef7574c83a0b0f8vboxsync struct proto_handler *ftp_module;
67ca8b37c901c98c191bb7216ef7574c83a0b0f8vboxsync struct proto_handler *nbt_module;
566a7d17a29255ad2b0740df1234a0a2b5a0f687vboxsync struct proto_handler *dns_module;
817bcc5853f9943b8c3d16414695913855df442fvboxsync#ifdef VBOX_WITH_NAT_SEND2HOME
817bcc5853f9943b8c3d16414695913855df442fvboxsync /* array of home addresses */
817bcc5853f9943b8c3d16414695913855df442fvboxsync struct sockaddr_in *pInSockAddrHomeAddress;
817bcc5853f9943b8c3d16414695913855df442fvboxsync /* size of pInSockAddrHomeAddress in elements */
817bcc5853f9943b8c3d16414695913855df442fvboxsync int cInHomeAddressSize;
817bcc5853f9943b8c3d16414695913855df442fvboxsync#endif
783e463acf52ae50e2c72c01713f5e1e9fbf41advboxsync#ifdef VBOX_WITH_DNSMAPPING_IN_HOSTRESOLVER
783e463acf52ae50e2c72c01713f5e1e9fbf41advboxsync DNSMAPPINGLISTHEAD DNSMapHead;
783e463acf52ae50e2c72c01713f5e1e9fbf41advboxsync#endif
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync} NATState;
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync/** Default IP time to live. */
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync#define ip_defttl IPDEFTTL
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync/** Number of permanent buffers in mbuf. */
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync#define mbuf_thresh 30
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync/** Use a fixed time before sending keepalive. */
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync#define tcp_keepidle TCPTV_KEEP_IDLE
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync/** Use a fixed interval between keepalive. */
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync#define tcp_keepintvl TCPTV_KEEPINTVL
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync/** Maximum idle time before timing out a connection. */
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync#define tcp_maxidle (TCPTV_KEEPCNT * tcp_keepintvl)
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync/** Default TCP socket options. */
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync#define so_options DO_KEEPALIVE
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync/** Default TCP MSS value. */
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync#define tcp_mssdflt TCP_MSS
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync/** Default TCP round trip time. */
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync#define tcp_rttdflt (TCPTV_SRTTDFLT / PR_SLOWHZ)
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync/** Enable RFC1323 performance enhancements.
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync * @todo check if it really works, it was turned off before. */
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync#define tcp_do_rfc1323 1
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync/** TCP receive buffer size. */
8cb3f4e146e6f5fb0182a20b628d1a4b0b701f2cvboxsync#define tcp_rcvspace pData->tcp_rcvspace
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync/** TCP receive buffer size. */
8cb3f4e146e6f5fb0182a20b628d1a4b0b701f2cvboxsync#define tcp_sndspace pData->tcp_sndspace
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync/* TCP duplicate ACK retransmit threshold. */
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync#define tcprexmtthresh 3
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync#define bootp_filename pData->bootp_filename
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync#define if_mtu pData->if_mtu
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync#define if_mru pData->if_mru
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync#define if_comp pData->if_comp
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync#define if_maxlinkhdr pData->if_maxlinkhdr
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync#define if_queued pData->if_queued
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync#define if_thresh pData->if_thresh
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync#define icmpstat pData->icmpstat
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync#define ipstat pData->ipstat
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync#define ipq pData->ipq
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync#define ip_currid pData->ip_currid
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync#define mbuf_alloced pData->mbuf_alloced
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync#define mbuf_max pData->mbuf_max
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync#define msize pData->msize
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync#define m_freelist pData->m_freelist
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync#define m_usedlist pData->m_usedlist
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync#define curtime pData->curtime
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync#define time_fasttimo pData->time_fasttimo
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync#define last_slowtimo pData->last_slowtimo
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync#define do_slowtimo pData->do_slowtimo
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync#define link_up pData->link_up
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync#define cUsers pData->cUsers
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync#define tt pData->tt
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync#define our_addr pData->our_addr
58bc739574052e89843cc6bcebda6c051aca5238vboxsync#ifndef VBOX_SLIRP_ALIAS
58bc739574052e89843cc6bcebda6c051aca5238vboxsync# define alias_addr pData->alias_addr
ac50f06afde48ac748508b14be3d44428d3500d1vboxsync#else
ac50f06afde48ac748508b14be3d44428d3500d1vboxsync# define handler_chain pData->handler_chain
58bc739574052e89843cc6bcebda6c051aca5238vboxsync#endif
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync#define dns_addr pData->dns_addr
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync#define loopback_addr pData->loopback_addr
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync#define client_ethaddr pData->client_ethaddr
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync#define slirp_hostname pData->slirp_hostname
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync#define tcb pData->tcb
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync#define tcp_last_so pData->tcp_last_so
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync#define tcp_iss pData->tcp_iss
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync#define tcpstat pData->tcpstat
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync#define tcp_now pData->tcp_now
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync#define tftp_prefix pData->tftp_prefix
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync#define udpstat pData->udpstat
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync#define udb pData->udb
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync#define udp_last_so pData->udp_last_so
a184ecca8d0a64ea3d6f85dff17572fa0cfeee4evboxsync
10efab965f6b58c5435453c8a0091db99afb208bvboxsync#define maxfragsperpacket pData->maxfragsperpacket
10efab965f6b58c5435453c8a0091db99afb208bvboxsync#define maxnipq pData->maxnipq
10efab965f6b58c5435453c8a0091db99afb208bvboxsync#define nipq pData->nipq
10efab965f6b58c5435453c8a0091db99afb208bvboxsync
0e2909d08a4e4c8a6428f137f71224fb3c180c7cvboxsync#define tcp_reass_qsize pData->tcp_reass_qsize
0e2909d08a4e4c8a6428f137f71224fb3c180c7cvboxsync#define tcp_reass_maxqlen pData->tcp_reass_maxqlen
0e2909d08a4e4c8a6428f137f71224fb3c180c7cvboxsync#define tcp_reass_maxseg pData->tcp_reass_maxseg
0e2909d08a4e4c8a6428f137f71224fb3c180c7cvboxsync#define tcp_reass_overflows pData->tcp_reass_overflows
fb0dc065c353f09a62acf815d224751790001030vboxsync
15e9551616edacb30fe180f55fdb97c1a0f6aacbvboxsync#define queue_tcp_label tcb
15e9551616edacb30fe180f55fdb97c1a0f6aacbvboxsync#define queue_udp_label udb
a87795a36f9fc85d5e915fca513880bfde72cb9fvboxsync#define VBOX_X2(x) x
a87795a36f9fc85d5e915fca513880bfde72cb9fvboxsync#define VBOX_X(x) VBOX_X2(x)
5cb306e00c2e570668926078f05ffdc7f2ff08d7vboxsync
34c17e36dc11126d142ed742b0a0eaed3a5e7a92vboxsync#if 1
5cb306e00c2e570668926078f05ffdc7f2ff08d7vboxsync
5cb306e00c2e570668926078f05ffdc7f2ff08d7vboxsync# define QSOCKET_LOCK(queue) do {} while (0)
5cb306e00c2e570668926078f05ffdc7f2ff08d7vboxsync# define QSOCKET_UNLOCK(queue) do {} while (0)
5cb306e00c2e570668926078f05ffdc7f2ff08d7vboxsync# define QSOCKET_LOCK_CREATE(queue) do {} while (0)
5cb306e00c2e570668926078f05ffdc7f2ff08d7vboxsync# define QSOCKET_LOCK_DESTROY(queue) do {} while (0)
5cb306e00c2e570668926078f05ffdc7f2ff08d7vboxsync# define QSOCKET_FOREACH(so, sonext, label) \
c6f6969abc1ac8c400ed863e07b357b0fee7eaadvboxsync for ((so) = VBOX_X2(queue_ ## label ## _label).so_next; \
c6f6969abc1ac8c400ed863e07b357b0fee7eaadvboxsync (so) != &(VBOX_X2(queue_ ## label ## _label)); \
5cb306e00c2e570668926078f05ffdc7f2ff08d7vboxsync (so) = (sonext)) \
5cb306e00c2e570668926078f05ffdc7f2ff08d7vboxsync { \
c6f6969abc1ac8c400ed863e07b357b0fee7eaadvboxsync (sonext) = (so)->so_next; \
3f7363f70639b293c86f983c5304501c72d1fbadvboxsync Log5(("%s:%d Processing so:%R[natsock]\n", __FUNCTION__, __LINE__, (so)));
ca794f37ff137134ba3aa96994bdb45d54ac8e27vboxsync# define CONTINUE(label) continue
ca794f37ff137134ba3aa96994bdb45d54ac8e27vboxsync# define CONTINUE_NO_UNLOCK(label) continue
ca794f37ff137134ba3aa96994bdb45d54ac8e27vboxsync# define LOOP_LABEL(label, so, sonext) /* empty*/
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_SOREAD(ret, data, so, ifclose) \
5cb306e00c2e570668926078f05ffdc7f2ff08d7vboxsync do { \
5cb306e00c2e570668926078f05ffdc7f2ff08d7vboxsync (ret) = soread((data), (so), (ifclose)); \
5cb306e00c2e570668926078f05ffdc7f2ff08d7vboxsync } while(0)
5cb306e00c2e570668926078f05ffdc7f2ff08d7vboxsync# define DO_SOWRITE(ret, data, so) \
5cb306e00c2e570668926078f05ffdc7f2ff08d7vboxsync do { \
5cb306e00c2e570668926078f05ffdc7f2ff08d7vboxsync (ret) = sowrite((data), (so)); \
5cb306e00c2e570668926078f05ffdc7f2ff08d7vboxsync } while(0)
5cb306e00c2e570668926078f05ffdc7f2ff08d7vboxsync# define DO_SORECFROM(data, so) sorecvfrom((data), (so))
5cb306e00c2e570668926078f05ffdc7f2ff08d7vboxsync# define SOLOOKUP(so, label, src, sport, dst, dport) \
5cb306e00c2e570668926078f05ffdc7f2ff08d7vboxsync do { \
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))
5cb306e00c2e570668926078f05ffdc7f2ff08d7vboxsync
34c17e36dc11126d142ed742b0a0eaed3a5e7a92vboxsync#endif
15e9551616edacb30fe180f55fdb97c1a0f6aacbvboxsync
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))
5cb306e00c2e570668926078f05ffdc7f2ff08d7vboxsync
c32507d221931a4069a5733c06d8b69d96dd7f65vboxsync/* dnsproxy/dnsproxy.c */
40edc1763e249e55da538281100614c767e9c839vboxsync#define authoritative_port pData->authoritative_port
40edc1763e249e55da538281100614c767e9c839vboxsync#define authoritative_timeout pData->authoritative_timeout
40edc1763e249e55da538281100614c767e9c839vboxsync#define recursive_port pData->recursive_port
40edc1763e249e55da538281100614c767e9c839vboxsync#define recursive_timeout pData->recursive_timeout
40edc1763e249e55da538281100614c767e9c839vboxsync#define stats_timeout pData->stats_timeout
c32507d221931a4069a5733c06d8b69d96dd7f65vboxsync/* dnsproxy/hash.c */
40edc1763e249e55da538281100614c767e9c839vboxsync#define dns_port pData->port
40edc1763e249e55da538281100614c767e9c839vboxsync#define request_hash pData->request_hash
40edc1763e249e55da538281100614c767e9c839vboxsync#define hash_collisions pData->hash_collisions
40edc1763e249e55da538281100614c767e9c839vboxsync#define active_queries pData->active_queries
40edc1763e249e55da538281100614c767e9c839vboxsync#define all_queries pData->all_queries
40edc1763e249e55da538281100614c767e9c839vboxsync#define authoritative_queries pData->authoritative_queries
40edc1763e249e55da538281100614c767e9c839vboxsync#define recursive_queries pData->recursive_queries
40edc1763e249e55da538281100614c767e9c839vboxsync#define removed_queries pData->removed_queries
40edc1763e249e55da538281100614c767e9c839vboxsync#define dropped_queries pData->dropped_queries
40edc1763e249e55da538281100614c767e9c839vboxsync#define answered_queries pData->answered_queries
40edc1763e249e55da538281100614c767e9c839vboxsync#define dropped_answers pData->dropped_answers
40edc1763e249e55da538281100614c767e9c839vboxsync#define late_answers pData->late_answers
c32507d221931a4069a5733c06d8b69d96dd7f65vboxsync
c32507d221931a4069a5733c06d8b69d96dd7f65vboxsync/* dnsproxy/dnsproxy.c */
40edc1763e249e55da538281100614c767e9c839vboxsync#define queryid pData->queryid
40edc1763e249e55da538281100614c767e9c839vboxsync#define authoritative_addr pData->authoritative_addr
40edc1763e249e55da538281100614c767e9c839vboxsync#define recursive_addr pData->recursive_addr
40edc1763e249e55da538281100614c767e9c839vboxsync#define sock_query pData->sock_query
40edc1763e249e55da538281100614c767e9c839vboxsync#define sock_answer pData->sock_answer
c32507d221931a4069a5733c06d8b69d96dd7f65vboxsync
50ebff142d85d54d8c301b6bb291f7135f8e7779vboxsync#define instancehead pData->instancehead
58bc739574052e89843cc6bcebda6c051aca5238vboxsync
fe0336dab2332556574fab2b79ab4210a7989127vboxsync#define nmbclusters pData->nmbclusters
fe0336dab2332556574fab2b79ab4210a7989127vboxsync#define nmbjumbop pData->nmbjumbop
fe0336dab2332556574fab2b79ab4210a7989127vboxsync#define nmbjumbo9 pData->nmbjumbo9
fe0336dab2332556574fab2b79ab4210a7989127vboxsync#define nmbjumbo16 pData->nmbjumbo16
fe0336dab2332556574fab2b79ab4210a7989127vboxsync#define mbstat pData->mbstat
fe0336dab2332556574fab2b79ab4210a7989127vboxsync#include "ext.h"
fe0336dab2332556574fab2b79ab4210a7989127vboxsync#undef zone_mbuf
fe0336dab2332556574fab2b79ab4210a7989127vboxsync#undef zone_clust
fe0336dab2332556574fab2b79ab4210a7989127vboxsync#undef zone_pack
fe0336dab2332556574fab2b79ab4210a7989127vboxsync#undef zone_jumbop
fe0336dab2332556574fab2b79ab4210a7989127vboxsync#undef zone_jumbo9
fe0336dab2332556574fab2b79ab4210a7989127vboxsync#undef zone_jumbo16
fe0336dab2332556574fab2b79ab4210a7989127vboxsync#undef zone_ext_refcnt
6ae6bcfc5fb10d8056190f96771187fbc9ed5461vboxsyncstatic inline uma_zone_t slirp_zone_pack(PNATState pData)
6ae6bcfc5fb10d8056190f96771187fbc9ed5461vboxsync{
6ae6bcfc5fb10d8056190f96771187fbc9ed5461vboxsync return pData->zone_pack;
6ae6bcfc5fb10d8056190f96771187fbc9ed5461vboxsync}
6ae6bcfc5fb10d8056190f96771187fbc9ed5461vboxsyncstatic inline uma_zone_t slirp_zone_jumbop(PNATState pData)
6ae6bcfc5fb10d8056190f96771187fbc9ed5461vboxsync{
6ae6bcfc5fb10d8056190f96771187fbc9ed5461vboxsync return pData->zone_jumbop;
6ae6bcfc5fb10d8056190f96771187fbc9ed5461vboxsync}
6ae6bcfc5fb10d8056190f96771187fbc9ed5461vboxsyncstatic inline uma_zone_t slirp_zone_jumbo9(PNATState pData)
6ae6bcfc5fb10d8056190f96771187fbc9ed5461vboxsync{
6ae6bcfc5fb10d8056190f96771187fbc9ed5461vboxsync return pData->zone_jumbo9;
6ae6bcfc5fb10d8056190f96771187fbc9ed5461vboxsync}
6ae6bcfc5fb10d8056190f96771187fbc9ed5461vboxsyncstatic inline uma_zone_t slirp_zone_jumbo16(PNATState pData)
6ae6bcfc5fb10d8056190f96771187fbc9ed5461vboxsync{
6ae6bcfc5fb10d8056190f96771187fbc9ed5461vboxsync return pData->zone_jumbo16;
6ae6bcfc5fb10d8056190f96771187fbc9ed5461vboxsync}
6ae6bcfc5fb10d8056190f96771187fbc9ed5461vboxsyncstatic inline uma_zone_t slirp_zone_ext_refcnt(PNATState pData)
6ae6bcfc5fb10d8056190f96771187fbc9ed5461vboxsync{
6ae6bcfc5fb10d8056190f96771187fbc9ed5461vboxsync return pData->zone_ext_refcnt;
6ae6bcfc5fb10d8056190f96771187fbc9ed5461vboxsync}
6ae6bcfc5fb10d8056190f96771187fbc9ed5461vboxsyncstatic inline uma_zone_t slirp_zone_mbuf(PNATState pData)
6ae6bcfc5fb10d8056190f96771187fbc9ed5461vboxsync{
6ae6bcfc5fb10d8056190f96771187fbc9ed5461vboxsync return pData->zone_mbuf;
6ae6bcfc5fb10d8056190f96771187fbc9ed5461vboxsync}
6ae6bcfc5fb10d8056190f96771187fbc9ed5461vboxsyncstatic inline uma_zone_t slirp_zone_clust(PNATState pData)
6ae6bcfc5fb10d8056190f96771187fbc9ed5461vboxsync{
6ae6bcfc5fb10d8056190f96771187fbc9ed5461vboxsync return pData->zone_clust;
6ae6bcfc5fb10d8056190f96771187fbc9ed5461vboxsync}
6ae6bcfc5fb10d8056190f96771187fbc9ed5461vboxsync#ifndef VBOX_SLIRP_BSD
6ae6bcfc5fb10d8056190f96771187fbc9ed5461vboxsync# define m_adj(m, len) m_adj(pData, (m), (len))
6ae6bcfc5fb10d8056190f96771187fbc9ed5461vboxsync#endif
6ae6bcfc5fb10d8056190f96771187fbc9ed5461vboxsync
eb6509c759a277527b791759757d9d9a5b1c5e32vboxsync#endif /* !___slirp_state_h */