我是内核模块开发的新手。我正在尝试开发一个伪网络驱动程序,在没有任何实际设备的情况下以环回模式运行。我的目标是使用以下设置:
iperf -s -u.........iperf -c 192.168.1.1 -p 5001 -u
======.......============
|...if0....|......|........if1....|
======.......============
| | /|\ \|/ | | ---------------
我已经从驱动程序注册了两个接口。然后我修改了从 if1 接收到的 UDP 数据包,使它看起来像在 if0 接收到的一样。但它永远不会到达侦听所有 udp if 的 udp 端口的 iperf 服务器应用程序。但是每当我在 if0 上通过wireshark 嗅探数据包时,似乎是在 if0 接收到数据包。但由于某种原因,它没有通过网络堆栈。
任何线索?ip 校验和和 udp 校验和都已重新计算和验证(使用 wireshark)。我正在使用 netif_rx 将数据包指示到另一个接口句柄(if0 句柄)。
我只使用了 5 个函数 ptr 回调 {open、close、xmit_start、get_stats & config} 进行网络操作。校验和也设置为 UNNECESSARY。已设置 IF 标志以指示 NO_ARP。
编辑:IP 地址输出
eth1:mtu 1500 qdisc
pfifo_fast 状态 UP qlen 1000 链接/以太 00:e0:ff:00:00:e0 brd
ff:ff:ff:ff:ff:ff inet 192.168.1.1/24 brd 192.168.1.255 范围 globa eth1 valid_lft
永远首选_lft永远4:
eth2:mtu 1500 qdisc pfifo_fast
状态 UP qlen 1000 链接/以太 00:e0:ff:40:00:e0 brd ff:ff:ff:ff:ff:ff
inet 192.168.2.1/24 brd 192.168.2.255 范围全局 eth2 valid_lft
永远首选_lft 永远