VirtualBox

Changeset 27448 in vbox


Ignore:
Timestamp:
Mar 17, 2010 2:44:13 PM (15 years ago)
Author:
vboxsync
Message:

NAT: one more m_inc() fix (just in case), and some cleanup. ripping out dead code which was broken anyway.

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

Legend:

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

    r26676 r27448  
    585585    m->m_pkthdr.header = mtod(m, void *);
    586586#else
    587     new_m_size = sizeof(struct ip) + ICMP_MINLEN + msrc->m_len + ICMP_MAXDATALEN;
     587    new_m_size = if_maxlinkhdr + sizeof(struct ip) + ICMP_MINLEN + msrc->m_len + ICMP_MAXDATALEN;
    588588    if (new_m_size > m->m_size)
    589589    {
  • trunk/src/VBox/Devices/Network/slirp/libslirp.h

    r26597 r27448  
    119119void slirp_ext_m_free(PNATState pData, struct mbuf *);
    120120#ifndef VBOX_WITH_SLIRP_BSD_MBUF
    121 void slirp_ext_m_append(PNATState pData, struct mbuf *, uint8_t *, size_t);
    122121void slirp_push_recv_thread(void *pvUser);
    123122#endif
  • trunk/src/VBox/Devices/Network/slirp/mbuf.c

    r26574 r27448  
    402402}
    403403
    404 void slirp_ext_m_append(PNATState pData, struct mbuf *m, uint8_t *pu8Buf, size_t cbBuf)
    405 {
    406     char *c;
    407     if (cbBuf > M_FREEROOM(m))
    408     {
    409         m_inc(m, cbBuf);
    410         if (RT_UNLIKELY(cbBuf > M_FREEROOM(m)))
    411             cbBuf = M_FREEROOM(m);
    412     }
    413     c = mtod(m, char *);
    414     memcpy(c, pu8Buf, cbBuf);
    415     m->m_len = cbBuf;
    416 }
    417 
    418404#endif /* VBOX_WITH_SLIRP_BSD_MBUF */
  • trunk/src/VBox/Devices/Network/slirp/socket.c

    r27447 r27448  
    10601060    {
    10611061       Log(("send_icmp_to_guest: ICMP header is too small to understand which type/subtype of the datagram\n"));
    1062        return; 
     1062       return;
    10631063    }
    10641064    icp = (struct icmp *)((char *)ip + hlen);
     
    10731073
    10741074    /*
    1075      * ICMP_ECHOREPLY, ICMP_TIMXCEED, ICMP_UNREACH minimal header size is 
     1075     * ICMP_ECHOREPLY, ICMP_TIMXCEED, ICMP_UNREACH minimal header size is
    10761076     * ICMP_ECHOREPLY assuming data 0
    10771077     * icmp_{type(8), code(8), cksum(16),identifier(16),seqnum(16)}
     
    10811081        Log(("send_icmp_to_guest: NAT accept ICMP_{ECHOREPLY, TIMXCEED, UNREACH} the minimum size is 64 (see rfc792)\n"));
    10821082        return;
    1083     } 
     1083    }
    10841084
    10851085    type = icp->icmp_type;
     
    10881088    {
    10891089        /*
    1090          * ICMP_TIMXCEED, ICMP_UNREACH minimal header size is 
     1090         * ICMP_TIMXCEED, ICMP_UNREACH minimal header size is
    10911091         * icmp_{type(8), code(8), cksum(16),unused(32)} + IP header + 64 bit of original datagram
    10921092         */
     
    10951095            Log(("send_icmp_to_guest: NAT accept ICMP_{TIMXCEED, UNREACH} the minimum size of ipheader + 64 bit of data (see rfc792)\n"));
    10961096            return;
    1097         } 
     1097        }
    10981098        ip = &icp->icmp_ip;
    10991099    }
     
    11481148    /* saves original ip header and options */
    11491149    /* m_room space in the saved m buffer */
    1150     m_room = m->m_len + M_TRAILINGSPACE(m) - original_hlen;
    1151     if (m_room >= len - hlen)
    1152         memcpy(m->m_data + original_hlen, buff + hlen, len - hlen);
    1153     else
    1154     {
    1155         int size = m->m_size;
    1156         /* we need involve ether header lenght into new buffer buffer calculation */
    1157         m_inc(m, if_maxlinkhdr + len - hlen + original_hlen);
    1158         if (size == m->m_size)
     1150    m_room = M_ROOM(m);
     1151    if (m_room < len - hlen + original_hlen)
     1152    else
     1153    {
     1154        /* we need involve ether header length into new buffer buffer calculation */
     1155        m_inc(m, if_maxlinkhdr + len - hlen + original_hlen);
     1156        if (m->m_size < if_maxlinkhdr + len - hlen + original_hlen)
    11591157        {
    11601158            Log(("send_icmp_to_guest: extending buffer was failed (packet is dropped)\n"));
    11611159            return;
    11621160        }
    1163         memcpy(m->m_data + original_hlen, buff + hlen, len - hlen);
    1164     }
     1161    }
     1162    memcpy(m->m_data + original_hlen, buff + hlen, len - hlen);
    11651163#ifndef VBOX_WITH_SLIRP_BSD_MBUF
    11661164    m->m_len = len - hlen + original_hlen;
     
    13901388            || errno == ENOTCONN))
    13911389    {
    1392         Log(("sorecvfrom_icmp_unix: 2 - step can't read IP body (would block expected:%d)\n", 
     1390        Log(("sorecvfrom_icmp_unix: 2 - step can't read IP body (would block expected:%d)\n",
    13931391            RT_N2H_U16(ip.ip_len)));
    13941392        RTMemFree(buff);
    13951393        return;
    13961394    }
    1397     if (   len < 0 
     1395    if (   len < 0
    13981396        || len < (RT_N2H_U16(ip.ip_len))
    13991397        || len == 0)
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