Netmap分析(二)
2016-04-23 10:10
281 查看
netmap_linux.c:
//初始化netmap static int linux_netmap_init(void) { int err; /* Errors have negative values on linux. */ /* 申请netmap的各个内存池,包括netmap_if,netmap_ring,netmap_buf以及内存池的管理结构 */ err = -netmap_init(); //netmap.c if (err) { return err; } /* * 驱动注册程序 * * Returns 0 on success, negative on failure */ err = nm_os_pt_memdev_init(); if (err) { return err; } //初始化virtual passthrough netmap err = ptnet_init(); if (err) { nm_os_pt_memdev_uninit(); return err; } return 0; }
netmap.c
//真正的初始化函数 Int netmap_init(void) { int error; NMG_LOCK_INIT(); //初始化锁和引用计数 error = netmap_mem_init(); if (error != 0) goto fail; /* * MAKEDEV_ETERNAL_KLD avoids an expensive check on syscalls * when the module is compiled in. * XXX could use make_dev_credv() to get error number */ /* Make_dev_credf函数将设置错误,并返回第一个参数。 这依赖于'error'局部变量的可用性。 对于老Linux系统不具备的devfs,生成 在系统日志消息,以便系统管理员知道为了创建/ dev/netmap要运行的命令 */ /* netmapcdevsw为对应的设备结构体定义,netmapfops为对应的操作函数。 */ netmap_dev = make_dev_credf(MAKEDEV_ETERNAL_KLD, &netmap_cdevsw, 0, NULL, UID_ROOT, GID_WHEEL, 0600, "netmap"); if (!netmap_dev) goto fail; //初始化netmap_bridge并分配内存 error = netmap_init_bridges(); if (error) goto fail; #ifdef __FreeBSD__ nm_os_vi_init_index(); #endif error = nm_os_ifnet_init(); if (error) goto fail; printf("netmap: loaded module\n"); return (0); fail: netmap_fini(); return (EINVAL); /* may be incorrect */ }
相关文章推荐
- ruby on rails开发环境安装血泪史
- iOS学习笔记41-Swift(一)基础部分
- Nginx下TIME_WAIT过多的调优
- 编程之美之阶乘
- 成都Uber优步司机奖励政策(4月23日)
- GPRS网络条件下TCP、UDP的比较
- LVS
- iOS学习笔记41-Swift(一)基础部分
- 路漫漫其修远兮,吾将上下而求索——小酌重构系列
- Netmap分析(一)
- flask-admin众博客概述
- iOS字符串的方法
- NYOJ 20 吝啬的国度 vector 容器 代码(思路)带解释
- ubuntu 16.04之初体验(多图)
- OD调试一个小程序的思考总结
- Prime Ring Problem
- [二分图 费用流] BZOJ 4514 [Sdoi2016]数字配对
- 关于(A/B)%C 以及默慈金数&&HDU 5673 Robot
- poj-3669-Meteor Shower
- 【杭电】[1872]稳定排序