| /* SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later */ |
| |
| #include <assert.h> |
| #include <stdlib.h> |
| #include <stdio.h> |
| #include <string.h> |
| |
| #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; |
| } |