(所有的这一切,写的不好,权当自己写着玩玩,聊以自慰-----csalp&cssalp)
2、 Qdisc
在linux中,向某个设备添加以qidsc的命令如下:
tc qdisc add dev DEV [parent qdisc_id root] [handle qdisc_id] qdisc [qdisc parameters] |
例如:
tc qdisc add dev eth0 root handle 1: htb
这里向eth0添加了一个htb,为root, 并且id=1
注意这里的id和系统的id是不一样的, 系统的id是char 数组,htb对应的是”htb”,而这里的id对应的是Qdisc中的handle。
再如:
tc qdisc add dev eth0 parent 1:10 handle 20:pfifo limit 2
这里也创建了一个qdisc, 它的被graft到parent id=1:10的点上,这个点可能是个qdisc,也可能是一个class。
(tc的具体介绍可以参见tc-how-to)
那么接下来看看系统是如何创建一个Qdisc的。
上面是关于Qdisc相关的操作,下面看看正主Qdisc的一些信息。
首先看看它的结构:
struct Qdisc { /* *enqueue&dequeue函数,enqueue成功是return 0 *dequeue成功时,返回要send的数据 */ int (*enqueue)(struct sk_buff *skb, struct Qdisc *dev); struct sk_buff * (*dequeue)(struct Qdisc *dev); unsigned flags; #define TCQ_F_BUILTIN 1 #define TCQ_F_THROTTLED 2 #define TCQ_F_INGRESS 4 #define TCQ_F_CAN_BYPASS 8 #define TCQ_F_MQROOT 16 #define TCQ_F_WARN_NONWC (1 << 16) int padded; /* *所以的qdisc的不同在它的Qdisc_ops不同, * 当Qdisc_ops *ops= htb_qdisc_ops *这时我们定义了一个HTB 的Qdics |