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