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
 [EMAIL PROTECTED]


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

Reply via email to