VirtualBox

Changeset 14951 in vbox


Ignore:
Timestamp:
Dec 3, 2008 3:27:57 PM (16 years ago)
Author:
vboxsync
Message:

NAT: hopefully fixed Windows host

Location:
trunk/src/VBox/Devices/Network/slirp
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Devices/Network/slirp/if.c

    r14470 r14951  
    2828if_init(PNATState pData)
    2929{
    30 #if 0
    31         /*
    32          * Set if_maxlinkhdr to 48 because it's 40 bytes for TCP/IP,
    33          * and 8 bytes for PPP, but need to have it on an 8byte boundary
    34          */
    35 #ifdef USE_PPP
    36         if_maxlinkhdr = 48;
    37 #else
    38         if_maxlinkhdr = 40;
    39 #endif
    40 #else
    4130        /* 2 for alignment, 14 for ethernet, 40 for TCP/IP */
    4231        if_maxlinkhdr = 2 + 14 + 40;
    43 #endif
    4432        if_queued = 0;
    4533        if_thresh = 10;
  • trunk/src/VBox/Devices/Network/slirp/slirp.c

    r14882 r14951  
    1515};
    1616
    17 #ifdef _WIN32
     17#ifdef RT_OS_WINDOWS
    1818
    1919static int get_dns_addr_domain(PNATState pData, bool fVerbose,
     
    230230    pData->netmask = u32Netmask;
    231231
    232 #ifdef _WIN32
     232#ifdef RT_OS_WINDOWS
    233233    {
    234234        WSADATA Data;
    235235        WSAStartup(MAKEWORD(2,0), &Data);
    236236    }
    237 #if defined(VBOX_WITH_SIMPLIFIED_SLIRP_SYNC) && defined(RT_OS_WINDOWS)
     237# if defined(VBOX_WITH_SIMPLIFIED_SLIRP_SYNC)
    238238    pData->phEvents[VBOX_SOCKET_EVENT_INDEX] = CreateEvent(NULL, FALSE, FALSE, NULL);
    239 #endif
     239# endif
    240240#endif
    241241
     
    331331
    332332    slirp_link_down(pData);
    333 #ifdef WIN32
     333#ifdef RT_OS_WINDOWS
    334334    WSACleanup();
    335335#endif
     
    360360 * curtime kept to an accuracy of 1ms
    361361 */
    362 #ifdef _WIN32
     362#ifdef RT_OS_WINDOWS
    363363static void updtime(PNATState pData)
    364364{
     
    416416         * triggering of fragment expiration should be the same but use new macroses
    417417         */
    418         for (i = 0; i < IPREASS_NHASH; i++)
    419         {
    420             if (!TAILQ_EMPTY(&ipq[i]))
    421             {
    422                 do_slowtimo = 1;
    423                 break;
    424             }
    425         }
    426         do_slowtimo |= (tcb.so_next != &tcb);
     418        do_slowtimo = (tcb.so_next != &tcb);
     419        if (!do_slowtimo)
     420        {
     421            for (i = 0; i < IPREASS_NHASH; i++)
     422            {
     423                if (!TAILQ_EMPTY(&ipq[i]))
     424                {
     425                    do_slowtimo = 1;
     426                    break;
     427                }
     428            }
     429        }
    427430#endif /* VBOX_WITH_BSD_REASS */
    428431
     
    459462                UPD_NFDS(so->s);
    460463#else
    461                 rc = WSAEventSelect(so->s, VBOX_SOCKET_EVENT, FD_READ|FD_WRITE|FD_ACCEPT|FD_CONNECT|FD_OOB);
     464engage_event:
     465                rc = WSAEventSelect(so->s, VBOX_SOCKET_EVENT, FD_ALL_EVENTS);
    462466                if (rc == SOCKET_ERROR)
    463467                {
    464 socket_error:
     468                    /* This should not happen */
    465469                    error = WSAGetLastError();
    466                     LogRel(("WSAEventSelector error %d (so=%x, socket=%s, event=%x)\n", error, so, so->s, VBOX_SOCKET_EVENT));
     470                    LogRel(("WSAEventSelector (TCP) error %d (so=%x, socket=%s, event=%x)\n",
     471                             error, so, so->s, VBOX_SOCKET_EVENT));
    467472                }
    468473#endif
     
    479484                FD_SET(so->s, writefds);
    480485                UPD_NFDS(so->s);
    481 #else
    482                 rc = WSAEventSelect(so->s, VBOX_SOCKET_EVENT, FD_READ|FD_WRITE|FD_ACCEPT|FD_CONNECT|FD_OOB);
    483                 if (rc == SOCKET_ERROR)
    484                     goto socket_error;
    485 #endif
    486486                continue;
     487#else
     488                goto engage_event;
     489#endif
    487490            }
    488491
     
    498501                UPD_NFDS(so->s);
    499502#else
    500                 rc = WSAEventSelect(so->s, VBOX_SOCKET_EVENT, FD_READ|FD_WRITE|FD_ACCEPT|FD_CONNECT|FD_OOB);
    501                 if (rc == SOCKET_ERROR)
    502                     goto socket_error;
    503                 continue; /* we're using the widest mask for event */
     503                goto engage_event;
    504504#endif
    505505            }
     
    517517                UPD_NFDS(so->s);
    518518#else
    519                 rc = WSAEventSelect(so->s, VBOX_SOCKET_EVENT, FD_OOB|FD_READ|FD_WRITE|FD_ACCEPT|FD_CONNECT);
    520                 if (rc == SOCKET_ERROR)
    521                     goto socket_error;
    522                 continue; /* we're using the widest mask for event */
    523 #endif
    524             }
    525 #if defined(VBOX_WITH_SIMPLIFIED_SLIRP_SYNC) && defined(RT_OS_WINDOWS)
    526             rc = WSAEventSelect(so->s, NULL, 0);
    527             if (rc == SOCKET_ERROR)
    528                 goto socket_error;
    529 #endif
     519                goto engage_event;
     520#endif
     521            }
    530522        }
    531523
     
    573565                UPD_NFDS(so->s);
    574566#else
    575                 rc = WSAEventSelect(so->s, VBOX_SOCKET_EVENT, FD_READ|FD_WRITE|FD_OOB|FD_ACCEPT);
     567                rc = WSAEventSelect(so->s, VBOX_SOCKET_EVENT, FD_ALL_EVENTS);
    576568                if (rc == SOCKET_ERROR)
    577                     goto socket_error;
    578                 continue;
    579 #endif
    580             }
    581 #if defined(VBOX_WITH_SIMPLIFIED_SLIRP_SYNC) && defined(RT_OS_WINDOWS)
    582             else
    583             {
    584                 rc = WSAEventSelect(so->s, NULL, 0);
    585                 if (rc != SOCKET_ERROR)
    586                     goto socket_error;
    587             }
    588 #endif
     569                {
     570                    /* This should not happen */
     571                    error = WSAGetLastError();
     572                    LogRel(("WSAEventSelector (UDP) error %d (so=%x, socket=%s, event=%x)\n",
     573                            error, so, so->s, VBOX_SOCKET_EVENT));
     574                }
     575#endif
     576            }
    589577        }
    590578    }
     
    608596    int error;
    609597#endif
     598
    610599    STAM_REL_PROFILE_START(&pData->StatPoll, a);
    611600
     
    698687                {
    699688                    tcp_connect(pData, so);
    700                     continue;
     689#if defined(VBOX_WITH_SIMPLIFIED_SLIRP_SYNC) && defined(RT_OS_WINDOWS)
     690                    if (!NetworkEvents.lNetworkEvents & FD_CLOSE)
     691#endif
     692                        continue;
    701693                }
    702694
     
    706698                    tcp_output(pData, sototcpcb(so));
    707699            }
     700
     701#if defined(VBOX_WITH_SIMPLIFIED_SLIRP_SYNC) && defined(RT_OS_WINDOWS)
     702            /*
     703             * Check for FD_CLOSE events.
     704             */
     705            if (NetworkEvents.lNetworkEvents & FD_CLOSE)
     706            {
     707                /*
     708                 * drain the socket
     709                 */
     710                for (;;)
     711                {
     712                    ret = soread(pData, so);
     713                    if (ret > 0)
     714                        tcp_output(pData, sototcpcb(so));
     715                    else
     716                        break;
     717                }
     718            }
     719#endif
    708720
    709721            /*
     
    752764                    tcp_input(pData, (struct mbuf *)NULL, sizeof(struct ip), so);
    753765                    /* continue; */
    754                 } else
     766                }
     767                else
    755768                    ret = sowrite(pData, so);
    756769                /*
    757                  * XXXXX If we wrote something (a lot), there
    758                  * could be a need for a window update.
    759                  * In the worst case, the remote will send
    760                  * a window probe to get things going again
     770                 * XXX If we wrote something (a lot), there could be the need
     771                 * for a window update. In the worst case, the remote will send
     772                 * a window probe to get things going again.
    761773                 */
    762774            }
     
    850862}
    851863
    852 #define ETH_ALEN 6
    853 #define ETH_HLEN 14
     864#define ETH_ALEN        6
     865#define ETH_HLEN        14
    854866
    855867#define ETH_P_IP        0x0800          /* Internet Protocol packet     */
     
    861873struct ethhdr
    862874{
    863         unsigned char   h_dest[ETH_ALEN];       /* destination eth addr */
    864         unsigned char   h_source[ETH_ALEN];     /* source ether addr    */
    865         unsigned short  h_proto;                /* packet type ID field */
     875    unsigned char   h_dest[ETH_ALEN];           /* destination eth addr */
     876    unsigned char   h_source[ETH_ALEN];         /* source ether addr    */
     877    unsigned short  h_proto;                    /* packet type ID field */
    866878};
    867879
    868880struct arphdr
    869881{
    870         unsigned short  ar_hrd;         /* format of hardware address   */
    871         unsigned short  ar_pro;         /* format of protocol address   */
    872         unsigned char   ar_hln;         /* length of hardware address   */
    873         unsigned char   ar_pln;         /* length of protocol address   */
    874         unsigned short  ar_op;          /* ARP opcode (command)         */
    875 
    876          /*
    877           *      Ethernet looks like this : This bit is variable sized however...
    878           */
    879         unsigned char           ar_sha[ETH_ALEN];       /* sender hardware address      */
    880         unsigned char           ar_sip[4];              /* sender IP address            */
    881         unsigned char           ar_tha[ETH_ALEN];       /* target hardware address      */
    882         unsigned char           ar_tip[4];              /* target IP address            */
     882    unsigned short  ar_hrd;             /* format of hardware address   */
     883    unsigned short  ar_pro;             /* format of protocol address   */
     884    unsigned char   ar_hln;             /* length of hardware address   */
     885    unsigned char   ar_pln;             /* length of protocol address   */
     886    unsigned short  ar_op;              /* ARP opcode (command)         */
     887
     888    /*
     889     *      Ethernet looks like this : This bit is variable sized however...
     890     */
     891    unsigned char   ar_sha[ETH_ALEN];   /* sender hardware address      */
     892    unsigned char   ar_sip[4];          /* sender IP address            */
     893    unsigned char   ar_tha[ETH_ALEN];   /* target hardware address      */
     894    unsigned char   ar_tip[4];          /* target IP address            */
    883895};
    884896
  • trunk/src/VBox/Devices/Network/slirp/slirp.h

    r14638 r14951  
    2323
    2424#ifndef CONFIG_QEMU
    25 #include "version.h"
     25# include "version.h"
    2626#endif
    2727#define LOG_GROUP LOG_GROUP_DRV_NAT
    2828#include <VBox/log.h>
    2929#ifdef VBOX_WITH_SLIRP_MEMORY_CHECK
    30 #define RTMEM_WRAP_TO_EF_APIS
     30# define RTMEM_WRAP_TO_EF_APIS
    3131#endif /* VBOX_WITH_SLIRP_MEMORY_CHECK */
    3232#include <iprt/mem.h>
     
    4040#include <VBox/types.h>
    4141
    42 # define malloc(a)       RTMemAlloc(a)
    43 # define free(a)         RTMemFree(a)
    44 # define realloc(a,b)    RTMemRealloc(a, b)
     42#define malloc(a)       RTMemAlloc(a)
     43#define free(a)         RTMemFree(a)
     44#define realloc(a,b)    RTMemRealloc(a, b)
    4545
    4646#include "slirp_config.h"
    4747
    48 #ifdef _WIN32
    49 
    50 #ifndef _MSC_VER
    51 # include <inttypes.h>
    52 #endif
     48#ifdef RT_OS_WINDOWS
     49
     50# ifndef _MSC_VER
     51#  include <inttypes.h>
     52# endif
    5353
    5454typedef uint8_t u_int8_t;
     
    6767# define ENETUNREACH WSAENETUNREACH
    6868# define ECONNREFUSED WSAECONNREFUSED
    69 #else
     69
     70#else /* !RT_OS_WINDOWS */
     71
    7072# define ioctlsocket ioctl
    7173# define closesocket(s) close(s)
    7274# define O_BINARY 0
    73 #endif
     75
     76#endif /* !RT_OS_WINDOWS */
    7477
    7578#include <sys/types.h>
     
    7982
    8083#ifdef _MSC_VER
    81 #include <time.h>
     84# include <time.h>
    8285#else /* !_MSC_VER */
    83 #include <sys/time.h>
     86# include <sys/time.h>
    8487#endif /* !_MSC_VER */
    8588
     
    125128
    126129#ifndef HAVE_MEMMOVE
    127 #define memmove(x, y, z) bcopy(y, x, z)
     130# define memmove(x, y, z) bcopy(y, x, z)
    128131#endif
    129132
     
    145148#endif
    146149
    147 #ifndef _WIN32
    148 #include <sys/uio.h>
     150#ifndef RT_OS_WINDOWS
     151# include <sys/uio.h>
    149152#endif
    150153
     
    157160#endif
    158161
    159 #ifndef _WIN32
    160 #include <netinet/in.h>
    161 #include <arpa/inet.h>
     162#ifndef RT_OS_WINDOWS
     163# include <netinet/in.h>
     164# include <arpa/inet.h>
    162165#endif
    163166
    164167#ifdef GETTIMEOFDAY_ONE_ARG
    165 #define gettimeofday(x, y) gettimeofday(x)
     168# define gettimeofday(x, y) gettimeofday(x)
    166169#endif
    167170
     
    183186#include <fcntl.h>
    184187#ifndef NO_UNIX_SOCKETS
    185 #include <sys/un.h>
     188# include <sys/un.h>
    186189#endif
    187190#include <signal.h>
     
    189192# include <sys/signal.h>
    190193#endif
    191 #ifndef _WIN32
    192 #include <sys/socket.h>
     194#ifndef RT_OS_WINDOWS
     195# include <sys/socket.h>
    193196#endif
    194197
     
    209212#endif
    210213
    211 #ifdef USE_PPP
    212 #include <ppp/slirppp.h>
    213 #endif
    214 
    215214#if defined(__STDC__) || defined(_MSC_VER)
    216 #include <stdarg.h>
    217 #else
    218 #include <varargs.h>
     215# include <stdarg.h>
     216#else
     217# include <varargs.h>
    219218#endif
    220219
    221220#include <sys/stat.h>
    222221
    223 #if 1 /* ndef _MSC_VER */
    224222/* Avoid conflicting with the libc insque() and remque(), which
    225    have different prototypes. */
     223 * have different prototypes. */
    226224#define insque slirp_insque
    227225#define remque slirp_remque
    228 #endif /* !_MSC_VER */
    229226
    230227#ifdef HAVE_SYS_STROPTS_H
    231 #include <sys/stropts.h>
     228# include <sys/stropts.h>
    232229#endif
    233230
     
    250247#include "misc.h"
    251248#include "ctl.h"
    252 #ifdef USE_PPP
    253 #include "ppp/pppd.h"
    254 #include "ppp/ppp.h"
    255 #endif
    256 
    257249#include "bootp.h"
    258250#include "tftp.h"
     
    260252#include "slirp_state.h"
    261253
    262 #undef PVM /* XXX Mac hack */
     254#undef PVM /* XXX Mac OS X hack */
    263255
    264256#ifndef NULL
    265 #define NULL (void *)0
     257# define NULL (void *)0
    266258#endif
    267259
     
    318310#endif
    319311
    320 #ifndef _WIN32
     312#ifndef RT_OS_WINDOWS
    321313#include <netdb.h>
    322314#endif
     
    382374struct tcpcb *tcp_drop(PNATState, struct tcpcb *tp, int err);
    383375
    384 #ifdef USE_PPP
    385 #define MIN_MRU MINMRU
    386 #define MAX_MRU MAXMRU
    387 #else
    388376#define MIN_MRU 128
    389377#define MAX_MRU 16384
    390 #endif
    391 
    392 #ifndef _WIN32
    393 #define min(x,y) ((x) < (y) ? (x) : (y))
    394 #define max(x,y) ((x) > (y) ? (x) : (y))
    395 #endif
    396 
    397 #ifdef _WIN32
    398 #undef errno
    399 #define errno (WSAGetLastError())
    400 #endif
    401 
    402 #endif
     378
     379#ifndef RT_OS_WINDOWS
     380# define min(x,y) ((x) < (y) ? (x) : (y))
     381# define max(x,y) ((x) > (y) ? (x) : (y))
     382#endif
     383
     384#ifdef RT_OS_WINDOWS
     385# undef errno
     386# define errno (WSAGetLastError())
     387#endif
     388
     389#endif
  • trunk/src/VBox/Devices/Network/slirp/slirp_config.h

    r3693 r14951  
    6767/* Define if you have sys/ioctl.h */
    6868#undef HAVE_SYS_IOCTL_H
    69 #ifndef _WIN32
    70 #define HAVE_SYS_IOCTL_H
     69#ifndef RT_OS_WINDOWS
     70# define HAVE_SYS_IOCTL_H
    7171#endif
    7272
     
    101101/* Define if iovec needs to be declared */
    102102#undef DECLARE_IOVEC
    103 #ifdef _WIN32
    104 #define DECLARE_IOVEC
     103#ifdef RT_OS_WINDOWS
     104# define DECLARE_IOVEC
    105105#endif
    106106
     
    113113/* Define if you have sys/select.h */
    114114#undef HAVE_SYS_SELECT_H
    115 #ifndef _WIN32
    116 #define HAVE_SYS_SELECT_H
     115#ifndef RT_OS_WINDOWS
     116# define HAVE_SYS_SELECT_H
    117117#endif
    118118
     
    122122/* Define if you have arpa/inet.h */
    123123#undef HAVE_ARPA_INET_H
    124 #ifndef _WIN32
    125 #define HAVE_ARPA_INET_H
     124#ifndef RT_OS_WINDOWS
     125# define HAVE_ARPA_INET_H
    126126#endif
    127127
     
    172172/* Define if you have inet_aton */
    173173#undef HAVE_INET_ATON
    174 #ifndef _WIN32
    175 #define HAVE_INET_ATON
     174#ifndef RT_OS_WINDOWS
     175# define HAVE_INET_ATON
    176176#endif
    177177
     
    199199/* Define if you DON'T have unix-domain sockets */
    200200#undef NO_UNIX_SOCKETS
    201 #ifdef _WIN32
    202 #define NO_UNIX_SOCKETS
     201#ifdef RT_OS_WINDOWS
     202# define NO_UNIX_SOCKETS
    203203#endif
    204204
  • trunk/src/VBox/Devices/Network/slirp/socket.c

    r14925 r14951  
    160160#endif
    161161        if (nn <= 0) {
     162#if defined(VBOX_WITH_SIMPLIFIED_SLIRP_SYNC) && defined(RT_OS_WINDOWS)
     163            /*
     164             * Special case for WSAEnumNetworkEvents: If we receive 0 bytes that
     165             * _could_ mean that the connection is closed. But we will receive an
     166             * FD_CLOSE event later if the connection was _really_ closed. With
     167             * www.youtube.com I see this very often. Closing the socket too early
     168             * would be dangerous.
     169             */
     170                if (nn == 0)
     171                        return 0;
     172#endif
    162173                if (nn < 0 && (errno == EINTR || errno == EAGAIN || errno == EWOULDBLOCK))
    163174                        return 0;
  • trunk/src/VBox/Devices/Network/slirp/udp.c

    r14616 r14951  
    345345      closesocket(so->s);
    346346      so->s=-1;
    347 #ifdef _WIN32
     347#ifdef RT_OS_WINDOWS
    348348      WSASetLastError(lasterrno);
    349349#else
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette