1[
2    {
3        "id": "0582",
4        "name": "Create QFQ with default setting",
5        "category": [
6            "qdisc",
7            "qfq"
8        ],
9        "plugins": {
10            "requires": "nsPlugin"
11        },
12        "setup": [
13        ],
14        "cmdUnderTest": "$TC qdisc add dev $DUMMY handle 1: root qfq",
15        "expExitCode": "0",
16        "verifyCmd": "$TC qdisc show dev $DUMMY",
17        "matchPattern": "qdisc qfq 1: root refcnt [0-9]+",
18        "matchCount": "1",
19        "teardown": [
20            "$TC qdisc del dev $DUMMY handle 1: root"
21        ]
22    },
23    {
24        "id": "c9a3",
25        "name": "Create QFQ with class weight setting",
26        "category": [
27            "qdisc",
28            "qfq"
29        ],
30        "plugins": {
31            "requires": "nsPlugin"
32        },
33        "setup": [
34            "$TC qdisc add dev $DUMMY handle 1: root qfq"
35        ],
36        "cmdUnderTest": "$TC class add dev $DUMMY parent 1: classid 1:1 qfq weight 100",
37        "expExitCode": "0",
38        "verifyCmd": "$TC class show dev $DUMMY",
39        "matchPattern": "class qfq 1:1 root weight 100 maxpkt",
40        "matchCount": "1",
41        "teardown": [
42            "$TC qdisc del dev $DUMMY handle 1: root"
43        ]
44    },
45    {
46        "id": "d364",
47        "name": "Test QFQ with max class weight setting",
48        "category": [
49            "qdisc",
50            "qfq"
51        ],
52        "plugins": {
53            "requires": "nsPlugin"
54        },
55        "setup": [
56            "$TC qdisc add dev $DUMMY handle 1: root qfq"
57        ],
58        "cmdUnderTest": "$TC class add dev $DUMMY parent 1: classid 1:1 qfq weight 9999",
59        "expExitCode": "2",
60        "verifyCmd": "$TC class show dev $DUMMY",
61        "matchPattern": "class qfq 1:1 root weight 9999 maxpkt",
62        "matchCount": "0",
63        "teardown": [
64            "$TC qdisc del dev $DUMMY handle 1: root"
65        ]
66    },
67    {
68        "id": "8452",
69        "name": "Create QFQ with class maxpkt setting",
70        "category": [
71            "qdisc",
72            "qfq"
73        ],
74        "plugins": {
75            "requires": "nsPlugin"
76        },
77        "setup": [
78            "$TC qdisc add dev $DUMMY handle 1: root qfq"
79        ],
80        "cmdUnderTest": "$TC class add dev $DUMMY parent 1: classid 1:1 qfq maxpkt 2000",
81        "expExitCode": "0",
82        "verifyCmd": "$TC class show dev $DUMMY",
83        "matchPattern": "class qfq 1:1 root weight 1 maxpkt 2000",
84        "matchCount": "1",
85        "teardown": [
86            "$TC qdisc del dev $DUMMY handle 1: root"
87        ]
88    },
89    {
90        "id": "22df",
91        "name": "Test QFQ class maxpkt setting lower bound",
92        "category": [
93            "qdisc",
94            "qfq"
95        ],
96        "plugins": {
97            "requires": "nsPlugin"
98        },
99        "setup": [
100            "$TC qdisc add dev $DUMMY handle 1: root qfq"
101        ],
102        "cmdUnderTest": "$TC class add dev $DUMMY parent 1: classid 1:1 qfq maxpkt 128",
103        "expExitCode": "2",
104        "verifyCmd": "$TC class show dev $DUMMY",
105        "matchPattern": "class qfq 1:1 root weight 1 maxpkt 128",
106        "matchCount": "0",
107        "teardown": [
108            "$TC qdisc del dev $DUMMY handle 1: root"
109        ]
110    },
111    {
112        "id": "92ee",
113        "name": "Test QFQ class maxpkt setting upper bound",
114        "category": [
115            "qdisc",
116            "qfq"
117        ],
118        "plugins": {
119            "requires": "nsPlugin"
120        },
121        "setup": [
122            "$TC qdisc add dev $DUMMY handle 1: root qfq"
123        ],
124        "cmdUnderTest": "$TC class add dev $DUMMY parent 1: classid 1:1 qfq maxpkt 99999",
125        "expExitCode": "2",
126        "verifyCmd": "$TC class show dev $DUMMY",
127        "matchPattern": "class qfq 1:1 root weight 1 maxpkt 99999",
128        "matchCount": "0",
129        "teardown": [
130            "$TC qdisc del dev $DUMMY handle 1: root"
131        ]
132    },
133    {
134        "id": "d920",
135        "name": "Create QFQ with multiple class setting",
136        "category": [
137            "qdisc",
138            "qfq"
139        ],
140        "plugins": {
141            "requires": "nsPlugin"
142        },
143        "setup": [
144            "$TC qdisc add dev $DUMMY handle 1: root qfq",
145            "$TC class add dev $DUMMY parent 1: classid 1:1 qfq weight 100"
146        ],
147        "cmdUnderTest": "$TC class add dev $DUMMY parent 1: classid 1:2 qfq weight 200",
148        "expExitCode": "0",
149        "verifyCmd": "$TC class show dev $DUMMY",
150        "matchPattern": "class qfq 1:[0-9]+ root weight [0-9]+00 maxpkt",
151        "matchCount": "2",
152        "teardown": [
153            "$TC qdisc del dev $DUMMY handle 1: root"
154        ]
155    },
156    {
157        "id": "0548",
158        "name": "Delete QFQ with handle",
159        "category": [
160            "qdisc",
161            "qfq"
162        ],
163        "plugins": {
164            "requires": "nsPlugin"
165        },
166        "setup": [
167            "$TC qdisc add dev $DUMMY handle 1: root qfq",
168            "$TC class add dev $DUMMY parent 1: classid 1:1 qfq weight 100"
169        ],
170        "cmdUnderTest": "$TC qdisc del dev $DUMMY handle 1: root",
171        "expExitCode": "0",
172        "verifyCmd": "$TC class show dev $DUMMY",
173        "matchPattern": "qdisc qfq 1: root refcnt [0-9]+",
174        "matchCount": "0",
175        "teardown": [
176        ]
177    },
178    {
179        "id": "5901",
180        "name": "Show QFQ class",
181        "category": [
182            "qdisc",
183            "qfq"
184        ],
185        "plugins": {
186            "requires": "nsPlugin"
187        },
188        "setup": [
189        ],
190        "cmdUnderTest": "$TC qdisc add dev $DUMMY handle 1: root qfq",
191        "expExitCode": "0",
192        "verifyCmd": "$TC class show dev $DUMMY",
193        "matchPattern": "class qfq 1:",
194        "matchCount": "0",
195        "teardown": [
196            "$TC qdisc del dev $DUMMY handle 1: root"
197        ]
198    },
199    {
200        "id": "85ee",
201        "name": "QFQ with big MTU",
202        "category": [
203            "qdisc",
204            "qfq"
205        ],
206        "plugins": {
207            "requires": "nsPlugin"
208        },
209        "setup": [
210            "$IP link set dev $DUMMY mtu 2147483647 || /bin/true",
211            "$TC qdisc add dev $DUMMY handle 1: root qfq"
212        ],
213        "cmdUnderTest": "$TC class add dev $DUMMY parent 1: classid 1:1 qfq weight 100",
214        "expExitCode": "2",
215        "verifyCmd": "$TC class show dev $DUMMY",
216        "matchPattern": "class qfq 1:",
217        "matchCount": "0",
218        "teardown": [
219        ]
220    },
221    {
222        "id": "ddfa",
223        "name": "QFQ with small MTU",
224        "category": [
225            "qdisc",
226            "qfq"
227        ],
228        "plugins": {
229            "requires": "nsPlugin"
230        },
231        "setup": [
232            "$IP link set dev $DUMMY mtu 256 || /bin/true",
233            "$TC qdisc add dev $DUMMY handle 1: root qfq"
234        ],
235        "cmdUnderTest": "$TC class add dev $DUMMY parent 1: classid 1:1 qfq weight 100",
236        "expExitCode": "2",
237        "verifyCmd": "$TC class show dev $DUMMY",
238        "matchPattern": "class qfq 1:",
239        "matchCount": "0",
240        "teardown": [
241        ]
242    },
243    {
244        "id": "5993",
245        "name": "QFQ with stab overhead greater than max packet len",
246        "category": [
247            "qdisc",
248            "qfq",
249            "scapy"
250        ],
251        "plugins": {
252            "requires": [
253                "nsPlugin",
254                "scapyPlugin"
255            ]
256        },
257        "setup": [
258            "$IP link set dev $DUMMY up || /bin/true",
259            "$TC qdisc add dev $DUMMY handle 1: stab mtu 2048 tsize 512 mpu 0 overhead 999999999 linklayer ethernet root qfq",
260            "$TC class add dev $DUMMY parent 1: classid 1:1 qfq weight 100",
261            "$TC qdisc add dev $DEV1 clsact",
262            "$TC filter add dev $DEV1 ingress protocol ip flower dst_ip 1.3.3.7/32 action mirred egress mirror dev $DUMMY"
263        ],
264        "cmdUnderTest": "$TC filter add dev $DUMMY parent 1: matchall classid 1:1",
265        "scapy": [
266            {
267                "iface": "$DEV0",
268                "count": 22,
269                "packet": "Ether(type=0x800)/IP(src='10.0.0.10',dst='1.3.3.7')/TCP(sport=5000,dport=10)"
270            }
271        ],
272        "expExitCode": "0",
273        "verifyCmd": "$TC -s qdisc ls dev $DUMMY",
274        "matchPattern": "dropped 22",
275        "matchCount": "1",
276        "teardown": [
277            "$TC qdisc del dev $DUMMY handle 1: root qfq"
278        ]
279    }
280]
281