代码为:
-
if (skb)
-
{
-
char *buf = skb->data;
-
int len = skb->len;
-
int i;
-
-
printk("[%s:%d]Packet length = %#4x\n", __FUNCTION__, __LINE__, len);
-
for (i = 0; i < len; i++){
-
if (i % 16 == 0) printk("%#4.4x", i);
-
if (i % 2 == 0) printk(" ");
-
printk("%2.2x", ((unsigned char *)buf)[i]);
-
if (i % 16 == 15) printk("\n");
-
}
-
printk("\n\n\n\n");
-
}
这段代码可以插入到内核任意定义了skb的地方,调试skb很是方便,我每次想在skb处理路径的某个地方看skb的内容时,直接把这段代码拷贝&粘贴。
不过话说回来,自从我开始整理的自己的知识库后,发觉自己变懒了,很多时候都是首先这么想:“要实现我要的功能是不是有现成的代码呢?”,不知道这算是退化还是进化。之所以说可能是退化,是因为面试会比较失败,尼玛不知道完整的代码怎么写了呀。
在另外一个内核版本上,上的打印代码回打不全,因为skb->data指针被移动过了,所以得用下面这段:
-
if (skb)
-
{
-
char *buf = (char *)(skb->mac_header);
-
int len = skb->len;
-
int i;
-
-
printk("[%s:%d]Packet length = %#4x\n", __FUNCTION__, __LINE__, len);
-
for (i = 0; i < len; i++){
-
if (i % 16 == 0) printk("%#4.4x", i);
-
if (i % 2 == 0) printk(" ");
-
printk("%2.2x", ((unsigned char *)buf)[i]);
-
if (i % 16 == 15) printk("\n");
-
}
-
printk("\n\n\n\n");
-
}
阅读(3658) | 评论(0) | 转发(4) |