VirtualBox

Changeset 22896 in vbox


Ignore:
Timestamp:
Sep 10, 2009 6:19:59 AM (15 years ago)
Author:
vboxsync
Message:

NAT: BSD mbuf related changeset.

File:
1 edited

Legend:

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

    r22664 r22896  
    7676    register long len, win;
    7777    int off, flags, error;
    78     register struct mbuf *m;
     78    register struct mbuf *m = NULL;
    7979    register struct tcpiphdr *ti;
    8080    u_char opt[MAX_TCPOPTLEN];
     
    371371        }
    372372
     373#ifndef VBOX_WITH_SLIRP_BSD_MBUF
    373374        m = m_get(pData);
     375#else
     376        m = m_gethdr(pData, M_NOWAIT, MT_HEADER);
     377        /* @todo (r=vvl) should we append other bufs here ???*/
     378#endif
    374379        if (m == NULL)
    375380        {
     
    378383            goto out;
    379384        }
     385#ifndef VBOX_WITH_SLIRP_BSD_MBUF
    380386        m->m_data += if_maxlinkhdr;
    381387        m->m_len = hdrlen;
     388#endif
    382389
    383390        /*
     
    389396        {
    390397#endif
     398#ifndef VBOX_WITH_SLIRP_BSD_MBUF
    391399            sbcopy(&so->so_snd, off, (int) len, mtod(m, caddr_t) + hdrlen);
    392400            m->m_len += len;
     401#else
     402            sbcopy(pData, &so->so_snd, off, (int) len, m);
     403            m = m_prepend(pData, m, sizeof (struct tcpiphdr), M_DONTWAIT);
     404#endif
    393405#if 0
    394406        }
     
    420432            tcpstat.tcps_sndwinup++;
    421433
     434#ifndef VBOX_WITH_SLIRP_BSD_MBUF
    422435        m = m_get(pData);
    423436        if (m == NULL)
     
    429442        m->m_data += if_maxlinkhdr;
    430443        m->m_len = hdrlen;
    431     }
    432 
     444#else
     445        m = m_gethdr(pData, M_NOWAIT, MT_HEADER);
     446        if (m == NULL)
     447        {
     448/*          error = ENOBUFS; */
     449            error = 1;
     450            goto out;
     451        }
     452#endif
     453    }
     454
     455#ifndef VBOX_WITH_SLIRP_BSD_MBUF
    433456    ti = mtod(m, struct tcpiphdr *);
    434457
    435458    memcpy((caddr_t)ti, &tp->t_template, sizeof (struct tcpiphdr));
     459#else
     460    /*already copied header from template */
     461
     462    m_copyback(pData, m, 0, sizeof (struct tcpiphdr), &tp->t_template);
     463    ti = mtod(m, struct tcpiphdr *);
     464#endif
    436465
    437466    /*
     
    464493    if (optlen)
    465494    {
     495#ifndef VBOX_WITH_SLIRP_BSD_MBUF
    466496        memcpy((caddr_t)(ti + 1), (caddr_t)opt, optlen);
     497#else
     498        m_append(pData, m,  optlen, opt);
     499#endif
    467500        ti->ti_off = (sizeof (struct tcphdr) + optlen) >> 2;
    468501    }
     
    575608     * the template, but need a way to checksum without them.
    576609     */
     610#ifndef VBOX_WITH_SLIRP_BSD_MBUF
    577611    Assert(m->m_len == (hdrlen + len));
    578612    m->m_len = hdrlen + len; /* XXX Needed? m_len should be correct */
    579 
    580     {
     613#else
     614    M_ASSERTPKTHDR(m);
     615    m->m_pkthdr.header = mtod(m, void *);
     616#endif
     617
     618    {
     619#ifndef VBOX_WITH_SLIRP_BSD_MBUF
    581620        ((struct ip *)ti)->ip_len = m->m_len;
     621#else
     622       ((struct ip *)ti)->ip_len = m_length(m, NULL);
     623#endif
    582624        ((struct ip *)ti)->ip_ttl = ip_defttl;
    583         ((struct ip *)ti)->ip_tos = so->so_iptos;
     625       ((struct ip *)ti)->ip_tos = so->so_iptos;
    584626
    585627        /* #if BSD >= 43 */
     
    589631                         so->so_options & SO_DONTROUTE, 0);
    590632#endif
     633#ifndef VBOX_WITH_SLIRP_BSD_MBUF
    591634        if(so->so_la != NULL)
    592635            m->m_la = so->so_la;
     636#endif
    593637        error = ip_output(pData, so, m);
    594638
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