Files
s390-tools/zipl/include/envblk.h
Eduard Shishkin e97c85bb80 zipl-editenv: added zIPL multienvironment support
. Support multiple namespaces in the installed environment block;
. Add option --site (-S) to specify a particular namespace
  when operating on the installed environment block;
. Add option --effective-site (-E) to specify a particular
  namespace. When using in a combination with the option -l
  (--list), it displays zIPL environment that would take place if
  the specified namespace was activated at boot time;
. Modify set/unset/reset/list operations over the installed
  environment block in the case when the option --site is specified

Reviewed-by: Stefan Haberland <sth@linux.ibm.com>
Signed-off-by: Eduard Shishkin <edward6@linux.ibm.com>
Signed-off-by: Jan Höppner <hoeppner@linux.ibm.com>
2022-06-03 18:40:36 +02:00

58 lines
2.2 KiB
C

/*
* s390-tools/zipl/include/bootmap.h
* Functions to handle environment block.
*
* Copyright IBM Corp. 2020
*
* s390-tools is free software; you can redistribute it and/or modify
* it under the terms of the MIT license. See LICENSE for details.
*
*/
#include "boot/s390.h" /* for PAGE_SIZE */
#define ZIPL_ENVBLK_SIGNATURE "# zIPL Environment Block\n"
#define ENVBLK_DEFAULT_IMPORT_SOURCE "/etc/ziplenv"
/*
* The following limit can be increased. It requires modifications
* of the code, which is responsible for handling environment in
* stage3, which will increase its memory footprint.
*/
#define ENVBLK_MAX_LINES (PAGE_SIZE / 8 /* sizeof(struct env_hash_entry */)
#define ENVBLK_MAX_IMPORT_SIZE(envblk_size) \
(envblk_size - sizeof(ZIPL_ENVBLK_SIGNATURE) + 1)
/* get name by prefixed name PNAME and by logical prefix P */
static inline const char *get_name(const char *p, const char *pname)
{
return p ? pname + strlen(p) : pname;
}
/* get name length by prefixed name PNAME and by logical prefix P */
static inline size_t get_name_len(const char *p, const char *pname)
{
return p ? strlen(pname) - strlen(p) : strlen(pname);
}
int envblk_offset_get(int fd, off_t *off);
int envblk_offset_set(int fd, off_t off);
int envblk_size_get(int fd, int *size);
int envblk_check_name(const char *name, int len);
int envblk_import(char *from, char *to, int size);
char *envblk_next_line(char *s, const char *end);
int envblk_scan(char *envblk, unsigned int envblk_size,
int (*actor)(char *name, void *data), void *data);
void envblk_print(char *envblk, unsigned int envblk_size);
void envblk_create_blank(char *envblk, int envblk_len);
void envblk_blank(char *envblk, int envblk_len);
int envblk_list_site(char *envblk, unsigned int envblk_size, int site_id);
int envblk_list_effective_site(char *envblk, unsigned int envblk_size,
int site_id);
int envblk_list_all(char *envblk, unsigned int envblk_size, int indent);
int envblk_set(char *envblk, unsigned int envblk_size, const char *name,
const char *new_val);
int envblk_unset(char *envblk, int envblk_len, const char *pname,
const char *site_id);
int envblk_remove_namespace(char *envblk, unsigned int envblk_size,
const char *site_id);