From patchwork Wed Jun 8 06:28:07 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sam Mendoza-Jonas X-Patchwork-Id: 631982 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.ozlabs.org (lists.ozlabs.org [IPv6:2401:3900:2:1::3]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3rPdmv3VgGz9sCg for ; Wed, 8 Jun 2016 16:28:47 +1000 (AEST) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=mendozajonas.com header.i=@mendozajonas.com header.b=Gy1kt/0j; dkim-atps=neutral Received: from ozlabs.org (lists.ozlabs.org [IPv6:2401:3900:2:1::3]) by lists.ozlabs.org (Postfix) with ESMTP id 3rPdmv28zXzDqJ1 for ; Wed, 8 Jun 2016 16:28:47 +1000 (AEST) Authentication-Results: lists.ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=mendozajonas.com header.i=@mendozajonas.com header.b=Gy1kt/0j; dkim-atps=neutral X-Original-To: petitboot@lists.ozlabs.org Delivered-To: petitboot@lists.ozlabs.org Received: from mendozajonas.com (mendozajonas.com [188.166.185.233]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by lists.ozlabs.org (Postfix) with ESMTPS id 3rPdmX3sfmzDq5m for ; Wed, 8 Jun 2016 16:28:28 +1000 (AEST) Authentication-Results: lists.ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=mendozajonas.com header.i=@mendozajonas.com header.b=Gy1kt/0j; dkim-atps=neutral Received: from skellige.ozlabs.ibm.com (unknown [122.99.82.10]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client did not present a certificate) (Authenticated sender: sam@mendozajonas.com) by mendozajonas.com (Postfix) with ESMTPSA id 8E225143F71 for ; Wed, 8 Jun 2016 14:28:24 +0800 (SGT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=mendozajonas.com; s=mail; t=1465367305; bh=5ko9lkyf5mI+I3Mm3slLEe+e6E10Ua9l8XxTwA5cr9g=; h=From:To:Subject:Date:In-Reply-To:References:From; b=Gy1kt/0jYv4T0Z0BI6navfngAa+ZRyb50zlsEzybYGBMePyXMUYBOYFPD84iQP0Ux tIGBZheXLXDACTb+DgO4J1Sq/1dk2lcF8DfmLGQtGaTH636ptxQt64cRTE3rTMv0cM 9M6i+HshCUkiOSKBTs7ioMmoOCqnlrNH4FZa6faQ= From: Samuel Mendoza-Jonas To: petitboot@lists.ozlabs.org Subject: [PATCH 1/6] lib: Add support for tracking boot consoles Date: Wed, 8 Jun 2016 16:28:07 +1000 Message-Id: <20160608062812.14480-2-sam@mendozajonas.com> X-Mailer: git-send-email 2.8.3 In-Reply-To: <20160608062812.14480-1-sam@mendozajonas.com> References: <20160608062812.14480-1-sam@mendozajonas.com> X-BeenThere: petitboot@lists.ozlabs.org X-Mailman-Version: 2.1.22 Precedence: list List-Id: Petitboot bootloader development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: petitboot-bounces+incoming=patchwork.ozlabs.org@lists.ozlabs.org Sender: "Petitboot" Add tty_list and boot_tty to the config struct to keep track of available console interfaces and the default console to set as primary respectively. Also add a tty field to the boot_command struct so that the current console can be sent to the discover server during a manual boot command. Signed-off-by: Samuel Mendoza-Jonas --- lib/pb-config/pb-config.c | 12 +++++++++++- lib/pb-protocol/pb-protocol.c | 35 ++++++++++++++++++++++++++++++++++- lib/types/types.h | 4 ++++ 3 files changed, 49 insertions(+), 2 deletions(-) diff --git a/lib/pb-config/pb-config.c b/lib/pb-config/pb-config.c index 8200883..66ce84a 100644 --- a/lib/pb-config/pb-config.c +++ b/lib/pb-config/pb-config.c @@ -39,7 +39,7 @@ struct config *config_copy(void *ctx, const struct config *src) struct config *dest; unsigned int i; - dest = talloc(ctx, struct config); + dest = talloc_zero(ctx, struct config); dest->autoboot_enabled = src->autoboot_enabled; dest->autoboot_timeout_sec = src->autoboot_timeout_sec; dest->safe_mode = src->safe_mode; @@ -79,6 +79,16 @@ struct config *config_copy(void *ctx, const struct config *src) dest->allow_writes = src->allow_writes; + dest->n_tty = src->n_tty; + if (src->tty_list) + dest->tty_list = talloc_array(dest, char *, src->n_tty); + for (i = 0; i < src->n_tty && src->n_tty; i++) + dest->tty_list[i] = talloc_strdup(dest->tty_list, + src->tty_list[i]); + + if (src->boot_tty) + dest->boot_tty = talloc_strdup(dest, src->boot_tty); + if (src->lang && strlen(src->lang)) dest->lang = talloc_strdup(dest, src->lang); else diff --git a/lib/pb-protocol/pb-protocol.c b/lib/pb-protocol/pb-protocol.c index 9091709..7887fb0 100644 --- a/lib/pb-protocol/pb-protocol.c +++ b/lib/pb-protocol/pb-protocol.c @@ -206,7 +206,8 @@ int pb_protocol_boot_len(const struct boot_command *boot) 4 + optional_strlen(boot->boot_image_file) + 4 + optional_strlen(boot->initrd_file) + 4 + optional_strlen(boot->dtb_file) + - 4 + optional_strlen(boot->boot_args); + 4 + optional_strlen(boot->boot_args) + + 4 + optional_strlen(boot->tty); } int pb_protocol_boot_status_len(const struct boot_status *status) @@ -310,6 +311,12 @@ int pb_protocol_config_len(const struct config *config) len += 4; /* allow_writes */ + len += 4; /* n_tty */ + for (i = 0; i < config->n_tty; i++) + len += 4 + optional_strlen(config->tty_list[i]); + + len += 4 + optional_strlen(config->boot_tty); + len += 4 + optional_strlen(config->lang); return len; @@ -373,6 +380,7 @@ int pb_protocol_serialise_boot_command(const struct boot_command *boot, pos += pb_protocol_serialise_string(pos, boot->initrd_file); pos += pb_protocol_serialise_string(pos, boot->dtb_file); pos += pb_protocol_serialise_string(pos, boot->boot_args); + pos += pb_protocol_serialise_string(pos, boot->tty); assert(pos <= buf + buf_len); (void)buf_len; @@ -553,6 +561,13 @@ int pb_protocol_serialise_config(const struct config *config, *(uint32_t *)pos = config->allow_writes; pos += 4; + *(uint32_t *)pos = __cpu_to_be32(config->n_tty); + pos += 4; + for (i = 0; i < config->n_tty; i++) + pos += pb_protocol_serialise_string(pos, config->tty_list[i]); + + pos += pb_protocol_serialise_string(pos, config->boot_tty); + pos += pb_protocol_serialise_string(pos, config->lang); assert(pos <= buf + buf_len); @@ -770,6 +785,9 @@ int pb_protocol_deserialise_boot_command(struct boot_command *cmd, if (read_string(cmd, &pos, &len, &cmd->boot_args)) goto out; + if (read_string(cmd, &pos, &len, &cmd->tty)) + goto out; + rc = 0; out: @@ -1069,6 +1087,21 @@ int pb_protocol_deserialise_config(struct config *config, goto out; config->allow_writes = !!tmp; + if (read_u32(&pos, &len, &config->n_tty)) + goto out; + + config->tty_list = talloc_array(config, char *, config->n_tty); + for (i = 0; i < config->n_tty; i++) { + if (read_string(config->tty_list, &pos, &len, &str)) + goto out; + config->tty_list[i] = str; + } + + if (read_string(config, &pos, &len, &str)) + goto out; + + config->boot_tty = str; + if (read_string(config, &pos, &len, &str)) goto out; diff --git a/lib/types/types.h b/lib/types/types.h index 6ff4620..5c5f6ed 100644 --- a/lib/types/types.h +++ b/lib/types/types.h @@ -65,6 +65,7 @@ struct boot_command { char *initrd_file; char *dtb_file; char *boot_args; + char *tty; }; struct boot_status { @@ -159,9 +160,12 @@ struct config { bool allow_writes; + char *boot_tty; char *lang; /* not user-settable */ + unsigned int n_tty; + char **tty_list; bool disable_snapshots; bool safe_mode; bool debug;