我必须通过修改 Linux 内核源代码来稍微更改 TCP 拥塞控制算法。但是要检查结果是否正确,我需要记录 MAC 或 IP 地址的信息。
我使用 PRINTK 函数为内核打印消息。但是我觉得很难打印出主机的 MAC/IP 地址。
printk("%pM \n", mac)
但是mac指的是什么? 在 TCP 源代码中,我经常使用 skbuff 或 sock 结构。
谢谢。
更新:
struct iphdr *iph = ip_hdr(skb);
printk(KERN_DEBUG "%pI4", iph->saddr);
最佳答案
Linux 在文件 Documentation/printk-formats.txt
中记录了 printk
格式说明符扩展,作为内核源代码的一部分。对于您的示例,
IPv4 addresses:
%pI4 1.2.3.4
%pi4 001.002.003.004
%p[Ii][hnbl]
For printing IPv4 dot-separated decimal addresses. The 'I4' and 'i4'
specifiers result in a printed address with ('i4') or without ('I4')
leading zeros.
传递的参数将是指向要打印的 IP 地址的指针(skbuff、套接字结构等)。
关于linux - 如何在 Linux 内核源代码中打印 IP 地址或 MAC 地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23584913/