Lines Matching defs:ifobj
164 static bool is_umem_valid(struct ifobject *ifobj)
166 return !!ifobj->umem->umem;
179 static int xsk_configure_umem(struct ifobject *ifobj, struct xsk_umem_info *umem, void *buffer,
200 if (ifobj->shared_umem && ifobj->rx_on) {
328 static bool validate_interface(struct ifobject *ifobj)
330 if (!strcmp(ifobj->ifname, ""))
338 struct ifobject *ifobj;
352 ifobj = ifobj_tx;
354 ifobj = ifobj_rx;
358 memcpy(ifobj->ifname, optarg,
361 ifobj->ifindex = if_nametoindex(ifobj->ifname);
362 if (!ifobj->ifindex)
387 struct ifobject *ifobj = i ? ifobj_rx : ifobj_tx;
389 ifobj->xsk = &ifobj->xsk_arr[0];
390 ifobj->use_poll = false;
391 ifobj->use_fill_ring = true;
392 ifobj->release_rx = true;
393 ifobj->validation_func = NULL;
394 ifobj->use_metadata = false;
397 ifobj->rx_on = false;
398 ifobj->tx_on = true;
399 ifobj->pkt_stream = test->tx_pkt_stream_default;
401 ifobj->rx_on = true;
402 ifobj->tx_on = false;
403 ifobj->pkt_stream = test->rx_pkt_stream_default;
406 memset(ifobj->umem, 0, sizeof(*ifobj->umem));
407 ifobj->umem->num_frames = DEFAULT_UMEM_BUFFERS;
408 ifobj->umem->frame_size = XSK_UMEM__DEFAULT_FRAME_SIZE;
411 memset(&ifobj->xsk_arr[j], 0, sizeof(ifobj->xsk_arr[j]));
412 ifobj->xsk_arr[j].rxqsize = XSK_RING_CONS__DEFAULT_NUM_DESCS;
443 struct ifobject *ifobj = i ? ifobj_rx : ifobj_tx;
445 ifobj->bind_flags = XDP_USE_NEED_WAKEUP;
447 ifobj->bind_flags |= XDP_ZEROCOPY;
449 ifobj->bind_flags |= XDP_COPY;
651 static void __pkt_stream_replace_half(struct ifobject *ifobj, u32 pkt_len,
654 struct xsk_umem_info *umem = ifobj->umem;
658 pkt_stream = pkt_stream_clone(umem, ifobj->pkt_stream);
659 for (i = 1; i < ifobj->pkt_stream->nb_pkts; i += 2)
662 ifobj->pkt_stream = pkt_stream;
716 static struct pkt_stream *__pkt_stream_generate_custom(struct ifobject *ifobj, struct pkt *frames,
973 struct ifobject *ifobj = test->ifobj_rx;
997 if (ifobj->use_poll) {
1018 if (ifobj->use_fill_ring) {
1047 (ifobj->use_metadata && !is_metadata_correct(pkt, umem->buffer, addr)))
1054 if (ifobj->use_fill_ring)
1074 if (ifobj->use_fill_ring) {
1081 if (ifobj->use_fill_ring)
1083 if (ifobj->release_rx)
1528 static void testapp_clean_xsk_umem(struct ifobject *ifobj)
1530 u64 umem_sz = ifobj->umem->num_frames * ifobj->umem->frame_size;
1532 if (ifobj->shared_umem)
1536 xsk_umem__delete(ifobj->umem->umem);
1537 munmap(ifobj->umem->buffer, umem_sz);
1547 struct ifobject *ifobj = test->ifobj_rx;
1549 return ifobj->xdp_prog != test->xdp_prog_rx || ifobj->mode != test->mode;
1554 struct ifobject *ifobj = test->ifobj_tx;
1556 return ifobj->xdp_prog != test->xdp_prog_tx || ifobj->mode != test->mode;
1559 static void xsk_reattach_xdp(struct ifobject *ifobj, struct bpf_program *xdp_prog,
1564 xsk_detach_xdp_program(ifobj->ifindex, mode_to_xdp_flags(ifobj->mode));
1565 err = xsk_attach_xdp_program(xdp_prog, ifobj->ifindex, mode_to_xdp_flags(mode));
1571 if (ifobj->mode != mode && (mode == TEST_MODE_DRV || mode == TEST_MODE_ZC))
1572 if (!xsk_is_in_mode(ifobj->ifindex, XDP_FLAGS_DRV_MODE)) {
1577 ifobj->xdp_prog = xdp_prog;
1578 ifobj->xskmap = xskmap;
1579 ifobj->mode = mode;
1676 static int testapp_validate_traffic_single_thread(struct test_spec *test, struct ifobject *ifobj)
1678 return __testapp_validate_traffic(test, ifobj, NULL);
2027 static int xsk_load_xdp_programs(struct ifobject *ifobj)
2029 ifobj->xdp_progs = xsk_xdp_progs__open_and_load();
2030 if (libbpf_get_error(ifobj->xdp_progs))
2031 return libbpf_get_error(ifobj->xdp_progs);
2036 static void xsk_unload_xdp_programs(struct ifobject *ifobj)
2038 xsk_xdp_progs__destroy(ifobj->xdp_progs);
2057 static void init_iface(struct ifobject *ifobj, const char *dst_mac, const char *src_mac,
2063 memcpy(ifobj->dst_mac, dst_mac, ETH_ALEN);
2064 memcpy(ifobj->src_mac, src_mac, ETH_ALEN);
2066 ifobj->func_ptr = func_ptr;
2068 err = xsk_load_xdp_programs(ifobj);
2075 ifobj->unaligned_supp = true;
2077 err = bpf_xdp_query(ifobj->ifindex, XDP_FLAGS_DRV_MODE, &query_opts);
2083 ifobj->multi_buff_supp = true;
2086 ifobj->multi_buff_zc_supp = true;
2087 ifobj->xdp_zc_max_segs = query_opts.xdp_zc_max_segs;
2089 ifobj->xdp_zc_max_segs = 0;
2235 struct ifobject *ifobj;
2237 ifobj = calloc(1, sizeof(struct ifobject));
2238 if (!ifobj)
2241 ifobj->xsk_arr = calloc(MAX_SOCKETS, sizeof(*ifobj->xsk_arr));
2242 if (!ifobj->xsk_arr)
2245 ifobj->umem = calloc(1, sizeof(*ifobj->umem));
2246 if (!ifobj->umem)
2249 return ifobj;
2252 free(ifobj->xsk_arr);
2254 free(ifobj);
2258 static void ifobject_delete(struct ifobject *ifobj)
2260 free(ifobj->umem);
2261 free(ifobj->xsk_arr);
2262 free(ifobj);