VirtualBox

Changeset 28390 in vbox


Ignore:
Timestamp:
Apr 16, 2010 3:39:53 AM (15 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
60151
Message:

NAT: ICMP with BSD buffers.

File:
1 edited

Legend:

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

    r28035 r28390  
    12361236    int nbytes = 0;
    12371237    u_char code = ~0;
     1238    int out_len;
     1239    int size;
    12381240
    12391241    len = pData->pfIcmpParseReplies(pData->pvIcmpBuffer, pData->szIcmpBuffer);
     
    12671269                m = m_get(pData);
    12681270# else
    1269                 m = m_gethdr(pData, M_NOWAIT, MT_HEADER);
     1271                out_len = ETH_HLEN + sizeof(struct ip) +  8;
     1272                size;
     1273                size = MCLBYTES;
     1274                if (out_len < MSIZE)
     1275                    size = MCLBYTES;
     1276                else if (out_len < MCLBYTES)
     1277                    size = MCLBYTES;
     1278                else if (out_len < MJUM9BYTES)
     1279                    size = MJUM9BYTES;
     1280                else if (out_len < MJUM16BYTES)
     1281                    size = MJUM16BYTES;
     1282                else
     1283                    AssertMsgFailed(("Unsupported size"));
     1284
     1285                m = m_getjcl(pData, M_NOWAIT, MT_HEADER, M_PKTHDR, size);
    12701286# endif
     1287                m->m_len = 0;
    12711288                m->m_data += if_maxlinkhdr;
    12721289                ip = mtod(m, struct ip *);
     
    12901307                memcpy(icp->icmp_data, icr[i].Data, nbytes);
    12911308# else
    1292                 AssertMsgFailed(("ICMP"));
     1309                hlen = (ip->ip_hl << 2);
     1310                m->m_pkthdr.header = mtod(m, void *);
     1311                m->m_len = data_len;
     1312
     1313                m_copyback(pData, m, hlen + 8, icr[i].DataSize, icr[i].Data);
    12931314# endif
    12941315
     
    13241345                memcpy(icp->icmp_data, ip_broken,  nbytes);
    13251346#else
    1326                 AssertMsgFailed(("ICMP"));
     1347                m->m_len = data_len;
     1348                m->m_pkthdr.header = mtod(m, void *);
     1349                m_copyback(pData, m, ip->ip_hl >> 2, icr[i].DataSize, icr[i].Data);
    13271350#endif
    13281351                icmp_reflect(pData, m);
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