Hi,

I noticed that tunwrite() does not allocate a cluster, even if the size of the
packet is greater than or equal to MINCLSIZE. Rather it stores the packet
in a mbuf chain.

Is there any reason why this is so ? I thought that packets with
size >= MINCLSIZE are traditionally stored in clusters.

Can someone please take a look at the patch for -current below ?

thanks
Neel

--- /home/neel/if_tun.c.current Thu Sep 19 21:19:19 2002
+++ if_tun.c    Thu Sep 19 21:32:05 2002
@@ -717,27 +717,32 @@
        }
        tlen = uio->uio_resid;

-       /* get a header mbuf */
-       MGETHDR(m, M_DONTWAIT, MT_DATA);
-       if (m == NULL)
-               return (ENOBUFS);
-       mlen = MHLEN;
-
        top = 0;
        mp = ⊤
        while (error == 0 && uio->uio_resid > 0) {
+               if (top == 0) {
+                       MGETHDR(m, M_DONTWAIT, MT_DATA);
+                       mlen = MHLEN;
+               } else {
+                       MGET(m, M_DONTWAIT, MT_DATA);
+                       mlen = MLEN;
+               }
+               if (m == 0) {
+                       error = ENOBUFS;
+                       break;
+               }
+               if (uio->uio_resid >= MINCLSIZE) {
+                       MCLGET(m, M_DONTWAIT);
+                       if (m->m_flags & M_EXT) {
+                               mlen = MCLBYTES;
+                       } else {
+                               /* store the data in the mbuf itself */
+                       }
+               }
                m->m_len = min(mlen, uio->uio_resid);
                error = uiomove(mtod (m, caddr_t), m->m_len, uio);
                *mp = m;
                mp = &m->m_next;
-               if (uio->uio_resid > 0) {
-                       MGET (m, M_DONTWAIT, MT_DATA);
-                       if (m == 0) {
-                               error = ENOBUFS;
-                               break;
-                       }
-                       mlen = MLEN;
-               }
        }
        if (error) {
                if (top)



__________________________________________________
Do you Yahoo!?
New DSL Internet Access from SBC & Yahoo!
http://sbc.yahoo.com

To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-net" in the body of the message

Reply via email to