VirtualBox

Changeset 107548 in vbox for trunk/src/libs


Ignore:
Timestamp:
Jan 8, 2025 7:54:13 PM (2 months ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
166619
Message:

Devices/Network: Fixed and added configuration for packets broadcast to NAT adapter's network. Propagated additional parameters from CFGM. Simplified port forwarding a bit and added additional release logging. bugref:10268

Location:
trunk/src/libs/libslirp-4.8.0
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/libs/libslirp-4.8.0/include/glib.h

    r106935 r107548  
    3535
    3636#ifndef INCLUDED_glib_h
     37#define INCLUDED_glib_h
    3738#ifndef RT_WITHOUT_PRAGMA_ONCE
    3839# pragma once
  • trunk/src/libs/libslirp-4.8.0/src/libslirp.h

    r105726 r107548  
    210210     */
    211211    uint8_t oob_eth_addr[6];
     212#ifdef VBOX
     213    /*
     214     * Allow for network broadcasts to be sent out of internal NAT network.
     215     * When true, all devices on host's network would receive broadcasts if
     216     * host's network configuration allows.
     217     */
     218    bool fForwardBroadcast;
     219
     220    /*
     221     * Set a maximum number of pending socket connections to be passeed to
     222     * the backlog parameter of listen().
     223     */
     224    int iSoMaxConn;
     225#endif
    212226} SlirpConfig;
    213227
  • trunk/src/libs/libslirp-4.8.0/src/slirp.c

    r105726 r107548  
    699699    }
    700700
     701#ifdef VBOX
     702    slirp->fForwardBroadcast = cfg->fForwardBroadcast;
     703    slirp->iSoMaxConn = cfg->iSoMaxConn;
     704#endif
     705
    701706    ip6_post_init(slirp);
    702707    return slirp;
  • trunk/src/libs/libslirp-4.8.0/src/slirp.h

    r105533 r107548  
    218218    struct sockaddr_in6 *outbound_addr6;
    219219    bool disable_dns; /* slirp will not redirect/serve any DNS packet */
     220
     221#ifdef VBOX
     222    bool fForwardBroadcast;
     223    int iSoMaxConn;
     224#endif
    220225};
    221226
  • trunk/src/libs/libslirp-4.8.0/src/socket.c

    r105533 r107548  
    656656        DEBUG_MISC(" did recvfrom %d, errno = %d-%s", m->m_len, errno,
    657657                   strerror(errno));
    658         if (m->m_len < 0) {     
     658        if (m->m_len < 0) {
    659659            if (errno == ENOTCONN) {
    660660                /*
     
    868868        (slirp_socket_set_fast_reuse(s) < 0) ||
    869869        (bind(s, haddr, haddrlen) < 0) ||
     870#ifdef VBOX
     871        (listen(s, slirp->iSoMaxConn) < 0)) {
     872#else
    870873        (listen(s, 1) < 0)) {
     874#endif
    871875        int tmperrno = errno; /* Don't clobber the real reason we failed */
    872876        if (s >= 0) {
     
    973977
    974978    if (so->so_faddr.s_addr == s->vhost_addr.s_addr ||
    975         so->so_faddr.s_addr == 0xffffffff) {
     979#ifdef VBOX
     980        so->so_faddr.s_addr == 0xffffffff ||
     981        so->so_faddr.s_addr ==
     982            (s->vnetwork_addr.s_addr|~s->vnetwork_mask.s_addr)) {
     983#else
     984        so->so_faddr.s_addr == 0xffffffff {
     985#endif
     986
    976987        if (s->disable_host_loopback) {
    977988            return false;
    978989        }
    979990
    980         sin->sin_addr = loopback_addr;
     991#ifdef VBOX
     992        if (s->fForwardBroadcast)
     993            sin->sin_addr.s_addr = 0xffffffff;
     994        else
     995#endif
     996            sin->sin_addr = loopback_addr;
    981997    }
    982998
  • trunk/src/libs/libslirp-4.8.0/src/udp.c

    r105533 r107548  
    222222    }
    223223    setsockopt(so->s, IPPROTO_IP, IP_TTL, &ttl, sizeof(ttl));
     224#ifdef VBOX
     225    if (    slirp->fForwardBroadcast
     226        && (   so->so_faddr.s_addr == (slirp->vnetwork_addr.s_addr|~slirp->vnetwork_mask.s_addr)
     227            || so->so_faddr.s_addr == 0xffffffff)   )
     228        setsockopt(so->s, SOL_SOCKET, SO_BROADCAST, &(int){1}, sizeof(int));
     229#endif
    224230
    225231    /*
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