Skip to content
K̶e̶v̶i̶n̶ edited this page Jan 18, 2024 · 3 revisions
lscpu | grep 'Byte Order'
sudo apt install flex yacc
wget https://tcng.sourceforge.net/dist/tcng-10b.tar.gz
tar xzf tcng-10b.tar.gz
cd tcng
./configure --no-tcsim --c99 -d /usr/local -y /usr/bin/yacc -l
make
sudo make install
tcc -V

test.tc

#include "fields.tc"
#include "ports.tc"

dev "eth0" {
    egress {
        // classification

        class (<$high>)
            if tcp_dport == PORT_HTTP;
        class (<$low>)
            if 1;

        // queuing

        prio {
            $high = class (1) {
                fifo (limit 20kB);
            }
            $low = class (2) {
                fifo (limit 100kB);
            }
        }
    }
}
$ tcc test.tc

# ================================ Device eth0 ================================

tc qdisc add dev eth0 handle 1:0 root dsmark indices 4 default_index 0
tc qdisc add dev eth0 handle 2:0 parent 1:0 prio
tc qdisc add dev eth0 handle 3:0 parent 2:1 bfifo limit 20480
tc qdisc add dev eth0 handle 4:0 parent 2:2 bfifo limit 102400
tc filter add dev eth0 parent 2:0 protocol all prio 1 tcindex mask 0x3 shift 0
tc filter add dev eth0 parent 2:0 protocol all prio 1 handle 2 tcindex classid 2:2
tc filter add dev eth0 parent 2:0 protocol all prio 1 handle 1 tcindex classid 2:1
tc filter add dev eth0 parent 1:0 protocol all prio 1 handle 1:0:0 u32 divisor 1
tc filter add dev eth0 parent 1:0 protocol all prio 1 u32 match u8 0x6 0xff at 9 offset at 0 mask 0f00 shift 6 eat link 1:0:0
tc filter add dev eth0 parent 1:0 protocol all prio 1 handle 1:0:1 u32 ht 1:0:0 match u16 0x50 0xffff at 2 classid 1:1
tc filter add dev eth0 parent 1:0 protocol all prio 1 u32 match u32 0x0 0x0 at 0 classid 1:2

Doc:

Clone this wiki locally