1[
2    {
3        "id": "901f",
4        "name": "Add fw filter with prio at 32-bit maxixum",
5        "category": [
6            "filter",
7            "fw"
8        ],
9        "setup": [
10            "$TC qdisc add dev $DEV1 ingress"
11        ],
12        "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: handle 1 prio 65535 fw action ok",
13        "expExitCode": "0",
14        "verifyCmd": "$TC filter get dev $DEV1 parent ffff: handle 1 prio 65535 protocol all fw",
15        "matchPattern": "pref 65535 fw.*handle 0x1.*gact action pass",
16        "matchCount": "1",
17        "teardown": [
18            "$TC qdisc del dev $DEV1 ingress"
19        ]
20    },
21    {
22        "id": "51e2",
23        "name": "Add fw filter with prio exceeding 32-bit maxixum",
24        "category": [
25            "filter",
26            "fw"
27        ],
28        "setup": [
29            "$TC qdisc add dev $DEV1 ingress"
30        ],
31        "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: handle 1 prio 65536 fw action ok",
32        "expExitCode": "255",
33        "verifyCmd": "$TC filter get dev $DEV1 parent ffff: handle 1 prio 65536 protocol all fw",
34        "matchPattern": "pref 65536 fw.*handle 0x1.*gact action pass",
35        "matchCount": "0",
36        "teardown": [
37            "$TC qdisc del dev $DEV1 ingress"
38        ]
39    },
40    {
41        "id": "d987",
42        "name": "Add fw filter with action ok",
43        "category": [
44            "filter",
45            "fw"
46        ],
47        "setup": [
48            "$TC qdisc add dev $DEV1 ingress"
49        ],
50        "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: handle 1 prio 1 fw action ok",
51        "expExitCode": "0",
52        "verifyCmd": "$TC filter get dev $DEV1 parent ffff: handle 1 prio 1 protocol all fw",
53        "matchPattern": "handle 0x1.*gact action pass",
54        "matchCount": "1",
55        "teardown": [
56            "$TC qdisc del dev $DEV1 ingress"
57        ]
58    },
59    {
60        "id": "affe",
61        "name": "Add fw filter with action continue",
62        "category": [
63            "filter",
64            "fw"
65        ],
66        "setup": [
67            "$TC qdisc add dev $DEV1 ingress"
68        ],
69        "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: handle 1 prio 1 fw action continue",
70        "expExitCode": "0",
71        "verifyCmd": "$TC filter get dev $DEV1 parent ffff: handle 1 prio 1 protocol all fw",
72        "matchPattern": "handle 0x1.*gact action continue",
73        "matchCount": "1",
74        "teardown": [
75            "$TC qdisc del dev $DEV1 ingress"
76        ]
77    },
78    {
79        "id": "28bc",
80        "name": "Add fw filter with action pipe",
81        "category": [
82            "filter",
83            "fw"
84        ],
85        "setup": [
86            "$TC qdisc add dev $DEV1 ingress"
87        ],
88        "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: handle 1 prio 1 fw action pipe",
89        "expExitCode": "0",
90        "verifyCmd": "$TC filter get dev $DEV1 parent ffff: handle 1 prio 1 protocol all fw",
91        "matchPattern": "handle 0x1.*gact action pipe",
92        "matchCount": "1",
93        "teardown": [
94            "$TC qdisc del dev $DEV1 ingress"
95        ]
96    },
97    {
98        "id": "8da2",
99        "name": "Add fw filter with action drop",
100        "category": [
101            "filter",
102            "fw"
103        ],
104        "setup": [
105            "$TC qdisc add dev $DEV1 ingress"
106        ],
107        "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: handle 1 prio 1 fw action drop",
108        "expExitCode": "0",
109        "verifyCmd": "$TC filter get dev $DEV1 parent ffff: handle 1 protocol all prio 1 fw",
110        "matchPattern": "handle 0x1.*gact action drop",
111        "matchCount": "1",
112        "teardown": [
113            "$TC qdisc del dev $DEV1 ingress"
114        ]
115    },
116    {
117        "id": "9436",
118        "name": "Add fw filter with action reclassify",
119        "category": [
120            "filter",
121            "fw"
122        ],
123        "setup": [
124            "$TC qdisc add dev $DEV1 ingress"
125        ],
126        "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: handle 1 prio 1 fw action reclassify",
127        "expExitCode": "0",
128        "verifyCmd": "$TC filter get dev $DEV1 parent ffff: handle 1 prio 1 protocol all fw",
129        "matchPattern": "handle 0x1.*gact action reclassify",
130        "matchCount": "1",
131        "teardown": [
132            "$TC qdisc del dev $DEV1 ingress"
133        ]
134    },
135    {
136        "id": "95bb",
137        "name": "Add fw filter with action jump 10",
138        "category": [
139            "filter",
140            "fw"
141        ],
142        "setup": [
143            "$TC qdisc add dev $DEV1 ingress"
144        ],
145        "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: handle 1 prio 1 fw action jump 10",
146        "expExitCode": "0",
147        "verifyCmd": "$TC filter get dev $DEV1 parent ffff: handle 1 prio 1 protocol all fw",
148        "matchPattern": "handle 0x1.*gact action jump 10",
149        "matchCount": "1",
150        "teardown": [
151            "$TC qdisc del dev $DEV1 ingress"
152        ]
153    },
154    {
155        "id": "3d74",
156        "name": "Add fw filter with action goto chain 5",
157        "category": [
158            "filter",
159            "fw"
160        ],
161        "setup": [
162            "$TC qdisc add dev $DEV1 ingress"
163        ],
164        "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: handle 1 prio 1 fw action goto chain 5",
165        "expExitCode": "0",
166        "verifyCmd": "$TC filter get dev $DEV1 parent ffff: handle 1 prio 1 protocol all fw",
167        "matchPattern": "handle 0x1.*gact action goto chain 5",
168        "matchCount": "1",
169        "teardown": [
170            "$TC qdisc del dev $DEV1 ingress"
171        ]
172    },
173    {
174        "id": "eb8f",
175        "name": "Add fw filter with invalid action",
176        "category": [
177            "filter",
178            "fw"
179        ],
180        "setup": [
181            "$TC qdisc add dev $DEV1 ingress"
182        ],
183        "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: handle 1 prio 1 fw action pump",
184        "expExitCode": "255",
185        "verifyCmd": "$TC filter get dev $DEV1 parent ffff: handle 1 prio 1 protocol all fw",
186        "matchPattern": "handle 0x1.*gact action pump",
187        "matchCount": "0",
188        "teardown": [
189            "$TC qdisc del dev $DEV1 ingress"
190        ]
191    },
192    {
193        "id": "6a79",
194        "name": "Add fw filter with missing mandatory action",
195        "category": [
196            "filter",
197            "fw"
198        ],
199        "setup": [
200            "$TC qdisc add dev $DEV1 ingress"
201        ],
202        "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: handle 1 prio 1 fw",
203        "expExitCode": "2",
204        "verifyCmd": "$TC filter get dev $DEV1 parent ffff: handle 1 prio 1 protocol all fw",
205        "matchPattern": "filter protocol all pref [0-9]+ fw.*handle 0x1",
206        "matchCount": "0",
207        "teardown": [
208            "$TC qdisc del dev $DEV1 ingress"
209        ]
210    },
211    {
212        "id": "8298",
213        "name": "Add fw filter with cookie",
214        "category": [
215            "filter",
216            "fw"
217        ],
218        "setup": [
219            "$TC qdisc add dev $DEV1 ingress"
220        ],
221        "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: handle 1 prio 2 fw action pipe cookie aa11bb22cc33dd44ee55ff66aa11b1b2",
222        "expExitCode": "0",
223        "verifyCmd": "$TC filter get dev $DEV1 parent ffff: handle 1 prio 2 protocol all fw",
224        "matchPattern": "pref 2 fw.*handle 0x1.*gact action pipe.*cookie aa11bb22cc33dd44ee55ff66aa11b1b2",
225        "matchCount": "1",
226        "teardown": [
227            "$TC qdisc del dev $DEV1 ingress"
228        ]
229    },
230    {
231        "id": "a88c",
232        "name": "Add fw filter with invalid cookie",
233        "category": [
234            "filter",
235            "fw"
236        ],
237        "setup": [
238            "$TC qdisc add dev $DEV1 ingress"
239        ],
240        "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: handle 1 prio 2 fw action continue cookie aa11bb22cc33dd44ee55ff66aa11b1b2777888",
241        "expExitCode": "255",
242        "verifyCmd": "$TC filter get dev $DEV1 parent ffff: handle 1 prio 2 protocol all fw",
243        "matchPattern": "pref 2 fw.*handle 0x1.*gact action continue.*cookie aa11bb22cc33dd44ee55ff66aa11b1b2777888",
244        "matchCount": "0",
245        "teardown": [
246            "$TC qdisc del dev $DEV1 ingress"
247        ]
248    },
249    {
250        "id": "10f6",
251        "name": "Add fw filter with handle in hex",
252        "category": [
253            "filter",
254            "fw"
255        ],
256        "setup": [
257            "$TC qdisc add dev $DEV1 ingress"
258        ],
259        "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: handle 0xa1b2ff prio 1 fw action ok",
260        "expExitCode": "0",
261        "verifyCmd": "$TC filter get dev $DEV1 parent ffff: handle 0xa1b2ff prio 1 protocol all fw",
262        "matchPattern": "fw.*handle 0xa1b2ff.*gact action pass",
263        "matchCount": "1",
264        "teardown": [
265            "$TC qdisc del dev $DEV1 ingress"
266        ]
267    },
268    {
269        "id": "9d51",
270        "name": "Add fw filter with handle at 32-bit maximum",
271        "category": [
272            "filter",
273            "fw"
274        ],
275        "setup": [
276            "$TC qdisc add dev $DEV1 ingress"
277        ],
278        "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: handle 4294967295 prio 1 fw action ok",
279        "expExitCode": "0",
280        "verifyCmd": "$TC filter get dev $DEV1 parent ffff: handle 4294967295 prio 1 protocol all fw",
281        "matchPattern": "fw.*handle 0xffffffff.*gact action pass",
282        "matchCount": "1",
283        "teardown": [
284            "$TC qdisc del dev $DEV1 ingress"
285        ]
286    },
287    {
288        "id": "d939",
289        "name": "Add fw filter with handle exceeding 32-bit maximum",
290        "category": [
291            "filter",
292            "fw"
293        ],
294        "setup": [
295            "$TC qdisc add dev $DEV1 ingress"
296        ],
297        "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: handle 4294967296 prio 1 fw action ok",
298        "expExitCode": "1",
299        "verifyCmd": "$TC filter get dev $DEV1 parent ffff: handle 4294967296 prio 1 protocol all fw",
300        "matchPattern": "fw.*handle 0x.*gact action pass",
301        "matchCount": "0",
302        "teardown": [
303            "$TC qdisc del dev $DEV1 ingress"
304        ]
305    },
306    {
307        "id": "658c",
308        "name": "Add fw filter with mask in hex",
309        "category": [
310            "filter",
311            "fw"
312        ],
313        "setup": [
314            "$TC qdisc add dev $DEV1 ingress"
315        ],
316        "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: handle 10/0xa1b2f prio 1 fw action ok",
317        "expExitCode": "0",
318        "verifyCmd": "$TC filter get dev $DEV1 parent ffff: handle 10 prio 1 protocol all fw",
319        "matchPattern": "fw.*handle 0xa/0xa1b2f",
320        "matchCount": "1",
321        "teardown": [
322            "$TC qdisc del dev $DEV1 ingress"
323        ]
324    },
325    {
326        "id": "86be",
327        "name": "Add fw filter with mask at 32-bit maximum",
328        "category": [
329            "filter",
330            "fw"
331        ],
332        "setup": [
333            "$TC qdisc add dev $DEV1 ingress"
334        ],
335        "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: handle 10/4294967295 prio 1 fw action ok",
336        "expExitCode": "0",
337        "verifyCmd": "$TC filter get dev $DEV1 parent ffff: handle 10 prio 1 protocol all fw",
338        "matchPattern": "fw.*handle 0xa[^/]",
339        "matchCount": "1",
340        "teardown": [
341            "$TC qdisc del dev $DEV1 ingress"
342        ]
343    },
344    {
345        "id": "e635",
346        "name": "Add fw filter with mask exceeding 32-bit maximum",
347        "category": [
348            "filter",
349            "fw"
350        ],
351        "setup": [
352            "$TC qdisc add dev $DEV1 ingress"
353        ],
354        "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: handle 10/4294967296 prio 1 fw action ok",
355        "expExitCode": "1",
356        "verifyCmd": "$TC filter get dev $DEV1 parent ffff: handle 10 prio 1 protocol all fw",
357        "matchPattern": "fw.*handle 0xa",
358        "matchCount": "0",
359        "teardown": [
360            "$TC qdisc del dev $DEV1 ingress"
361        ]
362    },
363    {
364        "id": "6cab",
365        "name": "Add fw filter with handle/mask in hex",
366        "category": [
367            "filter",
368            "fw"
369        ],
370        "setup": [
371            "$TC qdisc add dev $DEV1 ingress"
372        ],
373        "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: handle 0xa1b2cdff/0x1a2bffdc prio 1 fw action ok",
374        "expExitCode": "0",
375        "verifyCmd": "$TC filter get dev $DEV1 parent ffff: handle 0xa1b2cdff prio 1 protocol all fw",
376        "matchPattern": "fw.*handle 0xa1b2cdff/0x1a2bffdc",
377        "matchCount": "1",
378        "teardown": [
379            "$TC qdisc del dev $DEV1 ingress"
380        ]
381    },
382    {
383        "id": "8700",
384        "name": "Add fw filter with handle/mask at 32-bit maximum",
385        "category": [
386            "filter",
387            "fw"
388        ],
389        "setup": [
390            "$TC qdisc add dev $DEV1 ingress"
391        ],
392        "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: handle 4294967295/4294967295 prio 1 fw action ok",
393        "expExitCode": "0",
394        "verifyCmd": "$TC filter get dev $DEV1 parent ffff: handle 0xffffffff prio 1 protocol all fw",
395        "matchPattern": "fw.*handle 0xffffffff[^/]",
396        "matchCount": "1",
397        "teardown": [
398            "$TC qdisc del dev $DEV1 ingress"
399        ]
400    },
401    {
402        "id": "7d62",
403        "name": "Add fw filter with handle/mask exceeding 32-bit maximum",
404        "category": [
405            "filter",
406            "fw"
407        ],
408        "setup": [
409            "$TC qdisc add dev $DEV1 ingress"
410        ],
411        "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: handle 4294967296/4294967296 prio 1 fw action ok",
412        "expExitCode": "1",
413        "verifyCmd": "$TC filter get dev $DEV1 parent ffff: handle 10 prio 1 protocol all fw",
414        "matchPattern": "fw.*handle",
415        "matchCount": "0",
416        "teardown": [
417            "$TC qdisc del dev $DEV1 ingress"
418        ]
419    },
420    {
421        "id": "7b69",
422        "name": "Add fw filter with missing mandatory handle",
423        "category": [
424            "filter",
425            "fw"
426        ],
427        "setup": [
428            "$TC qdisc add dev $DEV1 ingress"
429        ],
430        "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: prio 1 fw action ok",
431        "expExitCode": "2",
432        "verifyCmd": "$TC filter show dev $DEV1 parent ffff:",
433        "matchPattern": "filter protocol all.*fw.*handle.*gact action pass",
434        "matchCount": "0",
435        "teardown": [
436            "$TC qdisc del dev $DEV1 ingress"
437        ]
438    },
439    {
440        "id": "d68b",
441        "name": "Add fw filter with invalid parent",
442        "category": [
443            "filter",
444            "fw"
445        ],
446        "setup": [
447            "$TC qdisc add dev $DEV1 ingress"
448        ],
449        "cmdUnderTest": "$TC filter add dev $DEV1 parent aa11b1b2: handle 1 prio 1 fw action ok",
450        "expExitCode": "255",
451        "verifyCmd": "$TC filter dev $DEV1 parent aa11b1b2: handle 1 prio 1 protocol all fw",
452        "matchPattern": "filter protocol all pref 1 fw.*handle 0x1.*gact action pass",
453        "matchCount": "0",
454        "teardown": [
455            "$TC qdisc del dev $DEV1 ingress"
456        ]
457    },
458    {
459        "id": "66e0",
460        "name": "Add fw filter with missing mandatory parent id",
461        "category": [
462            "filter",
463            "fw"
464        ],
465        "setup": [
466            "$TC qdisc add dev $DEV1 ingress"
467        ],
468        "cmdUnderTest": "$TC filter add dev $DEV1 handle 1 prio 1 fw action ok",
469        "expExitCode": "2",
470        "verifyCmd": "$TC filter get dev $DEV1 parent ffff: handle 1 prio 1 protocol all fw",
471        "matchPattern": "pref [0-9]+ fw.*handle 0x1.*gact action pass",
472        "matchCount": "0",
473        "teardown": [
474            "$TC qdisc del dev $DEV1 ingress"
475        ]
476    },
477    {
478        "id": "0ff3",
479        "name": "Add fw filter with classid",
480        "category": [
481            "filter",
482            "fw"
483        ],
484        "setup": [
485            "$TC qdisc add dev $DEV1 ingress"
486        ],
487        "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: handle 1 prio 1 fw classid 3 action ok",
488        "expExitCode": "0",
489        "verifyCmd": "$TC filter get dev $DEV1 parent ffff: handle 1 prio 1 protocol all fw",
490        "matchPattern": "fw.*handle 0x1 classid :3.*gact action pass",
491        "matchCount": "1",
492        "teardown": [
493            "$TC qdisc del dev $DEV1 ingress"
494        ]
495    },
496    {
497        "id": "9849",
498        "name": "Add fw filter with classid at root",
499        "category": [
500            "filter",
501            "fw"
502        ],
503        "setup": [
504            "$TC qdisc add dev $DEV1 ingress"
505        ],
506        "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: handle 1 prio 1 fw classid ffff:ffff action ok",
507        "expExitCode": "0",
508        "verifyCmd": "$TC filter get dev $DEV1 parent ffff: handle 1 prio 1 protocol all fw",
509        "matchPattern": "pref 1 fw.*handle 0x1 classid root.*gact action pass",
510        "matchCount": "1",
511        "teardown": [
512            "$TC qdisc del dev $DEV1 ingress"
513        ]
514    },
515    {
516        "id": "b7ff",
517        "name": "Add fw filter with classid - keeps last 8 (hex) digits",
518        "category": [
519            "filter",
520            "fw"
521        ],
522        "setup": [
523            "$TC qdisc add dev $DEV1 ingress"
524        ],
525        "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: handle 1 prio 1 fw classid 98765fedcb action ok",
526        "expExitCode": "0",
527        "verifyCmd": "$TC filter get dev $DEV1 parent ffff: handle 1 prio 1 protocol all fw",
528        "matchPattern": "fw.*handle 0x1 classid 765f:edcb.*gact action pass",
529        "matchCount": "1",
530        "teardown": [
531            "$TC qdisc del dev $DEV1 ingress"
532        ]
533    },
534    {
535        "id": "2b18",
536        "name": "Add fw filter with invalid classid",
537        "category": [
538            "filter",
539            "fw"
540        ],
541        "setup": [
542            "$TC qdisc add dev $DEV1 ingress"
543        ],
544        "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: handle 1 prio 1 fw classid 6789defg action ok",
545        "expExitCode": "1",
546        "verifyCmd": "$TC filter get dev $DEV1 parent ffff: handle 1 prio 1 protocol all fw",
547        "matchPattern": "fw.*handle 0x1 classid 6789:defg.*gact action pass",
548        "matchCount": "0",
549        "teardown": [
550            "$TC qdisc del dev $DEV1 ingress"
551        ]
552    },
553    {
554        "id": "fade",
555        "name": "Add fw filter with flowid",
556        "category": [
557            "filter",
558            "fw"
559        ],
560        "setup": [
561            "$TC qdisc add dev $DEV1 ingress"
562        ],
563        "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: handle 10 prio 1 fw flowid 1:10 action ok",
564        "expExitCode": "0",
565        "verifyCmd": "$TC filter get dev $DEV1 parent ffff: handle 10 prio 1 protocol all fw",
566        "matchPattern": "filter parent ffff: protocol all pref 1 fw.*handle 0xa classid 1:10.*gact action pass",
567        "matchCount": "1",
568        "teardown": [
569            "$TC qdisc del dev $DEV1 ingress"
570        ]
571    },
572    {
573        "id": "33af",
574        "name": "Add fw filter with flowid then classid (same arg, takes second)",
575        "category": [
576            "filter",
577            "fw"
578        ],
579        "setup": [
580            "$TC qdisc add dev $DEV1 ingress"
581        ],
582        "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: handle 11 prio 1 fw flowid 10 classid 4 action ok",
583        "expExitCode": "0",
584        "verifyCmd": "$TC filter get dev $DEV1 parent ffff: handle 11 prio 1 protocol all fw",
585        "matchPattern": "filter parent ffff: protocol all pref 1 fw.*handle 0xb classid :4.*gact action pass",
586        "matchCount": "1",
587        "teardown": [
588            "$TC qdisc del dev $DEV1 ingress"
589        ]
590    },
591    {
592        "id": "8a8c",
593        "name": "Add fw filter with classid then flowid (same arg, takes second)",
594        "category": [
595            "filter",
596            "fw"
597        ],
598        "setup": [
599            "$TC qdisc add dev $DEV1 ingress"
600        ],
601        "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: handle 11 prio 1 fw classid 4 flowid 10 action ok",
602        "expExitCode": "0",
603        "verifyCmd": "$TC filter get dev $DEV1 parent ffff: handle 11 prio 1 protocol all fw",
604        "matchPattern": "filter parent ffff: protocol all pref 1 fw.*handle 0xb classid :10.*gact action pass",
605        "matchCount": "1",
606        "teardown": [
607            "$TC qdisc del dev $DEV1 ingress"
608        ]
609    },
610    {
611        "id": "b50d",
612        "name": "Add fw filter with handle val/mask and flowid 10:1000",
613        "category": [
614            "filter",
615            "fw"
616        ],
617        "setup": [
618            "$TC qdisc add dev $DEV1 ingress"
619        ],
620        "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: prio 3 handle 10/0xff fw flowid 10:1000 action ok",
621        "expExitCode": "0",
622        "verifyCmd": "$TC filter get dev $DEV1 parent ffff: handle 10 prio 3 protocol all fw",
623        "matchPattern": "filter parent ffff: protocol all pref 3 fw.*handle 0xa/0xff classid 10:1000.*gact action pass",
624        "matchCount": "1",
625        "teardown": [
626            "$TC qdisc del dev $DEV1 ingress"
627        ]
628    },
629    {
630        "id": "7207",
631        "name": "Add fw filter with protocol ip",
632        "category": [
633            "filter",
634            "fw"
635        ],
636        "setup": [
637            "$TC qdisc add dev $DEV1 ingress"
638        ],
639        "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: protocol ip prio 1 handle 3 fw action ok",
640        "expExitCode": "0",
641        "verifyCmd": "$TC filter get dev $DEV1 parent ffff: handle 3 prio 1 protocol ip fw",
642        "matchPattern": "filter parent ffff: protocol ip pref 1 fw.*handle 0x3.*gact action pass.*index [0-9]+ ref [0-9]+ bind [0-9]+",
643        "matchCount": "1",
644        "teardown": [
645            "$TC qdisc del dev $DEV1 ingress"
646        ]
647    },
648    {
649        "id": "306d",
650        "name": "Add fw filter with protocol ipv6",
651        "category": [
652            "filter",
653            "fw"
654        ],
655        "setup": [
656            "$TC qdisc add dev $DEV1 ingress"
657        ],
658        "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: protocol ipv6 prio 2 handle 4 fw action ok",
659        "expExitCode": "0",
660        "verifyCmd": "$TC filter get dev $DEV1 parent ffff: handle 4 prio 2 protocol ipv6 fw",
661        "matchPattern": "filter parent ffff: protocol ipv6 pref 2 fw.*handle 0x4.*gact action pass.*index [0-9]+ ref [0-9]+ bind [0-9]+",
662        "matchCount": "1",
663        "teardown": [
664            "$TC qdisc del dev $DEV1 ingress"
665        ]
666    },
667    {
668        "id": "9a78",
669        "name": "Add fw filter with protocol arp",
670        "category": [
671            "filter",
672            "fw"
673        ],
674        "setup": [
675            "$TC qdisc add dev $DEV1 ingress"
676        ],
677        "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: protocol arp prio 5 handle 7 fw action drop",
678        "expExitCode": "0",
679        "verifyCmd": "$TC filter get dev $DEV1 parent ffff: handle 7 prio 5 protocol arp fw",
680        "matchPattern": "filter parent ffff: protocol arp pref 5 fw.*handle 0x7.*gact action drop.*index [0-9]+ ref [0-9]+ bind [0-9]+",
681        "matchCount": "1",
682        "teardown": [
683            "$TC qdisc del dev $DEV1 ingress"
684        ]
685    },
686    {
687        "id": "1821",
688        "name": "Add fw filter with protocol 802_3",
689        "category": [
690            "filter",
691            "fw"
692        ],
693        "setup": [
694            "$TC qdisc add dev $DEV1 ingress"
695        ],
696        "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: protocol 802_3 handle 1 prio 1 fw action ok",
697        "expExitCode": "0",
698        "verifyCmd": "$TC filter get dev $DEV1 parent ffff: handle 1 prio 1 protocol 802_3 fw",
699        "matchPattern": "filter parent ffff: protocol 802_3 pref 1 fw.*handle 0x1.*gact action pass",
700        "matchCount": "1",
701        "teardown": [
702            "$TC qdisc del dev $DEV1 ingress"
703        ]
704    },
705    {
706        "id": "2260",
707        "name": "Add fw filter with invalid protocol",
708        "category": [
709            "filter",
710            "fw"
711        ],
712        "setup": [
713            "$TC qdisc add dev $DEV1 ingress"
714        ],
715        "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: protocol igmp handle 1 prio 1 fw action ok",
716        "expExitCode": "255",
717        "verifyCmd": "$TC filter get dev $DEV1 parent ffff: handle 1 prio 1 protocol igmp fw",
718        "matchPattern": "filter parent ffff: protocol igmp pref 1 fw.*handle 0x1.*gact action pass",
719        "matchCount": "0",
720        "teardown": [
721            "$TC qdisc del dev $DEV1 ingress"
722        ]
723    },
724    {
725        "id": "09d7",
726        "name": "Add fw filters protocol 802_3 and ip with conflicting priorities",
727        "category": [
728            "filter",
729            "fw"
730        ],
731        "setup": [
732            "$TC qdisc add dev $DEV1 ingress",
733            "$TC filter add dev $DEV1 parent ffff: protocol 802_3 prio 3 handle 7 fw action ok"
734        ],
735        "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: protocol ip prio 3 handle 8 fw action ok",
736        "expExitCode": "2",
737        "verifyCmd": "$TC filter get dev $DEV1 parent ffff: handle 8 prio 3 protocol ip fw",
738        "matchPattern": "filter parent ffff: protocol ip pref 3 fw.*handle 0x8",
739        "matchCount": "0",
740        "teardown": [
741            "$TC qdisc del dev $DEV1 ingress"
742        ]
743    },
744    {
745        "id": "6973",
746        "name": "Add fw filters with same index, same action",
747        "category": [
748            "filter",
749            "fw"
750        ],
751        "setup": [
752            "$TC qdisc add dev $DEV1 ingress",
753            "$TC filter add dev $DEV1 parent ffff: prio 6 handle 2 fw action continue index 5"
754        ],
755        "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: prio 8 handle 4 fw action continue index 5",
756        "expExitCode": "0",
757        "verifyCmd": "$TC filter get dev $DEV1 parent ffff: handle 4 prio 8 protocol all fw",
758        "matchPattern": "filter parent ffff: protocol all pref 8 fw.*handle 0x4.*gact action continue.*index 5 ref 2 bind 2",
759        "matchCount": "1",
760        "teardown": [
761            "$TC qdisc del dev $DEV1 ingress"
762        ]
763    },
764    {
765        "id": "fc06",
766        "name": "Add fw filters with action police",
767        "category": [
768            "filter",
769            "fw"
770        ],
771        "setup": [
772            "$TC qdisc add dev $DEV1 ingress"
773        ],
774        "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: prio 3 handle 4 fw action police rate 1kbit burst 10k index 5",
775        "expExitCode": "0",
776        "verifyCmd": "$TC filter get dev $DEV1 parent ffff: handle 4 prio 3 protocol all fw",
777        "matchPattern": "filter parent ffff: protocol all pref 3 fw.*handle 0x4.*police 0x5 rate 1Kbit burst 10Kb mtu 2Kb action reclassify overhead 0b.*ref 1 bind 1",
778        "matchCount": "1",
779        "teardown": [
780            "$TC qdisc del dev $DEV1 ingress"
781        ]
782    },
783    {
784        "id": "aac7",
785        "name": "Add fw filters with action police linklayer atm",
786        "category": [
787            "filter",
788            "fw"
789        ],
790        "setup": [
791            "$TC qdisc add dev $DEV1 ingress"
792        ],
793        "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: prio 3 handle 4 fw action police rate 2mbit burst 200k linklayer atm index 8",
794        "expExitCode": "0",
795        "verifyCmd": "$TC filter get dev $DEV1 parent ffff: handle 4 prio 3 protocol all fw",
796        "matchPattern": "filter parent ffff: protocol all pref 3 fw.*handle 0x4.*police 0x8 rate 2Mbit burst 200Kb mtu 2Kb action reclassify overhead 0b linklayer atm.*ref 1 bind 1",
797        "matchCount": "1",
798        "teardown": [
799            "$TC qdisc del dev $DEV1 ingress"
800        ]
801    },
802    {
803        "id": "5339",
804        "name": "Del entire fw filter",
805        "category": [
806            "filter",
807            "fw"
808        ],
809        "setup": [
810            "$TC qdisc add dev $DEV1 ingress",
811            "$TC filter add dev $DEV1 parent ffff: handle 5 prio 7 fw action pass",
812            "$TC filter add dev $DEV1 parent ffff: handle 3 prio 9 fw action pass"
813        ],
814        "cmdUnderTest": "$TC filter del dev $DEV1 parent ffff:",
815        "expExitCode": "0",
816        "verifyCmd": "$TC filter show dev $DEV1 parent ffff:",
817        "matchPattern": "protocol all pref.*handle.*gact action pass",
818        "matchCount": "0",
819        "teardown": [
820            "$TC qdisc del dev $DEV1 ingress"
821        ]
822    },
823    {
824        "id": "0e99",
825        "name": "Del single fw filter x1",
826        "__comment__": "First of two tests to check that one filter is there and the other isn't",
827        "category": [
828            "filter",
829            "fw"
830        ],
831        "setup": [
832            "$TC qdisc add dev $DEV1 ingress",
833            "$TC filter add dev $DEV1 parent ffff: handle 5 prio 7 fw action pass",
834            "$TC filter add dev $DEV1 parent ffff: handle 3 prio 9 fw action pass"
835        ],
836        "cmdUnderTest": "$TC filter del dev $DEV1 parent ffff: handle 3 prio 9 fw action pass",
837        "expExitCode": "0",
838        "verifyCmd": "$TC filter show dev $DEV1 parent ffff:",
839        "matchPattern": "protocol all pref 7.*handle 0x5.*gact action pass",
840        "matchCount": "1",
841        "teardown": [
842            "$TC qdisc del dev $DEV1 ingress"
843        ]
844    },
845    {
846        "id": "f54c",
847        "name": "Del single fw filter x2",
848        "__comment__": "Second of two tests to check that one filter is there and the other isn't",
849        "category": [
850            "filter",
851            "fw"
852        ],
853        "setup": [
854            "$TC qdisc add dev $DEV1 ingress",
855            "$TC filter add dev $DEV1 parent ffff: handle 5 prio 7 fw action pass",
856            "$TC filter add dev $DEV1 parent ffff: handle 3 prio 9 fw action pass"
857        ],
858        "cmdUnderTest": "$TC filter del dev $DEV1 parent ffff: handle 3 prio 9 fw action pass",
859        "expExitCode": "0",
860        "verifyCmd": "$TC filter show dev $DEV1 parent ffff:",
861        "matchPattern": "protocol all pref 9.*handle 0x3.*gact action pass",
862        "matchCount": "0",
863        "teardown": [
864            "$TC qdisc del dev $DEV1 ingress"
865        ]
866    },
867    {
868        "id": "ba94",
869        "name": "Del fw filter by prio",
870        "category": [
871            "filter",
872            "fw"
873        ],
874        "setup": [
875            "$TC qdisc add dev $DEV1 ingress",
876            "$TC filter add dev $DEV1 parent ffff: handle 1 prio 4 fw action ok",
877            "$TC filter add dev $DEV1 parent ffff: handle 2 prio 4 fw action ok"
878        ],
879        "cmdUnderTest": "$TC filter del dev $DEV1 parent ffff: prio 4",
880        "expExitCode": "0",
881        "verifyCmd": "$TC filter show dev $DEV1 parent ffff:",
882        "matchPattern": "pref 4 fw.*gact action pass",
883        "matchCount": "0",
884        "teardown": [
885            "$TC qdisc del dev $DEV1 ingress"
886        ]
887    },
888    {
889        "id": "4acb",
890        "name": "Del fw filter by chain",
891        "category": [
892            "filter",
893            "fw"
894        ],
895        "setup": [
896            "$TC qdisc add dev $DEV1 ingress",
897            "$TC filter add dev $DEV1 parent ffff: handle 4 prio 2 chain 13 fw action pipe",
898            "$TC filter add dev $DEV1 parent ffff: handle 3 prio 5 chain 13 fw action pipe"
899        ],
900        "cmdUnderTest": "$TC filter del dev $DEV1 parent ffff: chain 13",
901        "expExitCode": "0",
902        "verifyCmd": "$TC filter show dev $DEV1 parent ffff:",
903        "matchPattern": "fw chain 13 handle.*gact action pipe",
904        "matchCount": "0",
905        "teardown": [
906            "$TC qdisc del dev $DEV1 ingress"
907        ]
908    },
909    {
910        "id": "3424",
911        "name": "Del fw filter by action (invalid)",
912        "category": [
913            "filter",
914            "fw"
915        ],
916        "setup": [
917            "$TC qdisc add dev $DEV1 ingress",
918            "$TC filter add dev $DEV1 parent ffff: handle 2 prio 4 fw action drop"
919        ],
920        "cmdUnderTest": "$TC filter del dev $DEV1 parent ffff: fw action drop",
921        "expExitCode": "2",
922        "verifyCmd": "$TC filter get dev $DEV1 parent ffff: handle 2 prio 4 protocol all fw",
923        "matchPattern": "handle 0x2.*gact action drop",
924        "matchCount": "1",
925        "teardown": [
926            "$TC qdisc del dev $DEV1 ingress"
927        ]
928    },
929    {
930        "id": "da89",
931        "name": "Del fw filter by handle (invalid)",
932        "category": [
933            "filter",
934            "fw"
935        ],
936        "setup": [
937            "$TC qdisc add dev $DEV1 ingress",
938            "$TC filter add dev $DEV1 parent ffff: handle 3 prio 4 fw action continue"
939        ],
940        "cmdUnderTest": "$TC filter del dev $DEV1 parent ffff: handle 3 fw",
941        "expExitCode": "2",
942        "verifyCmd": "$TC filter get dev $DEV1 parent ffff: handle 3 prio 4 protocol all fw",
943        "matchPattern": "handle 0x3.*gact action continue",
944        "matchCount": "1",
945        "teardown": [
946            "$TC qdisc del dev $DEV1 ingress"
947        ]
948    },
949    {
950        "id": "4d95",
951        "name": "Del fw filter by protocol (invalid)",
952        "category": [
953            "filter",
954            "fw"
955        ],
956        "setup": [
957            "$TC qdisc add dev $DEV1 ingress",
958            "$TC filter add dev $DEV1 parent ffff: handle 4 prio 2 protocol arp fw action pipe"
959        ],
960        "cmdUnderTest": "$TC filter del dev $DEV1 parent ffff: protocol arp fw",
961        "expExitCode": "2",
962        "verifyCmd": "$TC filter get dev $DEV1 parent ffff: handle 4 prio 2 protocol arp fw",
963        "matchPattern": "filter parent ffff: protocol arp.*handle 0x4.*gact action pipe",
964        "matchCount": "1",
965        "teardown": [
966            "$TC qdisc del dev $DEV1 ingress"
967        ]
968    },
969    {
970        "id": "4736",
971        "name": "Del fw filter by flowid (invalid)",
972        "category": [
973            "filter",
974            "fw"
975        ],
976        "setup": [
977            "$TC qdisc add dev $DEV1 ingress",
978            "$TC filter add dev $DEV1 parent ffff: handle 4 prio 2 fw action pipe flowid 45"
979        ],
980        "cmdUnderTest": "$TC filter del dev $DEV1 parent ffff: fw flowid 45",
981        "expExitCode": "2",
982        "verifyCmd": "$TC filter show dev $DEV1 parent ffff:",
983        "matchPattern": "handle 0x4.*gact action pipe",
984        "matchCount": "1",
985        "teardown": [
986            "$TC qdisc del dev $DEV1 ingress"
987        ]
988    },
989    {
990        "id": "3dcb",
991        "name": "Replace fw filter action",
992        "category": [
993            "filter",
994            "fw"
995        ],
996        "setup": [
997            "$TC qdisc add dev $DEV1 ingress",
998            "$TC filter add dev $DEV1 parent ffff: handle 1 prio 2 fw action ok"
999        ],
1000        "cmdUnderTest": "$TC filter replace dev $DEV1 parent ffff: handle 1 prio 2 fw action pipe",
1001        "expExitCode": "0",
1002        "verifyCmd": "$TC filter show dev $DEV1 parent ffff:",
1003        "matchPattern": "pref 2 fw.*handle 0x1.*gact action pipe",
1004        "matchCount": "1",
1005        "teardown": [
1006            "$TC qdisc del dev $DEV1 ingress"
1007        ]
1008    },
1009    {
1010        "id": "eb4d",
1011        "name": "Replace fw filter classid",
1012        "category": [
1013            "filter",
1014            "fw"
1015        ],
1016        "setup": [
1017            "$TC qdisc add dev $DEV1 ingress",
1018            "$TC filter add dev $DEV1 parent ffff: handle 1 prio 2 fw action ok"
1019        ],
1020        "cmdUnderTest": "$TC filter replace dev $DEV1 parent ffff: handle 1 prio 2 fw action pipe classid 2",
1021        "expExitCode": "0",
1022        "verifyCmd": "$TC filter show dev $DEV1 parent ffff:",
1023        "matchPattern": "pref 2 fw.*handle 0x1 classid :2.*gact action pipe",
1024        "matchCount": "1",
1025        "teardown": [
1026            "$TC qdisc del dev $DEV1 ingress"
1027        ]
1028    },
1029    {
1030        "id": "67ec",
1031        "name": "Replace fw filter index",
1032        "category": [
1033            "filter",
1034            "fw"
1035        ],
1036        "setup": [
1037            "$TC qdisc add dev $DEV1 ingress",
1038            "$TC filter add dev $DEV1 parent ffff: handle 1 prio 2 fw action ok index 3"
1039        ],
1040        "cmdUnderTest": "$TC filter replace dev $DEV1 parent ffff: handle 1 prio 2 fw action ok index 16",
1041        "expExitCode": "0",
1042        "verifyCmd": "$TC filter show dev $DEV1 parent ffff:",
1043        "matchPattern": "pref 2 fw.*handle 0x1.*gact action pass.*index 16",
1044        "matchCount": "1",
1045        "teardown": [
1046            "$TC qdisc del dev $DEV1 ingress"
1047        ]
1048    }
1049]
1050