KNI内核态代码流程:
module_init(kni_init);初始化 kni_init 模块;
kni_init :
1、检查 kthread 、 carrier 配置;
2、register_pernet_subsys(&kni_net_ops):将kni_net_ops添加到到*first_device = &pernet_list链表(需要使用网络子模块的协议栈模块统一存放的地址,注册到该链表的节点会遍历所有已创建的网络命名空间进行初始化,当新的网络命名空间创建时,网络命名空间将遍历该链表对节点上的协议栈模块进行初始化),并对kni在命名空间进行在网络子模块上的初始化;-----网络命名空间为对网络子模块统一管理的空间
static struct pernet_operations kni_net_ops = {
.init = kni_init_net,
.exit = kni_exit_net,
#ifdef HAVE_SIMPLIFIED_PERNET_OPERATIONS
.id = &kni_net_id,
.size == sizeof(struct kni_net),
#endif
};
kni_init_net:
申请kni在网络命名空间的私有数据空间 struct kni_net *knet ,由kni_net_ops的id标志在网络命名空间中的地址;
初始化kni的私有数据空间 knet 的线程互斥锁k
DPDK KNI内核态代码流程
猜你喜欢
转载自blog.csdn.net/qq_29044159/article/details/103187025
今日推荐
周排行