- 论坛徽章:
- 36
|
不然。
其实,这不是丢到了高层,而是和ip_queue_xmit()发送过程意义一样。
对这包进行重新路由后,封装了头部,之后,放到了NF_IP_LOCAL_IN之前而已。
这个地方我也是如此理解的,send_reset只是将修改后的数据包放在LOCALOUT点之前。确如ip_queue_xmit类似,最后调用了
- return NF_HOOK(PF_INET, NF_IP_LOCAL_OUT, skb, NULL, rt->u.dst.dev,
- dst_output);
复制代码其实,这里面只要修改了中途修改了ip地址,肯定是需要手动重新路由的。
对路由理解不够深入,如果这里不进行手动路由的话,在交由POSTROUTING之前,不是也会查路由吗?
另外,send_reset实际上只是交换了源和目的IP,如果rtable中已有了srcip->dstip的路由,是否还存在没有dstip->srcip的路由的情况?
这就涉及到一些比较复杂的route cache的查找,如果没有就去查找route tables;之后,进行路由结构和neighbour结构的关联,就涉及到邻居子系统的相关操作;接着就涉及到arp cache的查找,如果没有,进行一些操作,arp的过程等等,才找到了相关的ip对应的mac信息。
这里是否只涉及到路由的查找,或者还有路由的修改? |
|