petitboot
3 years agodiscover: Add petitboot,tty and track available consoles
Samuel Mendoza-Jonas [Wed, 8 Jun 2016 03:51:28 +0000 (13:51 +1000)]
discover: Add petitboot,tty and track available consoles

Add the NVRAM parameter petitboot,tty which sets the default console to
use when booting a kernel.
In load_config() construct a list of available consoles depending on the
current platform. A future patch depending on firmware changes will
allow this list to be constructed dynamically.

Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
3 years agolib: Add support for tracking boot consoles
Samuel Mendoza-Jonas [Tue, 7 Jun 2016 06:23:52 +0000 (16:23 +1000)]
lib: Add support for tracking boot consoles

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 <sam@mendozajonas.com>
3 years agodiscover/pxe-parser: Retrieve configs asynchronously
Samuel Mendoza-Jonas [Mon, 16 May 2016 06:06:30 +0000 (16:06 +1000)]
discover/pxe-parser: Retrieve configs asynchronously

Depending on the configuration of the DHCP server and the network, tftp
requests made by the pxe parser can timeout. The pxe parser makes these
requests synchronously so several timeouts can block the server
completely for several minutes, leaving the server unresponsive to UI
requests.

Rework the pxe parser such that it handles the result of each tftp
request in a callback, which can complete after iterate_parsers() has
returned. Each callback is allocated its own conf_context which takes a
talloc reference on the discover_context so that each callback can
commit new boot options after the initial iterate loop has completed.
This also means talloc_unlink must be used instead by the original
parent of the discover_context.

Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
3 years agoUpdate tests to support changes to pxe_parser
Samuel Mendoza-Jonas [Mon, 23 May 2016 05:56:22 +0000 (15:56 +1000)]
Update tests to support changes to pxe_parser

Substitute load_url_async() when running tests to support direct
callers of load_url_async() who will expect to read a file in a
callback.
Stub out device_handler_discover_context_commit() since it will remove
discover_options from the given discover_context, but the tests will
check the discover_context to count boot_options.

Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
3 years agodiscover/device-handler: Make boot_status() public
Samuel Mendoza-Jonas [Thu, 9 Jun 2016 01:47:20 +0000 (11:47 +1000)]
discover/device-handler: Make boot_status() public

Rename boot_status() to device_handler_boot_status() and make it
accessible by files that include device-handler.h. This enables the boot
status to be updated from additional callers, in particular within
parser functions.

Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
3 years agolib/pb-config: Properly initialise interface_config
Samuel Mendoza-Jonas [Mon, 27 Jun 2016 04:42:29 +0000 (14:42 +1000)]
lib/pb-config: Properly initialise interface_config

The addition of the "url" field is not reflected in
config_copy_interface() which leaves the pointer uninitialised, causing
a potential segfault later on.

Copy the field from the source config, and use talloc_zero() for the
interface_config struct to prevent this more generally.

Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
3 years agodiscover/platform-powerpc: Return bootdev error correctly v1.1.1
Samuel Mendoza-Jonas [Wed, 1 Jun 2016 06:39:18 +0000 (16:39 +1000)]
discover/platform-powerpc: Return bootdev error correctly

In one case get_ipmi_bootdev_ipmi() can return 0 on an error, which
leads to bootdev being treated as a valid bootdev despite being
uninitialised. If the planets line up correctly and bootdev is less than
or equal to IPMI_BOOTDEV_SETUP, Petitboot will incorrectly apply an IPMI
override.

Update the error return value in get_ipmi_bootdev_ipmi(), and properly
initialise bootdev.

Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
3 years agoui/ncurses: Remember to abort boot on server connect
Samuel Mendoza-Jonas [Thu, 26 May 2016 06:08:19 +0000 (16:08 +1000)]
ui/ncurses: Remember to abort boot on server connect

The UI can now come up before the server, but in order for a key press
to cancel autoboot a key has to be pressed once the server connects.
Instead remember to cancel autoboot if a key has been pressed at any
point.

Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
3 years agoutils: Add diagnostic script v1.1.0
Samuel Mendoza-Jonas [Thu, 28 May 2015 04:02:34 +0000 (14:02 +1000)]
utils: Add diagnostic script

Add a simple script to gather up useful information in the unlikely
event a user runs into trouble.

Usage:
pb-sos [-v] [-f file] [-d user@host:/path]

Options
 -v verbose output
 -f file Supply filename for tar archive (default pb-sos.tar)
 -d host Supply user, hostname, and path to transfer archive to a
remote host

Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
3 years agoExtend the "add url" function to allow file:// URLs
Samuel Mendoza-Jonas [Wed, 4 May 2016 05:06:45 +0000 (15:06 +1000)]
Extend the "add url" function to allow file:// URLs

This allows URLs of the form file:///path/to/local/file.conf to be used
in nc-add-url, in order to access configuration files relative
to the root directory. This is primarily a debugging tool aimed at
developers rather than an expected use case.

The DEVICE_TYPE_ANY enum is used in this case to represent that a
resulting boot option is not associated with any device in the
traditional sense, and in the UI is represented as a "Custom Local
Option".

Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
3 years agoui/ncurses: Interpret left/right keys as up/down
Samuel Mendoza-Jonas [Mon, 9 May 2016 01:41:30 +0000 (11:41 +1000)]
ui/ncurses: Interpret left/right keys as up/down

Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
3 years agopb-discover: add dtb support for PXE config
Oliver O'Halloran [Mon, 9 May 2016 05:38:47 +0000 (15:38 +1000)]
pb-discover: add dtb support for PXE config

Currently there is no way to manually specify a DTB file when with a PXE
network boot configuration file. This makes it difficult when you need
to work with or emulate a special snowflake machines with special snowflake
hardware.

Some ARM systems provide this feature with the "fdt" option so this patch
adds support for using the ftd or dtb configuration options to the PXE
config parser.

Signed-off-by: Oliver O'Halloran <oohall@gmail.com>
Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
3 years agolib/flash: fix resource leak in flash_setup_buffer() error paths
Andrew Donnellan [Wed, 4 May 2016 01:22:57 +0000 (11:22 +1000)]
lib/flash: fix resource leak in flash_setup_buffer() error paths

Some error paths in flash_setup_buffer() fail to free the flash_info struct
or close the open ffs before they return. Change them to goto the cleanup
code at the end. Separate the cleanup code into separate labels depending
on whether we need to call ffs_close(), arch_flash_close() and
talloc_free().

Signed-off-by: Andrew Donnellan <andrew.donnellan@au1.ibm.com>
Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
3 years agopb-event: Add 'boot' user event
Samuel Mendoza-Jonas [Fri, 22 Apr 2016 04:20:49 +0000 (14:20 +1000)]
pb-event: Add 'boot' user event

Add a user event to send a boot command to the discover server.
The format of the boot command is similar to the add command, eg:

pb-event boot@eth0 image="http://host/image" initrd="http://host/initrd"

and also recognises "id", "dtb", and "args" arguments.

Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
3 years agopb-console: Reduce kernel log output before starting UI
Samuel Mendoza-Jonas [Mon, 2 May 2016 03:54:54 +0000 (13:54 +1000)]
pb-console: Reduce kernel log output before starting UI

Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
3 years agoui/ncurses: Start UI before connected to server
Samuel Mendoza-Jonas [Mon, 2 May 2016 03:18:39 +0000 (13:18 +1000)]
ui/ncurses: Start UI before connected to server

If petitboot-nc starts before the discover server it will try to
connect for a short while waiting for the server to appear. However in
some scenarios the server can take longer than expected to come up, for
example if the kernel is compiled with modules and the system has many
disks, and the process will timeout and exit before the server is ready.
The UI does not appear during this time so it can appear as if Petitboot
failed to start at all.

Change the default behaviour to start the UI first, and then wait for
the server to appear. The UI will not timeout in this mode. The
"--timeout" option is added to start with the old behaviour.

Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
3 years agoui: Fix typo: 'deamon' -> 'daemon'
Samuel Mendoza-Jonas [Mon, 2 May 2016 03:18:31 +0000 (13:18 +1000)]
ui: Fix typo: 'deamon' -> 'daemon'

Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
3 years agodiscover/platform-powerpc: Zero-pad BMC aux-version v1.0.1
Samuel Mendoza-Jonas [Fri, 22 Apr 2016 01:43:15 +0000 (11:43 +1000)]
discover/platform-powerpc: Zero-pad BMC aux-version

Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
3 years agodiscover/grub2: Do not set $0 in functions
Alan Dunn [Wed, 2 Mar 2016 16:59:04 +0000 (08:59 -0800)]
discover/grub2: Do not set $0 in functions

GRUB2 does not set $0 in functions, so don't set it in our GRUB2
script parser.  (As it doesn't have a value in GRUB2 scripts, probably
no GRUB2 script depends on the value of $0.)  Additionally, dash and
bash set environment variable 0 to the name of the script (even in
functions), so the current behavior of $0 doesn't really match shell
scripts either.

Tested:
 Existing tests pass.

Signed-off-by: Alan Dunn <amdunn@google.com>
Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
3 years agoAllow evaluation of arbitrarily-positioned arguments in GRUB2 parser
Alan Dunn [Wed, 2 Mar 2016 16:59:03 +0000 (08:59 -0800)]
Allow evaluation of arbitrarily-positioned arguments in GRUB2 parser

GRUB2 allows essentially arbitrary numbers of positional arguments, so
ensure that they can be evaluated within scripts.  GRUB2 also appears
to support arbitrary numbers of leading 0's in positional parameters
(i.e., $01 should evalute the same as $1), but this doesn't seem like
a particularly important case to support.

Tested:
 Modified test-grub2-pos-param to cover higher-numbered positional
 arguments.

Signed-off-by: Alan Dunn <amdunn@google.com>
Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
3 years agoFix sparse warnings
Andrew Donnellan [Mon, 18 Apr 2016 07:05:12 +0000 (17:05 +1000)]
Fix sparse warnings

Fix some sparse warnings by using NULL instead of 0 and static-ifying a
variable not used outside its file.

Signed-off-by: Andrew Donnellan <andrew.donnellan@au1.ibm.com>
Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
3 years agoui/ncurses: Increase timeout when waiting for pb-discover
Samuel Mendoza-Jonas [Wed, 20 Apr 2016 04:29:00 +0000 (14:29 +1000)]
ui/ncurses: Increase timeout when waiting for pb-discover

Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
3 years agodiscover/udev: Don't call udev_set_log_fn()
Samuel Mendoza-Jonas [Fri, 8 Apr 2016 06:31:36 +0000 (16:31 +1000)]
discover/udev: Don't call udev_set_log_fn()

As of libudev 218 udev_set_log_fn() is deprecated, causing a
-Wdeprecated-declarations warning when building, and is otherwise a
noop.
Add a configure check for libudev, and only call udev_set_log_fn() if
using a version older than 218.

Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
3 years agodiscover: Perform pre-boot steps when timeout expires
Samuel Mendoza-Jonas [Wed, 13 Apr 2016 05:07:38 +0000 (15:07 +1000)]
discover: Perform pre-boot steps when timeout expires

When a default boot timeout expires boot() is called via
default_timeout() rather than device_handler_boot(). default_timeout()
doesn't call platform_pre_boot() beforehand, which means steps such as
clearing a temporary boot device override are skipped.
Add a call to platform_pre_boot() immediately before boot() to ensure
these steps are performed regardless of boot type.

Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
3 years agodiscover/devmapper: Read device size from sysfs
Samuel Mendoza-Jonas [Thu, 7 Apr 2016 05:29:02 +0000 (15:29 +1000)]
discover/devmapper: Read device size from sysfs

If udev doesn't export the ID_PART_ENTRY_SIZE variable for a device we
skip creating a snapshot for it. However in most cases the sysfs
attribute which udev reads to find ID_PART_ENTRY_SIZE is still
available. Therefore if we don't have access to ID_PART_ENTRY_SIZE try
to find the size in sysfs directly.
This allows us to create snapshots for devices which often don't have
this udev variable set, such as software raid (md) devices and NVMe
devices.

Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
3 years agoconfigure.ac: Add checks for libflash and libdevmapper
Samuel Mendoza-Jonas [Tue, 5 Apr 2016 04:46:14 +0000 (14:46 +1000)]
configure.ac: Add checks for libflash and libdevmapper

libdevmapper is a hard dependency since snapshots were introduced, so
add an unconditional configure-time check for it.
Also add a check for libflash library and headers if --enable-mtd is
set.

Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
3 years agoui/ncurses: Disable autoboot if boot list is empty
Samuel Mendoza-Jonas [Mon, 4 Apr 2016 05:14:07 +0000 (15:14 +1000)]
ui/ncurses: Disable autoboot if boot list is empty

If an empty boot order is saved disable autoboot. However don't set
autoboot_enabled to false by clearing the list, as this will hide the
list when it is likely the user wants to make changes.

Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
3 years agoui/ncurses: Define extra key codes encountered in QEMU
Samuel Mendoza-Jonas [Thu, 31 Mar 2016 03:03:08 +0000 (14:03 +1100)]
ui/ncurses: Define extra key codes encountered in QEMU

Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
3 years agoversion.sh: Fix in-tree case and allow external variables
Samuel Mendoza-Jonas [Mon, 4 Apr 2016 03:23:43 +0000 (13:23 +1000)]
version.sh: Fix in-tree case and allow external variables

"$(basename $0)" would return the name of the script, when what is
needed is the name of the directory; use 'dirname' instead.
If PETITBOOT_VERSION is set, as in a buildroot environment, use this
variable instead of the default case.

Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
3 years agodiscover/grub2: Ignore sign-compare warning for generated code
Samuel Mendoza-Jonas [Fri, 1 Apr 2016 00:38:19 +0000 (11:38 +1100)]
discover/grub2: Ignore sign-compare warning for generated code

Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
3 years agodiscover: Respect persistent flag for network overrides v1.0.0
Samuel Mendoza-Jonas [Mon, 21 Mar 2016 05:35:05 +0000 (16:35 +1100)]
discover: Respect persistent flag for network overrides

If the persistent bit is set in a IPMI network override, overwrite any
existing interface config in NVRAM with the new network override.

Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
3 years agodiscover/device-handler: Attempt to retry failed mounts
Sam Mendoza-Jonas [Tue, 15 Mar 2016 05:30:17 +0000 (16:30 +1100)]
discover/device-handler: Attempt to retry failed mounts

Commit 6c1a9dd, "discover: Allow fs recovery if snapshot available",
forced the use of 'norecovery' for all XFS mounts to avoid failing when
a cross-endian journal existed. This is a bit heavy handed, healthy XFS
file systems can still be safely mounted, as can dirty filesystems in
the same endian as Petitboot.

This adds try_mount() which opportunistically mounts devices and falls
back to using 'norecovery' where possible on failure. This enables XFS
filesystems to be mounted read-write when possible. try_mount() contains
the logic previously described by fs_parameters(), and should be used in
place of any existing calls to mount().

Signed-off-by: Sam Mendoza-Jonas <sam@mendozajonas.com>
3 years agopo: Update Makevars to match Makevars.template
Samuel Mendoza-Jonas [Mon, 21 Mar 2016 00:15:29 +0000 (11:15 +1100)]
po: Update Makevars to match Makevars.template

When building under buildroot the following message appears:

"Please update po/Makevars so that it defines all the variables
mentioned in po/Makevars.template."

Update Makevars to include definitions for these extra variables, and
set MSGMERGE_OPTIONS to --add-location=never to avoid adding noise to
the .po files.

Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
3 years agodiscover/boot: Safely cleanup after failed load
Sam Mendoza-Jonas [Tue, 15 Mar 2016 02:35:21 +0000 (13:35 +1100)]
discover/boot: Safely cleanup after failed load

If a call to load_url_async() fails immediately, boot() will free the
boot task and return. If other jobs started by load_url_async()
are still running they will attempt to free their task struct in
load_url_process_exit(), however the original boot task is the parent
context of this process task, resulting in a double-free.

Instead call cleanup_cancellations if an error immediately occurs to
cancel any pending load operations safely before freeing the boot task.

Signed-off-by: Sam Mendoza-Jonas <sam@mendozajonas.com>
3 years agoui/ncurses: Re-add autoboot selection to config screen
Sam Mendoza-Jonas [Fri, 11 Mar 2016 05:11:31 +0000 (16:11 +1100)]
ui/ncurses: Re-add autoboot selection to config screen

The new boot order interface removed the autoboot enable/disable buttons.
However this means the only way to disable autoboot is to remove all
options from the boot order list, or know that you can manually set the
`auto-boot?` flag in nvram.

This re-introduces an autoboot enable/disable widget so that autoboot
can be disabled without losing an existing boot order. The translated
strings for "Autoboot" are salvaged from earlier use, and two new
untranslated strings are introduced.

Signed-off-by: Sam Mendoza-Jonas <sam@mendozajonas.com>
3 years agotest/lib: Avoid array overflow of child_argv[]
Anton Blanchard [Sun, 3 Jan 2016 10:37:52 +0000 (21:37 +1100)]
test/lib: Avoid array overflow of child_argv[]

We allocate 3 elements in child_argv, but write 4.

Signed-off-by: Anton Blanchard <anton@samba.org>
Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
3 years agolib/fold: Catch error case from mbrtowc()
Sam Mendoza-Jonas [Thu, 3 Mar 2016 02:31:18 +0000 (13:31 +1100)]
lib/fold: Catch error case from mbrtowc()

The assert() statement in fold_text() only evaluates in a debug build.
If mbrtowc() encounters an error return the portion of the string that
has been parsed and stop.

This avoids an issue with glibc 2.22 where previous calls to
setlocale() failed and set an unsuitable locale. Since the error was not
caught this resulted in an infinite loop when trying to access the
Language screen.

Signed-off-by: Sam Mendoza-Jonas <sam@mendozajonas.com>
3 years agoui/ncurses: Check wcstombs() for error in nc-lang
Sam Mendoza-Jonas [Wed, 2 Mar 2016 04:36:36 +0000 (15:36 +1100)]
ui/ncurses: Check wcstombs() for error in nc-lang

If we are unable to correctly parse wide-character strings for display
in the Language screen (eg. due to an incorrect locale) display an
error string instead of continuing to try to display the string.

Signed-off-by: Sam Mendoza-Jonas <sam@mendozajonas.com>
3 years agodiscover/grub2: Fix handling of positional parameters
Alan Dunn [Wed, 2 Mar 2016 16:59:02 +0000 (08:59 -0800)]
discover/grub2: Fix handling of positional parameters

Positional parameters are set in the environment with '$' prepended to
the name.  This causes lookups to fail because parameter lookups don't
include the '$'.

TESTED:
 Added a test that covers positional parameters in GRUB2 parser.
 Build succeeds, tests pass.

Bootstrapped-by: Nancy Yuen <yuenn@google.com>
Signed-off-by: Alan Dunn <amdunn@google.com>
Signed-off-by: Sam Mendoza-Jonas <sam@mendozajonas.com>
3 years agoChange parser interface to allow stat
Alan Dunn [Wed, 24 Feb 2016 16:12:25 +0000 (08:12 -0800)]
Change parser interface to allow stat

Currently, the GRUB2 parser incorrectly reports "[ -f <path> ]" as
false if the size of the file is above 1 MB.  This patch changes the
parser interface to allow stating files (with parser_stat_file).  Then
in the implementation of "[ -f <path> ]", we can use parser_stat_file
instead of parser_request_file which has the size limitation.  I
eliminate parser_check_dir in lieu of this new interface, which has
the side effect of making "[ -d <path> ]" work (the error code for
stat was not checked correctly before).

I add a basic test for the test file operations -f, -s, and -d (to
show that my changes to test file operations do not break them) and
minorly modify the test framework to ensure it has enough fidelity to
cause the expected results.  Unfortunately the test wouldn't have
caught the issue with -d, since the test framework stubs out the
parser interface itself.  Nor can the test framework catch the initial
problem with -f because the imposed limit is (transitively) in
function parser_request_file.

Note that -f and -d follow symlinks despite the fact that GRUB does
not (see
http://lists.gnu.org/archive/html/grub-devel/2016-02/msg00142.html
discussing GRUB's behavior).  This is not a change to Petitboot's
behavior though.

Tested:
 The test test-grub2-test-file-ops passes.  I booted Petitboot against
 a GRUB snippet:

status=success

if [ ! -f /large_file -a $status = success ]
then status=fail_large_file
fi
if [ ! -d /a_directory -a $status = success ]
then status=fail_dir
fi

menuentry $status {
  linux /vmlinux
}

 (after making /large_file a file of size > 1 MiB and /a_directory a
 directory) and the menuentry had title "success", as desired.

Signed-off-by: Alan Dunn <amdunn@google.com>
Signed-off-by: Sam Mendoza-Jonas <sam@mendozajonas.com>
3 years agoIn GRUB2 parser save_env, treat unset variable value as empty
Alan Dunn [Tue, 15 Mar 2016 00:40:47 +0000 (17:40 -0700)]
In GRUB2 parser save_env, treat unset variable value as empty

It seems better to treat unset variable values as empty rather than
crashing in save_env.  While GRUB's behavior is actually to delete the
variable from the environment block, it seems useful to at least not
crash while later on someone can do further work to improve GRUB
compatibility if desired.

Tested:
 Modified test-grub2-save-env to cover this case.

Signed-off-by: Alan Dunn <amdunn@google.com>
Signed-off-by: Sam Mendoza-Jonas <sam@mendozajonas.com>
3 years agopo: Update help string and add untranslated strings
Sam Mendoza-Jonas [Sun, 6 Mar 2016 23:42:46 +0000 (10:42 +1100)]
po: Update help string and add untranslated strings

Update the nc-lang help string translation to reflect the change
introduced in the previous commit, "Remove "h=help" hint in language page".
Also update each .po file with any new strings lacking a translation.

Signed-off-by: Sam Mendoza-Jonas <sam@mendozajonas.com>
3 years agoMerge pull request #13 from johnhihi/master
Sam Mendoza-Jonas [Sun, 6 Mar 2016 23:52:06 +0000 (10:52 +1100)]
Merge pull request #13 from johnhihi/master

Remove "h=help" hint in language page

3 years agolib/flash: Fix version side being interpreted backwards
Sam Mendoza-Jonas [Fri, 4 Mar 2016 23:20:33 +0000 (10:20 +1100)]
lib/flash: Fix version side being interpreted backwards

Signed-off-by: Sam Mendoza-Jonas <sam@mendozajonas.com>
3 years agoRemove "h=help" hint in language page
Johnny [Wed, 2 Mar 2016 07:52:22 +0000 (15:52 +0800)]
Remove "h=help" hint in language page

Signed-off-by: Johnny <johnny.cl.chang@foxconn.com>
3 years agoUse 'Primary' instead of 'Current' for flash sides
Sam Mendoza-Jonas [Thu, 25 Feb 2016 23:39:55 +0000 (10:39 +1100)]
Use 'Primary' instead of 'Current' for flash sides

When queried libflash will return the 'first' flash side (ie. the one
with the lowest TOC address), however we label this the 'Current' side
which is incorrect if the machine has booted from the alternate side.

A future fix will inlcude additional platform logic to determine which
flash side is current; in the interim label the first flash side as
'Primary' instead of 'Current'.

Signed-off-by: Sam Mendoza-Jonas <sam@mendozajonas.com>
3 years agodiscover: Include leading zero in firmware version string
Sam Mendoza-Jonas [Wed, 24 Feb 2016 23:40:59 +0000 (10:40 +1100)]
discover: Include leading zero in firmware version string

Signed-off-by: Sam Mendoza-Jonas <sam@mendozajonas.com>
3 years agodiscover: Add support for IPMI network override
Sam Mendoza-Jonas [Mon, 15 Feb 2016 05:47:01 +0000 (16:47 +1100)]
discover: Add support for IPMI network override

On BMC platforms the 'Get System Boot Options' command can also be used
to check for a temporary network interface config override. This is
implemented via the optional 'OEM Parameters' field defined in the IPMI
v2 spec. We define the actual format of the field as:
- 4 byte cookie value
- 2 byte version value
- 1 byte hardware address size
- 1 byte IP address size
- Hardware address
- 1 byte flags for 'ignore' and 'method'
And for static configs:
- IP Address
- 1 byte subnet value
- Gateway address

If set the config override replaces any other interface config, forcing
the use of the specified configuration.

Signed-off-by: Sam Mendoza-Jonas <sam@mendozajonas.com>
3 years agoutils/hooks: Write offb device address to device tree
Sam Mendoza-Jonas [Tue, 22 Dec 2015 02:39:28 +0000 (10:39 +0800)]
utils/hooks: Write offb device address to device tree

On OpenPOWER machines, kernels missing the AST video driver can use the
existing 'Open Firmware' framebuffer device code to inherit an existing
framebuffer from Petitboot. This requires us to translate the 64-bit
address of the framebuffer 'back' into a PCI address and write it into
an assigned-addresses property in the device tree.

Bootstrapped-by: Jeremy Kerr <jk@ozlabs.org>
Signed-off-by: Sam Mendoza-Jonas <sam@mendozajonas.com>
3 years agoui/ncurses: Add missing newline in nc-sysinfo
Sam Mendoza-Jonas [Wed, 10 Feb 2016 04:28:49 +0000 (15:28 +1100)]
ui/ncurses: Add missing newline in nc-sysinfo

Signed-off-by: Sam Mendoza-Jonas <sam@mendozajonas.com>
3 years agoRetrieve BMC version info via IPMI
Sam Mendoza-Jonas [Fri, 29 Jan 2016 04:16:34 +0000 (15:16 +1100)]
Retrieve BMC version info via IPMI

On BMC machines the "Get Device ID" and "Get BMC Golden Side Version"
IPMI commands are available. If possible retrieve some interesting
version numbers and display them in the System Information screen.

Signed-off-by: Sam Mendoza-Jonas <sam@mendozajonas.com>
3 years agoDisplay VERSION partition info on BMC machines
Samuel Mendoza-Jonas [Tue, 8 Dec 2015 23:32:41 +0000 (10:32 +1100)]
Display VERSION partition info on BMC machines

On supported platforms read the VERSION partition on startup and display
the available versions strings in the System Information screen.

This adds a skeleton hostboot.c to support possible additional BMC
platform support.

Signed-off-by: Sam Mendoza-Jonas <sam@mendozajonas.com>
3 years agolib/flash: Add support for platform versions
Samuel Mendoza-Jonas [Mon, 14 Dec 2015 23:02:31 +0000 (10:02 +1100)]
lib/flash: Add support for platform versions

Add basic libflash support to read the VERSION partition on BMC
machines. This adds a dependency on the libflash shared library from
Skiboot.
The MTD partition is accessed through the libflash helper functions.
Once read into a buffer, the VERSION partition is a simple list of
newline-terminated version strings. Some BMC platforms may have two
'sides' to flash - these are interpreted as the "current" and "other"
sides depending on which one the current Petitboot is running from.

Signed-off-by: Sam Mendoza-Jonas <sam@mendozajonas.com>
3 years agolib: Add CCAN headers for endian helpers
Samuel Mendoza-Jonas [Mon, 14 Dec 2015 23:02:46 +0000 (10:02 +1100)]
lib: Add CCAN headers for endian helpers

Signed-off-by: Sam Mendoza-Jonas <sam@mendozajonas.com>
3 years agoAdd --enable-mtd configure option
Samuel Mendoza-Jonas [Mon, 14 Dec 2015 03:25:12 +0000 (14:25 +1100)]
Add --enable-mtd configure option

Support optionally building features that rely on libflash support.

Signed-off-by: Sam Mendoza-Jonas <sam@mendozajonas.com>
3 years agodiscover: Print IPMI bootdev response for debug
Sam Mendoza-Jonas [Wed, 13 Jan 2016 02:11:05 +0000 (13:11 +1100)]
discover: Print IPMI bootdev response for debug

Signed-off-by: Sam Mendoza-Jonas <sam@mendozajonas.com>
3 years agodiscover/grub: Fix handling of empty strings
Sam Mendoza-Jonas [Tue, 12 Jan 2016 04:58:13 +0000 (15:58 +1100)]
discover/grub: Fix handling of empty strings

If "" or '' are used in a statement to omit a word, we must still
return a TOKEN_WORD for an empty string.

In particular this fixes an issue where Petitboot would fail to parse
the grub.cfg included in the Debian 8.2 install image, which includes a
menuentry statement with an empty name.

Signed-off-by: Sam Mendoza-Jonas <sam@mendozajonas.com>
3 years agolib/talloc: Avoid early exit before va_end()
Samuel Mendoza-Jonas [Fri, 18 Dec 2015 03:04:15 +0000 (14:04 +1100)]
lib/talloc: Avoid early exit before va_end()

Fixes Coverity defect #30486

Signed-off-by: Sam Mendoza-Jonas <sam@mendozajonas.com>
3 years agodiscover: Release process resources on error
Samuel Mendoza-Jonas [Fri, 18 Dec 2015 03:00:49 +0000 (14:00 +1100)]
discover: Release process resources on error

Fixes Coverity defect #30472

Signed-off-by: Sam Mendoza-Jonas <sam@mendozajonas.com>
3 years agoui/common: Only close valid file descriptor
Samuel Mendoza-Jonas [Fri, 18 Dec 2015 02:51:00 +0000 (13:51 +1100)]
ui/common: Only close valid file descriptor

Fixes Coverity defect #30466

Signed-off-by: Sam Mendoza-Jonas <sam@mendozajonas.com>
3 years agodiscover: Handle BTRFS root subvolumes
Sam Mendoza-Jonas [Tue, 5 Jan 2016 04:01:58 +0000 (15:01 +1100)]
discover: Handle BTRFS root subvolumes

During install some distributions[0] will create subvolumes when formatting
the root filesystem with BTRFS. In particular this can mean that
bootloader config files will appear (in the case of GRUB) under
/var/petitboot/mnt/dev/$device/@/boot/grub/
rather than the expected
/var/petitboot/mnt/dev/$device/boot/grub/

If this is the case, perform all file operations from the parser
relative to this subvolume rather than the mount point. At the moment
this only supports the trivial case where the subvolume name for root is
blank (ie. '@').

[0] In particular, Ubuntu from at least 14.04

Signed-off-by: Sam Mendoza-Jonas <sam@mendozajonas.com>
3 years agodiscover/grub2: Fix behavior of save_env -f
Alan Dunn [Tue, 12 Jan 2016 23:43:02 +0000 (15:43 -0800)]
discover/grub2: Fix behavior of save_env -f

Currently, "save_env -f" in the GRUB2 parser only works with three
arguments, which means only commands of the form "save_env -f <path>"
that save *no* environment variables are allowed.

Allow "save_env -f <path> [<var>]*", making "save_env -f" useful.

Tested:
 Unit test test-grub2-save-env-dash-f tests this change, and the
 remaining unit tests still pass.

Signed-off-by: Alan Dunn <amdunn@google.com>
Signed-off-by: Sam Mendoza-Jonas <sam@mendozajonas.com>
3 years agolib/pb-protocol: Fix NULL dereference on non-powerpc
Samuel Mendoza-Jonas [Mon, 21 Dec 2015 05:16:40 +0000 (16:16 +1100)]
lib/pb-protocol: Fix NULL dereference on non-powerpc

If not running on a powerpc platform the bmc_mac pointer remains NULL.
If this is the case set an address of zero when serialising rather
than dereferencing the pointer.

Signed-off-by: Samuel Mendoza-Jonas <sam.mj@au1.ibm.com>
3 years agodiscover: extend URL in UI to support auto-discovery
Nishanth Aravamudan [Wed, 19 Aug 2015 21:05:43 +0000 (14:05 -0700)]
discover: extend URL in UI to support auto-discovery

The URL field currently only supports loading a particular file for
static network configurations. But it makes sense in certain static
network configurations to 'auto-discover' a file like petitboot does
with DHCP -- based off the MAC address and IP. Extend
device_handler_process_url to take those as parameters, and toggle off
the URL ending in a '/' to indicate whether to 'auto-discover' or
directly load the specified URL.

Signed-off-by: Nishanth Aravamudan <nacc@linux.vnet.ibm.com>
Signed-off-by: Samuel Mendoza-Jonas <sam.mj@au1.ibm.com>
3 years agoui: add URL for static configurations to load a specified file
Nishanth Aravamudan [Wed, 19 Aug 2015 21:05:05 +0000 (14:05 -0700)]
ui: add URL for static configurations to load a specified file

In certain configurations, e.g. automation, we want to use static
networking but load a particular file, automatically and parse it as a
pxelinux config file. Currently, we support something like this for DHCP
based booting, but not static. Add a URL field to the UI for static
configurations and reuse the logic from device_handler_process_url() to
load the specified file.

Signed-off-by: Nishanth Aravamudan <nacc@linux.vnet.ibm.com>
Signed-off-by: Samuel Mendoza-Jonas <sam.mj@au1.ibm.com>
3 years agoMerge pull request #11 from open-power/coverity
Sam Mendoza-Jonas [Fri, 18 Dec 2015 00:28:30 +0000 (11:28 +1100)]
Merge pull request #11 from open-power/coverity

Coverity fixes

3 years agoui/ncurses: Remove redundant assignment
Samuel Mendoza-Jonas [Wed, 11 Nov 2015 23:24:29 +0000 (10:24 +1100)]
ui/ncurses: Remove redundant assignment

Fixes Coverity defect #30484

Signed-off-by: Samuel Mendoza-Jonas <sam.mj@au1.ibm.com>
3 years agodiscover: Set umask before mkstemp()
Samuel Mendoza-Jonas [Wed, 11 Nov 2015 23:04:23 +0000 (10:04 +1100)]
discover: Set umask before mkstemp()

Fixes Coverity defect #30479

Signed-off-by: Samuel Mendoza-Jonas <sam.mj@au1.ibm.com>
3 years agodiscover: Null-terminate buffer in user_event_process()
Samuel Mendoza-Jonas [Wed, 11 Nov 2015 06:08:01 +0000 (17:08 +1100)]
discover: Null-terminate buffer in user_event_process()

Fixes Coverity defect #30480

Signed-off-by: Samuel Mendoza-Jonas <sam.mj@au1.ibm.com>
3 years agodiscover: Add two missing talloc_free()s
Samuel Mendoza-Jonas [Wed, 11 Nov 2015 06:01:28 +0000 (17:01 +1100)]
discover: Add two missing talloc_free()s

Fixes Coverity defects #30474 and #30475

Signed-off-by: Samuel Mendoza-Jonas <sam.mj@au1.ibm.com>
3 years agodiscover: Skip malformed bootdev fields
Samuel Mendoza-Jonas [Wed, 11 Nov 2015 05:58:59 +0000 (16:58 +1100)]
discover: Skip malformed bootdev fields

Fixes Coverity defect #30471

Signed-off-by: Samuel Mendoza-Jonas <sam.mj@au1.ibm.com>
3 years agoui/common: Free message on return
Samuel Mendoza-Jonas [Wed, 11 Nov 2015 05:44:07 +0000 (16:44 +1100)]
ui/common: Free message on return

Fixes Coverity defect #30468

Signed-off-by: Samuel Mendoza-Jonas <sam.mj@au1.ibm.com>
3 years agolib/talloc: Add missing va_end() calls
Samuel Mendoza-Jonas [Wed, 11 Nov 2015 05:38:24 +0000 (16:38 +1100)]
lib/talloc: Add missing va_end() calls

Fixes Coverity defects #30485 and #30486

Signed-off-by: Samuel Mendoza-Jonas <sam.mj@au1.ibm.com>
3 years agodiscover: Fix dead code in udev_handle_cdrom_events()
Samuel Mendoza-Jonas [Fri, 18 Dec 2015 00:15:01 +0000 (11:15 +1100)]
discover: Fix dead code in udev_handle_cdrom_events()

The check against ddev->mounted to cause an eject action is logically
impossible. Change it so a cdrom_eject() is called properly.
Change the return value to 'true' for any action caused by
DISK_EJECT_REQUEST - no further action is appropriate in this case

Signed-off-by: Samuel Mendoza-Jonas <sam.mj@au1.ibm.com>
3 years agoui/ncurses: Check for NULL in pmenu_item_get_index()
Samuel Mendoza-Jonas [Wed, 11 Nov 2015 05:11:41 +0000 (16:11 +1100)]
ui/ncurses: Check for NULL in pmenu_item_get_index()

Fixes Coverity defect #30476

Signed-off-by: Samuel Mendoza-Jonas <sam.mj@au1.ibm.com>
3 years agodiscover: Use snprintf() when building sysparam path
Samuel Mendoza-Jonas [Mon, 9 Nov 2015 03:59:41 +0000 (14:59 +1100)]
discover: Use snprintf() when building sysparam path

Fixes Coverity defects #30481 and #30482

Signed-off-by: Samuel Mendoza-Jonas <sam.mj@au1.ibm.com>
3 years agodiscover: Properly handle return values
Samuel Mendoza-Jonas [Mon, 9 Nov 2015 03:45:58 +0000 (14:45 +1100)]
discover: Properly handle return values

Fixes three unchecked return values, and one missing
initialisation.
Fixes Coverity defects #30450, #30451, #30454, and #30483

Signed-off-by: Samuel Mendoza-Jonas <sam.mj@au1.ibm.com>
3 years agoMerge pull request #10 from themoken/master
Sam Mendoza-Jonas [Thu, 17 Dec 2015 00:42:41 +0000 (11:42 +1100)]
Merge pull request #10 from themoken/master

Add BMC interface MAC to system info output

3 years agoAdd BMC interface MAC to system info output
Jack Miller [Wed, 9 Dec 2015 18:03:24 +0000 (12:03 -0600)]
Add BMC interface MAC to system info output

Useful for identifying the initial BMC traffic on the network.

Signed-off-by: Jack Miller <jack@codezen.org>
4 years agopo: Translation updates
Samuel Mendoza-Jonas [Wed, 11 Nov 2015 03:00:12 +0000 (14:00 +1100)]
po: Translation updates

- Abbreviate several translations of "Disk R/W".
- Do not expand 'DHCP' in pt_BR.
- Remove several extra space characters in French translations.
- Shorten some translations of "Boot Order", "DNS Servers".

Signed-off-by: Samuel Mendoza-Jonas <sam.mj@au1.ibm.com>
4 years agopo: Translation Updates
Samuel Mendoza-Jonas [Fri, 30 Oct 2015 02:18:02 +0000 (13:18 +1100)]
po: Translation Updates

Abbreviation and help text updates.

Signed-off-by: Samuel Mendoza-Jonas <sam.mj@au1.ibm.com>
4 years agodiscover/ipmi: Increase IPMI timeout to a reasonable value
Jeremy Kerr [Wed, 30 Sep 2015 00:38:36 +0000 (08:38 +0800)]
discover/ipmi: Increase IPMI timeout to a reasonable value

We've seen some IPMI timeouts during testing - meaning that an IPMI
bootdev setting will be ignored. This can result in a machine booting
from an incorrect boot device, or missing a 'safe mode' indication, or
incorrectly proceeding past petitboot.

The firmware & kernel has its own timeout & retry mechanism, so we
already have a little error-recovery there; the timeout in petitboot is
to prevent an indefinite block if the kernel interface isn't behaving
correctly.

So, this change bumps the timeout to a value that suits BMCs we've seen
in the field (specifying a 2 second timeout, with one retry).

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
4 years agodiscover/ipmi: Use advisory locking on ipmi device
Jeremy Kerr [Tue, 29 Sep 2015 04:14:16 +0000 (12:14 +0800)]
discover/ipmi: Use advisory locking on ipmi device

The ipmi module is shared between pb-config and pb-discover. During
system initilisation, we're likely to have a few invocations of
pb-config running, as well as pb-discover starting.

We may have multiple potential concurrent accesses to the ipmi device
node. To avoid problems, this change introduces a fcntl lock on the
device node.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
4 years agodiscover/devmapper: Use explicit 64-bit types for sector counts
Jeremy Kerr [Wed, 30 Sep 2015 02:26:35 +0000 (10:26 +0800)]
discover/devmapper: Use explicit 64-bit types for sector counts

We currently have a bug where the return value from get_block_sectors
may overflow an unsigned int, so we create a snapshot that is too small.

This change uses uint64_t types for the sector counts.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
4 years agodiscover: Set default language
Jeremy Kerr [Thu, 24 Sep 2015 04:38:47 +0000 (14:38 +1000)]
discover: Set default language

Rather than setting NULL, do a setlocale(LC_ALL, NULL) to query the
system locale value as our default.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
4 years agopo: Add missed translations fixes
Jeremy Kerr [Fri, 18 Sep 2015 06:25:50 +0000 (14:25 +0800)]
po: Add missed translations fixes

We have a few manual fixes missing from the fr.po translation.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
4 years agodiscover: status messages shouldn't have a trailing newline
Jeremy Kerr [Fri, 18 Sep 2015 02:47:33 +0000 (10:47 +0800)]
discover: status messages shouldn't have a trailing newline

Fix the status message, and remove the newline from our translations.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
4 years agopo: Manual translation formatting fixes
Jeremy Kerr [Fri, 18 Sep 2015 02:42:43 +0000 (10:42 +0800)]
po: Manual translation formatting fixes

We have a few minor issues, mostly formatting, from the latest translation
drop.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
4 years agopo: translation updates
Jeremy Kerr [Fri, 18 Sep 2015 01:34:28 +0000 (09:34 +0800)]
po: translation updates

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
4 years agodiscover: Add translation comments for status messages
Jeremy Kerr [Fri, 18 Sep 2015 01:13:24 +0000 (09:13 +0800)]
discover: Add translation comments for status messages

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
4 years agopo: Update translation files
Samuel Mendoza-Jonas [Tue, 15 Sep 2015 06:25:04 +0000 (16:25 +1000)]
po: Update translation files

Add additional source files to POTFILES.in and update the *.po files
where able.

Signed-off-by: Samuel Mendoza-Jonas <sam.mj@au1.ibm.com>
4 years agoFix certain calls to gettext
Samuel Mendoza-Jonas [Tue, 15 Sep 2015 06:24:24 +0000 (16:24 +1000)]
Fix certain calls to gettext

Properly call gettext for strings in discover/device-handler.c that are
user-visible, and fix the help string in ui/ncurses/nc-subset.c

Signed-off-by: Samuel Mendoza-Jonas <sam.mj@au1.ibm.com>
4 years agoMerge branch 'pb-plugin' into master
Samuel Mendoza-Jonas [Fri, 11 Sep 2015 05:56:18 +0000 (15:56 +1000)]
Merge branch 'pb-plugin' into master

Signed-off-by: Samuel Mendoza-Jonas <sam.mj@au1.ibm.com>
4 years agopb-plugin: Don't execute metadata files
Jeremy Kerr [Fri, 11 Sep 2015 04:40:16 +0000 (12:40 +0800)]
pb-plugin: Don't execute metadata files

Rather than sourcing a plugin's metadata file, explicitly parse
variables.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
4 years agoui/ncurses: Improve scrolling behaviour
Samuel Mendoza-Jonas [Wed, 9 Sep 2015 04:39:34 +0000 (14:39 +1000)]
ui/ncurses: Improve scrolling behaviour

The nc-config screen now includes several select options with a FIELD
height greater than one, but config_screen_widget_focus() will only
scroll down enough to see the first line of text.
Update config_screen_widget_focus() to try and make as much of the
focussed widget visible as possible.

Signed-off-by: Samuel Mendoza-Jonas <sam.mj@au1.ibm.com>
4 years agoui/ncurses: Allow text wrapping in select widgets
Samuel Mendoza-Jonas [Tue, 8 Sep 2015 23:03:52 +0000 (09:03 +1000)]
ui/ncurses: Allow text wrapping in select widgets

Several string translations used in select widgets are longer than the
maximum possible width of the widget. Rather than associating several
FIELDs with a select option, use a fold_text callback to pad out
substrings of the original string such that the ncurses O_WRAP option
properly wraps strings within the field.

Signed-off-by: Samuel Mendoza-Jonas <sam.mj@au1.ibm.com>
4 years agodiscover: Allow fs recovery if snapshot available
Samuel Mendoza-Jonas [Tue, 25 Aug 2015 00:33:14 +0000 (10:33 +1000)]
discover: Allow fs recovery if snapshot available

If we have a device-mapper snapshot available we can now guarantee
filesystem recovery will not write back to a read-only mounted disk.
Allow recovery on those devices with the notable exception of XFS which
may fail to mount if the filesystem is the opposite endian of Petitboot.

Signed-off-by: Samuel Mendoza-Jonas <sam.mj@au1.ibm.com>
4 years agoui/ncurses: Improve update handling in nested screens
Samuel Mendoza-Jonas [Wed, 2 Sep 2015 05:43:39 +0000 (15:43 +1000)]
ui/ncurses: Improve update handling in nested screens

Several screens in petitboot-nc require an update if a config or sysinfo
update is received. However if those screens exist but are not the
current screen they will incorrectly try to draw to the screen.

Where the currently active screen is a textscreen (eg. a help screen)
the update is delayed until after the screen is exited.

In the particular case of nc-config where the current screen can be an
nc-subset screen, the nc-subset screen is exited immediately so the
update can be performed, since the nc-subset screen depends on the
information in the previous screen.

Signed-off-by: Samuel Mendoza-Jonas <sam.mj@au1.ibm.com>
4 years agoui/ncurses: Change arrangement of boot order buttons
Samuel Mendoza-Jonas [Fri, 4 Sep 2015 05:52:20 +0000 (15:52 +1000)]
ui/ncurses: Change arrangement of boot order buttons

The buttons 'Add Device', 'Clear', and 'Clear & Boot Any' are short
enough to be positioned horizontally, but several localisations have
strings as long as all three buttons combined.

Instead arrange the buttons vertically and allow longer strings to
resize the width of the button to fit the whole string.

Signed-off-by: Samuel Mendoza-Jonas <sam.mj@au1.ibm.com>
4 years agoui/ncurses: Resize & adjust OK/Help/Cancel buttons
Samuel Mendoza-Jonas [Fri, 4 Sep 2015 05:47:42 +0000 (15:47 +1000)]
ui/ncurses: Resize & adjust OK/Help/Cancel buttons

The localisation of 'OK' is cut short in a few languages by a character
or two - adjust the buttons in each affected screen slightly to
accommodate.

Signed-off-by: Samuel Mendoza-Jonas <sam.mj@au1.ibm.com>