Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 18 Jan 2002 22:10:01 -0500
From:      Bosko Milekic <bmilekic@technokratis.com>
To:        Skye Poier <skye@ffwd.cx>
Cc:        hackers@FreeBSD.ORG
Subject:   Re: mbuf chains
Message-ID:  <20020118221001.A61874@technokratis.com>
In-Reply-To: <20020118164617.L99893@ffwd.cx>; from skye@ffwd.cx on Fri, Jan 18, 2002 at 04:46:18PM -0800
References:  <20020118164617.L99893@ffwd.cx>

next in thread | previous in thread | raw e-mail | index | archive | help

On Fri, Jan 18, 2002 at 04:46:18PM -0800, Skye Poier wrote:
> What are the rules around mbuf chain construction?
> (I've read man mbuf, doesnt go into much detail)
> 
> In particular, I'm assuming:
> - all mbufs must be same type
> - the head mbuf must have M_PKTHDR set
> - the head mbuf.m_pkthdr.len must be the len of the entire chain
> Anything to add?

  Take a look at the mchain interface for a nice way to deal with mbufs
in certain cases: src/sys/kern/subr_mchain.c
  The `rules' you state are good advice but are not _technically_
obligatory in the most general case. In other words, it is "technically"
up to the implementor to decide on how to chain mbufs and what their
meaning is.

> My confusion is around splitting/concatenating -
> 
> When splitting an mbuf chain, the two resultant chains must be as above
> (heads have M_PKTHDR and mbuf.m_pkthdr.len set) right?
>
> When concatenating chains, what do you do with the M_PKTHDR that is now
> in the middle of the chain?  m_cat doesn't seem very sophisticated in
> this regard.  And of course update head mbuf.m_pkthdr.len

  Again, it all depends on what you're doing. Typically a packet
consists of a chain with a head mbuf that is M_PKTHDR and contains the
additional information. You don't normally do what you wrote, but again,
it depends on the implementation, ultimately.

> Thanks
> Skye

-- 
 Bosko Milekic
 bmilekic@FreeBSD.org


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-hackers" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20020118221001.A61874>