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()
330 * Set termios attributes on the console tty.
349 /* Set console to raw mode: we don't want any processing to occur on in tty_init_termios()
624 int console_data_out(struct console *console, const uint8_t *data, size_t len) in console_data_out() argument
626 return write_buf_to_fd(console->server->tty.fd, data, len); in console_data_out()
630 static int set_socket_info(struct console *console, struct config *config, in set_socket_info() argument
635 /* Get console id */ in set_socket_info()
636 console->console_id = config_resolve_console_id(config, console_id); in set_socket_info()
639 len = console_socket_path(console->socket_name, console->console_id); in set_socket_info()
646 console->socket_name_len = len; in set_socket_info()
651 static void handlers_init(struct console *console, struct config *config) in handlers_init() argument
662 console->handlers = calloc(n_types, sizeof(struct handler *)); in handlers_init()
663 if (!console->handlers) { in handlers_init()
682 handler = type->init(type, console, config); in handlers_init()
684 printf(" console '%s': handler %s [%sactive]\n", in handlers_init()
685 console->console_id, type->name, handler ? "" : "in"); in handlers_init()
689 console->handlers[j++] = handler; in handlers_init()
693 console->n_handlers = j; in handlers_init()
696 static void handlers_fini(struct console *console) in handlers_fini() argument
701 for (i = 0; i < console->n_handlers; i++) { in handlers_fini()
702 handler = console->handlers[i]; in handlers_fini()
706 free(console->handlers); in handlers_fini()
707 console->handlers = NULL; in handlers_fini()
708 console->n_handlers = 0; in handlers_fini()
733 console_ringbuffer_consumer_register(struct console *console, in console_ringbuffer_consumer_register() argument
736 return ringbuffer_consumer_register(console->rb, poll_fn, data); in console_ringbuffer_consumer_register()
739 struct poller *console_poller_register(struct console *console, in console_poller_register() argument
749 console->server, fd, (short)(events & 0x7fff)); in console_poller_register()
766 n = console->n_pollers++; in console_poller_register()
772 console->pollers = reallocarray(console->pollers, console->n_pollers, in console_poller_register()
773 sizeof(*console->pollers)); in console_poller_register()
777 console->pollers[n] = poller; in console_poller_register()
782 void console_poller_unregister(struct console *console, struct poller *poller) in console_poller_unregister() argument
787 for (i = 0; i < console->n_pollers; i++) { in console_poller_unregister()
788 if (console->pollers[i] == poller) { in console_poller_unregister()
793 assert(i < console->n_pollers); in console_poller_unregister()
795 console->n_pollers--; in console_poller_unregister()
804 memmove(&console->pollers[i], &console->pollers[i + 1], in console_poller_unregister()
805 sizeof(*console->pollers) * (console->n_pollers - i)); in console_poller_unregister()
807 if (console->n_pollers == 0) { in console_poller_unregister()
808 free(console->pollers); in console_poller_unregister()
809 console->pollers = NULL; in console_poller_unregister()
811 console->pollers = reallocarray(console->pollers, in console_poller_unregister()
812 console->n_pollers, in console_poller_unregister()
813 sizeof(*console->pollers)); in console_poller_unregister()
817 console_server_release_pollfd(console->server, poller->pollfd_index); in console_poller_unregister()
822 void console_poller_set_events(struct console *console, struct poller *poller, in console_poller_set_events() argument
825 console->server->pollfds[poller->pollfd_index].events = in console_poller_set_events()
829 void console_poller_set_timeout(struct console *console __attribute__((unused)), in console_poller_set_timeout() argument
843 static long get_poll_timeout(struct console *console, struct timeval *cur_time) in get_poll_timeout() argument
852 for (i = 0; i < console->n_pollers; i++) { in get_poll_timeout()
853 poller = console->pollers[i]; in get_poll_timeout()
878 static int call_pollers(struct console *console, struct timeval *cur_time) in call_pollers() argument
892 for (i = 0; i < console->n_pollers; i++) { in call_pollers()
893 poller = console->pollers[i]; in call_pollers()
894 pollfd = &console->server->pollfds[poller->pollfd_index]; in call_pollers()
937 for (i = 0; i < console->n_pollers; i++) { in call_pollers()
938 poller = console->pollers[i]; in call_pollers()
940 console_poller_unregister(console, poller); in call_pollers()
960 static int run_console_per_console(struct console *console, size_t buf_size, in run_console_per_console() argument
965 if (console->rb->size < buf_size) { in run_console_per_console()
977 rc = call_pollers(console, tv); in run_console_per_console()
1037 struct console *console = server->consoles[i]; in run_console_iteration() local
1039 rc = run_console_per_console(console, sizeof(buf), &tv); in run_console_iteration()
1054 warnx("no console configured for this server"); in run_server()
1072 { "console-id", required_argument, 0, 'i' },
1076 static struct console *console_init(struct console_server *server, in console_init()
1084 struct console *console = calloc(1, sizeof(struct console)); in console_init() local
1085 if (console == NULL) { in console_init()
1089 console->server = server; in console_init()
1090 console->console_id = console_id; in console_init()
1107 console->rb = ringbuffer_init(buffer_size); in console_init()
1108 if (!console->rb) { in console_init()
1112 rc = console_mux_init(console, config); in console_init()
1118 if (set_socket_info(console, config, console_id)) { in console_init()
1123 rc = dbus_init(console, config); in console_init()
1128 handlers_init(console, config); in console_init()
1130 return console; in console_init()
1133 free(console->rb); in console_init()
1135 free(console); in console_init()
1140 static void console_fini(struct console *console) in console_fini() argument
1142 handlers_fini(console); in console_fini()
1143 ringbuffer_fini(console->rb); in console_fini()
1144 free(console->pollers); in console_fini()
1145 free(console); in console_fini()
1154 struct console *console; in console_server_add_console() local
1158 struct console **tmp = reallocarray(server->consoles, in console_server_add_console()
1160 sizeof(struct console *)); in console_server_add_console()
1167 console = console_init(server, config, console_id); in console_server_add_console()
1168 if (console == NULL) { in console_server_add_console()
1173 server->consoles[server->n_consoles++] = console; in console_server_add_console()
1179 static struct console *
1205 warnx("no console id provided\n"); in console_server_add_consoles()
1217 config_get_value(server->config, "active-console"); in console_server_add_consoles()
1222 printf("setting console-id '%s' as the initially active console\n", in console_server_add_consoles()
1226 struct console *console = server->consoles[i]; in console_server_add_consoles() local
1228 if (strcmp(console->console_id, initially_active) == 0) { in console_server_add_consoles()
1229 return console; in console_server_add_consoles()
1233 warnx("'active-console' '%s' not found among console ids\n", in console_server_add_consoles()
1268 warnx("error during dbus init for console server"); in console_server_init()
1272 struct console *initial_active = in console_server_init()