VirtualBox

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


Ignore:
Timestamp:
Nov 18, 2024 2:52:36 PM (6 months ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
165972
Message:

NAT: Consistently take network config from CFGM, and apply part of the IPv4 network address to the IPv6 prefix as well.

File:
1 edited

Legend:

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

    r106678 r107028  
    16101610                                   pDrvIns->iInstance);
    16111611
    1612     RTNETADDRIPV4 Network, Netmask;
     1612    RTNETADDRIPV4 Network, Netmask, Nettemp;
    16131613    rc = RTCidrStrToIPv4(szNetwork, &Network, &Netmask);
    16141614    if (RT_FAILURE(rc))
     
    16191619    /* Construct Libslirp Config and Initialzie Slirp */
    16201620
    1621     LogFlow(("Here is what is coming out of the vbox config:\n"
    1622              "  Network: %lu\n"
    1623              "  Netmask: %lu\n", Network, Netmask));
     1621    LogFlow(("Here is what is coming out of the vbox config (NAT#%d):\n"
     1622             "  Network: %RTnaipv4\n"
     1623             "  Netmask: %RTnaipv4\n",
     1624             pDrvIns->iInstance, RT_H2BE_U32(Network.u), RT_H2BE_U32(Netmask.u)));
    16241625
    16251626    struct in_addr vnetwork = RTNetIPv4AddrHEToInAddr(&Network);
    16261627    struct in_addr vnetmask = RTNetIPv4AddrHEToInAddr(&Netmask);
    1627     struct in_addr vhost = RTNetInAddrFromU8(10, 0, 2, 2);
    1628     struct in_addr vdhcp_start = RTNetInAddrFromU8(10, 0, 2, 15);
    1629     struct in_addr vnameserver = RTNetInAddrFromU8(10, 0, 2, 3);
     1628    Nettemp = Network; Nettemp.u |= 2;  /* Usually 10.0.2.2 */
     1629    struct in_addr vhost       = RTNetIPv4AddrHEToInAddr(&Nettemp);
     1630    Nettemp = Network; Nettemp.u |= 15; /* Usually 10.0.2.15 */
     1631    struct in_addr vdhcp_start = RTNetIPv4AddrHEToInAddr(&Nettemp);
     1632    Nettemp = Network; Nettemp.u |= 3;  /* Usually 10.0.2.3 */
     1633    struct in_addr vnameserver = RTNetIPv4AddrHEToInAddr(&Nettemp);
    16301634
    16311635    SlirpConfig slirpCfg = { 0 };
     
    16401644    slirpCfg.in6_enabled = true;
    16411645
    1642     inet_pton(AF_INET6, "fd00::", &slirpCfg.vprefix_addr6);
     1646    /*
     1647     * Use the same prefix as the NAT Network default:
     1648     * [fd17:625c:f037:XXXX::/64] - RFC 4193 (ULA) Locally Assigned
     1649     * Global ID where XXXX, 16 bit Subnet ID, are two bytes from the
     1650     * middle of the IPv4 address, e.g. :0002: for 10.0.2.1.
     1651     */
     1652
     1653    inet_pton(AF_INET6, "fd17:625c:f037:0::",  &slirpCfg.vprefix_addr6);
     1654    inet_pton(AF_INET6, "fd17:625c:f037:0::2", &slirpCfg.vhost6);
     1655    inet_pton(AF_INET6, "fd17:625c:f037:0::3", &slirpCfg.vnameserver6);
    16431656    slirpCfg.vprefix_len = 64;
    1644     inet_pton(AF_INET6, "fd00::2", &slirpCfg.vhost6);
     1657
     1658    /* Copy the middle of the IPv4 addresses to the IPv6 addresses. */
     1659    slirpCfg.vprefix_addr6.s6_addr[6] = RT_BYTE2(vhost.s_addr);
     1660    slirpCfg.vprefix_addr6.s6_addr[7] = RT_BYTE3(vhost.s_addr);
     1661    slirpCfg.vhost6.s6_addr[6]        = RT_BYTE2(vhost.s_addr);
     1662    slirpCfg.vhost6.s6_addr[7]        = RT_BYTE3(vhost.s_addr);
     1663    slirpCfg.vnameserver6.s6_addr[6]  = RT_BYTE2(vnameserver.s_addr);
     1664    slirpCfg.vnameserver6.s6_addr[7]  = RT_BYTE3(vnameserver.s_addr);
    16451665
    16461666    slirpCfg.vhostname = "vbox";
     
    16511671    slirpCfg.vnameserver = vnameserver;
    16521672    slirpCfg.if_mtu = MTU;
    1653 
    1654     inet_pton(AF_INET6, "fd00::3", &slirpCfg.vnameserver6);
    16551673
    16561674    slirpCfg.vdnssearch = NULL;
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette