/* SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later */ #ifdef NDEBUG #undef NDEBUG #endif #include #include #include #include #include "compiler.h" #include "libmctp.h" #include "test-utils.h" struct test_ctx { struct mctp *mctp; struct mctp_binding_test *binding; int rx_count; mctp_eid_t src_eid; }; static void test_rx(uint8_t eid, bool tag_owner __unused, uint8_t msg_tag __unused, void *data, void *msg __unused, size_t len __unused) { struct test_ctx *ctx = data; (void)msg; (void)len; ctx->rx_count++; ctx->src_eid = eid; } static void create_packet(struct mctp_hdr *pkt, mctp_eid_t src, mctp_eid_t dest) { memset(pkt, 0, sizeof(*pkt)); pkt->src = src; pkt->dest = dest; pkt->flags_seq_tag = MCTP_HDR_FLAG_SOM | MCTP_HDR_FLAG_EOM; } int main(void) { struct test_ctx _ctx, *ctx = &_ctx; const mctp_eid_t local_eid = 8; const mctp_eid_t remote_eid = 9; const mctp_eid_t other_eid = 10; struct { struct mctp_hdr hdr; uint8_t payload[1]; } pktbuf; mctp_test_stack_init(&ctx->mctp, &ctx->binding, local_eid); mctp_set_rx_all(ctx->mctp, test_rx, ctx); /* check a message addressed to us is received */ ctx->rx_count = 0; create_packet(&pktbuf.hdr, remote_eid, local_eid); mctp_binding_test_rx_raw(ctx->binding, &pktbuf, sizeof(pktbuf)); assert(ctx->rx_count == 1); assert(ctx->src_eid == remote_eid); /* check a message not addressed to us is not received */ ctx->rx_count = 0; create_packet(&pktbuf.hdr, remote_eid, other_eid); mctp_binding_test_rx_raw(ctx->binding, &pktbuf, sizeof(pktbuf)); assert(ctx->rx_count == 0); mctp_binding_test_destroy(ctx->binding); mctp_destroy(ctx->mctp); return EXIT_SUCCESS; }