QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1282|回复: 0

关于linux内核TC模块RED的疑问。

[复制链接]
发表于 2003-10-15 14:52:09 | 显示全部楼层 |阅读模式
找不到合适的地方发,只好发在这里了。
请大家指点。
linux内核TC模块设计是一个包驱动过程。
在其RED算法的实现中需要定位队列进入IDLE状态的时间。
在red_dequeue函数中(/net/sched/sch_red.c)
static struct sk_buff *
red_dequeue(struct Qdisc* sch)
{
        struct sk_buff *skb;
        struct red_sched_data *q = (struct red_sched_data *)sch->data;
        skb = __skb_dequeue(&sch->q);
        if (skb) {
                sch->stats.backlog -= skb->len;
                return skb;
        }
        PSCHED_GET_TIME(q->qidlestart);
        return NULL;
}
调用red_dequeue时若队列已为空则取当前时间为队列进入IDLE状态的时间。
问题是包驱动过程应该是一次enqueue对应一次dequeue,如果没有red_dequeue没有其他的调用点是__skb_dequeue的返回值是不可能为NULL的。我觉得可能有另外一个机制,但是找了很久都没发现。请熟悉TC模块的达人解答,谢谢:)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-9-28 04:20 , Processed in 0.039739 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表