VirtualBox

Changeset 39259 in vbox


Ignore:
Timestamp:
Nov 10, 2011 8:29:39 AM (13 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
74794
Message:

NAT: firewall emulation hack allowing NETBIOS resolving mechanism live in peace with Sun RPC.

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

Legend:

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

    r39101 r39259  
    116116    {
    117117        int rc;
    118         STAM_PROFILE_START(&pData->StatALIAS_input, b);
    119         rc = LibAliasIn(select_alias(pData, m), mtod(m, char *), m_length(m, NULL));
    120         STAM_PROFILE_STOP(&pData->StatALIAS_input, b);
    121         Log2(("NAT: LibAlias return %d\n", rc));
     118        if (!(m->m_flags & M_SKIP_FIREWALL))
     119        {
     120            STAM_PROFILE_START(&pData->StatALIAS_input, b);
     121            rc = LibAliasIn(select_alias(pData, m), mtod(m, char *), m_length(m, NULL));
     122            STAM_PROFILE_STOP(&pData->StatALIAS_input, b);
     123            Log2(("NAT: LibAlias return %d\n", rc));
     124        }
     125        else
     126            m->m_flags &= ~M_SKIP_FIREWALL;
    122127        if (m->m_len != RT_N2H_U16(ip->ip_len))
    123128            m->m_len = RT_N2H_U16(ip->ip_len);
  • trunk/src/VBox/Devices/Network/slirp/ip_output.c

    r39085 r39259  
    169169        ip->ip_sum = cksum(m, hlen);
    170170
    171         {
     171        if (!(m->m_flags & M_SKIP_FIREWALL)){
    172172            struct m_tag *t;
    173173            STAM_PROFILE_START(&pData->StatALIAS_output, b);
     
    186186            STAM_PROFILE_STOP(&pData->StatALIAS_output, b);
    187187        }
     188        else
     189            m->m_flags &= ~M_SKIP_FIREWALL;
    188190
    189191        memcpy(eh->h_source, eth_dst, ETH_ALEN);
     
    292294
    293295send_or_free:
    294         {
     296        if (!(m->m_flags & M_SKIP_FIREWALL)){
    295297            /* @todo: We can't alias all fragments because the way libalias processing
    296298             * the fragments brake the sequence. libalias put alias_address to the source
     
    316318            Log2(("NAT: LibAlias return %d\n", rcLa));
    317319        }
     320        else
     321            m->m_flags &= ~M_SKIP_FIREWALL;
    318322        for (m = m0; m; m = m0)
    319323        {
  • trunk/src/VBox/Devices/Network/slirp/udp.c

    r39174 r39259  
    404404        if ((so->so_faddr.s_addr & RT_H2N_U32(~pData->netmask)) == RT_H2N_U32(~pData->netmask))
    405405        {
    406             saddr.sin_addr.s_addr = addr->sin_addr.s_addr;
     406            /**
     407             * We haven't got real firewall but have got its submodule libalias.
     408             */
     409            m->m_flags |= M_SKIP_FIREWALL;
     410            /**
     411             * udp/137 port is used for NetBIOS lookup. for some reasons Windows guest rejects
     412             * accept data from non-aliased server.
     413             */
     414            if (   (so->so_fport == so->so_lport)
     415                && (so->so_fport == RT_H2N_U16(137)))
     416                saddr.sin_addr.s_addr = alias_addr.s_addr;
     417            else
     418                saddr.sin_addr.s_addr = addr->sin_addr.s_addr;
    407419            so->so_faddr.s_addr = addr->sin_addr.s_addr;
    408420        }
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