Signed-off-by: Hannes Laimer <h.lai...@proxmox.com> --- src/PVE/Network.pm | 36 +++++++++++++++++++++--------------- 1 file changed, 21 insertions(+), 15 deletions(-)
diff --git a/src/PVE/Network.pm b/src/PVE/Network.pm index 12536c7..3e7a1c1 100644 --- a/src/PVE/Network.pm +++ b/src/PVE/Network.pm @@ -82,7 +82,7 @@ our $ipv4_mask_hash_localnet = { }; sub setup_tc_rate_limit { - my ($iface, $rate, $burst) = @_; + my ($iface, $outrate, $inrate, $burst) = @_; # these are allowed / expected to fail, e.g. when there is no previous rate limit to remove eval { run_command("/sbin/tc class del dev $iface parent 1: classid 1:1 >/dev/null 2>&1"); }; @@ -90,29 +90,35 @@ sub setup_tc_rate_limit { eval { run_command("/sbin/tc qdisc del dev $iface ingress >/dev/null 2>&1"); }; eval { run_command("/sbin/tc qdisc del dev $iface root >/dev/null 2>&1"); }; - return if !$rate; - # tbf does not work for unknown reason #$TC qdisc add dev $DEV root tbf rate $RATE latency 100ms burst $BURST # so we use htb instead - run_command("/sbin/tc qdisc add dev $iface root handle 1: htb default 1"); - run_command("/sbin/tc class add dev $iface parent 1: classid 1:1 " . - "htb rate ${rate}bps burst ${burst}b"); - - run_command("/sbin/tc qdisc add dev $iface handle ffff: ingress"); - run_command("/sbin/tc filter add dev $iface parent ffff: " . - "prio 50 basic " . - "police rate ${rate}bps burst ${burst}b mtu 64kb " . - "drop"); + + # inrate limits the egress of the tap device (=> inrate of the VM) + if($inrate) { + run_command("/sbin/tc qdisc add dev $iface root handle 1: htb default 1"); + run_command("/sbin/tc class add dev $iface parent 1: classid 1:1 " . + "htb rate ${inrate}bps burst ${burst}b"); + } + + # outrate limits the ingress of the tap device (=> outrate of the VM) + if($outrate) { + run_command("/sbin/tc qdisc add dev $iface handle ffff: ingress"); + run_command("/sbin/tc filter add dev $iface parent ffff: " . + "prio 50 basic " . + "police rate ${outrate}bps burst ${burst}b mtu 64kb " . + "drop") + } } sub tap_rate_limit { - my ($iface, $rate) = @_; + my ($iface, $outrate, $inrate) = @_; - $rate = int($rate*1024*1024) if $rate; + $outrate = int($outrate*1024*1024) if $outrate; + $inrate = int($inrate*1024*1024) if $inrate; my $burst = 1024*1024; - setup_tc_rate_limit($iface, $rate, $burst); + setup_tc_rate_limit($iface, $outrate, $inrate, $burst); } sub read_bridge_mtu { -- 2.20.1 _______________________________________________ pve-devel mailing list pve-devel@lists.proxmox.com https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel