1*d1aec26fSBastien Curutchet (eBPF Foundation) /* SPDX-License-Identifier: GPL-2.0 */ 2*d1aec26fSBastien Curutchet (eBPF Foundation) #ifndef TEST_XSK_H_ 3*d1aec26fSBastien Curutchet (eBPF Foundation) #define TEST_XSK_H_ 4*d1aec26fSBastien Curutchet (eBPF Foundation) 5*d1aec26fSBastien Curutchet (eBPF Foundation) #include <linux/ethtool.h> 6*d1aec26fSBastien Curutchet (eBPF Foundation) #include <linux/if_xdp.h> 7*d1aec26fSBastien Curutchet (eBPF Foundation) 8*d1aec26fSBastien Curutchet (eBPF Foundation) #include "../kselftest.h" 9*d1aec26fSBastien Curutchet (eBPF Foundation) #include "xsk.h" 10*d1aec26fSBastien Curutchet (eBPF Foundation) 11*d1aec26fSBastien Curutchet (eBPF Foundation) #ifndef SO_PREFER_BUSY_POLL 12*d1aec26fSBastien Curutchet (eBPF Foundation) #define SO_PREFER_BUSY_POLL 69 13*d1aec26fSBastien Curutchet (eBPF Foundation) #endif 14*d1aec26fSBastien Curutchet (eBPF Foundation) 15*d1aec26fSBastien Curutchet (eBPF Foundation) #ifndef SO_BUSY_POLL_BUDGET 16*d1aec26fSBastien Curutchet (eBPF Foundation) #define SO_BUSY_POLL_BUDGET 70 17*d1aec26fSBastien Curutchet (eBPF Foundation) #endif 18*d1aec26fSBastien Curutchet (eBPF Foundation) 19*d1aec26fSBastien Curutchet (eBPF Foundation) #define TEST_PASS 0 20*d1aec26fSBastien Curutchet (eBPF Foundation) #define TEST_FAILURE -1 21*d1aec26fSBastien Curutchet (eBPF Foundation) #define TEST_CONTINUE 1 22*d1aec26fSBastien Curutchet (eBPF Foundation) #define TEST_SKIP 2 23*d1aec26fSBastien Curutchet (eBPF Foundation) 24*d1aec26fSBastien Curutchet (eBPF Foundation) #define DEFAULT_PKT_CNT (4 * 1024) 25*d1aec26fSBastien Curutchet (eBPF Foundation) #define DEFAULT_UMEM_BUFFERS (DEFAULT_PKT_CNT / 4) 26*d1aec26fSBastien Curutchet (eBPF Foundation) #define HUGEPAGE_SIZE (2 * 1024 * 1024) 27*d1aec26fSBastien Curutchet (eBPF Foundation) #define MIN_PKT_SIZE 64 28*d1aec26fSBastien Curutchet (eBPF Foundation) #define MAX_ETH_PKT_SIZE 1518 29*d1aec26fSBastien Curutchet (eBPF Foundation) #define MAX_INTERFACE_NAME_CHARS 16 30*d1aec26fSBastien Curutchet (eBPF Foundation) #define MAX_TEST_NAME_SIZE 48 31*d1aec26fSBastien Curutchet (eBPF Foundation) #define SOCK_RECONF_CTR 10 32*d1aec26fSBastien Curutchet (eBPF Foundation) #define USLEEP_MAX 10000 33*d1aec26fSBastien Curutchet (eBPF Foundation) 34*d1aec26fSBastien Curutchet (eBPF Foundation) extern bool opt_verbose; 35*d1aec26fSBastien Curutchet (eBPF Foundation) #define print_verbose(x...) do { if (opt_verbose) ksft_print_msg(x); } while (0) 36*d1aec26fSBastien Curutchet (eBPF Foundation) 37*d1aec26fSBastien Curutchet (eBPF Foundation) 38*d1aec26fSBastien Curutchet (eBPF Foundation) static inline u32 ceil_u32(u32 a, u32 b) 39*d1aec26fSBastien Curutchet (eBPF Foundation) { 40*d1aec26fSBastien Curutchet (eBPF Foundation) return (a + b - 1) / b; 41*d1aec26fSBastien Curutchet (eBPF Foundation) } 42*d1aec26fSBastien Curutchet (eBPF Foundation) 43*d1aec26fSBastien Curutchet (eBPF Foundation) static inline u64 ceil_u64(u64 a, u64 b) 44*d1aec26fSBastien Curutchet (eBPF Foundation) { 45*d1aec26fSBastien Curutchet (eBPF Foundation) return (a + b - 1) / b; 46*d1aec26fSBastien Curutchet (eBPF Foundation) } 47*d1aec26fSBastien Curutchet (eBPF Foundation) 48*d1aec26fSBastien Curutchet (eBPF Foundation) /* Simple test */ 49*d1aec26fSBastien Curutchet (eBPF Foundation) enum test_mode { 50*d1aec26fSBastien Curutchet (eBPF Foundation) TEST_MODE_SKB, 51*d1aec26fSBastien Curutchet (eBPF Foundation) TEST_MODE_DRV, 52*d1aec26fSBastien Curutchet (eBPF Foundation) TEST_MODE_ZC, 53*d1aec26fSBastien Curutchet (eBPF Foundation) TEST_MODE_ALL 54*d1aec26fSBastien Curutchet (eBPF Foundation) }; 55*d1aec26fSBastien Curutchet (eBPF Foundation) 56*d1aec26fSBastien Curutchet (eBPF Foundation) struct ifobject; 57*d1aec26fSBastien Curutchet (eBPF Foundation) struct test_spec; 58*d1aec26fSBastien Curutchet (eBPF Foundation) typedef int (*validation_func_t)(struct ifobject *ifobj); 59*d1aec26fSBastien Curutchet (eBPF Foundation) typedef void *(*thread_func_t)(void *arg); 60*d1aec26fSBastien Curutchet (eBPF Foundation) typedef int (*test_func_t)(struct test_spec *test); 61*d1aec26fSBastien Curutchet (eBPF Foundation) 62*d1aec26fSBastien Curutchet (eBPF Foundation) struct xsk_socket_info { 63*d1aec26fSBastien Curutchet (eBPF Foundation) struct xsk_ring_cons rx; 64*d1aec26fSBastien Curutchet (eBPF Foundation) struct xsk_ring_prod tx; 65*d1aec26fSBastien Curutchet (eBPF Foundation) struct xsk_umem_info *umem; 66*d1aec26fSBastien Curutchet (eBPF Foundation) struct xsk_socket *xsk; 67*d1aec26fSBastien Curutchet (eBPF Foundation) struct pkt_stream *pkt_stream; 68*d1aec26fSBastien Curutchet (eBPF Foundation) u32 outstanding_tx; 69*d1aec26fSBastien Curutchet (eBPF Foundation) u32 rxqsize; 70*d1aec26fSBastien Curutchet (eBPF Foundation) u32 batch_size; 71*d1aec26fSBastien Curutchet (eBPF Foundation) u8 dst_mac[ETH_ALEN]; 72*d1aec26fSBastien Curutchet (eBPF Foundation) u8 src_mac[ETH_ALEN]; 73*d1aec26fSBastien Curutchet (eBPF Foundation) bool check_consumer; 74*d1aec26fSBastien Curutchet (eBPF Foundation) }; 75*d1aec26fSBastien Curutchet (eBPF Foundation) 76*d1aec26fSBastien Curutchet (eBPF Foundation) int kick_rx(struct xsk_socket_info *xsk); 77*d1aec26fSBastien Curutchet (eBPF Foundation) int kick_tx(struct xsk_socket_info *xsk); 78*d1aec26fSBastien Curutchet (eBPF Foundation) 79*d1aec26fSBastien Curutchet (eBPF Foundation) struct xsk_umem_info { 80*d1aec26fSBastien Curutchet (eBPF Foundation) struct xsk_ring_prod fq; 81*d1aec26fSBastien Curutchet (eBPF Foundation) struct xsk_ring_cons cq; 82*d1aec26fSBastien Curutchet (eBPF Foundation) struct xsk_umem *umem; 83*d1aec26fSBastien Curutchet (eBPF Foundation) u64 next_buffer; 84*d1aec26fSBastien Curutchet (eBPF Foundation) u32 num_frames; 85*d1aec26fSBastien Curutchet (eBPF Foundation) u32 frame_headroom; 86*d1aec26fSBastien Curutchet (eBPF Foundation) void *buffer; 87*d1aec26fSBastien Curutchet (eBPF Foundation) u32 frame_size; 88*d1aec26fSBastien Curutchet (eBPF Foundation) u32 base_addr; 89*d1aec26fSBastien Curutchet (eBPF Foundation) u32 fill_size; 90*d1aec26fSBastien Curutchet (eBPF Foundation) u32 comp_size; 91*d1aec26fSBastien Curutchet (eBPF Foundation) bool unaligned_mode; 92*d1aec26fSBastien Curutchet (eBPF Foundation) }; 93*d1aec26fSBastien Curutchet (eBPF Foundation) 94*d1aec26fSBastien Curutchet (eBPF Foundation) struct set_hw_ring { 95*d1aec26fSBastien Curutchet (eBPF Foundation) u32 default_tx; 96*d1aec26fSBastien Curutchet (eBPF Foundation) u32 default_rx; 97*d1aec26fSBastien Curutchet (eBPF Foundation) }; 98*d1aec26fSBastien Curutchet (eBPF Foundation) 99*d1aec26fSBastien Curutchet (eBPF Foundation) int hw_ring_size_reset(struct ifobject *ifobj); 100*d1aec26fSBastien Curutchet (eBPF Foundation) 101*d1aec26fSBastien Curutchet (eBPF Foundation) struct ifobject { 102*d1aec26fSBastien Curutchet (eBPF Foundation) char ifname[MAX_INTERFACE_NAME_CHARS]; 103*d1aec26fSBastien Curutchet (eBPF Foundation) struct xsk_socket_info *xsk; 104*d1aec26fSBastien Curutchet (eBPF Foundation) struct xsk_socket_info *xsk_arr; 105*d1aec26fSBastien Curutchet (eBPF Foundation) struct xsk_umem_info *umem; 106*d1aec26fSBastien Curutchet (eBPF Foundation) thread_func_t func_ptr; 107*d1aec26fSBastien Curutchet (eBPF Foundation) validation_func_t validation_func; 108*d1aec26fSBastien Curutchet (eBPF Foundation) struct xsk_xdp_progs *xdp_progs; 109*d1aec26fSBastien Curutchet (eBPF Foundation) struct bpf_map *xskmap; 110*d1aec26fSBastien Curutchet (eBPF Foundation) struct bpf_program *xdp_prog; 111*d1aec26fSBastien Curutchet (eBPF Foundation) struct ethtool_ringparam ring; 112*d1aec26fSBastien Curutchet (eBPF Foundation) struct set_hw_ring set_ring; 113*d1aec26fSBastien Curutchet (eBPF Foundation) enum test_mode mode; 114*d1aec26fSBastien Curutchet (eBPF Foundation) int ifindex; 115*d1aec26fSBastien Curutchet (eBPF Foundation) int mtu; 116*d1aec26fSBastien Curutchet (eBPF Foundation) u32 bind_flags; 117*d1aec26fSBastien Curutchet (eBPF Foundation) u32 xdp_zc_max_segs; 118*d1aec26fSBastien Curutchet (eBPF Foundation) bool tx_on; 119*d1aec26fSBastien Curutchet (eBPF Foundation) bool rx_on; 120*d1aec26fSBastien Curutchet (eBPF Foundation) bool use_poll; 121*d1aec26fSBastien Curutchet (eBPF Foundation) bool busy_poll; 122*d1aec26fSBastien Curutchet (eBPF Foundation) bool use_fill_ring; 123*d1aec26fSBastien Curutchet (eBPF Foundation) bool release_rx; 124*d1aec26fSBastien Curutchet (eBPF Foundation) bool shared_umem; 125*d1aec26fSBastien Curutchet (eBPF Foundation) bool use_metadata; 126*d1aec26fSBastien Curutchet (eBPF Foundation) bool unaligned_supp; 127*d1aec26fSBastien Curutchet (eBPF Foundation) bool multi_buff_supp; 128*d1aec26fSBastien Curutchet (eBPF Foundation) bool multi_buff_zc_supp; 129*d1aec26fSBastien Curutchet (eBPF Foundation) bool hw_ring_size_supp; 130*d1aec26fSBastien Curutchet (eBPF Foundation) }; 131*d1aec26fSBastien Curutchet (eBPF Foundation) struct ifobject *ifobject_create(void); 132*d1aec26fSBastien Curutchet (eBPF Foundation) void ifobject_delete(struct ifobject *ifobj); 133*d1aec26fSBastien Curutchet (eBPF Foundation) int init_iface(struct ifobject *ifobj, thread_func_t func_ptr); 134*d1aec26fSBastien Curutchet (eBPF Foundation) 135*d1aec26fSBastien Curutchet (eBPF Foundation) int xsk_configure_umem(struct ifobject *ifobj, struct xsk_umem_info *umem, void *buffer, u64 size); 136*d1aec26fSBastien Curutchet (eBPF Foundation) int xsk_configure_socket(struct xsk_socket_info *xsk, struct xsk_umem_info *umem, 137*d1aec26fSBastien Curutchet (eBPF Foundation) struct ifobject *ifobject, bool shared); 138*d1aec26fSBastien Curutchet (eBPF Foundation) 139*d1aec26fSBastien Curutchet (eBPF Foundation) 140*d1aec26fSBastien Curutchet (eBPF Foundation) struct pkt { 141*d1aec26fSBastien Curutchet (eBPF Foundation) int offset; 142*d1aec26fSBastien Curutchet (eBPF Foundation) u32 len; 143*d1aec26fSBastien Curutchet (eBPF Foundation) u32 pkt_nb; 144*d1aec26fSBastien Curutchet (eBPF Foundation) bool valid; 145*d1aec26fSBastien Curutchet (eBPF Foundation) u16 options; 146*d1aec26fSBastien Curutchet (eBPF Foundation) }; 147*d1aec26fSBastien Curutchet (eBPF Foundation) 148*d1aec26fSBastien Curutchet (eBPF Foundation) struct pkt_stream { 149*d1aec26fSBastien Curutchet (eBPF Foundation) u32 nb_pkts; 150*d1aec26fSBastien Curutchet (eBPF Foundation) u32 current_pkt_nb; 151*d1aec26fSBastien Curutchet (eBPF Foundation) struct pkt *pkts; 152*d1aec26fSBastien Curutchet (eBPF Foundation) u32 max_pkt_len; 153*d1aec26fSBastien Curutchet (eBPF Foundation) u32 nb_rx_pkts; 154*d1aec26fSBastien Curutchet (eBPF Foundation) u32 nb_valid_entries; 155*d1aec26fSBastien Curutchet (eBPF Foundation) bool verbatim; 156*d1aec26fSBastien Curutchet (eBPF Foundation) }; 157*d1aec26fSBastien Curutchet (eBPF Foundation) 158*d1aec26fSBastien Curutchet (eBPF Foundation) static inline bool pkt_continues(u32 options) 159*d1aec26fSBastien Curutchet (eBPF Foundation) { 160*d1aec26fSBastien Curutchet (eBPF Foundation) return options & XDP_PKT_CONTD; 161*d1aec26fSBastien Curutchet (eBPF Foundation) } 162*d1aec26fSBastien Curutchet (eBPF Foundation) 163*d1aec26fSBastien Curutchet (eBPF Foundation) struct pkt_stream *pkt_stream_generate(u32 nb_pkts, u32 pkt_len); 164*d1aec26fSBastien Curutchet (eBPF Foundation) void pkt_stream_delete(struct pkt_stream *pkt_stream); 165*d1aec26fSBastien Curutchet (eBPF Foundation) void pkt_stream_reset(struct pkt_stream *pkt_stream); 166*d1aec26fSBastien Curutchet (eBPF Foundation) void pkt_stream_restore_default(struct test_spec *test); 167*d1aec26fSBastien Curutchet (eBPF Foundation) 168*d1aec26fSBastien Curutchet (eBPF Foundation) struct test_spec { 169*d1aec26fSBastien Curutchet (eBPF Foundation) struct ifobject *ifobj_tx; 170*d1aec26fSBastien Curutchet (eBPF Foundation) struct ifobject *ifobj_rx; 171*d1aec26fSBastien Curutchet (eBPF Foundation) struct pkt_stream *tx_pkt_stream_default; 172*d1aec26fSBastien Curutchet (eBPF Foundation) struct pkt_stream *rx_pkt_stream_default; 173*d1aec26fSBastien Curutchet (eBPF Foundation) struct bpf_program *xdp_prog_rx; 174*d1aec26fSBastien Curutchet (eBPF Foundation) struct bpf_program *xdp_prog_tx; 175*d1aec26fSBastien Curutchet (eBPF Foundation) struct bpf_map *xskmap_rx; 176*d1aec26fSBastien Curutchet (eBPF Foundation) struct bpf_map *xskmap_tx; 177*d1aec26fSBastien Curutchet (eBPF Foundation) test_func_t test_func; 178*d1aec26fSBastien Curutchet (eBPF Foundation) int mtu; 179*d1aec26fSBastien Curutchet (eBPF Foundation) u16 total_steps; 180*d1aec26fSBastien Curutchet (eBPF Foundation) u16 current_step; 181*d1aec26fSBastien Curutchet (eBPF Foundation) u16 nb_sockets; 182*d1aec26fSBastien Curutchet (eBPF Foundation) bool fail; 183*d1aec26fSBastien Curutchet (eBPF Foundation) bool set_ring; 184*d1aec26fSBastien Curutchet (eBPF Foundation) bool adjust_tail; 185*d1aec26fSBastien Curutchet (eBPF Foundation) bool adjust_tail_support; 186*d1aec26fSBastien Curutchet (eBPF Foundation) enum test_mode mode; 187*d1aec26fSBastien Curutchet (eBPF Foundation) char name[MAX_TEST_NAME_SIZE]; 188*d1aec26fSBastien Curutchet (eBPF Foundation) }; 189*d1aec26fSBastien Curutchet (eBPF Foundation) 190*d1aec26fSBastien Curutchet (eBPF Foundation) #define busy_poll_string(test) (test)->ifobj_tx->busy_poll ? "BUSY-POLL " : "" 191*d1aec26fSBastien Curutchet (eBPF Foundation) static inline char *mode_string(struct test_spec *test) 192*d1aec26fSBastien Curutchet (eBPF Foundation) { 193*d1aec26fSBastien Curutchet (eBPF Foundation) switch (test->mode) { 194*d1aec26fSBastien Curutchet (eBPF Foundation) case TEST_MODE_SKB: 195*d1aec26fSBastien Curutchet (eBPF Foundation) return "SKB"; 196*d1aec26fSBastien Curutchet (eBPF Foundation) case TEST_MODE_DRV: 197*d1aec26fSBastien Curutchet (eBPF Foundation) return "DRV"; 198*d1aec26fSBastien Curutchet (eBPF Foundation) case TEST_MODE_ZC: 199*d1aec26fSBastien Curutchet (eBPF Foundation) return "ZC"; 200*d1aec26fSBastien Curutchet (eBPF Foundation) default: 201*d1aec26fSBastien Curutchet (eBPF Foundation) return "BOGUS"; 202*d1aec26fSBastien Curutchet (eBPF Foundation) } 203*d1aec26fSBastien Curutchet (eBPF Foundation) } 204*d1aec26fSBastien Curutchet (eBPF Foundation) 205*d1aec26fSBastien Curutchet (eBPF Foundation) void test_init(struct test_spec *test, struct ifobject *ifobj_tx, 206*d1aec26fSBastien Curutchet (eBPF Foundation) struct ifobject *ifobj_rx, enum test_mode mode, 207*d1aec26fSBastien Curutchet (eBPF Foundation) const struct test_spec *test_to_run); 208*d1aec26fSBastien Curutchet (eBPF Foundation) 209*d1aec26fSBastien Curutchet (eBPF Foundation) int testapp_adjust_tail_grow(struct test_spec *test); 210*d1aec26fSBastien Curutchet (eBPF Foundation) int testapp_adjust_tail_grow_mb(struct test_spec *test); 211*d1aec26fSBastien Curutchet (eBPF Foundation) int testapp_adjust_tail_shrink(struct test_spec *test); 212*d1aec26fSBastien Curutchet (eBPF Foundation) int testapp_adjust_tail_shrink_mb(struct test_spec *test); 213*d1aec26fSBastien Curutchet (eBPF Foundation) int testapp_aligned_inv_desc(struct test_spec *test); 214*d1aec26fSBastien Curutchet (eBPF Foundation) int testapp_aligned_inv_desc_2k_frame(struct test_spec *test); 215*d1aec26fSBastien Curutchet (eBPF Foundation) int testapp_aligned_inv_desc_mb(struct test_spec *test); 216*d1aec26fSBastien Curutchet (eBPF Foundation) int testapp_bidirectional(struct test_spec *test); 217*d1aec26fSBastien Curutchet (eBPF Foundation) int testapp_headroom(struct test_spec *test); 218*d1aec26fSBastien Curutchet (eBPF Foundation) int testapp_hw_sw_max_ring_size(struct test_spec *test); 219*d1aec26fSBastien Curutchet (eBPF Foundation) int testapp_hw_sw_min_ring_size(struct test_spec *test); 220*d1aec26fSBastien Curutchet (eBPF Foundation) int testapp_poll_rx(struct test_spec *test); 221*d1aec26fSBastien Curutchet (eBPF Foundation) int testapp_poll_rxq_tmout(struct test_spec *test); 222*d1aec26fSBastien Curutchet (eBPF Foundation) int testapp_poll_tx(struct test_spec *test); 223*d1aec26fSBastien Curutchet (eBPF Foundation) int testapp_poll_txq_tmout(struct test_spec *test); 224*d1aec26fSBastien Curutchet (eBPF Foundation) int testapp_send_receive(struct test_spec *test); 225*d1aec26fSBastien Curutchet (eBPF Foundation) int testapp_send_receive_2k_frame(struct test_spec *test); 226*d1aec26fSBastien Curutchet (eBPF Foundation) int testapp_send_receive_mb(struct test_spec *test); 227*d1aec26fSBastien Curutchet (eBPF Foundation) int testapp_send_receive_unaligned(struct test_spec *test); 228*d1aec26fSBastien Curutchet (eBPF Foundation) int testapp_send_receive_unaligned_mb(struct test_spec *test); 229*d1aec26fSBastien Curutchet (eBPF Foundation) int testapp_single_pkt(struct test_spec *test); 230*d1aec26fSBastien Curutchet (eBPF Foundation) int testapp_stats_fill_empty(struct test_spec *test); 231*d1aec26fSBastien Curutchet (eBPF Foundation) int testapp_stats_rx_dropped(struct test_spec *test); 232*d1aec26fSBastien Curutchet (eBPF Foundation) int testapp_stats_tx_invalid_descs(struct test_spec *test); 233*d1aec26fSBastien Curutchet (eBPF Foundation) int testapp_stats_rx_full(struct test_spec *test); 234*d1aec26fSBastien Curutchet (eBPF Foundation) int testapp_teardown(struct test_spec *test); 235*d1aec26fSBastien Curutchet (eBPF Foundation) int testapp_too_many_frags(struct test_spec *test); 236*d1aec26fSBastien Curutchet (eBPF Foundation) int testapp_tx_queue_consumer(struct test_spec *test); 237*d1aec26fSBastien Curutchet (eBPF Foundation) int testapp_unaligned_inv_desc(struct test_spec *test); 238*d1aec26fSBastien Curutchet (eBPF Foundation) int testapp_unaligned_inv_desc_4001_frame(struct test_spec *test); 239*d1aec26fSBastien Curutchet (eBPF Foundation) int testapp_unaligned_inv_desc_mb(struct test_spec *test); 240*d1aec26fSBastien Curutchet (eBPF Foundation) int testapp_xdp_drop(struct test_spec *test); 241*d1aec26fSBastien Curutchet (eBPF Foundation) int testapp_xdp_metadata(struct test_spec *test); 242*d1aec26fSBastien Curutchet (eBPF Foundation) int testapp_xdp_metadata_mb(struct test_spec *test); 243*d1aec26fSBastien Curutchet (eBPF Foundation) int testapp_xdp_prog_cleanup(struct test_spec *test); 244*d1aec26fSBastien Curutchet (eBPF Foundation) int testapp_xdp_shared_umem(struct test_spec *test); 245*d1aec26fSBastien Curutchet (eBPF Foundation) 246*d1aec26fSBastien Curutchet (eBPF Foundation) void *worker_testapp_validate_rx(void *arg); 247*d1aec26fSBastien Curutchet (eBPF Foundation) void *worker_testapp_validate_tx(void *arg); 248*d1aec26fSBastien Curutchet (eBPF Foundation) 249*d1aec26fSBastien Curutchet (eBPF Foundation) static const struct test_spec tests[] = { 250*d1aec26fSBastien Curutchet (eBPF Foundation) {.name = "SEND_RECEIVE", .test_func = testapp_send_receive}, 251*d1aec26fSBastien Curutchet (eBPF Foundation) {.name = "SEND_RECEIVE_2K_FRAME", .test_func = testapp_send_receive_2k_frame}, 252*d1aec26fSBastien Curutchet (eBPF Foundation) {.name = "SEND_RECEIVE_SINGLE_PKT", .test_func = testapp_single_pkt}, 253*d1aec26fSBastien Curutchet (eBPF Foundation) {.name = "POLL_RX", .test_func = testapp_poll_rx}, 254*d1aec26fSBastien Curutchet (eBPF Foundation) {.name = "POLL_TX", .test_func = testapp_poll_tx}, 255*d1aec26fSBastien Curutchet (eBPF Foundation) {.name = "POLL_RXQ_FULL", .test_func = testapp_poll_rxq_tmout}, 256*d1aec26fSBastien Curutchet (eBPF Foundation) {.name = "POLL_TXQ_FULL", .test_func = testapp_poll_txq_tmout}, 257*d1aec26fSBastien Curutchet (eBPF Foundation) {.name = "ALIGNED_INV_DESC", .test_func = testapp_aligned_inv_desc}, 258*d1aec26fSBastien Curutchet (eBPF Foundation) {.name = "ALIGNED_INV_DESC_2K_FRAME_SIZE", .test_func = testapp_aligned_inv_desc_2k_frame}, 259*d1aec26fSBastien Curutchet (eBPF Foundation) {.name = "UMEM_HEADROOM", .test_func = testapp_headroom}, 260*d1aec26fSBastien Curutchet (eBPF Foundation) {.name = "BIDIRECTIONAL", .test_func = testapp_bidirectional}, 261*d1aec26fSBastien Curutchet (eBPF Foundation) {.name = "STAT_RX_DROPPED", .test_func = testapp_stats_rx_dropped}, 262*d1aec26fSBastien Curutchet (eBPF Foundation) {.name = "STAT_TX_INVALID", .test_func = testapp_stats_tx_invalid_descs}, 263*d1aec26fSBastien Curutchet (eBPF Foundation) {.name = "STAT_RX_FULL", .test_func = testapp_stats_rx_full}, 264*d1aec26fSBastien Curutchet (eBPF Foundation) {.name = "STAT_FILL_EMPTY", .test_func = testapp_stats_fill_empty}, 265*d1aec26fSBastien Curutchet (eBPF Foundation) {.name = "XDP_PROG_CLEANUP", .test_func = testapp_xdp_prog_cleanup}, 266*d1aec26fSBastien Curutchet (eBPF Foundation) {.name = "XDP_DROP_HALF", .test_func = testapp_xdp_drop}, 267*d1aec26fSBastien Curutchet (eBPF Foundation) {.name = "XDP_SHARED_UMEM", .test_func = testapp_xdp_shared_umem}, 268*d1aec26fSBastien Curutchet (eBPF Foundation) {.name = "XDP_METADATA_COPY", .test_func = testapp_xdp_metadata}, 269*d1aec26fSBastien Curutchet (eBPF Foundation) {.name = "XDP_METADATA_COPY_MULTI_BUFF", .test_func = testapp_xdp_metadata_mb}, 270*d1aec26fSBastien Curutchet (eBPF Foundation) {.name = "ALIGNED_INV_DESC_MULTI_BUFF", .test_func = testapp_aligned_inv_desc_mb}, 271*d1aec26fSBastien Curutchet (eBPF Foundation) {.name = "TOO_MANY_FRAGS", .test_func = testapp_too_many_frags}, 272*d1aec26fSBastien Curutchet (eBPF Foundation) {.name = "XDP_ADJUST_TAIL_SHRINK", .test_func = testapp_adjust_tail_shrink}, 273*d1aec26fSBastien Curutchet (eBPF Foundation) {.name = "TX_QUEUE_CONSUMER", .test_func = testapp_tx_queue_consumer}, 274*d1aec26fSBastien Curutchet (eBPF Foundation) }; 275*d1aec26fSBastien Curutchet (eBPF Foundation) 276*d1aec26fSBastien Curutchet (eBPF Foundation) static const struct test_spec ci_skip_tests[] = { 277*d1aec26fSBastien Curutchet (eBPF Foundation) /* Flaky tests */ 278*d1aec26fSBastien Curutchet (eBPF Foundation) {.name = "XDP_ADJUST_TAIL_SHRINK_MULTI_BUFF", .test_func = testapp_adjust_tail_shrink_mb}, 279*d1aec26fSBastien Curutchet (eBPF Foundation) {.name = "XDP_ADJUST_TAIL_GROW", .test_func = testapp_adjust_tail_grow}, 280*d1aec26fSBastien Curutchet (eBPF Foundation) {.name = "XDP_ADJUST_TAIL_GROW_MULTI_BUFF", .test_func = testapp_adjust_tail_grow_mb}, 281*d1aec26fSBastien Curutchet (eBPF Foundation) {.name = "SEND_RECEIVE_9K_PACKETS", .test_func = testapp_send_receive_mb}, 282*d1aec26fSBastien Curutchet (eBPF Foundation) /* Tests with huge page dependency */ 283*d1aec26fSBastien Curutchet (eBPF Foundation) {.name = "SEND_RECEIVE_UNALIGNED", .test_func = testapp_send_receive_unaligned}, 284*d1aec26fSBastien Curutchet (eBPF Foundation) {.name = "UNALIGNED_INV_DESC", .test_func = testapp_unaligned_inv_desc}, 285*d1aec26fSBastien Curutchet (eBPF Foundation) {.name = "UNALIGNED_INV_DESC_4001_FRAME_SIZE", 286*d1aec26fSBastien Curutchet (eBPF Foundation) .test_func = testapp_unaligned_inv_desc_4001_frame}, 287*d1aec26fSBastien Curutchet (eBPF Foundation) {.name = "SEND_RECEIVE_UNALIGNED_9K_PACKETS", 288*d1aec26fSBastien Curutchet (eBPF Foundation) .test_func = testapp_send_receive_unaligned_mb}, 289*d1aec26fSBastien Curutchet (eBPF Foundation) {.name = "UNALIGNED_INV_DESC_MULTI_BUFF", .test_func = testapp_unaligned_inv_desc_mb}, 290*d1aec26fSBastien Curutchet (eBPF Foundation) /* Test with HW ring size dependency */ 291*d1aec26fSBastien Curutchet (eBPF Foundation) {.name = "HW_SW_MIN_RING_SIZE", .test_func = testapp_hw_sw_min_ring_size}, 292*d1aec26fSBastien Curutchet (eBPF Foundation) {.name = "HW_SW_MAX_RING_SIZE", .test_func = testapp_hw_sw_max_ring_size}, 293*d1aec26fSBastien Curutchet (eBPF Foundation) /* Too long test */ 294*d1aec26fSBastien Curutchet (eBPF Foundation) {.name = "TEARDOWN", .test_func = testapp_teardown}, 295*d1aec26fSBastien Curutchet (eBPF Foundation) }; 296*d1aec26fSBastien Curutchet (eBPF Foundation) 297*d1aec26fSBastien Curutchet (eBPF Foundation) 298*d1aec26fSBastien Curutchet (eBPF Foundation) #endif /* TEST_XSK_H_ */ 299