1 struct vector {
2 	uint8_t	*data;
3 	size_t	size;
4 } vectors[] = {
5 
6 	{
7 		.data = "\xc0\x08\x04\x00\x00\x48\xce",
8 		.size = 7
9 	},
10 	{
11 		.data = "\xc0\x08\x04\x0f\x10\xc8\x02",
12 		.size = 7
13 	},
14 	{
15 		.data = "\xc0\x08\x04\x3b\xc0\x00\xc9",
16 		.size = 7
17 	},
18 	{
19 		.data = "\xe0\x08\x04\x4e\x97\x00\x03",
20 		.size = 7
21 	},
22 	{
23 		.data = "\xe0\x08\x08\x3b\xc0\x00\xc9\x3b\xc0\x00\xcb",
24 		.size = 11
25 	},
26 	{
27 		.data = "\xc0\x08\x08\x9e\x19\x7a\x44\x9e\x19\x7a\x45",
28 		.size = 11
29 	},
30 	{
31 		.data = "\xc0\x08\x14\x00\x00\x0b\x5a\x00\x00\x3f\x89\x00\x00"
32 		    "\x3f\x94\x00\x00\x48\xce\x00\x00\xa2\xda",
33 		.size = 23
34 	},
35 	{
36 		.data = "\xc0\x10\x08\x00\x02\xfc\x00\x00\x00\x00\x40",
37 		.size = 11
38 	},
39 	{
40 		.data = "\xc0\x10\x08\x00\x02\xfc\x00\x00\x00\x00\x42",
41 		.size = 11
42 	},
43 	{
44 		.data = "\xc0\x10\x08\x00\x02\xfc\x00\x00\x00\x00\xb2",
45 		.size = 11
46 	},
47 	{
48 		.data = "\xc0\x10\x08\x00\x02\xfc\x00\x00\x00\x00\xd3",
49 		.size = 11
50 	},
51 	{
52 		.data = "\xe0\x10\x08\x00\x02\xfc\x00\x00\x00\x01\x10",
53 		.size = 11
54 	},
55 	{
56 		.data = "\xe0\x10\x08\x00\x02\xfc\x00\x00\x00\x01\x1e",
57 		.size = 11
58 	},
59 	{
60 		.data = "\xe0\x10\x08\x00\x02\xfc\x00\x00\x00\x01\x29",
61 		.size = 11
62 	},
63 	{
64 		.data = "\xc0\x10\x08\x00\x02\xfc\x00\x00\x00\x01\xb6",
65 		.size = 11
66 	},
67 	{
68 		.data = "\xc0\x10\x08\x00\x02\xfc\x00\x00\x00\x01\xe0",
69 		.size = 11
70 	},
71 	{
72 		.data = "\xc0\x10\x08\x00\x02\xfc\x00\x00\x00\x02\x8b",
73 		.size = 11
74 	},
75 	{
76 		.data = "\xc0\x10\x08\x00\x02\xfc\x00\x00\x00\x02\xc5",
77 		.size = 11
78 	},
79 	{
80 		.data = "\xc0\x10\x08\x00\x02\xfc\x00\x00\x00\x03\xc2",
81 		.size = 11
82 	},
83 	{
84 		.data = "\xc0\x10\x08\x00\x02\xfc\x00\x00\x00\x04\x09",
85 		.size = 11
86 	},
87 	{
88 		.data = "\xc0\x10\x08\x00\x02\xfc\x00\x00\x00\x04\xe4",
89 		.size = 11
90 	},
91 	{
92 		.data = "\xc0\x10\x08\x00\x02\xfc\x00\x00\x00\x05\x57",
93 		.size = 11
94 	},
95 	{
96 		.data = "\xc0\x10\x08\x00\x02\xfc\x00\x00\x00\x05\x92",
97 		.size = 11
98 	},
99 	{
100 		.data = "\xc0\x10\x08\x00\x02\xfd\xe8\x00\x00\x2a\xf8",
101 		.size = 11
102 	},
103 	{
104 		.data = "\xc0\x20\x18\x00\x00\xd0\x5b\x00\x00\x00\x0b\x00\x00"
105 		    "\x00\x01\x00\x00\xd0\x5b\x00\x00\x00\x0b\x00\x00"
106 		    "\x00\x03",
107 		.size = 27
108 	},
109 	{
110 		.data = "\xe0\x20\x24\x00\x00\xd0\x5b\x00\x00\x00\x0b\x00\x00"
111 		    "\x00\x01\x00\x00\xd0\x5b\x00\x00\x00\x0b\x00\x00"
112 		    "\x00\x03\x00\x00\xed\x5f\x00\x00\xed\x5f\x00\x00"
113 		    "\xed\x5f",
114 		.size = 39
115 	},
116 	{
117 		.data = "\xe0\x20\x24\x00\x00\xd0\x5b\x00\x00\x00\x0b\x00\x00"
118 		    "\x00\x01\x00\x00\xd0\x5b\x00\x00\x00\x0b\x00\x00"
119 		    "\x00\x03\x00\x03\x16\x49\x00\x03\x16\x49\x00\x00"
120 		    "\x00\x64",
121 		.size = 39
122 	},
123 	{
124 		.data = "\xe0\x20\x24\x00\x00\xd0\x5b\x00\x00\x00\x0b\x00\x00"
125 		    "\x00\x01\x00\x00\xd0\x5b\x00\x00\x00\x0b\x00\x00"
126 		    "\x00\x03\x00\x03\x16\xa9\x00\x03\x16\xa9\x00\x00"
127 		    "\x00\x00",
128 		.size = 39
129 	},
130 	{
131 		.data = "\xe0\x20\x24\x00\x00\xd0\x5b\x00\x00\x00\x0b\x00\x00"
132 		    "\x00\x01\x00\x00\xd0\x5b\x00\x00\x00\x0b\x00\x00"
133 		    "\x00\x03\x00\x03\x24\x92\x00\x00\x00\x03\x00\x00"
134 		    "\x00\x01",
135 		.size = 39
136 	},
137 	{
138 		.data = "\xe0\x20\x24\x00\x00\xd0\x5b\x00\x00\x00\x0b\x00\x00"
139 		    "\x00\x01\x00\x00\xd0\x5b\x00\x00\x00\x0b\x00\x00"
140 		    "\x00\x03\x00\x03\x25\x4b\x00\x00\x00\xc8\x00\x00"
141 		    "\x00\x00",
142 		.size = 39
143 	},
144 	{
145 		.data = "\xe0\x20\x24\x00\x00\xd0\x5b\x00\x00\x00\x0b\x00\x00"
146 		    "\x00\x01\x00\x00\xd0\x5b\x00\x00\x00\x0b\x00\x00"
147 		    "\x00\x03\x00\x03\x26\x8f\x00\x00\x01\x2c\x00\x00"
148 		    "\x00\x00",
149 		.size = 39
150 	},
151 	{
152 		.data = "\xe0\x20\x24\x00\x00\xd0\x5b\x00\x00\x00\x0b\x00\x00"
153 		    "\x00\x01\x00\x00\xd0\x5b\x00\x00\x00\x0b\x00\x00"
154 		    "\x00\x03\x00\x03\x26\xa3\x00\x00\x02\x58\x00\x03"
155 		    "\x26\xa3",
156 		.size = 39
157 	},
158 	{
159 		.data = "\xe0\x20\x24\x00\x00\xd0\x5b\x00\x00\x00\x0b\x00\x00"
160 		    "\x00\x01\x00\x00\xd0\x5b\x00\x00\x00\x0b\x00\x00"
161 		    "\x00\x03\x00\x03\x33\xc8\x00\x00\x07\xd0\x00\x00"
162 		    "\x00\x1e",
163 		.size = 39
164 	},
165 	{
166 		.data = "\xe0\x20\x30\x00\x00\xd0\x5b\x00\x00\x00\x0b\x00\x00"
167 		    "\x00\x01\x00\x00\xd0\x5b\x00\x00\x00\x0b\x00\x00"
168 		    "\x00\x03\x00\x00\xdf\x1e\x00\x00\x00\x1e\x00\x00"
169 		    "\x00\x00\x00\x00\xdf\x1e\x00\x00\x00\x1e\x00\x00"
170 		    "\x00\x0a",
171 		.size = 51
172 	},
173 	{
174 		.data = "\xe0\x20\x30\x00\x00\xd0\x5b\x00\x00\x00\x0b\x00\x00"
175 		    "\x00\x01\x00\x00\xd0\x5b\x00\x00\x00\x0b\x00\x00"
176 		    "\x00\x03\x00\x03\x1c\xe3\x00\x00\x00\x01\x00\x00"
177 		    "\x00\x00\x00\x03\x1c\xe3\x00\x00\x00\x01\x00\x00"
178 		    "\x00\x02",
179 		.size = 51
180 	},
181 	{
182 		.data = "\xe0\x20\x30\x00\x00\xd0\x5b\x00\x00\x00\x0b\x00\x00"
183 		    "\x00\x01\x00\x00\xd0\x5b\x00\x00\x00\x0b\x00\x00"
184 		    "\x00\x03\x00\x03\x26\xa3\x00\x00\x02\x58\x00\x03"
185 		    "\x26\xa3\x00\x03\x26\xa3\x00\x03\x26\xa3\x00\x00"
186 		    "\x00\xc8",
187 		.size = 51
188 	},
189 	{
190 		.data = "\xe0\x20\x30\x00\x00\xd0\x5b\x00\x00\x00\x0b\x00\x00"
191 		    "\x00\x01\x00\x00\xd0\x5b\x00\x00\x00\x0b\x00\x00"
192 		    "\x00\x03\x00\x03\x27\xdd\x00\x00\x00\x00\x00\x00"
193 		    "\x00\x00\x00\x03\x27\xdd\x00\x00\x00\x00\x00\x00"
194 		    "\x23\x49",
195 		.size = 51
196 	},
197 	{
198 		.data = "\xe0\x20\x30\x00\x00\xd0\x5b\x00\x00\x00\x0b\x00\x00"
199 		    "\x00\x01\x00\x00\xd0\x5b\x00\x00\x00\x0b\x00\x00"
200 		    "\x00\x03\x00\x03\x27\xdd\x00\x00\x00\x00\x00\x00"
201 		    "\x00\x00\x00\x03\x27\xdd\x00\x00\x00\x00\x00\x00"
202 		    "\xc2\x51",
203 		.size = 51
204 	},
205 	{
206 		.data = "\xe0\x20\x30\x00\x00\xd0\x5b\x00\x00\x00\x0b\x00\x00"
207 		    "\x00\x01\x00\x00\xd0\x5b\x00\x00\x00\x0b\x00\x00"
208 		    "\x00\x03\x00\x03\x28\xe8\x00\x00\x00\x00\x00\x00"
209 		    "\x00\x00\x00\x03\x28\xe8\x00\x00\x00\x01\x00\x00"
210 		    "\x00\x00",
211 		.size = 51
212 	},
213 	{
214 		.data = "\xe0\x20\x3c\x00\x00\xd0\x5b\x00\x00\x00\x0b\x00\x00"
215 		    "\x00\x01\x00\x00\xd0\x5b\x00\x00\x00\x0b\x00\x00"
216 		    "\x00\x03\x00\x02\x1a\xcd\x00\x00\xfc\x00\x00\x00"
217 		    "\x00\x0b\x00\x02\x1a\xcd\x00\x00\xfc\x00\x00\x00"
218 		    "\x00\x15\x00\x02\x1a\xcd\x00\x00\xff\xed\x00\x00"
219 		    "\x00\x01",
220 		.size = 63
221 	},
222 	{
223 		.data = "\xe0\x20\x3c\x00\x00\xd0\x5b\x00\x00\x00\x0b\x00\x00"
224 		    "\x00\x01\x00\x00\xd0\x5b\x00\x00\x00\x0b\x00\x00"
225 		    "\x00\x03\x00\x03\x16\xa9\x00\x00\x00\x00\x00\x03"
226 		    "\x35\x3a\x00\x03\x16\xa9\x00\x03\x16\xa9\x00\x00"
227 		    "\x00\x00\x00\x03\x26\xa3\x00\x03\x26\xa3\x00\x00"
228 		    "\x03\x84",
229 		.size = 63
230 	},
231 	{
232 		.data = "\xe0\x20\x3c\x00\x00\xd0\x5b\x00\x00\x00\x0b\x00\x00"
233 		    "\x00\x01\x00\x00\xd0\x5b\x00\x00\x00\x0b\x00\x00"
234 		    "\x00\x03\x00\x03\x16\xa9\x00\x03\x16\xa9\x00\x03"
235 		    "\x16\xa9\x00\x03\x26\xa3\x00\x00\x01\x2c\x00\x00"
236 		    "\x03\xe7\x00\x03\x26\xa3\x00\x00\x02\x58\x00\x03"
237 		    "\x26\xa3",
238 		.size = 63
239 	},
240 	{
241 		.data = "\xe0\x20\xb4\x00\x00\xd0\x5b\x00\x00\x00\x0b\x00\x00"
242 		    "\x00\x01\x00\x00\xd0\x5b\x00\x00\x00\x0b\x00\x00"
243 		    "\x00\x03\x00\x03\x22\xd3\x00\x00\x00\x0a\x00\x00"
244 		    "\x00\x0a\x00\x03\x22\xd3\x00\x00\x00\x0a\x00\x00"
245 		    "\x00\xc9\x00\x03\x22\xd3\x00\x00\x00\x0a\x00\x00"
246 		    "\x00\xca\x00\x03\x22\xd3\x00\x00\x00\x14\x00\x00"
247 		    "\x00\x0b\x00\x03\x22\xd3\x00\x00\x00\x14\x00\x00"
248 		    "\x00\x64\x00\x03\x22\xd3\x00\x00\x00\x14\x00\x00"
249 		    "\x00\x65\x00\x03\x22\xd3\x00\x00\x00\x14\x00\x00"
250 		    "\x00\x66\x00\x03\x22\xd3\x00\x00\x00\x14\x00\x00"
251 		    "\x00\x67\x00\x03\x22\xd3\x00\x00\x00\x14\x00\x00"
252 		    "\x00\x68\x00\x03\x22\xd3\x00\x00\x00\x14\x00\x00"
253 		    "\x00\xc8\x00\x03\x22\xd3\x00\x00\x00\x14\x00\x00"
254 		    "\x00\xcf\x00\x03\x22\xd3\x00\x00\x00\x14\x00\x00"
255 		    "\x00\xd0\x00\x03\x22\xd3\x00\x00\x00\x79\x00\x00"
256 		    "\x00\x00",
257 		.size = 183
258 	}
259 };
260 
261 struct community filters[] = {
262 	{ /* 0 */
263 		.flags = COMMUNITY_TYPE_BASIC,
264 		.data1 = COMMUNITY_WELLKNOWN,
265 		.data2 = COMMUNITY_NO_ADVERTISE
266 	},
267 	{ /* 1 */
268 		.flags = COMMUNITY_TYPE_BASIC,
269 		.data1 = COMMUNITY_WELLKNOWN,
270 		.data2 = COMMUNITY_NO_EXPORT
271 	},
272 	{ /* 2 */
273 		.flags = COMMUNITY_TYPE_BASIC,
274 		.data1 = COMMUNITY_WELLKNOWN,
275 		.data2 = COMMUNITY_NO_EXPSUBCONFED
276 	},
277 	{ /* 3 */
278 		.flags = COMMUNITY_TYPE_BASIC,
279 		.data1 = 22512,
280 		.data2 = 1
281 	},
282 	{ /* 4 */
283 		.flags = COMMUNITY_TYPE_BASIC,
284 		.data1 = 22512,
285 		.data2 = 42
286 	},
287 	{ /* 5 */
288 		.flags = COMMUNITY_TYPE_BASIC,
289 		.data1 = 22512,
290 		.data2 = 65366
291 	},
292 	{ /* 6 */
293 		.flags = COMMUNITY_TYPE_BASIC,
294 		.data1 = 1,
295 		.data2 = 22512
296 	},
297 	{ /* 7 */
298 		.flags = COMMUNITY_TYPE_BASIC,
299 		.data1 = 42,
300 		.data2 = 22512
301 	},
302 	{ /* 8 */
303 		.flags = COMMUNITY_TYPE_BASIC,
304 		.data1 = 65366,
305 		.data2 = 22512
306 	},
307 	{ /* 9 */
308 		.flags = COMMUNITY_TYPE_LARGE,
309 		.data1 = 22512,
310 		.data2 = 22512,
311 		.data3 = 22512
312 	},
313 	{ /* 10 */
314 		.flags = COMMUNITY_TYPE_LARGE,
315 		.data1 = 22512,
316 		.data2 = 42,
317 		.data3 = 22512
318 	},
319 	{ /* 11 */
320 		.flags = COMMUNITY_TYPE_LARGE,
321 		.data1 = 22512,
322 		.data2 = 42,
323 		.data3 = 42
324 	},
325 	{ /* 12 */
326 		.flags = COMMUNITY_TYPE_LARGE,
327 		.data1 = 42,
328 		.data2 = 22512,
329 		.data3 = 22512
330 	},
331 	{ /* 13 */
332 		.flags = COMMUNITY_TYPE_LARGE,
333 		.data1 = 42,
334 		.data2 = 42,
335 		.data3 = 22512
336 	},
337 	{ /* 14 */
338 		.flags = COMMUNITY_TYPE_LARGE,
339 		.data1 = 42,
340 		.data2 = 22512,
341 		.data3 = 42
342 	},
343 	{ /* 15 */
344 		.flags = COMMUNITY_TYPE_LARGE,
345 		.data1 = 65366,
346 		.data2 = 22512,
347 		.data3 = 22512
348 	},
349 	{ /* 16 */
350 		.flags = COMMUNITY_TYPE_LARGE,
351 		.data1 = 22512,
352 		.data2 = 65366,
353 		.data3 = 22512
354 	},
355 	{ /* 17 */
356 		.flags = COMMUNITY_TYPE_LARGE,
357 		.data1 = 22512,
358 		.data2 = 65366,
359 		.data3 = 65366
360 	},
361 	{ /* 18 */
362 		.flags = COMMUNITY_TYPE_LARGE,
363 		.data1 = 42,
364 		.data2 = 42,
365 		.data3 = 42
366 	},
367 	{ /* 19 */
368 		.flags = COMMUNITY_TYPE_LARGE,
369 		.data1 = 65366,
370 		.data2 = 65366,
371 		.data3 = 65366
372 	},
373 	{ /* 20 */
374 		.flags = COMMUNITY_TYPE_BASIC | (COMMUNITY_ANY << 16),
375 		.data1 = COMMUNITY_WELLKNOWN,
376 	},
377 	{ /* 21 */
378 		.flags = COMMUNITY_TYPE_BASIC | (COMMUNITY_ANY << 16),
379 		.data1 = 22512,
380 	},
381 	{ /* 22 */
382 		.flags = COMMUNITY_TYPE_BASIC | (COMMUNITY_ANY << 8),
383 		.data2 = 22512
384 	},
385 	{ /* 23 */
386 		.flags = COMMUNITY_TYPE_LARGE | (COMMUNITY_ANY << 8) |
387 		    (COMMUNITY_ANY << 16) | (COMMUNITY_ANY << 24),
388 	},
389 	{ /* 24 */
390 		.flags = COMMUNITY_TYPE_LARGE | (COMMUNITY_ANY << 16) |
391 		    (COMMUNITY_ANY << 24),
392 		.data1 = 22512,
393 	},
394 	{ /* 25 */
395 		.flags = COMMUNITY_TYPE_EXT,
396 		.data3 = EXT_COMMUNITY_TRANS_TWO_AS << 8 | 0x02,
397 		.data1 = 22512,
398 		.data2 = 42,
399 	},
400 	{ /* 26 */
401 		.flags = COMMUNITY_TYPE_EXT,
402 		.data3 = EXT_COMMUNITY_TRANS_FOUR_AS << 8 | 0x02,
403 		.data1 = 22512,
404 		.data2 = 42,
405 	},
406 	{ /* 27 */
407 		.flags = COMMUNITY_TYPE_EXT,
408 		.data3 = EXT_COMMUNITY_TRANS_FOUR_AS << 8 | 0x02,
409 		.data1 = 22512,
410 		.data2 = 15,
411 	},
412 };
413 
414 struct testfilter {
415 	ssize_t	in[8];
416 	ssize_t	delete;
417 	ssize_t	match;
418 	int	mout;
419 } testfilters[] = {
420 	{
421 		.in = { 1, 2, -1 },
422 		.match = 1,
423 		.mout = 1,
424 		.delete = 1,
425 	},
426 	{
427 		.in = { 1, 2, -1 },
428 		.match = 2,
429 		.mout = 1,
430 		.delete = 2,
431 	},
432 	{
433 		.in = { 1, 2, -1 },
434 		.match = 20,
435 		.mout = 1,
436 		.delete = 20,
437 	},
438 	{
439 		.in = { 1, 2, 1, 2, -1 },
440 		.match = 5,
441 		.mout = 0,
442 		.delete = 5,
443 	},
444 	{
445 		.in = { 3, 4, 5, 6, 7, 8, -1 },
446 		.match = 5,
447 		.mout = 1,
448 		.delete = 5,
449 	},
450 	{ /* 5 */
451 		.in = { 3, 4, 5, 6, 7, 8, -1 },
452 		.match = 20,
453 		.mout = 0,
454 		.delete = -1,
455 	},
456 	{
457 		.in = { 3, 4, 5, 6, 7, 8, -1 },
458 		.match = 21,
459 		.mout = 1,
460 		.delete = 21,
461 	},
462 	{
463 		.in = { 3, 4, 5, 6, 7, 8, -1 },
464 		.match = 22,
465 		.mout = 1,
466 		.delete = 22,
467 	},
468 	{
469 		.in = { 17, 18, 19, -1 },
470 		.match = 22,
471 		.mout = 0,
472 		.delete = 17,
473 	},
474 	{
475 		.in = { 17, 18, 19, 7, 8, -1 },
476 		.match = 18,
477 		.mout = 1,
478 		.delete = 19,
479 	},
480 	{ /* 10 */
481 		.in = { 1, 3, 5, -1 },
482 		.match = 23,
483 		.mout = 0,
484 		.delete = -1,
485 	},
486 	{
487 		.in = { 1, 3, 5, 17, -1 },
488 		.match = 23,
489 		.mout = 1,
490 		.delete = 23,
491 	},
492 	{
493 		.in = { 1, 3, 5, 19, -1 },
494 		.match = 24,
495 		.mout = 0,
496 		.delete = -1,
497 	},
498 	{
499 		.in = { 19, 18, 17, -1 },
500 		.match = 24,
501 		.mout = 1,
502 		.delete = 24,
503 	},
504 	{
505 		.in = { 25, 26, -1 },
506 		.match = 25,
507 		.mout = 1,
508 		.delete = 25,
509 	},
510 	{ /* 15 */
511 		.in = { 25, 26, -1 },
512 		.match = 26,
513 		.mout = 1,
514 		.delete = 26,
515 	},
516 	{
517 		.in = { 17, 0, -1 },
518 		.match = 0,
519 		.mout = 1,
520 		.delete = 0,
521 	},
522 };
523