xref: /openbmc/libpldm/src/transport/test.h (revision efb40069)
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