Lines Matching full:console
2 * Console server process for OpenBMC
41 #include "console-mux.h"
43 #include "console-server.h"
61 " --console-id <NAME>\tUse NAME in the UNIX domain socket address\n" in usage()
180 * Allow hooking obmc-console-server up to PTYs for testing in tty_find_device()
182 * https://amboar.github.io/notes/2023/05/02/testing-obmc-console-with-socat.html in tty_find_device()
298 * Set termios attributes on the console tty.
317 /* Set console to raw mode: we don't want any processing to occur on in tty_init_termios()
592 int console_data_out(struct console *console, const uint8_t *data, size_t len) in console_data_out() argument
594 return write_buf_to_fd(console->server->tty.fd, data, len); in console_data_out()
598 static int set_socket_info(struct console *console, struct config *config, in set_socket_info() argument
603 /* Get console id */ in set_socket_info()
604 console->console_id = config_resolve_console_id(config, console_id); in set_socket_info()
607 len = console_socket_path(console->socket_name, console->console_id); in set_socket_info()
614 console->socket_name_len = len; in set_socket_info()
619 static void handlers_init(struct console *console, struct config *config) in handlers_init() argument
630 console->handlers = calloc(n_types, sizeof(struct handler *)); in handlers_init()
631 if (!console->handlers) { in handlers_init()
650 handler = type->init(type, console, config); in handlers_init()
652 printf(" console '%s': handler %s [%sactive]\n", in handlers_init()
653 console->console_id, type->name, handler ? "" : "in"); in handlers_init()
657 console->handlers[j++] = handler; in handlers_init()
661 console->n_handlers = j; in handlers_init()
664 static void handlers_fini(struct console *console) in handlers_fini() argument
669 for (i = 0; i < console->n_handlers; i++) { in handlers_fini()
670 handler = console->handlers[i]; in handlers_fini()
674 free(console->handlers); in handlers_fini()
675 console->handlers = NULL; in handlers_fini()
676 console->n_handlers = 0; in handlers_fini()
701 console_ringbuffer_consumer_register(struct console *console, in console_ringbuffer_consumer_register() argument
704 return ringbuffer_consumer_register(console->rb, poll_fn, data); in console_ringbuffer_consumer_register()
707 struct poller *console_poller_register(struct console *console, in console_poller_register() argument
717 console->server, fd, (short)(events & 0x7fff)); in console_poller_register()
734 n = console->n_pollers++; in console_poller_register()
740 console->pollers = reallocarray(console->pollers, console->n_pollers, in console_poller_register()
741 sizeof(*console->pollers)); in console_poller_register()
745 console->pollers[n] = poller; in console_poller_register()
750 void console_poller_unregister(struct console *console, struct poller *poller) in console_poller_unregister() argument
755 for (i = 0; i < console->n_pollers; i++) { in console_poller_unregister()
756 if (console->pollers[i] == poller) { in console_poller_unregister()
761 assert(i < console->n_pollers); in console_poller_unregister()
763 console->n_pollers--; in console_poller_unregister()
772 memmove(&console->pollers[i], &console->pollers[i + 1], in console_poller_unregister()
773 sizeof(*console->pollers) * (console->n_pollers - i)); in console_poller_unregister()
775 if (console->n_pollers == 0) { in console_poller_unregister()
776 free(console->pollers); in console_poller_unregister()
777 console->pollers = NULL; in console_poller_unregister()
779 console->pollers = reallocarray(console->pollers, in console_poller_unregister()
780 console->n_pollers, in console_poller_unregister()
781 sizeof(*console->pollers)); in console_poller_unregister()
785 console_server_release_pollfd(console->server, poller->pollfd_index); in console_poller_unregister()
790 void console_poller_set_events(struct console *console, struct poller *poller, in console_poller_set_events() argument
793 console->server->pollfds[poller->pollfd_index].events = in console_poller_set_events()
797 void console_poller_set_timeout(struct console *console __attribute__((unused)), in console_poller_set_timeout() argument
811 static long get_poll_timeout(struct console *console, struct timeval *cur_time) in get_poll_timeout() argument
820 for (i = 0; i < console->n_pollers; i++) { in get_poll_timeout()
821 poller = console->pollers[i]; in get_poll_timeout()
846 static int call_pollers(struct console *console, struct timeval *cur_time) in call_pollers() argument
860 for (i = 0; i < console->n_pollers; i++) { in call_pollers()
861 poller = console->pollers[i]; in call_pollers()
862 pollfd = &console->server->pollfds[poller->pollfd_index]; in call_pollers()
905 for (i = 0; i < console->n_pollers; i++) { in call_pollers()
906 poller = console->pollers[i]; in call_pollers()
908 console_poller_unregister(console, poller); in call_pollers()
928 static int run_console_per_console(struct console *console, size_t buf_size, in run_console_per_console() argument
933 if (console->rb->size < buf_size) { in run_console_per_console()
945 rc = call_pollers(console, tv); in run_console_per_console()
1005 struct console *console = server->consoles[i]; in run_console_iteration() local
1007 rc = run_console_per_console(console, sizeof(buf), &tv); in run_console_iteration()
1022 warnx("no console configured for this server"); in run_server()
1040 { "console-id", required_argument, 0, 'i' },
1044 static struct console *console_init(struct console_server *server, in console_init()
1052 struct console *console = calloc(1, sizeof(struct console)); in console_init() local
1053 if (console == NULL) { in console_init()
1057 console->server = server; in console_init()
1058 console->console_id = console_id; in console_init()
1075 console->rb = ringbuffer_init(buffer_size); in console_init()
1076 if (!console->rb) { in console_init()
1080 rc = console_mux_init(console, config); in console_init()
1086 if (set_socket_info(console, config, console_id)) { in console_init()
1091 rc = dbus_init(console, config); in console_init()
1096 handlers_init(console, config); in console_init()
1098 return console; in console_init()
1101 free(console->rb); in console_init()
1103 free(console); in console_init()
1108 static void console_fini(struct console *console) in console_fini() argument
1110 handlers_fini(console); in console_fini()
1111 ringbuffer_fini(console->rb); in console_fini()
1112 free(console->pollers); in console_fini()
1113 free(console); in console_fini()
1122 struct console *console; in console_server_add_console() local
1126 struct console **tmp = reallocarray(server->consoles, in console_server_add_console()
1128 sizeof(struct console *)); in console_server_add_console()
1135 console = console_init(server, config, console_id); in console_server_add_console()
1136 if (console == NULL) { in console_server_add_console()
1141 server->consoles[server->n_consoles++] = console; in console_server_add_console()
1147 static struct console *
1173 warnx("no console id provided\n"); in console_server_add_consoles()
1185 config_get_value(server->config, "active-console"); in console_server_add_consoles()
1190 printf("setting console-id '%s' as the initially active console\n", in console_server_add_consoles()
1194 struct console *console = server->consoles[i]; in console_server_add_consoles() local
1196 if (strcmp(console->console_id, initially_active) == 0) { in console_server_add_consoles()
1197 return console; in console_server_add_consoles()
1201 warnx("'active-console' '%s' not found among console ids\n", in console_server_add_consoles()
1236 warnx("error during dbus init for console server"); in console_server_init()
1240 struct console *initial_active = in console_server_init()