bridge在内核的实现

这里来讲下bridge。本文可以看成是对《Understanding Linux Network Internals》的学习笔记。

在之前的文章中可以知道,当一个数据包进来后,poll函数会通过netif_receive_skb进行下一步的处理,在提交给上层协议栈前,会先看是不是要走bridge的逻辑,如果要走的话就会由bridge的逻辑进行处理,而不是往上层继续调用。 Continue reading

数据包的接收流程

这里来讲下收到数据包后,中断做了什么事情。本文可以看成是对《Understanding Linux Network Internals》的学习笔记。

当一个数据包到达的时候,触发中断(注意,是某个CPU的中断,只有这个CPU会受影响),然后do_IRQ就会被调用。do_IRQ我们之前提过,其先是根据中断号调用handler,然后最后会的触发do_softirq做下半区的处理。 Continue reading

softirq与ksoftirqd内核线程

这里来讲下softirq与ksoftirqd。本文可以看成是对《Understanding Linux Network Internals》的学习笔记。

中断,简单的说就是外部设备通知kernel的一种方式。在之前的文章里也介绍了,可以通过request irq的方法注册一个中断号以及对应的irq。当一个数据包到达网卡的时候,网卡就会触发对应的中断号,然后内核根据这个中断号找到对应的handle,由handler对这个数据包进行处理。 Continue reading

net_device的初始化

这篇文章会说下net_device的生产过程。本文可以看成是对《Understanding Linux Network Internals》的学习笔记。

在linux中,一个网络设备是以一个net_device存在的。最简单的例子,对于一个硬件的物理网卡,其在系统启动的时候会的被驱动识别并在内核中建立net_deivce数据结构。所以当我们用ip link show命令查看的时候,我们可以查看到这些net_device设备,一般就是eth0、eth1这类。 Continue reading