TCP/IP详解2 第2章 mbuf:存储器缓存 ,读书记录

mbuf:memory buffer 的简写

(以下内容抄书)

mbuf 结构定义:

/* 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; /* location of data */
short mh_type; /* type of data in this mbuf */
short mh_flags; /* flags; see below */
};
/* record/packet header in first mbuf of chain; valid if M_PKTHDR set */

struct pkthdr {
int len; /* total packet length */
struct ifnet *rcvif; /* rcv interface */
};

/* description 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_PKTHDR, !M_EXT */
} M_dat;
};


/

/* mbuf的头部信息 */
struct m_hdr {
       
struct       mbuf *mh_next;             /* 指向链中下一个mbuf的指针 */
       
struct       mbuf *mh_nextpkt;     /* 指向下一个链的指针 */
       
int        mh_len;                     /* mbuf中数据的长度(不包括头部) */
       
char    *mh_data;                     /* 指向数据区的指针 */
       
short       mh_type;                /* mbuf的数据类型,如MT_DATA*/
       
short       mh_flags;                      /* mbuf标识,具体定义见下 */
};
/* mbuf标识*/
#define       M_EXT          0x0001    /* has associated external storage */
#define       M_PKTHDR     0x0002    /* start of record */
#define       M_EOR          0x0004    /* end of record */
 
struct      pkthdr {
       
int        len;               /* 整个mbuf链表包含数据的总长度,在链表的第一个mbuf中维护一个带有总长度的分组首部的原因是,当需要总长度时可以避免查看所有mbuf中的mh_len来求和*/
       
struct       ifnet *rcvif;        /* 指向接收分组的接收接口结构的指针*/
};
 
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_PKTHDR, !M_EXT */
       } M_dat;
};


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值