blob: 9c3757812b05f372337cf167f1becd54ab08a892 [file] [log] [blame]
Jeremy Kerr4cdc2002019-02-07 16:49:12 +08001
2#include <assert.h>
3#include <err.h>
4#include <stdio.h>
5#include <stdlib.h>
6#include <unistd.h>
7#include <sys/poll.h>
8#include <sys/socket.h>
9
10#include "libmctp.h"
11#include "libmctp-serial.h"
12
13static void rx_message(uint8_t eid, void *data, void *msg, size_t len)
14{
15 (void)eid;
16 (void)data;
17 write(STDOUT_FILENO, msg, len);
18}
19
20int main(void)
21{
22 struct mctp_binding_serial *serial[2];
23 mctp_eid_t eids[] = {8, 9};
24 struct pollfd pollfds[3];
25 struct mctp *mctp[2];
26 int rc, mctp_fds[2];
27
28 mctp[0] = mctp_init();
29 mctp[1] = mctp_init();
30
31 assert(mctp[0] && mctp[1]);
32
33 serial[0] = mctp_serial_init();
34 serial[1] = mctp_serial_init();
35
36 assert(serial[0] && serial[1]);
37
38 rc = socketpair(AF_UNIX, SOCK_DGRAM, 0, mctp_fds);
39 if (rc)
40 err(EXIT_FAILURE, "Can't create sockets");
41
42 mctp_serial_open_fd(serial[0], mctp_fds[0]);
43 mctp_serial_open_fd(serial[1], mctp_fds[1]);
44
45 mctp_serial_register_bus(serial[0], mctp[0], eids[0]);
46 mctp_serial_register_bus(serial[1], mctp[1], eids[1]);
47
48 mctp_set_rx_all(mctp[1], rx_message, NULL);
49
50 pollfds[0].fd = mctp_fds[0];
51 pollfds[0].events = POLLIN;
52 pollfds[1].fd = mctp_fds[1];
53 pollfds[1].events = POLLIN;
54 pollfds[2].fd = STDIN_FILENO;
55 pollfds[2].events = POLLIN;
56
57 for (;;) {
58 uint8_t buf[1024];
59
60 rc = poll(pollfds, 3, 0);
61 if (rc < 0)
62 return EXIT_FAILURE;
63
64 if (pollfds[0].revents)
65 mctp_serial_read(serial[0]);
66 if (pollfds[1].revents)
67 mctp_serial_read(serial[1]);
68 if (pollfds[2].revents) {
69 rc = read(STDIN_FILENO, buf, sizeof(buf));
70 if (rc == 0)
71 break;
72 else if (rc < 0)
73 err(EXIT_FAILURE, "read");
74 mctp_message_tx(mctp[0], eids[1], buf, rc);
75 }
76 }
77
78 return EXIT_SUCCESS;
79
80}