1*9a6ba89cSAndrew Jeffery /* SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later */ 2*9a6ba89cSAndrew Jeffery #ifndef LIBPLDM_TRANSPORT_TEST_H 3*9a6ba89cSAndrew Jeffery #define LIBPLDM_TRANSPORT_TEST_H 4*9a6ba89cSAndrew Jeffery 5*9a6ba89cSAndrew Jeffery #include "libpldm/base.h" 6*9a6ba89cSAndrew Jeffery 7*9a6ba89cSAndrew Jeffery #include <stddef.h> 8*9a6ba89cSAndrew Jeffery #include <stdint.h> 9*9a6ba89cSAndrew Jeffery #include <sys/timerfd.h> 10*9a6ba89cSAndrew Jeffery 11*9a6ba89cSAndrew Jeffery #ifdef __cplusplus 12*9a6ba89cSAndrew Jeffery extern "C" { 13*9a6ba89cSAndrew Jeffery #endif 14*9a6ba89cSAndrew Jeffery 15*9a6ba89cSAndrew Jeffery enum pldm_transport_test_element { 16*9a6ba89cSAndrew Jeffery PLDM_TRANSPORT_TEST_ELEMENT_MSG_SEND, 17*9a6ba89cSAndrew Jeffery PLDM_TRANSPORT_TEST_ELEMENT_MSG_RECV, 18*9a6ba89cSAndrew Jeffery PLDM_TRANSPORT_TEST_ELEMENT_LATENCY, 19*9a6ba89cSAndrew Jeffery }; 20*9a6ba89cSAndrew Jeffery 21*9a6ba89cSAndrew Jeffery struct pldm_transport_test_msg_send { 22*9a6ba89cSAndrew Jeffery pldm_tid_t dst; 23*9a6ba89cSAndrew Jeffery const void *msg; 24*9a6ba89cSAndrew Jeffery size_t len; 25*9a6ba89cSAndrew Jeffery }; 26*9a6ba89cSAndrew Jeffery 27*9a6ba89cSAndrew Jeffery struct pldm_transport_test_msg_recv { 28*9a6ba89cSAndrew Jeffery pldm_tid_t src; 29*9a6ba89cSAndrew Jeffery const void *msg; 30*9a6ba89cSAndrew Jeffery size_t len; 31*9a6ba89cSAndrew Jeffery }; 32*9a6ba89cSAndrew Jeffery 33*9a6ba89cSAndrew Jeffery struct pldm_transport_test_descriptor { 34*9a6ba89cSAndrew Jeffery enum pldm_transport_test_element type; 35*9a6ba89cSAndrew Jeffery union { 36*9a6ba89cSAndrew Jeffery struct pldm_transport_test_msg_send send_msg; 37*9a6ba89cSAndrew Jeffery struct pldm_transport_test_msg_recv recv_msg; 38*9a6ba89cSAndrew Jeffery struct itimerspec latency; 39*9a6ba89cSAndrew Jeffery }; 40*9a6ba89cSAndrew Jeffery }; 41*9a6ba89cSAndrew Jeffery 42*9a6ba89cSAndrew Jeffery struct pldm_transport_test; 43*9a6ba89cSAndrew Jeffery 44*9a6ba89cSAndrew Jeffery int pldm_transport_test_init(struct pldm_transport_test **ctx, 45*9a6ba89cSAndrew Jeffery const struct pldm_transport_test_descriptor *seq, 46*9a6ba89cSAndrew Jeffery size_t count); 47*9a6ba89cSAndrew Jeffery void pldm_transport_test_destroy(struct pldm_transport_test *ctx); 48*9a6ba89cSAndrew Jeffery struct pldm_transport * 49*9a6ba89cSAndrew Jeffery pldm_transport_test_core(struct pldm_transport_test *ctx); 50*9a6ba89cSAndrew Jeffery 51*9a6ba89cSAndrew Jeffery #if PLDM_HAS_POLL 52*9a6ba89cSAndrew Jeffery struct pollfd; 53*9a6ba89cSAndrew Jeffery int pldm_transport_test_init_pollfd(struct pldm_transport *ctx, 54*9a6ba89cSAndrew Jeffery struct pollfd *pollfd); 55*9a6ba89cSAndrew Jeffery #endif 56*9a6ba89cSAndrew Jeffery 57*9a6ba89cSAndrew Jeffery #ifdef __cplusplus 58*9a6ba89cSAndrew Jeffery } 59*9a6ba89cSAndrew Jeffery #endif 60*9a6ba89cSAndrew Jeffery 61*9a6ba89cSAndrew Jeffery #endif 62