Netmap分析(三)
来源:互联网 发布:护腰带腰椎间盘 知乎 编辑:程序博客网 时间:2024/05/17 12:54
Netmap_linux.c
两个重要的结构
struct miscdevice netmap_cdevsw = { /* same name as FreeBSD */ MISC_DYNAMIC_MINOR, "netmap", &netmap_fops,};static struct file_operations netmap_fops = { .owner = THIS_MODULE, .open = linux_netmap_open, //malloc the private_data from memory .mmap = linux_netmap_mmap, //设置netmap内存映射 LIN_IOCTL_NAME = linux_netmap_ioctl, .poll = linux_netmap_poll, .release = linux_netmap_release,};
总控制函数
linux_netmap_ioctl(struct file *file, u_int cmd, u_long data /* arg */){ struct netmap_priv_d *priv = file->private_data; int ret = 0; union { struct nm_ifreq ifr; /* truct nmreq就是netmap内核与用户空间的消息结构体。两者的互动就靠它了。*/ struct nmreq nmr; } arg; size_t argsize = 0; switch (cmd) { case NIOCTXSYNC: case NIOCRXSYNC: break; case NIOCCONFIG: argsize = sizeof(arg.ifr); break; default: argsize = sizeof(arg.nmr); break; } if (argsize) { if (!data) return -EINVAL; bzero(&arg, argsize);/*个人理解为将netmap_ring中的数据拷贝到kernel*/ if (copy_from_user(&arg, (void *)data, argsize) != 0) return -EFAULT; } //重要操作 ret = netmap_ioctl(priv, cmd, (caddr_t)&arg, NULL);/*个人理解为kernel将中的数据拷贝到netmap_ring*/ if (data && copy_to_user((void*)data, &arg, argsize) != 0) return -EFAULT; return -ret;}
0 0
- Netmap分析(三)
- Netmap分析(一)
- Netmap分析(二)
- Netmap分析(四)
- Netmap分析(五)
- Netmap分析(六)
- netmap源码分析(三)内核态收包过程
- netmap源码分析(一)插入 netmap 代码到驱动程序
- netmap分析(1)
- netmap分析(1)
- netmap分析(1)
- netmap源码分析(四)用户态收包过程
- netmap源码分析(五)ioctl 注册过程
- netmap
- netmap
- netmap源码分析(二)内核态关键结构的初始化
- netmap分析(2)-原理分析之内存管理
- netmap分析(2)-原理分析之内存管理
- 利用tomcat-redis-session-manager解决tomcat的分布式session问题
- Objective-C 类别(category)和扩展(Extension)
- java常量池技术
- 数据库文件的导入
- web 三层架构开发MVC
- Netmap分析(三)
- BestCoder Round #81 (div.1) C Robot
- 图像处理和图像识别中常用的OpenCV函数
- pt-query-digest+Anemometer实现MySQL慢查询可视化
- [Contest] Hnoi2016 题目汇总
- 读 古典《你的生命有什么可能》第一章读后感读后感
- 详解Hive的架构、工作原理及安装步骤
- Eclipse使用技巧 - 7. Eclipse改变Console字体大小
- BestCoder Round #81 (div.2)的题目 HDU5671 HDU 5670