共 11 篇文章
显示摘要每页显示  条
bp->rx_ring = ssb_dma_alloc_consistent(bp->sdev, size, &bp->rx_ring_dma, gfp);bw32(bp, B44_DMARX_ADDR, bp->rx_ring_dma + bp->dma_offset);网卡读取B44_DMARX_ADDR与B44_DMARX_STAT寄存器,得到下一个处理的struct dma_desc,然后根据dma_desc中的addr找到报文缓冲区,通过DMA处理器将网卡收到报文拷贝到addr地址处...
void __napi_schedule(struct napi_struct *n)注意到这里在interrupt时,会向poll_list尾部加入一个napi_struct,并引起软中断,在软中断处理函数中,会从poll_list头部移除一个napi_struct,进行处理,理论上说,硬件中断加入的数据在其引起的软中断中被处理。可以看到,查询了四种中断:ISTAT_TX、ISTAT_TO、ISTAT_RX、ISTAT_ERRORS.#define ...
在netif_receive_skb()函数中,可以看出处理的是像ARP、IP这些链路层以上的协议,那么,链路层报头是在哪里去掉的呢?list_for_each_entry_rcu(ptype,&ptype_base[ntohs(type) &PTYPE_HASH_MASK], list)arp = arp_hdr(skb);sha= arp_ptr;缓存的路由项在内核中组织成hash表的形式,因此在查询时,先算出的hash值,再用该项- rt_hash_tab...
linux kernel 处理网络数据包流程。
linux中钩子函数的理解。而netfilter的返回值有5种:返回值 含义NF_DROP 丢弃该数据包NF_ACCEPT 保留该数据包NF_STOLEN 忘掉该数据包NF_QUEUE 将该数据包插入到用户空间NF_REPEAT 再次调用该hook函数。NF_IP6_PRI_FIRST = INT_MINNF_IP6_PRI_CONNTRACK = -200NF_IP6_PRI_MANGLE = -150NF_IP6_PRI_NAT_DST = -100NF_IP6_PRI_FILTER = 0NF_IP6_PR...
// 执行nf_hook_slow进行检查return nf_hook_slow(pf, hook, pskb, indev, outdev, okfn, thresh);}nf_hook_thresh函数定义如下,和2.4的区别是增加了一个参数hook_thresh(hook阈值):int nf_hook_slow(int pf, unsigned int hook, struct sk_buff **pskb,struct net_device *indev,struct net_device *outdev,int (*okfn)(struct sk_buff *),i...
循环链表 list_add_rcu()list_add_tail_rcu()list_replace_rcu()list_del_rcu()list_for_each_entry_rcu()双向链表 hlist_add_after_rcu()hlist_add_before_rcu()hlist_add_head_rcu()hlist_replace_rcu()注意,list_replace_rcu(), list_del_rcu(), hlist_replace_rcu(), 以及 hlist_del_rcu() 增加了一些复杂度。问题6:如果 rcu_read_lock()...
二、用户空间ioctl控制函数调用形式 通过man 2 ioctl命令查看ioctl函数的调用形式类似如下: #include <sys/ioctl.h> int ioctl(int d, int request, ...); 其中d就是用户程序打开设备时使用open函数返回的文件描述符,request就是用户程序对设备的控制命令,至于后面的省略号,则是一些补充参数,一般最多一个,有或没有是和request的意...
int kobject_init_and_add(struct kobject *kobj, struct kobj_type *ktype, struct kobject *parent, const char *fmt, ...) { va_list args;void kobject_del(struct kobject *kobj) { if (!//删除sys目录相关文件 kobj->state_in_sysfs = 0; kobj_kset_leave(kobj);//kset链表中删除kobj成员 k...
linux设备驱动模型。既然已经建立了一个组织所有设备和驱动的树状结构,用户就可以通过这棵树去遍历所有的设备,建立设备和驱动程序之间的联系,根据类型不同也可以对设备进行归类,这样就可以更清晰的去“看”这颗枝繁叶茂的大树。block目录是从块设备的角度来组织设备;bus目录是从系统总线这个角度来组织设备,这里的总线可以是具有实际意义...
帮助 | 留言交流 | 联系我们 | 服务条款 | 下载网文摘手 | 下载手机客户端
北京六智信息技术股份有限公司 Copyright© 2005-2024 360doc.com , All Rights Reserved
京ICP证090625号 京ICP备05038915号 京网文[2016]6433-853号 京公网安备11010502030377号
返回
顶部