void test_bridge_table_id_iter(void) { dp_bridge_iter_t iter; uint8_t ids[] = { 0, 5, 10 }; uint8_t id; int i; lagopus_result_t rv; iter = NULL; TEST_ASSERT_EQUAL(dp_bridge_table_id_iter_create(bridge_name, &iter), LAGOPUS_RESULT_OK); TEST_ASSERT_NOT_NULL(iter); for (i = 0; i < sizeof(ids) / sizeof(ids[0]); i++) { TEST_ASSERT_NOT_NULL(flowdb_get_table(bridge->flowdb, ids[i])); } i = 0; while ((rv = dp_bridge_table_id_iter_get(iter, &id)) == LAGOPUS_RESULT_OK) { TEST_ASSERT_NOT_EQUAL(i, sizeof(ids) / sizeof(ids[0])); TEST_ASSERT_EQUAL(id, ids[i]); i++; } TEST_ASSERT_EQUAL(rv, LAGOPUS_RESULT_EOF); dp_bridge_table_id_iter_destroy(iter); }
void test_lagopus_find_flow(void) { datastore_bridge_info_t info; struct bridge *bridge; struct port *port; struct port nport; struct lagopus_packet *pkt; struct table *table; struct flow *flow; OS_MBUF *m; /* setup bridge and port */ memset(&info, 0, sizeof(info)); info.fail_mode = DATASTORE_BRIDGE_FAIL_MODE_SECURE; TEST_ASSERT_EQUAL(dp_bridge_create("br0", &info), LAGOPUS_RESULT_OK); TEST_ASSERT_EQUAL(dp_port_create("port0"), LAGOPUS_RESULT_OK); TEST_ASSERT_EQUAL(dp_port_create("port1"), LAGOPUS_RESULT_OK); TEST_ASSERT_EQUAL(dp_bridge_port_set("br0", "port0", 1), LAGOPUS_RESULT_OK); TEST_ASSERT_EQUAL(dp_bridge_port_set("br0", "port1", 2), LAGOPUS_RESULT_OK); pkt = alloc_lagopus_packet(); TEST_ASSERT_NOT_NULL_MESSAGE(pkt, "lagopus_alloc_packet error."); m = pkt->mbuf; OS_M_APPEND(m, 64); m->refcnt = 2; bridge = dp_bridge_lookup("br0"); TEST_ASSERT_NOT_NULL(bridge); lagopus_packet_init(pkt, m, port_lookup(&bridge->ports, 1)); table = flowdb_get_table(pkt->in_port->bridge->flowdb, 0); table->userdata = new_flowinfo_eth_type(); flow = lagopus_find_flow(pkt, table); TEST_ASSERT_EQUAL_MESSAGE(table->lookup_count, 0, "lookup_count(misc) error."); TEST_ASSERT_NULL_MESSAGE(flow, "flow(misc) error."); OS_MTOD(m, uint8_t *)[14] = 0x08; OS_MTOD(m, uint8_t *)[15] = 0x06; lagopus_packet_init(pkt, m, &port); flow = lagopus_find_flow(pkt, table); TEST_ASSERT_EQUAL_MESSAGE(table->lookup_count, 0, "lookup_count(arp) error."); TEST_ASSERT_NULL_MESSAGE(flow, "flow(arp) error."); OS_MTOD(m, uint8_t *)[14] = 0x08; OS_MTOD(m, uint8_t *)[15] = 0x00; lagopus_packet_init(pkt, m, port_lookup(&bridge->ports, 1)); flow = lagopus_find_flow(pkt, table); TEST_ASSERT_EQUAL_MESSAGE(table->lookup_count, 0, "lookup_count(ipv4) error."); TEST_ASSERT_NULL_MESSAGE(flow, "flow(ipv4) error."); OS_MTOD(m, uint8_t *)[14] = 0x86; OS_MTOD(m, uint8_t *)[15] = 0xdd; OS_MTOD(m, uint8_t *)[20] = IPPROTO_TCP; lagopus_packet_init(pkt, m, port_lookup(&bridge->ports, 1)); flow = lagopus_find_flow(pkt, table); TEST_ASSERT_EQUAL_MESSAGE(table->lookup_count, 0, "lookup_count(ipv6) error."); TEST_ASSERT_NULL_MESSAGE(flow, "flow(ipv6) error."); OS_MTOD(m, uint8_t *)[14] = 0x88; OS_MTOD(m, uint8_t *)[15] = 0x47; lagopus_packet_init(pkt, m, port_lookup(&bridge->ports, 1)); flow = lagopus_find_flow(pkt, table); TEST_ASSERT_EQUAL_MESSAGE(table->lookup_count, 0, "lookup_count(mpls) error."); TEST_ASSERT_NULL_MESSAGE(flow, "flow(mpls) error."); OS_MTOD(m, uint8_t *)[14] = 0x88; OS_MTOD(m, uint8_t *)[15] = 0x48; lagopus_packet_init(pkt, m, port_lookup(&bridge->ports, 1)); flow = lagopus_find_flow(pkt, table); TEST_ASSERT_EQUAL_MESSAGE(table->lookup_count, 0, "lookup_count(mpls-mc) error."); TEST_ASSERT_NULL_MESSAGE(flow, "flow(mpls-mc) error."); OS_MTOD(m, uint8_t *)[14] = 0x88; OS_MTOD(m, uint8_t *)[15] = 0xe7; lagopus_packet_init(pkt, m, port_lookup(&bridge->ports, 1)); flow = lagopus_find_flow(pkt, table); TEST_ASSERT_EQUAL_MESSAGE(table->lookup_count, 0, "lookup_count(pbb) error."); TEST_ASSERT_NULL_MESSAGE(flow, "flow(pbb) error."); }