如何使用tc添加延迟和带宽限制界面?

我知道我可以使用这个命令给接口添加延迟:

# tc qdisc add dev eth0 root netem delay 50ms 

除了延迟,我想限制这个接口的带宽为100kbps。

我怎样才能做到这一点?

我见过一些如何限制带宽的例子。 例如:

 # tc qdisc add dev eth0 root handle 1: cbq avpkt 1000 bandwidth 10mbit # tc class add dev eth0 parent 1: classid 1:1 cbq rate 512kbit \ allot 1500 prio 5 bounded isolated # tc filter add dev eth0 parent 1: protocol ip prio 16 u32 

但是,如果我在设置延迟延迟之后尝试运行这些命令,则会看到如下所示的错误:

 RTNETLINK answers: File exists 

例如:

 # tc qdisc add dev eth0 root netem delay 97ms # tc qdisc add dev eth0 root handle 1: cbq avpkt 1000 bandwidth 10kbit RTNETLINK answers: File exists 

我真的希望能够做到这一点:限制带宽,并引入延迟时间。 有谁知道如何做到这一点?

在你的例子中,你试图在出口上添加两个root qdisc。 第二个命令失败,因为你已经有一个root qdisc,只有一个是允许的。 相反,创buildroot qdisc,然后创build一个子类,然后添加第二个qdisc作为类的子类。 例如:

 tc qdisc add dev eth0 root handle 1:0 cbq avpkt 1000 bandwidth 10kbit tc class add dev eth0 parent 1:0 classid 1:1 cbq rate 512kbit \ allot 1500 prio 5 bounded isolated tc qdisc add dev eth0 parent 1:1 netem delay 97ms 

在这个例子中,我们分配了root qdisc句柄1:0。 然后,我们将这个class级指定为1:0的孩子,并给它一个句柄1:1。 然后,我们添加了第二个qdisc作为1:1的孩子。

在执行这些命令后,运行tc qdisc应该显示cbq qdisc和netem qdisc。 Linux高级路由和stream量控制HOWTO提供了关于QDisc的更多信息。