探索Linux内核网络协议栈:自定义协议与IPv6邻居发现的交互分析

在Linux内核网络协议栈开发中,开发者常会遇到自定义协议模块与网络标准协议(如IPv6)的交互问题。本文通过实际案例,深入分析myproto_start_xmit函数被周期性调用的现象,探讨IPv6邻居发现协议(NDP)的作用机制,并提供调试与解决方案。

一、现象分析:周期性调用的根源

当开发者观察到myproto_start_xmit函数被周期性触发时,日志中的关键线索指向了IPv6协议栈活动:

IPv6 packet: len=48, src=fe80::..., dst=ff02::...

这种周期性行为源于IPv6的邻居发现协议(NDP),其核心机制包括:

  1. 路由器请求(RS)
    接口启用时主动发送RS报文,促使路由器立即响应RA(Router Advertisement),而非等待默认周期。

  2. 邻居请求(NS)
    用于地址解析和邻居可