学习Linux-4.12内核网路协议栈(1.4)——协议栈的初始化(proto_init)
来源:互联网 发布:sql server 2008 视图 编辑:程序博客网 时间:2024/06/03 20:01
这篇文章主要分析proto_init过程,它完成协议相关proc文件的创建
3241 static __net_initdata struct pernet_operations proto_net_ops = {3242 .init = proto_init_net,3243 .exit = proto_exit_net,3244 };
3246 static int __init proto_init(void)3247 {3248 return register_pernet_subsys(&proto_net_ops);3249 }32503251 subsys_initcall(proto_init);
948 int register_pernet_subsys(struct pernet_operations *ops) 949 { 950 int error; 951 mutex_lock(&net_mutex); 952 error = register_pernet_operations(first_device, ops); 953 mutex_unlock(&net_mutex); 954 return error; 955 } 956 EXPORT_SYMBOL_GPL(register_pernet_subsys);
该函数的主要作用是将一个网络协议模块添加到每一个网络命令空间中,然后再执行其ops->init程序进行初始化,一般其ops->init会在其对应的proc目录下,生成一个网络协议模块对应的proc文件或proc目录,并执行一些协议初始化相关的函数。
关于register_pernet_subsys函数可以参考这篇文章
3227 static __net_init int proto_init_net(struct net *net)3228 {3229 if (!proc_create("protocols", S_IRUGO, net->proc_net, &proto_seq_fops))3230 return -ENOMEM;32313232 return 0;3233 }32343235 static __net_exit void proto_exit_net(struct net *net)3236 {3237 remove_proc_entry("protocols", net->proc_net);3238 }
proto_init_net和proto_exit_net只进行了protocols proc文件的创建,里面可以查看协议相关的一些信息:
## cat /proc/net/protocols
protocol size sockets memory press maxhdr slab module cl co di ac io in de sh ss gs se re sp bi br ha uh gp em
PPPOE 552 0 -1 NI 0 no pppoe n n n n n n n n n n n n n n n n n n n
SCTPv6 1048 1 0 no 0 yes sctp y y y y y y y y y y y y n y y y y y y
SCTP 928 0 0 no 0 yes sctp y y y y y y y y y y y y n y y y y y y
PACKET 896 26 -1 NI 0 no kernel n n n n n n n n n n n n n n n n n n n
PINGv6 752 0 -1 NI 0 yes kernel y y y n n y n n y y y y n y y y y y n
RAWv6 752 0 -1 NI 0 yes kernel y y y n y y y n y y y y n y y y y n n
UDPLITEv6 744 0 -1 NI 0 yes kernel y y y n y y y n y y y y n n y y y y n
UDPv6 744 3 15 NI 0 yes kernel y y y n y n y n y y y y n n y y y y n
TCPv6 1392 1 6 no 304 yes kernel y y y y y y y y y y y y y n y y y y y
UNIX 640 46 -1 NI 0 yes kernel n n n n n n n n n n n n n n n n n n n
UDP-Lite 624 0 -1 NI 0 yes kernel y y y n y y y n y y y y y n y y y y n
PING 592 0 -1 NI 0 yes kernel y y y n n y n n y y y y n y y y y y n
RAW 600 0 -1 NI 0 yes kernel y y y n y y y n y y y y n y y y y n n
UDP 624 27 15 NI 0 yes kernel y y y n y n y n y y y y y n y y y y n
TCP 1272 15 6 no 304 yes kernel y y y y y y y y y y y y y n y y y y y
NETLINK 600 9 -1 NI 0 no kernel n n n n n n n n n n n n n n n n n n n
看来没什么实质性的操作 , 还是接下来看看inet_init函数吧
- 学习Linux-4.12内核网路协议栈(1.4)——协议栈的初始化(proto_init)
- 学习Linux-4.12内核网路协议栈(1.3)——协议栈的初始化(sock_init)
- 学习Linux-4.12内核网路协议栈(1.2)——协议栈的初始化(sk_buff)
- 学习Linux-4.12内核网路协议栈(1.1)——系统的初始化(do_initcalls)
- 学习Linux-4.12内核网路协议栈(1.5)——协议栈的初始化(inet_init主要数据结构)
- 学习Linux-4.12内核网路协议栈(1.6)——协议栈的初始化(inet_init实现过程)
- 学习Linux-4.12内核网路协议栈(3.2)——网路层的发包处理
- 学习Linux-4.12内核网路协议栈(1.7)——网络设备的初始化(struct net_device)
- 学习Linux-4.12内核网路协议栈(3.1)——网路层的收包处理
- 学习Linux-4.12内核网路协议栈(1.8)——网络设备驱动模块的加载
- 学习Linux-4.12内核网路协议栈(2.4)——接口层数据包的发送
- 学习Linux-4.12内核网路协议栈(0)——前言
- 学习Linux-4.12内核网路协议栈(2.2)——接口层数据包的接收(上半部)
- 学习Linux-4.12内核网路协议栈(2.3)——接口层数据包的接收(下半部)
- 学习Linux-4.12内核网路协议栈(2.1)——接口层加快传输速率的特性
- Linux内核-协议栈-初始化流程分析
- 了解linux网络协议栈(一)——内核模块初始化
- linux 内核协议栈
- redis数据复制-redis系列教程
- Mybatis 简介
- 阿里巴巴2016前端开发工程师笔试一
- 网易云音乐使用中显示"请切换输出设备"
- Mysql学习历程基本语法(3)--表操作
- 学习Linux-4.12内核网路协议栈(1.4)——协议栈的初始化(proto_init)
- 在HBase的shell命令行界面输入错误项按"退格键"删除,却怎么也删除不了
- TCP中的URG与PSH
- C++静态库
- 51nod1869 那些年,我们一起讲的故事
- 算法概论第八章练习题 8.14
- 仿自qsc的题解Markdown格式
- TCP四次挥手
- UVA