19a6ba89cSAndrew Jeffery /* SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later */ 29a6ba89cSAndrew Jeffery #ifndef LIBPLDM_TRANSPORT_TEST_H 39a6ba89cSAndrew Jeffery #define LIBPLDM_TRANSPORT_TEST_H 49a6ba89cSAndrew Jeffery 5*efb40069SAndrew Jeffery #include <libpldm/base.h> 69a6ba89cSAndrew Jeffery 79a6ba89cSAndrew Jeffery #include <stddef.h> 89a6ba89cSAndrew Jeffery #include <stdint.h> 99a6ba89cSAndrew Jeffery #include <sys/timerfd.h> 109a6ba89cSAndrew Jeffery 119a6ba89cSAndrew Jeffery #ifdef __cplusplus 129a6ba89cSAndrew Jeffery extern "C" { 139a6ba89cSAndrew Jeffery #endif 149a6ba89cSAndrew Jeffery 159a6ba89cSAndrew Jeffery enum pldm_transport_test_element { 169a6ba89cSAndrew Jeffery PLDM_TRANSPORT_TEST_ELEMENT_MSG_SEND, 179a6ba89cSAndrew Jeffery PLDM_TRANSPORT_TEST_ELEMENT_MSG_RECV, 189a6ba89cSAndrew Jeffery PLDM_TRANSPORT_TEST_ELEMENT_LATENCY, 199a6ba89cSAndrew Jeffery }; 209a6ba89cSAndrew Jeffery 219a6ba89cSAndrew Jeffery struct pldm_transport_test_msg_send { 229a6ba89cSAndrew Jeffery pldm_tid_t dst; 239a6ba89cSAndrew Jeffery const void *msg; 249a6ba89cSAndrew Jeffery size_t len; 259a6ba89cSAndrew Jeffery }; 269a6ba89cSAndrew Jeffery 279a6ba89cSAndrew Jeffery struct pldm_transport_test_msg_recv { 289a6ba89cSAndrew Jeffery pldm_tid_t src; 299a6ba89cSAndrew Jeffery const void *msg; 309a6ba89cSAndrew Jeffery size_t len; 319a6ba89cSAndrew Jeffery }; 329a6ba89cSAndrew Jeffery 339a6ba89cSAndrew Jeffery struct pldm_transport_test_descriptor { 349a6ba89cSAndrew Jeffery enum pldm_transport_test_element type; 359a6ba89cSAndrew Jeffery union { 369a6ba89cSAndrew Jeffery struct pldm_transport_test_msg_send send_msg; 379a6ba89cSAndrew Jeffery struct pldm_transport_test_msg_recv recv_msg; 389a6ba89cSAndrew Jeffery struct itimerspec latency; 399a6ba89cSAndrew Jeffery }; 409a6ba89cSAndrew Jeffery }; 419a6ba89cSAndrew Jeffery 429a6ba89cSAndrew Jeffery struct pldm_transport_test; 439a6ba89cSAndrew Jeffery 449a6ba89cSAndrew Jeffery int pldm_transport_test_init(struct pldm_transport_test **ctx, 459a6ba89cSAndrew Jeffery const struct pldm_transport_test_descriptor *seq, 469a6ba89cSAndrew Jeffery size_t count); 479a6ba89cSAndrew Jeffery void pldm_transport_test_destroy(struct pldm_transport_test *ctx); 489a6ba89cSAndrew Jeffery struct pldm_transport * 499a6ba89cSAndrew Jeffery pldm_transport_test_core(struct pldm_transport_test *ctx); 509a6ba89cSAndrew Jeffery 519a6ba89cSAndrew Jeffery #if PLDM_HAS_POLL 529a6ba89cSAndrew Jeffery struct pollfd; 539a6ba89cSAndrew Jeffery int pldm_transport_test_init_pollfd(struct pldm_transport *ctx, 549a6ba89cSAndrew Jeffery struct pollfd *pollfd); 559a6ba89cSAndrew Jeffery #endif 569a6ba89cSAndrew Jeffery 579a6ba89cSAndrew Jeffery #ifdef __cplusplus 589a6ba89cSAndrew Jeffery } 599a6ba89cSAndrew Jeffery #endif 609a6ba89cSAndrew Jeffery 619a6ba89cSAndrew Jeffery #endif 62