void setUp(void) { size_t s; lagopus_ip_address_t *addr; struct sockaddr_in *sin; uint8_t *p; /* Make the root flowinfo. */ TEST_ASSERT_NULL(flowinfo); flowinfo = new_flowinfo_vlan_vid(); TEST_ASSERT_NOT_NULL(flowinfo); TEST_ASSERT_FLOWINFO_FLOW_NUM(flowinfo, 0, __func__); /* * Make the test flows. * * ARP matches have the prerequisite. */ for (s = 0; s < ARRAY_LEN(test_flow); s++) { TEST_ASSERT_NULL(test_flow[s]); test_flow[s] = allocate_test_flow(10 * sizeof(struct match)); TEST_ASSERT_NOT_NULL(test_flow[s]); test_flow[s]->priority = (int)s; FLOW_ADD_ARP_PREREQUISITE(test_flow[s]); } /* Make the test addresses. */ for (s = 0; s < ARRAY_LEN(test_flow); s++) { lagopus_ip_address_create(ipv4srcstr, true, &addr); sin = NULL; lagopus_ip_address_sockaddr_get(addr, &sin); lagopus_ip_address_destroy(addr); p = (uint8_t *)&sin->sin_addr.s_addr; p[sizeof(sin->sin_addr.s_addr) - 1] = (uint8_t)(TEST_IPV4_ADDR_LSB(s) & 0xff); OS_MEMCPY(&ipv4src[s], &sin->sin_addr, sizeof(ipv4src[s])); lagopus_ip_address_create(ipv4tgtstr, true, &addr); sin = NULL; lagopus_ip_address_sockaddr_get(addr, &sin); lagopus_ip_address_destroy(addr); p = (uint8_t *)&sin->sin_addr.s_addr; p[sizeof(sin->sin_addr.s_addr) - 1] = (uint8_t)(TEST_IPV4_ADDR_LSB(s) & 0xff); OS_MEMCPY(&ipv4tgt[s], &sin->sin_addr, sizeof(ipv4tgt[s])); lagopus_ip_address_create(ipv4maskstr, true, &addr); sin = NULL; lagopus_ip_address_sockaddr_get(addr, &sin); lagopus_ip_address_destroy(addr); OS_MEMCPY(&ipv4mask[s], &sin->sin_addr, sizeof(ipv4mask[s])); } }
struct flowinfo * new_flowinfo_in_port(void) { struct flowinfo *self; self = calloc(1, sizeof(struct flowinfo)); if (self != NULL) { self->ptree = ptree_init(32); /* use vector? */ self->misc = new_flowinfo_vlan_vid(); self->add_func = add_flow_in_port; self->del_func = del_flow_in_port; self->match_func = match_flow_in_port; self->find_func = find_flow_in_port; self->destroy_func = destroy_flowinfo_in_port; } return self; }
void setUp(void) { size_t s; /* Make the root flowinfo. */ TEST_ASSERT_NULL(flowinfo); flowinfo = new_flowinfo_vlan_vid(); TEST_ASSERT_NOT_NULL(flowinfo); TEST_ASSERT_FLOWINFO_FLOW_NUM(flowinfo, 0, __func__); /* Make the test flows. */ for (s = 0; s < ARRAY_LEN(test_flow); s++) { TEST_ASSERT_NULL(test_flow[s]); test_flow[s] = allocate_test_flow(10 * sizeof(struct match)); TEST_ASSERT_NOT_NULL(test_flow[s]); test_flow[s]->priority = (int)s; } }
void setUp(void) { size_t s; struct addrunion au; uint8_t *p; /* Make the root flowinfo. */ TEST_ASSERT_NULL(flowinfo); flowinfo = new_flowinfo_vlan_vid(); TEST_ASSERT_NOT_NULL(flowinfo); TEST_ASSERT_FLOWINFO_FLOW_NUM(flowinfo, 0, __func__); /* * Make the test flows. * * ARP matches have the prerequisite. */ for (s = 0; s < ARRAY_LEN(test_flow); s++) { TEST_ASSERT_NULL(test_flow[s]); test_flow[s] = allocate_test_flow(10 * sizeof(struct match)); TEST_ASSERT_NOT_NULL(test_flow[s]); test_flow[s]->priority = (int)s; FLOW_ADD_ARP_PREREQUISITE(test_flow[s]); } /* Make the test addresses. */ for (s = 0; s < ARRAY_LEN(test_flow); s++) { addrunion_ipv4_set(&au, ipv4srcstr); p = (uint8_t *)&au.addr4.s_addr; p[sizeof(au.addr4.s_addr) - 1] = (uint8_t)(TEST_IPV4_ADDR_LSB(s) & 0xff); OS_MEMCPY(&ipv4src[s], &au.addr4, sizeof(ipv4src[s])); addrunion_ipv4_set(&au, ipv4tgtstr); p = (uint8_t *)&au.addr4.s_addr; p[sizeof(au.addr4.s_addr) - 1] = (uint8_t)(TEST_IPV4_ADDR_LSB(s) & 0xff); OS_MEMCPY(&ipv4tgt[s], &au.addr4, sizeof(ipv4tgt[s])); addrunion_ipv4_set(&au, ipv4maskstr); OS_MEMCPY(&ipv4mask[s], &au.addr4, sizeof(ipv4mask[s])); } }
void setUp(void) { size_t s; uint8_t *p; /* Make the root flowinfo. */ TEST_ASSERT_NULL(flowinfo); flowinfo = new_flowinfo_vlan_vid(); TEST_ASSERT_NOT_NULL(flowinfo); TEST_ASSERT_FLOWINFO_FLOW_NUM(flowinfo, 0, __func__); /* * Make the test flows. * * IPv6 matches have prerequisite. */ for (s = 0; s < ARRAY_LEN(test_flow); s++) { TEST_ASSERT_NULL(test_flow[s]); test_flow[s] = allocate_test_flow(10 * sizeof(struct match)); TEST_ASSERT_NOT_NULL(test_flow[s]); test_flow[s]->priority = (int)s; FLOW_ADD_IPV6_PREREQUISITE(test_flow[s]); } /* Make the test addresses. */ for (s = 0; s < ARRAY_LEN(test_flow); s++) { addrunion_ipv6_set(&testsrc[s], testsrcstr); p = (uint8_t *)&testsrc[s].addr6.s6_addr; p[sizeof(testsrc[s].addr6.s6_addr) - 1] = (uint8_t)(TEST_IPV6_ADDR_LSB( s) & 0xff); addrunion_ipv6_set(&testdst[s], testdststr); p = (uint8_t *)&testdst[s].addr6.s6_addr; p[sizeof(testsrc[s].addr6.s6_addr) - 1] = (uint8_t)(TEST_IPV6_ADDR_LSB( s) & 0xff); addrunion_ipv6_set(&testmask[s], testmaskstr); } }
static lagopus_result_t add_flow_in_port(struct flowinfo *self, struct flow *flow) { struct match *match; struct flowinfo *flowinfo; struct ptree_node *node; uint32_t in_port; match = get_match_in_port(&flow->match_list, &in_port); if (match != NULL) { in_port = OS_NTOHL(in_port); node = ptree_node_get(self->ptree, (uint8_t *)&in_port, 32); if (node->info == NULL) { /* new node. */ node->info = new_flowinfo_vlan_vid(); } match->except_flag = true; flowinfo = node->info; return flowinfo->add_func(flowinfo, flow); } else { return self->misc->add_func(self->misc, flow); } return LAGOPUS_RESULT_OK; }
void setUp(void) { size_t s; /* Make the root flowinfo. */ TEST_ASSERT_NULL(flowinfo); flowinfo = new_flowinfo_vlan_vid(); TEST_ASSERT_NOT_NULL(flowinfo); TEST_ASSERT_FLOWINFO_FLOW_NUM(flowinfo, 0, __func__); /* * Make the test flows. * * MPLS matches have prerequisite. */ for (s = 0; s < ARRAY_LEN(test_flow); s++) { TEST_ASSERT_NULL(test_flow[s]); test_flow[s] = allocate_test_flow(10 * sizeof(struct match)); TEST_ASSERT_NOT_NULL(test_flow[s]); test_flow[s]->priority = (int)s; FLOW_ADD_MPLS_UT_PREREQUISITE(test_flow[s]); } }