[PATCH 1/3] lib/types : Adds function to return struct config as string

Samuel Mendoza-Jonas sam at mendozajonas.com
Fri Jun 3 15:47:20 AEST 2016


On Thu, Jun 02, 2016 at 05:56:56AM -0400, Nayna Jain wrote:
> Two new functions added to return ipmi boot configuration
> and nvram boot configuration separately as string.

At first I thought this was a reimplementation of dump_config(), but I
see you're concatenating the config and nvram structs into a string so
they can be hashed in the later patches. Is this the best way to do
this?

> 
> Signed-off-by: Nayna Jain <nayna at linux.vnet.ibm.com>
> ---
>  lib/types/types.c | 75 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
>  lib/types/types.h |  3 +++
>  2 files changed, 78 insertions(+)
> 
> diff --git a/lib/types/types.c b/lib/types/types.c
> index 63045e1..2f924f1 100644
> --- a/lib/types/types.c
> +++ b/lib/types/types.c
> @@ -1,4 +1,6 @@
>  #include <string.h>
> +#include <stdlib.h>
> +#include <log/log.h>
>  #include <types/types.h>
>  #include <i18n/i18n.h>
>  
> @@ -75,3 +77,76 @@ enum device_type find_device_type(const char *str)
>  
>  	return DEVICE_TYPE_UNKNOWN;
>  }
> +
> +unsigned char *get_ipmi_boot_policy_as_string(const struct config *config)
> +{
> +        unsigned char * input_data;

Please format this (and similar declarations) as

        unsigned char *input_data;

> +
> +        input_data = talloc_asprintf(config, "%04x%s", config->ipmi_bootdev,
> +			config->ipmi_bootdev_persistent ? "1" : "0");
> +        pb_log("Input data is %s, %d, %d\n", input_data, sizeof(input_data),
> +			strlen(input_data));
> +
> +        return input_data;
> +}
> +
> +unsigned char *get_nvram_boot_policy_as_string(const struct config* config)
> +{
> +
> +        char * input_data = NULL;
> +        char * autoboot_device = NULL;
> +        unsigned int i = 0;

In Petitboot we style this largest-to-smallest to make it easier to
read, for example:

        char *autoboot_device = NULL;
        char *input_data = NULL;
        unsigned int i = 0;

Not a huge deal here but helps a lot in more noisy functions :)

> +
> +        input_data = talloc_asprintf(config, "%s%d%s%s%s%s",
> +			config->autoboot_enabled ? "1": "0",
> +                	config->autoboot_timeout_sec,
> +			config->safe_mode ? "1" : "0",
> +			config->allow_writes ? "1" : "0",
> +			config->disable_snapshots? "1" : "0",
> +                	config->lang ? config->lang : "0");

Please use tabs instead of spaces (two of the lines here stand out)

> +        for (i = 0; i < config->n_autoboot_opts; i++)
> +        {

Please format 'for' and 'if' braces like so:

	if (cond) {
		// stuff
	}

> +                if (config->autoboot_opts[i].boot_type == BOOT_DEVICE_TYPE)
> +                        autoboot_device = device_type_name(
> +					config->autoboot_opts[i].type);
> +                else
> +                        autoboot_device = config->autoboot_opts[i].uuid;
> +                input_data = talloc_asprintf_append(input_data, "%s",
> +				autoboot_device);
> +        }
> +
> +
> +        for (i =0; i < config->network.n_interfaces; i++)

Also please be consistent with spacing (i = 0 rather than i =0)

> +        {
> +                struct interface_config *iconf = config->network.interfaces[i];
> +                input_data = talloc_asprintf_append(input_data,
> +				"%02x:%02x:%02x:%02x:%02x:%02x",
> +				iconf->hwaddr[0], iconf->hwaddr[1],
> +				iconf->hwaddr[2], iconf->hwaddr[3],
> +                                iconf->hwaddr[4], iconf->hwaddr[5]);
> +
> +                input_data = talloc_asprintf_append(input_data,"%s",
> +				iconf->ignore ? "1" : "0");
> +                if (iconf->method == CONFIG_METHOD_DHCP) {
> +                        input_data = talloc_asprintf_append(input_data,
> +					"%s", "dhcp");
> +
> +                } else if (iconf->method == CONFIG_METHOD_STATIC) {
> +                        input_data = talloc_asprintf_append(input_data,
> +					"%s%s%s%s", "static",
> +					iconf->static_config.address,
> +					iconf->static_config.gateway,
> +                                        iconf->static_config.url);
> +                }
> +
> +        }
> +
> +        for (i = 0; i < config->network.n_dns_servers; i++)
> +                input_data = talloc_asprintf_append(input_data, "%s",
> +				config->network.dns_servers[i]);
> +
> +        pb_log("input data is %s, %d, %d\n", input_data, sizeof(input_data),
> +			strlen(input_data));
> +        return input_data;
> +
> +}
> diff --git a/lib/types/types.h b/lib/types/types.h
> index 6ff4620..e6e1a78 100644
> --- a/lib/types/types.h
> +++ b/lib/types/types.h
> @@ -167,4 +167,7 @@ struct config {
>  	bool			debug;
>  };
>  
> +unsigned char *get_ipmi_boot_policy_as_string(const struct config *conf);
> +unsigned char *get_nvram_boot_policy_as_string(const struct config *conf);
> +
>  #endif /* _TYPES_H */
> -- 
> 2.5.0
> 
> _______________________________________________
> Petitboot mailing list
> Petitboot at lists.ozlabs.org
> https://lists.ozlabs.org/listinfo/petitboot



More information about the Petitboot mailing list