8f8eefd938a5c078ac876a9bd43b59cec2136238
3 if (!
(linespeed
> 0)) linespeed =
128
12 avgrate
[n
] =
($
3 * linespeed
/ 100)
15 maxrate
[n
] =
($
6 * linespeed
/ 100)
24 for (i =
1; i
<= n
; i
++) {
26 if (!
(pktsize
[i
] > 0)) pktsize
[i
] =
1500
27 if (!
(prio
[i
] > 0)) prio
[i
] =
1
29 allocated
+= avgrate
[i
]
31 if ((avgrate
[i
] > 0) && !
(delay
[i
] > 0)) {
36 # allocation of m1 in rt classes:
37 # sum(d * m1) must not exceed dmax * (linespeed - allocated)
39 for (i =
1; i
<= n
; i
++) {
45 d
[i
] =
2 * pktsize
[i
] * 1000 / (linespeed
* 1024)
46 if (d
[i
] > dmax
) dmax = d
[i
]
51 ds_avail = dmax
* (linespeed
- allocated
)
52 for (i =
1; i
<= n
; i
++) {
55 lsm2
[i
] = linespeed
* prio
[i
] / sum_prio
56 if ((avgrate
[i
] > 0) && (d
[i
] > 0)) {
57 if (!
(delay
[i
] > 0)) {
58 ds = ds_avail
* prio
[i
] / sum_rtprio
60 rtm1
[i
] = rtm2
[i
] + ds
/d
[i
]
70 for (i =
1; i
<= n
; i
++) {
71 printf "tc class add dev "device
" parent 1:1 classid 1:"class
[i
]"0 hfsc"
73 printf " rt m1 " int
(rtm1
[i
]) "kbit d " int
(d
[i
] * 1000) "us m2 " int
(rtm2
[i
])"kbit"
75 printf " ls m1 " int
(lsm1
[i
]) "kbit d " int
(d
[i
] * 1000) "us m2 " int
(lsm2
[i
]) "kbit"
76 print " ul rate " int
(maxrate
[i
]) "kbit"
81 for (i =
1; i
<= n
; i
++) {
82 print "tc qdisc add dev "device
" parent 1:"class
[i
]"0 handle "class
[i
]"00: fq_codel limit 800 quantum 300"
86 for (i =
1; i
<= n
; i
++) {
87 filter_cmd =
"tc filter add dev "device
" parent 1: prio %d protocol ip handle %s fw flowid 1:%d0\n";
88 if (direction ==
"up") {
89 filter_1 =
sprintf("0x%x0/0xf0", class
[i
])
90 filter_2 =
sprintf("0x0%x/0x0f", class
[i
])
92 filter_1 =
sprintf("0x0%x/0x0f", class
[i
])
93 filter_2 =
sprintf("0x%x0/0xf0", class
[i
])
96 printf filter_cmd
, class
[i
] * 2, filter_1
, class
[i
]
97 printf filter_cmd
, class
[i
] * 2 + 1, filter_2
, class
[i
]
100 if (filter
[i
] != "") {
101 print " tc filter add dev "device
" parent "class
[i
]"00: handle "filterc
"0 "filter
[i
]