目录
3:register_pernet_subsys(&netdev_net_ops)
4:open_softirq(NET_TX_SOFTIRQ, net_tx_action)
5: open_softirq(NET_TX_SOFTIRQ, net_rx_action)
Net_dev_init(/net/core/dev.c)
该函数所用的全局变量
1:dev_proc_ops
2:first_device 链表
3:net_namespace_list 网络设备链表用于寻找 net设备
4:net_ns_type_operations
1:Dev_proc_init()
其实这个函数就是在文件系统中 proc 中去得到相应的文件
设备功能初始化,其实在内部执行的为register_pernet_subsys(&dev_proc_ops)
在这个函数中其实是执行的 register_pernet_operations(first_device, ops); 这其中其实first_device其实就是一个链表,初始化一个链表的结构体。
这个函数的内部就是__register_pernet_operations(list, ops);
----- 目前假定函数宏CONFIG_NET_NS为1
执行 list_add_tail(&ops->list, list) 表明将 first_device 加入到 dev_proc_ops的list结构中
For_each_net(net)目前看是在寻找网络,在可执行的网络中,执行ops_init---
其实这个函数目的就是执行Ops->init(net), 寻找加入到net_namespace_list中的网络设备。
他就是执行dev_proc_ops下面的init 函数 dev_proc_net_init(struct net* net)
Proc_net_fops_creat( ) ------- 实际调用 proc_create(name, mode, net->proc_net, fops)
这个其实就是在proc 下面创建文件。对应的dev和 softnet_stat, ptype。
Proc/net/ 下对应的 dev, softnet_stat, ptype, wireless.
Proc/ net下面可以看到很有有用的信息 上面的几个文件对应的就是可以查看的信息。
2:netdev_kobject_init()
在内部执行的为 kobj_ns_type_register(&net_ns_type_operations)
3:register_pernet_subsys(&netdev_net_ops)
暂时没有关注。
4:open_softirq(NET_TX_SOFTIRQ, net_tx_action)
5: open_softirq(NET_TX_SOFTIRQ, net_rx_action)
接受网络数据的中断,先学习哈open_softirq函数
5.1:中断的下半部
对于一个中断分为上半部和下半部,上半部处理对时间特别敏感一般来说和硬件相关的,并保证不被其他中断打断的任务。而实现下半部分的方法目前有三种方法,软中断,tasklet,工作队列,此处只是用于软中断。
软中断其实包含了如下的结构:
1:注册软中断:open_softirq
2: 触发软中断: raise_softirq
3: 执行软中断: do_softirq:
4: 结束软中断
其中初始化时 有如下的init:
for_each_possible_c