root/regress/usr.sbin/bgpd/unittests/rde_community_test.h
struct rde_peer peer = {
        .conf.local_as = 42,
        .conf.remote_as = 22512,
};
struct rde_peer peer_l4 = {
        .conf.local_as = 196618,
        .conf.remote_as = 22512,
};
struct rde_peer peer_r4 = {
        .conf.local_as = 22512,
        .conf.remote_as = 196618,
};
struct rde_peer peer_b4 = {
        .conf.local_as = 196618,
        .conf.remote_as = 424242,
};

struct vector {
        uint8_t *data;
        size_t  size;
        uint8_t *expected;
        size_t  expsize;
} vectors[] = {

        {
                .data = "\xc0\x08\x04\x00\x00\x48\xce",
                .size = 7
        },
        {
                .data = "\xc0\x08\x04\x0f\x10\xc8\x02",
                .size = 7
        },
        {
                .data = "\xc0\x08\x04\x3b\xc0\x00\xc9",
                .size = 7
        },
        {
                .data = "\xe0\x08\x04\x4e\x97\x00\x03",
                .size = 7
        },
        {
                .data = "\xe0\x08\x08\x3b\xc0\x00\xc9\x3b\xc0\x00\xcb",
                .size = 11
        },
        {
                .data = "\xc0\x08\x08\x9e\x19\x7a\x44\x9e\x19\x7a\x45",
                .size = 11
        },
        {
                .data = "\xc0\x08\x14\x00\x00\x0b\x5a\x00\x00\x3f\x89\x00\x00"
                    "\x3f\x94\x00\x00\x48\xce\x00\x00\xa2\xda",
                .size = 23
        },
        {
                .data = "\xc0\x10\x08\x00\x02\xfc\x00\x00\x00\x00\x40",
                .size = 11
        },
        {
                .data = "\xc0\x10\x08\x00\x02\xfc\x00\x00\x00\x00\x42",
                .size = 11
        },
        {
                .data = "\xc0\x10\x08\x00\x02\xfc\x00\x00\x00\x00\xb2",
                .size = 11
        },
        {
                .data = "\xc0\x10\x08\x00\x02\xfc\x00\x00\x00\x00\xd3",
                .size = 11
        },
        {
                .data = "\xe0\x10\x08\x00\x02\xfc\x00\x00\x00\x01\x10",
                .size = 11
        },
        {
                .data = "\xe0\x10\x08\x00\x02\xfc\x00\x00\x00\x01\x1e",
                .size = 11
        },
        {
                .data = "\xe0\x10\x08\x00\x02\xfc\x00\x00\x00\x01\x29",
                .size = 11
        },
        {
                .data = "\xc0\x10\x08\x00\x02\xfc\x00\x00\x00\x01\xb6",
                .size = 11
        },
        {
                .data = "\xc0\x10\x08\x00\x02\xfc\x00\x00\x00\x01\xe0",
                .size = 11
        },
        {
                .data = "\xc0\x10\x08\x00\x02\xfc\x00\x00\x00\x02\x8b",
                .size = 11
        },
        {
                .data = "\xc0\x10\x08\x00\x02\xfc\x00\x00\x00\x02\xc5",
                .size = 11
        },
        {
                .data = "\xc0\x10\x08\x00\x02\xfc\x00\x00\x00\x03\xc2",
                .size = 11
        },
        {
                .data = "\xc0\x10\x08\x00\x02\xfc\x00\x00\x00\x04\x09",
                .size = 11
        },
        {
                .data = "\xc0\x10\x08\x00\x02\xfc\x00\x00\x00\x04\xe4",
                .size = 11
        },
        {
                .data = "\xc0\x10\x08\x00\x02\xfc\x00\x00\x00\x05\x57",
                .size = 11
        },
        {
                .data = "\xc0\x10\x08\x00\x02\xfc\x00\x00\x00\x05\x92",
                .size = 11
        },
        {
                .data = "\xc0\x10\x08\x00\x02\xfd\xe8\x00\x00\x2a\xf8",
                .size = 11
        },
        {
                .data = "\xc0\x20\x0c\x00\x00\xd0\x5b\x00\x00\x00\x0b\x00\x00"
                    "\x00\x03",
                .size = 15
        },
        {
                .data = "\xc0\x20\x18\x00\x00\xd0\x5b\x00\x00\x00\x0b\x00\x00"
                    "\x00\x01\x00\x00\xd0\x5b\x00\x00\x00\x0b\x00\x00"
                    "\x00\x03",
                .size = 27
        },
        {
                .data = "\xe0\x20\x24\x00\x00\xd0\x5b\x00\x00\x00\x0b\x00\x00"
                    "\x00\x01\x00\x00\xd0\x5b\x00\x00\x00\x0b\x00\x00"
                    "\x00\x03\x00\x00\xed\x5f\x00\x00\xed\x5f\x00\x00"
                    "\xed\x5f",
                .size = 39
        },
        {
                .data = "\xe0\x20\x24\x00\x00\xd0\x5b\x00\x00\x00\x0b\x00\x00"
                    "\x00\x01\x00\x00\xd0\x5b\x00\x00\x00\x0b\x00\x00"
                    "\x00\x03\x00\x03\x16\x49\x00\x03\x16\x49\x00\x00"
                    "\x00\x64",
                .size = 39
        },
        {
                .data = "\xe0\x20\x24\x00\x00\xd0\x5b\x00\x00\x00\x0b\x00\x00"
                    "\x00\x01\x00\x00\xd0\x5b\x00\x00\x00\x0b\x00\x00"
                    "\x00\x03\x00\x03\x16\xa9\x00\x03\x16\xa9\x00\x00"
                    "\x00\x00",
                .size = 39
        },
        {
                .data = "\xe0\x20\x24\x00\x00\xd0\x5b\x00\x00\x00\x0b\x00\x00"
                    "\x00\x01\x00\x00\xd0\x5b\x00\x00\x00\x0b\x00\x00"
                    "\x00\x03\x00\x03\x24\x92\x00\x00\x00\x03\x00\x00"
                    "\x00\x01",
                .size = 39
        },
        {
                .data = "\xe0\x20\x24\x00\x00\xd0\x5b\x00\x00\x00\x0b\x00\x00"
                    "\x00\x01\x00\x00\xd0\x5b\x00\x00\x00\x0b\x00\x00"
                    "\x00\x03\x00\x03\x25\x4b\x00\x00\x00\xc8\x00\x00"
                    "\x00\x00",
                .size = 39
        },
        {
                .data = "\xe0\x20\x24\x00\x00\xd0\x5b\x00\x00\x00\x0b\x00\x00"
                    "\x00\x01\x00\x00\xd0\x5b\x00\x00\x00\x0b\x00\x00"
                    "\x00\x03\x00\x03\x26\x8f\x00\x00\x01\x2c\x00\x00"
                    "\x00\x00",
                .size = 39
        },
        {
                .data = "\xe0\x20\x24\x00\x00\xd0\x5b\x00\x00\x00\x0b\x00\x00"
                    "\x00\x01\x00\x00\xd0\x5b\x00\x00\x00\x0b\x00\x00"
                    "\x00\x03\x00\x03\x26\xa3\x00\x00\x02\x58\x00\x03"
                    "\x26\xa3",
                .size = 39
        },
        {
                .data = "\xe0\x20\x24\x00\x00\xd0\x5b\x00\x00\x00\x0b\x00\x00"
                    "\x00\x01\x00\x00\xd0\x5b\x00\x00\x00\x0b\x00\x00"
                    "\x00\x03\x00\x03\x33\xc8\x00\x00\x07\xd0\x00\x00"
                    "\x00\x1e",
                .size = 39
        },
        {
                .data = "\xe0\x20\x30\x00\x00\xd0\x5b\x00\x00\x00\x0b\x00\x00"
                    "\x00\x01\x00\x00\xd0\x5b\x00\x00\x00\x0b\x00\x00"
                    "\x00\x03\x00\x00\xdf\x1e\x00\x00\x00\x1e\x00\x00"
                    "\x00\x00\x00\x00\xdf\x1e\x00\x00\x00\x1e\x00\x00"
                    "\x00\x0a",
                .size = 51
        },
        {
                .data = "\xe0\x20\x30\x00\x00\xd0\x5b\x00\x00\x00\x0b\x00\x00"
                    "\x00\x01\x00\x00\xd0\x5b\x00\x00\x00\x0b\x00\x00"
                    "\x00\x03\x00\x03\x1c\xe3\x00\x00\x00\x01\x00\x00"
                    "\x00\x00\x00\x03\x1c\xe3\x00\x00\x00\x01\x00\x00"
                    "\x00\x02",
                .size = 51
        },
        {
                .data = "\xe0\x20\x30\x00\x00\xd0\x5b\x00\x00\x00\x0b\x00\x00"
                    "\x00\x01\x00\x00\xd0\x5b\x00\x00\x00\x0b\x00\x00"
                    "\x00\x03\x00\x03\x26\xa3\x00\x00\x02\x58\x00\x03"
                    "\x26\xa3\x00\x03\x26\xa3\x00\x03\x26\xa3\x00\x00"
                    "\x00\xc8",
                .size = 51
        },
        {
                .data = "\xe0\x20\x30\x00\x00\xd0\x5b\x00\x00\x00\x0b\x00\x00"
                    "\x00\x01\x00\x00\xd0\x5b\x00\x00\x00\x0b\x00\x00"
                    "\x00\x03\x00\x03\x27\xdd\x00\x00\x00\x00\x00\x00"
                    "\x00\x00\x00\x03\x27\xdd\x00\x00\x00\x00\x00\x00"
                    "\x23\x49",
                .size = 51
        },
        {
                .data = "\xe0\x20\x30\x00\x00\xd0\x5b\x00\x00\x00\x0b\x00\x00"
                    "\x00\x01\x00\x00\xd0\x5b\x00\x00\x00\x0b\x00\x00"
                    "\x00\x03\x00\x03\x27\xdd\x00\x00\x00\x00\x00\x00"
                    "\x00\x00\x00\x03\x27\xdd\x00\x00\x00\x00\x00\x00"
                    "\xc2\x51",
                .size = 51
        },
        {
                .data = "\xe0\x20\x30\x00\x00\xd0\x5b\x00\x00\x00\x0b\x00\x00"
                    "\x00\x01\x00\x00\xd0\x5b\x00\x00\x00\x0b\x00\x00"
                    "\x00\x03\x00\x03\x28\xe8\x00\x00\x00\x00\x00\x00"
                    "\x00\x00\x00\x03\x28\xe8\x00\x00\x00\x01\x00\x00"
                    "\x00\x00",
                .size = 51
        },
        {
                .data = "\xe0\x20\x3c\x00\x00\xd0\x5b\x00\x00\x00\x0b\x00\x00"
                    "\x00\x01\x00\x00\xd0\x5b\x00\x00\x00\x0b\x00\x00"
                    "\x00\x03\x00\x02\x1a\xcd\x00\x00\xfc\x00\x00\x00"
                    "\x00\x0b\x00\x02\x1a\xcd\x00\x00\xfc\x00\x00\x00"
                    "\x00\x15\x00\x02\x1a\xcd\x00\x00\xff\xed\x00\x00"
                    "\x00\x01",
                .size = 63
        },
        {
                .data = "\xe0\x20\x3c\x00\x00\xd0\x5b\x00\x00\x00\x0b\x00\x00"
                    "\x00\x01\x00\x00\xd0\x5b\x00\x00\x00\x0b\x00\x00"
                    "\x00\x03\x00\x03\x16\xa9\x00\x00\x00\x00\x00\x03"
                    "\x35\x3a\x00\x03\x16\xa9\x00\x03\x16\xa9\x00\x00"
                    "\x00\x00\x00\x03\x26\xa3\x00\x03\x26\xa3\x00\x00"
                    "\x03\x84",
                .size = 63
        },
        {
                .data = "\xe0\x20\x3c\x00\x00\xd0\x5b\x00\x00\x00\x0b\x00\x00"
                    "\x00\x01\x00\x00\xd0\x5b\x00\x00\x00\x0b\x00\x00"
                    "\x00\x03\x00\x03\x16\xa9\x00\x03\x16\xa9\x00\x03"
                    "\x16\xa9\x00\x03\x26\xa3\x00\x00\x01\x2c\x00\x00"
                    "\x03\xe7\x00\x03\x26\xa3\x00\x00\x02\x58\x00\x03"
                    "\x26\xa3",
                .size = 63
        },
        {
                .data = "\xe0\x20\xb4\x00\x00\xd0\x5b\x00\x00\x00\x0b\x00\x00"
                    "\x00\x01\x00\x00\xd0\x5b\x00\x00\x00\x0b\x00\x00"
                    "\x00\x03\x00\x03\x22\xd3\x00\x00\x00\x0a\x00\x00"
                    "\x00\x0a\x00\x03\x22\xd3\x00\x00\x00\x0a\x00\x00"
                    "\x00\xc9\x00\x03\x22\xd3\x00\x00\x00\x0a\x00\x00"
                    "\x00\xca\x00\x03\x22\xd3\x00\x00\x00\x14\x00\x00"
                    "\x00\x0b\x00\x03\x22\xd3\x00\x00\x00\x14\x00\x00"
                    "\x00\x64\x00\x03\x22\xd3\x00\x00\x00\x14\x00\x00"
                    "\x00\x65\x00\x03\x22\xd3\x00\x00\x00\x14\x00\x00"
                    "\x00\x66\x00\x03\x22\xd3\x00\x00\x00\x14\x00\x00"
                    "\x00\x67\x00\x03\x22\xd3\x00\x00\x00\x14\x00\x00"
                    "\x00\x68\x00\x03\x22\xd3\x00\x00\x00\x14\x00\x00"
                    "\x00\xc8\x00\x03\x22\xd3\x00\x00\x00\x14\x00\x00"
                    "\x00\xcf\x00\x03\x22\xd3\x00\x00\x00\x14\x00\x00"
                    "\x00\xd0\x00\x03\x22\xd3\x00\x00\x00\x79\x00\x00"
                    "\x00\x00",
                .size = 183
        },
        {
                .data = "\xc0\x10\x08\x43\x00\x00\x00\x00\x00\x00\x02",
                .size = 11,
                .expected = "",
                .expsize = 0,
        },
        {
                .data = "\xc0\x10\x10\x00\x02\xfc\x00\x00\x00\x00\x40"
                    "\x43\x00\x00\x00\x00\x00\x00\x02",
                .size = 19,
                .expected = "\xc0\x10\x08\x00\x02\xfc\x00\x00\x00\x00\x40",
                .expsize = 11,
        },
        {
                .data = "\xc0\x10\x18\x00\x02\xfc\x00\x00\x00\x00\x40"
                    "\x43\x00\x00\x00\x00\x00\x00\x02"
                    "\x06\x00\x00\x00\x00\x00\x00\x01",
                .size = 27,
                .expected = "\xc0\x10\x10\x06\x00\x00\x00\x00\x00\x00\x01"
                    "\x00\x02\xfc\x00\x00\x00\x00\x40",
                .expsize = 19,
        },
        {
                .data = "\xe0\x08\x04\x4e\x97\x00\x03"
                    "\xc0\x10\x08\x43\x00\x00\x00\x00\x00\x00\x02",
                .size = 7 + 11,
                .expected = "\xe0\x08\x04\x4e\x97\x00\x03",
                .expsize = 7,
        },
        {
                .data = "\xe0\x08\x04\x4e\x97\x00\x03"
                    "\xc0\x10\x10\x00\x02\xfc\x00\x00\x00\x00\x40"
                    "\x43\x00\x00\x00\x00\x00\x00\x02",
                .size = 7 + 19,
                .expected = "\xe0\x08\x04\x4e\x97\x00\x03"
                    "\xc0\x10\x08\x00\x02\xfc\x00\x00\x00\x00\x40",
                .expsize = 7 + 11,
        },
        {
                .data = "\xc0\x10\x08\x43\x00\x00\x00\x00\x00\x00\x02"
                    "\xc0\x20\x0c\x00\x00\xd0\x5b\x00\x00\x00\x0b"
                    "\x00\x00\x00\x03",
                .size = 11 + 15,
                .expected = "\xc0\x20\x0c\x00\x00\xd0\x5b\x00\x00\x00\x0b"
                    "\x00\x00\x00\x03",
                .expsize = 15,
        },
        {
                .data = "\xe0\x08\x04\x4e\x97\x00\x03"
                    "\xc0\x10\x08\x43\x00\x00\x00\x00\x00\x00\x02"
                    "\xc0\x20\x0c\x00\x00\xd0\x5b\x00\x00\x00\x0b"
                    "\x00\x00\x00\x03",
                .size = 7 + 11 + 15,
                .expected = "\xe0\x08\x04\x4e\x97\x00\x03"
                    "\xc0\x20\x0c\x00\x00\xd0\x5b\x00\x00\x00\x0b"
                    "\x00\x00\x00\x03",
                .expsize = 7 + 15,
        },
};

struct community filters[] = {
        { /* 0 */
                .flags = COMMUNITY_TYPE_BASIC,
                .data1 = COMMUNITY_WELLKNOWN,
                .data2 = COMMUNITY_NO_ADVERTISE
        },
        { /* 1 */
                .flags = COMMUNITY_TYPE_BASIC,
                .data1 = COMMUNITY_WELLKNOWN,
                .data2 = COMMUNITY_NO_EXPORT
        },
        { /* 2 */
                .flags = COMMUNITY_TYPE_BASIC,
                .data1 = COMMUNITY_WELLKNOWN,
                .data2 = COMMUNITY_NO_EXPSUBCONFED
        },
        { /* 3 */
                .flags = COMMUNITY_TYPE_BASIC,
                .data1 = 22512,
                .data2 = 1
        },
        { /* 4 */
                .flags = COMMUNITY_TYPE_BASIC,
                .data1 = 22512,
                .data2 = 42
        },
        { /* 5 */
                .flags = COMMUNITY_TYPE_BASIC,
                .data1 = 22512,
                .data2 = 65366
        },
        { /* 6 */
                .flags = COMMUNITY_TYPE_BASIC,
                .data1 = 1,
                .data2 = 22512
        },
        { /* 7 */
                .flags = COMMUNITY_TYPE_BASIC,
                .data1 = 42,
                .data2 = 22512
        },
        { /* 8 */
                .flags = COMMUNITY_TYPE_BASIC,
                .data1 = 65366,
                .data2 = 22512
        },
        { /* 9 */
                .flags = COMMUNITY_TYPE_LARGE,
                .data1 = 22512,
                .data2 = 22512,
                .data3 = 22512
        },
        { /* 10 */
                .flags = COMMUNITY_TYPE_LARGE,
                .data1 = 22512,
                .data2 = 42,
                .data3 = 22512
        },
        { /* 11 */
                .flags = COMMUNITY_TYPE_LARGE,
                .data1 = 22512,
                .data2 = 42,
                .data3 = 42
        },
        { /* 12 */
                .flags = COMMUNITY_TYPE_LARGE,
                .data1 = 42,
                .data2 = 22512,
                .data3 = 22512
        },
        { /* 13 */
                .flags = COMMUNITY_TYPE_LARGE,
                .data1 = 42,
                .data2 = 42,
                .data3 = 22512
        },
        { /* 14 */
                .flags = COMMUNITY_TYPE_LARGE,
                .data1 = 42,
                .data2 = 22512,
                .data3 = 42
        },
        { /* 15 */
                .flags = COMMUNITY_TYPE_LARGE,
                .data1 = 65366,
                .data2 = 22512,
                .data3 = 22512
        },
        { /* 16 */
                .flags = COMMUNITY_TYPE_LARGE,
                .data1 = 22512,
                .data2 = 65366,
                .data3 = 22512
        },
        { /* 17 */
                .flags = COMMUNITY_TYPE_LARGE,
                .data1 = 22512,
                .data2 = 65366,
                .data3 = 65366
        },
        { /* 18 */
                .flags = COMMUNITY_TYPE_LARGE,
                .data1 = 42,
                .data2 = 42,
                .data3 = 42
        },
        { /* 19 */
                .flags = COMMUNITY_TYPE_LARGE,
                .data1 = 65366,
                .data2 = 65366,
                .data3 = 65366
        },
        { /* 20 */
                .flags = COMMUNITY_TYPE_BASIC | (COMMUNITY_ANY << 16),
                .data1 = COMMUNITY_WELLKNOWN,
        },
        { /* 21 */
                .flags = COMMUNITY_TYPE_BASIC | (COMMUNITY_ANY << 16),
                .data1 = 22512,
        },
        { /* 22 */
                .flags = COMMUNITY_TYPE_BASIC | (COMMUNITY_ANY << 8),
                .data2 = 22512
        },
        { /* 23 */
                .flags = COMMUNITY_TYPE_LARGE | (COMMUNITY_ANY << 8) |
                    (COMMUNITY_ANY << 16) | (COMMUNITY_ANY << 24),
        },
        { /* 24 */
                .flags = COMMUNITY_TYPE_LARGE | (COMMUNITY_ANY << 16) |
                    (COMMUNITY_ANY << 24),
                .data1 = 22512,
        },
        { /* 25 */
                .flags = COMMUNITY_TYPE_EXT,
                .data3 = EXT_COMMUNITY_TRANS_TWO_AS << 8 | 0x02,
                .data1 = 22512,
                .data2 = 42,
        },
        { /* 26 */
                .flags = COMMUNITY_TYPE_EXT,
                .data3 = EXT_COMMUNITY_TRANS_FOUR_AS << 8 | 0x02,
                .data1 = 22512,
                .data2 = 42,
        },
        { /* 27 */
                .flags = COMMUNITY_TYPE_EXT,
                .data3 = EXT_COMMUNITY_TRANS_FOUR_AS << 8 | 0x02,
                .data1 = 22512,
                .data2 = 15,
        },
        { /* 28 */
                .flags = COMMUNITY_TYPE_BASIC | (COMMUNITY_LOCAL_AS << 8) |
                    (COMMUNITY_NEIGHBOR_AS << 16),
        },
        { /* 29 */
                .flags = COMMUNITY_TYPE_LARGE | (COMMUNITY_LOCAL_AS << 8) |
                    (COMMUNITY_NEIGHBOR_AS << 24),
        },
        { /* 30 */
                .flags = COMMUNITY_TYPE_EXT | (COMMUNITY_LOCAL_AS << 8) |
                    (COMMUNITY_NEIGHBOR_AS << 16),
                .data3 = EXT_COMMUNITY_TRANS_TWO_AS << 8 | 0x02,
        },
        { /* 31 */
                .flags = COMMUNITY_TYPE_BASIC,
                .data1 = 42,
                .data2 = 22512,
        },
        { /* 32 */
                .flags = COMMUNITY_TYPE_BASIC,
                .data1 = 65366,
                .data2 = 22512,
        },
        { /* 33 */
                .flags = COMMUNITY_TYPE_BASIC,
                .data1 = 42,
                .data2 = 65366,
        },
        { /* 34 */
                .flags = COMMUNITY_TYPE_LARGE,
                .data1 = 42,
                .data2 = 0,
                .data3 = 22512,
        },
        { /* 35 */
                .flags = COMMUNITY_TYPE_LARGE,
                .data1 = 196618,
                .data2 = 0,
                .data3 = 22512,
        },
        { /* 36 */
                .flags = COMMUNITY_TYPE_LARGE,
                .data1 = 22512,
                .data2 = 0,
                .data3 = 196618,
        },
        { /* 37 */
                .flags = COMMUNITY_TYPE_LARGE,
                .data1 = 196618,
                .data2 = 0,
                .data3 = 424242,
        },
        { /* 38 */
                .flags = COMMUNITY_TYPE_EXT,
                .data1 = 42,
                .data2 = 22512,
                .data3 = EXT_COMMUNITY_TRANS_TWO_AS << 8 | 0x02,
        },
        { /* 39 */
                .flags = COMMUNITY_TYPE_EXT,
                .data1 = 42,
                .data2 = 22512,
                .data3 = EXT_COMMUNITY_TRANS_FOUR_AS << 8 | 0x02,
        },
        { /* 40 */
                .flags = COMMUNITY_TYPE_EXT,
                .data1 = 196618,
                .data2 = 22512,
                .data3 = EXT_COMMUNITY_TRANS_FOUR_AS << 8 | 0x02,
        },
        { /* 41 */
                .flags = COMMUNITY_TYPE_EXT,
                .data1 = 22512,
                .data2 = 196618,
                .data3 = EXT_COMMUNITY_TRANS_TWO_AS << 8 | 0x02,
        },
        { /* 42 */
                .flags = COMMUNITY_TYPE_EXT | (COMMUNITY_ANY << 24),
        },
        { /* 43 */
                .flags = COMMUNITY_TYPE_EXT | (COMMUNITY_ANY << 8),
                .data3 = (-1 << 8) | 0x02,
        },
        { /* 44 */
                .flags = COMMUNITY_TYPE_EXT | (COMMUNITY_ANY << 8),
                .data3 = EXT_COMMUNITY_TRANS_FOUR_AS << 8 | 0x02,
        },
        { /* 45 */
                .flags = COMMUNITY_TYPE_EXT | (COMMUNITY_ANY << 16),
                .data3 = EXT_COMMUNITY_TRANS_FOUR_AS << 8 | 0x02,
                .data1 = 196618,
        },
};

struct testfilter {
        int              in[8];
        int              delete;
        int              match;
        int              mout;
        int              ncomm;
        int              next;
        int              nlarge;
        struct rde_peer *peer;
} testfilters[] = {
        {
                .in = { 1, 2, -1 },
                .match = 1,
                .mout = 1,
                .delete = 1,
        },
        {
                .in = { 1, 2, -1 },
                .match = 2,
                .mout = 1,
                .delete = 2,
        },
        {
                .in = { 1, 2, -1 },
                .match = 20,
                .mout = 1,
                .delete = 20,
        },
        {
                .in = { 1, 2, 1, 2, -1 },
                .match = 5,
                .mout = 0,
                .delete = 5,
        },
        {
                .in = { 3, 4, 5, 6, 7, 8, -1 },
                .match = 5,
                .mout = 1,
                .delete = 5,
        },
        { /* 5 */
                .in = { 3, 4, 5, 6, 7, 8, -1 },
                .match = 20,
                .mout = 0,
                .delete = -1,
        },
        {
                .in = { 3, 4, 5, 6, 7, 8, -1 },
                .match = 21,
                .mout = 1,
                .delete = 21,
        },
        {
                .in = { 3, 4, 5, 6, 7, 8, -1 },
                .match = 22,
                .mout = 1,
                .delete = 22,
        },
        {
                .in = { 17, 18, 19, -1 },
                .match = 22,
                .mout = 0,
                .delete = 17,
        },
        {
                .in = { 17, 18, 19, 7, 8, -1 },
                .match = 18,
                .mout = 1,
                .delete = 19,
        },
        { /* 10 */
                .in = { 1, 3, 5, -1 },
                .match = 23,
                .mout = 0,
                .delete = -1,
        },
        {
                .in = { 1, 3, 5, 17, -1 },
                .match = 23,
                .mout = 1,
                .delete = 23,
        },
        {
                .in = { 1, 3, 5, 19, -1 },
                .match = 24,
                .mout = 0,
                .delete = -1,
        },
        {
                .in = { 19, 18, 17, -1 },
                .match = 24,
                .mout = 1,
                .delete = 24,
        },
        {
                .in = { 25, 26, -1 },
                .match = 25,
                .mout = 1,
                .delete = 25,
        },
        { /* 15 */
                .in = { 25, 26, -1 },
                .match = 26,
                .mout = 1,
                .delete = 26,
        },
        {
                .in = { 17, 0, -1 },
                .match = 0,
                .mout = 1,
                .delete = 0,
        },
        {
                .in = { -1 },
                .match = 21,
                .mout = 0,
                .delete = -1,
                .ncomm = 0 + 1,
                .next = 0 + 1,
                .nlarge = 0 + 1,
        },
        {
                .in = { 0, 3, 6, -1 },
                .match = -1,
                .delete = -1,
                .ncomm = 3 + 1,
                .next = 0 + 1,
                .nlarge = 0 + 1,
        },
        {
                .in = { 0, 25, 26, 19, -1 },
                .match = -1,
                .delete = -1,
                .ncomm = 1 + 1,
                .next = 2 + 1,
                .nlarge = 1 + 1,
        },
        { /* 20 */
                .in = { 0, 10, 26, -1 },
                .match = -1,
                .delete = -1,
                .ncomm = 1 + 1,
                .next = 1 + 1,
                .nlarge = 1 + 1,
        },
        {
                .in = { 28, -1 },
                .match = 28,
                .mout = 1,
                .delete = 28,
                .peer = &peer,
        },
        {
                .in = { 31, -1 },
                .match = 28,
                .mout = 1,
                .delete = 28,
                .peer = &peer,
        },
        {
                .in = { 31, -1 },
                .match = 28,
                .mout = 0,
                .peer = &peer_l4,
        },
        {
                .in = { 31, -1 },
                .match = 28,
                .mout = 0,
                .peer = &peer_r4,
        },
        { /* 25 */
                .in = { 31, -1 },
                .match = 28,
                .mout = 0,
                .peer = &peer_b4,
        },
        {
                .in = { 32, -1 },
                .match = 28,
                .mout = 0,
                .peer = &peer,
        },
        {
                .in = { 32, -1 },
                .match = 28,
                .mout = 0,
                .peer = &peer_l4,
        },
        {
                .in = { 32, -1 },
                .match = 28,
                .mout = 0,
                .peer = &peer_r4,
        },
        {
                .in = { 32, -1 },
                .match = 28,
                .mout = 0,
                .peer = &peer_b4,
        },
        { /* 30 */
                .in = { 33, -1 },
                .match = 28,
                .mout = 0,
                .peer = &peer,
        },
        {
                .in = { 33, -1 },
                .match = 28,
                .mout = 0,
                .peer = &peer_l4,
        },
        {
                .in = { 33, -1 },
                .match = 28,
                .mout = 0,
                .peer = &peer_r4,
        },
        {
                .in = { 33, -1 },
                .match = 28,
                .mout = 0,
                .peer = &peer_b4,
        },
        {
                .in = { 29, -1 },
                .match = 29,
                .mout = 1,
                .delete = 29,
                .peer = &peer,
        },
        { /* 35 */
                .in = { 29, -1 },
                .match = 29,
                .mout = 1,
                .delete = 29,
                .peer = &peer_l4,
        },
        {
                .in = { 29, -1 },
                .match = 29,
                .mout = 1,
                .delete = 29,
                .peer = &peer_r4,
        },
        {
                .in = { 29, -1 },
                .match = 29,
                .mout = 1,
                .delete = 29,
                .peer = &peer_b4,
        },
        {
                .in = { 34, -1 },
                .match = 29,
                .mout = 1,
                .peer = &peer,
        },
        {
                .in = { 34, -1 },
                .match = 29,
                .mout = 0,
                .peer = &peer_l4,
        },
        { /* 40 */
                .in = { 34, -1 },
                .match = 29,
                .mout = 0,
                .peer = &peer_r4,
        },
        {
                .in = { 34, -1 },
                .match = 29,
                .mout = 0,
                .peer = &peer_b4,
        },
        {
                .in = { 35, -1 },
                .match = 29,
                .mout = 0,
                .peer = &peer,
        },
        {
                .in = { 35, -1 },
                .match = 29,
                .mout = 1,
                .peer = &peer_l4,
        },
        {
                .in = { 35, -1 },
                .match = 29,
                .mout = 0,
                .peer = &peer_r4,
        },
        { /* 45 */
                .in = { 35, -1 },
                .match = 29,
                .mout = 0,
                .peer = &peer_b4,
        },
        {
                .in = { 36, -1 },
                .match = 29,
                .mout = 0,
                .peer = &peer,
        },
        {
                .in = { 36, -1 },
                .match = 29,
                .mout = 0,
                .peer = &peer_l4,
        },
        {
                .in = { 36, -1 },
                .match = 29,
                .mout = 1,
                .peer = &peer_r4,
        },
        {
                .in = { 36, -1 },
                .match = 29,
                .mout = 0,
                .peer = &peer_b4,
        },
        { /* 50 */
                .in = { 37, -1 },
                .match = 29,
                .mout = 0,
                .peer = &peer,
        },
        {
                .in = { 37, -1 },
                .match = 29,
                .mout = 0,
                .peer = &peer_l4,
        },
        {
                .in = { 37, -1 },
                .match = 29,
                .mout = 0,
                .peer = &peer_r4,
        },
        {
                .in = { 37, -1 },
                .match = 29,
                .mout = 1,
                .peer = &peer_b4,
        },
        {
                .in = { 30, -1 },
                .match = 30,
                .mout = 1,
                .delete = 30,
                .peer = &peer,
        },
        { /* 55 */
                .in = { 30, -1 },
                .match = 30,
                .mout = 1,
                .delete = 30,
                .peer = &peer_l4,
        },
        {
                .in = { 30, -1 },
                .match = 30,
                .mout = 1,
                .delete = 30,
                .peer = &peer_r4,
        },
        {
                .in = { 38, -1 },
                .match = 30,
                .mout = 1,
                .peer = &peer,
        },
        {
                .in = { 38, -1 },
                .match = 30,
                .mout = 0,
                .peer = &peer_l4,
        },
        {
                .in = { 38, -1 },
                .match = 30,
                .mout = 0,
                .peer = &peer_r4,
        },
        { /* 60 */
                .in = { 39, -1 },
                .match = 30,
                .mout = 1,
                .peer = &peer,
        },
        {
                .in = { 39, -1 },
                .match = 30,
                .mout = 0,
                .peer = &peer_l4,
        },
        {
                .in = { 39, -1 },
                .match = 30,
                .mout = 0,
                .peer = &peer_r4,
        },
        {
                .in = { 40, -1 },
                .match = 30,
                .mout = 0,
                .peer = &peer,
        },
        {
                .in = { 40, -1 },
                .match = 30,
                .mout = 1,
                .peer = &peer_l4,
        },
        { /* 65 */
                .in = { 40, -1 },
                .match = 30,
                .mout = 0,
                .peer = &peer_r4,
        },
        {
                .in = { 41, -1 },
                .match = 30,
                .mout = 0,
                .peer = &peer,
        },
        {
                .in = { 41, -1 },
                .match = 30,
                .mout = 0,
                .peer = &peer_l4,
        },
        {
                .in = { 41, -1 },
                .match = 30,
                .mout = 1,
                .peer = &peer_r4,
        },
        {
                .in = { 38, -1 },
                .match = 30,
                .mout = 1,
                .peer = &peer,
        },
        { /* 70 */
                .in = { 38, 39, 40, -1 },
                .match = 42,
                .mout = 1,
                .delete = 42,
                .next = 0 + 1,
                .peer = &peer,
        },
        {
                .in = { 38, 39, 40, -1 },
                .match = 43,
                .mout = 1,
                .delete = 43,
                .next = 0 + 1,
                .peer = &peer,
        },
        {
                .in = { 39, 40, -1 },
                .match = 44,
                .mout = 1,
                .delete = 44,
                .next = 0 + 1,
                .peer = &peer,
        },
        {
                .in = { 38, -1 },
                .match = 44,
                .mout = 0,
                .peer = &peer,
        },
        {
                .in = { 40, -1 },
                .match = 45,
                .mout = 1,
                .delete = 45,
                .next = 0 + 1,
                .peer = &peer,
        },
        { /* 75 */
                .in = { 38, 39, 41, -1 },
                .match = 45,
                .mout = 0,
                .peer = &peer,
        },
};