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