xref: /openbmc/libmctp/tests/test-utils.c (revision a3830d259a53269f7b9c8b46129e863ebed1b188)
13d36ee2eSJeremy Kerr /* SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later */
218925116SJeremy Kerr 
3e915aad4SRashmica Gupta #ifdef NDEBUG
4e915aad4SRashmica Gupta #undef NDEBUG
5e915aad4SRashmica Gupta #endif
6e915aad4SRashmica Gupta 
718925116SJeremy Kerr #include <string.h>
818925116SJeremy Kerr #include <assert.h>
918925116SJeremy Kerr 
1018925116SJeremy Kerr #include <libmctp.h>
1118925116SJeremy Kerr #include <libmctp-alloc.h>
1218925116SJeremy Kerr 
1318925116SJeremy Kerr #include "test-utils.h"
1418925116SJeremy Kerr 
150a96544aSMatt Johnston /* mctp_binding_test can be used for loopback in tests. Senders must use
160a96544aSMatt Johnston  * the local EID as the destination */
1718925116SJeremy Kerr struct mctp_binding_test {
1818925116SJeremy Kerr 	struct mctp_binding binding;
19*a3830d25SMatt Johnston 	uint8_t tx_storage[MCTP_PKTBUF_SIZE(MCTP_BTU)] PKTBUF_STORAGE_ALIGN;
2018925116SJeremy Kerr };
2118925116SJeremy Kerr 
mctp_binding_test_tx(struct mctp_binding * b,struct mctp_pktbuf * pkt)220a96544aSMatt Johnston static int mctp_binding_test_tx(struct mctp_binding *b, struct mctp_pktbuf *pkt)
2318925116SJeremy Kerr {
240a96544aSMatt Johnston 	mctp_bus_rx(b, pkt);
25a501a580SAndrew Jeffery 	return 0;
2618925116SJeremy Kerr }
2718925116SJeremy Kerr 
mctp_binding_test_init(void)2818925116SJeremy Kerr struct mctp_binding_test *mctp_binding_test_init(void)
2918925116SJeremy Kerr {
3018925116SJeremy Kerr 	struct mctp_binding_test *test;
3118925116SJeremy Kerr 	test = __mctp_alloc(sizeof(*test));
32225c46dcSAndrew Jeffery 	memset(test, '\0', sizeof(*test));
3318925116SJeremy Kerr 	test->binding.name = "test";
3418925116SJeremy Kerr 	test->binding.version = 1;
3518925116SJeremy Kerr 	test->binding.tx = mctp_binding_test_tx;
3673c268e4SAndrew Jeffery 	test->binding.pkt_size = MCTP_PACKET_SIZE(MCTP_BTU);
3739da3d03SAndrew Jeffery 	test->binding.pkt_header = 0;
3839da3d03SAndrew Jeffery 	test->binding.pkt_trailer = 0;
394a09e1dcSMatt Johnston 	test->binding.tx_storage = test->tx_storage;
4018925116SJeremy Kerr 	return test;
4118925116SJeremy Kerr }
4218925116SJeremy Kerr 
mctp_binding_test_destroy(struct mctp_binding_test * test)435c5673b5SAndrew Jeffery void mctp_binding_test_destroy(struct mctp_binding_test *test)
445c5673b5SAndrew Jeffery {
455c5673b5SAndrew Jeffery 	__mctp_free(test);
465c5673b5SAndrew Jeffery }
475c5673b5SAndrew Jeffery 
mctp_binding_test_rx_raw(struct mctp_binding_test * test,void * buf,size_t len)4869eda31bSAndrew Jeffery void mctp_binding_test_rx_raw(struct mctp_binding_test *test, void *buf,
4969eda31bSAndrew Jeffery 			      size_t len)
5018925116SJeremy Kerr {
5118925116SJeremy Kerr 	struct mctp_pktbuf *pkt;
5218925116SJeremy Kerr 
53df15f7e9SJeremy Kerr 	pkt = mctp_pktbuf_alloc(&test->binding, len);
5418925116SJeremy Kerr 	assert(pkt);
5518925116SJeremy Kerr 	memcpy(mctp_pktbuf_hdr(pkt), buf, len);
5618925116SJeremy Kerr 	mctp_bus_rx(&test->binding, pkt);
574a09e1dcSMatt Johnston 	mctp_pktbuf_free(pkt);
5818925116SJeremy Kerr }
5918925116SJeremy Kerr 
mctp_binding_test_register_bus(struct mctp_binding_test * binding,struct mctp * mctp,mctp_eid_t eid)6018925116SJeremy Kerr void mctp_binding_test_register_bus(struct mctp_binding_test *binding,
6118925116SJeremy Kerr 				    struct mctp *mctp, mctp_eid_t eid)
6218925116SJeremy Kerr {
6318925116SJeremy Kerr 	mctp_register_bus(mctp, &binding->binding, eid);
6418925116SJeremy Kerr }
6518925116SJeremy Kerr 
mctp_test_stack_init(struct mctp ** mctp,struct mctp_binding_test ** binding,mctp_eid_t eid)6618925116SJeremy Kerr void mctp_test_stack_init(struct mctp **mctp,
6769eda31bSAndrew Jeffery 			  struct mctp_binding_test **binding, mctp_eid_t eid)
6818925116SJeremy Kerr {
6918925116SJeremy Kerr 	*mctp = mctp_init();
7018925116SJeremy Kerr 	assert(*mctp);
7118925116SJeremy Kerr 
7218925116SJeremy Kerr 	*binding = mctp_binding_test_init();
7318925116SJeremy Kerr 	assert(*binding);
7418925116SJeremy Kerr 
7518925116SJeremy Kerr 	mctp_binding_test_register_bus(*binding, *mctp, eid);
760a96544aSMatt Johnston 	mctp_binding_set_tx_enabled(&(*binding)->binding, true);
7718925116SJeremy Kerr }
78