加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

新的linux tc排队规则创造了爆发…耗尽了知识

发布时间:2020-12-14 01:39:29 所属栏目:Linux 来源:网络整理
导读:我想为 linux内核编写一个新的tc排队规则.目标是排队等等.十个数据包,然后将它们全部发送出去(我知道,这对网络来说并不是一件好事,但我想对此进行一些研究). 那么,已经做了什么:我有一个新的sched-module(enqueue,dequeue函数等)的框架,它也正确编译并正确
我想为 linux内核编写一个新的tc排队规则.目标是排队等等.十个数据包,然后将它们全部发送出去(我知道,这对网络来说并不是一件好事,但我想对此进行一些研究).

那么,已经做了什么:我有一个新的sched-module(enqueue,dequeue函数等)的框架,它也正确编译并正确工作(一个数据包排队,一个数据包发送 – 没什么特别的).我正在使用与正在运行的内核相同的源代码在ubuntu maverick上编译它,并将我的模块放在Makefile和Kconfig中.

我想,每次调用enqueue函数,之后qdisc_restart(在sch_generic.c中)调用dequeue函数 – 并且只发送一个数据包.

我的问题是:如何从我的模块向网络接口发送多个数据包,就像我收集的那样. 10包现在我想把它们全部发送出去?

我尝试使用与qdisc_restart(和锁定机制)相同的参数调用sch_direct_xmit函数(来自sch_generic.c) – 但是,然后,我的模块的编译失败:未知符号sch_direct_xmit(但greping / proc / kallsyms为此给了我结果).有什么想法,那有什么不对?如果需要一些代码,请告诉我(我在sched_generic.c中包含了相同的.h)

BR
克里斯托夫

解决方法

我认为最简单的解决方案是使用一个kthread,当你排队10个数据包时,你会被唤醒. kthread将负责使用您之前排队的数据包.

如果没有代码的一些示例,很难知道什么是使您的出列函数被调用的事件序列,但您可以执行类似的操作:

static struct sk_buff_head foo_skb_queue;
static DECLARE_WAIT_QUEUE_HEAD(food_wqh);

int food_sender(void* unused)
{
        struct sk_buff* skb = NULL;
        unsigned int i = 0;

        while (!kthread_should_stop()) {

                while (skb = skb_dequeue(&foo_skb_queue) && i < NUMBER_TO_SEND) {
                         send_packet(skb);
                         ++i;
                }

                DECLARE_WAITQUEUE(wq,current);
                set_current_state(TASK_INTERRUPTIBLE);
                add_wait_queue(&food_wqh,&wq);

                /* Avoid wake-up lost race */
                if (skb_queue_len(&foo_skb_queue) < NUMBER_TO_SEND)
                        schedule();

                remove_wait_queue(&food_wqh,&wq);
        }
        return 0;
}

int foo_enqueue(struct sk_buff* skb)
{
        skb_queue_tail(&foo_skb,skb);       
        if (skb_queue_len(&foo_skb) >= NUMBER_TO_SEND)
                wake_up(&food_wqh);

        return 0;
}

我怀疑这样的事情会这样做.代码未编译但它可以让您了解如何执行此操作.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读