- 论坛徽章:
- 0
|
用 dev_add_pack(&cappkg_proto);去抓包 发现打印的K值为什么不连续呢? 怎么回事?
另外在my_handler中也加了打印量,发现也不连续;例 如内核打印
<4>[ 1898.458249] k = 7501
<4>[ 1898.637964] k = 7504
<4>[ 1898.639350] k = 7505
<4>[ 1898.641040] k = 7506
但是在K==7502的时候,虽然没有打印出来,但是我确定收到数据包了 ,为什么没有打印出来呢? 请指教
int cappkg_func (struct sk_buff *skb,
struct net_device *dev,
struct packet_type *pt,
struct net_device *orig_dev)
{
static int k = 0;
if (dev != destdev /*2»Ôúcapdevá′±íÖD£¬Ä¿Ç°Ö»óDò»¸ö*/)
{
goto release_skb;
}
if (/*skb->pkt_type == PACKET_OUTGOING ||*/
//±¾»ú·¢3öμÄ°ü£¬êüÖÆóúfib_validate_source£¡
//òò′ËDèòa½«Ô′μØÖ·SNAT3éò»¸ö·Ç±¾»úμØÖ·£¡
skb->pkt_type == PACKET_OTHERHOST)
{
/*
skb->pkt_type = PACKET_HOST;
skb->mark = mark;
return netif_receive_skb(skb);
*/
}
else
{
printk("k = %u \n", k++);
my_handler(skb);
}
release_skb:
// kfree_skb(skb);
return NET_RX_SUCCESS;
}
static struct
packet_type cappkg_proto =
{
.type = __constant_htons(ETH_P_ALL),
.func = cappkg_func,
};
static int __init init_shm_test(void)
{
int ret;
dev_add_pack(&cappkg_proto);
return 0;
}
|
|