Lines Matching refs:ifobject

200 static void gen_eth_hdr(struct ifobject *ifobject, struct ethhdr *eth_hdr)  in gen_eth_hdr()  argument
202 memcpy(eth_hdr->h_dest, ifobject->dst_mac, ETH_ALEN); in gen_eth_hdr()
203 memcpy(eth_hdr->h_source, ifobject->src_mac, ETH_ALEN); in gen_eth_hdr()
207 static void gen_ip_hdr(struct ifobject *ifobject, struct iphdr *ip_hdr) in gen_ip_hdr() argument
217 ip_hdr->saddr = ifobject->src_ip; in gen_ip_hdr()
218 ip_hdr->daddr = ifobject->dst_ip; in gen_ip_hdr()
222 static void gen_udp_hdr(u32 payload, void *pkt, struct ifobject *ifobject, in gen_udp_hdr() argument
225 udp_hdr->source = htons(ifobject->src_port); in gen_udp_hdr()
226 udp_hdr->dest = htons(ifobject->dst_port); in gen_udp_hdr()
238 static void xsk_configure_umem(struct ifobject *data, void *buffer, u64 size, int idx) in xsk_configure_umem()
277 static int xsk_configure_socket(struct ifobject *ifobject, int idx) in xsk_configure_socket() argument
289 xsk->umem = ifobject->umem; in xsk_configure_socket()
297 rxr = (ifobject->fv.vector == rx) ? &xsk->rx : NULL; in xsk_configure_socket()
298 txr = (ifobject->fv.vector == tx) ? &xsk->tx : NULL; in xsk_configure_socket()
304 ret = xsk_socket__create(&xsk->xsk, ifobject->ifname, idx, in xsk_configure_socket()
305 ifobject->umem->umem, rxr, txr, &cfg); in xsk_configure_socket()
309 ifobject->xsk_arr[idx] = xsk; in xsk_configure_socket()
446 static struct pkt *pkt_generate(struct ifobject *ifobject, u32 pkt_nb) in pkt_generate() argument
448 struct pkt *pkt = pkt_stream_get_pkt(ifobject->pkt_stream, pkt_nb); in pkt_generate()
457 data = xsk_umem__get_data(ifobject->umem->buffer, pkt->addr); in pkt_generate()
462 gen_udp_hdr(pkt_nb, data, ifobject, udp_hdr); in pkt_generate()
463 gen_ip_hdr(ifobject, ip_hdr); in pkt_generate()
465 gen_eth_hdr(ifobject, eth_hdr); in pkt_generate()
623 static u32 __send_pkts(struct ifobject *ifobject, u32 pkt_nb) in __send_pkts() argument
625 struct xsk_socket_info *xsk = ifobject->xsk; in __send_pkts()
633 struct pkt *pkt = pkt_generate(ifobject, pkt_nb); in __send_pkts()
659 static void send_pkts(struct ifobject *ifobject) in send_pkts() argument
664 fds[0].fd = xsk_socket__fd(ifobject->xsk->xsk); in send_pkts()
667 while (pkt_cnt < ifobject->pkt_stream->nb_pkts) { in send_pkts()
681 sent = __send_pkts(ifobject, pkt_cnt); in send_pkts()
686 wait_for_tx_completion(ifobject->xsk); in send_pkts()
689 static bool rx_stats_are_valid(struct ifobject *ifobject) in rx_stats_are_valid() argument
691 u32 xsk_stat = 0, expected_stat = ifobject->pkt_stream->nb_pkts; in rx_stats_are_valid()
692 struct xsk_socket *xsk = ifobject->xsk->xsk; in rx_stats_are_valid()
731 static void tx_stats_validate(struct ifobject *ifobject) in tx_stats_validate() argument
733 struct xsk_socket *xsk = ifobject->xsk->xsk; in tx_stats_validate()
747 if (stats.tx_invalid_descs == ifobject->pkt_stream->nb_pkts) in tx_stats_validate()
751 __func__, stats.tx_invalid_descs, ifobject->pkt_stream->nb_pkts); in tx_stats_validate()
754 static void thread_common_ops(struct ifobject *ifobject, void *bufs) in thread_common_ops() argument
762 ifobject->ns_fd = switch_namespace(ifobject->nsname); in thread_common_ops()
772 xsk_configure_umem(ifobject, bufs, umem_sz, 0); in thread_common_ops()
773 ifobject->umem = ifobject->umem_arr[0]; in thread_common_ops()
774 ret = xsk_configure_socket(ifobject, 0); in thread_common_ops()
784 ifobject->umem = ifobject->umem_arr[0]; in thread_common_ops()
785 ifobject->xsk = ifobject->xsk_arr[0]; in thread_common_ops()
788 xsk_configure_umem(ifobject, (u8 *)bufs + umem_sz, umem_sz, 1); in thread_common_ops()
789 ifobject->umem = ifobject->umem_arr[1]; in thread_common_ops()
790 ret = xsk_configure_socket(ifobject, 1); in thread_common_ops()
793 ifobject->umem = ifobject->umem_arr[0]; in thread_common_ops()
794 ifobject->xsk = ifobject->xsk_arr[0]; in thread_common_ops()
796 ifobject->ifname, ifobject->fv.vector == tx ? "Tx" : "Rx"); in thread_common_ops()
804 static void testapp_cleanup_xsk_res(struct ifobject *ifobj) in testapp_cleanup_xsk_res()
814 struct ifobject *ifobject = (struct ifobject *)arg; in worker_testapp_validate_tx() local
818 thread_common_ops(ifobject, bufs); in worker_testapp_validate_tx()
820 print_verbose("Sending %d packets on interface %s\n", ifobject->pkt_stream->nb_pkts, in worker_testapp_validate_tx()
821 ifobject->ifname); in worker_testapp_validate_tx()
822 send_pkts(ifobject); in worker_testapp_validate_tx()
825 tx_stats_validate(ifobject); in worker_testapp_validate_tx()
827 testapp_cleanup_xsk_res(ifobject); in worker_testapp_validate_tx()
833 struct ifobject *ifobject = (struct ifobject *)arg; in worker_testapp_validate_rx() local
838 thread_common_ops(ifobject, bufs); in worker_testapp_validate_rx()
841 xsk_populate_fill_ring(ifobject->umem); in worker_testapp_validate_rx()
843 fds[0].fd = xsk_socket__fd(ifobject->xsk->xsk); in worker_testapp_validate_rx()
849 while (!rx_stats_are_valid(ifobject)) in worker_testapp_validate_rx()
852 receive_pkts(ifobject->pkt_stream, ifobject->xsk, fds); in worker_testapp_validate_rx()
857 testapp_cleanup_xsk_res(ifobject); in worker_testapp_validate_rx()
906 static void swap_vectors(struct ifobject *ifobj1, struct ifobject *ifobj2) in swap_vectors()
993 static void init_iface(struct ifobject *ifobj, const char *dst_mac, in init_iface()
1066 static struct ifobject *ifobject_create(void) in ifobject_create()
1068 struct ifobject *ifobj; in ifobject_create()
1070 ifobj = calloc(1, sizeof(struct ifobject)); in ifobject_create()
1091 static void ifobject_delete(struct ifobject *ifobj) in ifobject_delete()