Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 处理linux内核数据包路由的更好方法_C_Linux Kernel_Routing_Network Protocols_Packet - Fatal编程技术网

C 处理linux内核数据包路由的更好方法

C 处理linux内核数据包路由的更好方法,c,linux-kernel,routing,network-protocols,packet,C,Linux Kernel,Routing,Network Protocols,Packet,下面是一个场景- 我有两个接口wlan0和test0(逻辑) 我不能控制wlan0设备驱动程序,我可以完全控制test0设备驱动程序(xD) test0实际上使用wlan0发送一些数据包(内部) wlan0没有关联的ip,但test0有 现在,当我尝试向连接到wlan0的任何设备发送ping命令时。数据包到达目标设备,目标设备以ping响应进行响应。数据包在wlan0接收并推送到ip协议。但ip协议会丢弃数据包,因为在尝试在内核内路由数据包时,存在与wlan0关联的ip协议 因此,我天真地更改了

下面是一个场景-

  • 我有两个接口wlan0和test0(逻辑)
  • 我不能控制wlan0设备驱动程序,我可以完全控制test0设备驱动程序(xD)
  • test0实际上使用wlan0发送一些数据包(内部)
  • wlan0没有关联的ip,但test0有
  • 现在,当我尝试向连接到wlan0的任何设备发送ping命令时。数据包到达目标设备,目标设备以ping响应进行响应。数据包在wlan0接收并推送到ip协议。但ip协议会丢弃数据包,因为在尝试在内核内路由数据包时,存在与wlan0关联的ip协议

    因此,我天真地更改了ip协议路由决策(不影响正常决策),添加了如下子句-

  • 如果没有与cur dev关联的ip&&cur dev!=测试0然后转到3,否则转到4
  • 路由数据包并转到5
  • 设置dev=test0;和goto 1
  • 放下架子
  • 完成
  • 所以,现在我可以发送和接收数据包,但这个解决方案并不好,因为对于给定场景中我想要支持的每个协议,我必须添加子句(例如,g ARP)。
    因此,我的问题是,在这种情况下,处理数据包路由的更好方法应该是什么。

    您可以桥接这两个接口并为桥接接口分配一个IP地址。因此,连接到wifi的机器应该可以通过接口test0访问。

    不幸的是,这对我的情况没有帮助(已经测试过)由于test0在通过wlan0中继数据包之前添加了一些额外的报头,因此没有test0的设备可以向有test0的设备发送数据包,但情况并非如此,因为在后一种情况下,接收设备将丢弃数据包。