1[
2    {
3        "id": "6273",
4        "name": "Add cgroup filter with cmp ematch u8/link layer and drop action",
5        "category": [
6            "filter",
7            "cgroup"
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 protocol ip prio 1 cgroup match 'cmp(u8 at 0 layer link mask 0xff gt 10)' action drop",
16        "expExitCode": "0",
17        "verifyCmd": "$TC filter show dev $DEV1 parent ffff:",
18        "matchPattern": "^filter protocol ip pref [0-9]+ cgroup chain [0-9]+.*handle 0x1.*cmp\\(u8 at 0 layer 0 mask 0xff gt 10\\)",
19        "matchCount": "1",
20        "teardown": [
21            "$TC qdisc del dev $DEV1 ingress"
22        ]
23    },
24    {
25        "id": "4721",
26        "name": "Add cgroup filter with cmp ematch u8/link layer with trans flag and pass action",
27        "category": [
28            "filter",
29            "cgroup"
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 protocol ip prio 1 cgroup match 'cmp(u8 at 0 layer link mask 0xff trans gt 10)' action pass",
38        "expExitCode": "0",
39        "verifyCmd": "$TC filter show dev $DEV1 parent ffff:",
40        "matchPattern": "^filter protocol ip pref [0-9]+ cgroup chain [0-9]+.*handle 0x1.*cmp\\(u8 at 0 layer 0 mask 0xff trans gt 10\\)",
41        "matchCount": "1",
42        "teardown": [
43            "$TC qdisc del dev $DEV1 ingress"
44        ]
45    },
46    {
47        "id": "d392",
48        "name": "Add cgroup filter with cmp ematch u16/link layer and pipe action",
49        "category": [
50            "filter",
51            "cgroup"
52        ],
53        "plugins": {
54            "requires": "nsPlugin"
55        },
56        "setup": [
57            "$TC qdisc add dev $DEV1 ingress"
58        ],
59        "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: handle 1 protocol ip prio 1 cgroup match 'cmp(u16 at 0 layer 0 mask 0xff00 lt 3)' action pipe",
60        "expExitCode": "0",
61        "verifyCmd": "$TC filter show dev $DEV1 parent ffff:",
62        "matchPattern": "^filter protocol ip pref [0-9]+ cgroup chain [0-9]+.*handle 0x1.*cmp\\(u16 at 0 layer 0 mask 0xff00 lt 3\\).*action pipe",
63        "matchCount": "1",
64        "teardown": [
65            "$TC qdisc del dev $DEV1 ingress"
66        ]
67    },
68    {
69        "id": "0234",
70        "name": "Add cgroup filter with cmp ematch u32/link layer and miltiple actions",
71        "category": [
72            "filter",
73            "cgroup"
74        ],
75        "plugins": {
76            "requires": "nsPlugin"
77        },
78        "setup": [
79            "$TC qdisc add dev $DEV1 ingress"
80        ],
81        "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: handle 1 protocol ip prio 1 cgroup match 'cmp(u32 at 4 layer link mask 0xff00ff00 eq 3)' action skbedit mark 7 pipe action gact drop",
82        "expExitCode": "0",
83        "verifyCmd": "$TC filter show dev $DEV1 parent ffff:",
84        "matchPattern": "^filter protocol ip pref [0-9]+ cgroup chain [0-9]+.*handle 0x1.*cmp\\(u32 at 4 layer 0 mask 0xff00ff00 eq 3\\).*action.*skbedit.*mark 7 pipe.*action.*gact action drop",
85        "matchCount": "1",
86        "teardown": [
87            "$TC qdisc del dev $DEV1 ingress"
88        ]
89    },
90    {
91        "id": "8499",
92        "name": "Add cgroup filter with cmp ematch u8/network layer and pass action",
93        "category": [
94            "filter",
95            "cgroup"
96        ],
97        "plugins": {
98            "requires": "nsPlugin"
99        },
100        "setup": [
101            "$TC qdisc add dev $DEV1 ingress"
102        ],
103        "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: handle 0xab protocol ip prio 11 cgroup match 'cmp(u8 at 0 layer 1 mask 0xff gt 10)' action pass",
104        "expExitCode": "0",
105        "verifyCmd": "$TC filter show  dev $DEV1 parent ffff:",
106        "matchPattern": "^filter protocol ip pref 11 cgroup.*handle 0xab.*cmp\\(u8 at 0 layer 1 mask 0xff gt 10\\)",
107        "matchCount": "1",
108        "teardown": [
109            "$TC qdisc del dev $DEV1 ingress"
110        ]
111    },
112    {
113        "id": "b273",
114        "name": "Add cgroup filter with cmp ematch u8/network layer with trans flag and drop action",
115        "category": [
116            "filter",
117            "cgroup"
118        ],
119        "plugins": {
120            "requires": "nsPlugin"
121        },
122        "setup": [
123            "$TC qdisc add dev $DEV1 ingress"
124        ],
125        "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: handle 0xab protocol ip prio 11 cgroup match 'cmp(u8 at 0 layer 1 mask 0xff trans gt 10)' action drop",
126        "expExitCode": "0",
127        "verifyCmd": "$TC filter show dev $DEV1 parent ffff:",
128        "matchPattern": "^filter protocol ip pref 11 cgroup.*handle 0xab.*cmp\\(u8 at 0 layer 1 mask 0xff trans gt 10\\)",
129        "matchCount": "1",
130        "teardown": [
131            "$TC qdisc del dev $DEV1 ingress"
132        ]
133    },
134    {
135        "id": "1934",
136        "name": "Add cgroup filter with cmp ematch u16/network layer and pipe action",
137        "category": [
138            "filter",
139            "cgroup"
140        ],
141        "plugins": {
142            "requires": "nsPlugin"
143        },
144        "setup": [
145            "$TC qdisc add dev $DEV1 ingress"
146        ],
147        "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: handle 0x100 protocol ip prio 100 cgroup match 'cmp(u16 at 0 layer network mask 0xff00 lt 3)' action pipe",
148        "expExitCode": "0",
149        "verifyCmd": "$TC filter show dev $DEV1 parent ffff:",
150        "matchPattern": "filter protocol ip pref 100 cgroup.*handle 0x100..*cmp\\(u16 at 0 layer 1 mask 0xff00 lt 3\\)",
151        "matchCount": "1",
152        "teardown": [
153            "$TC qdisc del dev $DEV1 ingress"
154        ]
155    },
156    {
157        "id": "2733",
158        "name": "Add cgroup filter with cmp ematch u32/network layer and miltiple actions",
159        "category": [
160            "filter",
161            "cgroup"
162        ],
163        "plugins": {
164            "requires": "nsPlugin"
165        },
166        "setup": [
167            "$TC qdisc add dev $DEV1 ingress"
168        ],
169        "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: handle 0x112233 protocol ip prio 7 cgroup match 'cmp(u32 at 4 layer network mask 0xff00ff00 eq 3)' action skbedit mark 7 pipe action gact drop",
170        "expExitCode": "0",
171        "verifyCmd": "$TC filter show dev $DEV1 parent ffff:",
172        "matchPattern": "^filter protocol ip pref 7 cgroup.*handle 0x112233.*cmp\\(u32 at 4 layer 1 mask 0xff00ff00 eq 3\\).*action.*skbedit.*mark 7 pipe.*action.*gact action drop",
173        "matchCount": "1",
174        "teardown": [
175            "$TC qdisc del dev $DEV1 ingress"
176        ]
177    },
178    {
179        "id": "3271",
180        "name": "Add cgroup filter with NOT cmp ematch rule and pass action",
181        "category": [
182            "filter",
183            "cgroup"
184        ],
185        "plugins": {
186            "requires": "nsPlugin"
187        },
188        "setup": [
189            "$TC qdisc add dev $DEV1 ingress"
190        ],
191        "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: handle 1 protocol ip prio 1 cgroup match 'not cmp(u8 at 0 layer link mask 0xff eq 3)' action pass",
192        "expExitCode": "0",
193        "verifyCmd": "$TC filter show dev $DEV1 parent ffff:",
194        "matchPattern": "^filter protocol ip pref 1 cgroup.*handle 0x1.*NOT cmp\\(u8 at 0 layer 0 mask 0xff eq 3\\)",
195        "matchCount": "1",
196        "teardown": [
197            "$TC qdisc del dev $DEV1 ingress"
198        ]
199    },
200    {
201        "id": "2362",
202        "name": "Add cgroup filter with two ANDed cmp ematch rules and single action",
203        "category": [
204            "filter",
205            "cgroup"
206        ],
207        "plugins": {
208            "requires": "nsPlugin"
209        },
210        "setup": [
211            "$TC qdisc add dev $DEV1 ingress"
212        ],
213        "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: handle 1 protocol ip prio 1 cgroup match 'cmp(u8 at 0 layer link mask 0xff eq 3) and cmp(u16 at 8 layer link mask 0x00ff gt 7)' action gact drop",
214        "expExitCode": "0",
215        "verifyCmd": "$TC filter show dev $DEV1 parent ffff:",
216        "matchPattern": "^filter protocol ip pref 1 cgroup.*handle 0x1.*cmp\\(u8 at 0 layer 0 mask 0xff eq 3\\).*AND cmp\\(u16 at 8 layer 0 mask 0xff gt 7\\).*action.*gact action drop",
217        "matchCount": "1",
218        "teardown": [
219            "$TC qdisc del dev $DEV1 ingress"
220        ]
221    },
222    {
223        "id": "9993",
224        "name": "Add cgroup filter with two ORed cmp ematch rules and single action",
225        "category": [
226            "filter",
227            "cgroup"
228        ],
229        "plugins": {
230            "requires": "nsPlugin"
231        },
232        "setup": [
233            "$TC qdisc add dev $DEV1 ingress"
234        ],
235        "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: handle 1 protocol ip prio 1 cgroup match 'cmp(u8 at 0 layer link mask 0xff eq 3) or cmp(u16 at 8 layer link mask 0x00ff gt 7)' action gact drop",
236        "expExitCode": "0",
237        "verifyCmd": "$TC filter show dev $DEV1 parent ffff:",
238        "matchPattern": "^filter protocol ip pref 1 cgroup.*handle 0x1.*cmp\\(u8 at 0 layer 0 mask 0xff eq 3\\).*OR cmp\\(u16 at 8 layer 0 mask 0xff gt 7\\).*action.*gact action drop",
239        "matchCount": "1",
240        "teardown": [
241            "$TC qdisc del dev $DEV1 ingress"
242        ]
243    },
244    {
245        "id": "2331",
246        "name": "Add cgroup filter with two ANDed cmp ematch rules and one ORed ematch rule and single action",
247        "category": [
248            "filter",
249            "cgroup"
250        ],
251        "plugins": {
252            "requires": "nsPlugin"
253        },
254        "setup": [
255            "$TC qdisc add dev $DEV1 ingress"
256        ],
257        "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: handle 1 protocol ip prio 1 cgroup match 'cmp(u8 at 0 layer link mask 0xff eq 3) and cmp(u16 at 8 layer link mask 0x00ff gt 7) or cmp(u32 at 4 layer network mask 0xa0a0 lt 3)' action gact drop",
258        "expExitCode": "0",
259        "verifyCmd": "$TC filter show dev $DEV1 parent ffff:",
260        "matchPattern": "^filter protocol ip pref 1 cgroup.*handle 0x1.*cmp\\(u8 at 0 layer 0 mask 0xff eq 3\\).*AND cmp\\(u16 at 8 layer 0 mask 0xff gt 7\\).*OR cmp\\(u32 at 4 layer 1 mask 0xa0a0 lt 3\\).*action.*gact action drop",
261        "matchCount": "1",
262        "teardown": [
263            "$TC qdisc del dev $DEV1 ingress"
264        ]
265    },
266    {
267        "id": "3645",
268        "name": "Add cgroup filter with two ANDed cmp ematch rules and one NOT ORed ematch rule and single action",
269        "category": [
270            "filter",
271            "cgroup"
272        ],
273        "plugins": {
274            "requires": "nsPlugin"
275        },
276        "setup": [
277            "$TC qdisc add dev $DEV1 ingress"
278        ],
279        "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: handle 1 protocol ip prio 1 cgroup match 'cmp(u8 at 0 layer link mask 0xff eq 3) and cmp(u16 at 8 layer link mask 0x00ff gt 7) or not cmp(u32 at 4 layer network mask 0xa0a0 lt 3)' action gact drop",
280        "expExitCode": "0",
281        "verifyCmd": "$TC filter show dev $DEV1 parent ffff:",
282        "matchPattern": "^filter protocol ip pref 1 cgroup.*handle 0x1.*cmp\\(u8 at 0 layer 0 mask 0xff eq 3\\).*AND cmp\\(u16 at 8 layer 0 mask 0xff gt 7\\).*OR NOT cmp\\(u32 at 4 layer 1 mask 0xa0a0 lt 3\\).*action.*gact action drop",
283        "matchCount": "1",
284        "teardown": [
285            "$TC qdisc del dev $DEV1 ingress"
286        ]
287    },
288    {
289        "id": "b124",
290        "name": "Add cgroup filter with u32 ematch u8/zero offset and drop action",
291        "category": [
292            "filter",
293            "cgroup"
294        ],
295        "plugins": {
296            "requires": "nsPlugin"
297        },
298        "setup": [
299            "$TC qdisc add dev $DEV1 ingress"
300        ],
301        "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: handle 1 protocol ip prio 1 cgroup match 'u32(u8 0x11 0x0f at 0)' action drop",
302        "expExitCode": "0",
303        "verifyCmd": "$TC filter show dev $DEV1 parent ffff:",
304        "matchPattern": "^filter protocol ip pref 1 cgroup.*handle 0x1.*u32\\(01000000/0f000000 at 0\\)",
305        "matchCount": "1",
306        "teardown": [
307            "$TC qdisc del dev $DEV1 ingress"
308        ]
309    },
310    {
311        "id": "7381",
312        "name": "Add cgroup filter with u32 ematch u8/zero offset and invalid value >0xFF",
313        "category": [
314            "filter",
315            "cgroup"
316        ],
317        "plugins": {
318            "requires": "nsPlugin"
319        },
320        "setup": [
321            "$TC qdisc add dev $DEV1 ingress"
322        ],
323        "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: handle 1 protocol ip prio 1 basic match 'u32(u8 0x1122 0x0f at 0)' action pass",
324        "expExitCode": "1",
325        "verifyCmd": "$TC filter show dev $DEV1 parent ffff:",
326        "matchPattern": "^filter protocol ip pref 1 cgroup.*handle 0x1.*u32\\(11220000/0f000000 at 0\\)",
327        "matchCount": "0",
328        "teardown": [
329            "$TC qdisc del dev $DEV1 ingress"
330        ]
331    },
332    {
333        "id": "2231",
334        "name": "Add cgroup filter with u32 ematch u8/positive offset and drop action",
335        "category": [
336            "filter",
337            "cgroup"
338        ],
339        "plugins": {
340            "requires": "nsPlugin"
341        },
342        "setup": [
343            "$TC qdisc add dev $DEV1 ingress"
344        ],
345        "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: handle 1 protocol ip prio 1 cgroup match 'u32(u8 0x77 0x1f at 12)' action drop",
346        "expExitCode": "0",
347        "verifyCmd": "$TC filter show dev $DEV1 parent ffff:",
348        "matchPattern": "^filter protocol ip pref 1 cgroup.*handle 0x1.*u32\\(17000000/1f000000 at 12\\)",
349        "matchCount": "1",
350        "teardown": [
351            "$TC qdisc del dev $DEV1 ingress"
352        ]
353    },
354    {
355        "id": "1882",
356        "name": "Add cgroup filter with u32 ematch u8/invalid mask >0xFF",
357        "category": [
358            "filter",
359            "cgroup"
360        ],
361        "plugins": {
362            "requires": "nsPlugin"
363        },
364        "setup": [
365            "$TC qdisc add dev $DEV1 ingress"
366        ],
367        "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: handle 1 protocol ip prio 1 cgroup match 'u32(u8 0x77 0xff00 at 12)' action drop",
368        "expExitCode": "1",
369        "verifyCmd": "$TC filter show dev $DEV1 parent ffff:",
370        "matchPattern": "^filter protocol ip pref 1 cgroup.*handle 0x1.*u32\\(77000000/ff000000 at 12\\)",
371        "matchCount": "0",
372        "teardown": [
373            "$TC qdisc del dev $DEV1 ingress"
374        ]
375    },
376    {
377        "id": "1237",
378        "name": "Add cgroup filter with u32 ematch u8/missing offset",
379        "category": [
380            "filter",
381            "cgroup"
382        ],
383        "plugins": {
384            "requires": "nsPlugin"
385        },
386        "setup": [
387            "$TC qdisc add dev $DEV1 ingress"
388        ],
389        "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: handle 1 protocol ip prio 1 cgroup match 'u32(u8 0x77 0xff at)' action pipe",
390        "expExitCode": "1",
391        "verifyCmd": "$TC filter show dev $DEV1 parent ffff:",
392        "matchPattern": "^filter protocol ip pref 1 cgroup.*handle 0x1.*u32\\(77000000 at 12\\)",
393        "matchCount": "0",
394        "teardown": [
395            "$TC qdisc del dev $DEV1 ingress"
396        ]
397    },
398    {
399        "id": "3812",
400        "name": "Add cgroup filter with u32 ematch u8/missing AT keyword",
401        "category": [
402            "filter",
403            "cgroup"
404        ],
405        "plugins": {
406            "requires": "nsPlugin"
407        },
408        "setup": [
409            "$TC qdisc add dev $DEV1 ingress"
410        ],
411        "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: handle 1 protocol ip prio 1 cgroup match 'u32(u8 0x77 0xff 0)' action pass",
412        "expExitCode": "1",
413        "verifyCmd": "$TC filter show dev $DEV1 parent ffff:",
414        "matchPattern": "^filter protocol ip pref 1 cgroup.*handle 0x1.*u32\\(77000000 at 12\\)",
415        "matchCount": "0",
416        "teardown": [
417            "$TC qdisc del dev $DEV1 ingress"
418        ]
419    },
420    {
421        "id": "1112",
422        "name": "Add cgroup filter with u32 ematch u8/missing value",
423        "category": [
424            "filter",
425            "cgroup"
426        ],
427        "plugins": {
428            "requires": "nsPlugin"
429        },
430        "setup": [
431            "$TC qdisc add dev $DEV1 ingress"
432        ],
433        "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: handle 1 protocol ip prio 1 cgroup match 'u32(u8 at 12)' action drop",
434        "expExitCode": "1",
435        "verifyCmd": "$TC filter show dev $DEV1 parent ffff:",
436        "matchPattern": "^filter protocol ip pref 1 cgroup.*handle 0x1.*u32\\(at 12\\)",
437        "matchCount": "0",
438        "teardown": [
439            "$TC qdisc del dev $DEV1 ingress"
440        ]
441    },
442    {
443        "id": "3241",
444        "name": "Add cgroup filter with u32 ematch u8/non-numeric value",
445        "category": [
446            "filter",
447            "cgroup"
448        ],
449        "plugins": {
450            "requires": "nsPlugin"
451        },
452        "setup": [
453            "$TC qdisc add dev $DEV1 ingress"
454        ],
455        "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: handle 1 protocol ip prio 1 cgroup match 'u32(u8 zero 0xff at 0)' action pipe",
456        "expExitCode": "1",
457        "verifyCmd": "$TC filter show dev $DEV1 parent ffff:",
458        "matchPattern": "^filter protocol ip pref 1 cgroup.*handle 0x1 flowid 1:1.*u32\\(00000000/ff000000 at 0\\)",
459        "matchCount": "0",
460        "teardown": [
461            "$TC qdisc del dev $DEV1 ingress"
462        ]
463    },
464    {
465        "id": "e231",
466        "name": "Add cgroup filter with u32 ematch u8/non-numeric mask",
467        "category": [
468            "filter",
469            "cgroup"
470        ],
471        "plugins": {
472            "requires": "nsPlugin"
473        },
474        "setup": [
475            "$TC qdisc add dev $DEV1 ingress"
476        ],
477        "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: handle 1 protocol ip prio 1 cgroup match 'u32(u8 0x11 mask at 0)' action pass",
478        "expExitCode": "1",
479        "verifyCmd": "$TC filter show dev $DEV1 parent ffff:",
480        "matchPattern": "^filter protocol ip pref 1 cgroup.*handle 0x1.*u32\\(11000000/00000000 at 0\\)",
481        "matchCount": "0",
482        "teardown": [
483            "$TC qdisc del dev $DEV1 ingress"
484        ]
485    },
486    {
487        "id": "4652",
488        "name": "Add cgroup filter with u32 ematch u8/negative offset and pass action",
489        "category": [
490            "filter",
491            "cgroup"
492        ],
493        "plugins": {
494            "requires": "nsPlugin"
495        },
496        "setup": [
497            "$TC qdisc add dev $DEV1 ingress"
498        ],
499        "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: handle 1 protocol ip prio 1 cgroup match 'u32(u8 0xaa 0xf0 at -14)' action pass",
500        "expExitCode": "0",
501        "verifyCmd": "$TC filter show dev $DEV1 parent ffff:",
502        "matchPattern": "^filter protocol ip pref 1 cgroup.*handle 0x1.*u32\\(0000a000/0000f000 at -16\\)",
503        "matchCount": "1",
504        "teardown": [
505            "$TC qdisc del dev $DEV1 ingress"
506        ]
507    },
508    {
509        "id": "7566",
510        "name": "Add cgroup filter with u32 ematch u8/nexthdr+ offset and drop action",
511        "category": [
512            "filter",
513            "drop"
514        ],
515        "plugins": {
516            "requires": "nsPlugin"
517        },
518        "setup": [
519            "$TC qdisc add dev $DEV1 ingress"
520        ],
521        "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: handle 1 protocol ip prio 1 cgroup match 'u32(u8 0xaa 0xf0 at nexthdr+0)' action drop",
522        "expExitCode": "0",
523        "verifyCmd": "$TC filter show dev $DEV1 parent ffff:",
524        "matchPattern": "^filter protocol ip pref 1 cgroup.*handle 0x1.*u32\\(a0000000/f0000000 at nexthdr\\+0\\)",
525        "matchCount": "1",
526        "teardown": [
527            "$TC qdisc del dev $DEV1 ingress"
528        ]
529    },
530    {
531        "id": "1331",
532        "name": "Add cgroup filter with u32 ematch u16/zero offset and pipe action",
533        "category": [
534            "filter",
535            "cgroup"
536        ],
537        "plugins": {
538            "requires": "nsPlugin"
539        },
540        "setup": [
541            "$TC qdisc add dev $DEV1 ingress"
542        ],
543        "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: handle 1 protocol ip prio 1 cgroup match 'u32(u16 0x1122 0xffff at 0)' action pipe",
544        "expExitCode": "0",
545        "verifyCmd": "$TC filter show dev $DEV1 parent ffff:",
546        "matchPattern": "^filter protocol ip pref 1 cgroup.*handle 0x1.*u32\\(11220000/ffff0000 at 0\\)",
547        "matchCount": "1",
548        "teardown": [
549            "$TC qdisc del dev $DEV1 ingress"
550        ]
551    },
552    {
553        "id": "e354",
554        "name": "Add cgroup filter with u32 ematch u16/zero offset and invalid value >0xFFFF",
555        "category": [
556            "filter",
557            "cgroup"
558        ],
559        "plugins": {
560            "requires": "nsPlugin"
561        },
562        "setup": [
563            "$TC qdisc add dev $DEV1 ingress"
564        ],
565        "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: handle 1 protocol ip prio 1 cgroup match 'u32(u16 0x112233 0xffff at 0)'",
566        "expExitCode": "1",
567        "verifyCmd": "$TC filter show dev $DEV1 parent ffff:",
568        "matchPattern": "^filter protocol ip pref 1 cgroup.*handle 0x1.*u32\\(11223300/ffff0000 at 0\\)",
569        "matchCount": "0",
570        "teardown": [
571            "$TC qdisc del dev $DEV1 ingress"
572        ]
573    },
574    {
575        "id": "3538",
576        "name": "Add cgroup filter with u32 ematch u16/positive offset and drop action",
577        "category": [
578            "filter",
579            "cgroup"
580        ],
581        "plugins": {
582            "requires": "nsPlugin"
583        },
584        "setup": [
585            "$TC qdisc add dev $DEV1 ingress"
586        ],
587        "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: handle 1 protocol ip prio 1 cgroup match 'u32(u16 0x7788 0x1fff at 12)' action drop",
588        "expExitCode": "0",
589        "verifyCmd": "$TC filter show dev $DEV1 parent ffff:",
590        "matchPattern": "^filter protocol ip pref 1 cgroup.*handle 0x1.*u32\\(17880000/1fff0000 at 12\\)",
591        "matchCount": "1",
592        "teardown": [
593            "$TC qdisc del dev $DEV1 ingress"
594        ]
595    },
596    {
597        "id": "4576",
598        "name": "Add cgroup filter with u32 ematch u16/invalid mask >0xFFFF",
599        "category": [
600            "filter",
601            "cgroup"
602        ],
603        "plugins": {
604            "requires": "nsPlugin"
605        },
606        "setup": [
607            "$TC qdisc add dev $DEV1 ingress"
608        ],
609        "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: handle 1 protocol ip prio 1 cgroup match 'u32(u16 0x7788 0xffffffff at 12)' action pass",
610        "expExitCode": "1",
611        "verifyCmd": "$TC filter show dev $DEV1 parent ffff:",
612        "matchPattern": "^filter protocol ip pref 1 cgroup.*handle 0x1.*u32\\(77880000/ffffffff at 12\\)",
613        "matchCount": "0",
614        "teardown": [
615            "$TC qdisc del dev $DEV1 ingress"
616        ]
617    },
618    {
619        "id": "b842",
620        "name": "Add cgroup filter with u32 ematch u16/missing offset",
621        "category": [
622            "filter",
623            "cgroup"
624        ],
625        "plugins": {
626            "requires": "nsPlugin"
627        },
628        "setup": [
629            "$TC qdisc add dev $DEV1 ingress"
630        ],
631        "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: handle 1 protocol ip prio 1 cgroup match 'u32(u16 0x7788 0xffff at)' action pass",
632        "expExitCode": "1",
633        "verifyCmd": "$TC filter show dev $DEV1 parent ffff:",
634        "matchPattern": "^filter protocol ip pref 1 cgroup.*handle 0x1.*u32\\(77880000 at 12\\)",
635        "matchCount": "0",
636        "teardown": [
637            "$TC qdisc del dev $DEV1 ingress"
638        ]
639    },
640    {
641        "id": "c924",
642        "name": "Add cgroup filter with u32 ematch u16/missing AT keyword",
643        "category": [
644            "filter",
645            "cgroup"
646        ],
647        "plugins": {
648            "requires": "nsPlugin"
649        },
650        "setup": [
651            "$TC qdisc add dev $DEV1 ingress"
652        ],
653        "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: handle 1 protocol ip prio 1 cgroup match 'u32(u16 0x7788 0xffff 0)' action pass",
654        "expExitCode": "1",
655        "verifyCmd": "$TC filter show dev $DEV1 parent ffff:",
656        "matchPattern": "^filter protocol ip pref 1 cgroup.*handle 0x1.*u32\\(77880000/ffff0000 at 0\\)",
657        "matchCount": "0",
658        "teardown": [
659            "$TC qdisc del dev $DEV1 ingress"
660        ]
661    },
662    {
663        "id": "cc93",
664        "name": "Add cgroup filter with u32 ematch u16/missing value",
665        "category": [
666            "filter",
667            "cgroup"
668        ],
669        "plugins": {
670            "requires": "nsPlugin"
671        },
672        "setup": [
673            "$TC qdisc add dev $DEV1 ingress"
674        ],
675        "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: handle 1 protocol ip prio 1 cgroup match 'u32(u16 at 12)' action pass",
676        "expExitCode": "1",
677        "verifyCmd": "$TC filter show dev $DEV1 parent ffff:",
678        "matchPattern": "^filter protocol ip pref 1 cgroup.*handle 0x1.*u32\\(at 12\\)",
679        "matchCount": "0",
680        "teardown": [
681            "$TC qdisc del dev $DEV1 ingress"
682        ]
683    },
684    {
685        "id": "123c",
686        "name": "Add cgroup filter with u32 ematch u16/non-numeric value",
687        "category": [
688            "filter",
689            "cgroup"
690        ],
691        "plugins": {
692            "requires": "nsPlugin"
693        },
694        "setup": [
695            "$TC qdisc add dev $DEV1 ingress"
696        ],
697        "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: handle 1 protocol ip prio 1 cgroup match 'u32(u16 zero 0xffff at 0)' action pass",
698        "expExitCode": "1",
699        "verifyCmd": "$TC filter show dev $DEV1 parent ffff:",
700        "matchPattern": "^filter protocol ip pref 1 cgroup.*handle 0x1.*u32\\(00000000/ffff0000 at 0\\)",
701        "matchCount": "0",
702        "teardown": [
703            "$TC qdisc del dev $DEV1 ingress"
704        ]
705    },
706    {
707        "id": "3675",
708        "name": "Add cgroup filter with u32 ematch u16/non-numeric mask",
709        "category": [
710            "filter",
711            "cgroup"
712        ],
713        "plugins": {
714            "requires": "nsPlugin"
715        },
716        "setup": [
717            "$TC qdisc add dev $DEV1 ingress"
718        ],
719        "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: handle 1 protocol ip prio 1 cgroup match 'u32(u8 0x1122 mask at 0)' action pass",
720        "expExitCode": "1",
721        "verifyCmd": "$TC filter show dev $DEV1 parent ffff:",
722        "matchPattern": "^filter protocol ip pref 1 cgroup.*handle 0x1.*u32\\(11220000/00000000 at 0\\)",
723        "matchCount": "0",
724        "teardown": [
725            "$TC qdisc del dev $DEV1 ingress"
726        ]
727    },
728    {
729        "id": "1123",
730        "name": "Add cgroup filter with u32 ematch u16/negative offset and drop action",
731        "category": [
732            "filter",
733            "cgroup"
734        ],
735        "plugins": {
736            "requires": "nsPlugin"
737        },
738        "setup": [
739            "$TC qdisc add dev $DEV1 ingress"
740        ],
741        "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: handle 1 protocol ip prio 1 cgroup match 'u32(u16 0xaabb 0xffff at -12)' action drop",
742        "expExitCode": "0",
743        "verifyCmd": "$TC filter show dev $DEV1 parent ffff:",
744        "matchPattern": "^filter protocol ip pref 1 cgroup.*handle 0x1.*u32\\(aabb0000/ffff0000 at -12\\)",
745        "matchCount": "1",
746        "teardown": [
747            "$TC qdisc del dev $DEV1 ingress"
748        ]
749    },
750    {
751        "id": "4234",
752        "name": "Add cgroup filter with u32 ematch u16/nexthdr+ offset and pass action",
753        "category": [
754            "filter",
755            "cgroup"
756        ],
757        "plugins": {
758            "requires": "nsPlugin"
759        },
760        "setup": [
761            "$TC qdisc add dev $DEV1 ingress"
762        ],
763        "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: handle 1 protocol ip prio 1 cgroup match 'u32(u16 0xaabb 0xf0f0 at nexthdr+0)' action pass",
764        "expExitCode": "0",
765        "verifyCmd": "$TC filter show dev $DEV1 parent ffff:",
766        "matchPattern": "^filter protocol ip pref 1 cgroup.*handle 0x1.*u32\\(a0b00000/f0f00000 at nexthdr\\+0\\)",
767        "matchCount": "1",
768        "teardown": [
769            "$TC qdisc del dev $DEV1 ingress"
770        ]
771    },
772    {
773        "id": "e912",
774        "name": "Add cgroup filter with u32 ematch u32/zero offset and pipe action",
775        "category": [
776            "filter",
777            "cgroup"
778        ],
779        "plugins": {
780            "requires": "nsPlugin"
781        },
782        "setup": [
783            "$TC qdisc add dev $DEV1 ingress"
784        ],
785        "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: handle 1 protocol ip prio 1 cgroup match 'u32(u32 0xaabbccdd 0xffffffff at 0)' action pipe",
786        "expExitCode": "0",
787        "verifyCmd": "$TC filter show dev $DEV1 parent ffff:",
788        "matchPattern": "^filter protocol ip pref 1 cgroup.*handle 0x1.*u32\\(aabbccdd/ffffffff at 0\\)",
789        "matchCount": "1",
790        "teardown": [
791            "$TC qdisc del dev $DEV1 ingress"
792        ]
793    },
794    {
795        "id": "1435",
796        "name": "Add cgroup filter with u32 ematch u32/positive offset and drop action",
797        "category": [
798            "filter",
799            "cgroup"
800        ],
801        "plugins": {
802            "requires": "nsPlugin"
803        },
804        "setup": [
805            "$TC qdisc add dev $DEV1 ingress"
806        ],
807        "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: handle 1 protocol ip prio 1 cgroup match 'u32(u32 0x11227788 0x1ffff0f0 at 12)' action drop",
808        "expExitCode": "0",
809        "verifyCmd": "$TC filter show dev $DEV1 parent ffff:",
810        "matchPattern": "^filter protocol ip pref 1 cgroup.*handle 0x1.*u32\\(11227080/1ffff0f0 at 12\\)",
811        "matchCount": "1",
812        "teardown": [
813            "$TC qdisc del dev $DEV1 ingress"
814        ]
815    },
816    {
817        "id": "1282",
818        "name": "Add cgroup filter with u32 ematch u32/missing offset",
819        "category": [
820            "filter",
821            "cgroup"
822        ],
823        "plugins": {
824            "requires": "nsPlugin"
825        },
826        "setup": [
827            "$TC qdisc add dev $DEV1 ingress"
828        ],
829        "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: handle 1 protocol ip prio 1 cgroup match 'u32(u32 0x11227788 0xffffffff at)' action pass",
830        "expExitCode": "1",
831        "verifyCmd": "$TC filter show dev $DEV1 parent ffff:",
832        "matchPattern": "^filter protocol ip pref 1 cgroup.*handle 0x1.*u32\\(11227788/ffffffff at 12\\)",
833        "matchCount": "0",
834        "teardown": [
835            "$TC qdisc del dev $DEV1 ingress"
836        ]
837    },
838    {
839        "id": "6456",
840        "name": "Add cgroup filter with u32 ematch u32/missing AT keyword",
841        "category": [
842            "filter",
843            "cgroup"
844        ],
845        "plugins": {
846            "requires": "nsPlugin"
847        },
848        "setup": [
849            "$TC qdisc add dev $DEV1 ingress"
850        ],
851        "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: handle 1 protocol ip prio 1 cgroup match 'u32(u32 0x77889900 0xfffff0f0 0)' action pipe",
852        "expExitCode": "1",
853        "verifyCmd": "$TC filter show dev $DEV1 parent ffff:",
854        "matchPattern": "^filter protocol ip pref 1 cgroup.*handle 0x1.*u32\\(77889900/fffff0f0 at 0\\)",
855        "matchCount": "0",
856        "teardown": [
857            "$TC qdisc del dev $DEV1 ingress"
858        ]
859    },
860    {
861        "id": "4231",
862        "name": "Add cgroup filter with u32 ematch u32/missing value",
863        "category": [
864            "filter",
865            "cgroup"
866        ],
867        "plugins": {
868            "requires": "nsPlugin"
869        },
870        "setup": [
871            "$TC qdisc add dev $DEV1 ingress"
872        ],
873        "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: handle 1 protocol ip prio 1 cgroup match 'u32(u32 at 12)' action pipe",
874        "expExitCode": "1",
875        "verifyCmd": "$TC filter show dev $DEV1 parent ffff:",
876        "matchPattern": "^filter protocol ip pref 1 cgroup.*handle 0x1.*u32\\(at 12\\)",
877        "matchCount": "0",
878        "teardown": [
879            "$TC qdisc del dev $DEV1 ingress"
880        ]
881    },
882    {
883        "id": "2131",
884        "name": "Add cgroup filter with u32 ematch u32/non-numeric value",
885        "category": [
886            "filter",
887            "cgroup"
888        ],
889        "plugins": {
890            "requires": "nsPlugin"
891        },
892        "setup": [
893            "$TC qdisc add dev $DEV1 ingress"
894        ],
895        "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: handle 1 protocol ip prio 1 cgroup match 'u32(u32 zero 0xffff at 0)' action pipe",
896        "expExitCode": "1",
897        "verifyCmd": "$TC filter show dev $DEV1 parent ffff:",
898        "matchPattern": "^filter protocol ip pref 1 cgroup.*handle 0x1.*u32\\(00000000/ffff0000 at 0\\)",
899        "matchCount": "0",
900        "teardown": [
901            "$TC qdisc del dev $DEV1 ingress"
902        ]
903    },
904    {
905        "id": "f125",
906        "name": "Add cgroup filter with u32 ematch u32/non-numeric mask",
907        "category": [
908            "filter",
909            "cgroup"
910        ],
911        "plugins": {
912            "requires": "nsPlugin"
913        },
914        "setup": [
915            "$TC qdisc add dev $DEV1 ingress"
916        ],
917        "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: handle 1 protocol ip prio 1 cgroup match 'u32(u32 0x11223344 mask at 0)' action pass",
918        "expExitCode": "1",
919        "verifyCmd": "$TC filter show dev $DEV1 parent ffff:",
920        "matchPattern": "^filter protocol ip pref 1 cgroup.*handle 0x1.*u32\\(11223344/00000000 at 0\\)",
921        "matchCount": "0",
922        "teardown": [
923            "$TC qdisc del dev $DEV1 ingress"
924        ]
925    },
926    {
927        "id": "4316",
928        "name": "Add cgroup filter with u32 ematch u32/negative offset and drop action",
929        "category": [
930            "filter",
931            "cgroup"
932        ],
933        "plugins": {
934            "requires": "nsPlugin"
935        },
936        "setup": [
937            "$TC qdisc add dev $DEV1 ingress"
938        ],
939        "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: handle 1 protocol ip prio 1 cgroup match 'u32(u32 0xaabbccdd 0xff00ff00 at -12)' action drop",
940        "expExitCode": "0",
941        "verifyCmd": "$TC filter show dev $DEV1 parent ffff:",
942        "matchPattern": "^filter protocol ip pref 1 cgroup.*handle 0x1.*u32\\(aa00cc00/ff00ff00 at -12\\)",
943        "matchCount": "1",
944        "teardown": [
945            "$TC qdisc del dev $DEV1 ingress"
946        ]
947    },
948    {
949        "id": "23ae",
950        "name": "Add cgroup filter with u32 ematch u32/nexthdr+ offset and pipe action",
951        "category": [
952            "filter",
953            "cgroup"
954        ],
955        "plugins": {
956            "requires": "nsPlugin"
957        },
958        "setup": [
959            "$TC qdisc add dev $DEV1 ingress"
960        ],
961        "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: handle 1 protocol ip prio 1 cgroup match 'u32(u32 0xaabbccdd 0xffffffff at nexthdr+0)' action pipe",
962        "expExitCode": "0",
963        "verifyCmd": "$TC filter show dev $DEV1 parent ffff:",
964        "matchPattern": "^filter protocol ip pref 1 cgroup.*handle 0x1.*u32\\(aabbccdd/ffffffff at nexthdr\\+0\\)",
965        "matchCount": "1",
966        "teardown": [
967            "$TC qdisc del dev $DEV1 ingress"
968        ]
969    },
970    {
971        "id": "23a1",
972        "name": "Add cgroup filter with canid ematch and single SFF",
973        "category": [
974            "filter",
975            "cgroup"
976        ],
977        "plugins": {
978            "requires": "nsPlugin"
979        },
980        "setup": [
981            "$TC qdisc add dev $DEV1 ingress"
982        ],
983        "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: handle 1 protocol ip prio 1 cgroup match 'canid(sff 1)' action pass",
984        "expExitCode": "0",
985        "verifyCmd": "$TC filter show dev $DEV1 parent ffff:",
986        "matchPattern": "^filter protocol ip pref 1 cgroup.*handle 0x1.*canid\\(sff 0x1\\)",
987        "matchCount": "1",
988        "teardown": [
989            "$TC qdisc del dev $DEV1 ingress"
990        ]
991    },
992    {
993        "id": "324f",
994        "name": "Add cgroup filter with canid ematch and single SFF with mask",
995        "category": [
996            "filter",
997            "cgroup"
998        ],
999        "plugins": {
1000            "requires": "nsPlugin"
1001        },
1002        "setup": [
1003            "$TC qdisc add dev $DEV1 ingress"
1004        ],
1005        "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: handle 1 protocol ip prio 1 cgroup match 'canid(sff 0xaabb:0x00ff)' action pass",
1006        "expExitCode": "0",
1007        "verifyCmd": "$TC filter show dev $DEV1 parent ffff:",
1008        "matchPattern": "^filter protocol ip pref 1 cgroup.*handle 0x1.*canid\\(sff 0x2BB:0xFF\\)",
1009        "matchCount": "1",
1010        "teardown": [
1011            "$TC qdisc del dev $DEV1 ingress"
1012        ]
1013    },
1014    {
1015        "id": "2576",
1016        "name": "Add cgroup filter with canid ematch and multiple SFF",
1017        "category": [
1018            "filter",
1019            "cgroup"
1020        ],
1021        "plugins": {
1022            "requires": "nsPlugin"
1023        },
1024        "setup": [
1025            "$TC qdisc add dev $DEV1 ingress"
1026        ],
1027        "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: handle 1 protocol ip prio 1 cgroup match 'canid(sff 1 sff 2 sff 3)' action pass",
1028        "expExitCode": "0",
1029        "verifyCmd": "$TC filter show dev $DEV1 parent ffff:",
1030        "matchPattern": "^filter protocol ip pref 1 cgroup.*handle 0x1.*canid\\(sff 0x1 sff 0x2 sff 0x3\\)",
1031        "matchCount": "1",
1032        "teardown": [
1033            "$TC qdisc del dev $DEV1 ingress"
1034        ]
1035    },
1036    {
1037        "id": "4839",
1038        "name": "Add cgroup filter with canid ematch and multiple SFF with masks",
1039        "category": [
1040            "filter",
1041            "cgroup"
1042        ],
1043        "plugins": {
1044            "requires": "nsPlugin"
1045        },
1046        "setup": [
1047            "$TC qdisc add dev $DEV1 ingress"
1048        ],
1049        "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: handle 1 protocol ip prio 1 cgroup match 'canid(sff 0xaa:0x01 sff 0xbb:0x02 sff 0xcc:0x03)' action drop",
1050        "expExitCode": "0",
1051        "verifyCmd": "$TC filter show dev $DEV1 parent ffff:",
1052        "matchPattern": "^filter protocol ip pref 1 cgroup.*handle 0x1.*canid\\(sff 0xAA:0x1 sff 0xBB:0x2 sff 0xCC:0x3\\)",
1053        "matchCount": "1",
1054        "teardown": [
1055            "$TC qdisc del dev $DEV1 ingress"
1056        ]
1057    },
1058    {
1059        "id": "6713",
1060        "name": "Add cgroup filter with canid ematch and single EFF",
1061        "category": [
1062            "filter",
1063            "cgroup"
1064        ],
1065        "plugins": {
1066            "requires": "nsPlugin"
1067        },
1068        "setup": [
1069            "$TC qdisc add dev $DEV1 ingress"
1070        ],
1071        "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: handle 1 protocol ip prio 1 cgroup match 'canid(eff 1)' action pipe",
1072        "expExitCode": "0",
1073        "verifyCmd": "$TC filter show dev $DEV1 parent ffff:",
1074        "matchPattern": "^filter protocol ip pref 1 cgroup.*handle 0x1.*canid\\(eff 0x1\\)",
1075        "matchCount": "1",
1076        "teardown": [
1077            "$TC qdisc del dev $DEV1 ingress"
1078        ]
1079    },
1080    {
1081        "id": "4572",
1082        "name": "Add cgroup filter with canid ematch and single EFF with mask",
1083        "category": [
1084            "filter",
1085            "cgroup"
1086        ],
1087        "plugins": {
1088            "requires": "nsPlugin"
1089        },
1090        "setup": [
1091            "$TC qdisc add dev $DEV1 ingress"
1092        ],
1093        "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: handle 1 protocol ip prio 1 cgroup match 'canid(eff 0xaabb:0xf1f1)' action pass",
1094        "expExitCode": "0",
1095        "verifyCmd": "$TC filter show dev $DEV1 parent ffff:",
1096        "matchPattern": "^filter protocol ip pref 1 cgroup.*handle 0x1.*canid\\(eff 0xAABB:0xF1F1\\)",
1097        "matchCount": "1",
1098        "teardown": [
1099            "$TC qdisc del dev $DEV1 ingress"
1100        ]
1101    },
1102    {
1103        "id": "8031",
1104        "name": "Add cgroup filter with canid ematch and multiple EFF",
1105        "category": [
1106            "filter",
1107            "cgroup"
1108        ],
1109        "plugins": {
1110            "requires": "nsPlugin"
1111        },
1112        "setup": [
1113            "$TC qdisc add dev $DEV1 ingress"
1114        ],
1115        "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: handle 1 protocol ip prio 1 cgroup match 'canid(eff 1 eff 2 eff 3)' action pass",
1116        "expExitCode": "0",
1117        "verifyCmd": "$TC filter show dev $DEV1 parent ffff:",
1118        "matchPattern": "^filter protocol ip pref 1 cgroup.*handle 0x1.*canid\\(eff 0x1 eff 0x2 eff 0x3\\)",
1119        "matchCount": "1",
1120        "teardown": [
1121            "$TC qdisc del dev $DEV1 ingress"
1122        ]
1123    },
1124    {
1125        "id": "ab9d",
1126        "name": "Add cgroup filter with canid ematch and multiple EFF with masks",
1127        "category": [
1128            "filter",
1129            "cgroup"
1130        ],
1131        "plugins": {
1132            "requires": "nsPlugin"
1133        },
1134        "setup": [
1135            "$TC qdisc add dev $DEV1 ingress"
1136        ],
1137        "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: handle 1 protocol ip prio 1 cgroup match 'canid(eff 0xaa:0x01 eff 0xbb:0x02 eff 0xcc:0x03)' action pass",
1138        "expExitCode": "0",
1139        "verifyCmd": "$TC filter show dev $DEV1 parent ffff:",
1140        "matchPattern": "^filter protocol ip pref 1 cgroup.*handle 0x1.*canid\\(eff 0xAA:0x1 eff 0xBB:0x2 eff 0xCC:0x3\\)",
1141        "matchCount": "1",
1142        "teardown": [
1143            "$TC qdisc del dev $DEV1 ingress"
1144        ]
1145    },
1146    {
1147        "id": "5349",
1148        "name": "Add cgroup filter with canid ematch and a combination of SFF/EFF",
1149        "category": [
1150            "filter",
1151            "cgroup"
1152        ],
1153        "plugins": {
1154            "requires": "nsPlugin"
1155        },
1156        "setup": [
1157            "$TC qdisc add dev $DEV1 ingress"
1158        ],
1159        "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: handle 1 protocol ip prio 1 cgroup match 'canid(sff 0x01 eff 0x02)' action pass",
1160        "expExitCode": "0",
1161        "verifyCmd": "$TC filter show dev $DEV1 parent ffff:",
1162        "matchPattern": "^filter protocol ip pref 1 cgroup.*handle 0x1.*canid\\(eff 0x2 sff 0x1\\)",
1163        "matchCount": "1",
1164        "teardown": [
1165            "$TC qdisc del dev $DEV1 ingress"
1166        ]
1167    },
1168    {
1169        "id": "c934",
1170        "name": "Add cgroup filter with canid ematch and a combination of SFF/EFF with masks",
1171        "category": [
1172            "filter",
1173            "cgroup"
1174        ],
1175        "plugins": {
1176            "requires": "nsPlugin"
1177        },
1178        "setup": [
1179            "$TC qdisc add dev $DEV1 ingress"
1180        ],
1181        "cmdUnderTest": "$TC filter add dev $DEV1 parent ffff: handle 1 protocol ip prio 1 cgroup match 'canid(sff 0x01:0xf eff 0x02:0xf)' action drop",
1182        "expExitCode": "0",
1183        "verifyCmd": "$TC filter show dev $DEV1 parent ffff:",
1184        "matchPattern": "^filter protocol ip pref 1 cgroup.*handle 0x1.*canid\\(eff 0x2:0xF sff 0x1:0xF\\)",
1185        "matchCount": "1",
1186        "teardown": [
1187            "$TC qdisc del dev $DEV1 ingress"
1188        ]
1189    },
1190    {
1191        "id": "4319",
1192        "name": "Replace cgroup filter with diffferent match",
1193        "category": [
1194            "filter",
1195            "cgroup"
1196        ],
1197        "plugins": {
1198            "requires": "nsPlugin"
1199        },
1200        "setup": [
1201            "$TC qdisc add dev $DEV1 ingress",
1202            "$TC filter add dev $DEV1 parent ffff: handle 1 protocol ip prio 1 cgroup match 'cmp(u8 at 0 layer link mask 0xff gt 10)' action pass"
1203        ],
1204        "cmdUnderTest": "$TC filter replace dev $DEV1 parent ffff: handle 1 protocol ip prio 1 cgroup match 'cmp(u8 at 0 layer link mask 0xff gt 8)' action pass",
1205        "expExitCode": "0",
1206        "verifyCmd": "$TC filter show dev $DEV1 parent ffff:",
1207        "matchPattern": "cmp\\(u8 at 0 layer 0 mask 0xff gt 8\\)",
1208        "matchCount": "1",
1209        "teardown": [
1210            "$TC qdisc del dev $DEV1 ingress"
1211        ]
1212    },
1213    {
1214        "id": "4636",
1215        "name": "Delete cgroup filter",
1216        "category": [
1217            "filter",
1218            "cgroup"
1219        ],
1220        "plugins": {
1221            "requires": "nsPlugin"
1222        },
1223        "setup": [
1224            "$TC qdisc add dev $DEV1 ingress",
1225            "$TC filter add dev $DEV1 parent ffff: handle 1 protocol ip prio 1 cgroup match 'cmp(u8 at 0 layer link mask 0xff gt 10)' action pass"
1226        ],
1227        "cmdUnderTest": "$TC filter delete dev $DEV1 parent ffff: protocol ip prio 1 cgroup match 'cmp(u8 at 0 layer link mask 0xff gt 10)' action pass",
1228        "expExitCode": "0",
1229        "verifyCmd": "$TC filter show dev $DEV1 parent ffff:",
1230        "matchPattern": "cmp\\(u8 at 0 layer 0 mask 0xff gt 8\\)",
1231        "matchCount": "0",
1232        "teardown": [
1233            "$TC qdisc del dev $DEV1 ingress"
1234        ]
1235    }
1236]
1237