VirtualBox

Ignore:
Timestamp:
May 30, 2007 4:30:42 PM (18 years ago)
Author:
vboxsync
Message:

NAT: Pass first entry of search list as domain name in DHCP (which DHCP
clients usually use to populate the DNS search list).

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

Legend:

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

    r1076 r2938  
    263263            q += val;
    264264        }
     265
     266        if (pData->pszDomain && pData->fPassDomain)
     267        {
     268            val = strlen(pData->pszDomain);
     269            *q++ = RFC1533_DOMAINNAME;
     270            *q++ = val;
     271            memcpy(q, pData->pszDomain, val);
     272            q += val;
     273        }
    265274    }
    266275    *q++ = RFC1533_END;
  • trunk/src/VBox/Devices/Network/slirp/libslirp.h

    r1076 r2938  
    2727#endif
    2828
    29 int slirp_init(PNATState *, const char *, void *);
     29int slirp_init(PNATState *, const char *, bool, void *);
    3030void slirp_term(PNATState);
    3131void slirp_link_up(PNATState);
  • trunk/src/VBox/Devices/Network/slirp/slirp.c

    r2566 r2938  
    1313#ifdef _WIN32
    1414
    15 static int get_dns_addr(PNATState pData, struct in_addr *pdns_addr)
     15static int get_dns_addr_domain(PNATState pData, struct in_addr *pdns_addr,
     16                               const char **ppszDomain)
    1617{
    1718    FIXED_INFO *FixedInfo=NULL;
     
    2021    IP_ADDR_STRING *pIPAddr;
    2122    struct in_addr tmp_addr;
     23
     24    *ppszDomain = NULL;
     25    /** @todo implement search list for Windows host. */
    2226
    2327    FixedInfo = (FIXED_INFO *)GlobalAlloc(GPTR, sizeof(FIXED_INFO));
     
    6165#else
    6266
    63 static int get_dns_addr(PNATState pData, struct in_addr *pdns_addr)
     67static int get_dns_addr_domain(PNATState pData, struct in_addr *pdns_addr,
     68                               const char **ppszDomain)
    6469{
    6570    char buff[512];
     
    9297        return -1;
    9398
     99    *ppszDomain = NULL;
    94100    Log(("nat: IP address of your DNS(s): \n"));
    95101    while (fgets(buff, 512, f) != NULL) {
     
    108114                Log(("nat: %s\n", inet_ntoa(tmp_addr)));
    109115        }
     116        if (!strncmp(buff, "domain", 6) || !strncmp(buff, "search", 6))
     117        {
     118            /* Domain name/search list present. Pick first entry */
     119            if (*ppszDomain == NULL)
     120            {
     121                char *tok;
     122                tok = strtok(&buff[6], " \t\n");
     123                *ppszDomain = RTStrDup(tok);
     124                if (pData->fPassDomain)
     125                    LogRel(("NAT: passing domain name %s\n", tok));
     126                else
     127                    Log(("nat: ignoring domain %s\n", tok));
     128            }
     129        }
    110130    }
    111131    fclose(f);
     
    117137#endif
    118138
    119 int slirp_init(PNATState *ppData, const char *pszNetAddr, void *pvUser)
     139int slirp_init(PNATState *ppData, const char *pszNetAddr, bool fPassDomain, void *pvUser)
    120140{
    121141    int fNATfailed = 0;
     
    125145        return VERR_NO_MEMORY;
    126146    memset(pData, '\0', sizeof(NATState));
     147    pData->fPassDomain = fPassDomain;
    127148    pData->pvUser = pvUser;
    128149#if ARCH_BITS == 64
     
    150171    inet_aton("127.0.0.1", &dns_addr);
    151172
    152     if (get_dns_addr(pData, &dns_addr) < 0)
     173    if (get_dns_addr_domain(pData, &dns_addr, &pData->pszDomain) < 0)
    153174        fNATfailed = 1;
    154175
     
    193214void slirp_term(PNATState pData)
    194215{
     216    if (pData->pszDomain)
     217        RTStrFree((char *)(void *)pData->pszDomain);
     218
    195219#if ARCH_BITS == 64
    196220    LogRel(("NAT: cpvHashUsed=%RU32 cpvHashCollisions=%RU32 cpvHashInserts=%RU64 cpvHashDone=%RU64\n",
  • trunk/src/VBox/Devices/Network/slirp/slirp_state.h

    r1300 r2938  
    9191    struct ex_list *exec_list;
    9292    char slirp_hostname[33];
     93    bool fPassDomain;
     94    const char *pszDomain;
    9395    /* Stuff from tcp_input.c */
    9496    struct socket tcb;
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