![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Linux网络源码学习笔记v2.6.20
文章平均质量分 80
技术人生LJF
空杯心态
展开
-
网络设备模块初始化(net_dev_init)
net_dev_init《net/core/dev.c》dev_proc_init //proc/net/dev 可以显示网络接口的一些收发包信息//proc/net/softnet_stat 显示每个CPU处理接收包的统计信息netdev_sysfs_init//sys/class/net/xxx/*** 显示了各种设备的一些属性信息,比如IP、掩码、是否有载波等INIT_LI原创 2014-11-21 07:14:43 · 5790 阅读 · 0 评论 -
路由模块
一、初始化inet_initip_initip_rt_init//计算随机数,该随机数在路由缓存生成hash关键字时做为一个参数使用,目//的是为了防止DDOS攻击,该随机值后期在每次缓存刷新时也会重新生成。rt_hash_rnd = (int) ((num_physpages ^ (num_physpages>>8)) ^(jiffies ^ (jiffies >> 7)));原创 2015-04-27 01:41:12 · 4337 阅读 · 1 评论 -
ARP邻居模块
一、DARP邻居模块初始化//IPV4模块初始化inet_init......//ARP邻居模块初始化arp_init//邻居表初始化neigh_table_init(&arp_tbl);//进行arp邻居表进行初始化neigh_table_init_no_netlink(tbl);//将arp邻居表中参数结构对象的引用置为1atomic_set(&tbl->parms.r原创 2015-03-30 23:26:38 · 2743 阅读 · 0 评论 -
IP组播
一、IGMP主机发送报告1、用户层客户端实现加入组播组的代码片段。struct ip_mreq mreq;mreq.imr_multiaddr.s_addr = inet_addr(MCAST_ADDR); /*多播地址*///这里当网络接口为默认的时候并不是指绑定任何接口的意思,而是根据路由表查找当前的//多播地址是否含有路由项,之后使用该路由项的出口设备做为接口,在有此系统上没有添原创 2015-03-08 22:11:46 · 11247 阅读 · 1 评论 -
HTB分层令牌桶排队规则分析
之前通过《默认FIFO_FAST出口排队规则分析》、《ingress入口排队规则分析》分析,已经对排队规则的基础架框有了简单的了解。那两种排队规则都是无类的,这里选出可以分类的HTB排队规则进行分析。当前实例分析的基本对象关联图一、当前分析的配置范例//在eth0设备上创建一个根HTB排队规则,当未匹配任何过滤器时,将报文放入ID为20//的分类中tc qdisc add de原创 2014-12-14 04:16:39 · 6861 阅读 · 1 评论 -
linux_VLAN
一、VLAN模块初始化vlan_proto_init//在/proc/net/目录下创建vlan目录,之后在vlan目录下创建一个config条目//读取/proc/net/vlan/config可以显示所有vlan类型虚拟接口的vlan_id、对应的真实接口vlan_proc_init()proc_vlan_dir = proc_mkdir(name_root, proc_net);原创 2015-01-11 17:04:27 · 4234 阅读 · 0 评论 -
IP层转发
//在inet_init时,已经使用dev_add_pack(&ip_packet_type)向ptype_base中注册二层负载//IPv4报文处理回调,当netif_receive_skb进行二层包处理时,会遍历所有ptype_base列//表,找到对应的三层协议,并调用回调进行处理。这里ip_rcv就是IPV4的接收处理回调ip_rcv//如果目地MAC不是自身,则将包丢弃,不是自身原创 2015-01-29 22:50:16 · 823 阅读 · 0 评论 -
IP层输出
根据《深入理解LINUX网络技术内幕》描述,四层使用IP层输出主要分为两大类处理。函数分别为ip_append_data、ip_push_pending_frames的组合发送,以及ip_queue_xmit的发送。当前仅对这两种输出情况进行分析。其ip_append_data、ip_push_pending_frames组合最常用于UDP报文发送,此时ip_append_data会根据路原创 2015-01-29 22:53:09 · 2121 阅读 · 0 评论 -
IP层输入
//在inet_init时,已经使用dev_add_pack(&ip_packet_type)向ptype_base中注册二层负载//IPv4报文处理回调,当netif_receive_skb进行二层包处理时,会遍历所有ptype_base列//表,找到对应的三层协议,并调用回调进行处理。这里ip_rcv就是IPV4的接收处理回调ip_rcv//如果目地MAC不是自身,则将包丢弃,不是自身原创 2015-01-29 22:49:21 · 1044 阅读 · 0 评论 -
ingress入口排队规则分析
一、ingress入口排队规则模块初始化ingress_module_init //注册INGRESS类型排队规则 register_qdisc(&ingress_qdisc_ops) write_lock(&qdisc_mod_lock); //查找如果排列规则类链表中如果已经注册,则直接跳出 for (qp = &qdisc_base; (q = *qp) != N原创 2014-12-02 07:22:08 · 4121 阅读 · 0 评论 -
默认FIFO_FAST出口排队规则分析
一、初始化当网络接口使用ifup命令启动后,就会触发dev_open。//设备开启dev_open ...... //设备激活 dev_activate(dev); //当前还没有设置出口排队规则 if (dev->qdisc_sleeping == &noop_qdisc) //当前设备标记需要发送队列 if (dev->tx_queue_len) //创原创 2014-11-28 23:56:52 · 2208 阅读 · 0 评论 -
接口设备发包
//网络接口发送数据包(转发或由本地输出都会调用此接口函数)dev_queue_xmit //检测当前报文是GSO数据包,同时物理设备不支此种GSO的分片聚合,或者当前报 //文已经不需要物理设备进行校验和,则直接跳到gso标签,后面在dev_hard_start_xmit //中会进行软件实现GSO处理。 rv = netif_needs_gso(dev, skb) //s原创 2014-11-23 06:56:05 · 2392 阅读 · 1 评论 -
网桥处理
桥模块初始化br_init //创建BSPAN协议,同时设置了接收处理回调函数为br_stp_rcv br_stp_sap = llc_sap_open(LLC_SAP_BSPAN, br_stp_rcv); sap = llc_sap_alloc() sap->laddr.lsap = lsap; sap->rcv_func = func; llc_add_sap(sa原创 2014-11-21 07:46:33 · 3389 阅读 · 0 评论 -
网卡驱动收包
NAPI方式处理数据包接收(中断与轮询配合,由硬件中断触发接收处理,之后关闭网卡硬中断,当处理完成后,再将网卡硬中断开启,在高负荷工作情况下,可以减少因频繁切换中断上下文造成的CPU开销)e100网卡驱动接收中断触发e100_intr//e100网卡驱动中,在如下流程中设置中断回调//netdev->open (当应用层执行ifup时,调用了设备回调netdev->open)//e1原创 2014-11-21 07:20:40 · 1953 阅读 · 0 评论 -
Broadcom方案PPPoE实现分析
一、用户程序PPPD初始化main//如果设置了相关回调,则调用回调告知当前程序运行的阶段进展new_phase(PHASE_INITIALIZE);phase = p;//如果有new_phase_hook回调,则调用new_phase_hook回调告知当前处理//到了哪个阶段。if (new_phase_hook)(*new_phase_hook)(p);//如果phas原创 2015-05-16 04:07:21 · 6354 阅读 · 0 评论