VirtualBox

Changeset 25205 in vbox


Ignore:
Timestamp:
Dec 5, 2009 10:40:15 AM (15 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
55691
Message:

NAT: port-forwarding attempts to active itself till count of (registered and acivated aren't equal)
vbox/#5666 and vbox/#5664.

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

Legend:

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

    r24064 r25205  
    15031503                slirp_arp_cache_add(pData, *(uint32_t *)ah->ar_tip, &eh->h_dest[0]);
    15041504                /* good opportunity to activate port-forwarding on address (self)asignment*/
    1505                 activate_port_forwarding(pData, eh);
     1505                if (pData->port_forwarding_activated != pData->port_forwarding_count)
     1506                    activate_port_forwarding(pData, eh);
    15061507            }
    15071508            break;
     
    15151516            slirp_arp_cache_add(pData, *(uint32_t *)ah->ar_sip, ah->ar_sha);
    15161517            /*after/save restore we need up port forwarding again*/
    1517             if (pData->port_forwarding_activated == 0)
     1518            if (pData->port_forwarding_activated != pData->port_forwarding_count)
    15181519                activate_port_forwarding(pData, eh);
    15191520            m_free(pData, m);
     
    16031604
    16041605
    1605     if (pData->port_forwarding_activated == 0)
     1606    if (pData->port_forwarding_activated != pData->port_forwarding_count)
    16061607        activate_port_forwarding(pData, mtod(m, struct ethhdr *));
    16071608
     
    17421743    struct port_forward_rule *rule = NULL;
    17431744
    1744     pData->port_forwarding_activated = 1;
    17451745    /* check mac here */
    17461746    LIST_FOREACH(rule, &pData->port_forward_rule_head, list)
     
    17731773        {
    17741774            /* the address wasn't granted */
    1775             pData->port_forwarding_activated = 0;
    17761775            return;
    17771776        }
    1778 #if defined(DEBUG_vvl) && !defined(VBOX_WITH_NAT_SERVICE)
    1779         Assert(rule->guest_addr.s_addr == guest_addr);
     1777#if !defined(VBOX_WITH_NAT_SERVICE)
     1778        if (rule->guest_addr.s_addr != guest_addr)
     1779        {
     1780            continue;
     1781        }
    17801782#endif
    17811783
     
    17861788            so = udp_listen(pData, rule->bind_ip.s_addr, htons(rule->host_port), guest_addr,
    17871789                            htons(rule->guest_port), 0);
     1790            pData->port_forwarding_activated++;
    17881791        }
    17891792        else
     
    17911794            so = solisten(pData, rule->bind_ip.s_addr, htons(rule->host_port), guest_addr,
    17921795                          htons(rule->guest_port), 0);
     1796            pData->port_forwarding_activated++;
    17931797        }
    17941798        if (so == NULL)
     
    18371841    remove_port_forwarding:
    18381842        LIST_REMOVE(rule, list);
     1843        pData->port_forwarding_count--;
    18391844        RTMemFree(rule);
    18401845    }
     
    18711876    /* @todo add mac address */
    18721877    LIST_INSERT_HEAD(&pData->port_forward_rule_head, rule, list);
     1878    pData->port_forwarding_count++;
    18731879    return 0;
    18741880}
     
    20612067    LIST_FOREACH(ac, &pData->arp_cache, list)
    20622068    {
    2063         if (memcmp(ether, ac->ether, ETH_ALEN))
     2069        if (memcmp(ether, ac->ether, ETH_ALEN) == 0)
    20642070        {
    20652071            *ip = ac->ip;
  • trunk/src/VBox/Devices/Network/slirp/slirp_state.h

    r23462 r25205  
    319319    struct port_forward_rule_list port_forward_rule_head;
    320320    int port_forwarding_activated;
     321    int port_forwarding_count;
    321322    struct arp_cache_head arp_cache;
    322323    /*libalis modules' handlers*/
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