petitboot
5 years agotest/parser: Add Fedora 20 ppc64 parser testcase
Jeremy Kerr [Tue, 28 Jan 2014 01:42:28 +0000 (09:42 +0800)]
test/parser: Add Fedora 20 ppc64 parser testcase

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
5 years agodiscover/grub2: Add support for for-loops
Jeremy Kerr [Fri, 24 Jan 2014 06:40:46 +0000 (14:40 +0800)]
discover/grub2: Add support for for-loops

GRUB2 syntax allows for for-loops; this change adds supoprt in the
parser grammar and script execution code to implement them. In the
execution code, we simply update the for-loop variable and re-execute
the body statements.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
5 years agodiscover/grub2: Perform word-expansion non-destructively
Jeremy Kerr [Tue, 28 Jan 2014 01:38:13 +0000 (09:38 +0800)]
discover/grub2: Perform word-expansion non-destructively

In order to implement for-loops, we may need to evaluate the same chunk
of script more than once, and perform that evaluation in a different
context (particularly, with different environment variables).

Currently, the process_expansion code destroys the result of the
parse-tree (ie, the token list) when performing expansions. This means
that we can only perform the expansions once.

This change preserves the token list while creating the argv array. This
means that we can expand the list multiple times.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
5 years agodiscover: Add support for checking directories in parser API
Jeremy Kerr [Fri, 24 Jan 2014 06:39:37 +0000 (14:39 +0800)]
discover: Add support for checking directories in parser API

This change adds a function to the parser API:

  int parser_check_dir(struct discover_context *ctx,
   struct discover_device *dev, const char *dirname)

- which allows parsers to check for the presence of a directory (path of
'dirname') on the device ('dev'). We use this in the GRUB2 parser to
implement the `test -d` check.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
5 years agodiscover/grub2: skip menuentries that don't define a boot option
Jeremy Kerr [Fri, 24 Jan 2014 05:45:24 +0000 (13:45 +0800)]
discover/grub2: skip menuentries that don't define a boot option

menuentries may perform arbitrary commands; we only want ones that
define a boot option.

This change doesn't add a boot option if we haven't seen at least a boot
image defined in the menuentry.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
5 years agodiscover/grub: Add feature variable for --id support.
Jeremy Kerr [Wed, 15 Jan 2014 23:10:25 +0000 (15:10 -0800)]
discover/grub: Add feature variable for --id support.

Since we support --id arguments on menuentries, add the corresponding
feature variable.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
5 years agodiscover/grub2: Use script_env_set when initialising the environment
Jeremy Kerr [Tue, 28 Jan 2014 01:48:48 +0000 (09:48 +0800)]
discover/grub2: Use script_env_set when initialising the environment

No need to duplicate the environment-adding code in init_env, as we can
just use script_env_set.

Since script_env_set does its own talloc, we don't need to talloc our
strings here either.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agopb-config/powerpc: fix default option handling
Jeremy Kerr [Thu, 23 Jan 2014 05:31:56 +0000 (13:31 +0800)]
pb-config/powerpc: fix default option handling

Currently, we don't update nvram if an NVRAM parameter is set to the
default. This means we can never revert a configuration to its default
value.

This change fixes the default setting behaviour; instead of checking for
a default, we want to check if it's a default and the option is absent.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agodiscover: Use lowercase hex chars for MAC-address-based conf requests
Jeremy Kerr [Tue, 21 Jan 2014 23:53:46 +0000 (07:53 +0800)]
discover: Use lowercase hex chars for MAC-address-based conf requests

The de-facto PXELINUX standard specifies lowercase characters for the
MAC addresses, so change our reuqests to suit.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agolib/process: Add helper for check process clean exit
Jeremy Kerr [Tue, 21 Jan 2014 02:00:49 +0000 (10:00 +0800)]
lib/process: Add helper for check process clean exit

We have a few incorrect checks for the exit status of a process; this
change adds a helper with the correct WIFEXITED && WEXITSTATUS==0 logic.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agodiscover/paths: Check process exit status when loading URLs
Jeremy Kerr [Tue, 21 Jan 2014 00:27:48 +0000 (08:27 +0800)]
discover/paths: Check process exit status when loading URLs

Currently, we may report incorrect success when loading a URL, as we
only check the return value of process_run_sync() (and not the process
exit status itself) in load_process_to_local_file.

This fix adds a check to the synchronous load.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agoutils/hooks: Add dtb-sort hook
Jeremy Kerr [Mon, 20 Jan 2014 07:12:46 +0000 (15:12 +0800)]
utils/hooks: Add dtb-sort hook

The boot hooks may have altered the DTB in various ways, so add a final
(90-) boot hook to re-sort the dtb with `dtc -s`.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agoutils/pb-udhcpc: Unify references to DHCP bootfile parameter
Jeremy Kerr [Mon, 20 Jan 2014 00:58:49 +0000 (08:58 +0800)]
utils/pb-udhcpc: Unify references to DHCP bootfile parameter

udhcpc may pass the bootfile parameter as either $bootfile or
$boot_file, depending on whether the option is present in the BOOTP
header, or as a DHCP vendor option. We have code in pb-udhcpc to unify
this to $bootfile, but we only use the unified value in one of the user
events.

This change uses the correct value of bootfile, and fixes the check to
conditionally generate the explicit add event. We also need to update
the user-event code to use the right event parameter name.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agoutils/pb-udhcpc: Fix incorrect reference to $interface
Jeremy Kerr [Mon, 20 Jan 2014 00:51:11 +0000 (08:51 +0800)]
utils/pb-udhcpc: Fix incorrect reference to $interface

We have a typo in the udhcpc hook, where we're not referncing the
interface variable correctly. This means we'll get the same device
identifier for all netboot options.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agoutils/pb-udhcpc: remove bashism when reading mac address
Jeremy Kerr [Mon, 20 Jan 2014 00:42:44 +0000 (08:42 +0800)]
utils/pb-udhcpc: remove bashism when reading mac address

The $(< FILE) syntax we use to read an interface's MAC address doesn't
work in dash or busybox sh. Instead, use cat.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agodiscover/network: Send DHCP client architecture type
Jeremy Kerr [Fri, 17 Jan 2014 08:12:42 +0000 (16:12 +0800)]
discover/network: Send DHCP client architecture type

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agodiscover: Support DHCP "pathprefix" configuration option
Jeremy Kerr [Fri, 17 Jan 2014 07:51:54 +0000 (15:51 +0800)]
discover: Support DHCP "pathprefix" configuration option

This change implements support for the DHCP "pathprefix" option. We use
the following logic:

 - If pathprefix is present and a full URL, we base the config file
   location on pathprefix + conffile

 - If pathprefix is present but not a full URL, we use it as the path
   component of the URL, and pick up the host from other parameters in
   the DHCP response

 - If no pathprefix is present, we determine the configuration prefix
   from the DHCP bootfile parameter.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agotest/parser: Check for full URLs in parser tests
Jeremy Kerr [Fri, 17 Jan 2014 08:36:41 +0000 (16:36 +0800)]
test/parser: Check for full URLs in parser tests

At present, we only match the 'file' portion of a URL in the parser
tests, so we "serve" a file if just the filename (but not the scheme,
hostname or path) matches the file we set with test_read_conf_embedded.

This change introduces test_read_conf_embedded_url, which we can use to
specify a full URL. In this case, the fake parser_request_file matches
the entire URL before returning the file data.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agodiscover: Don't rely on ctx->conf_url side-effect in user_event_parse_conf_url
Jeremy Kerr [Fri, 17 Jan 2014 06:50:54 +0000 (14:50 +0800)]
discover: Don't rely on ctx->conf_url side-effect in user_event_parse_conf_url

Currently, user_event_parse_conf_url sets dc->conf_url if it detects we
have a full URL (rather than a base URL). This is a little too subtle,
so replace it with an explicit output parameter.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agodiscover/grub: Use --id values for default option detection
Ben Stoltz [Wed, 15 Jan 2014 23:10:25 +0000 (15:10 -0800)]
discover/grub: Use --id values for default option detection

Fix Petitboot's grub.cfg parser to handle --id=label argument to
menuentry, and use it (in preference to the option name) when looking
for a default option.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agodiscover: Bring down configured interfaces on discover server exit.
Jeremy Kerr [Thu, 16 Jan 2014 01:13:20 +0000 (09:13 +0800)]
discover: Bring down configured interfaces on discover server exit.

We want to down the interfaces that we brought up, so hook up the
network_shutdown function to the discover exit path. Also, we only want
to down interfaces that we've configured, and exclude lo.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agoutils: Add boot hook to set stdout property on DT machines
Jeremy Kerr [Wed, 15 Jan 2014 07:59:27 +0000 (15:59 +0800)]
utils: Add boot hook to set stdout property on DT machines

On machines that use device-tree boot, they'll often set an early
console, defined by the linux,stdout property in the /chosen/ device
tree node.

This hook adds a facility for petitboot to set this, based on an NVRAM
setting.

6 years agodiscover: we need stderr for the BusyBox TFTP type check
Jeremy Kerr [Tue, 14 Jan 2014 07:58:31 +0000 (15:58 +0800)]
discover: we need stderr for the BusyBox TFTP type check

Busybox tftp doesn't support -V, so prints an error to stderr. We'll
only see the Busybox identifier if we capture stderr too.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agolib/process: Add add_stderr flag to process module
Jeremy Kerr [Tue, 14 Jan 2014 07:44:10 +0000 (15:44 +0800)]
lib/process: Add add_stderr flag to process module

For some process execution functions, we'd like to capture stderr as
well as stdout. Currently, we unconditionally redirect subprocess stderr
to the petitboot log file.

This change adds an add_stderr flag to struct process, which indicates
to the process library that we want stderr as well as stdout. If this is
specified, the subprocess' stderr is captured to stdout_buf.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agotest/parser: Add yaboot leftovers test
Jeremy Kerr [Tue, 14 Jan 2014 03:15:03 +0000 (11:15 +0800)]
test/parser: Add yaboot leftovers test

Add a test to ensure that boot option parameters don't leak into later
options.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agodiscover/yaboot: Remove known_names list
Jeremy Kerr [Tue, 14 Jan 2014 03:04:54 +0000 (11:04 +0800)]
discover/yaboot: Remove known_names list

The known_names list only duplicates the arg matching we do in the body
of the parser, and so introduces a problem when the array becomes out of
sync.

We drop the priority of the "unknown name" messages to pb_debug, as this
isn't really imporant unless we're debugging.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agodiscover/yaboot: Clear globals_done when we see an image definition
Jeremy Kerr [Tue, 14 Jan 2014 02:56:41 +0000 (10:56 +0800)]
discover/yaboot: Clear globals_done when we see an image definition

Currently, we have a bug where a 'known_name' that appears before an
image section will cause globals_done to be set, and we don't see any
further global variables.

This change sets globals_done only once we see an image section.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agodiscover/udev: Set device type for optical media correctly
Jeremy Kerr [Mon, 13 Jan 2014 08:06:01 +0000 (16:06 +0800)]
discover/udev: Set device type for optical media correctly

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agoconfig/powerpc: Always call update_network_config
Jeremy Kerr [Mon, 23 Dec 2013 08:42:21 +0000 (16:42 +0800)]
config/powerpc: Always call update_network_config

Currently, we have a bug when setting the default network configuration
(ie, no devices have any specific config), as we won't call
update_network_config to clear out the value of the petitboot,network
parameter.

This change always invokes update_network_config, regardless of the
number of interfaces configured. This ensures we clear out the
petitboot,network param, which is then synced to nvram if the param has
changed.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agoui/ncurses/nc-config: Add validation for network settings
Jeremy Kerr [Wed, 18 Dec 2013 05:06:36 +0000 (13:06 +0800)]
ui/ncurses/nc-config: Add validation for network settings

Use the new widget validators, plus a bit of whole-form logic, to
implement some basic validation on the config UI.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agoui/ncurses/nc-widgets: Add initial textbox validation functions
Jeremy Kerr [Wed, 18 Dec 2013 05:05:01 +0000 (13:05 +0800)]
ui/ncurses/nc-widgets: Add initial textbox validation functions

We'd like to do some validation of the system configuration parameters,
so add a few validation types to the widget code. We currently need
integer, ipv4 address and multiple ipv4 address types. These are
implemented as small wrappers around the ncurses form validator code.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agoui/ncurses/nc-config: expand mask field
Jeremy Kerr [Wed, 18 Dec 2013 02:31:10 +0000 (10:31 +0800)]
ui/ncurses/nc-config: expand mask field

This makes it obvious if there's more than two characters in the field.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agoconfigure: Use AC_GNU_SOURCE
Jeremy Kerr [Mon, 16 Dec 2013 08:21:50 +0000 (16:21 +0800)]
configure: Use AC_GNU_SOURCE

Rather than #defining _GNU_SOURCE in our .c files, we can define this
from config.h instead.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agoui/ncurses: Add link status to system info & system config screens
Jeremy Kerr [Mon, 16 Dec 2013 05:20:01 +0000 (13:20 +0800)]
ui/ncurses: Add link status to system info & system config screens

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agolib/util: Avoid sprintf in mac_str
Jeremy Kerr [Mon, 16 Dec 2013 03:21:22 +0000 (11:21 +0800)]
lib/util: Avoid sprintf in mac_str

The conversion is simple, no need for sprintf.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agolib/util: Move mac_buf from nc code to util library
Jeremy Kerr [Mon, 16 Dec 2013 03:12:03 +0000 (11:12 +0800)]
lib/util: Move mac_buf from nc code to util library

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agosysinfo: Add interface link status to sysinfo data
Jeremy Kerr [Mon, 16 Dec 2013 02:49:29 +0000 (10:49 +0800)]
sysinfo: Add interface link status to sysinfo data

This changes adds a 'link' parameter to the interface information sent
in sysinfo messages. The discover network code populates this from the
incoming netlink messages.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agotest/lib: Add parent stdout test
Jeremy Kerr [Mon, 16 Dec 2013 07:16:36 +0000 (15:16 +0800)]
test/lib: Add parent stdout test

Looks like we missed adding a test source file.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agodiscover/yaboot: Fix assertion failure on empty yaboot files
Jeremy Kerr [Tue, 10 Dec 2013 00:54:17 +0000 (08:54 +0800)]
discover/yaboot: Fix assertion failure on empty yaboot files

yaboot configuration files with no option will cause an assertion
failure (or segfault), as we unconditionally call yaboot_finish().

Check for the presence of an option in yaboot_finish() instead of
asserting.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agodiscover/boot: Copy local paths before running boot hooks
Jeremy Kerr [Thu, 5 Dec 2013 06:54:13 +0000 (14:54 +0800)]
discover/boot: Copy local paths before running boot hooks

We're seeing a crash when boot hooks are specifying new resources, as
boot_hook_update_param will write to a NULL struct load_url_result.

Instead of writing the updated values to the struct, copy the local
parts of the result to a separate string, which the boot hooks are free
to update.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agodiscover/boot: Fix condition for updating boot params
Jeremy Kerr [Thu, 5 Dec 2013 06:32:28 +0000 (14:32 +0800)]
discover/boot: Fix condition for updating boot params

In commit 823958fb, we change to use struct process, but left in the
check for rc == BOOT_HOOK_EXIT_UPDATE. We actually want to check
process->exit_status here, not rc.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agodiscover/udev: Use UUIDs for multipath check
Jeremy Kerr [Wed, 4 Dec 2013 06:49:40 +0000 (14:49 +0800)]
discover/udev: Use UUIDs for multipath check

Partitions will share a serial number.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agoui/ncurses/boot-editor: Fix (null) when non-device resources are shown
Jeremy Kerr [Tue, 3 Dec 2013 11:28:10 +0000 (19:28 +0800)]
ui/ncurses/boot-editor: Fix (null) when non-device resources are shown

We're seeing the following in the boot editor:

 image:  (null)ftp://...

the (null) is due to the sep in conditional_prefix, which should be
blank, not NULL.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agodiscover/grub2: Fixes for bison 3.x
Jeremy Kerr [Tue, 3 Dec 2013 07:14:53 +0000 (15:14 +0800)]
discover/grub2: Fixes for bison 3.x

YYLEX_PARAM is removed in bison 3.0, so we need to pass the scanner
param directly through yyparse (rather than referencing
parser->scanner). Unfortunately, we don't have the lexer header
available at the time we declare yyparse, so we need to pass a void *
here.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agodiscover: Fix CDROM handling
Jeremy Kerr [Fri, 29 Nov 2013 02:47:10 +0000 (10:47 +0800)]
discover: Fix CDROM handling

Currently, we don't handle CDROM devices well; we'll try to mount on
boot, and not detect any media changes. Also, the default rules shipping
with udev will put the CDROM tray into a locked state, blocking eject
from working.

This change adds a set of cdrom utility functions, which the udev code
can use to properly initialise cdrom devices and handle eject and media
change requests.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agoui/ncurses: Add key debug
Jeremy Kerr [Mon, 2 Dec 2013 08:03:54 +0000 (16:03 +0800)]
ui/ncurses: Add key debug

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agodiscover/device-handler: Ensure we free unresolved boot options on remove
Jeremy Kerr [Mon, 2 Dec 2013 03:20:04 +0000 (11:20 +0800)]
discover/device-handler: Ensure we free unresolved boot options on remove

When we remove a device, some options may still be unresolved, and so
won't be deallocated through freeing the device.

This chagne explicitly removes & frees any currently-unresolved options
for this device.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agodiscover/udev: copy dev->device path from udev devnode
Jeremy Kerr [Fri, 29 Nov 2013 05:44:54 +0000 (13:44 +0800)]
discover/udev: copy dev->device path from udev devnode

We're seeing a use-after-free, as the udev path is freed before the
discover device.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agodiscover/grub2: Populate $prefix from config file location
Jeremy Kerr [Wed, 27 Nov 2013 11:51:49 +0000 (19:51 +0800)]
discover/grub2: Populate $prefix from config file location

Rather than always using the default prefix, we should determine it from
the location of the grub2 config file.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agotest/parser/grub2: Fix inconsistent conf/env paths
Jeremy Kerr [Wed, 27 Nov 2013 12:00:11 +0000 (20:00 +0800)]
test/parser/grub2: Fix inconsistent conf/env paths

In an upcoming change, we'll populate $prefix (which is used to locate
the environment file) based on the location of the config file, so these
paths will need to be consistent.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agodiscover/grub2: Use parser for a single parse
Jeremy Kerr [Wed, 27 Nov 2013 11:47:37 +0000 (19:47 +0800)]
discover/grub2: Use parser for a single parse

Currently, we re-use a grub2 parser for different filenames, and will
create one even if we find no matching files.

This change only creates a parser if parser_request_file succeeds, and
free() (and exits the parse) immediately after.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agodiscover/grub2: Fix free in load_env command
Jeremy Kerr [Wed, 27 Nov 2013 11:43:25 +0000 (19:43 +0800)]
discover/grub2: Fix free in load_env command

We only need to free the buf if parser_request_file returned success.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agodiscover/grub2: Fix indentation error
Jeremy Kerr [Wed, 27 Nov 2013 10:58:52 +0000 (18:58 +0800)]
discover/grub2: Fix indentation error

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agodiscover/grub2: Add support for -s and -f commands
Jeremy Kerr [Wed, 27 Nov 2013 10:56:16 +0000 (18:56 +0800)]
discover/grub2: Add support for -s and -f commands

Implement -s and -f checks for grub, and test with the standard GRUB2
saved_default config.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agodiscover/network: In static config mode, only configure defined interfaces
Jeremy Kerr [Wed, 27 Nov 2013 10:52:37 +0000 (18:52 +0800)]
discover/network: In static config mode, only configure defined interfaces

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agolib/pb-config/powerpc-nvram: Fix format of dns config
Jeremy Kerr [Tue, 26 Nov 2013 05:29:04 +0000 (13:29 +0800)]
lib/pb-config/powerpc-nvram: Fix format of dns config

It should be dns,<server> not dns=<server>

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agoui/ncurses/nc-widgets: Unify select key
Jeremy Kerr [Fri, 22 Nov 2013 06:12:59 +0000 (14:12 +0800)]
ui/ncurses/nc-widgets: Unify select key

We have a few instances where we check for a 'select' action (enter or
space key event), and some are inconsistent. Unify these with a
key_is_select() function.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agoui/ncurses: Redraw entire screen with ctrl+L
Jeremy Kerr [Tue, 19 Nov 2013 23:03:42 +0000 (10:03 +1100)]
ui/ncurses: Redraw entire screen with ctrl+L

Use wrefresh(curscr) to clean and repaint the entire screen.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agoui/ncurses: Ensure boot editor window is properly painted
Jeremy Kerr [Tue, 19 Nov 2013 07:03:40 +0000 (18:03 +1100)]
ui/ncurses: Ensure boot editor window is properly painted

We're not currently drawing the window title correctly; we need to draw
the main_ncw for this to hit the terminal.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agoui/ncurses: Fix use-after-free when exiting boot option editor
Jeremy Kerr [Tue, 19 Nov 2013 06:39:41 +0000 (17:39 +1100)]
ui/ncurses: Fix use-after-free when exiting boot option editor

After we've called on_exit, we can no longer use the boot editor. This
change moves individual button callbacks into process_key, which returns
to the main loop.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agoui/ncurses: Allow boot editor sysinfo updates
Jeremy Kerr [Tue, 19 Nov 2013 05:08:35 +0000 (16:08 +1100)]
ui/ncurses: Allow boot editor sysinfo updates

We may start a boot editor (via 'New') before we have the sysinfo. To
allow this, we redraw the device select.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agoui/ncurses: Add widgetset_set_window
Jeremy Kerr [Wed, 20 Nov 2013 03:18:35 +0000 (14:18 +1100)]
ui/ncurses: Add widgetset_set_window

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agoui/ncurses: Add widget_select_drop_options
Jeremy Kerr [Wed, 20 Nov 2013 03:17:31 +0000 (14:17 +1100)]
ui/ncurses: Add widget_select_drop_options

We want to be able to re-set the options in a select widget.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agoui/ncurses: Implement intra-field scrolling
Jeremy Kerr [Tue, 19 Nov 2013 03:20:30 +0000 (14:20 +1100)]
ui/ncurses: Implement intra-field scrolling

Now that we can calculate the focus within a field, ensure that the
focussed-element remains scrolled.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agoui/ncurses/widgets: Add widget focus offset query
Jeremy Kerr [Tue, 19 Nov 2013 03:18:28 +0000 (14:18 +1100)]
ui/ncurses/widgets: Add widget focus offset query

When we have widgets that are larger than the screen, we'd like to
scroll to the currently-focussed component of that widget.

This change introduces a widget_focus_y function, which returns the y
offset of the field's focus.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agoui/ncurses: Draw boot editor into a scrollable pad
Jeremy Kerr [Tue, 19 Nov 2013 00:52:49 +0000 (11:52 +1100)]
ui/ncurses: Draw boot editor into a scrollable pad

Like the config editor, draw the boot editor into a pad instead of
directly into the sub window. This means that long device lists will be
handled correctly.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agoui/ncurses: Make boot editor paths relative to device
Jeremy Kerr [Sun, 17 Nov 2013 09:54:46 +0000 (20:54 +1100)]
ui/ncurses: Make boot editor paths relative to device

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agoui/ncurses: Add device selector to boot editor
Jeremy Kerr [Sun, 17 Nov 2013 08:36:55 +0000 (19:36 +1100)]
ui/ncurses: Add device selector to boot editor

Rather than expecting users to enter full (prefixed) mount paths, add a
select widget to pick a device, and we automatically add the prefix when
the form is submitted.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agoui/ncurses/widgets: Add n_options check to widget_select_get_value
Jeremy Kerr [Sun, 17 Nov 2013 08:35:49 +0000 (19:35 +1100)]
ui/ncurses/widgets: Add n_options check to widget_select_get_value

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agoui/ncurses: Split boot editor layout
Jeremy Kerr [Sun, 17 Nov 2013 05:30:47 +0000 (16:30 +1100)]
ui/ncurses: Split boot editor layout

We want to make the boot editor dynamic later, so split the widget
layout from the widget creation.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agoui/ncurses: Make boot editor API consistent with config & sysinfo screens
Jeremy Kerr [Sun, 17 Nov 2013 03:04:08 +0000 (14:04 +1100)]
ui/ncurses: Make boot editor API consistent with config & sysinfo screens

The boot-editor API is a little more exposed than it needs to be: the
boot_editor struct does not need to be available to other files, and the
init function and on_exit functions differ from those provided for the
config and sysinfo screens.

This change unifies the boot_editor API with those for the other
screens.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agoui/ncurses: remove boot_editor_attr_field
Jeremy Kerr [Fri, 15 Nov 2013 07:34:07 +0000 (18:34 +1100)]
ui/ncurses: remove boot_editor_attr_field

The widgetset code handles these attributes now.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agoui/ncurses: Add block devices to system info screen
Jeremy Kerr [Fri, 15 Nov 2013 04:56:39 +0000 (15:56 +1100)]
ui/ncurses: Add block devices to system info screen

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agodiscover: populate sysinfo with block devices
Jeremy Kerr [Fri, 15 Nov 2013 04:23:54 +0000 (15:23 +1100)]
discover: populate sysinfo with block devices

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agoprotocol: Add block device information to system info
Jeremy Kerr [Fri, 15 Nov 2013 04:13:41 +0000 (15:13 +1100)]
protocol: Add block device information to system info

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agodiscover: Use pxeconffile for udhcpc option name
Jeremy Kerr [Tue, 19 Nov 2013 04:25:43 +0000 (15:25 +1100)]
discover: Use pxeconffile for udhcpc option name

The patch that went upstream for udhcpc's option 209 handling uses the
option name 'pxeconffile' rather than 'conffile', and it was added as a
non-default option:

  http://git.busybox.net/busybox/commit/?id=d3092c99ae90f

This change uses the new name, and explicilty requests this option.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agoutils/pb-console: Exit after running getty in detached state
Jeremy Kerr [Fri, 22 Nov 2013 01:36:58 +0000 (09:36 +0800)]
utils/pb-console: Exit after running getty in detached state

... otherwise we'll try and bring the UI up on the current tty too.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agoui/ncurses: Fix pad size check
Jeremy Kerr [Tue, 19 Nov 2013 02:23:10 +0000 (13:23 +1100)]
ui/ncurses: Fix pad size check

We need the y-coord, not x.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agoui/ncurses: Don't mess with prog_mode in cui_boot
Jeremy Kerr [Fri, 15 Nov 2013 01:57:13 +0000 (12:57 +1100)]
ui/ncurses: Don't mess with prog_mode in cui_boot

The discover_client_boot call is asynchronous, so setting and resetting
prog_mode doesn't gain us anything.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agoautomake: Fixups for maintainer-clean
Geoff Levand [Mon, 18 Nov 2013 22:58:48 +0000 (14:58 -0800)]
automake: Fixups for maintainer-clean

Signed-off-by: Geoff Levand <geoff@infradead.org>
6 years agolib/system: Don't leak in pb_mkdir_recursive
Jeremy Kerr [Thu, 14 Nov 2013 05:18:59 +0000 (16:18 +1100)]
lib/system: Don't leak in pb_mkdir_recursive

If the mkdir fails, we'll exit without freeing str.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agodiscover: Use mkstemp rather than tempnam
Jeremy Kerr [Thu, 14 Nov 2013 03:54:34 +0000 (14:54 +1100)]
discover: Use mkstemp rather than tempnam

We're getting warnings from some compilers about tempnam being unsafe.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agoutils/pb-console: reset after UI exit
Jeremy Kerr [Fri, 25 Oct 2013 01:58:00 +0000 (09:58 +0800)]
utils/pb-console: reset after UI exit

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agoui/ncurses/menu: Allow space to select menu items
Jeremy Kerr [Fri, 8 Nov 2013 02:03:30 +0000 (10:03 +0800)]
ui/ncurses/menu: Allow space to select menu items

To keep consistent with buttons, which also accept space.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agoui/ncurses: Add descriptive text for configuration editor
Jeremy Kerr [Wed, 6 Nov 2013 06:05:57 +0000 (14:05 +0800)]
ui/ncurses: Add descriptive text for configuration editor

This change adds:
 - 'seconds' to the timeout text entry
 - examples to the ip/mask, gateway and DNS text entries

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agoui/ncurses/nc-config: Draw config form into a scrollable pad
Jeremy Kerr [Fri, 25 Oct 2013 08:06:50 +0000 (16:06 +0800)]
ui/ncurses/nc-config: Draw config form into a scrollable pad

Currently, when the config form is larger than the screen size, the form
fails to draw.

This change draws the config screen onto a pad instead, which we can
scroll.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agonui/ncurses: Allow config screen updates
Jeremy Kerr [Fri, 25 Oct 2013 01:19:35 +0000 (09:19 +0800)]
nui/ncurses: Allow config screen updates

We may receive configuration (or sysinfo) data after the configuration
screen has been displayed. Implement config_screen_update and redraw the
widgetset when new config data arrives.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agoui/ncurses: Add help for the DNS option
Jeremy Kerr [Thu, 24 Oct 2013 08:57:38 +0000 (16:57 +0800)]
ui/ncurses: Add help for the DNS option

It's not obvious why it's there when we're configuring DHCP.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agoui/ncurses: Populate configuration interface with current defaults
Jeremy Kerr [Thu, 24 Oct 2013 08:51:44 +0000 (16:51 +0800)]
ui/ncurses: Populate configuration interface with current defaults

Sets the default values of configuration widgets to the values found in
t he current config.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agoui/ncurses: Parse configuration form & send to server
Jeremy Kerr [Thu, 24 Oct 2013 06:02:49 +0000 (14:02 +0800)]
ui/ncurses: Parse configuration form & send to server

This change implements the configuration save action, when the user
submits the nc-config form.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agoui/ncurses: Add network configuration
Jeremy Kerr [Thu, 24 Oct 2013 03:05:34 +0000 (11:05 +0800)]
ui/ncurses: Add network configuration

Add network configuration parameters. This requires a somewhat-dynamic
layout, as the fields shown depend on earlier configuration.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agoui/ncurses: Add basic config editor
Jeremy Kerr [Mon, 21 Oct 2013 10:59:12 +0000 (18:59 +0800)]
ui/ncurses: Add basic config editor

This change adds a simple configuration editor to the ncurses UI.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agoui/ncurses: Receive config messages
Jeremy Kerr [Fri, 18 Oct 2013 03:45:03 +0000 (11:45 +0800)]
ui/ncurses: Receive config messages

We just store the config in the cui for now.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agoui/ncurses: Use nc-widgets for boot editor
Jeremy Kerr [Mon, 21 Oct 2013 10:55:06 +0000 (18:55 +0800)]
ui/ncurses: Use nc-widgets for boot editor

Now that we have a simple widget set available, use this for the boot
editor.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agoui/ncurses: Add simple ncurses form widget set
Jeremy Kerr [Mon, 21 Oct 2013 06:09:43 +0000 (14:09 +0800)]
ui/ncurses: Add simple ncurses form widget set

We're doing a lot of the same stuff with forms, and we'll to implement a
lot of fields with the upcoming configuration interface.

This change introduces a simple ncurses widget set.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agoui/ncurses: Add sysinfo screen
Jeremy Kerr [Thu, 17 Oct 2013 05:52:42 +0000 (13:52 +0800)]
ui/ncurses: Add sysinfo screen

Add a simple screen for displaying the struct system_info. We add this
to the main menu as a selectable option, and separate it from the boot
option list with an unselectable blank entry.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agoui/ncurses/scr: Add definition for frame offset
Jeremy Kerr [Thu, 17 Oct 2013 05:48:35 +0000 (13:48 +0800)]
ui/ncurses/scr: Add definition for frame offset

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agoui/ncurses: nc-menu.h needs assert.h
Jeremy Kerr [Thu, 17 Oct 2013 05:47:24 +0000 (13:47 +0800)]
ui/ncurses: nc-menu.h needs assert.h

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agoui/common: Don't talloc_free sysinfo and status explicitly
Jeremy Kerr [Thu, 17 Oct 2013 04:03:51 +0000 (12:03 +0800)]
ui/common: Don't talloc_free sysinfo and status explicitly

Currently, we talloc_free() the sysinfo and status messages in the
discover client, right after performing the ui's callback.

However, the client may wish to keep a reference to this information
beyond the callback invocation. This change introduces a per-message
talloc context, which these structures are allocated under. This allows
the callbacks to talloc_steal() anything they wish to keep a reference
to.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
6 years agoui/ncurses: Add nc_scr_{un,}post()
Jeremy Kerr [Wed, 16 Oct 2013 03:30:29 +0000 (11:30 +0800)]
ui/ncurses: Add nc_scr_{un,}post()

We may have nc_scrs that aren't interested in post/unpost information,
so create helper functions that allow a NULL callback.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>