- 1、本文档共28页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
PF_RING 学习笔记
PF_RING 源码学习笔记
一、引言
在 PF_RING 相关的文档中,作者宣称极大地提供了包捕获的性能,故利用
上班的时间打了点酱油,大致走读了下 PF_RING (v4.1 )的源码,根据以往的教
训,光走读而不写下点什么,数月过个,忘个精光,这一次写下这个走读笔记,
希望效果有所改观。
另外,笔者对kernel理解尚浅,很多地方( 比如锁的使用、mmap 的实现)都不
是很清楚,所以这些地方被一带而过了,等以后有了更深的了解后,再回头补充
这个笔记, 对于笔记中的错误和疏漏,也恳请大家指正,邮箱:d00fy@163.com
二、模块初始化
static int __init ring_init(void)
{
int i, rc;
printk([PF_RING] Welcome to PF_RING %s ($Revision: %s$)\n
(C) 2004-10 L.Deri deri@\n,
RING_VERSION, SVN_REV);
/* 注册PF_RING协议 */
if((rc = proto_register(ring_proto, 0)) != 0)
return(rc);
/*初始化4个双向循环队列*/
INIT_LIST_HEAD(ring_table);
INIT_LIST_HEAD(ring_cluster_list);
INIT_LIST_HEAD(ring_aware_device_list);
INIT_LIST_HEAD(ring_dna_devices_list);
for (i = 0; i MAX_NUM_DEVICES; i++)
INIT_LIST_HEAD(device_ring_list[i]);
/* 注册PF_RING socket, 用于用户态和内核态通信,类似于UNIX 域套接字 */
sock_register(ring_family_ops);
/* 注册设备通知的函数,当网卡down、up 时,ring_netdev_notifier将被调用*/
register_netdevice_notifier(ring_netdev_notifier);
/* Sanity check */
if(transparent_mode driver2pf_ring_non_transparent)
transparent_mode = standard_linux_path;
printk([PF_RING] Ring slots %d\n, num_slots);
printk([PF_RING] Slot version %d\n,RING_FLOWSLOT_VERSION);
printk([PF_RING] Capture TX %s\n,
enable_tx_capture ? Yes [RX+TX] : No [RX only]);
printk([PF_RING] Transparent Mode %d\n,
transparent_mode);
printk([PF_RING] IP Defragment %s\n,
enable_ip_defrag ? Yes : No);
printk([PF_RING] Initialized correctly\n);
ring_proc_init();
register_device_handler();
pfring_enabled = 1;
return 0;
}
下面分析这5 双向循环队列的作用:
ring_table: 存放所有的ring sockets
ring_table struct ring_element {
struct list_head list;
struct sock *sk;
}
ring_cluster_list:存放所有的cluster,每一个cluster 以cluster_id 标识,最重要的
成员是sk,包含一组struct sock * 。
typedef struct {
struct ring_cluster cluster;
struct list_head list;
} ring_cluster_elemen
您可能关注的文档
- 质量管理体系运行报告范本.pdf
- 最完整的CCNA学习笔记.pdf
- Fusion360学习笔记.pdf
- 北京协和医院科普工作汇报.pdf
- 江苏镇江绿地中央广场综合体项目营销工作汇报_44p_2012年.pdf
- 2014东风汽车公司十堰基地创模及环保工作汇报.pdf
- 进一步完善国有企业激励约束机制的思考.pdf
- 基于协同效应和团队分享的员工激励机制设计.pdf
- 建设工程安全管理创新激励机制研究_乐云.pdf
- Contiki学习笔记(重写版).pdf
- 《中国通史》文字稿第12集春秋争霸.docx
- java教程--类与对象-讲义课件(演讲稿).ppt
- Vue应用程序开发-(1).pptx
- 东北师大版社劳动实践与评价指导手册一年级上册主题二活动一寻找五彩的树叶课时课件.pptx
- 外研版英语四年级上册 Module 4 Unit 2 How much is it单元教学设计.docx
- 外研版英语四年级上册Module 4 单元整体教学设计.docx
- 6《上课之前》课件 鄂科技版 心理健康教育一年级.pptx
- 《1~5的认识》说课课件(共25张PPT)人教版一年级上册数学.pptx
- 六《解决问题(1)》说课课件 人教版 三年级上册数学.pptx
- 七《解决问题》说课课件 人教版 二年级上册数学.pptx
文档评论(0)