Lines Matching refs:ifobject
201 static void gen_eth_hdr(struct ifobject *ifobject, struct ethhdr *eth_hdr) in gen_eth_hdr() argument
203 memcpy(eth_hdr->h_dest, ifobject->dst_mac, ETH_ALEN); in gen_eth_hdr()
204 memcpy(eth_hdr->h_source, ifobject->src_mac, ETH_ALEN); in gen_eth_hdr()
208 static void gen_ip_hdr(struct ifobject *ifobject, struct iphdr *ip_hdr) in gen_ip_hdr() argument
218 ip_hdr->saddr = ifobject->src_ip; in gen_ip_hdr()
219 ip_hdr->daddr = ifobject->dst_ip; in gen_ip_hdr()
223 static void gen_udp_hdr(u32 payload, void *pkt, struct ifobject *ifobject, in gen_udp_hdr() argument
226 udp_hdr->source = htons(ifobject->src_port); in gen_udp_hdr()
227 udp_hdr->dest = htons(ifobject->dst_port); in gen_udp_hdr()
263 struct ifobject *ifobject, u32 qid) in xsk_configure_socket() argument
273 cfg.xdp_flags = ifobject->xdp_flags; in xsk_configure_socket()
274 cfg.bind_flags = ifobject->bind_flags; in xsk_configure_socket()
276 txr = ifobject->tx_on ? &xsk->tx : NULL; in xsk_configure_socket()
277 rxr = ifobject->rx_on ? &xsk->rx : NULL; in xsk_configure_socket()
278 return xsk_socket__create(&xsk->xsk, ifobject->ifname, qid, umem->umem, rxr, txr, &cfg); in xsk_configure_socket()
324 static bool validate_interface(struct ifobject *ifobj) in validate_interface()
331 static void parse_command_line(struct ifobject *ifobj_tx, struct ifobject *ifobj_rx, int argc, in parse_command_line()
334 struct ifobject *ifobj; in parse_command_line()
376 static void __test_spec_init(struct test_spec *test, struct ifobject *ifobj_tx, in __test_spec_init()
377 struct ifobject *ifobj_rx) in __test_spec_init()
382 struct ifobject *ifobj = i ? ifobj_rx : ifobj_tx; in __test_spec_init()
414 static void test_spec_init(struct test_spec *test, struct ifobject *ifobj_tx, in test_spec_init()
415 struct ifobject *ifobj_rx, enum test_mode mode) in test_spec_init()
425 struct ifobject *ifobj = i ? ifobj_rx : ifobj_tx; in test_spec_init()
561 static struct pkt *pkt_generate(struct ifobject *ifobject, u32 pkt_nb) in pkt_generate() argument
563 struct pkt *pkt = pkt_stream_get_pkt(ifobject->pkt_stream, pkt_nb); in pkt_generate()
574 data = xsk_umem__get_data(ifobject->umem->buffer, pkt->addr); in pkt_generate()
579 gen_udp_hdr(pkt_nb, data, ifobject, udp_hdr); in pkt_generate()
580 gen_ip_hdr(ifobject, ip_hdr); in pkt_generate()
582 gen_eth_hdr(ifobject, eth_hdr); in pkt_generate()
809 static u32 __send_pkts(struct ifobject *ifobject, u32 pkt_nb) in __send_pkts() argument
811 struct xsk_socket_info *xsk = ifobject->xsk; in __send_pkts()
819 struct pkt *pkt = pkt_generate(ifobject, pkt_nb); in __send_pkts()
833 if (ifobject->pacing_on && pkts_in_flight >= ifobject->umem->num_frames - BATCH_SIZE) { in __send_pkts()
853 static void send_pkts(struct ifobject *ifobject) in send_pkts() argument
858 fds.fd = xsk_socket__fd(ifobject->xsk->xsk); in send_pkts()
861 while (pkt_cnt < ifobject->pkt_stream->nb_pkts) { in send_pkts()
862 if (ifobject->use_poll) { in send_pkts()
873 pkt_cnt += __send_pkts(ifobject, pkt_cnt); in send_pkts()
876 wait_for_tx_completion(ifobject->xsk); in send_pkts()
879 static bool rx_stats_are_valid(struct ifobject *ifobject) in rx_stats_are_valid() argument
881 u32 xsk_stat = 0, expected_stat = ifobject->pkt_stream->nb_pkts; in rx_stats_are_valid()
882 struct xsk_socket *xsk = ifobject->xsk->xsk; in rx_stats_are_valid()
921 static void tx_stats_validate(struct ifobject *ifobject) in tx_stats_validate() argument
923 struct xsk_socket *xsk = ifobject->xsk->xsk; in tx_stats_validate()
937 if (stats.tx_invalid_descs == ifobject->pkt_stream->nb_pkts) in tx_stats_validate()
941 __func__, stats.tx_invalid_descs, ifobject->pkt_stream->nb_pkts); in tx_stats_validate()
944 static void thread_common_ops(struct test_spec *test, struct ifobject *ifobject) in thread_common_ops() argument
949 ifobject->ns_fd = switch_namespace(ifobject->nsname); in thread_common_ops()
951 if (ifobject->umem->unaligned_mode) in thread_common_ops()
955 u64 umem_sz = ifobject->umem->num_frames * ifobject->umem->frame_size; in thread_common_ops()
964 ret = xsk_configure_umem(&ifobject->umem_arr[i], bufs, umem_sz); in thread_common_ops()
969 ret = xsk_configure_socket(&ifobject->xsk_arr[i], &ifobject->umem_arr[i], in thread_common_ops()
970 ifobject, i); in thread_common_ops()
981 ifobject->umem = &ifobject->umem_arr[0]; in thread_common_ops()
982 ifobject->xsk = &ifobject->xsk_arr[0]; in thread_common_ops()
985 static void testapp_cleanup_xsk_res(struct ifobject *ifobj) in testapp_cleanup_xsk_res()
996 struct ifobject *ifobject = test->ifobj_tx; in worker_testapp_validate_tx() local
999 thread_common_ops(test, ifobject); in worker_testapp_validate_tx()
1001 print_verbose("Sending %d packets on interface %s\n", ifobject->pkt_stream->nb_pkts, in worker_testapp_validate_tx()
1002 ifobject->ifname); in worker_testapp_validate_tx()
1003 send_pkts(ifobject); in worker_testapp_validate_tx()
1006 tx_stats_validate(ifobject); in worker_testapp_validate_tx()
1009 testapp_cleanup_xsk_res(ifobject); in worker_testapp_validate_tx()
1047 struct ifobject *ifobject = test->ifobj_rx; in worker_testapp_validate_rx() local
1051 thread_common_ops(test, ifobject); in worker_testapp_validate_rx()
1053 xsk_populate_fill_ring(ifobject->umem, ifobject->pkt_stream); in worker_testapp_validate_rx()
1055 fds.fd = xsk_socket__fd(ifobject->xsk->xsk); in worker_testapp_validate_rx()
1061 while (!rx_stats_are_valid(ifobject)) in worker_testapp_validate_rx()
1064 receive_pkts(ifobject->pkt_stream, ifobject->xsk, &fds); in worker_testapp_validate_rx()
1067 testapp_cleanup_xsk_res(ifobject); in worker_testapp_validate_rx()
1073 struct ifobject *ifobj_tx = test->ifobj_tx; in testapp_validate_traffic()
1074 struct ifobject *ifobj_rx = test->ifobj_rx; in testapp_validate_traffic()
1109 static void swap_directions(struct ifobject **ifobj1, struct ifobject **ifobj2) in swap_directions()
1112 struct ifobject *tmp_ifobj = (*ifobj1); in swap_directions()
1136 static void swap_xsk_resources(struct ifobject *ifobj_tx, struct ifobject *ifobj_rx) in swap_xsk_resources()
1216 static bool hugepages_present(struct ifobject *ifobject) in hugepages_present() argument
1218 const size_t mmap_sz = 2 * ifobject->umem->num_frames * ifobject->umem->frame_size; in hugepages_present()
1294 static void init_iface(struct ifobject *ifobj, const char *dst_mac, const char *src_mac, in init_iface()
1388 static struct ifobject *ifobject_create(void) in ifobject_create()
1390 struct ifobject *ifobj; in ifobject_create()
1392 ifobj = calloc(1, sizeof(struct ifobject)); in ifobject_create()
1413 static void ifobject_delete(struct ifobject *ifobj) in ifobject_delete()
1424 struct ifobject *ifobj_tx, *ifobj_rx; in main()