Test API to control rxq_stats BPF program

Overview

Definition of API to control rxq_stats BPF program. More…

// typedefs

typedef struct tapi_bpf_rxq_stats tapi_bpf_rxq_stats;

// structs

struct tapi_bpf_rxq_stats;

// global functions

te_errno tapi_bpf_rxq_stats_init(const char* ta, const char* if_name, const char* prog_dir, unsigned int* bpf_id);
te_errno tapi_bpf_rxq_stats_fini(const char* ta, const char* if_name, unsigned int bpf_id);
te_errno tapi_bpf_rxq_stats_get_id(const char* ta, const char* if_name, unsigned int* bpf_id);
te_errno tapi_bpf_rxq_stats_set_params(const char* ta, unsigned int bpf_id, int addr_family, const struct sockaddr* src_addr, const struct sockaddr* dst_addr, int protocol, bool enable);
te_errno tapi_bpf_rxq_stats_enable(const char* ta, unsigned int bpf_id, bool enable);
te_errno tapi_bpf_rxq_stats_clear(const char* ta, unsigned int bpf_id);
te_errno tapi_bpf_rxq_stats_reset(const char* ta, unsigned int bpf_id);
te_errno tapi_bpf_rxq_stats_read(const char* ta, unsigned int bpf_id, tapi_bpf_rxq_stats** stats_out, unsigned int* count_out);
void tapi_bpf_rxq_stats_print(const char* title, tapi_bpf_rxq_stats* stats, unsigned int count);
te_errno tapi_bpf_rxq_stats_check_single(const char* ta, unsigned int bpf_id, unsigned int exp_queue, unsigned int exp_pkts, rpc_socket_type sock_type, const char* vpref);

// macros

#define TAPI_BPF_RXQ_STATS_XSK_MAP

Detailed Documentation

Definition of API to control rxq_stats BPF program.

Copyright (C) 2022-2022 OKTET Labs Ltd. All rights reserved.

Typedefs

typedef struct tapi_bpf_rxq_stats tapi_bpf_rxq_stats

Per-queue received packets count

Global Functions

te_errno tapi_bpf_rxq_stats_init(const char* ta, const char* if_name, const char* prog_dir, unsigned int* bpf_id)

Initialize “rxq_stats” BPF object, link it to an interface.

Parameters:

ta

Test Agent

if_name

Interface name

prog_dir

Where rxq_stats object file is located (may be a path relative to TA directory)

bpf_id

Where to save BPF object ID (may be NULL)

Returns:

Status code.

te_errno tapi_bpf_rxq_stats_fini(const char* ta, const char* if_name, unsigned int bpf_id)

Unlink “rxq_stats” program from interface, destroy BPF object.

Parameters:

ta

Test Agent

if_name

Interface name

bpf_id

BPF object ID

Returns:

Status code.

te_errno tapi_bpf_rxq_stats_get_id(const char* ta, const char* if_name, unsigned int* bpf_id)

Get ID of BPF object of “rxq_stats” program linked to a given interface.

Parameters:

ta

Test Agent

if_name

Interface name

bpf_id

Where to save BPF object ID

Returns:

Status code.

te_errno tapi_bpf_rxq_stats_set_params(const char* ta, unsigned int bpf_id, int addr_family, const struct sockaddr* src_addr, const struct sockaddr* dst_addr, int protocol, bool enable)

Set parameters for “rxq_stats” program.

Parameters:

ta

Test Agent name

bpf_id

BPF object ID

addr_family

AF_INET or AF_INET6

src_addr

Source address/port

dst_addr

Destination address/port

protocol

IP protocol (IPPROTO_UDP, IPPROTO_TCP)

enable

Whether counting of packets should be enabled now

Returns:

Status code.

te_errno tapi_bpf_rxq_stats_enable(const char* ta, unsigned int bpf_id, bool enable)

Enable or disable packets counting in “rxq_stats” program.

Parameters:

ta

Test Agent name

bpf_id

BPF object ID

enable

Whether counting of packets should be enabled now

Returns:

Status code.

te_errno tapi_bpf_rxq_stats_clear(const char* ta, unsigned int bpf_id)

Clear statistics collected by “rxq_stats” program.

Parameters:

ta

Test Agent name

bpf_id

BPF object ID

Returns:

Status code.

te_errno tapi_bpf_rxq_stats_read(const char* ta, unsigned int bpf_id, tapi_bpf_rxq_stats** stats_out, unsigned int* count_out)

Get statistics collected by “rxq_stats” program.

Parameters:

ta

Test Agent name

bpf_id

BPF object ID

stats_out

Where to save statistics (number of packets received by every Rx queue)

count_out

Where to save number of collected statistics

Returns:

Status code.

void tapi_bpf_rxq_stats_print(const char* title, tapi_bpf_rxq_stats* stats, unsigned int count)

Log statistics retrieved with tapi_bpf_rxq_stats_read().

Parameters:

title

Title to print on the first line (if NULL or empty, default title will be used)

stats

Array of statistics

count

Number of elements in the array

te_errno tapi_bpf_rxq_stats_check_single(const char* ta, unsigned int bpf_id, unsigned int exp_queue, unsigned int exp_pkts, rpc_socket_type sock_type, const char* vpref)

Check whether expected Rx queue received all the expected packets. It is assumed that statistics were cleared before sending packets.

This function will print verdict in case of failure.

Parameters:

ta

Test Agent name

bpf_id

BPF object ID

exp_queue

Expected Rx queue ID

exp_pkts

Expected number of received packets

sock_type

Socket type (RPC_SOCK_STREAM, RPC_SOCK_DGRAM)

vpref

Prefix to use in verdicts

Returns:

Status code.

Macros

#define TAPI_BPF_RXQ_STATS_XSK_MAP

Name of the XSK map that can be used to redirect packets to AF_XDP sockets.