博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
慢慢欣赏linux 网络协议栈一 全景图
阅读量:4070 次
发布时间:2019-05-25

本文共 2839 字,大约阅读时间需要 9 分钟。

用户态软件	/\	||	\/系统库函数	/\	||	\/C标准库或者glibc	/\	|| 系统调用	\/内核态系统调用接口	/\	||	\/内核协议栈L3到最上层	/\	||	\/L2协议栈以及驱动	/\	||	\/L1硬件网卡NIC

 

网络初始化入口

int __init net_dev_init(void)	dev_proc_init()	=>int __init dev_proc_init(void)		return register_pernet_subsys(&dev_proc_ops);			static struct pernet_operations __net_initdata dev_proc_ops = {				.init = dev_proc_net_init,				.exit = dev_proc_net_exit,			};		=>int register_pernet_subsys(struct pernet_operations *ops)			error =  register_pernet_operations(first_device, ops);			=>int register_pernet_operations(struct list_head *list, struct pernet_operations *ops)				error = __register_pernet_operations(list, ops);				=>int __register_pernet_operations(struct list_head *list, struct pernet_operations *ops)					err = ops_init(ops, &init_net);					=>int ops_init(const struct pernet_operations *ops, struct net *net)						return ops->init(net);						=>int __net_init dev_proc_net_init(struct net *net)							proc_net_fops_create(net, "dev", S_IRUGO, &dev_seq_fops)							proc_net_fops_create(net, "softnet_stat", S_IRUGO, &softnet_seq_fops)							proc_net_fops_create(net, "ptype", S_IRUGO, &ptype_seq_fops)	netdev_kobject_init()	=>int netdev_kobject_init(void)		return class_register(&net_class);//在/sys/class下注册net类			INIT_LIST_HEAD(&ptype_all);	for (i = 0; i < PTYPE_HASH_SIZE; i++)		INIT_LIST_HEAD(&ptype_base[i]);			register_pernet_subsys(&netdev_net_ops)		struct pernet_operations __net_initdata netdev_net_ops = {			.init = netdev_init,			.exit = netdev_exit,		};		... ...//同register_pernet_subsys(&dev_proc_ops);			=>int __net_init netdev_init(struct net *net)				INIT_LIST_HEAD(&net->dev_base_head);				net->dev_name_head = netdev_create_hash();				net->dev_index_head = netdev_create_hash();		for_each_possible_cpu(i)		struct softnet_data *queue;		queue = &per_cpu(softnet_data, i);		skb_queue_head_init(&queue->input_pkt_queue);		queue->completion_queue = NULL;		INIT_LIST_HEAD(&queue->poll_list);		queue->backlog.poll = process_backlog;		queue->backlog.weight = weight_p;		queue->backlog.gro_list = NULL;		queue->backlog.gro_count = 0;			register_pernet_device(&loopback_net_ops)		register_pernet_device(&default_device_ops)		open_softirq(NET_TX_SOFTIRQ, net_tx_action);	open_softirq(NET_RX_SOFTIRQ, net_rx_action);		hotcpu_notifier(dev_cpu_callback, 0);	dst_init();	dev_mcast_init();

理解 Linux 网络栈(1):Linux 网络协议栈简单总结

https://www.cnblogs.com/sammyliu/p/5225623.html

网络设备模块初始化(net/core/dev.c/net_dev_init)

https://blog.csdn.net/sun172270102/article/details/80643164

register_pernet_subsys相关学习

https://blog.csdn.net/lickylin/article/details/18013879

Linux 以太网驱动

https://blog.csdn.net/dongkun152/article/details/74906670

环回设备接口(loopback)上如何发送和接收数据报      //上下文的网口驱动文章可以学习一下

http://blog.chinaunix.net/uid-26675482-id-3067061.html

suiming2005的ChinaUnix博客

http://blog.chinaunix.net/uid-23250294-id-5790231.html

你可能感兴趣的文章
【数据结构周周练】002顺序表与链表
查看>>
C++报错:C4700:使用了非初始化的局部变量
查看>>
【数据结构周周练】003顺序栈与链栈
查看>>
C++类、结构体、函数、变量等命名规则详解
查看>>
C++ goto语句详解
查看>>
【数据结构周周练】008 二叉树的链式创建及测试
查看>>
《软件体系结构》 第九章 软件体系结构评估
查看>>
《软件体系结构》 第十章 软件产品线体系结构
查看>>
《软件过程管理》 第六章 软件过程的项目管理
查看>>
《软件过程管理》 第九章 软件过程的评估和改进
查看>>
《软件过程管理》 第八章 软件过程集成管理
查看>>
分治法 动态规划法 贪心法 回溯法 小结
查看>>
《软件体系结构》 练习题
查看>>
《数据库系统概论》 第一章 绪论
查看>>
《数据库系统概论》 第二章 关系数据库
查看>>
《数据库系统概论》 第三章 关系数据库标准语言SQL
查看>>
SQL语句(二)查询语句
查看>>
SQL语句(六) 自主存取控制
查看>>
《计算机网络》第五章 运输层 ——TCP和UDP 可靠传输原理 TCP流量控制 拥塞控制 连接管理
查看>>
堆排序完整版,含注释
查看>>