/*
 * ef-prio - EF implementation using the prio classifier
 *
 * This is a simplified version of iproute2/examples/diffserv/ef-prio
 */

#define EFRATE 	2Mbps
#define MTU	1500B
#define BURST	2000B	/* Normally, BURST = MTU would be enough. However, we
			   also need to take into account timer granularity. */

#define TOS_BE		UDP_HDR($ip_tos=0)
#define TOS_EF		UDP_HDR($ip_tos=0xb8)
#define PAYLOAD		0 x 980  /* 1000-sizeof(iphdr) = 980 bytes */

#define X16(i) i i i i  i i i i  i i i i  i i i i

dev eth0 3000 { /* 3 Mbps */
    dsmark (indices 64, set_tc_index) {
	tcindex (mask 0xfc, shift 2);
	prio (bands 2, priomap X16($be)) {
	    class (1)
		on tcindex element (0x2e)
	    {
		tbf (rate EFRATE, burst BURST, mtu MTU, limit 3000B);
	    }
	    $be = class (2) {
		red (limit 60kB, min 15kB, max 45kB, burst 20kB,
		  avpkt 1000B, bandwidth 3Mbps, probability 0.4);
	    }
	}
    }
}

every 0.005s send TOS_BE PAYLOAD		/* 1.6 Mbps */
every 0.005s send TOS_EF PAYLOAD		/* 1.6 Mbps */

time 10s
end 
