Subject: MINCLSIZE one byte to small?
To: None <current-users@NetBSD.ORG>
From: Thorsten Frueauf <frueauf@ira.uka.de>
List: current-users
Date: 05/25/1997 14:49:39
Hello!
As I try to understand the implementation for TCP/IP, I am currently reading
"TCP/IP Illustrated, Volume 2" - a really good book I must admit :)
Trying to understand the memory buffers, I found that little note on page
33:
"We would expect the minimum value of m_len to be 209 for this type of mbuf,
not 208 as we indicate in the figure. That is, a record with 208 bytes of
data can be stored in two mbufs, with 100 bytes in the first and 108 in the
second. The source code, however, has a bug and allocates a cluster if the
size is greater or equal to 208."
So I was curios if NetBSD has this "bug" too (the book refers to 4.4BSDlite),
and I found in /src/sys/sys/mbuf.h:
#define MINCLSIZE (MHLEN + MLEN) /* smallest amount to put in cluster */
and in /src/sys/kern/uipc_mbuf.c:
[...]
if (len >= MINCLSIZE) {
MCLGET(m, M_DONTWAIT);
if ((m->m_flags & M_EXT) == 0) {
m_free(m);
m_freem(top);
return (0);
}
m->m_len = len = min(len, MCLBYTES);
} else {
/*
* Place initial small packet/header at end of mbuf.
*/
[...]
So as MHLEN is the max ammount of data in mbuf with packet header and
MLEN is the max amount of data in normal mbuf - shouldn't MINCLSIZE be
defined as (MHLEN + MLEN +1)?
Dunno if this would be a real win, and dunno if my understanding is right
here, but I would like to hear what the gurus say to this :-)
Thanx for any comment in advance!
Greets
Thorsten