首页
Python
Java
前端
数据库
Linux
Chatgpt专题
开发者工具箱
netdev专题
NETDEV 协议 七
这部分内容在于说明socket创建后如何被内核协议栈访问到,只关注两个问题:sock何时插入内核表的,sock如何被内核访问的。对于核心的sock的插入、查找函数都给出了流程图。 sock如何插入内核表 socket创建后就可以用来与外部网络通信,用户可以通过文件描述符fd来找到要操作的socket,内核则通过查表来找到要操作的socket。这意味着socket创建时会在文件系统中生
阅读更多...
NETDEV 协议 六
杂谈一:重复地址检测 Linux协议栈中处理重复地址检测报文的是arp_process()中的一段代码,RFC2131是DHCP的草案,相应的sip==0是DHCP服务器用来检测它所分发的地址是否重复的。 /* Special case: IPv4 duplicate address detection packet (RFC2131) */if (sip == 0) {if (
阅读更多...
NETDEV 协议 五
这篇是关于IP层协议接收报文时的处理,重点说明了路由表的查找,以及IP分片重组。 ip_rcv进入IP层报文接收函数 丢弃掉不是发往本机的报文,skb->pkt_type在网卡接收报文处理以太网头时会根据dst mac设置,协议栈的书会讲不是发往本机的广播报文会在二层被丢弃,实际上丢弃是发生在进入上层之初。 if (skb->pkt_type == PACKET_OTHERHO
阅读更多...
NETDEV 协议 四
内核版本:2.6.34 NetFilter在2.4.x内核中引入,成为linux平台下进行网络应用的主要扩展,不仅包括防火墙的实现,还包括报文的处理(如报文加密、报文分类统计等)等。 NetFilter数据结构 勾子struct nf_hook_ops[net\filter\core.c] struct nf_hook_ops {struct list_hea
阅读更多...
NETDEV 协议 二
路由表 在内核中存在路由表fib_table_hash和路由缓存表rt_hash_table。路由缓存表主要是为了加速路由的查找,每次路由查询都会先查找路由缓存,再查找路由表。这和cache是一个道理,缓存存储最近使用过的路由项,容量小,查找快速;路由表存储所有路由项,容量大,查找慢。 首先,应该先了解路由表的意义,下面是route命令查看到的路由表: Destination
阅读更多...
NETDEV 协议
什么是NAPI NAPI是linux一套最新的处理网口数据的API,linux 2.5引入的,所以很多驱动并不支持这种操作方式。简单来说,NAPI是综合中断方式与轮询方式的技术。数据量很低与很高时,NAPI可以发挥中断方式与轮询方式的优点,性能较好。如果数据量不稳定,且说高不高说低不低,则NAPI会在两种方式切换上消耗不少时间,效率反而较低一些。 下面会用到netdev_priv()这个
阅读更多...
NETDEV WATCHDOG: ethx (xxx): transmit queue 0 timed out 分析
platform: 高通 msm-3.18 kernel。 mac: 高通ethernet mac。 phy: Ti dp83。 kernel log 如下: [ 451.647838] IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready [ 462.010112] ------------[ cut here ]---
阅读更多...
linux: network: sysctl: netdev_budget_usecs的出现
这个参数就是为了在CPU于延迟直接做trade-off的一个参数,在Redhat的性能文档里有提,如果相应的计数有增加,就需要调整这个参数。 下面这个修改是,将原来的固定值改成了可修改的一个值。 commit 7acf8a1e8a28b3d7407a8d8061a7d0766cfac2f4Author: Matthew Whitehead <tedheadster@gmail.com>Da
阅读更多...
【C语言】linux内核netdev_start_xmit函数
一、中文注释 static inline netdev_tx_t netdev_start_xmit(struct sk_buff *skb, struct net_device *dev, struct netdev_queue *txq, bool more){// 获取网络设备操作集合const struct net_device_ops *ops = dev->netdev_op
阅读更多...
【C语言】linux内核ipoib模块 - ipoib_netdev_ops_pf结构
一、ipoib_netdev_ops_pf结构 static const struct net_device_ops ipoib_netdev_ops_pf = {.ndo_init = ipoib_ndo_init,.ndo_uninit = ipoib_ndo_uninit,.ndo_open = ipoib_open,.ndo_stop
阅读更多...