前言
- 在进行TCP/IP相关的开发过程中,经常需要查证丢包、错包、流不通等问题。由于TCP/IP转发面涉及软件和硬件、并且软件流程上函数多、分支多,无论是增加打印或是分析流程,都比较困难。
- 本系列文章会将常用的定位手段,做一简单的总结和说明,各位可根据问题的情况,选取一种或结合使用。
日志方式简介
- 虽然打印这种方式比较Low,但在有的情况下反而是最直接和有效的方式,有的情况下更是开发人员的杀手锏。
直接打印 文
- 直接在需要的地方调用类似下面的print_skb的函数即可。
值得一提的是,在有的内核版本中,上述代码打印不全,skb->data需要换成skb->mac_header。
另外,这种打印方式,如 文太多,会刷屏,可能将系统打宕机。
条件打印
- 根据 文中特定字段进行打印,需要在skb结构体中增加一个字段:
具体在某个位置,首先判断某skb是否需要被打印,比如要跟踪DHCP 文,则在某个入口或点的位置识别DHCP 文并将该标志位置上,具体可参考下面的代码段:
之后,在后续其他点上,就可以直接根据这个flag来控制打印:
开关控制打印
- 通过某proc文件修改内核某变量,然后根据该变量来控制打印。
代码中的具体控制:
ratelimit限速打印
- 限速判断函数可以用net_ratelimit或printk_ratelimit;
这种打印,有个缺陷,有可能会被限速抑制掉而打印不出来,此时会有下面这种打印出现:
具体的限速参数,可使用下面方式修改:
自定义限速打印
- 也可以根据需要,使用系统时间来自行控制打印,比如下面代码段可控制每秒最多打印一个 文:
以上。
文章知识点与官方知识档案匹配,可进一步学习相关知识 络技能树首页概览22097 人正在系统学习中
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!