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