DPDK KNI内核态代码流程

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

猜你喜欢

转载自blog.csdn.net/qq_29044159/article/details/103187025