- 论坛徽章:
- 0
|
mbuf是TCP/IP网络实现源码中一个非常重要的数据结构,是memory buffer的缩写,
主要用于网络各个层中数据信息的传递,其中对大数据用到了簇的概念,有一定的复杂性。
这有部分信息,参考参考:
//Header at beginning of each mbuf:
struct m_hdr {
struct mbuf *mh_next; //next buffer in chain
struct mbuf *mh_nextpkt; //next chain in queue/record.
int mh_len; //amount of data in this mbuf
caddr_t mh_data; //pointer to data
short mh_type; //type of data (Figure 2.10)
short mh_flags; //flags
};
// record/packer header in first mbuf of chain; valid if M_PKTHDR set
struct pkthdr {
int len; //total packet length
struct ifnet *rcvif; //receive interface;
};
// decription of external storage mapped into mbuf, valid if M_EXT set
struct m_ext {
caddr_t ext_buf; //start of buffer;
void (*ext_free)(); //free routine if not the usual
u_int ext_size; //size of buffer, for ext_free
};
struct mbuf {
struct m_hdr m_hdr;
union {
struct {
struct pkthdr MH_pkthdr; //M_PKTHDR set
union {
struct m_ext MH_ext; //m_ext set
char MH_databuf[MHLEN];
}MH_dat;
}MH;
char M_databuf[MLEN];
} M_dat;
};
#define m_next m_hdr.mh_next
#define m_len m_hdr.mh_len
#define m_data m_hdr.mh_data
#define m_type m_hdr.mh_type
#define m_flags m_hdr.mh_flags
#define m_nextpkt m_hdr.mh_nextpkt
#define m_act m_nextpkt
#define m_pkthdr M_dat.MH.MH_pkthdr
#define m_ext M_dat.MH.MH_dat.MH_ext
#define m_pktdat M_dat.MH.MH_dat.MH_databuf
#define m_dat M_dat.M_databuf
#define mtod(m, t) ((t)((m)->m_data))
#define dtom(x) ((struct mbuf *)((int)(x) & ~(MSIZE-1))) |
|