Linux-libre 5.3.12-gnu
[librecmc/linux-libre.git] / tools / testing / selftests / tc-testing / tc-tests / filters / fw.json
1 [
2     {
3         "id": "901f",
4         "name": "Add fw filter with prio at 32-bit maxixum",
5         "category": [
6             "filter",
7             "fw"
8         ],
9         "plugins": {
10                 "requires": "nsPlugin"
11         },
12         "setup": [
13             "$TC qdisc add dev $DEV1 ingress"
14         ],
15         "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: handle 1 prio 65535 fw action ok",
16         "expExitCode": "0",
17         "verifyCmd": "$TC filter get dev $DEV1 parent ffff: handle 1 prio 65535 protocol all fw",
18         "matchPattern": "pref 65535 fw.*handle 0x1.*gact action pass",
19         "matchCount": "1",
20         "teardown": [
21             "$TC qdisc del dev $DEV1 ingress"
22         ]
23     },
24     {
25         "id": "51e2",
26         "name": "Add fw filter with prio exceeding 32-bit maxixum",
27         "category": [
28             "filter",
29             "fw"
30         ],
31         "plugins": {
32                 "requires": "nsPlugin"
33         },
34         "setup": [
35             "$TC qdisc add dev $DEV1 ingress"
36         ],
37         "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: handle 1 prio 65536 fw action ok",
38         "expExitCode": "255",
39         "verifyCmd": "$TC filter get dev $DEV1 parent ffff: handle 1 prio 65536 protocol all fw",
40         "matchPattern": "pref 65536 fw.*handle 0x1.*gact action pass",
41         "matchCount": "0",
42         "teardown": [
43             "$TC qdisc del dev $DEV1 ingress"
44         ]
45     },
46     {
47         "id": "d987",
48         "name": "Add fw filter with action ok",
49         "category": [
50             "filter",
51             "fw"
52         ],
53         "plugins": {
54                 "requires": "nsPlugin"
55         },
56         "plugins": {
57                 "requires": "nsPlugin"
58         },
59         "plugins": {
60                 "requires": "nsPlugin"
61         },
62         "plugins": {
63                 "requires": "nsPlugin"
64         },
65         "plugins": {
66                 "requires": "nsPlugin"
67         },
68         "plugins": {
69                 "requires": "nsPlugin"
70         },
71         "plugins": {
72                 "requires": "nsPlugin"
73         },
74         "plugins": {
75                 "requires": "nsPlugin"
76         },
77         "plugins": {
78                 "requires": "nsPlugin"
79         },
80         "plugins": {
81                 "requires": "nsPlugin"
82         },
83         "plugins": {
84                 "requires": "nsPlugin"
85         },
86         "plugins": {
87                 "requires": "nsPlugin"
88         },
89         "plugins": {
90                 "requires": "nsPlugin"
91         },
92         "plugins": {
93                 "requires": "nsPlugin"
94         },
95         "plugins": {
96                 "requires": "nsPlugin"
97         },
98         "plugins": {
99                 "requires": "nsPlugin"
100         },
101         "plugins": {
102                 "requires": "nsPlugin"
103         },
104         "plugins": {
105                 "requires": "nsPlugin"
106         },
107         "plugins": {
108                 "requires": "nsPlugin"
109         },
110         "plugins": {
111                 "requires": "nsPlugin"
112         },
113         "plugins": {
114                 "requires": "nsPlugin"
115         },
116         "plugins": {
117                 "requires": "nsPlugin"
118         },
119         "plugins": {
120                 "requires": "nsPlugin"
121         },
122         "plugins": {
123                 "requires": "nsPlugin"
124         },
125         "plugins": {
126                 "requires": "nsPlugin"
127         },
128         "plugins": {
129                 "requires": "nsPlugin"
130         },
131         "plugins": {
132                 "requires": "nsPlugin"
133         },
134         "plugins": {
135                 "requires": "nsPlugin"
136         },
137         "plugins": {
138                 "requires": "nsPlugin"
139         },
140         "plugins": {
141                 "requires": "nsPlugin"
142         },
143         "plugins": {
144                 "requires": "nsPlugin"
145         },
146         "plugins": {
147                 "requires": "nsPlugin"
148         },
149         "plugins": {
150                 "requires": "nsPlugin"
151         },
152         "plugins": {
153                 "requires": "nsPlugin"
154         },
155         "plugins": {
156                 "requires": "nsPlugin"
157         },
158         "plugins": {
159                 "requires": "nsPlugin"
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 ok",
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 pass",
168         "matchCount": "1",
169         "teardown": [
170             "$TC qdisc del dev $DEV1 ingress"
171         ]
172     },
173     {
174         "id": "c591",
175         "name": "Add fw filter with action ok by reference",
176         "__comment": "We add sleep here because action might have not been deleted by workqueue just yet. Remove this when the behaviour is fixed.",
177         "category": [
178             "filter",
179             "fw"
180         ],
181         "setup": [
182             "$TC qdisc add dev $DEV1 ingress",
183             "/bin/sleep 1",
184             "$TC actions add action gact ok index 1"
185         ],
186         "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: handle 1 prio 1 fw action gact index 1",
187         "expExitCode": "0",
188         "verifyCmd": "$TC filter get dev $DEV1 parent ffff: handle 1 prio 1 protocol all fw",
189         "matchPattern": "handle 0x1.*gact action pass.*index 1 ref 2 bind 1",
190         "matchCount": "1",
191         "teardown": [
192             "$TC qdisc del dev $DEV1 ingress",
193             "/bin/sleep 1",
194             "$TC actions del action gact index 1"
195         ]
196     },
197     {
198         "id": "affe",
199         "name": "Add fw filter with action continue",
200         "category": [
201             "filter",
202             "fw"
203         ],
204         "setup": [
205             "$TC qdisc add dev $DEV1 ingress"
206         ],
207         "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: handle 1 prio 1 fw action continue",
208         "expExitCode": "0",
209         "verifyCmd": "$TC filter get dev $DEV1 parent ffff: handle 1 prio 1 protocol all fw",
210         "matchPattern": "handle 0x1.*gact action continue",
211         "matchCount": "1",
212         "teardown": [
213             "$TC qdisc del dev $DEV1 ingress"
214         ]
215     },
216     {
217         "id": "38b3",
218         "name": "Add fw filter with action continue by reference",
219         "__comment": "We add sleep here because action might have not been deleted by workqueue just yet. Remove this when the behaviour is fixed.",
220         "category": [
221             "filter",
222             "fw"
223         ],
224         "setup": [
225             "$TC qdisc add dev $DEV1 ingress",
226             "/bin/sleep 1",
227             "$TC actions add action gact continue index 1"
228         ],
229         "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: handle 1 prio 1 fw action gact index 1",
230         "expExitCode": "0",
231         "verifyCmd": "$TC filter get dev $DEV1 parent ffff: handle 1 prio 1 protocol all fw",
232         "matchPattern": "handle 0x1.*gact action continue.*index 1 ref 2 bind 1",
233         "matchCount": "1",
234         "teardown": [
235             "$TC qdisc del dev $DEV1 ingress",
236             "/bin/sleep 1",
237             "$TC actions del action gact index 1"
238         ]
239     },
240     {
241         "id": "28bc",
242         "name": "Add fw filter with action pipe",
243         "category": [
244             "filter",
245             "fw"
246         ],
247         "setup": [
248             "$TC qdisc add dev $DEV1 ingress"
249         ],
250         "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: handle 1 prio 1 fw action pipe",
251         "expExitCode": "0",
252         "verifyCmd": "$TC filter get dev $DEV1 parent ffff: handle 1 prio 1 protocol all fw",
253         "matchPattern": "handle 0x1.*gact action pipe",
254         "matchCount": "1",
255         "teardown": [
256             "$TC qdisc del dev $DEV1 ingress"
257         ]
258     },
259     {
260         "id": "6753",
261         "name": "Add fw filter with action pipe by reference",
262         "__comment": "We add sleep here because action might have not been deleted by workqueue just yet.",
263         "category": [
264             "filter",
265             "fw"
266         ],
267         "setup": [
268             "$TC qdisc add dev $DEV1 ingress",
269             "/bin/sleep 1",
270             "$TC actions add action gact pipe index 1"
271         ],
272         "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: handle 1 prio 1 fw action gact index 1",
273         "expExitCode": "0",
274         "verifyCmd": "$TC filter get dev $DEV1 parent ffff: handle 1 prio 1 protocol all fw",
275         "matchPattern": "handle 0x1.*gact action pipe.*index 1 ref 2 bind 1",
276         "matchCount": "1",
277         "teardown": [
278             "$TC qdisc del dev $DEV1 ingress",
279             "/bin/sleep 1",
280             "$TC actions del action gact index 1"
281         ]
282     },
283     {
284         "id": "8da2",
285         "name": "Add fw filter with action drop",
286         "category": [
287             "filter",
288             "fw"
289         ],
290         "setup": [
291             "$TC qdisc add dev $DEV1 ingress"
292         ],
293         "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: handle 1 prio 1 fw action drop",
294         "expExitCode": "0",
295         "verifyCmd": "$TC filter get dev $DEV1 parent ffff: handle 1 protocol all prio 1 fw",
296         "matchPattern": "handle 0x1.*gact action drop",
297         "matchCount": "1",
298         "teardown": [
299             "$TC qdisc del dev $DEV1 ingress"
300         ]
301     },
302     {
303         "id": "6dc6",
304         "name": "Add fw filter with action drop by reference",
305         "__comment": "We add sleep here because action might have not been deleted by workqueue just yet.",
306         "category": [
307             "filter",
308             "fw"
309         ],
310         "setup": [
311             "$TC qdisc add dev $DEV1 ingress",
312             "/bin/sleep 1",
313             "$TC actions add action gact drop index 1"
314         ],
315         "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: handle 1 prio 1 fw action gact index 1",
316         "expExitCode": "0",
317         "verifyCmd": "$TC filter get dev $DEV1 parent ffff: handle 1 prio 1 protocol all fw",
318         "matchPattern": "handle 0x1.*gact action drop.*index 1 ref 2 bind 1",
319         "matchCount": "1",
320         "teardown": [
321             "$TC qdisc del dev $DEV1 ingress",
322             "/bin/sleep 1",
323             "$TC actions del action gact index 1"
324         ]
325     },
326     {
327         "id": "9436",
328         "name": "Add fw filter with action reclassify",
329         "category": [
330             "filter",
331             "fw"
332         ],
333         "setup": [
334             "$TC qdisc add dev $DEV1 ingress"
335         ],
336         "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: handle 1 prio 1 fw action reclassify",
337         "expExitCode": "0",
338         "verifyCmd": "$TC filter get dev $DEV1 parent ffff: handle 1 prio 1 protocol all fw",
339         "matchPattern": "handle 0x1.*gact action reclassify",
340         "matchCount": "1",
341         "teardown": [
342             "$TC qdisc del dev $DEV1 ingress"
343         ]
344     },
345     {
346         "id": "3bc2",
347         "name": "Add fw filter with action reclassify by reference",
348         "__comment": "We add sleep here because action might have not been deleted by workqueue just yet.",
349         "category": [
350             "filter",
351             "fw"
352         ],
353         "setup": [
354             "$TC qdisc add dev $DEV1 ingress",
355             "/bin/sleep 1",
356             "$TC actions add action gact reclassify index 1"
357         ],
358         "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: handle 1 prio 1 fw action gact index 1",
359         "expExitCode": "0",
360         "verifyCmd": "$TC filter get dev $DEV1 parent ffff: handle 1 prio 1 protocol all fw",
361         "matchPattern": "handle 0x1.*gact action reclassify.*index 1 ref 2 bind 1",
362         "matchCount": "1",
363         "teardown": [
364             "$TC qdisc del dev $DEV1 ingress",
365             "/bin/sleep 1",
366             "$TC actions del action gact index 1"
367         ]
368     },
369     {
370         "id": "95bb",
371         "name": "Add fw filter with action jump 10",
372         "category": [
373             "filter",
374             "fw"
375         ],
376         "setup": [
377             "$TC qdisc add dev $DEV1 ingress"
378         ],
379         "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: handle 1 prio 1 fw action jump 10",
380         "expExitCode": "0",
381         "verifyCmd": "$TC filter get dev $DEV1 parent ffff: handle 1 prio 1 protocol all fw",
382         "matchPattern": "handle 0x1.*gact action jump 10",
383         "matchCount": "1",
384         "teardown": [
385             "$TC qdisc del dev $DEV1 ingress"
386         ]
387     },
388     {
389         "id": "36f7",
390         "name": "Add fw filter with action jump 10 by reference",
391         "__comment": "We add sleep here because action might have not been deleted by workqueue just yet.",
392         "category": [
393             "filter",
394             "fw"
395         ],
396         "setup": [
397             "$TC qdisc add dev $DEV1 ingress",
398             "/bin/sleep 1",
399             "$TC actions add action gact jump 10 index 1"
400         ],
401         "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: handle 1 prio 1 fw action gact index 1",
402         "expExitCode": "0",
403         "verifyCmd": "$TC filter get dev $DEV1 parent ffff: handle 1 prio 1 protocol all fw",
404         "matchPattern": "handle 0x1.*gact action jump 10.*index 1 ref 2 bind 1",
405         "matchCount": "1",
406         "teardown": [
407             "$TC qdisc del dev $DEV1 ingress",
408             "/bin/sleep 1",
409             "$TC actions del action gact index 1"
410         ]
411     },
412     {
413         "id": "3d74",
414         "name": "Add fw filter with action goto chain 5",
415         "category": [
416             "filter",
417             "fw"
418         ],
419         "setup": [
420             "$TC qdisc add dev $DEV1 ingress"
421         ],
422         "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: handle 1 prio 1 fw action goto chain 5",
423         "expExitCode": "0",
424         "verifyCmd": "$TC filter get dev $DEV1 parent ffff: handle 1 prio 1 protocol all fw",
425         "matchPattern": "handle 0x1.*gact action goto chain 5",
426         "matchCount": "1",
427         "teardown": [
428             "$TC qdisc del dev $DEV1 ingress"
429         ]
430     },
431     {
432         "id": "eb8f",
433         "name": "Add fw filter with invalid action",
434         "category": [
435             "filter",
436             "fw"
437         ],
438         "setup": [
439             "$TC qdisc add dev $DEV1 ingress"
440         ],
441         "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: handle 1 prio 1 fw action pump",
442         "expExitCode": "255",
443         "verifyCmd": "$TC filter get dev $DEV1 parent ffff: handle 1 prio 1 protocol all fw",
444         "matchPattern": "handle 0x1.*gact action pump",
445         "matchCount": "0",
446         "teardown": [
447             "$TC qdisc del dev $DEV1 ingress"
448         ]
449     },
450     {
451         "id": "6a79",
452         "name": "Add fw filter with missing mandatory action",
453         "category": [
454             "filter",
455             "fw"
456         ],
457         "setup": [
458             "$TC qdisc add dev $DEV1 ingress"
459         ],
460         "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: handle 1 prio 1 fw",
461         "expExitCode": "2",
462         "verifyCmd": "$TC filter get dev $DEV1 parent ffff: handle 1 prio 1 protocol all fw",
463         "matchPattern": "filter protocol all pref [0-9]+ fw.*handle 0x1",
464         "matchCount": "0",
465         "teardown": [
466             "$TC qdisc del dev $DEV1 ingress"
467         ]
468     },
469     {
470         "id": "8298",
471         "name": "Add fw filter with cookie",
472         "category": [
473             "filter",
474             "fw"
475         ],
476         "setup": [
477             "$TC qdisc add dev $DEV1 ingress"
478         ],
479         "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: handle 1 prio 2 fw action pipe cookie aa11bb22cc33dd44ee55ff66aa11b1b2",
480         "expExitCode": "0",
481         "verifyCmd": "$TC filter get dev $DEV1 parent ffff: handle 1 prio 2 protocol all fw",
482         "matchPattern": "pref 2 fw.*handle 0x1.*gact action pipe.*cookie aa11bb22cc33dd44ee55ff66aa11b1b2",
483         "matchCount": "1",
484         "teardown": [
485             "$TC qdisc del dev $DEV1 ingress"
486         ]
487     },
488     {
489         "id": "a88c",
490         "name": "Add fw filter with invalid cookie",
491         "category": [
492             "filter",
493             "fw"
494         ],
495         "setup": [
496             "$TC qdisc add dev $DEV1 ingress"
497         ],
498         "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: handle 1 prio 2 fw action continue cookie aa11bb22cc33dd44ee55ff66aa11b1b2777888",
499         "expExitCode": "255",
500         "verifyCmd": "$TC filter get dev $DEV1 parent ffff: handle 1 prio 2 protocol all fw",
501         "matchPattern": "pref 2 fw.*handle 0x1.*gact action continue.*cookie aa11bb22cc33dd44ee55ff66aa11b1b2777888",
502         "matchCount": "0",
503         "teardown": [
504             "$TC qdisc del dev $DEV1 ingress"
505         ]
506     },
507     {
508         "id": "10f6",
509         "name": "Add fw filter with handle in hex",
510         "category": [
511             "filter",
512             "fw"
513         ],
514         "setup": [
515             "$TC qdisc add dev $DEV1 ingress"
516         ],
517         "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: handle 0xa1b2ff prio 1 fw action ok",
518         "expExitCode": "0",
519         "verifyCmd": "$TC filter get dev $DEV1 parent ffff: handle 0xa1b2ff prio 1 protocol all fw",
520         "matchPattern": "fw.*handle 0xa1b2ff.*gact action pass",
521         "matchCount": "1",
522         "teardown": [
523             "$TC qdisc del dev $DEV1 ingress"
524         ]
525     },
526     {
527         "id": "9d51",
528         "name": "Add fw filter with handle at 32-bit maximum",
529         "category": [
530             "filter",
531             "fw"
532         ],
533         "setup": [
534             "$TC qdisc add dev $DEV1 ingress"
535         ],
536         "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: handle 4294967295 prio 1 fw action ok",
537         "expExitCode": "0",
538         "verifyCmd": "$TC filter get dev $DEV1 parent ffff: handle 4294967295 prio 1 protocol all fw",
539         "matchPattern": "fw.*handle 0xffffffff.*gact action pass",
540         "matchCount": "1",
541         "teardown": [
542             "$TC qdisc del dev $DEV1 ingress"
543         ]
544     },
545     {
546         "id": "d939",
547         "name": "Add fw filter with handle exceeding 32-bit maximum",
548         "category": [
549             "filter",
550             "fw"
551         ],
552         "setup": [
553             "$TC qdisc add dev $DEV1 ingress"
554         ],
555         "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: handle 4294967296 prio 1 fw action ok",
556         "expExitCode": "1",
557         "verifyCmd": "$TC filter get dev $DEV1 parent ffff: handle 4294967296 prio 1 protocol all fw",
558         "matchPattern": "fw.*handle 0x.*gact action pass",
559         "matchCount": "0",
560         "teardown": [
561             "$TC qdisc del dev $DEV1 ingress"
562         ]
563     },
564     {
565         "id": "658c",
566         "name": "Add fw filter with mask in hex",
567         "category": [
568             "filter",
569             "fw"
570         ],
571         "setup": [
572             "$TC qdisc add dev $DEV1 ingress"
573         ],
574         "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: handle 10/0xa1b2f prio 1 fw action ok",
575         "expExitCode": "0",
576         "verifyCmd": "$TC filter get dev $DEV1 parent ffff: handle 10 prio 1 protocol all fw",
577         "matchPattern": "fw.*handle 0xa/0xa1b2f",
578         "matchCount": "1",
579         "teardown": [
580             "$TC qdisc del dev $DEV1 ingress"
581         ]
582     },
583     {
584         "id": "86be",
585         "name": "Add fw filter with mask at 32-bit maximum",
586         "category": [
587             "filter",
588             "fw"
589         ],
590         "setup": [
591             "$TC qdisc add dev $DEV1 ingress"
592         ],
593         "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: handle 10/4294967295 prio 1 fw action ok",
594         "expExitCode": "0",
595         "verifyCmd": "$TC filter get dev $DEV1 parent ffff: handle 10 prio 1 protocol all fw",
596         "matchPattern": "fw.*handle 0xa[^/]",
597         "matchCount": "1",
598         "teardown": [
599             "$TC qdisc del dev $DEV1 ingress"
600         ]
601     },
602     {
603         "id": "e635",
604         "name": "Add fw filter with mask exceeding 32-bit maximum",
605         "category": [
606             "filter",
607             "fw"
608         ],
609         "setup": [
610             "$TC qdisc add dev $DEV1 ingress"
611         ],
612         "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: handle 10/4294967296 prio 1 fw action ok",
613         "expExitCode": "1",
614         "verifyCmd": "$TC filter get dev $DEV1 parent ffff: handle 10 prio 1 protocol all fw",
615         "matchPattern": "fw.*handle 0xa",
616         "matchCount": "0",
617         "teardown": [
618             "$TC qdisc del dev $DEV1 ingress"
619         ]
620     },
621     {
622         "id": "6cab",
623         "name": "Add fw filter with handle/mask in hex",
624         "category": [
625             "filter",
626             "fw"
627         ],
628         "setup": [
629             "$TC qdisc add dev $DEV1 ingress"
630         ],
631         "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: handle 0xa1b2cdff/0x1a2bffdc prio 1 fw action ok",
632         "expExitCode": "0",
633         "verifyCmd": "$TC filter get dev $DEV1 parent ffff: handle 0xa1b2cdff prio 1 protocol all fw",
634         "matchPattern": "fw.*handle 0xa1b2cdff/0x1a2bffdc",
635         "matchCount": "1",
636         "teardown": [
637             "$TC qdisc del dev $DEV1 ingress"
638         ]
639     },
640     {
641         "id": "8700",
642         "name": "Add fw filter with handle/mask at 32-bit maximum",
643         "category": [
644             "filter",
645             "fw"
646         ],
647         "setup": [
648             "$TC qdisc add dev $DEV1 ingress"
649         ],
650         "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: handle 4294967295/4294967295 prio 1 fw action ok",
651         "expExitCode": "0",
652         "verifyCmd": "$TC filter get dev $DEV1 parent ffff: handle 0xffffffff prio 1 protocol all fw",
653         "matchPattern": "fw.*handle 0xffffffff[^/]",
654         "matchCount": "1",
655         "teardown": [
656             "$TC qdisc del dev $DEV1 ingress"
657         ]
658     },
659     {
660         "id": "7d62",
661         "name": "Add fw filter with handle/mask exceeding 32-bit maximum",
662         "category": [
663             "filter",
664             "fw"
665         ],
666         "setup": [
667             "$TC qdisc add dev $DEV1 ingress"
668         ],
669         "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: handle 4294967296/4294967296 prio 1 fw action ok",
670         "expExitCode": "1",
671         "verifyCmd": "$TC filter get dev $DEV1 parent ffff: handle 10 prio 1 protocol all fw",
672         "matchPattern": "fw.*handle",
673         "matchCount": "0",
674         "teardown": [
675             "$TC qdisc del dev $DEV1 ingress"
676         ]
677     },
678     {
679         "id": "7b69",
680         "name": "Add fw filter with missing mandatory handle",
681         "category": [
682             "filter",
683             "fw"
684         ],
685         "setup": [
686             "$TC qdisc add dev $DEV1 ingress"
687         ],
688         "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: prio 1 fw action ok",
689         "expExitCode": "2",
690         "verifyCmd": "$TC filter show dev $DEV1 parent ffff:",
691         "matchPattern": "filter protocol all.*fw.*handle.*gact action pass",
692         "matchCount": "0",
693         "teardown": [
694             "$TC qdisc del dev $DEV1 ingress"
695         ]
696     },
697     {
698         "id": "d68b",
699         "name": "Add fw filter with invalid parent",
700         "category": [
701             "filter",
702             "fw"
703         ],
704         "setup": [
705             "$TC qdisc add dev $DEV1 ingress"
706         ],
707         "cmdUnderTest": "$TC filter add dev $DEV1 parent aa11b1b2: handle 1 prio 1 fw action ok",
708         "expExitCode": "255",
709         "verifyCmd": "$TC filter dev $DEV1 parent aa11b1b2: handle 1 prio 1 protocol all fw",
710         "matchPattern": "filter protocol all pref 1 fw.*handle 0x1.*gact action pass",
711         "matchCount": "0",
712         "teardown": [
713             "$TC qdisc del dev $DEV1 ingress"
714         ]
715     },
716     {
717         "id": "66e0",
718         "name": "Add fw filter with missing mandatory parent id",
719         "category": [
720             "filter",
721             "fw"
722         ],
723         "setup": [
724             "$TC qdisc add dev $DEV1 ingress"
725         ],
726         "cmdUnderTest": "$TC filter add dev $DEV1 handle 1 prio 1 fw action ok",
727         "expExitCode": "2",
728         "verifyCmd": "$TC filter get dev $DEV1 parent ffff: handle 1 prio 1 protocol all fw",
729         "matchPattern": "pref [0-9]+ fw.*handle 0x1.*gact action pass",
730         "matchCount": "0",
731         "teardown": [
732             "$TC qdisc del dev $DEV1 ingress"
733         ]
734     },
735     {
736         "id": "0ff3",
737         "name": "Add fw filter with classid",
738         "category": [
739             "filter",
740             "fw"
741         ],
742         "setup": [
743             "$TC qdisc add dev $DEV1 ingress"
744         ],
745         "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: handle 1 prio 1 fw classid 3 action ok",
746         "expExitCode": "0",
747         "verifyCmd": "$TC filter get dev $DEV1 parent ffff: handle 1 prio 1 protocol all fw",
748         "matchPattern": "fw.*handle 0x1 classid :3.*gact action pass",
749         "matchCount": "1",
750         "teardown": [
751             "$TC qdisc del dev $DEV1 ingress"
752         ]
753     },
754     {
755         "id": "9849",
756         "name": "Add fw filter with classid at root",
757         "category": [
758             "filter",
759             "fw"
760         ],
761         "setup": [
762             "$TC qdisc add dev $DEV1 ingress"
763         ],
764         "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: handle 1 prio 1 fw classid ffff:ffff action ok",
765         "expExitCode": "0",
766         "verifyCmd": "$TC filter get dev $DEV1 parent ffff: handle 1 prio 1 protocol all fw",
767         "matchPattern": "pref 1 fw.*handle 0x1 classid root.*gact action pass",
768         "matchCount": "1",
769         "teardown": [
770             "$TC qdisc del dev $DEV1 ingress"
771         ]
772     },
773     {
774         "id": "b7ff",
775         "name": "Add fw filter with classid - keeps last 8 (hex) digits",
776         "category": [
777             "filter",
778             "fw"
779         ],
780         "setup": [
781             "$TC qdisc add dev $DEV1 ingress"
782         ],
783         "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: handle 1 prio 1 fw classid 98765fedcb action ok",
784         "expExitCode": "0",
785         "verifyCmd": "$TC filter get dev $DEV1 parent ffff: handle 1 prio 1 protocol all fw",
786         "matchPattern": "fw.*handle 0x1 classid 765f:edcb.*gact action pass",
787         "matchCount": "1",
788         "teardown": [
789             "$TC qdisc del dev $DEV1 ingress"
790         ]
791     },
792     {
793         "id": "2b18",
794         "name": "Add fw filter with invalid classid",
795         "category": [
796             "filter",
797             "fw"
798         ],
799         "setup": [
800             "$TC qdisc add dev $DEV1 ingress"
801         ],
802         "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: handle 1 prio 1 fw classid 6789defg action ok",
803         "expExitCode": "1",
804         "verifyCmd": "$TC filter get dev $DEV1 parent ffff: handle 1 prio 1 protocol all fw",
805         "matchPattern": "fw.*handle 0x1 classid 6789:defg.*gact action pass",
806         "matchCount": "0",
807         "teardown": [
808             "$TC qdisc del dev $DEV1 ingress"
809         ]
810     },
811     {
812         "id": "fade",
813         "name": "Add fw filter with flowid",
814         "category": [
815             "filter",
816             "fw"
817         ],
818         "setup": [
819             "$TC qdisc add dev $DEV1 ingress"
820         ],
821         "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: handle 10 prio 1 fw flowid 1:10 action ok",
822         "expExitCode": "0",
823         "verifyCmd": "$TC filter get dev $DEV1 parent ffff: handle 10 prio 1 protocol all fw",
824         "matchPattern": "filter parent ffff: protocol all pref 1 fw.*handle 0xa classid 1:10.*gact action pass",
825         "matchCount": "1",
826         "teardown": [
827             "$TC qdisc del dev $DEV1 ingress"
828         ]
829     },
830     {
831         "id": "33af",
832         "name": "Add fw filter with flowid then classid (same arg, takes second)",
833         "category": [
834             "filter",
835             "fw"
836         ],
837         "setup": [
838             "$TC qdisc add dev $DEV1 ingress"
839         ],
840         "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: handle 11 prio 1 fw flowid 10 classid 4 action ok",
841         "expExitCode": "0",
842         "verifyCmd": "$TC filter get dev $DEV1 parent ffff: handle 11 prio 1 protocol all fw",
843         "matchPattern": "filter parent ffff: protocol all pref 1 fw.*handle 0xb classid :4.*gact action pass",
844         "matchCount": "1",
845         "teardown": [
846             "$TC qdisc del dev $DEV1 ingress"
847         ]
848     },
849     {
850         "id": "8a8c",
851         "name": "Add fw filter with classid then flowid (same arg, takes second)",
852         "category": [
853             "filter",
854             "fw"
855         ],
856         "setup": [
857             "$TC qdisc add dev $DEV1 ingress"
858         ],
859         "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: handle 11 prio 1 fw classid 4 flowid 10 action ok",
860         "expExitCode": "0",
861         "verifyCmd": "$TC filter get dev $DEV1 parent ffff: handle 11 prio 1 protocol all fw",
862         "matchPattern": "filter parent ffff: protocol all pref 1 fw.*handle 0xb classid :10.*gact action pass",
863         "matchCount": "1",
864         "teardown": [
865             "$TC qdisc del dev $DEV1 ingress"
866         ]
867     },
868     {
869         "id": "b50d",
870         "name": "Add fw filter with handle val/mask and flowid 10:1000",
871         "category": [
872             "filter",
873             "fw"
874         ],
875         "setup": [
876             "$TC qdisc add dev $DEV1 ingress"
877         ],
878         "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: prio 3 handle 10/0xff fw flowid 10:1000 action ok",
879         "expExitCode": "0",
880         "verifyCmd": "$TC filter get dev $DEV1 parent ffff: handle 10 prio 3 protocol all fw",
881         "matchPattern": "filter parent ffff: protocol all pref 3 fw.*handle 0xa/0xff classid 10:1000.*gact action pass",
882         "matchCount": "1",
883         "teardown": [
884             "$TC qdisc del dev $DEV1 ingress"
885         ]
886     },
887     {
888         "id": "7207",
889         "name": "Add fw filter with protocol ip",
890         "category": [
891             "filter",
892             "fw"
893         ],
894         "setup": [
895             "$TC qdisc add dev $DEV1 ingress"
896         ],
897         "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: protocol ip prio 1 handle 3 fw action ok",
898         "expExitCode": "0",
899         "verifyCmd": "$TC filter get dev $DEV1 parent ffff: handle 3 prio 1 protocol ip fw",
900         "matchPattern": "filter parent ffff: protocol ip pref 1 fw.*handle 0x3.*gact action pass.*index [0-9]+ ref [0-9]+ bind [0-9]+",
901         "matchCount": "1",
902         "teardown": [
903             "$TC qdisc del dev $DEV1 ingress"
904         ]
905     },
906     {
907         "id": "306d",
908         "name": "Add fw filter with protocol ipv6",
909         "category": [
910             "filter",
911             "fw"
912         ],
913         "setup": [
914             "$TC qdisc add dev $DEV1 ingress"
915         ],
916         "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: protocol ipv6 prio 2 handle 4 fw action ok",
917         "expExitCode": "0",
918         "verifyCmd": "$TC filter get dev $DEV1 parent ffff: handle 4 prio 2 protocol ipv6 fw",
919         "matchPattern": "filter parent ffff: protocol ipv6 pref 2 fw.*handle 0x4.*gact action pass.*index [0-9]+ ref [0-9]+ bind [0-9]+",
920         "matchCount": "1",
921         "teardown": [
922             "$TC qdisc del dev $DEV1 ingress"
923         ]
924     },
925     {
926         "id": "9a78",
927         "name": "Add fw filter with protocol arp",
928         "category": [
929             "filter",
930             "fw"
931         ],
932         "setup": [
933             "$TC qdisc add dev $DEV1 ingress"
934         ],
935         "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: protocol arp prio 5 handle 7 fw action drop",
936         "expExitCode": "0",
937         "verifyCmd": "$TC filter get dev $DEV1 parent ffff: handle 7 prio 5 protocol arp fw",
938         "matchPattern": "filter parent ffff: protocol arp pref 5 fw.*handle 0x7.*gact action drop.*index [0-9]+ ref [0-9]+ bind [0-9]+",
939         "matchCount": "1",
940         "teardown": [
941             "$TC qdisc del dev $DEV1 ingress"
942         ]
943     },
944     {
945         "id": "1821",
946         "name": "Add fw filter with protocol 802_3",
947         "category": [
948             "filter",
949             "fw"
950         ],
951         "setup": [
952             "$TC qdisc add dev $DEV1 ingress"
953         ],
954         "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: protocol 802_3 handle 1 prio 1 fw action ok",
955         "expExitCode": "0",
956         "verifyCmd": "$TC filter get dev $DEV1 parent ffff: handle 1 prio 1 protocol 802_3 fw",
957         "matchPattern": "filter parent ffff: protocol 802_3 pref 1 fw.*handle 0x1.*gact action pass",
958         "matchCount": "1",
959         "teardown": [
960             "$TC qdisc del dev $DEV1 ingress"
961         ]
962     },
963     {
964         "id": "2260",
965         "name": "Add fw filter with invalid protocol",
966         "category": [
967             "filter",
968             "fw"
969         ],
970         "setup": [
971             "$TC qdisc add dev $DEV1 ingress"
972         ],
973         "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: protocol igmp handle 1 prio 1 fw action ok",
974         "expExitCode": "255",
975         "verifyCmd": "$TC filter get dev $DEV1 parent ffff: handle 1 prio 1 protocol igmp fw",
976         "matchPattern": "filter parent ffff: protocol igmp pref 1 fw.*handle 0x1.*gact action pass",
977         "matchCount": "0",
978         "teardown": [
979             "$TC qdisc del dev $DEV1 ingress"
980         ]
981     },
982     {
983         "id": "09d7",
984         "name": "Add fw filters protocol 802_3 and ip with conflicting priorities",
985         "category": [
986             "filter",
987             "fw"
988         ],
989         "plugins": {
990                 "requires": "nsPlugin"
991         },
992         "setup": [
993             "$TC qdisc add dev $DEV1 ingress",
994             "$TC filter add dev $DEV1 parent ffff: protocol 802_3 prio 3 handle 7 fw action ok"
995         ],
996         "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: protocol ip prio 3 handle 8 fw action ok",
997         "expExitCode": "2",
998         "verifyCmd": "$TC filter get dev $DEV1 parent ffff: handle 8 prio 3 protocol ip fw",
999         "matchPattern": "filter parent ffff: protocol ip pref 3 fw.*handle 0x8",
1000         "matchCount": "0",
1001         "teardown": [
1002             "$TC qdisc del dev $DEV1 ingress"
1003         ]
1004     },
1005     {
1006         "id": "6973",
1007         "name": "Add fw filters with same index, same action",
1008         "category": [
1009             "filter",
1010             "fw"
1011         ],
1012         "plugins": {
1013                 "requires": "nsPlugin"
1014         },
1015         "setup": [
1016             "$TC qdisc add dev $DEV1 ingress",
1017             "$TC filter add dev $DEV1 parent ffff: prio 6 handle 2 fw action continue index 5"
1018         ],
1019         "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: prio 8 handle 4 fw action continue index 5",
1020         "expExitCode": "0",
1021         "verifyCmd": "$TC filter get dev $DEV1 parent ffff: handle 4 prio 8 protocol all fw",
1022         "matchPattern": "filter parent ffff: protocol all pref 8 fw.*handle 0x4.*gact action continue.*index 5 ref 2 bind 2",
1023         "matchCount": "1",
1024         "teardown": [
1025             "$TC qdisc del dev $DEV1 ingress"
1026         ]
1027     },
1028     {
1029         "id": "fc06",
1030         "name": "Add fw filters with action police",
1031         "category": [
1032             "filter",
1033             "fw"
1034         ],
1035         "plugins": {
1036                 "requires": "nsPlugin"
1037         },
1038         "setup": [
1039             "$TC qdisc add dev $DEV1 ingress"
1040         ],
1041         "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: prio 3 handle 4 fw action police rate 1kbit burst 10k index 5",
1042         "expExitCode": "0",
1043         "verifyCmd": "$TC filter get dev $DEV1 parent ffff: handle 4 prio 3 protocol all fw",
1044         "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",
1045         "matchCount": "1",
1046         "teardown": [
1047             "$TC qdisc del dev $DEV1 ingress"
1048         ]
1049     },
1050     {
1051         "id": "aac7",
1052         "name": "Add fw filters with action police linklayer atm",
1053         "category": [
1054             "filter",
1055             "fw"
1056         ],
1057         "plugins": {
1058                 "requires": "nsPlugin"
1059         },
1060         "setup": [
1061             "$TC qdisc add dev $DEV1 ingress"
1062         ],
1063         "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: prio 3 handle 4 fw action police rate 2mbit burst 200k linklayer atm index 8",
1064         "expExitCode": "0",
1065         "verifyCmd": "$TC filter get dev $DEV1 parent ffff: handle 4 prio 3 protocol all fw",
1066         "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",
1067         "matchCount": "1",
1068         "teardown": [
1069             "$TC qdisc del dev $DEV1 ingress"
1070         ]
1071     },
1072     {
1073         "id": "5339",
1074         "name": "Del entire fw filter",
1075         "category": [
1076             "filter",
1077             "fw"
1078         ],
1079         "plugins": {
1080                 "requires": "nsPlugin"
1081         },
1082         "setup": [
1083             "$TC qdisc add dev $DEV1 ingress",
1084             "$TC filter add dev $DEV1 parent ffff: handle 5 prio 7 fw action pass",
1085             "$TC filter add dev $DEV1 parent ffff: handle 3 prio 9 fw action pass"
1086         ],
1087         "cmdUnderTest": "$TC filter del dev $DEV1 parent ffff:",
1088         "expExitCode": "0",
1089         "verifyCmd": "$TC filter show dev $DEV1 parent ffff:",
1090         "matchPattern": "protocol all pref.*handle.*gact action pass",
1091         "matchCount": "0",
1092         "teardown": [
1093             "$TC qdisc del dev $DEV1 ingress"
1094         ]
1095     },
1096     {
1097         "id": "0e99",
1098         "name": "Del single fw filter x1",
1099         "__comment__": "First of two tests to check that one filter is there and the other isn't",
1100         "category": [
1101             "filter",
1102             "fw"
1103         ],
1104         "plugins": {
1105                 "requires": "nsPlugin"
1106         },
1107         "setup": [
1108             "$TC qdisc add dev $DEV1 ingress",
1109             "$TC filter add dev $DEV1 parent ffff: handle 5 prio 7 fw action pass",
1110             "$TC filter add dev $DEV1 parent ffff: handle 3 prio 9 fw action pass"
1111         ],
1112         "cmdUnderTest": "$TC filter del dev $DEV1 parent ffff: handle 3 prio 9 fw action pass",
1113         "expExitCode": "0",
1114         "verifyCmd": "$TC filter show dev $DEV1 parent ffff:",
1115         "matchPattern": "protocol all pref 7.*handle 0x5.*gact action pass",
1116         "matchCount": "1",
1117         "teardown": [
1118             "$TC qdisc del dev $DEV1 ingress"
1119         ]
1120     },
1121     {
1122         "id": "f54c",
1123         "name": "Del single fw filter x2",
1124         "__comment__": "Second of two tests to check that one filter is there and the other isn't",
1125         "category": [
1126             "filter",
1127             "fw"
1128         ],
1129         "plugins": {
1130                 "requires": "nsPlugin"
1131         },
1132         "setup": [
1133             "$TC qdisc add dev $DEV1 ingress",
1134             "$TC filter add dev $DEV1 parent ffff: handle 5 prio 7 fw action pass",
1135             "$TC filter add dev $DEV1 parent ffff: handle 3 prio 9 fw action pass"
1136         ],
1137         "cmdUnderTest": "$TC filter del dev $DEV1 parent ffff: handle 3 prio 9 fw action pass",
1138         "expExitCode": "0",
1139         "verifyCmd": "$TC filter show dev $DEV1 parent ffff:",
1140         "matchPattern": "protocol all pref 9.*handle 0x3.*gact action pass",
1141         "matchCount": "0",
1142         "teardown": [
1143             "$TC qdisc del dev $DEV1 ingress"
1144         ]
1145     },
1146     {
1147         "id": "ba94",
1148         "name": "Del fw filter by prio",
1149         "category": [
1150             "filter",
1151             "fw"
1152         ],
1153         "plugins": {
1154                 "requires": "nsPlugin"
1155         },
1156         "setup": [
1157             "$TC qdisc add dev $DEV1 ingress",
1158             "$TC filter add dev $DEV1 parent ffff: handle 1 prio 4 fw action ok",
1159             "$TC filter add dev $DEV1 parent ffff: handle 2 prio 4 fw action ok"
1160         ],
1161         "cmdUnderTest": "$TC filter del dev $DEV1 parent ffff: prio 4",
1162         "expExitCode": "0",
1163         "verifyCmd": "$TC filter show dev $DEV1 parent ffff:",
1164         "matchPattern": "pref 4 fw.*gact action pass",
1165         "matchCount": "0",
1166         "teardown": [
1167             "$TC qdisc del dev $DEV1 ingress"
1168         ]
1169     },
1170     {
1171         "id": "4acb",
1172         "name": "Del fw filter by chain",
1173         "category": [
1174             "filter",
1175             "fw"
1176         ],
1177         "plugins": {
1178                 "requires": "nsPlugin"
1179         },
1180         "setup": [
1181             "$TC qdisc add dev $DEV1 ingress",
1182             "$TC filter add dev $DEV1 parent ffff: handle 4 prio 2 chain 13 fw action pipe",
1183             "$TC filter add dev $DEV1 parent ffff: handle 3 prio 5 chain 13 fw action pipe"
1184         ],
1185         "cmdUnderTest": "$TC filter del dev $DEV1 parent ffff: chain 13",
1186         "expExitCode": "0",
1187         "verifyCmd": "$TC filter show dev $DEV1 parent ffff:",
1188         "matchPattern": "fw chain 13 handle.*gact action pipe",
1189         "matchCount": "0",
1190         "teardown": [
1191             "$TC qdisc del dev $DEV1 ingress"
1192         ]
1193     },
1194     {
1195         "id": "3424",
1196         "name": "Del fw filter by action (invalid)",
1197         "category": [
1198             "filter",
1199             "fw"
1200         ],
1201         "plugins": {
1202                 "requires": "nsPlugin"
1203         },
1204         "setup": [
1205             "$TC qdisc add dev $DEV1 ingress",
1206             "$TC filter add dev $DEV1 parent ffff: handle 2 prio 4 fw action drop"
1207         ],
1208         "cmdUnderTest": "$TC filter del dev $DEV1 parent ffff: fw action drop",
1209         "expExitCode": "2",
1210         "verifyCmd": "$TC filter get dev $DEV1 parent ffff: handle 2 prio 4 protocol all fw",
1211         "matchPattern": "handle 0x2.*gact action drop",
1212         "matchCount": "1",
1213         "teardown": [
1214             "$TC qdisc del dev $DEV1 ingress"
1215         ]
1216     },
1217     {
1218         "id": "da89",
1219         "name": "Del fw filter by handle (invalid)",
1220         "category": [
1221             "filter",
1222             "fw"
1223         ],
1224         "plugins": {
1225                 "requires": "nsPlugin"
1226         },
1227         "setup": [
1228             "$TC qdisc add dev $DEV1 ingress",
1229             "$TC filter add dev $DEV1 parent ffff: handle 3 prio 4 fw action continue"
1230         ],
1231         "cmdUnderTest": "$TC filter del dev $DEV1 parent ffff: handle 3 fw",
1232         "expExitCode": "2",
1233         "verifyCmd": "$TC filter get dev $DEV1 parent ffff: handle 3 prio 4 protocol all fw",
1234         "matchPattern": "handle 0x3.*gact action continue",
1235         "matchCount": "1",
1236         "teardown": [
1237             "$TC qdisc del dev $DEV1 ingress"
1238         ]
1239     },
1240     {
1241         "id": "4d95",
1242         "name": "Del fw filter by protocol (invalid)",
1243         "category": [
1244             "filter",
1245             "fw"
1246         ],
1247         "plugins": {
1248                 "requires": "nsPlugin"
1249         },
1250         "setup": [
1251             "$TC qdisc add dev $DEV1 ingress",
1252             "$TC filter add dev $DEV1 parent ffff: handle 4 prio 2 protocol arp fw action pipe"
1253         ],
1254         "cmdUnderTest": "$TC filter del dev $DEV1 parent ffff: protocol arp fw",
1255         "expExitCode": "2",
1256         "verifyCmd": "$TC filter get dev $DEV1 parent ffff: handle 4 prio 2 protocol arp fw",
1257         "matchPattern": "filter parent ffff: protocol arp.*handle 0x4.*gact action pipe",
1258         "matchCount": "1",
1259         "teardown": [
1260             "$TC qdisc del dev $DEV1 ingress"
1261         ]
1262     },
1263     {
1264         "id": "4736",
1265         "name": "Del fw filter by flowid (invalid)",
1266         "category": [
1267             "filter",
1268             "fw"
1269         ],
1270         "plugins": {
1271                 "requires": "nsPlugin"
1272         },
1273         "setup": [
1274             "$TC qdisc add dev $DEV1 ingress",
1275             "$TC filter add dev $DEV1 parent ffff: handle 4 prio 2 fw action pipe flowid 45"
1276         ],
1277         "cmdUnderTest": "$TC filter del dev $DEV1 parent ffff: fw flowid 45",
1278         "expExitCode": "2",
1279         "verifyCmd": "$TC filter show dev $DEV1 parent ffff:",
1280         "matchPattern": "handle 0x4.*gact action pipe",
1281         "matchCount": "1",
1282         "teardown": [
1283             "$TC qdisc del dev $DEV1 ingress"
1284         ]
1285     },
1286     {
1287         "id": "3dcb",
1288         "name": "Replace fw filter action",
1289         "category": [
1290             "filter",
1291             "fw"
1292         ],
1293         "plugins": {
1294                 "requires": "nsPlugin"
1295         },
1296         "setup": [
1297             "$TC qdisc add dev $DEV1 ingress",
1298             "$TC filter add dev $DEV1 parent ffff: handle 1 prio 2 fw action ok"
1299         ],
1300         "cmdUnderTest": "$TC filter replace dev $DEV1 parent ffff: handle 1 prio 2 fw action pipe",
1301         "expExitCode": "0",
1302         "verifyCmd": "$TC filter show dev $DEV1 parent ffff:",
1303         "matchPattern": "pref 2 fw.*handle 0x1.*gact action pipe",
1304         "matchCount": "1",
1305         "teardown": [
1306             "$TC qdisc del dev $DEV1 ingress"
1307         ]
1308     },
1309     {
1310         "id": "eb4d",
1311         "name": "Replace fw filter classid",
1312         "category": [
1313             "filter",
1314             "fw"
1315         ],
1316         "plugins": {
1317                 "requires": "nsPlugin"
1318         },
1319         "setup": [
1320             "$TC qdisc add dev $DEV1 ingress",
1321             "$TC filter add dev $DEV1 parent ffff: handle 1 prio 2 fw action ok"
1322         ],
1323         "cmdUnderTest": "$TC filter replace dev $DEV1 parent ffff: handle 1 prio 2 fw action pipe classid 2",
1324         "expExitCode": "0",
1325         "verifyCmd": "$TC filter show dev $DEV1 parent ffff:",
1326         "matchPattern": "pref 2 fw.*handle 0x1 classid :2.*gact action pipe",
1327         "matchCount": "1",
1328         "teardown": [
1329             "$TC qdisc del dev $DEV1 ingress"
1330         ]
1331     },
1332     {
1333         "id": "67ec",
1334         "name": "Replace fw filter index",
1335         "category": [
1336             "filter",
1337             "fw"
1338         ],
1339         "plugins": {
1340                 "requires": "nsPlugin"
1341         },
1342         "setup": [
1343             "$TC qdisc add dev $DEV1 ingress",
1344             "$TC filter add dev $DEV1 parent ffff: handle 1 prio 2 fw action ok index 3"
1345         ],
1346         "cmdUnderTest": "$TC filter replace dev $DEV1 parent ffff: handle 1 prio 2 fw action ok index 16",
1347         "expExitCode": "0",
1348         "verifyCmd": "$TC filter show dev $DEV1 parent ffff:",
1349         "matchPattern": "pref 2 fw.*handle 0x1.*gact action pass.*index 16",
1350         "matchCount": "1",
1351         "teardown": [
1352             "$TC qdisc del dev $DEV1 ingress"
1353         ]
1354     }
1355 ]