// ivshmem_root.c #include "ivshmem_common.h" int main(int argc, char *argv[]) { if (argc < 2) error(1, 0, "Usage: %s /dev/uioX", argv[0]); ivshmem_ctx ctx; ivshmem_init(&ctx, argv[1]); printf("Root ID: %u, Peer ID: 1\n", ctx.id); ctx.out[ctx.id] = 42; printf("Sent 42 to inmate\n"); mmio_write32(&ctx.regs->doorbell, 1); printf("Waiting for inmate...\n"); ivshmem_wait_irq(&ctx); uint32_t response = ctx.in[ctx.id]; printf("Received from inmate: %u\n", response); ivshmem_cleanup(&ctx); return 0; }