1 /* SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later */ 2 3 #include <string.h> 4 #include <assert.h> 5 6 #include <libmctp.h> 7 #include <libmctp-alloc.h> 8 9 #include "test-utils.h" 10 11 struct mctp_binding_test { 12 struct mctp_binding binding; 13 }; 14 15 static int mctp_binding_test_tx(struct mctp_binding *b __attribute__((unused)), 16 struct mctp_pktbuf *pkt __attribute__((unused))) 17 { 18 /* we are not expecting TX packets */ 19 assert(0); 20 return 0; 21 } 22 23 struct mctp_binding_test *mctp_binding_test_init(void) 24 { 25 struct mctp_binding_test *test; 26 27 test = __mctp_alloc(sizeof(*test)); 28 memset(test, '\0', sizeof(*test)); 29 test->binding.name = "test"; 30 test->binding.version = 1; 31 test->binding.tx = mctp_binding_test_tx; 32 test->binding.pkt_size = MCTP_PACKET_SIZE(MCTP_BTU); 33 test->binding.pkt_header = 0; 34 test->binding.pkt_trailer = 0; 35 return test; 36 } 37 38 void mctp_binding_test_destroy(struct mctp_binding_test *test) 39 { 40 __mctp_free(test); 41 } 42 43 void mctp_binding_test_rx_raw(struct mctp_binding_test *test, void *buf, 44 size_t len) 45 { 46 struct mctp_pktbuf *pkt; 47 48 pkt = mctp_pktbuf_alloc(&test->binding, len); 49 assert(pkt); 50 memcpy(mctp_pktbuf_hdr(pkt), buf, len); 51 mctp_bus_rx(&test->binding, pkt); 52 } 53 54 void mctp_binding_test_register_bus(struct mctp_binding_test *binding, 55 struct mctp *mctp, mctp_eid_t eid) 56 { 57 mctp_register_bus(mctp, &binding->binding, eid); 58 } 59 60 void mctp_test_stack_init(struct mctp **mctp, 61 struct mctp_binding_test **binding, mctp_eid_t eid) 62 { 63 *mctp = mctp_init(); 64 assert(*mctp); 65 66 *binding = mctp_binding_test_init(); 67 assert(*binding); 68 69 mctp_binding_test_register_bus(*binding, *mctp, eid); 70 } 71