VirtualBox

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


Ignore:
Timestamp:
Dec 9, 2009 10:34:36 AM (15 years ago)
Author:
vboxsync
Message:

NAT: coding style

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

Legend:

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

    r23497 r25265  
    8484    if (bc == NULL)
    8585        return NULL;
    86     paddr->s_addr = htonl(ntohl(special_addr.s_addr) | (bc->number + START_ADDR));
     86    paddr->s_addr = htonl(ntohl(pData->special_addr.s_addr) | (bc->number + START_ADDR));
    8787    bc->addr.s_addr = paddr->s_addr;
    8888    return bc;
     
    163163            bc = &bootp_clients[i];
    164164            bc->allocated = 1;
    165             paddr->s_addr = htonl(ntohl(special_addr.s_addr) | (i + START_ADDR));
     165            paddr->s_addr = htonl(ntohl(pData->special_addr.s_addr) | (i + START_ADDR));
    166166            return bc;
    167167        }
     
    241241    }
    242242#ifndef VBOX_WITH_NAT_SERVICE
    243     saddr.s_addr = htonl(ntohl(special_addr.s_addr) | CTL_ALIAS);
     243    saddr.s_addr = htonl(ntohl(pData->special_addr.s_addr) | CTL_ALIAS);
    244244#else
    245     saddr.s_addr = special_addr.s_addr;
     245    saddr.s_addr = pData->special_addr.s_addr;
    246246#endif
    247247    Log(("NAT: DHCP: s_addr:%R[IP4]\n", &saddr));
     
    271271    if (pData->use_dns_proxy || pData->use_host_resolver)
    272272    {
    273         uint32_t addr = htonl(ntohl(special_addr.s_addr) | CTL_DNS);
     273        uint32_t addr = htonl(ntohl(pData->special_addr.s_addr) | CTL_DNS);
    274274        FILL_BOOTP_EXT(q, RFC1533_DNS, 4, &addr);
    275275        goto skip_dns_servers;
    276276    }
    277277
    278     if (!TAILQ_EMPTY(&pData->dns_list_head))
    279     {
    280         de = TAILQ_LAST(&pData->dns_list_head, dns_list_head);
     278    if (!TAILQ_EMPTY(&pData->pDnsList))
     279    {
     280        de = TAILQ_LAST(&pData->pDnsList, dns_list_head);
    281281        q_dns_header = q;
    282282        FILL_BOOTP_EXT(q, RFC1533_DNS, 4, &de->de_addr.s_addr);
    283283    }
    284284
    285     TAILQ_FOREACH_REVERSE(de, &pData->dns_list_head, dns_list_head, de_list)
    286     {
    287         if (TAILQ_LAST(&pData->dns_list_head, dns_list_head) == de)
     285    TAILQ_FOREACH_REVERSE(de, &pData->pDnsList, dns_list_head, de_list)
     286    {
     287        if (TAILQ_LAST(&pData->pDnsList, dns_list_head) == de)
    288288            continue; /* first value with head we've ingected before */
    289289        FILL_BOOTP_APP(q_dns_header, q, RFC1533_DNS, 4, &de->de_addr.s_addr);
     
    291291
    292292skip_dns_servers:
    293     if (LIST_EMPTY(&pData->dns_domain_list_head))
     293    if (LIST_EMPTY(&pData->pDomainList))
    294294    {
    295295            /* Microsoft dhcp client doen't like domain-less dhcp and trimmed packets*/
     
    299299    if (pData->fPassDomain && !pData->use_host_resolver)
    300300    {
    301         LIST_FOREACH(dd, &pData->dns_domain_list_head, dd_list)
     301        LIST_FOREACH(dd, &pData->pDomainList, dd_list)
    302302        {
    303303
     
    427427            else
    428428            {
    429                if ((bp->bp_ciaddr.s_addr & htonl(pData->netmask)) != special_addr.s_addr)
     429               if ((bp->bp_ciaddr.s_addr & htonl(pData->netmask)) != pData->special_addr.s_addr)
    430430               {
    431431                    off = dhcp_send_nack(pData, bp, bc, m);
     
    449449            Assert(req_ip != NULL);
    450450            ui32 = *(uint32_t *)(req_ip + 2);
    451             if ((ui32 & htonl(pData->netmask)) != special_addr.s_addr)
     451            if ((ui32 & htonl(pData->netmask)) != pData->special_addr.s_addr)
    452452            {
    453453                LogRel(("NAT: address %R[IP4] has been req.\n", &ui32));
     
    597597
    598598    pmsg_type = 0;
    599 
    600599    p = buf;
    601600    p_end = buf + size;
    602601    if (size < 5)
    603602        return;
     603
    604604    if (memcmp(p, rfc1533_cookie, 4) != 0)
    605605        return;
     606
    606607    p = dhcp_find_option(bp->bp_vend, RFC2132_MSG_TYPE);
    607608    Assert(p);
    608609    if (p == NULL)
    609610        return;
     611
    610612#ifndef VBOX_WITH_SLIRP_BSD_MBUF
    611613    if ((m = m_get(pData)) == NULL)
     
    617619        return;
    618620    }
    619     switch(*(p+2))
     621    switch (*(p+2))
    620622    {
    621623        case DHCPDISCOVER:
     
    626628            if (rc > 0)
    627629                goto reply;
    628         break;
     630            break;
     631
    629632        case DHCPREQUEST:
    630633            rc = dhcp_decode_request(pData, bp, buf, size, m);
    631634            if (rc > 0)
    632635                goto reply;
    633         break;
     636            break;
     637
    634638        case DHCPRELEASE:
    635639            rc = dhcp_decode_release(pData, bp, buf, size);
    636640            /* no reply required */
    637         break;
     641            break;
     642
    638643        case DHCPDECLINE:
    639644            p = dhcp_find_option(&bp->bp_vend[0], RFC2132_REQ_ADDR);
    640645            req_ip.s_addr = *(uint32_t *)(p + 2);
    641646            rc = bootp_cache_lookup_ether_by_ip(pData, req_ip.s_addr, NULL);
    642             if (rc != 0)
     647            if (RT_FAILURE(rc))
    643648            {
    644649                /* Not registered */
     
    651656            }
    652657            /* no response required */
    653         break;
     658            break;
     659
    654660        default:
    655661            AssertMsgFailed(("unsupported DHCP message type"));
     
    659665    m_free(pData, m);
    660666    return;
     667
    661668reply:
    662669    bootp_reply(pData, m, rc, bp->bp_flags);
     
    678685
    679686#ifndef VBOX_WITH_NAT_SERVICE
    680     saddr.sin_addr.s_addr = htonl(ntohl(special_addr.s_addr) | CTL_ALIAS);
     687    saddr.sin_addr.s_addr = htonl(ntohl(pData->special_addr.s_addr) | CTL_ALIAS);
    681688#else
    682     saddr.sin_addr.s_addr = special_addr.s_addr;
     689    saddr.sin_addr.s_addr = pData->special_addr.s_addr;
    683690#endif
    684691
     
    711718
    712719    if (bp->bp_op == BOOTP_REQUEST)
    713     {
    714720        dhcp_decode(pData, bp, bp->bp_vend, DHCP_OPT_LEN);
    715     }
    716721}
    717722
    718723int bootp_cache_lookup_ip_by_ether(PNATState pData,const uint8_t* ether, uint32_t *pip)
    719724{
    720     int rc = 1;
    721     uint32_t ip = INADDR_ANY;
    722725    int i;
     726
    723727    if (ether == NULL || pip == NULL)
    724         return rc;
     728        return VERR_INVALID_PARAMETER;
     729
    725730    for (i = 0; i < NB_ADDR; i++)
    726731    {
     
    728733            && memcmp(bootp_clients[i].macaddr, ether, ETH_ALEN) == 0)
    729734        {
    730             ip = bootp_clients[i].addr.s_addr;
    731             rc = 0;
    732             break;
    733         }
    734     }
    735     *pip = ip;
    736     return rc;
     735            *pip = bootp_clients[i].addr.s_addr;
     736            return VINF_SUCCESS;
     737        }
     738    }
     739
     740    *pip = INADDR_ANY;
     741    return VERR_NOT_FOUND;
    737742}
    738743
    739744int bootp_cache_lookup_ether_by_ip(PNATState pData, uint32_t ip, uint8_t *ether)
    740745{
    741     int rc = 1;
    742746    int i;
    743747    for (i = 0; i < NB_ADDR; i++)
     
    746750            && ip == bootp_clients[i].addr.s_addr)
    747751        {
    748             if(ether != NULL) memcpy(ether, bootp_clients[i].macaddr, ETH_ALEN);
    749             rc = 0;
    750             break;
    751         }
    752     }
    753     return rc;
     752            if (ether != NULL)
     753                memcpy(ether, bootp_clients[i].macaddr, ETH_ALEN);
     754            return VINF_SUCCESS;
     755        }
     756    }
     757
     758    return VERR_NOT_FOUND;
    754759}
    755760
     
    760765int bootp_dhcp_init(PNATState pData)
    761766{
    762     int rc = 1;
    763767    pData->pbootp_clients = RTMemAllocZ(sizeof(BOOTPClient) * NB_ADDR);
    764     if (pData->pbootp_clients != NULL)
    765         rc = 0;
    766     return rc;
     768    if (!pData->pbootp_clients)
     769        return VERR_NO_MEMORY;
     770
     771    return VINF_SUCCESS;
    767772}
    768773
     
    771776    if (pData->pbootp_clients != NULL)
    772777        RTMemFree(pData->pbootp_clients);
    773     return 0;
    774 }
     778
     779    return VINF_SUCCESS;
     780}
  • trunk/src/VBox/Devices/Network/slirp/dnsproxy/dnsproxy.c

    r23157 r25265  
    154154        m->m_len += req->nbyte;
    155155        ip->ip_src.s_addr = so->so_laddr.s_addr;
    156         ip->ip_dst.s_addr = htonl(ntohl(special_addr.s_addr) | CTL_DNS);
     156        ip->ip_dst.s_addr = htonl(ntohl(pData->special_addr.s_addr) | CTL_DNS);
    157157        udp->uh_dport = ntohs(53);
    158158        udp->uh_sport = so->so_lport;
     
    273273        memcpy(&req->client, &fromaddr, sizeof(struct sockaddr_in));
    274274        memcpy(&req->clientid, &buf[0], 2);
    275         req->dns_server = TAILQ_LAST(&pData->dns_list_head, dns_list_head);
     275        req->dns_server = TAILQ_LAST(&pData->pDnsList, dns_list_head);
    276276        if (req->dns_server == NULL)
    277277        {
  • trunk/src/VBox/Devices/Network/slirp/ip_icmp.c

    r23462 r25265  
    372372#endif
    373373                addr.sin_family = AF_INET;
    374                 if ((ip->ip_dst.s_addr & htonl(pData->netmask)) == special_addr.s_addr)
     374                if ((ip->ip_dst.s_addr & htonl(pData->netmask)) == pData->special_addr.s_addr)
    375375                {
    376376                    /* It's an alias */
  • trunk/src/VBox/Devices/Network/slirp/ip_output.c

    r23462 r25265  
    5353static int rt_lookup_in_cache(PNATState pData, uint32_t dst, uint8_t *ether)
    5454{
    55     int rc = 1;
     55    int rc;
    5656    if (dst == INADDR_BROADCAST)
    5757    {
    5858        memcpy(ether, broadcast_ethaddr, ETH_ALEN);
    59         return 0;
    60     }
     59        return VINF_SUCCESS;
     60    }
     61
    6162    rc = slirp_arp_lookup_ether_by_ip(pData, dst, ether);
    62     if (rc == 0)
     63    if (RT_SUCCESS(rc))
    6364        return rc;
     65
    6466    rc = bootp_cache_lookup_ether_by_ip(pData, dst, ether);
    65     if (rc == 0)
     67    if (RT_SUCCESS(rc))
    6668        return rc;
    6769    /*
     
    6971     */
    7072    slirp_arp_who_has(pData, dst);
    71     return rc;
     73    return VERR_NOT_FOUND;
    7274}
    7375
     
    138140    {
    139141        error = ENOBUFS;
    140         goto bad;
     142        goto exit_drop_package;
    141143    }
    142144#endif
     
    149151    {
    150152       rc = rt_lookup_in_cache(pData, ip->ip_dst.s_addr, eth_dst);
    151        if (rc != 0)
    152            goto bad;
     153       if (RT_FAILURE(rc))
     154           goto exit_drop_package;
    153155    }
    154156    else
     
    163165     */
    164166    rc = rt_lookup_in_cache(pData, ip->ip_dst.s_addr, eth_dst);
    165     if (rc != 0)
    166         goto bad;
     167    if (RT_FAILURE(rc))
     168        goto exit_drop_package;
     169
    167170    eh = (struct ethhdr *)(m->m_data - ETH_HLEN);
    168171#endif
     
    187190            STAM_PROFILE_START(&pData->StatALIAS_output, a);
    188191            if (t = m_tag_find(m, PACKET_TAG_ALIAS, NULL) != 0)
    189             {
    190                 rc = LibAliasOut((struct libalias *)&t[1], mtod(m, char *), m_length(m, NULL));
    191             }
     192                rc = LibAliasOut((struct libalias *)&t[1], mtod(m, char *),
     193                                 m_length(m, NULL));
    192194            else
    193             {
    194195                rc = LibAliasOut(pData->proxy_alias, mtod(m, char *),
    195196                                 m_length(m, NULL));
    196             }
     197
    197198            if (rc == PKT_ALIAS_IGNORED)
    198199            {
    199200                Log(("NAT: packet was droppped\n"));
    200                 goto bad;
     201                goto exit_drop_package;
    201202            }
    202203#endif
     
    222223        error = -1;
    223224        ipstat.ips_cantfrag++;
    224         goto bad;
     225        goto exit_drop_package;
    225226    }
    226227
     
    229230    {
    230231        error = -1;
    231         goto bad;
     232        goto exit_drop_package;
    232233    }
    233234
     
    238239        uint8_t *buf; /* intermediate buffer we'll use for copy from orriginal packet*/
    239240#endif
    240             {
     241        {
    241242#ifdef VBOX_WITH_SLIRP_BSD_MBUF
    242                 struct m_tag *t;
    243                 char *tmpbuf = NULL;
    244                 int tmplen = 0;
    245 #endif
    246                 int rc;
    247                 HTONS(ip->ip_len);
    248                 HTONS(ip->ip_off);
    249                 ip->ip_sum = 0;
    250                 ip->ip_sum = cksum(m, hlen);
    251 #ifndef VBOX_WITH_SLIRP_BSD_MBUF
    252                 rc = LibAliasOut((m->m_la ? m->m_la : pData->proxy_alias),
    253                     mtod(m, char *), m->m_len);
    254 #else
    255                 if (m->m_next != NULL)
     243            struct m_tag *t;
     244            char *tmpbuf = NULL;
     245            int tmplen = 0;
     246#endif
     247            int rc;
     248            HTONS(ip->ip_len);
     249            HTONS(ip->ip_off);
     250            ip->ip_sum = 0;
     251            ip->ip_sum = cksum(m, hlen);
     252#ifndef VBOX_WITH_SLIRP_BSD_MBUF
     253            rc = LibAliasOut((m->m_la ? m->m_la : pData->proxy_alias),
     254                              mtod(m, char *), m->m_len);
     255#else
     256            if (m->m_next != NULL)
     257            {
     258                /*we've receives packet in fragments*/
     259                tmplen = m_length(m, NULL);
     260                tmpbuf = RTMemAlloc(tmplen);
     261                Assert(tmpbuf);
     262                m_copydata(m, 0, tmplen, tmpbuf);
     263            }
     264            else
     265            {
     266                tmpbuf = mtod(m, char *);
     267                tmplen = m_length(m, NULL);
     268
     269            }
     270
     271            if (t = m_tag_find(m, PACKET_TAG_ALIAS, NULL) != 0)
     272                rc = LibAliasOut((struct libalias *)&t[1], tmpbuf, tmplen);
     273            else
     274                rc = LibAliasOut(pData->proxy_alias, tmpbuf, tmplen);
     275
     276            if (m->m_next != NULL)
     277            {
     278                if (rc != PKT_ALIAS_IGNORED)
    256279                {
    257                     /*we've receives packet in fragments*/
    258                     tmplen = m_length(m, NULL);
    259                     tmpbuf = RTMemAlloc(tmplen);
    260                     Assert(tmpbuf);
    261                     m_copydata(m, 0, tmplen, tmpbuf);
     280                    struct ip *tmpip = (struct ip *)tmpbuf;
     281                    m_copyback(pData, m, 0, ntohs(tmpip->ip_len) + (tmpip->ip_hl << 2), tmpbuf);
    262282                }
    263                 else
    264                 {
    265                     tmpbuf = mtod(m, char *);
    266                     tmplen = m_length(m, NULL);
    267 
    268                 }
    269                 if (t = m_tag_find(m, PACKET_TAG_ALIAS, NULL) != 0)
    270                 {
    271                     rc = LibAliasOut((struct libalias *)&t[1], tmpbuf, tmplen);
    272                 }
    273                 else
    274                 {
    275                     rc = LibAliasOut(pData->proxy_alias, tmpbuf, tmplen);
    276                 }
    277                 if (m->m_next != NULL)
    278                 {
    279                     if (rc != PKT_ALIAS_IGNORED)
    280                     {
    281                         struct ip *tmpip = (struct ip *)tmpbuf;
    282                         m_copyback(pData, m, 0, ntohs(tmpip->ip_len) + (tmpip->ip_hl << 2), tmpbuf);
    283                     }
    284                     if (tmpbuf != NULL)
    285                         RTMemFree(tmpbuf);
    286                 }
    287                 if (rc == PKT_ALIAS_IGNORED)
    288                 {
    289                     Log(("NAT: packet was droppped\n"));
    290                     goto bad;
    291                 }
    292 #endif
    293                 NTOHS(ip->ip_len);
    294                 NTOHS(ip->ip_off);
    295                 Log2(("NAT: LibAlias return %d\n", rc));
     283                if (tmpbuf != NULL)
     284                    RTMemFree(tmpbuf);
     285            }
     286            if (rc == PKT_ALIAS_IGNORED)
     287            {
     288                Log(("NAT: packet was droppped\n"));
     289                goto exit_drop_package;
     290            }
     291#endif
     292            NTOHS(ip->ip_len);
     293            NTOHS(ip->ip_off);
     294            Log2(("NAT: LibAlias return %d\n", rc));
    296295        }
    297296
     
    409408done:
    410409    STAM_PROFILE_STOP(&pData->StatIP_output, a);
    411     return (error);
    412 
    413 bad:
     410    return error;
     411
     412exit_drop_package:
    414413    m_freem(pData, m0);
    415414    STAM_PROFILE_STOP(&pData->StatIP_output, a);
    416     goto done;
     415    return error;
    417416}
  • trunk/src/VBox/Devices/Network/slirp/libalias/alias_dns.c

    r24232 r25265  
    5858    if (   (ntohs(*ah->dport) == DNS_CONTROL_PORT_NUMBER
    5959        || ntohs(*ah->sport) == DNS_CONTROL_PORT_NUMBER)
    60         && (ah->oaddr->s_addr == htonl(ntohl(la->special_addr.s_addr)|CTL_DNS)))
     60        && (ah->oaddr->s_addr == htonl(ntohl(la->pData->special_addr.s_addr)|CTL_DNS)))
    6161        return (0);
    6262    return (-1);
  • trunk/src/VBox/Devices/Network/slirp/slirp.c

    r25205 r25265  
    2222#  define DO_ENGAGE_EVENT1(so, fdset, label)                        \
    2323    do {                                                            \
    24         if(    so->so_poll_index != -1                              \
     24        if (    so->so_poll_index != -1                             \
    2525            && so->s == polls[so->so_poll_index].fd) {              \
    2626            polls[so->so_poll_index].events |= N_(fdset ## _poll);  \
     
    3434        polls[poll_index].revents = 0;                              \
    3535        poll_index++;                                               \
    36     } while(0)
    37 
    38 
    39 #  define DO_ENGAGE_EVENT2(so, fdset1, fdset2, label)           \
    40     do {                                                        \
    41         if(    so->so_poll_index != -1                          \
    42             && so->s == polls[so->so_poll_index].fd) {          \
    43             polls[so->so_poll_index].events |=                  \
    44                 N_(fdset1 ## _poll) | N_(fdset1 ## _poll);      \
    45             break; /* out of this loop */                       \
    46         }                                                       \
    47         AssertRelease(poll_index < (nfds));                     \
    48         polls[poll_index].fd = (so)->s;                         \
    49         (so)->so_poll_index = poll_index;                       \
    50         polls[poll_index].events =                              \
    51             N_(fdset1 ## _poll) | N_(fdset1 ## _poll);          \
    52         poll_index++;                                           \
    53     } while(0)
     36    } while (0)
     37
     38
     39#  define DO_ENGAGE_EVENT2(so, fdset1, fdset2, label)               \
     40    do {                                                            \
     41        if (    so->so_poll_index != -1                             \
     42            && so->s == polls[so->so_poll_index].fd) {              \
     43            polls[so->so_poll_index].events |=                      \
     44                N_(fdset1 ## _poll) | N_(fdset1 ## _poll);          \
     45            break; /* out of this loop */                           \
     46        }                                                           \
     47        AssertRelease(poll_index < (nfds));                         \
     48        polls[poll_index].fd = (so)->s;                             \
     49        (so)->so_poll_index = poll_index;                           \
     50        polls[poll_index].events =                                  \
     51            N_(fdset1 ## _poll) | N_(fdset1 ## _poll);              \
     52        poll_index++;                                               \
     53    } while (0)
    5454
    5555#  define DO_POLL_EVENTS(rc, error, so, events, label) do {} while (0)
    5656
    57 #  define DO_CHECK_FD_SET(so, events, fdset) (  ((so)->so_poll_index != -1)                                     \
    58                                                 && ((so)->so_poll_index <= ndfs)                                \
    59                                                 && ((so)->s == polls[so->so_poll_index].fd)                     \
    60                                                 && (polls[(so)->so_poll_index].revents & N_(fdset ## _poll)))
    61 #  define DO_UNIX_CHECK_FD_SET(so, events, fdset ) DO_CHECK_FD_SET((so), (events), fdset) /*specific for Unix API */
    62 #  define DO_WIN_CHECK_FD_SET(so, events, fdset ) 0 /* specific for Windows Winsock API */
     57#  define DO_CHECK_FD_SET(so, events, fdset)                        \
     58      (   ((so)->so_poll_index != -1)                               \
     59       && ((so)->so_poll_index <= ndfs)                             \
     60       && ((so)->s == polls[so->so_poll_index].fd)                  \
     61       && (polls[(so)->so_poll_index].revents & N_(fdset ## _poll)))
     62
     63   /* specific for Unix API */
     64#  define DO_UNIX_CHECK_FD_SET(so, events, fdset ) DO_CHECK_FD_SET((so), (events), fdset)
     65   /* specific for Windows Winsock API */
     66#  define DO_WIN_CHECK_FD_SET(so, events, fdset ) 0
    6367
    6468# ifndef RT_OS_WINDOWS
     
    8488# else /* !RT_OS_WINDOWS */
    8589#  define DO_WIN_CHECK_FD_SET(so, events, fdset ) DO_CHECK_FD_SET((so), (events), fdset)
    86 #  define ICMP_ENGAGE_EVENT(so, fdset) do {} while(0)
     90#  define ICMP_ENGAGE_EVENT(so, fdset) do {} while (0)
    8791#endif /* RT_OS_WINDOWS */
    8892
     
    9397 * So no call to WSAEventSelect necessary.
    9498 */
    95 # define ICMP_ENGAGE_EVENT(so, fdset)                do {} while(0)
     99# define ICMP_ENGAGE_EVENT(so, fdset)                do {} while (0)
    96100
    97101# define DO_ENGAGE_EVENT1(so, fdset1, label)                                                    \
     
    105109                        error, (so), (so)->s, VBOX_SOCKET_EVENT));                              \
    106110        }                                                                                       \
    107     } while(0);                                                                                 \
     111    } while (0);                                                                                 \
    108112    CONTINUE(label)
    109113
     
    191195
    192196static void activate_port_forwarding(PNATState, struct ethhdr *);
    193 static uint32_t find_guest_ip(PNATState, const uint8_t *);
    194197
    195198static const uint8_t special_ethaddr[6] =
     
    213216                               const char **ppszDomain)
    214217{
    215     /* Get amount of memory required for operation */
    216218    ULONG flags = GAA_FLAG_INCLUDE_PREFIX; /*GAA_FLAG_INCLUDE_ALL_INTERFACES;*/ /* all interfaces registered in NDIS */
    217     PIP_ADAPTER_ADDRESSES addresses = NULL;
    218     PIP_ADAPTER_ADDRESSES addr = NULL;
    219     PIP_ADAPTER_DNS_SERVER_ADDRESS dns = NULL;
    220     ULONG size = 0;
     219    PIP_ADAPTER_ADDRESSES pAdapterAddr = NULL;
     220    PIP_ADAPTER_ADDRESSES pAddr = NULL;
     221    PIP_ADAPTER_DNS_SERVER_ADDRESS pDnsAddr = NULL;
     222    ULONG size;
    221223    int wlen = 0;
    222     char *suffix;
    223     struct dns_entry *da = NULL;
    224     struct dns_domain_entry *dd = NULL;
     224    char *pszSuffix;
     225    struct dns_domain_entry *pDomain = NULL;
    225226    ULONG ret = ERROR_SUCCESS;
    226227
    227228    /* @todo add SKIPing flags to get only required information */
    228229
    229     ret = pData->pfGetAdaptersAddresses(AF_INET, 0, NULL /* reserved */, addresses, &size);
     230    /* determine size of buffer */
     231    size = 0;
     232    ret = pData->pfGetAdaptersAddresses(AF_INET, 0, NULL /* reserved */, pAdapterAddr, &size);
    230233    if (ret != ERROR_BUFFER_OVERFLOW)
    231234    {
     
    233236        return -1;
    234237    }
    235 
    236238    if (size == 0)
    237239    {
     
    240242    }
    241243
    242     addresses = RTMemAllocZ(size);
    243     if (addresses == NULL)
     244    pAdapterAddr = RTMemAllocZ(size);
     245    if (!pAdapterAddr)
    244246    {
    245247        LogRel(("NAT: No memory available \n"));
    246248        return -1;
    247249    }
    248 
    249     ret = pData->pfGetAdaptersAddresses(AF_INET, 0, NULL /* reserved */, addresses, &size);
     250    ret = pData->pfGetAdaptersAddresses(AF_INET, 0, NULL /* reserved */, pAdapterAddr, &size);
    250251    if (ret != ERROR_SUCCESS)
    251252    {
    252253        LogRel(("NAT: error %lu occurred on fetching adapters info\n", ret));
    253         RTMemFree(addresses);
     254        RTMemFree(pAdapterAddr);
    254255        return -1;
    255256    }
    256     addr = addresses;
    257     while(addr != NULL)
     257
     258    for (pAddr = pAdapterAddr; pAddr != NULL; pAddr = pAddr->Next)
    258259    {
    259260        int found;
    260         if (addr->OperStatus != IfOperStatusUp)
    261             goto next;
    262         dns = addr->FirstDnsServerAddress;
    263         while (dns != NULL)
    264         {
    265             struct sockaddr *saddr = dns->Address.lpSockaddr;
    266             if (saddr->sa_family != AF_INET)
    267                 goto next_dns;
     261        if (pAddr->OperStatus != IfOperStatusUp)
     262            continue;
     263
     264        for (pDnsAddr = pAddr->FirstDnsServerAddress; pDnsAddr != NULL; pDnsAddr = pDnsAddr->Next)
     265        {
     266            struct sockaddr *SockAddr = pDnsAddr->Address.lpSockaddr;
     267            struct in_addr  *InAddr;
     268            struct dns_entry *pDns;
     269
     270            if (SockAddr->sa_family != AF_INET)
     271                continue;
     272
     273            InAddr = ((struct sockaddr_in *)SockAddr)->sin_addr;
     274
    268275            /* add dns server to list */
    269             da = RTMemAllocZ(sizeof(struct dns_entry));
    270             if (da == NULL)
     276            pDns = RTMemAllocZ(sizeof(struct dns_entry));
     277            if (!pDns)
    271278            {
    272279                LogRel(("NAT: Can't allocate buffer for DNS entry\n"));
    273                 RTMemFree(addresses);
     280                RTMemFree(pAdapterAddr);
    274281                return VERR_NO_MEMORY;
    275282            }
    276             LogRel(("NAT: adding %R[IP4] to DNS server list\n",
    277                     &((struct sockaddr_in *)saddr)->sin_addr));
    278             if ((((  struct sockaddr_in *)saddr)->sin_addr.s_addr & htonl(IN_CLASSA_NET)) ==
    279                      ntohl(INADDR_LOOPBACK & IN_CLASSA_NET)) {
    280                 da->de_addr.s_addr = htonl(ntohl(special_addr.s_addr) | CTL_ALIAS);
    281             }
     283
     284            LogRel(("NAT: adding %R[IP4] to DNS server list\n", &InAddr));
     285            if (InAddr.s_addr & htonl(IN_CLASSA_NET) == ntohl(INADDR_LOOPBACK & IN_CLASSA_NET))
     286                pDns->de_addr.s_addr = htonl(ntohl(pData->special_addr.s_addr) | CTL_ALIAS);
    282287            else
    283             {
    284                 da->de_addr.s_addr = ((struct sockaddr_in *)saddr)->sin_addr.s_addr;
    285             }
    286             TAILQ_INSERT_HEAD(&pData->dns_list_head, da, de_list);
    287 
    288             if (addr->DnsSuffix == NULL)
    289                 goto next_dns;
    290 
    291             /*uniq*/
    292             RTUtf16ToUtf8(addr->DnsSuffix, &suffix);
    293 
    294             if (!suffix || strlen(suffix) == 0) {
    295                 RTStrFree(suffix);
    296                 goto next_dns;
     288                pDns->de_addr.s_addr = InAddr.s_addr;
     289
     290            TAILQ_INSERT_HEAD(&pData->pDnsList, pDns, de_list);
     291
     292            if (pAdddr->DnsSuffix == NULL)
     293                continue;
     294
     295            /* uniq */
     296            RTUtf16ToUtf8(pAdddr->DnsSuffix, &pszSuffix);
     297            if (!pszSuffix || strlen(pszSuffix) == 0)
     298            {
     299                RTStrFree(pszSuffix);
     300                continue;
    297301            }
    298302
    299303            found = 0;
    300             LIST_FOREACH(dd, &pData->dns_domain_list_head, dd_list)
    301             {
    302                 if (   dd->dd_pszDomain != NULL
    303                     && strcmp(dd->dd_pszDomain, suffix) == 0)
     304            LIST_FOREACH(pDomain, &pData->pDomainList, dd_list)
     305            {
     306                if (   pDomain->dd_pszDomain != NULL
     307                    && strcmp(pDomain->dd_pszDomain, pszSuffix) == 0)
    304308                {
    305309                    found = 1;
    306                     RTStrFree(suffix);
     310                    RTStrFree(pszSuffix);
    307311                    break;
    308312                }
    309313            }
    310             if (found == 0)
    311             {
    312                 dd = RTMemAllocZ(sizeof(struct dns_domain_entry));
    313                 if (dd == NULL)
     314            if (!found)
     315            {
     316                pDomain = RTMemAllocZ(sizeof(struct dns_domain_entry));
     317                if (!pDomain)
    314318                {
    315319                    LogRel(("NAT: not enough memory\n"));
    316                     RTStrFree(suffix);
    317                     RTMemFree(addresses);
     320                    RTStrFree(pszSuffix);
     321                    RTMemFree(pAdapterAddr);
    318322                    return VERR_NO_MEMORY;
    319323                }
    320                 dd->dd_pszDomain = suffix;
    321                 LogRel(("NAT: adding domain name %s to search list\n", dd->dd_pszDomain));
    322                 LIST_INSERT_HEAD(&pData->dns_domain_list_head, dd, dd_list);
    323             }
    324         next_dns:
    325             dns = dns->Next;
    326         }
    327     next:
    328         addr = addr->Next;
    329     }
    330     RTMemFree(addresses);
     324                pDomain->dd_pszDomain = pszSuffix;
     325                LogRel(("NAT: adding domain name %s to search list\n", pDomain->dd_pszDomain));
     326                LIST_INSERT_HEAD(&pData->pDomainList, pDomain, dd_list);
     327            }
     328        }
     329    }
     330    RTMemFree(pAdapterAddr);
    331331    return 0;
    332332}
     
    341341    char *pu8Buf = (char *)pvBuf;
    342342    *pcbRead = 0;
    343     while(   RT_SUCCESS(rc = RTFileRead(File, &bTest, 1, &cbRead))
    344           && (pu8Buf - (char *)pvBuf) < cbBufSize)
     343
     344    while (   RT_SUCCESS(rc = RTFileRead(File, &bTest, 1, &cbRead))
     345           && (pu8Buf - (char *)pvBuf) < cbBufSize)
    345346    {
    346347        if (cbRead == 0)
    347348            return VERR_EOF;
     349
    348350        if (bTest == '\r' || bTest == '\n')
    349351        {
     
    357359    return rc;
    358360}
     361
    359362static int get_dns_addr_domain(PNATState pData, bool fVerbose,
    360363                               struct in_addr *pdns_addr,
     
    410413    if (ppszDomain)
    411414        *ppszDomain = NULL;
    412     Log(("nat: DNS Servers:\n"));
     415
     416    Log(("NAT: DNS Servers:\n"));
    413417    while (    RT_SUCCESS(rc = RTFileGets(f, buff, 512, &bytes))
    414418            && rc != VERR_EOF)
    415419    {
    416         struct dns_entry *da = NULL;
     420        struct dns_entry *pDns = NULL;
    417421        if (sscanf(buff, "nameserver%*[ \t]%256s", buff2) == 1)
    418422        {
    419423            if (!inet_aton(buff2, &tmp_addr))
    420424                continue;
    421             /*localhost mask */
    422             da = RTMemAllocZ(sizeof (struct dns_entry));
    423             if (da == NULL)
     425
     426            /* localhost mask */
     427            pDns = RTMemAllocZ(sizeof (struct dns_entry));
     428            if (!pDns)
    424429            {
    425430                LogRel(("can't alloc memory for DNS entry\n"));
    426431                return -1;
    427432            }
    428             /*check */
    429             da->de_addr.s_addr = tmp_addr.s_addr;
    430             if ((da->de_addr.s_addr & htonl(IN_CLASSA_NET)) == ntohl(INADDR_LOOPBACK & IN_CLASSA_NET)) {
    431                 da->de_addr.s_addr = htonl(ntohl(special_addr.s_addr) | CTL_ALIAS);
    432             }
    433             TAILQ_INSERT_HEAD(&pData->dns_list_head, da, de_list);
     433
     434            /* check */
     435            pDns->de_addr.s_addr = tmp_addr.s_addr;
     436            if ((pDns->de_addr.s_addr & htonl(IN_CLASSA_NET)) == ntohl(INADDR_LOOPBACK & IN_CLASSA_NET))
     437            {
     438                pDns->de_addr.s_addr = htonl(ntohl(pData->special_addr.s_addr) | CTL_ALIAS);
     439            }
     440            TAILQ_INSERT_HEAD(&pData->pDnsList, pDns, de_list);
    434441            found++;
    435442        }
     
    438445            char *tok;
    439446            char *saveptr;
    440             struct dns_domain_entry *dd = NULL;
     447            struct dns_domain_entry *pDomain = NULL;
    441448            int found = 0;
    442449            tok = strtok_r(&buff[6], " \t\n", &saveptr);
    443             LIST_FOREACH(dd, &pData->dns_domain_list_head, dd_list)
    444             {
    445                 if(    tok != NULL
    446                     && strcmp(tok, dd->dd_pszDomain) == 0)
     450            LIST_FOREACH(pDomain, &pData->pDomainList, dd_list)
     451            {
     452                if (   tok != NULL
     453                    && strcmp(tok, pDomain->dd_pszDomain) == 0)
    447454                {
    448455                    found = 1;
     
    450457                }
    451458            }
    452             if (tok != NULL && found == 0) {
    453                 dd = RTMemAllocZ(sizeof(struct dns_domain_entry));
    454                 if (dd == NULL)
     459            if (tok != NULL && found == 0)
     460            {
     461                pDomain = RTMemAllocZ(sizeof(struct dns_domain_entry));
     462                if (!pDomain)
    455463                {
    456464                    LogRel(("NAT: not enought memory to add domain list\n"));
    457465                    return VERR_NO_MEMORY;
    458466                }
    459                 dd->dd_pszDomain = RTStrDup(tok);
    460                 LogRel(("NAT: adding domain name %s to search list\n", dd->dd_pszDomain));
    461                 LIST_INSERT_HEAD(&pData->dns_domain_list_head, dd, dd_list);
     467                pDomain->dd_pszDomain = RTStrDup(tok);
     468                LogRel(("NAT: adding domain name %s to search list\n", pDomain->dd_pszDomain));
     469                LIST_INSERT_HEAD(&pData->pDomainList, pDomain, dd_list);
    462470            }
    463471        }
     
    473481static int slirp_init_dns_list(PNATState pData)
    474482{
    475     TAILQ_INIT(&pData->dns_list_head);
    476     LIST_INIT(&pData->dns_domain_list_head);
     483    TAILQ_INIT(&pData->pDnsList);
     484    LIST_INIT(&pData->pDomainList);
    477485    return get_dns_addr_domain(pData, true, NULL, NULL);
    478486}
     
    480488static void slirp_release_dns_list(PNATState pData)
    481489{
    482     struct dns_entry *de = NULL;
    483     struct dns_domain_entry *dd = NULL;
    484     while(!TAILQ_EMPTY(&pData->dns_list_head)) {
    485         de = TAILQ_FIRST(&pData->dns_list_head);
    486         TAILQ_REMOVE(&pData->dns_list_head, de, de_list);
    487         RTMemFree(de);
    488     }
    489     while(!LIST_EMPTY(&pData->dns_domain_list_head)) {
    490         dd = LIST_FIRST(&pData->dns_domain_list_head);
    491         LIST_REMOVE(dd, dd_list);
    492         if (dd->dd_pszDomain != NULL)
    493             RTStrFree(dd->dd_pszDomain);
    494         RTMemFree(dd);
     490    struct dns_entry *pDns = NULL;
     491    struct dns_domain_entry *pDomain = NULL;
     492
     493    while (!TAILQ_EMPTY(&pData->pDnsList))
     494    {
     495        pDns = TAILQ_FIRST(&pData->pDnsList);
     496        TAILQ_REMOVE(&pData->pDnsList, pDns, de_list);
     497        RTMemFree(pDns);
     498    }
     499
     500    while (!LIST_EMPTY(&pData->pDomainList))
     501    {
     502        pDomain = LIST_FIRST(&pData->pDomainList);
     503        LIST_REMOVE(pDomain, dd_list);
     504        if (pDomain->dd_pszDomain != NULL)
     505            RTStrFree(pDomain->dd_pszDomain);
     506        RTMemFree(pDomain);
    495507    }
    496508}
     
    564576
    565577#ifndef VBOX_WITH_NAT_SERVICE
    566     inet_aton(pszNetAddr, &special_addr);
     578    inet_aton(pszNetAddr, &pData->special_addr);
    567579#else
    568     special_addr.s_addr = u32NetAddr;
     580    pData->special_addr.s_addr = u32NetAddr;
    569581#endif
    570582    pData->slirp_ethaddr = &special_ethaddr[0];
    571     alias_addr.s_addr = special_addr.s_addr | htonl(CTL_ALIAS);
     583    alias_addr.s_addr = pData->special_addr.s_addr | htonl(CTL_ALIAS);
    572584    /* @todo: add ability to configure this staff */
    573585
     
    598610        flags |= PKT_ALIAS_LOG; /* set logging */
    599611        flags = LibAliasSetMode(pData->proxy_alias, flags, ~0);
    600         proxy_addr.s_addr = htonl(ntohl(special_addr.s_addr) | CTL_ALIAS);
     612        proxy_addr.s_addr = htonl(ntohl(pData->special_addr.s_addr) | CTL_ALIAS);
    601613        LibAliasSetAddress(pData->proxy_alias, proxy_addr);
    602614        ftp_alias_load(pData);
     
    684696    if (pData->use_host_resolver)
    685697        dns_alias_unload(pData);
    686     while(!LIST_EMPTY(&instancehead))
     698    while (!LIST_EMPTY(&instancehead))
    687699    {
    688700        struct libalias *la = LIST_FIRST(&instancehead);
     
    690702        LibAliasUninit(la);
    691703    }
    692     while(!LIST_EMPTY(&pData->arp_cache))
     704    while (!LIST_EMPTY(&pData->arp_cache))
    693705    {
    694706        struct arp_cache_entry *ac = LIST_FIRST(&pData->arp_cache);
     
    14191431    tip = *(uint32_t*)ah->ar_tip;
    14201432
    1421 
    14221433    ar_op = ntohs(ah->ar_op);
    1423     switch(ar_op)
     1434    switch (ar_op)
    14241435    {
    14251436        case ARPOP_REQUEST:
     
    14461457#endif
    14471458#ifdef VBOX_WITH_NAT_SERVICE
    1448             if (tip == special_addr.s_addr) goto arp_ok;
    1449 #endif
    1450             if ((htip & pData->netmask) == ntohl(special_addr.s_addr))
     1459            if (tip == pData->special_addr.s_addr)
     1460                goto arp_ok;
     1461#endif
     1462            if ((htip & pData->netmask) == ntohl(pData->special_addr.s_addr))
    14511463            {
    14521464                if (   CTL_CHECK(htip, CTL_DNS)
     
    14641476                m_free(pData, mr);
    14651477                return;
    1466         arp_ok:
     1478
     1479         arp_ok:
    14671480                rah->ar_hrd = htons(1);
    14681481                rah->ar_pro = htons(ETH_P_IP);
     
    14871500                m_free(pData, m);
    14881501            }
    1489             /*Gratuitous ARP*/
     1502            /* Gratuitous ARP */
    14901503            if (  *(uint32_t *)ah->ar_sip == *(uint32_t *)ah->ar_tip
    14911504                && memcmp(ah->ar_tha, broadcast_ethaddr, ETH_ALEN) == 0
    1492                 &&  memcmp(eh->h_dest, broadcast_ethaddr, ETH_ALEN) == 0)
     1505                && memcmp(eh->h_dest, broadcast_ethaddr, ETH_ALEN) == 0)
    14931506            {
    14941507                /* we've received anounce about address asignment
     
    15071520            }
    15081521            break;
     1522
    15091523        case ARPOP_REPLY:
    1510         {
    15111524            if (slirp_arp_cache_update(pData, *(uint32_t *)ah->ar_sip, &ah->ar_sha[0]) == 0)
    15121525            {
     
    15151528            }
    15161529            slirp_arp_cache_add(pData, *(uint32_t *)ah->ar_sip, ah->ar_sha);
    1517             /*after/save restore we need up port forwarding again*/
     1530            /* after/save restore we need up port forwarding again */
    15181531            if (pData->port_forwarding_activated != pData->port_forwarding_count)
    15191532                activate_port_forwarding(pData, eh);
    15201533            m_free(pData, m);
    1521         }
    1522         break;
     1534            break;
     1535
    15231536        default:
    15241537            break;
     
    15701583
    15711584    if (pkt_len < MSIZE)
    1572     {
    15731585        size = MCLBYTES;
    1574     }
    15751586    else if (pkt_len < MCLBYTES)
    1576     {
    15771587        size = MCLBYTES;
    1578     }
    1579     else if(pkt_len < MJUM9BYTES)
    1580     {
     1588    else if (pkt_len < MJUM9BYTES)
    15811589        size = MJUM9BYTES;
    1582     }
    15831590    else if (pkt_len < MJUM16BYTES)
    1584     {
    15851591        size = MJUM16BYTES;
    1586     }
    15871592    else
    1588     {
    15891593        AssertMsgFailed(("Unsupported size"));
    1590     }
     1594
    15911595    m = m_getjcl(pData, M_NOWAIT, MT_HEADER, M_PKTHDR, size);
    15921596    if (!m)
     
    16031607    /* Note: we add to align the IP header */
    16041608
    1605 
    16061609    if (pData->port_forwarding_activated != pData->port_forwarding_count)
    16071610        activate_port_forwarding(pData, mtod(m, struct ethhdr *));
     
    16121615            arp_input(pData, m);
    16131616            break;
     1617
    16141618        case ETH_P_IP:
    16151619            /* Update time. Important if the network is very quiet, as otherwise
     
    16331637            ip_input(pData, m);
    16341638            break;
     1639
    16351640        case ETH_P_IPV6:
    16361641            m_free(pData, m);
     
    16411646            }
    16421647            break;
     1648
    16431649        default:
    16441650            Log(("NAT: Unsupported protocol %x\n", proto));
     
    16461652            break;
    16471653    }
     1654
    16481655#ifdef VBOX_WITH_SLIRP_BSD_MBUF
    16491656    RTMemFree((void *)pkt);
     
    16641671    eh = mtod(m, struct ethhdr *);
    16651672
    1666     if(MBUF_HEAD(m) != m->m_data)
     1673    if (MBUF_HEAD(m) != m->m_data)
    16671674    {
    16681675        LogRel(("NAT: ethernet detects corruption of the packet"));
     
    17211728{
    17221729    uint32_t ip = INADDR_ANY;
     1730    int rc;
     1731   
    17231732    if (eth_addr == NULL)
    1724         goto done;
    1725     if (memcmp(eth_addr, zerro_ethaddr, ETH_ALEN) == 0
     1733        return INADDR_ANY;
     1734
     1735    if (   memcmp(eth_addr, zerro_ethaddr, ETH_ALEN) == 0
    17261736        || memcmp(eth_addr, broadcast_ethaddr, ETH_ALEN) == 0)
    1727         goto done;
    1728     if(slirp_arp_lookup_ip_by_ether(pData, eth_addr, &ip) == 0)
    1729         goto done;
     1737        return INADDR_ANY;
     1738
     1739    rc = slirp_arp_lookup_ip_by_ether(pData, eth_addr, &ip);
     1740    if (RT_SUCCESS(rc))
     1741        return ip;
     1742
    17301743    bootp_cache_lookup_ip_by_ether(pData, eth_addr, &ip);
    1731 done:
     1744    /* ignore return code, ip will be set to INADDR_ANY on error */
    17321745    return ip;
    17331746}
     
    17771790#if !defined(VBOX_WITH_NAT_SERVICE)
    17781791        if (rule->guest_addr.s_addr != guest_addr)
    1779         {
    17801792            continue;
    1781         }
    17821793#endif
    17831794
    17841795        LogRel(("NAT: set redirect %s hp:%d gp:%d\n", (rule->proto == IPPROTO_UDP?"UDP":"TCP"),
    17851796            rule->host_port, rule->guest_port));
     1797
    17861798        if (rule->proto == IPPROTO_UDP)
    17871799        {
     
    17961808            pData->port_forwarding_activated++;
    17971809        }
     1810
    17981811        if (so == NULL)
    17991812        {
     
    18271840        alias.s_addr =  htonl(ntohl(guest_addr) | CTL_ALIAS);
    18281841        link = LibAliasRedirectPort(lib, psin->sin_addr, htons(rule->host_port),
    1829             alias, htons(rule->guest_port),
    1830             special_addr,  -1, /* not very clear for now*/
    1831             rule->proto);
    1832         if (link == NULL)
     1842                                    alias, htons(rule->guest_port),
     1843                                    pData->special_addr,  -1, /* not very clear for now */
     1844                                    rule->proto);
     1845        if (!link)
    18331846        {
    18341847            LogRel(("NAT: failed redirect %s hp:%d gp:%d\n", (rule->proto == IPPROTO_UDP?"UDP":"TCP"),
    1835                 rule->host_port, rule->guest_port));
     1848                   rule->host_port, rule->guest_port));
    18361849            goto remove_port_forwarding;
    18371850        }
     1851
    18381852        so->so_la = lib;
    18391853        rule->activated = 1;
    18401854        continue;
     1855
    18411856    remove_port_forwarding:
    18421857        LIST_REMOVE(rule, list);
     
    19611976    Log2(("next_server:%s\n", next_server));
    19621977    if (next_server == NULL)
    1963         pData->tftp_server.s_addr = htonl(ntohl(special_addr.s_addr) | CTL_TFTP);
     1978        pData->tftp_server.s_addr = htonl(ntohl(pData->special_addr.s_addr) | CTL_TFTP);
    19641979    else
    19651980        inet_aton(next_server, &pData->tftp_server);
     
    19892004}
    19902005
    1991 #define CHECK_ARG(name, val, lim_min, lim_max)                                  \
    1992 do {                                                                            \
    1993     if ((val) < (lim_min) || (val) > (lim_max))                                 \
    1994     {                                                                           \
    1995         LogRel(("NAT: (" #name ":%d) has been ignored, "                        \
    1996             "because out of range (%d, %d)\n", (val), (lim_min), (lim_max)));   \
    1997         return;                                                                 \
    1998     }                                                                           \
    1999     else                                                                        \
    2000     {                                                                           \
    2001         LogRel(("NAT: (" #name ":%d)\n", (val)));                               \
    2002     }                                                                           \
    2003 } while (0)
     2006#define CHECK_ARG(name, val, lim_min, lim_max)                                      \
     2007    do {                                                                            \
     2008        if ((val) < (lim_min) || (val) > (lim_max))                                 \
     2009        {                                                                           \
     2010            LogRel(("NAT: (" #name ":%d) has been ignored, "                        \
     2011                "because out of range (%d, %d)\n", (val), (lim_min), (lim_max)));   \
     2012            return;                                                                 \
     2013        }                                                                           \
     2014        else                                                                        \
     2015        {                                                                           \
     2016            LogRel(("NAT: (" #name ":%d)\n", (val)));                               \
     2017        }                                                                           \
     2018    } while (0)
    20042019
    20052020/* don't allow user set less 8kB and more than 1M values */
     
    20292044 * Looking for Ether by ip in ARP-cache
    20302045 * Note: it´s responsible of caller to allocate buffer for result
    2031  * @returns 0 - if found, 1 - otherwise
     2046 * @returns iprt status code
    20322047 */
    20332048int slirp_arp_lookup_ether_by_ip(PNATState pData, uint32_t ip, uint8_t *ether)
    20342049{
    20352050    struct arp_cache_entry *ac = NULL;
    2036     int rc = 1;
     2051
    20372052    if (ether == NULL)
    2038         return rc;
     2053        return VERR_INVALID_PARAMETER;
    20392054
    20402055    if (LIST_EMPTY(&pData->arp_cache))
    2041         return rc;
     2056        return VERR_NOT_FOUND;
    20422057
    20432058    LIST_FOREACH(ac, &pData->arp_cache, list)
     
    20462061        {
    20472062            memcpy(ether, ac->ether, ETH_ALEN);
    2048             rc = 0;
    2049             return rc;
    2050         }
    2051     }
    2052     return rc;
     2063            return VINF_SUCCESS;
     2064        }
     2065    }
     2066    return VERR_NOT_FOUND;
    20532067}
    20542068
     
    20612075{
    20622076    struct arp_cache_entry *ac = NULL;
    2063     int rc = 1;
    20642077    *ip = INADDR_ANY;
     2078
    20652079    if (LIST_EMPTY(&pData->arp_cache))
    2066         return rc;
     2080        return VERR_NOT_FOUND;
     2081
    20672082    LIST_FOREACH(ac, &pData->arp_cache, list)
    20682083    {
     
    20702085        {
    20712086            *ip = ac->ip;
    2072             rc = 0;
    2073             return rc;
    2074         }
    2075     }
    2076     return rc;
     2087            return VINF_SUCCESS;
     2088        }
     2089    }
     2090    return VERR_NOT_FOUND;
    20772091}
    20782092
     
    21022116    ahdr->ar_op = htons(ARPOP_REQUEST);
    21032117    memcpy(ahdr->ar_sha, special_ethaddr, ETH_ALEN);
    2104     *(uint32_t *)ahdr->ar_sip = htonl(ntohl(special_addr.s_addr) | CTL_ALIAS);
     2118    *(uint32_t *)ahdr->ar_sip = htonl(ntohl(pData->special_addr.s_addr) | CTL_ALIAS);
    21052119    memset(ahdr->ar_tha, 0xff, ETH_ALEN); /*broadcast*/
    21062120    *(uint32_t *)ahdr->ar_tip = dst;
     
    21592173}
    21602174#endif
    2161 void slirp_set_dhcp_mtu(PNATState, int);
  • trunk/src/VBox/Devices/Network/slirp/slirp_state.h

    r25205 r25265  
    175175    ULONG (WINAPI * pfGetAdaptersAddresses)(ULONG, ULONG, PVOID, PIP_ADAPTER_ADDRESSES, PULONG);
    176176#endif
    177     struct dns_list_head dns_list_head;
    178     struct dns_domain_list_head dns_domain_list_head;
     177    struct dns_list_head pDnsList;
     178    struct dns_domain_list_head pDomainList;
    179179    struct in_addr tftp_server;
    180180    struct in_addr loopback_addr;
     
    404404# define handler_chain pData->handler_chain
    405405#endif
    406 #define special_addr pData->special_addr
    407406#define dns_addr pData->dns_addr
    408407#define loopback_addr pData->loopback_addr
  • trunk/src/VBox/Devices/Network/slirp/socket.c

    r24065 r25265  
    765765    paddr = (struct sockaddr_in *)&addr;
    766766    paddr->sin_family = AF_INET;
    767     if ((so->so_faddr.s_addr & htonl(pData->netmask)) == special_addr.s_addr)
     767    if ((so->so_faddr.s_addr & htonl(pData->netmask)) == pData->special_addr.s_addr)
    768768    {
    769769        /* It's an alias */
  • trunk/src/VBox/Devices/Network/slirp/tcp_subr.c

    r23369 r25265  
    396396
    397397        addr.sin_family = AF_INET;
    398         if ((so->so_faddr.s_addr & htonl(pData->netmask)) == special_addr.s_addr)
     398        if ((so->so_faddr.s_addr & htonl(pData->netmask)) == pData->special_addr.s_addr)
    399399        {
    400400            /* It's an alias */
  • trunk/src/VBox/Devices/Network/slirp/udp.c

    r23369 r25265  
    259259     */
    260260    if (   pData->use_dns_proxy
    261         && (ip->ip_dst.s_addr == htonl(ntohl(special_addr.s_addr) | CTL_DNS))
     261        && (ip->ip_dst.s_addr == htonl(ntohl(pData->special_addr.s_addr) | CTL_DNS))
    262262        && (ntohs(uh->uh_dport) == 53))
    263263    {
     
    377377
    378378    saddr = *addr;
    379     if ((so->so_faddr.s_addr & htonl(pData->netmask)) == special_addr.s_addr)
     379    if ((so->so_faddr.s_addr & htonl(pData->netmask)) == pData->special_addr.s_addr)
    380380    {
    381381        saddr.sin_addr.s_addr = so->so_faddr.s_addr;
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