VirtualBox

Changeset 38971 in vbox


Ignore:
Timestamp:
Oct 10, 2011 8:28:30 AM (13 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
74342
Message:

NAT: configuration of limit of ICMP cache and moving icmp finilization and other ICMP's resources to icmp_finit routine.

Location:
trunk/src/VBox/Devices/Network
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Devices/Network/DrvNAT.cpp

    r38549 r38971  
    11581158                              "SlirpMTU\0AliasMode\0"
    11591159                              "SockRcv\0SockSnd\0TcpRcv\0TcpSnd\0"
     1160                              "ICMPCacheLimit\0"
    11601161                              "SoMaxConnection\0"))
    11611162        return PDMDRV_SET_ERROR(pDrvIns, VERR_PDM_DRVINS_UNKNOWN_CFG_VALUES,
     
    12111212    int i32MainAliasMode = 0;
    12121213    GET_S32(rc, pThis, pCfg, "AliasMode", i32MainAliasMode);
     1214    int iIcmpCacheLimit = 100;
     1215    GET_S32(rc, pThis, pCfg, "ICMPCacheLimit", iIcmpCacheLimit);
    12131216
    12141217    i32AliasMode |= (i32MainAliasMode & 0x1 ? 0x1 : 0);
     
    12511254     */
    12521255    rc = slirp_init(&pThis->pNATState, RT_H2N_U32(Network), Netmask,
    1253                     fPassDomain, !!fUseHostResolver, i32AliasMode, pThis);
     1256                    fPassDomain, !!fUseHostResolver, i32AliasMode,
     1257                    iIcmpCacheLimit, pThis);
    12541258    if (RT_SUCCESS(rc))
    12551259    {
  • trunk/src/VBox/Devices/Network/slirp/ip_icmp.c

    r38968 r38971  
    8989};
    9090
    91 static int icmp_cache_count(PNATState pData);
    9291static void icmp_cache_clean(PNATState pData, int iEntries);
    9392
    9493int
    95 icmp_init(PNATState pData)
     94icmp_init(PNATState pData, int iIcmpCacheLimit)
    9695{
    9796    pData->icmp_socket.so_type = IPPROTO_ICMP;
    9897    pData->icmp_socket.so_state = SS_ISFCONNECTED;
    99     pData->iIcmpCacheLimit = 100;
     98    if (iIcmpCacheLimit < 0)
     99    {
     100        LogRel(("NAT: iIcmpCacheLimit is invalid %d, will be alter to default value 100\n", iIcmpCacheLimit));
     101        iIcmpCacheLimit = 100;
     102    }
     103    pData->iIcmpCacheLimit = iIcmpCacheLimit;
    100104#ifndef RT_OS_WINDOWS
    101105# ifndef RT_OS_DARWIN
     
    162166    LIST_INIT(&pData->icmp_msg_head);
    163167    return 0;
     168}
     169
     170/**
     171 * Cleans ICMP cache.
     172 */
     173int
     174icmp_finit(PNATState pData)
     175{
     176    icmp_cache_clean(pData, -1);
     177#ifdef RT_OS_WINDOWS
     178    pData->pfIcmpCloseHandle(pData->icmp_socket.sh);
     179    FreeLibrary(pData->hmIcmpLibrary);
     180    RTMemFree(pData->pvIcmpBuffer);
     181#else
     182    closesocket(pData->icmp_socket.s);
     183#endif
    164184}
    165185
  • trunk/src/VBox/Devices/Network/slirp/ip_icmp.h

    r28800 r38971  
    199199LIST_HEAD(icmp_storage, icmp_msg);
    200200
    201 int icmp_init (PNATState );
     201int icmp_init (PNATState , int);
     202int icmp_finit (PNATState );
    202203struct icmp_msg * icmp_find_original_mbuf (PNATState , struct ip *);
    203204
  • trunk/src/VBox/Devices/Network/slirp/libslirp.h

    r38111 r38971  
    4747#endif
    4848
    49 int slirp_init(PNATState *, uint32_t, uint32_t, bool, bool, int, void *);
     49int slirp_init(PNATState *, uint32_t, uint32_t, bool, bool, int, int, void *);
    5050void slirp_register_statistics(PNATState pData, PPDMDRVINS pDrvIns);
    5151void slirp_deregister_statistics(PNATState pData, PPDMDRVINS pDrvIns);
  • trunk/src/VBox/Devices/Network/slirp/slirp.c

    r38170 r38971  
    584584
    585585int slirp_init(PNATState *ppData, uint32_t u32NetAddr, uint32_t u32Netmask,
    586                bool fPassDomain, bool fUseHostResolver, int i32AliasMode, void *pvUser)
     586               bool fPassDomain, bool fUseHostResolver, int i32AliasMode,
     587               int iIcmpCacheLimit, void *pvUser)
    587588{
    588589    int fNATfailed = 0;
     
    635636    if_init(pData);
    636637    ip_init(pData);
    637     icmp_init(pData);
     638    icmp_init(pData, iIcmpCacheLimit);
    638639
    639640    /* Initialise mbufs *after* setting the MTU */
     
    772773    if (pData == NULL)
    773774        return;
    774 #ifdef RT_OS_WINDOWS
    775     pData->pfIcmpCloseHandle(pData->icmp_socket.sh);
    776     FreeLibrary(pData->hmIcmpLibrary);
    777     RTMemFree(pData->pvIcmpBuffer);
    778 #else
    779     closesocket(pData->icmp_socket.s);
    780 #endif
     775    icmp_finit(pData);
    781776
    782777    slirp_link_down(pData);
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