免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5000 | 回复: 6
打印 上一主题 下一主题

ip_rcv_finish函数疑问 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-03-24 10:58 |只看该作者 |倒序浏览
刚看协议栈源码,到ip_rcv_finish()函数时,

       /*skb中路由为空*/
        if (skb_dst(skb) == NULL) {
                int err = ip_route_input_noref(skb, iph->daddr, iph->saddr,
                                               iph->tos, skb->dev);
                ......
        }

对于接收到的skb来说,路由可能会有吗?有的话,什么时候填写的?

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
2 [报告]
发表于 2011-03-24 13:16 |只看该作者
PREROUTING 之后会做路由动作的

论坛徽章:
6
金牛座
日期:2013-10-08 10:19:10技术图书徽章
日期:2013-10-14 16:24:09CU十二周年纪念徽章
日期:2013-10-24 15:41:34狮子座
日期:2013-11-24 19:26:19未羊
日期:2014-01-23 15:50:002015年亚洲杯之阿联酋
日期:2015-05-09 14:36:15
3 [报告]
发表于 2011-03-24 13:17 |只看该作者
本帖最后由 瀚海书香 于 2011-03-24 13:22 编辑

回复 1# duqingbo135
有可能skb->dst不为空.
一种情况就是数据包接收以后,又需要重新走netfilter的流程。
例如ip_output.c中的
  1. static int ip_dev_loopback_xmit(struct sk_buff *newskb)
  2. {
  3.     ....
  4.     BUG_TRAP(newskb->dst);
  5.     netfi_rx(newskb);
  6.     return 0;
  7. }
复制代码

论坛徽章:
6
金牛座
日期:2013-10-08 10:19:10技术图书徽章
日期:2013-10-14 16:24:09CU十二周年纪念徽章
日期:2013-10-24 15:41:34狮子座
日期:2013-11-24 19:26:19未羊
日期:2014-01-23 15:50:002015年亚洲杯之阿联酋
日期:2015-05-09 14:36:15
4 [报告]
发表于 2011-03-24 13:26 |只看该作者
回复 2# Godbach
God兄指的是ip_rcv_finish中的吧?
NF_IP_PRE_ROUTING的hook上好像没有处理路由的吧??

论坛徽章:
0
5 [报告]
发表于 2011-03-24 14:12 |只看该作者
回复 4# 瀚海书香


    ip_rcv_finish函数之前,不久只经过NF_IP_PRE_ROUTING这一个过滤吗?
ip_dev_loopback_xmit是在那个地方调用的呢?

我在网上看到这样一句话:
INET域中有两个地方需要查询输入路由,一个是当收到一个IP数据报,ip_rcv将其交给ip_rcv_finish后,ip_rcv_finish 判断skb->dst是否为NULL(因为对于环回接口上收到的数据报,其dst是存在的,不需要查询输入路由),如果为NULL,则需要查询得到输入路由。另一个地方是当收到一个ARP数据报,arp_rcv将其交给arp_process处理时,arp_process也需要查询得到该skb的输入路由。

请解释一下?

论坛徽章:
6
金牛座
日期:2013-10-08 10:19:10技术图书徽章
日期:2013-10-14 16:24:09CU十二周年纪念徽章
日期:2013-10-24 15:41:34狮子座
日期:2013-11-24 19:26:19未羊
日期:2014-01-23 15:50:002015年亚洲杯之阿联酋
日期:2015-05-09 14:36:15
6 [报告]
发表于 2011-03-24 14:24 |只看该作者
回复 5# duqingbo135
至于ip_dev_loopback_xmit在什么地方调用的不要紧,只要知道在ip_rcv的时候,skb->dst有可能不会空就行了。

论坛徽章:
0
7 [报告]
发表于 2011-03-24 14:42 |只看该作者
回复 6# 瀚海书香


    恩,多谢了!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP