VirtualBox

Changeset 15201 in vbox for trunk/src/VBox/Devices/Network


Ignore:
Timestamp:
Dec 9, 2008 8:35:15 PM (16 years ago)
Author:
vboxsync
Message:

slirp:icmp: ICM socket is out of udp socket queue now. Unix hangs should gone now.

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

Legend:

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

    r15194 r15201  
    8585        return 1;
    8686    }
    87     insque(pData, &pData->icmp_socket, &udb);
    8887#else /* RT_OS_WINDOWS */
    8988    pData->hmIcmpLibrary = LoadLibrary("Iphlpapi.dll");
     
    9291        pData->pfIcmpParseReplies = (long (WINAPI *)(void *, long))
    9392                                    GetProcAddress(pData->hmIcmpLibrary, "IcmpParseReplies");
    94         pData->pfIcmpCloseHandle = (BOOL (WINAPI *)(HANDLE)) 
     93        pData->pfIcmpCloseHandle = (BOOL (WINAPI *)(HANDLE))
    9594                                    GetProcAddress(pData->hmIcmpLibrary, "IcmpCloseHandle");
    9695    }
     
    106105        pData->pfIcmpParseReplies = (long (WINAPI *)(void *, long))
    107106                                    GetProcAddress(pData->hmIcmpLibrary, "IcmpParseReplies");
    108         pData->pfIcmpCloseHandle = (BOOL (WINAPI *)(HANDLE)) 
     107        pData->pfIcmpCloseHandle = (BOOL (WINAPI *)(HANDLE))
    109108                                    GetProcAddress(pData->hmIcmpLibrary, "IcmpCloseHandle");
    110109    }
     
    114113        FreeLibrary(pData->hmIcmpLibrary);
    115114        return 1;
    116     } 
     115    }
    117116    if (pData->pfIcmpCloseHandle == NULL)
    118117    {
     
    301300                }
    302301#else /* VBOX_WITH_SLIRP_ICMP */
    303 # ifdef RT_OS_WINDOWS     
     302# ifdef RT_OS_WINDOWS
    304303                IP_OPTION_INFORMATION ipopt;
    305304                int error;
     
    345344                ipopt.Ttl = ip->ip_ttl;
    346345                status = IcmpSendEcho2(pData->icmp_socket.sh, pData->phEvents[VBOX_ICMP_EVENT_INDEX],
    347                                        NULL, NULL, addr.sin_addr.s_addr, icp->icmp_data, 
     346                                       NULL, NULL, addr.sin_addr.s_addr, icp->icmp_data,
    348347                                       icmplen - offsetof(struct icmp, icmp_data) , &ipopt,
    349348                                       pData->pvIcmpBuffer, pData->szIcmpBuffer, 0);
    350349                if (status == 0 && (error = GetLastError()) != ERROR_IO_PENDING)
    351350                {
    352                     error = GetLastError(); 
     351                    error = GetLastError();
    353352                    LogRel(("NAT: Error (%d) occurred while sending ICMP (", error));
    354                     switch (error) 
     353                    switch (error)
    355354                    {
    356355                        case ERROR_INVALID_PARAMETER:
  • trunk/src/VBox/Devices/Network/slirp/slirp.c

    r15194 r15201  
    1212
    1313#if !defined(VBOX_WITH_SIMPLIFIED_SLIRP_SYNC) || !defined(RT_OS_WINDOWS)
     14
     15# ifdef VBOX_WITH_SLIRP_ICMP
     16#  define DO_ENGAGE_EVENT0(so, fdset, label) DO_ENGAGE_EVENT1((so), (fdset), label)
     17# else /* VBOX_WITH_SLIRP_ICMP */
     18#  define DO_ENGAGE_EVENT0(so, fdset, label) /* ignore */
     19#endif /* !VBOX_WITH_SLIRP_ICMP */
     20
    1421# define DO_ENGAGE_EVENT1(so, fdset, label)         \
    1522    do {                                            \
     
    2633    } while(0)
    2734#else /* defined(VBOX_WITH_SIMPLIFIED_SLIRP_SYNC) && defined(RT_OS_WINDOWS) */
     35# define DO_ENGAGE_EVENT0(so, fdset, label) /* ignore */
     36
    2837# define DO_ENGAGE_EVENT1(so, fdset0, label)                                                    \
    2938    do {                                                                                        \
     
    4958#define UDP_ENGAGE_EVENT(so, fdset)                     \
    5059    DO_ENGAGE_EVENT1((so), (fdset), UDP)
     60
     61#define ICMP_ENGAGE_EVENT(so, fdset)                    \
     62    DO_ENGAGE_EVENT0((so), (fdset), UDP)
    5163
    5264static const uint8_t special_ethaddr[6] = {
     
    583595            }
    584596        }
     597        ICMP_ENGAGE_EVENT(&pData->icmp_socket, readfds);
     598        ICMP_ENGAGE_EVENT(&pData->icmp_socket, writefds);
    585599    }
    586600
     
    867881            }
    868882        }
    869 #if defined(VBOX_WITH_SLIRP_ICMP) && defined(RT_OS_WINDOWS)
     883#if defined(VBOX_WITH_SLIRP_ICMP)
     884# if defined(RT_OS_WINDOWS)
    870885        sorecvfrom(pData, &pData->icmp_socket);
    871 #endif
     886# else
     887        if (so->s != -1 && FD_ISSET(so->s, readfds))
     888        {
     889            sorecvfrom(pData, &pData->icmp_socket);
     890        }
     891# endif
     892#endif
    872893    }
    873894
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