#!/bin/sh
# $Id: ratelimit-download,v 1.3 2017/12/21 00:54:48 friedman Exp $

xtc() { (set -x; tc "$@"); }

reset()
{
    xtc qdisc del dev $iface handle ffff: ingress 2> /dev/null
}

status()
{
    xtc -iec -r -p -d -s filter ls dev $iface parent ffff:
}

config()
{
    reset

    xtc qdisc add dev $iface handle ffff: ingress

    for port in 22 80 443; do
        xtc filter \
            add dev $iface parent ffff: protocol ip prio 50 \
            u32 match ip sport $port 0xffff \
            police rate ${rate}kibit burst ${burst}k mtu ${mtu}k drop flowid :1
    done
}

main()
{
    case $# in
        [12] ) arg=$1 iface=${2:-eth0} ;;
        *    ) echo "Usage: ${0##*/} [KB/s] {iface}" 1>&2
               echo "       ${0##*/} status {iface}" 1>&2
               echo "       ${0##*/} reset  {iface}" 1>&2
               exit 1 ;;
    esac

    case $arg in
        reset | status ) $arg ; return $? ;;
    esac

    burst=$arg
      mtu=$(( burst * 2 ))
     rate=$(( burst * 8 ))

    reset
    config
    status
}

main "$@"

# eof
