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