免费注册 查看新帖 |

Chinaunix

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

[网络子系统] dev_add_pack添加抓包函数,发现入口打印的值不连续? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-01-22 10:18 |只看该作者 |倒序浏览

用 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;
}

论坛徽章:
15
射手座
日期:2014-02-26 13:45:082015年迎新春徽章
日期:2015-03-04 09:54:452015年辞旧岁徽章
日期:2015-03-03 16:54:15羊年新春福章
日期:2015-02-26 08:47:552015年亚洲杯之卡塔尔
日期:2015-02-03 08:33:45射手座
日期:2014-12-31 08:36:51水瓶座
日期:2014-06-04 08:33:52天蝎座
日期:2014-05-14 14:30:41天秤座
日期:2014-04-21 08:37:08处女座
日期:2014-04-18 16:57:05戌狗
日期:2014-04-04 12:21:33技术图书徽章
日期:2014-03-25 09:00:29
2 [报告]
发表于 2014-01-22 11:03 |只看该作者
helun 发表于 2014-01-22 10:18
用 dev_add_pack(&cappkg_proto);去抓包 发现打印的K值为什么不连续呢?  怎么回事?
另外在my_handler ...

你代码中的k没加锁保护,在多核并发情况下,可能会导致k被多加几次吧?

论坛徽章:
0
3 [报告]
发表于 2014-01-22 13:34 |只看该作者
1 加锁保护仍然是跳过一些值 我试了加自旋锁一样的
2 即使不加 多个进程都调到这个函数 那么照样应该打印出来 也就是不管哪个内核进程调到它,都应该会打印出来的呀 现在问题是连打印都不打

论坛徽章:
15
射手座
日期:2014-02-26 13:45:082015年迎新春徽章
日期:2015-03-04 09:54:452015年辞旧岁徽章
日期:2015-03-03 16:54:15羊年新春福章
日期:2015-02-26 08:47:552015年亚洲杯之卡塔尔
日期:2015-02-03 08:33:45射手座
日期:2014-12-31 08:36:51水瓶座
日期:2014-06-04 08:33:52天蝎座
日期:2014-05-14 14:30:41天秤座
日期:2014-04-21 08:37:08处女座
日期:2014-04-18 16:57:05戌狗
日期:2014-04-04 12:21:33技术图书徽章
日期:2014-03-25 09:00:29
4 [报告]
发表于 2014-01-22 17:09 |只看该作者
helun 发表于 2014-01-22 13:34
1 加锁保护仍然是跳过一些值 我试了加自旋锁一样的
2 即使不加 多个进程都调到这个函数 那么照样应该打印 ...

那有没有可能是printk频率太高导致,能否换种确认方法?

论坛徽章:
0
5 [报告]
发表于 2014-01-22 20:30 |只看该作者
有可能 暂时不试了 我的问题找到

论坛徽章:
0
6 [报告]
发表于 2014-01-22 20:31 |只看该作者
仍然要谢谢2楼的支持

论坛徽章:
15
射手座
日期:2014-02-26 13:45:082015年迎新春徽章
日期:2015-03-04 09:54:452015年辞旧岁徽章
日期:2015-03-03 16:54:15羊年新春福章
日期:2015-02-26 08:47:552015年亚洲杯之卡塔尔
日期:2015-02-03 08:33:45射手座
日期:2014-12-31 08:36:51水瓶座
日期:2014-06-04 08:33:52天蝎座
日期:2014-05-14 14:30:41天秤座
日期:2014-04-21 08:37:08处女座
日期:2014-04-18 16:57:05戌狗
日期:2014-04-04 12:21:33技术图书徽章
日期:2014-03-25 09:00:29
7 [报告]
发表于 2014-01-23 08:49 |只看该作者
不客气的,也没帮上啥忙
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP