免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: fanyunfei
打印 上一主题 下一主题

关于TCP/IPv2中struct mbuf问题 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2006-12-02 15:45 |只看该作者
很多人看书不看前言和序的,目录什么的也只为了查询才翻。

论坛徽章:
0
12 [报告]
发表于 2006-12-02 15:53 |只看该作者
有本 linux network,讲实现的,不过我没有买.感觉自己还没有到那程度,很多书都要看.

论坛徽章:
0
13 [报告]
发表于 2006-12-02 18:33 |只看该作者
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)))

论坛徽章:
5
IT运维版块每日发帖之星
日期:2015-08-06 06:20:00IT运维版块每日发帖之星
日期:2015-08-10 06:20:00IT运维版块每日发帖之星
日期:2015-08-23 06:20:00IT运维版块每日发帖之星
日期:2015-08-24 06:20:00IT运维版块每日发帖之星
日期:2015-11-12 06:20:00
14 [报告]
发表于 2006-12-02 19:48 |只看该作者
那是老的实现了.现在的版本都不使用了.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP