Linux中ipv6代码阅读(1)

这篇博客介绍了Linux内核中IPv6数据报文的处理流程,包括硬中断处理、软中断net_rx_action的触发与执行,以及如何通过dev_add_pack注册协议处理函数ip_rcv和ipv6_rcv分别处理IPv4和IPv6报文。详细解析了从网卡驱动到网络层协议处理器的整个接收路径。
摘要由CSDN通过智能技术生成
. 网卡接受数据的过程

这部分是说明数据报文在在链路层的处理,以及如何将报文送交给对应的网络层协议来处理。这些功能基本都是在驱动中实现的。


1 从网络中接收数据报文的时候,涉及到两个终端。一个是硬中断,一个是软中断。

1.硬中断的中断处理函数是在驱动中注册,一般在device open()函数或者 device init()函数中注册,使用request_irq()来注册硬中断处理函数。当网卡接收到数据的时候,就会调用这个终端处理函数来处理。比如8139too.c函数就用  retval = request_irq (dev->irq, rtl8139_interrupt, SA_SHIRQ, dev->name, dev)来注册硬中断处理函数。

2)软中断是通过NET_RX_SOFTIRQ信号来触发的,处理函数是net_rx_action。注册函数是open_softirq(NET_RX_SOFTIRQ, net_rx_action, NULL)。触发这个中断信号(raise irq)一般是在硬中断处理流程中,当硬中断处理基本结束的时候,通过调用__raise_softirq_irqoff(NET_RX_SOFTIRQ)来触发这个中断。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值