iPXE
Data Structures | Macros | Enumerations | Functions | Variables
settings.c File Reference

Configuration settings. More...

#include <stdint.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <strings.h>
#include <byteswap.h>
#include <errno.h>
#include <assert.h>
#include <time.h>
#include <ipxe/in.h>
#include <ipxe/ip.h>
#include <ipxe/ipv6.h>
#include <ipxe/vsprintf.h>
#include <ipxe/dhcp.h>
#include <ipxe/uuid.h>
#include <ipxe/uri.h>
#include <ipxe/base16.h>
#include <ipxe/base64.h>
#include <ipxe/pci.h>
#include <ipxe/init.h>
#include <ipxe/version.h>
#include <ipxe/settings.h>

Go to the source code of this file.

Data Structures

struct  generic_setting
 A generic setting. More...
 
struct  autovivified_settings
 Autovivified settings block. More...
 

Macros

#define settings_root   generic_settings_root.settings
 Root settings block. More...
 
#define SETTING_TYPE_UINT_NAME(index)   setting_type_int_name[index]
 Get unsigned integer setting type name. More...
 
#define SETTING_TYPE_INT_NAME(index)   ( setting_type_int_name[index] + 1 )
 Get signed integer setting type name. More...
 
#define SETTING_TYPE_INT(index)
 Define a signed integer setting type. More...
 
#define SETTING_TYPE_UINT(index)
 Define an unsigned integer setting type. More...
 

Enumerations

enum  setting_type_int_index { SETTING_TYPE_INT8 = 0, SETTING_TYPE_INT16 = 1, SETTING_TYPE_INT32 = 2 }
 Integer setting type indices. More...
 

Functions

 FILE_LICENCE (GPL2_OR_LATER_OR_UBDL)
 
 FILE_SECBOOT (PERMITTED)
 
static void * generic_setting_name (struct generic_setting *generic)
 Get generic setting name. More...
 
static void * generic_setting_data (struct generic_setting *generic)
 Get generic setting data. More...
 
static struct generic_settingfind_generic_setting (struct generic_settings *generics, const struct setting *setting)
 Find generic setting. More...
 
int generic_settings_store (struct settings *settings, const struct setting *setting, const void *data, size_t len)
 Store value of generic setting. More...
 
int generic_settings_fetch (struct settings *settings, struct setting *setting, void *data, size_t len)
 Fetch value of generic setting. More...
 
void generic_settings_clear (struct settings *settings)
 Clear generic settings block. More...
 
static void autovivified_settings_free (struct refcnt *refcnt)
 Free autovivified settings block. More...
 
struct settingsfind_child_settings (struct settings *parent, const char *name)
 Find child settings block. More...
 
struct settingsautovivify_child_settings (struct settings *parent, const char *name)
 Find or create child settings block. More...
 
const char * settings_name (struct settings *settings)
 Return settings block name. More...
 
static struct settingsparse_settings_name (const char *name, get_child_settings_t get_child)
 Parse settings block name. More...
 
struct settingsfind_settings (const char *name)
 Find settings block. More...
 
static void apply_settings (void)
 Apply all settings. More...
 
static void reprioritise_settings (struct settings *settings)
 Reprioritise settings. More...
 
int register_settings (struct settings *settings, struct settings *parent, const char *name)
 Register settings block. More...
 
void unregister_settings (struct settings *settings)
 Unregister settings block. More...
 
struct settingssettings_target (struct settings *settings)
 Redirect to target settings block. More...
 
int setting_applies (struct settings *settings, const struct setting *setting)
 Check applicability of setting. More...
 
static const struct settingapplicable_setting (struct settings *settings, const struct setting *setting)
 Find setting applicable to settings block, if any. More...
 
int store_setting (struct settings *settings, const struct setting *setting, const void *data, size_t len)
 Store value of setting. More...
 
int fetch_setting (struct settings *settings, const struct setting *setting, struct settings **origin, struct setting *fetched, void *data, size_t len)
 Fetch setting. More...
 
static int fetch_setting_alloc (struct settings *settings, const struct setting *setting, struct settings **origin, struct setting *fetched, void **data, void *(*alloc)(size_t len))
 Fetch allocated copy of setting. More...
 
int fetch_setting_copy (struct settings *settings, const struct setting *setting, struct settings **origin, struct setting *fetched, void **data)
 Fetch copy of setting. More...
 
int fetch_raw_setting (struct settings *settings, const struct setting *setting, void *data, size_t len)
 Fetch value of setting. More...
 
int fetch_raw_setting_copy (struct settings *settings, const struct setting *setting, void **data)
 Fetch value of setting. More...
 
int fetch_string_setting (struct settings *settings, const struct setting *setting, char *data, size_t len)
 Fetch value of string setting. More...
 
static void * fetch_string_setting_copy_alloc (size_t len)
 Allocate memory for copy of string setting. More...
 
int fetch_string_setting_copy (struct settings *settings, const struct setting *setting, char **data)
 Fetch value of string setting. More...
 
int fetch_ipv4_array_setting (struct settings *settings, const struct setting *setting, struct in_addr *inp, unsigned int count)
 Fetch value of IPv4 address setting. More...
 
int fetch_ipv4_setting (struct settings *settings, const struct setting *setting, struct in_addr *inp)
 Fetch value of IPv4 address setting. More...
 
int fetch_ipv6_array_setting (struct settings *settings, const struct setting *setting, struct in6_addr *inp, unsigned int count)
 Fetch value of IPv6 address setting. More...
 
int fetch_ipv6_setting (struct settings *settings, const struct setting *setting, struct in6_addr *inp)
 Fetch value of IPv6 address setting. More...
 
static int numeric_setting_value (int is_signed, const void *raw, size_t len, unsigned long *value)
 Extract numeric value of setting. More...
 
int fetch_numeric_setting (struct settings *settings, const struct setting *setting, unsigned long *value, int is_signed)
 Fetch value of numeric setting. More...
 
int fetch_int_setting (struct settings *settings, const struct setting *setting, long *value)
 Fetch value of signed integer setting. More...
 
int fetch_uint_setting (struct settings *settings, const struct setting *setting, unsigned long *value)
 Fetch value of unsigned integer setting. More...
 
long fetch_intz_setting (struct settings *settings, const struct setting *setting)
 Fetch value of signed integer setting, or zero. More...
 
unsigned long fetch_uintz_setting (struct settings *settings, const struct setting *setting)
 Fetch value of unsigned integer setting, or zero. More...
 
int fetch_uuid_setting (struct settings *settings, const struct setting *setting, union uuid *uuid)
 Fetch value of UUID setting. More...
 
void clear_settings (struct settings *settings)
 Clear settings block. More...
 
int setting_cmp (const struct setting *a, const struct setting *b)
 Compare two settings. More...
 
int setting_format (const struct setting_type *type, const void *raw, size_t raw_len, char *buf, size_t len)
 Format setting value as a string. More...
 
int setting_parse (const struct setting_type *type, const char *value, void *buf, size_t len)
 Parse formatted string to setting value. More...
 
int setting_numerate (const struct setting_type *type, const void *raw, size_t raw_len, unsigned long *value)
 Convert setting value to number. More...
 
int setting_denumerate (const struct setting_type *type, unsigned long value, void *buf, size_t len)
 Convert number to setting value. More...
 
int fetchf_setting (struct settings *settings, const struct setting *setting, struct settings **origin, struct setting *fetched, char *buf, size_t len)
 Fetch formatted value of setting. More...
 
int fetchf_setting_copy (struct settings *settings, const struct setting *setting, struct settings **origin, struct setting *fetched, char **value)
 Fetch copy of formatted value of setting. More...
 
int storef_setting (struct settings *settings, const struct setting *setting, const char *value)
 Store formatted value of setting. More...
 
int fetchn_setting (struct settings *settings, const struct setting *setting, struct settings **origin, struct setting *fetched, unsigned long *value)
 Fetch numeric value of setting. More...
 
int storen_setting (struct settings *settings, const struct setting *setting, unsigned long value)
 Store numeric value of setting. More...
 
struct settingfind_setting (const char *name)
 Find predefined setting. More...
 
static uint64_t parse_setting_tag (const char *name)
 Parse setting name as tag number. More...
 
static const struct setting_typefind_setting_type (const char *name)
 Find setting type. More...
 
int parse_setting_name (char *name, get_child_settings_t get_child, struct settings **settings, struct setting *setting)
 Parse setting name. More...
 
int setting_name (struct settings *settings, const struct setting *setting, char *buf, size_t len)
 Return full setting name. More...
 
static int parse_string_setting (const struct setting_type *type __unused, const char *value, void *buf, size_t len)
 Parse string setting value. More...
 
static int format_string_setting (const struct setting_type *type __unused, const void *raw, size_t raw_len, char *buf, size_t len)
 Format string setting value. More...
 
static int parse_uristring_setting (const struct setting_type *type __unused, const char *value, void *buf, size_t len)
 Parse URI-encoded string setting value. More...
 
static int format_uristring_setting (const struct setting_type *type __unused, const void *raw, size_t raw_len, char *buf, size_t len)
 Format URI-encoded string setting value. More...
 
__weak int parse_ipv4_setting (const struct setting_type *type __unused, const char *value __unused, void *buf __unused, size_t len __unused)
 Parse IPv4 address setting value (when IPv4 support is not present) More...
 
__weak int format_ipv4_setting (const struct setting_type *type __unused, const void *raw __unused, size_t raw_len __unused, char *buf __unused, size_t len __unused)
 Format IPv4 address setting value (when IPv4 support is not present) More...
 
__weak int parse_ipv6_setting (const struct setting_type *type __unused, const char *value __unused, void *buf __unused, size_t len __unused)
 Parse IPv6 address setting value (when IPv6 support is not present) More...
 
__weak int format_ipv6_setting (const struct setting_type *type __unused, const void *raw __unused, size_t raw_len __unused, char *buf __unused, size_t len __unused)
 Format IPv6 address setting value (when IPv6 support is not present) More...
 
static unsigned int setting_type_int_index (const struct setting_type *type)
 Get integer setting type index. More...
 
static unsigned int setting_type_int_width (const struct setting_type *type)
 Get integer setting type width. More...
 
static int setting_type_int_is_signed (const struct setting_type *type)
 Get integer setting type signedness. More...
 
static int denumerate_int_setting (const struct setting_type *type, unsigned long value, void *buf, size_t len)
 Convert number to setting value. More...
 
static int numerate_int_setting (const struct setting_type *type, const void *raw, size_t raw_len, unsigned long *value)
 Convert setting value to number. More...
 
static int parse_int_setting (const struct setting_type *type, const char *value, void *buf, size_t len)
 Parse integer setting value. More...
 
static int format_int_setting (const struct setting_type *type, const void *raw, size_t raw_len, char *buf, size_t len)
 Format signed integer setting value. More...
 
static int format_uint_setting (const struct setting_type *type, const void *raw, size_t raw_len, char *buf, size_t len)
 Format unsigned integer setting value. More...
 
static int parse_hex_setting (const struct setting_type *type __unused, const char *value, void *buf, size_t len)
 Parse hex string setting value (using colon delimiter) More...
 
static int format_hex_colon_setting (const struct setting_type *type __unused, const void *raw, size_t raw_len, char *buf, size_t len)
 Format hex string setting value (using colon delimiter) More...
 
static int parse_hex_hyphen_setting (const struct setting_type *type __unused, const char *value, void *buf, size_t len)
 Parse hex string setting value (using hyphen delimiter) More...
 
static int format_hex_hyphen_setting (const struct setting_type *type __unused, const void *raw, size_t raw_len, char *buf, size_t len)
 Format hex string setting value (using hyphen delimiter) More...
 
static int parse_hex_raw_setting (const struct setting_type *type __unused, const char *value, void *buf, size_t len)
 Parse hex string setting value (using no delimiter) More...
 
static int format_hex_raw_setting (const struct setting_type *type __unused, const void *raw, size_t raw_len, char *buf, size_t len)
 Format hex string setting value (using no delimiter) More...
 
static int parse_base64_setting (const struct setting_type *type __unused, const char *value, void *buf, size_t len)
 Parse Base64-encoded setting value. More...
 
static int format_base64_setting (const struct setting_type *type __unused, const void *raw, size_t raw_len, char *buf, size_t len)
 Format Base64-encoded setting value. More...
 
static int parse_uuid_setting (const struct setting_type *type, const char *value, void *buf, size_t len)
 Parse UUID/GUID setting value. More...
 
static int format_uuid_setting (const struct setting_type *type, const void *raw, size_t raw_len, char *buf, size_t len)
 Format UUID/GUID setting value. More...
 
static int format_busdevfn_setting (const struct setting_type *type __unused, const void *raw, size_t raw_len, char *buf, size_t len)
 Format PCI bus:dev.fn setting value. More...
 
char * expand_settings (const char *string)
 Expand variables within string. More...
 
const struct setting hostname_setting __setting (SETTING_HOST, hostname)
 Hostname setting. More...
 
const struct setting domain_setting __setting (SETTING_IP_EXTRA, domain)
 Domain name setting. More...
 
const struct setting next_server_setting __setting (SETTING_BOOT, next-server)
 TFTP server setting. More...
 
const struct setting filename_setting __setting (SETTING_BOOT, filename)
 Filename setting. More...
 
const struct setting root_path_setting __setting (SETTING_SANBOOT, root-path)
 Root path setting. More...
 
const struct setting san_filename_setting __setting (SETTING_SANBOOT, san-filename)
 SAN filename setting. More...
 
const struct setting username_setting __setting (SETTING_AUTH, username)
 Username setting. More...
 
const struct setting password_setting __setting (SETTING_AUTH, password)
 Password setting. More...
 
const struct setting priority_setting __setting (SETTING_MISC, priority)
 Priority setting. More...
 
const struct setting user_class_setting __setting (SETTING_HOST_EXTRA, user-class)
 DHCP user class setting. More...
 
const struct setting vendor_class_setting __setting (SETTING_HOST_EXTRA, vendor-class)
 DHCP vendor class setting. More...
 
static int errno_fetch (void *data, size_t len)
 Fetch error number setting. More...
 
const struct setting errno_setting __setting (SETTING_MISC, errno)
 Error number setting. More...
 
static int buildarch_fetch (void *data, size_t len)
 Fetch build architecture setting. More...
 
const struct setting buildarch_setting __setting (SETTING_MISC, buildarch)
 Build architecture setting. More...
 
static int platform_fetch (void *data, size_t len)
 Fetch platform setting. More...
 
const struct setting platform_setting __setting (SETTING_MISC, platform)
 Platform setting. More...
 
static int version_fetch (void *data, size_t len)
 Fetch version setting. More...
 
const struct setting version_setting __setting (SETTING_MISC, version)
 Version setting. More...
 
static int unixtime_fetch (void *data, size_t len)
 Fetch current time setting. More...
 
const struct setting unixtime_setting __setting (SETTING_MISC, unixtime)
 Current time setting. More...
 
static int cwuri_fetch_uri (void *data, size_t len, const char *rel)
 Fetch current working URI-related setting. More...
 
static int cwuri_fetch (void *data, size_t len)
 Fetch current working URI setting. More...
 
static int cwduri_fetch (void *data, size_t len)
 Fetch current working directory URI setting. More...
 
const struct setting cwuri_setting __setting (SETTING_MISC, cwuri)
 Current working URI setting. More...
 
const struct setting cwduri_setting __setting (SETTING_MISC, cwduri)
 Current working directory URI setting. More...
 
static int builtin_fetch (struct settings *settings __unused, struct setting *setting, void *data, size_t len)
 Fetch built-in setting. More...
 
static int builtin_applies (struct settings *settings __unused, const struct setting *setting)
 Check applicability of built-in setting. More...
 
static void builtin_init (void)
 Initialise built-in settings. More...
 
struct init_fn builtin_init_fn __init_fn (INIT_NORMAL)
 Built-in settings initialiser. More...
 

Variables

struct settings_operations generic_settings_operations
 Generic settings operations. More...
 
struct generic_settings generic_settings_root
 Root generic settings block. More...
 
const struct setting_type setting_type_string __setting_type
 A string setting type. More...
 
const struct settings_scope dhcpv6_scope
 IPv6 settings scope. More...
 
static const char setting_type_int_name [][8]
 Integer setting type names. More...
 
const struct settings_scope builtin_scope
 Built-in setting scope. More...
 
struct builtin_setting errno_builtin_setting __builtin_setting
 Error number built-in setting. More...
 
static struct settings_operations builtin_settings_operations
 Built-in settings operations. More...
 
static struct settings builtin_settings
 Built-in settings. More...
 

Detailed Description

Configuration settings.

Definition in file settings.c.

Macro Definition Documentation

◆ settings_root

#define settings_root   generic_settings_root.settings

Root settings block.

Definition at line 250 of file settings.c.

◆ SETTING_TYPE_UINT_NAME

#define SETTING_TYPE_UINT_NAME (   index)    setting_type_int_name[index]

Get unsigned integer setting type name.

Parameters
indexInteger setting type index
Return values
nameSetting type name

Definition at line 1828 of file settings.c.

◆ SETTING_TYPE_INT_NAME

#define SETTING_TYPE_INT_NAME (   index)    ( setting_type_int_name[index] + 1 )

Get signed integer setting type name.

Parameters
indexInteger setting type index
Return values
nameSetting type name

Definition at line 1836 of file settings.c.

◆ SETTING_TYPE_INT

#define SETTING_TYPE_INT (   index)
Value:
{ \
.parse = parse_int_setting, \
.format = format_int_setting, \
.denumerate = denumerate_int_setting, \
.numerate = numerate_int_setting, \
}
static int numerate_int_setting(const struct setting_type *type, const void *raw, size_t raw_len, unsigned long *value)
Convert setting value to number.
Definition: settings.c:1906
long index
Definition: bigint.h:65
static int parse_int_setting(const struct setting_type *type, const char *value, void *buf, size_t len)
Parse integer setting value.
Definition: settings.c:1930
static int format_int_setting(const struct setting_type *type, const void *raw, size_t raw_len, char *buf, size_t len)
Format signed integer setting value.
Definition: settings.c:1953
static int denumerate_int_setting(const struct setting_type *type, unsigned long value, void *buf, size_t len)
Convert number to setting value.
Definition: settings.c:1880
#define SETTING_TYPE_INT_NAME(index)
Get signed integer setting type name.
Definition: settings.c:1836

Define a signed integer setting type.

Parameters
indexInteger setting type index
Return values
typeSetting type

Definition at line 1997 of file settings.c.

◆ SETTING_TYPE_UINT

#define SETTING_TYPE_UINT (   index)
Value:
{ \
.parse = parse_int_setting, \
.format = format_uint_setting, \
.denumerate = denumerate_int_setting, \
.numerate = numerate_int_setting, \
}
static int numerate_int_setting(const struct setting_type *type, const void *raw, size_t raw_len, unsigned long *value)
Convert setting value to number.
Definition: settings.c:1906
long index
Definition: bigint.h:65
static int parse_int_setting(const struct setting_type *type, const char *value, void *buf, size_t len)
Parse integer setting value.
Definition: settings.c:1930
#define SETTING_TYPE_UINT_NAME(index)
Get unsigned integer setting type name.
Definition: settings.c:1828
static int denumerate_int_setting(const struct setting_type *type, unsigned long value, void *buf, size_t len)
Convert number to setting value.
Definition: settings.c:1880
static int format_uint_setting(const struct setting_type *type, const void *raw, size_t raw_len, char *buf, size_t len)
Format unsigned integer setting value.
Definition: settings.c:1977

Define an unsigned integer setting type.

Parameters
indexInteger setting type index
Return values
typeSetting type

Definition at line 2011 of file settings.c.

Enumeration Type Documentation

◆ setting_type_int_index

Integer setting type indices.

These indexes are defined such that (1<<index) gives the width of the integer, in bytes.

Enumerator
SETTING_TYPE_INT8 
SETTING_TYPE_INT16 
SETTING_TYPE_INT32 

Definition at line 1801 of file settings.c.

Function Documentation

◆ FILE_LICENCE()

FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL  )

◆ FILE_SECBOOT()

FILE_SECBOOT ( PERMITTED  )

◆ generic_setting_name()

static void* generic_setting_name ( struct generic_setting generic)
inlinestatic

Get generic setting name.

Parameters
genericGeneric setting
Return values
nameGeneric setting name

Definition at line 84 of file settings.c.

84  {
85  return ( ( ( void * ) generic ) + sizeof ( *generic ) );
86 }

Referenced by generic_settings_store().

◆ generic_setting_data()

static void* generic_setting_data ( struct generic_setting generic)
inlinestatic

Get generic setting data.

Parameters
genericGeneric setting
Return values
dataGeneric setting data

Definition at line 94 of file settings.c.

94  {
95  return ( ( ( void * ) generic ) + sizeof ( *generic ) +
96  generic->name_len );
97 }
struct arbelprm_event_queue_entry generic
Definition: arbel.h:11

References generic.

Referenced by generic_settings_fetch(), and generic_settings_store().

◆ find_generic_setting()

static struct generic_setting* find_generic_setting ( struct generic_settings generics,
const struct setting setting 
)
static

Find generic setting.

Parameters
genericsGeneric settings block
settingSetting to find
Return values
genericGeneric setting, or NULL

Definition at line 107 of file settings.c.

108  {
109  struct generic_setting *generic;
110 
111  list_for_each_entry ( generic, &generics->list, list ) {
112  if ( setting_cmp ( &generic->setting, setting ) == 0 )
113  return generic;
114  }
115  return NULL;
116 }
struct arbelprm_event_queue_entry generic
Definition: arbel.h:11
struct list_head list
List of generic settings.
Definition: settings.c:69
struct list_head list
List of generic settings.
Definition: settings.h:303
#define list_for_each_entry(pos, head, member)
Iterate over entries in a list.
Definition: list.h:432
A generic setting.
Definition: settings.c:67
A setting.
Definition: settings.h:24
int setting_cmp(const struct setting *a, const struct setting *b)
Compare two settings.
Definition: settings.c:1121
#define NULL
NULL pointer (VOID *)
Definition: Base.h:322

References generic, generic_settings::list, generic_setting::list, list_for_each_entry, NULL, and setting_cmp().

Referenced by generic_settings_fetch(), and generic_settings_store().

◆ generic_settings_store()

int generic_settings_store ( struct settings settings,
const struct setting setting,
const void *  data,
size_t  len 
)

Store value of generic setting.

Parameters
settingsSettings block
settingSetting to store
dataSetting data, or NULL to clear setting
lenLength of setting data
Return values
rcReturn status code

Definition at line 127 of file settings.c.

129  {
130  struct generic_settings *generics =
132  struct generic_setting *old;
133  struct generic_setting *new = NULL;
134  size_t name_len;
135 
136  /* Identify existing generic setting, if any */
137  old = find_generic_setting ( generics, setting );
138 
139  /* Create new generic setting, if required */
140  if ( len ) {
141  /* Allocate new generic setting */
142  name_len = ( strlen ( setting->name ) + 1 );
143  new = zalloc ( sizeof ( *new ) + name_len + len );
144  if ( ! new )
145  return -ENOMEM;
146 
147  /* Populate new generic setting */
148  new->name_len = name_len;
149  new->data_len = len;
150  memcpy ( &new->setting, setting, sizeof ( new->setting ) );
151  new->setting.name = generic_setting_name ( new );
152  memcpy ( generic_setting_name ( new ),
153  setting->name, name_len );
154  memcpy ( generic_setting_data ( new ), data, len );
155  }
156 
157  /* Delete existing generic setting, if any */
158  if ( old ) {
159  list_del ( &old->list );
160  free ( old );
161  }
162 
163  /* Add new setting to list, if any */
164  if ( new )
165  list_add ( &new->list, &generics->list );
166 
167  return 0;
168 }
size_t name_len
Size of setting name.
Definition: settings.c:73
static struct generic_setting * find_generic_setting(struct generic_settings *generics, const struct setting *setting)
Find generic setting.
Definition: settings.c:107
static void * generic_setting_name(struct generic_setting *generic)
Get generic setting name.
Definition: settings.c:84
#define list_add(new, head)
Add a new entry to the head of a list.
Definition: list.h:70
int old
Definition: bitops.h:65
const char * name
Name.
Definition: settings.h:29
#define list_del(list)
Delete an entry from a list.
Definition: list.h:120
#define ENOMEM
Not enough space.
Definition: errno.h:535
struct list_head list
List of generic settings.
Definition: settings.h:303
void * memcpy(void *dest, const void *src, size_t len) __nonnull
#define container_of(ptr, type, field)
Get containing structure.
Definition: stddef.h:36
ring len
Length.
Definition: dwmac.h:231
A generic setting.
Definition: settings.c:67
static void(* free)(struct refcnt *refcnt))
Definition: refcnt.h:55
void * zalloc(size_t size)
Allocate cleared memory.
Definition: malloc.c:662
size_t strlen(const char *src)
Get length of string.
Definition: string.c:244
A settings block.
Definition: settings.h:133
A setting.
Definition: settings.h:24
static void * generic_setting_data(struct generic_setting *generic)
Get generic setting data.
Definition: settings.c:94
A generic settings block.
Definition: settings.h:299
uint8_t data[48]
Additional event data.
Definition: ena.h:22
#define NULL
NULL pointer (VOID *)
Definition: Base.h:322

References container_of, data, ENOMEM, find_generic_setting(), free, generic_setting_data(), generic_setting_name(), len, generic_settings::list, list_add, list_del, memcpy(), setting::name, generic_setting::name_len, NULL, old, strlen(), and zalloc().

Referenced by netdev_store().

◆ generic_settings_fetch()

int generic_settings_fetch ( struct settings settings,
struct setting setting,
void *  data,
size_t  len 
)

Fetch value of generic setting.

Parameters
settingsSettings block
settingSetting to fetch
dataBuffer to fill with setting data
lenLength of buffer
Return values
lenLength of setting data, or negative error

Definition at line 179 of file settings.c.

181  {
182  struct generic_settings *generics =
184  struct generic_setting *generic;
185 
186  /* Find generic setting */
187  generic = find_generic_setting ( generics, setting );
188  if ( ! generic )
189  return -ENOENT;
190 
191  /* Copy out generic setting data */
192  if ( len > generic->data_len )
193  len = generic->data_len;
194  memcpy ( data, generic_setting_data ( generic ), len );
195 
196  /* Set setting type, if not yet specified */
197  if ( ! setting->type )
198  setting->type = generic->setting.type;
199 
200  return generic->data_len;
201 }
static struct generic_setting * find_generic_setting(struct generic_settings *generics, const struct setting *setting)
Find generic setting.
Definition: settings.c:107
#define ENOENT
No such file or directory.
Definition: errno.h:515
struct arbelprm_event_queue_entry generic
Definition: arbel.h:11
void * memcpy(void *dest, const void *src, size_t len) __nonnull
#define container_of(ptr, type, field)
Get containing structure.
Definition: stddef.h:36
ring len
Length.
Definition: dwmac.h:231
const struct setting_type * type
Setting type.
Definition: settings.h:37
A generic setting.
Definition: settings.c:67
A settings block.
Definition: settings.h:133
A setting.
Definition: settings.h:24
static void * generic_setting_data(struct generic_setting *generic)
Get generic setting data.
Definition: settings.c:94
A generic settings block.
Definition: settings.h:299
uint8_t data[48]
Additional event data.
Definition: ena.h:22

References container_of, data, ENOENT, find_generic_setting(), generic, generic_setting_data(), len, memcpy(), and setting::type.

Referenced by netdev_fetch().

◆ generic_settings_clear()

void generic_settings_clear ( struct settings settings)

Clear generic settings block.

Parameters
settingsSettings block

Definition at line 208 of file settings.c.

208  {
209  struct generic_settings *generics =
211  struct generic_setting *generic;
212  struct generic_setting *tmp;
213 
214  list_for_each_entry_safe ( generic, tmp, &generics->list, list ) {
215  list_del ( &generic->list );
216  free ( generic );
217  }
218  assert ( list_empty ( &generics->list ) );
219 }
struct arbelprm_event_queue_entry generic
Definition: arbel.h:11
struct list_head list
List of generic settings.
Definition: settings.c:69
#define list_empty(list)
Test whether a list is empty.
Definition: list.h:137
unsigned long tmp
Definition: linux_pci.h:65
#define list_del(list)
Delete an entry from a list.
Definition: list.h:120
struct list_head list
List of generic settings.
Definition: settings.h:303
assert((readw(&hdr->flags) &(GTF_reading|GTF_writing))==0)
#define container_of(ptr, type, field)
Get containing structure.
Definition: stddef.h:36
#define list_for_each_entry_safe(pos, tmp, head, member)
Iterate over entries in a list, safe against deletion of the current entry.
Definition: list.h:459
A generic setting.
Definition: settings.c:67
static void(* free)(struct refcnt *refcnt))
Definition: refcnt.h:55
A settings block.
Definition: settings.h:133
A generic settings block.
Definition: settings.h:299

References assert(), container_of, free, generic, generic_settings::list, generic_setting::list, list_del, list_empty, list_for_each_entry_safe, and tmp.

Referenced by autovivified_settings_free(), and netdev_clear().

◆ autovivified_settings_free()

static void autovivified_settings_free ( struct refcnt refcnt)
static

Free autovivified settings block.

Parameters
refcntReference count

Definition at line 265 of file settings.c.

265  {
266  struct autovivified_settings *autovivified =
268 
269  generic_settings_clear ( &autovivified->generic.settings );
270  free ( autovivified );
271 }
Autovivified settings block.
Definition: settings.c:253
void generic_settings_clear(struct settings *settings)
Clear generic settings block.
Definition: settings.c:208
A reference counter.
Definition: refcnt.h:27
#define container_of(ptr, type, field)
Get containing structure.
Definition: stddef.h:36
static void(* free)(struct refcnt *refcnt))
Definition: refcnt.h:55
struct settings settings
Settings block.
Definition: settings.h:301
struct generic_settings generic
Generic settings block.
Definition: settings.c:257

References container_of, free, autovivified_settings::generic, generic_settings_clear(), and generic_settings::settings.

Referenced by autovivify_child_settings().

◆ find_child_settings()

struct settings* find_child_settings ( struct settings parent,
const char *  name 
)

Find child settings block.

Parameters
parentParent settings block
nameName within this parent
Return values
settingsSettings block, or NULL

Definition at line 280 of file settings.c.

281  {
282  struct settings *settings;
283 
284  /* Find target parent settings block */
286 
287  /* Treat empty name as meaning "this block" */
288  if ( ! *name )
289  return parent;
290 
291  /* Look for child with matching name */
293  if ( strcmp ( settings->name, name ) == 0 )
294  return settings_target ( settings );
295  }
296 
297  return NULL;
298 }
const char * name
Definition: ath9k_hw.c:1986
struct settings * parent
Parent settings block.
Definition: settings.h:139
struct settings * settings_target(struct settings *settings)
Redirect to target settings block.
Definition: settings.c:550
#define list_for_each_entry(pos, head, member)
Iterate over entries in a list.
Definition: list.h:432
A settings block.
Definition: settings.h:133
const char * name
Name.
Definition: settings.h:137
struct list_head siblings
Sibling settings blocks.
Definition: settings.h:141
int strcmp(const char *first, const char *second)
Compare strings.
Definition: string.c:174
struct list_head children
Child settings blocks.
Definition: settings.h:143
#define NULL
NULL pointer (VOID *)
Definition: Base.h:322

References settings::children, list_for_each_entry, settings::name, name, NULL, settings_target(), and strcmp().

Referenced by autovivify_child_settings(), cachedhcp_recycle(), efi_path_net_probe(), efi_snp_hii_settings(), expand_settings(), find_settings(), parse_existing_setting(), and register_settings().

◆ autovivify_child_settings()

struct settings* autovivify_child_settings ( struct settings parent,
const char *  name 
)

Find or create child settings block.

Parameters
parentParent settings block
nameName within this parent
Return values
settingsSettings block, or NULL

Definition at line 307 of file settings.c.

308  {
309  struct {
310  struct autovivified_settings autovivified;
311  char name[ strlen ( name ) + 1 /* NUL */ ];
312  } *new_child;
313  struct settings *settings;
314 
315  /* Find target parent settings block */
317 
318  /* Return existing settings, if existent */
319  if ( ( settings = find_child_settings ( parent, name ) ) != NULL )
320  return settings;
321 
322  /* Create new generic settings block */
323  new_child = zalloc ( sizeof ( *new_child ) );
324  if ( ! new_child ) {
325  DBGC ( parent, "Settings %p could not create child %s\n",
326  parent, name );
327  return NULL;
328  }
329  memcpy ( new_child->name, name, sizeof ( new_child->name ) );
330  ref_init ( &new_child->autovivified.refcnt,
332  generic_settings_init ( &new_child->autovivified.generic,
333  &new_child->autovivified.refcnt );
334  settings = &new_child->autovivified.generic.settings;
335  register_settings ( settings, parent, new_child->name );
336  ref_put ( settings->refcnt );
337  return settings;
338 }
const char * name
Definition: ath9k_hw.c:1986
#define ref_init(refcnt, free)
Initialise a reference counter.
Definition: refcnt.h:65
struct settings * parent
Parent settings block.
Definition: settings.h:139
static void generic_settings_init(struct generic_settings *generics, struct refcnt *refcnt)
Initialise a settings block.
Definition: settings.h:520
#define DBGC(...)
Definition: compiler.h:505
Autovivified settings block.
Definition: settings.c:253
void * memcpy(void *dest, const void *src, size_t len) __nonnull
struct settings * settings_target(struct settings *settings)
Redirect to target settings block.
Definition: settings.c:550
static void autovivified_settings_free(struct refcnt *refcnt)
Free autovivified settings block.
Definition: settings.c:265
void * zalloc(size_t size)
Allocate cleared memory.
Definition: malloc.c:662
size_t strlen(const char *src)
Get length of string.
Definition: string.c:244
A settings block.
Definition: settings.h:133
const char * name
Name.
Definition: settings.h:137
int register_settings(struct settings *settings, struct settings *parent, const char *name)
Register settings block.
Definition: settings.c:476
struct settings * find_child_settings(struct settings *parent, const char *name)
Find child settings block.
Definition: settings.c:280
#define NULL
NULL pointer (VOID *)
Definition: Base.h:322
struct refcnt * refcnt
Reference counter.
Definition: settings.h:135
#define ref_put(refcnt)
Drop reference to object.
Definition: refcnt.h:107

References autovivified_settings_free(), DBGC, find_child_settings(), generic_settings_init(), memcpy(), settings::name, name, NULL, ref_init, ref_put, settings::refcnt, register_settings(), settings_target(), strlen(), and zalloc().

Referenced by nslookup_resolv_done(), parse_autovivified_setting(), parse_names(), and testnet_set_okx().

◆ settings_name()

const char* settings_name ( struct settings settings)

Return settings block name.

Parameters
settingsSettings block
Return values
nameSettings block name

Definition at line 346 of file settings.c.

346  {
347  static char buf[16];
348  char tmp[ 1 /* '.' */ + sizeof ( buf ) ];
349 
350  /* Find target settings block */
352 
353  /* Construct name */
354  buf[0] = '\0';
355  tmp[0] = '\0';
356  for ( ; settings->parent ; settings = settings->parent ) {
357  memcpy ( ( tmp + 1 ), buf, ( sizeof ( tmp ) - 1 ) );
358  snprintf ( buf, sizeof ( buf ), "%s%s", settings->name, tmp );
359  tmp[0] = '.';
360  }
361  return buf;
362 }
struct settings * parent
Parent settings block.
Definition: settings.h:139
unsigned long tmp
Definition: linux_pci.h:65
void * memcpy(void *dest, const void *src, size_t len) __nonnull
struct settings * settings_target(struct settings *settings)
Redirect to target settings block.
Definition: settings.c:550
A settings block.
Definition: settings.h:133
const char * name
Name.
Definition: settings.h:137
int snprintf(char *buf, size_t size, const char *fmt,...)
Write a formatted string to a buffer.
Definition: vsprintf.c:383

References memcpy(), settings::name, settings::parent, settings_target(), snprintf(), and tmp.

Referenced by draw_title_row(), parse_setting_name(), register_settings(), setting_name(), and unregister_settings().

◆ parse_settings_name()

static struct settings* parse_settings_name ( const char *  name,
get_child_settings_t  get_child 
)
static

Parse settings block name.

Parameters
nameName
get_childFunction to find or create child settings block
Return values
settingsSettings block, or NULL

Definition at line 372 of file settings.c.

372  {
373  struct settings *settings = &settings_root;
374  char *name_copy;
375  char *subname;
376  char *remainder;
377 
378  /* Create modifiable copy of name */
379  name_copy = strdup ( name );
380  if ( ! name_copy )
381  return NULL;
382  remainder = name_copy;
383 
384  /* Parse each name component in turn */
385  while ( remainder ) {
386  subname = remainder;
387  remainder = strchr ( subname, '.' );
388  if ( remainder )
389  *(remainder++) = '\0';
390  settings = get_child ( settings, subname );
391  if ( ! settings )
392  break;
393  }
394 
395  /* Free modifiable copy of name */
396  free ( name_copy );
397 
398  return settings;
399 }
const char * name
Definition: ath9k_hw.c:1986
static void(* free)(struct refcnt *refcnt))
Definition: refcnt.h:55
char * strchr(const char *src, int character)
Find character within a string.
Definition: string.c:272
char * strdup(const char *src)
Duplicate string.
Definition: string.c:394
A settings block.
Definition: settings.h:133
#define settings_root
Root settings block.
Definition: settings.c:250
#define NULL
NULL pointer (VOID *)
Definition: Base.h:322

References free, name, NULL, settings_root, strchr(), and strdup().

Referenced by find_settings(), and parse_setting_name().

◆ find_settings()

struct settings* find_settings ( const char *  name)

Find settings block.

Parameters
nameName
Return values
settingsSettings block, or NULL

Definition at line 407 of file settings.c.

407  {
408 
410 }
const char * name
Definition: ath9k_hw.c:1986
static struct settings * parse_settings_name(const char *name, get_child_settings_t get_child)
Parse settings block name.
Definition: settings.c:372
struct settings * find_child_settings(struct settings *parent, const char *name)
Find child settings block.
Definition: settings.c:280

References find_child_settings(), name, and parse_settings_name().

Referenced by create_fakepxebsack(), dhcp_request_rx(), parse_settings(), and pxe_menu_boot().

◆ apply_settings()

static void apply_settings ( void  )
static

Apply all settings.

Definition at line 416 of file settings.c.

416  {
417  struct settings_applicator *applicator;
418  int rc;
419 
420  /* Call all settings applicators */
422  if ( ( rc = applicator->apply() ) != 0 ) {
423  DBG ( "Could not apply settings using applicator "
424  "%p: %s\n", applicator, strerror ( rc ) );
425  /* Continue to apply remaining settings */
426  }
427  }
428 }
struct arbelprm_rc_send_wqe rc
Definition: arbel.h:14
A settings applicator.
Definition: settings.h:252
#define SETTINGS_APPLICATORS
Settings applicator table.
Definition: settings.h:261
char * strerror(int errno)
Retrieve string representation of error number.
Definition: strerror.c:79
#define for_each_table_entry(pointer, table)
Iterate through all entries within a linker table.
Definition: tables.h:386
int(* apply)(void)
Apply updated settings.
Definition: settings.h:257
#define DBG(...)
Print a debugging message.
Definition: compiler.h:498

References settings_applicator::apply, DBG, for_each_table_entry, rc, SETTINGS_APPLICATORS, and strerror().

Referenced by register_settings(), store_setting(), and unregister_settings().

◆ reprioritise_settings()

static void reprioritise_settings ( struct settings settings)
static

Reprioritise settings.

Parameters
settingsSettings block

Reorders the settings block amongst its siblings according to its priority.

Definition at line 438 of file settings.c.

438  {
439  struct settings *parent = settings->parent;
440  long priority;
441  struct settings *tmp;
442  long tmp_priority;
443 
444  /* Stop when we reach the top of the tree */
445  if ( ! parent )
446  return;
447 
448  /* Read priority, if present */
449  priority = fetch_intz_setting ( settings, &priority_setting );
450 
451  /* Remove from siblings list */
452  list_del ( &settings->siblings );
453 
454  /* Reinsert after any existing blocks which have a higher priority */
456  tmp_priority = fetch_intz_setting ( tmp, &priority_setting );
457  if ( priority > tmp_priority )
458  break;
459  if ( settings->order > tmp->order )
460  break;
461  }
462  list_add_tail ( &settings->siblings, &tmp->siblings );
463 
464  /* Recurse up the tree */
466 }
long fetch_intz_setting(struct settings *settings, const struct setting *setting)
Fetch value of signed integer setting, or zero.
Definition: settings.c:1054
struct settings * parent
Parent settings block.
Definition: settings.h:139
unsigned long tmp
Definition: linux_pci.h:65
#define list_del(list)
Delete an entry from a list.
Definition: list.h:120
#define list_for_each_entry(pos, head, member)
Iterate over entries in a list.
Definition: list.h:432
#define list_add_tail(new, head)
Add a new entry to the tail of a list.
Definition: list.h:94
static void reprioritise_settings(struct settings *settings)
Reprioritise settings.
Definition: settings.c:438
A settings block.
Definition: settings.h:133
struct list_head siblings
Sibling settings blocks.
Definition: settings.h:141
int order
Sibling ordering.
Definition: settings.h:149
uint16_t priority
Priotity.
Definition: stp.h:13
struct list_head children
Child settings blocks.
Definition: settings.h:143

References settings::children, fetch_intz_setting(), list_add_tail, list_del, list_for_each_entry, settings::order, settings::parent, priority, settings::siblings, and tmp.

Referenced by register_settings(), and store_setting().

◆ register_settings()

int register_settings ( struct settings settings,
struct settings parent,
const char *  name 
)

Register settings block.

Parameters
settingsSettings block
parentParent settings block, or NULL
nameSettings block name
Return values
rcReturn status code

Definition at line 476 of file settings.c.

477  {
478  struct settings *old_settings;
479 
480  /* Sanity check */
481  assert ( settings != NULL );
482 
483  /* Find target parent settings block */
485 
486  /* Apply settings block name */
487  settings->name = name;
488 
489  /* Remove any existing settings with the same name */
490  if ( ( old_settings = find_child_settings ( parent, settings->name ) ))
491  unregister_settings ( old_settings );
492 
493  /* Add to list of settings */
494  ref_get ( settings->refcnt );
495  ref_get ( parent->refcnt );
498  DBGC ( settings, "Settings %p (\"%s\") registered\n",
500 
501  /* Fix up settings priority */
503 
504  /* Apply potentially-updated settings */
505  apply_settings();
506 
507  return 0;
508 }
const char * name
Definition: ath9k_hw.c:1986
void unregister_settings(struct settings *settings)
Unregister settings block.
Definition: settings.c:515
struct settings * parent
Parent settings block.
Definition: settings.h:139
#define DBGC(...)
Definition: compiler.h:505
const char * settings_name(struct settings *settings)
Return settings block name.
Definition: settings.c:346
struct settings * settings_target(struct settings *settings)
Redirect to target settings block.
Definition: settings.c:550
assert((readw(&hdr->flags) &(GTF_reading|GTF_writing))==0)
#define list_add_tail(new, head)
Add a new entry to the tail of a list.
Definition: list.h:94
static void apply_settings(void)
Apply all settings.
Definition: settings.c:416
#define ref_get(refcnt)
Get additional reference to object.
Definition: refcnt.h:93
static void reprioritise_settings(struct settings *settings)
Reprioritise settings.
Definition: settings.c:438
A settings block.
Definition: settings.h:133
const char * name
Name.
Definition: settings.h:137
struct list_head siblings
Sibling settings blocks.
Definition: settings.h:141
struct list_head children
Child settings blocks.
Definition: settings.h:143
struct settings * find_child_settings(struct settings *parent, const char *name)
Find child settings block.
Definition: settings.c:280
#define NULL
NULL pointer (VOID *)
Definition: Base.h:322
struct refcnt * refcnt
Reference counter.
Definition: settings.h:135

References apply_settings(), assert(), settings::children, DBGC, find_child_settings(), list_add_tail, settings::name, name, NULL, settings::parent, ref_get, settings::refcnt, reprioritise_settings(), settings_name(), settings_target(), settings::siblings, and unregister_settings().

Referenced by acpi_settings_init(), autovivify_child_settings(), builtin_init(), cachedhcp_apply(), cpuid_settings_init(), dhcp_proxy_rx(), dhcp_pxebs_rx(), dhcp_request_rx(), dhcpv6_register(), efi_path_net_probe(), efivars_init(), guestinfo_init(), guestinfo_net_probe(), ipv6_register_settings(), lldp_probe(), memmap_settings_init(), ndp_register_settings(), netdev_redirect_settings_init(), pci_settings_init(), phantom_probe(), register_netdev(), register_nvo(), settings_test_exec(), smbios_init(), and usb_settings_init().

◆ unregister_settings()

void unregister_settings ( struct settings settings)

Unregister settings block.

Parameters
settingsSettings block

Definition at line 515 of file settings.c.

515  {
516  struct settings *child;
517 
518  /* Unregister child settings */
519  while ( ( child = list_first_entry ( &settings->children,
520  struct settings, siblings ) ) ) {
521  unregister_settings ( child );
522  }
523 
524  DBGC ( settings, "Settings %p (\"%s\") unregistered\n",
526 
527  /* Remove from list of settings */
529  settings->parent = NULL;
530  list_del ( &settings->siblings );
531  ref_put ( settings->refcnt );
532 
533  /* Apply potentially-updated settings */
534  apply_settings();
535 }
void unregister_settings(struct settings *settings)
Unregister settings block.
Definition: settings.c:515
struct settings * parent
Parent settings block.
Definition: settings.h:139
#define DBGC(...)
Definition: compiler.h:505
const char * settings_name(struct settings *settings)
Return settings block name.
Definition: settings.c:346
#define list_first_entry(list, type, member)
Get the container of the first entry in a list.
Definition: list.h:334
#define list_del(list)
Delete an entry from a list.
Definition: list.h:120
static void apply_settings(void)
Apply all settings.
Definition: settings.c:416
A settings block.
Definition: settings.h:133
struct list_head siblings
Sibling settings blocks.
Definition: settings.h:141
struct list_head children
Child settings blocks.
Definition: settings.h:143
#define NULL
NULL pointer (VOID *)
Definition: Base.h:322
struct refcnt * refcnt
Reference counter.
Definition: settings.h:135
#define ref_put(refcnt)
Drop reference to object.
Definition: refcnt.h:107

References apply_settings(), settings::children, DBGC, list_del, list_first_entry, NULL, settings::parent, ref_put, settings::refcnt, settings_name(), settings::siblings, and unregister_settings().

Referenced by cachedhcp_recycle(), dhcp_request_rx(), lldp_probe(), lldp_remove(), ndp_register_settings(), phantom_probe(), phantom_remove(), register_netdev(), register_settings(), settings_test_exec(), unregister_netdev(), unregister_nvo(), and unregister_settings().

◆ settings_target()

struct settings* settings_target ( struct settings settings)

Redirect to target settings block.

Parameters
settingsSettings block, or NULL
Return values
settingsUnderlying settings block

Definition at line 550 of file settings.c.

550  {
551 
552  /* NULL settings implies the global settings root */
553  if ( ! settings )
555 
556  /* Redirect to underlying settings block, if applicable */
557  if ( settings->op->redirect )
558  return settings->op->redirect ( settings );
559 
560  /* Otherwise, return this settings block */
561  return settings;
562 }
struct settings_operations * op
Settings block operations.
Definition: settings.h:145
struct settings *(* redirect)(struct settings *settings)
Redirect to underlying settings block (if applicable)
Definition: settings.h:92
A settings block.
Definition: settings.h:133
#define settings_root
Root settings block.
Definition: settings.c:250

References settings::op, settings_operations::redirect, and settings_root.

Referenced by autovivify_child_settings(), clear_settings(), fetch_setting(), find_child_settings(), register_settings(), select_settings(), setting_applies(), setting_name(), settings_name(), and store_setting().

◆ setting_applies()

int setting_applies ( struct settings settings,
const struct setting setting 
)

Check applicability of setting.

Parameters
settingsSettings block
settingSetting
Return values
appliesSetting applies within this settings block

Definition at line 571 of file settings.c.

572  {
573 
574  /* Find target settings block */
576 
577  /* Check applicability of setting */
578  return ( settings->op->applies ?
579  settings->op->applies ( settings, setting ) : 1 );
580 }
struct settings_operations * op
Settings block operations.
Definition: settings.h:145
struct settings * settings_target(struct settings *settings)
Redirect to target settings block.
Definition: settings.c:550
A settings block.
Definition: settings.h:133
A setting.
Definition: settings.h:24
int(* applies)(struct settings *settings, const struct setting *setting)
Check applicability of setting.
Definition: settings.h:99

References settings_operations::applies, settings::op, and settings_target().

Referenced by applicable_setting(), select_setting_row(), and store_setting().

◆ applicable_setting()

static const struct setting* applicable_setting ( struct settings settings,
const struct setting setting 
)
static

Find setting applicable to settings block, if any.

Parameters
settingsSettings block
settingSetting
Return values
settingApplicable setting, if any

Definition at line 590 of file settings.c.

590  {
591  const struct setting *applicable;
592 
593  /* If setting is already applicable, use it */
594  if ( setting_applies ( settings, setting ) )
595  return setting;
596 
597  /* Otherwise, look for a matching predefined setting which does apply */
598  for_each_table_entry ( applicable, SETTINGS ) {
599  if ( ( setting_cmp ( setting, applicable ) == 0 ) &&
600  ( setting_applies ( settings, applicable ) ) )
601  return applicable;
602  }
603 
604  return NULL;
605 }
#define SETTINGS
Configuration setting table.
Definition: settings.h:54
int setting_applies(struct settings *settings, const struct setting *setting)
Check applicability of setting.
Definition: settings.c:571
#define for_each_table_entry(pointer, table)
Iterate through all entries within a linker table.
Definition: tables.h:386
A settings block.
Definition: settings.h:133
A setting.
Definition: settings.h:24
int setting_cmp(const struct setting *a, const struct setting *b)
Compare two settings.
Definition: settings.c:1121
#define NULL
NULL pointer (VOID *)
Definition: Base.h:322

References for_each_table_entry, NULL, generic_setting::setting, setting_applies(), setting_cmp(), and SETTINGS.

Referenced by fetch_setting().

◆ store_setting()

int store_setting ( struct settings settings,
const struct setting setting,
const void *  data,
size_t  len 
)

Store value of setting.

Parameters
settingsSettings block, or NULL
settingSetting to store
dataSetting data, or NULL to clear setting
lenLength of setting data
Return values
rcReturn status code

Definition at line 616 of file settings.c.

617  {
618  int rc;
619 
620  /* Find target settings block */
622 
623  /* Fail if setting does not apply to this settings block */
624  if ( ! setting_applies ( settings, setting ) )
625  return -ENOTTY;
626 
627  /* Sanity check */
628  if ( ! settings->op->store )
629  return -ENOTSUP;
630 
631  /* Store setting */
632  if ( ( rc = settings->op->store ( settings, setting,
633  data, len ) ) != 0 )
634  return rc;
635 
636  /* Reprioritise settings if necessary */
637  if ( setting_cmp ( setting, &priority_setting ) == 0 )
639 
640  /* If these settings are registered, apply potentially-updated
641  * settings
642  */
643  for ( ; settings ; settings = settings->parent ) {
644  if ( settings == &settings_root ) {
645  apply_settings();
646  break;
647  }
648  }
649 
650  return 0;
651 }
struct arbelprm_rc_send_wqe rc
Definition: arbel.h:14
struct settings * parent
Parent settings block.
Definition: settings.h:139
struct settings_operations * op
Settings block operations.
Definition: settings.h:145
#define ENOTSUP
Operation not supported.
Definition: errno.h:590
struct settings * settings_target(struct settings *settings)
Redirect to target settings block.
Definition: settings.c:550
ring len
Length.
Definition: dwmac.h:231
static void apply_settings(void)
Apply all settings.
Definition: settings.c:416
int setting_applies(struct settings *settings, const struct setting *setting)
Check applicability of setting.
Definition: settings.c:571
static void reprioritise_settings(struct settings *settings)
Reprioritise settings.
Definition: settings.c:438
A settings block.
Definition: settings.h:133
#define settings_root
Root settings block.
Definition: settings.c:250
A setting.
Definition: settings.h:24
#define ENOTTY
Inappropriate I/O control operation.
Definition: errno.h:595
uint8_t data[48]
Additional event data.
Definition: ena.h:22
int(* store)(struct settings *settings, const struct setting *setting, const void *data, size_t len)
Store value of setting.
Definition: settings.h:109
int setting_cmp(const struct setting *a, const struct setting *b)
Compare two settings.
Definition: settings.c:1121

References apply_settings(), data, ENOTSUP, ENOTTY, len, settings::op, settings::parent, rc, reprioritise_settings(), setting_applies(), setting_cmp(), settings_root, settings_target(), and settings_operations::store.

Referenced by delete_setting(), digest_exec(), nslookup_resolv_done(), storef_setting(), and storen_setting().

◆ fetch_setting()

int fetch_setting ( struct settings settings,
const struct setting setting,
struct settings **  origin,
struct setting fetched,
void *  data,
size_t  len 
)

Fetch setting.

Parameters
settingsSettings block, or NULL to search all blocks
settingSetting to fetch
originOrigin of setting to fill in, or NULL
fetchedFetched setting to fill in, or NULL
dataBuffer to fill with setting data
lenLength of buffer
Return values
lenLength of setting data, or negative error

The actual length of the setting will be returned even if the buffer was too small.

Definition at line 667 of file settings.c.

669  {
670  const struct setting *applicable;
671  struct settings *child;
672  struct setting tmp;
673  int ret;
674 
675  /* Avoid returning uninitialised data on error */
676  memset ( data, 0, len );
677  if ( origin )
678  *origin = NULL;
679  if ( fetched )
680  memcpy ( fetched, setting, sizeof ( *fetched ) );
681 
682  /* Find target settings block */
684 
685  /* Sanity check */
686  if ( ! settings->op->fetch )
687  return -ENOTSUP;
688 
689  /* Try this block first, if an applicable setting exists */
690  if ( ( applicable = applicable_setting ( settings, setting ) ) ) {
691 
692  /* Create modifiable copy of setting */
693  memcpy ( &tmp, applicable, sizeof ( tmp ) );
694  if ( ( ret = settings->op->fetch ( settings, &tmp,
695  data, len ) ) >= 0 ) {
696 
697  /* Default to string type, if not yet specified */
698  if ( ! tmp.type )
699  tmp.type = &setting_type_string;
700 
701  /* Record origin, if applicable */
702  if ( origin )
703  *origin = settings;
704 
705  /* Record fetched setting, if applicable */
706  if ( fetched )
707  memcpy ( fetched, &tmp, sizeof ( *fetched ) );
708 
709  return ret;
710  }
711  }
712 
713  /* Recurse into each child block in turn */
714  list_for_each_entry ( child, &settings->children, siblings ) {
715  if ( ( ret = fetch_setting ( child, setting, origin, fetched,
716  data, len ) ) >= 0 )
717  return ret;
718  }
719 
720  return -ENOENT;
721 }
uint64_t origin
Origin.
Definition: hyperv.h:20
#define ENOENT
No such file or directory.
Definition: errno.h:515
struct settings_operations * op
Settings block operations.
Definition: settings.h:145
#define ENOTSUP
Operation not supported.
Definition: errno.h:590
unsigned long tmp
Definition: linux_pci.h:65
void * memcpy(void *dest, const void *src, size_t len) __nonnull
struct settings * settings_target(struct settings *settings)
Redirect to target settings block.
Definition: settings.c:550
#define list_for_each_entry(pos, head, member)
Iterate over entries in a list.
Definition: list.h:432
ring len
Length.
Definition: dwmac.h:231
int fetch_setting(struct settings *settings, const struct setting *setting, struct settings **origin, struct setting *fetched, void *data, size_t len)
Fetch setting.
Definition: settings.c:667
A settings block.
Definition: settings.h:133
A setting.
Definition: settings.h:24
static const struct setting * applicable_setting(struct settings *settings, const struct setting *setting)
Find setting applicable to settings block, if any.
Definition: settings.c:590
int(* fetch)(struct settings *settings, struct setting *setting, void *data, size_t len)
Fetch value of setting.
Definition: settings.h:123
uint8_t data[48]
Additional event data.
Definition: ena.h:22
struct list_head children
Child settings blocks.
Definition: settings.h:143
#define NULL
NULL pointer (VOID *)
Definition: Base.h:322
void * memset(void *dest, int character, size_t len) __nonnull

References applicable_setting(), settings::children, data, ENOENT, ENOTSUP, settings_operations::fetch, fetch_setting(), len, list_for_each_entry, memcpy(), memset(), NULL, settings::op, origin, settings_target(), and tmp.

Referenced by fetch_next_server_and_filename(), fetch_raw_setting(), fetch_setting(), fetch_setting_alloc(), ibft_fill_nic(), ibft_set_string_setting(), ipv6_create_routes(), and setting_exists().

◆ fetch_setting_alloc()

static int fetch_setting_alloc ( struct settings settings,
const struct setting setting,
struct settings **  origin,
struct setting fetched,
void **  data,
void *(*)(size_t len alloc 
)
static

Fetch allocated copy of setting.

Parameters
settingsSettings block, or NULL to search all blocks
settingSetting to fetch
originOrigin of setting to fill in, or NULL
fetchedFetched setting to fill in, or NULL
dataBuffer to allocate and fill with setting data
allocAllocation function
Return values
lenLength of setting, or negative error

The caller is responsible for eventually freeing the allocated buffer.

Definition at line 737 of file settings.c.

742  {
743  struct settings *tmp_origin;
744  struct setting tmp_fetched;
745  int len;
746  int check_len;
747 
748  /* Use local buffers if necessary */
749  if ( ! origin )
750  origin = &tmp_origin;
751  if ( ! fetched )
752  fetched = &tmp_fetched;
753 
754  /* Avoid returning uninitialised data on error */
755  *data = NULL;
756 
757  /* Check existence, and fetch setting length */
758  len = fetch_setting ( settings, setting, origin, fetched, NULL, 0 );
759  if ( len < 0 )
760  return len;
761 
762  /* Allocate buffer */
763  *data = alloc ( len );
764  if ( ! *data )
765  return -ENOMEM;
766 
767  /* Fetch setting value */
768  check_len = fetch_setting ( *origin, fetched, NULL, NULL, *data, len );
769  assert ( check_len == len );
770  return len;
771 }
uint64_t origin
Origin.
Definition: hyperv.h:20
#define ENOMEM
Not enough space.
Definition: errno.h:535
assert((readw(&hdr->flags) &(GTF_reading|GTF_writing))==0)
ring len
Length.
Definition: dwmac.h:231
int fetch_setting(struct settings *settings, const struct setting *setting, struct settings **origin, struct setting *fetched, void *data, size_t len)
Fetch setting.
Definition: settings.c:667
A settings block.
Definition: settings.h:133
A setting.
Definition: settings.h:24
uint8_t data[48]
Additional event data.
Definition: ena.h:22
#define NULL
NULL pointer (VOID *)
Definition: Base.h:322

References assert(), data, ENOMEM, fetch_setting(), len, NULL, and origin.

Referenced by fetch_setting_copy(), and fetch_string_setting_copy().

◆ fetch_setting_copy()

int fetch_setting_copy ( struct settings settings,
const struct setting setting,
struct settings **  origin,
struct setting fetched,
void **  data 
)

Fetch copy of setting.

Parameters
settingsSettings block, or NULL to search all blocks
settingSetting to fetch
originOrigin of setting to fill in, or NULL
fetchedFetched setting to fill in, or NULL
dataBuffer to allocate and fill with setting data
Return values
lenLength of setting, or negative error

The caller is responsible for eventually freeing the allocated buffer.

Definition at line 786 of file settings.c.

789  {
790 
791  return fetch_setting_alloc ( settings, setting, origin, fetched,
792  data, malloc );
793 }
uint64_t origin
Origin.
Definition: hyperv.h:20
static int fetch_setting_alloc(struct settings *settings, const struct setting *setting, struct settings **origin, struct setting *fetched, void **data, void *(*alloc)(size_t len))
Fetch allocated copy of setting.
Definition: settings.c:737
A settings block.
Definition: settings.h:133
void * malloc(size_t size)
Allocate memory.
Definition: malloc.c:621
A setting.
Definition: settings.h:24
uint8_t data[48]
Additional event data.
Definition: ena.h:22

References data, fetch_setting_alloc(), malloc(), and origin.

Referenced by fetch_raw_setting_copy(), fetchf_setting(), and fetchn_setting().

◆ fetch_raw_setting()

int fetch_raw_setting ( struct settings settings,
const struct setting setting,
void *  data,
size_t  len 
)

Fetch value of setting.

Parameters
settingsSettings block, or NULL to search all blocks
settingSetting to fetch
dataBuffer to fill with setting string data
lenLength of buffer
Return values
lenLength of setting, or negative error

Definition at line 804 of file settings.c.

806  {
807 
808  return fetch_setting ( settings, setting, NULL, NULL, data, len );
809 }
ring len
Length.
Definition: dwmac.h:231
int fetch_setting(struct settings *settings, const struct setting *setting, struct settings **origin, struct setting *fetched, void *data, size_t len)
Fetch setting.
Definition: settings.c:667
A settings block.
Definition: settings.h:133
A setting.
Definition: settings.h:24
uint8_t data[48]
Additional event data.
Definition: ena.h:22
#define NULL
NULL pointer (VOID *)
Definition: Base.h:322

References data, fetch_setting(), len, and NULL.

Referenced by dhcp_create_request(), dhcpv6_user_class(), fetch_ipv4_array_setting(), fetch_ipv6_array_setting(), fetch_numeric_setting(), fetch_string_setting(), fetch_uuid_setting(), pxe_menu_parse(), start_pxebs(), trivial_change_key(), and trivial_init().

◆ fetch_raw_setting_copy()

int fetch_raw_setting_copy ( struct settings settings,
const struct setting setting,
void **  data 
)

Fetch value of setting.

Parameters
settingsSettings block, or NULL to search all blocks
settingSetting to fetch
dataBuffer to allocate and fill with setting data
Return values
lenLength of setting, or negative error

The caller is responsible for eventually freeing the allocated buffer.

Definition at line 822 of file settings.c.

824  {
825 
827 }
A settings block.
Definition: settings.h:133
int fetch_setting_copy(struct settings *settings, const struct setting *setting, struct settings **origin, struct setting *fetched, void **data)
Fetch copy of setting.
Definition: settings.c:786
A setting.
Definition: settings.h:24
uint8_t data[48]
Additional event data.
Definition: ena.h:22
#define NULL
NULL pointer (VOID *)
Definition: Base.h:322

References data, fetch_setting_copy(), and NULL.

Referenced by apply_dns_search(), apply_dns_servers(), certstore_apply_settings(), copy_encap_settings(), dhcp_create_request(), eap_rx_identity(), eap_rx_md5(), ipv4_add_miniroutes(), privkey_apply_settings(), and rootcert_init().

◆ fetch_string_setting()

int fetch_string_setting ( struct settings settings,
const struct setting setting,
char *  data,
size_t  len 
)

Fetch value of string setting.

Parameters
settingsSettings block, or NULL to search all blocks
settingSetting to fetch
dataBuffer to fill with setting string data
lenLength of buffer
Return values
lenLength of string setting, or negative error

The resulting string is guaranteed to be correctly NUL-terminated. The returned length will be the length of the underlying setting data.

Definition at line 842 of file settings.c.

844  {
845 
846  memset ( data, 0, len );
848  ( ( len > 0 ) ? ( len - 1 ) : 0 ) );
849 }
int fetch_raw_setting(struct settings *settings, const struct setting *setting, void *data, size_t len)
Fetch value of setting.
Definition: settings.c:804
ring len
Length.
Definition: dwmac.h:231
A settings block.
Definition: settings.h:133
A setting.
Definition: settings.h:24
uint8_t data[48]
Additional event data.
Definition: ena.h:22
void * memset(void *dest, int character, size_t len) __nonnull

References data, fetch_raw_setting(), len, and memset().

Referenced by have_pxe_menu(), ib_sma_node_desc(), ibft_set_string_setting(), net80211_autoassociate(), net80211_check_settings_update(), wpa_psk_start(), and xsigo_xds_complete().

◆ fetch_string_setting_copy_alloc()

static void* fetch_string_setting_copy_alloc ( size_t  len)
static

Allocate memory for copy of string setting.

Parameters
lenLength of setting
Return values
ptrAllocated memory

Definition at line 857 of file settings.c.

857  {
858  return zalloc ( len + 1 /* NUL */ );
859 }
ring len
Length.
Definition: dwmac.h:231
void * zalloc(size_t size)
Allocate cleared memory.
Definition: malloc.c:662

References len, and zalloc().

Referenced by fetch_string_setting_copy().

◆ fetch_string_setting_copy()

int fetch_string_setting_copy ( struct settings settings,
const struct setting setting,
char **  data 
)

Fetch value of string setting.

Parameters
settingsSettings block, or NULL to search all blocks
settingSetting to fetch
dataBuffer to allocate and fill with setting string data
Return values
lenLength of string setting, or negative error

The resulting string is guaranteed to be correctly NUL-terminated. The returned length will be the length of the underlying setting data. The caller is responsible for eventually freeing the allocated buffer.

Definition at line 874 of file settings.c.

875  {
876 
878  ( ( void ** ) data ),
880 }
static int fetch_setting_alloc(struct settings *settings, const struct setting *setting, struct settings **origin, struct setting *fetched, void **data, void *(*alloc)(size_t len))
Fetch allocated copy of setting.
Definition: settings.c:737
A settings block.
Definition: settings.h:133
A setting.
Definition: settings.h:24
static void * fetch_string_setting_copy_alloc(size_t len)
Allocate memory for copy of string setting.
Definition: settings.c:857
uint8_t data[48]
Additional event data.
Definition: ena.h:22
#define NULL
NULL pointer (VOID *)
Definition: Base.h:322

References data, fetch_setting_alloc(), fetch_string_setting_copy_alloc(), and NULL.

Referenced by apply_dns_search(), apply_peerdisc_settings(), apply_syslog_settings(), apply_syslogs_settings(), eap_rx_mschapv2_request(), efi_veto(), fetch_next_server_and_filename(), fetch_root_path(), fetch_san_filename(), ipxe(), iscsi_fetch_settings(), keymap_apply(), oncrpc_init_cred_sys(), and validator_start_download().

◆ fetch_ipv4_array_setting()

int fetch_ipv4_array_setting ( struct settings settings,
const struct setting setting,
struct in_addr inp,
unsigned int  count 
)

Fetch value of IPv4 address setting.

Parameters
settingsSettings block, or NULL to search all blocks
settingSetting to fetch
inpIPv4 addresses to fill in
countMaximum number of IPv4 addresses
Return values
lenLength of setting, or negative error

Definition at line 891 of file settings.c.

893  {
894  int len;
895 
897  ( sizeof ( *inp ) * count ) );
898  if ( len < 0 )
899  return len;
900  if ( ( len % sizeof ( *inp ) ) != 0 )
901  return -ERANGE;
902  return len;
903 }
int fetch_raw_setting(struct settings *settings, const struct setting *setting, void *data, size_t len)
Fetch value of setting.
Definition: settings.c:804
ring len
Length.
Definition: dwmac.h:231
static unsigned int count
Number of entries.
Definition: dwmac.h:225
#define ERANGE
Result too large.
Definition: errno.h:640
A settings block.
Definition: settings.h:133
A setting.
Definition: settings.h:24

References count, ERANGE, fetch_raw_setting(), and len.

Referenced by fetch_ipv4_setting(), and ibft_set_ipaddr_setting().

◆ fetch_ipv4_setting()

int fetch_ipv4_setting ( struct settings settings,
const struct setting setting,
struct in_addr inp 
)

Fetch value of IPv4 address setting.

Parameters
settingsSettings block, or NULL to search all blocks
settingSetting to fetch
inpIPv4 address to fill in
Return values
lenLength of setting, or negative error

Definition at line 913 of file settings.c.

915  {
916 
917  return fetch_ipv4_array_setting ( settings, setting, inp, 1 );
918 }
A settings block.
Definition: settings.h:133
A setting.
Definition: settings.h:24
int fetch_ipv4_array_setting(struct settings *settings, const struct setting *setting, struct in_addr *inp, unsigned int count)
Fetch value of IPv4 address setting.
Definition: settings.c:891

References fetch_ipv4_array_setting().

Referenced by apply_syslog_settings(), create_fakepxebsack(), efi_pxe_install(), efi_pxe_ip(), fetch_next_server_and_filename(), gdbudp_configure(), ibft_fill_nic(), ipv4_add_miniroutes(), ipv4_settings(), start_pxebs(), and tftp_apply_settings().

◆ fetch_ipv6_array_setting()

int fetch_ipv6_array_setting ( struct settings settings,
const struct setting setting,
struct in6_addr inp,
unsigned int  count 
)

Fetch value of IPv6 address setting.

Parameters
settingsSettings block, or NULL to search all blocks
settingSetting to fetch
inpIPv6 addresses to fill in
countMaximum number of IPv6 addresses
Return values
lenLength of setting, or negative error

Definition at line 929 of file settings.c.

931  {
932  int len;
933 
935  ( sizeof ( *inp ) * count ) );
936  if ( len < 0 )
937  return len;
938  if ( ( len % sizeof ( *inp ) ) != 0 )
939  return -ERANGE;
940  return len;
941 }
int fetch_raw_setting(struct settings *settings, const struct setting *setting, void *data, size_t len)
Fetch value of setting.
Definition: settings.c:804
ring len
Length.
Definition: dwmac.h:231
static unsigned int count
Number of entries.
Definition: dwmac.h:225
#define ERANGE
Result too large.
Definition: errno.h:640
A settings block.
Definition: settings.h:133
A setting.
Definition: settings.h:24

References count, ERANGE, fetch_raw_setting(), and len.

Referenced by fetch_ipv6_setting().

◆ fetch_ipv6_setting()

int fetch_ipv6_setting ( struct settings settings,
const struct setting setting,
struct in6_addr inp 
)

Fetch value of IPv6 address setting.

Parameters
settingsSettings block, or NULL to search all blocks
settingSetting to fetch
inpIPv6 address to fill in
Return values
lenLength of setting, or negative error

Definition at line 951 of file settings.c.

953  {
954 
955  return fetch_ipv6_array_setting ( settings, setting, inp, 1 );
956 }
int fetch_ipv6_array_setting(struct settings *settings, const struct setting *setting, struct in6_addr *inp, unsigned int count)
Fetch value of IPv6 address setting.
Definition: settings.c:929
A settings block.
Definition: settings.h:133
A setting.
Definition: settings.h:24

References fetch_ipv6_array_setting().

Referenced by apply_syslog_settings().

◆ numeric_setting_value()

static int numeric_setting_value ( int  is_signed,
const void *  raw,
size_t  len,
unsigned long *  value 
)
static

Extract numeric value of setting.

Parameters
is_signedTreat value as a signed integer
rawRaw setting data
lenLength of raw setting data
Return values
valueNumeric value
lenLength of setting, or negative error

Definition at line 967 of file settings.c.

968  {
969  const uint8_t *unsigned_bytes = raw;
970  const int8_t *signed_bytes = raw;
971  int is_negative;
972  unsigned int i;
973  uint8_t pad;
974  uint8_t byte;
975 
976  /* Convert to host-ordered longs */
977  is_negative = ( len && ( signed_bytes[0] < 0 ) );
978  *value = ( ( is_signed && is_negative ) ? -1L : 0 );
979  pad = *value;
980  for ( i = 0 ; i < len ; i++ ) {
981  byte = unsigned_bytes[i];
982  *value = ( ( *value << 8 ) | byte );
983  if ( ( ( i + sizeof ( *value ) ) < len ) && ( byte != pad ) )
984  return -ERANGE;
985  }
986 
987  return len;
988 }
u32 pad[9]
Padding.
Definition: ar9003_mac.h:47
pseudo_bit_t value[0x00020]
Definition: arbel.h:13
ring len
Length.
Definition: dwmac.h:231
signed char int8_t
Definition: stdint.h:15
#define ERANGE
Result too large.
Definition: errno.h:640
unsigned char uint8_t
Definition: stdint.h:10
unsigned char byte
Definition: smc9000.h:38
__be32 raw[7]
Definition: CIB_PRM.h:28

References ERANGE, len, pad, raw, and value.

Referenced by fetch_numeric_setting(), format_busdevfn_setting(), and numerate_int_setting().

◆ fetch_numeric_setting()

int fetch_numeric_setting ( struct settings settings,
const struct setting setting,
unsigned long *  value,
int  is_signed 
)

Fetch value of numeric setting.

Parameters
settingsSettings block, or NULL to search all blocks
settingSetting to fetch
valueInteger value to fill in
Return values
lenLength of setting, or negative error

Definition at line 998 of file settings.c.

1000  {
1001  unsigned long tmp;
1002  int len;
1003 
1004  /* Avoid returning uninitialised data on error */
1005  *value = 0;
1006 
1007  /* Fetch raw (network-ordered, variable-length) setting */
1008  len = fetch_raw_setting ( settings, setting, &tmp, sizeof ( tmp ) );
1009  if ( len < 0 )
1010  return len;
1011 
1012  /* Extract numeric value */
1013  return numeric_setting_value ( is_signed, &tmp, len, value );
1014 }
int fetch_raw_setting(struct settings *settings, const struct setting *setting, void *data, size_t len)
Fetch value of setting.
Definition: settings.c:804
unsigned long tmp
Definition: linux_pci.h:65
static int numeric_setting_value(int is_signed, const void *raw, size_t len, unsigned long *value)
Extract numeric value of setting.
Definition: settings.c:967
pseudo_bit_t value[0x00020]
Definition: arbel.h:13
ring len
Length.
Definition: dwmac.h:231
A settings block.
Definition: settings.h:133
A setting.
Definition: settings.h:24

References fetch_raw_setting(), len, numeric_setting_value(), tmp, and value.

Referenced by fetch_int_setting(), fetch_intz_setting(), fetch_uint_setting(), and fetch_uintz_setting().

◆ fetch_int_setting()

int fetch_int_setting ( struct settings settings,
const struct setting setting,
long *  value 
)

Fetch value of signed integer setting.

Parameters
settingsSettings block, or NULL to search all blocks
settingSetting to fetch
valueInteger value to fill in
Return values
lenLength of setting, or negative error

Definition at line 1024 of file settings.c.

1026  {
1027 
1029  ( ( unsigned long * ) value ), 1 );
1030 }
pseudo_bit_t value[0x00020]
Definition: arbel.h:13
int fetch_numeric_setting(struct settings *settings, const struct setting *setting, unsigned long *value, int is_signed)
Fetch value of numeric setting.
Definition: settings.c:998
A settings block.
Definition: settings.h:133
A setting.
Definition: settings.h:24

References fetch_numeric_setting(), and value.

Referenced by apply_peerdist_settings().

◆ fetch_uint_setting()

int fetch_uint_setting ( struct settings settings,
const struct setting setting,
unsigned long *  value 
)

Fetch value of unsigned integer setting.

Parameters
settingsSettings block, or NULL to search all blocks
settingSetting to fetch
valueInteger value to fill in
Return values
lenLength of setting, or negative error

Definition at line 1040 of file settings.c.

1042  {
1043 
1044  return fetch_numeric_setting ( settings, setting, value, 0 );
1045 }
pseudo_bit_t value[0x00020]
Definition: arbel.h:13
int fetch_numeric_setting(struct settings *settings, const struct setting *setting, unsigned long *value, int is_signed)
Fetch value of numeric setting.
Definition: settings.c:998
A settings block.
Definition: settings.h:133
A setting.
Definition: settings.h:24

References fetch_numeric_setting(), and value.

Referenced by san_default_drive(), and sandev_apply().

◆ fetch_intz_setting()

long fetch_intz_setting ( struct settings settings,
const struct setting setting 
)

Fetch value of signed integer setting, or zero.

Parameters
settingsSettings block, or NULL to search all blocks
settingSetting to fetch
Return values
valueSetting value, or zero

Definition at line 1054 of file settings.c.

1055  {
1056  unsigned long value;
1057 
1059  return value;
1060 }
pseudo_bit_t value[0x00020]
Definition: arbel.h:13
int fetch_numeric_setting(struct settings *settings, const struct setting *setting, unsigned long *value, int is_signed)
Fetch value of numeric setting.
Definition: settings.c:998
A settings block.
Definition: settings.h:133
A setting.
Definition: settings.h:24

References fetch_numeric_setting(), and value.

Referenced by net80211_step_associate(), reprioritise_settings(), and uriboot().

◆ fetch_uintz_setting()

unsigned long fetch_uintz_setting ( struct settings settings,
const struct setting setting 
)

Fetch value of unsigned integer setting, or zero.

Parameters
settingsSettings block, or NULL to search all blocks
settingSetting to fetch
Return values
valueSetting value, or zero

Definition at line 1069 of file settings.c.

1070  {
1071  unsigned long value;
1072 
1074  return value;
1075 }
pseudo_bit_t value[0x00020]
Definition: arbel.h:13
int fetch_numeric_setting(struct settings *settings, const struct setting *setting, unsigned long *value, int is_signed)
Fetch value of numeric setting.
Definition: settings.c:998
A settings block.
Definition: settings.h:133
A setting.
Definition: settings.h:24

References fetch_numeric_setting(), and value.

Referenced by apply_netdev_settings(), have_pxe_menu(), oncrpc_init_cred_sys(), and start_pxebs().

◆ fetch_uuid_setting()

int fetch_uuid_setting ( struct settings settings,
const struct setting setting,
union uuid uuid 
)

Fetch value of UUID setting.

Parameters
settingsSettings block, or NULL to search all blocks
settingSetting to fetch
uuidUUID to fill in
Return values
lenLength of setting, or negative error

Definition at line 1085 of file settings.c.

1087  {
1088  int len;
1089 
1090  len = fetch_raw_setting ( settings, setting, uuid, sizeof ( *uuid ) );
1091  if ( len < 0 )
1092  return len;
1093  if ( len != sizeof ( *uuid ) )
1094  return -ERANGE;
1095  return len;
1096 }
A universally unique ID.
Definition: uuid.h:16
int fetch_raw_setting(struct settings *settings, const struct setting *setting, void *data, size_t len)
Fetch value of setting.
Definition: settings.c:804
ring len
Length.
Definition: dwmac.h:231
#define ERANGE
Result too large.
Definition: errno.h:640
A settings block.
Definition: settings.h:133
A setting.
Definition: settings.h:24

References ERANGE, fetch_raw_setting(), and len.

Referenced by dhcp_create_request(), iscsi_fetch_settings(), rbg_startup(), and start_dhcpv6().

◆ clear_settings()

void clear_settings ( struct settings settings)

Clear settings block.

Parameters
settingsSettings block

Definition at line 1103 of file settings.c.

1103  {
1104 
1105  /* Find target settings block */
1107 
1108  /* Clear settings, if applicable */
1109  if ( settings->op->clear )
1110  settings->op->clear ( settings );
1111 }
void(* clear)(struct settings *settings)
Clear settings block.
Definition: settings.h:129
struct settings_operations * op
Settings block operations.
Definition: settings.h:145
struct settings * settings_target(struct settings *settings)
Redirect to target settings block.
Definition: settings.c:550
A settings block.
Definition: settings.h:133

References settings_operations::clear, settings::op, and settings_target().

Referenced by free_netdev(), register_netdev(), settings_test_exec(), and unregister_netdev().

◆ setting_cmp()

int setting_cmp ( const struct setting a,
const struct setting b 
)

Compare two settings.

Parameters
aSetting to compare
bSetting to compare
Return values
0Settings are the same
non-zeroSettings are not the same

Definition at line 1121 of file settings.c.

1121  {
1122 
1123  /* If the settings have tags, compare them */
1124  if ( a->tag && ( a->tag == b->tag ) && ( a->scope == b->scope ) )
1125  return 0;
1126 
1127  /* Otherwise, if the settings have names, compare them */
1128  if ( a->name && b->name && a->name[0] )
1129  return strcmp ( a->name, b->name );
1130 
1131  /* Otherwise, return a non-match */
1132  return ( ! 0 );
1133 }
const char * name
Name.
Definition: settings.h:29
uint64_t tag
Setting tag, if applicable.
Definition: settings.h:44
int strcmp(const char *first, const char *second)
Compare strings.
Definition: string.c:174
const struct settings_scope * scope
Setting scope (or NULL)
Definition: settings.h:50

References setting::name, setting::scope, strcmp(), and setting::tag.

Referenced by applicable_setting(), builtin_fetch(), dhcpv6_fetch(), efi_path_fetch(), efi_snp_hii_questions(), find_generic_setting(), ipv6_fetch(), ndp_prefix_fetch(), netdev_fetch(), netdev_store(), parse_setting_name(), phantom_clp_setting(), select_setting_row(), and store_setting().

◆ setting_format()

int setting_format ( const struct setting_type type,
const void *  raw,
size_t  raw_len,
char *  buf,
size_t  len 
)

Format setting value as a string.

Parameters
typeSetting type
rawRaw setting value
raw_lenLength of raw setting value
bufBuffer to contain formatted value
lenLength of buffer
Return values
lenLength of formatted value, or negative error

Definition at line 1152 of file settings.c.

1153  {
1154 
1155  /* Sanity check */
1156  if ( ! type->format )
1157  return -ENOTSUP;
1158 
1159  return type->format ( type, raw, raw_len, buf, len );
1160 }
uint32_t type
Operating system type.
Definition: ena.h:12
#define ENOTSUP
Operation not supported.
Definition: errno.h:590
ring len
Length.
Definition: dwmac.h:231
static size_t raw_len
Definition: base16.h:54
__be32 raw[7]
Definition: CIB_PRM.h:28

References ENOTSUP, len, raw, raw_len, and type.

Referenced by fetchf_setting().

◆ setting_parse()

int setting_parse ( const struct setting_type type,
const char *  value,
void *  buf,
size_t  len 
)

Parse formatted string to setting value.

Parameters
typeSetting type
valueFormatted setting value
bufBuffer to contain raw value
lenLength of buffer
Return values
lenLength of raw value, or negative error

Definition at line 1171 of file settings.c.

1172  {
1173 
1174  /* Sanity check */
1175  if ( ! type->parse )
1176  return -ENOTSUP;
1177 
1178  return type->parse ( type, value, buf, len );
1179 }
uint32_t type
Operating system type.
Definition: ena.h:12
#define ENOTSUP
Operation not supported.
Definition: errno.h:590
pseudo_bit_t value[0x00020]
Definition: arbel.h:13
ring len
Length.
Definition: dwmac.h:231

References ENOTSUP, len, type, and value.

Referenced by guestinfo_fetch_type(), and storef_setting().

◆ setting_numerate()

int setting_numerate ( const struct setting_type type,
const void *  raw,
size_t  raw_len,
unsigned long *  value 
)

Convert setting value to number.

Parameters
typeSetting type
rawRaw setting value
raw_lenLength of raw setting value
Return values
valueNumeric value
rcReturn status code

Definition at line 1190 of file settings.c.

1191  {
1192 
1193  /* Sanity check */
1194  if ( ! type->numerate )
1195  return -ENOTSUP;
1196 
1197  return type->numerate ( type, raw, raw_len, value );
1198 }
uint32_t type
Operating system type.
Definition: ena.h:12
#define ENOTSUP
Operation not supported.
Definition: errno.h:590
pseudo_bit_t value[0x00020]
Definition: arbel.h:13
static size_t raw_len
Definition: base16.h:54
__be32 raw[7]
Definition: CIB_PRM.h:28

References ENOTSUP, raw, raw_len, type, and value.

Referenced by fetchn_setting().

◆ setting_denumerate()

int setting_denumerate ( const struct setting_type type,
unsigned long  value,
void *  buf,
size_t  len 
)

Convert number to setting value.

Parameters
typeSetting type
valueNumeric value
bufBuffer to contain raw value
lenLength of buffer
Return values
lenLength of raw value, or negative error

Definition at line 1209 of file settings.c.

1210  {
1211 
1212  /* Sanity check */
1213  if ( ! type->denumerate )
1214  return -ENOTSUP;
1215 
1216  return type->denumerate ( type, value, buf, len );
1217 }
uint32_t type
Operating system type.
Definition: ena.h:12
#define ENOTSUP
Operation not supported.
Definition: errno.h:590
pseudo_bit_t value[0x00020]
Definition: arbel.h:13
ring len
Length.
Definition: dwmac.h:231

References ENOTSUP, len, type, and value.

Referenced by storen_setting().

◆ fetchf_setting()

int fetchf_setting ( struct settings settings,
const struct setting setting,
struct settings **  origin,
struct setting fetched,
char *  buf,
size_t  len 
)

Fetch formatted value of setting.

Parameters
settingsSettings block, or NULL to search all blocks
settingSetting to fetch
originOrigin of setting to fill in, or NULL
fetchedFetched setting to fill in, or NULL
bufBuffer to contain formatted value
lenLength of buffer
Return values
lenLength of formatted value, or negative error

Definition at line 1230 of file settings.c.

1232  {
1233  struct setting tmp_fetched;
1234  void *raw;
1235  int raw_len;
1236  int ret;
1237 
1238  /* Use local buffers if necessary */
1239  if ( ! fetched )
1240  fetched = &tmp_fetched;
1241 
1242  /* Fetch raw value */
1244  &raw );
1245  if ( raw_len < 0 ) {
1246  ret = raw_len;
1247  goto err_fetch_copy;
1248  }
1249 
1250  /* Sanity check */
1251  assert ( fetched->type != NULL );
1252 
1253  /* Format setting */
1254  if ( ( ret = setting_format ( fetched->type, raw, raw_len, buf,
1255  len ) ) < 0 )
1256  goto err_format;
1257 
1258  err_format:
1259  free ( raw );
1260  err_fetch_copy:
1261  return ret;
1262 }
uint64_t origin
Origin.
Definition: hyperv.h:20
int setting_format(const struct setting_type *type, const void *raw, size_t raw_len, char *buf, size_t len)
Format setting value as a string.
Definition: settings.c:1152
assert((readw(&hdr->flags) &(GTF_reading|GTF_writing))==0)
ring len
Length.
Definition: dwmac.h:231
const struct setting_type * type
Setting type.
Definition: settings.h:37
static size_t raw_len
Definition: base16.h:54
static void(* free)(struct refcnt *refcnt))
Definition: refcnt.h:55
A settings block.
Definition: settings.h:133
int fetch_setting_copy(struct settings *settings, const struct setting *setting, struct settings **origin, struct setting *fetched, void **data)
Fetch copy of setting.
Definition: settings.c:786
A setting.
Definition: settings.h:24
__be32 raw[7]
Definition: CIB_PRM.h:28
#define NULL
NULL pointer (VOID *)
Definition: Base.h:322

References assert(), fetch_setting_copy(), free, len, NULL, origin, raw, raw_len, setting_format(), and setting::type.

Referenced by efi_snp_hii_fetch(), and fetchf_setting_copy().

◆ fetchf_setting_copy()

int fetchf_setting_copy ( struct settings settings,
const struct setting setting,
struct settings **  origin,
struct setting fetched,
char **  value 
)

Fetch copy of formatted value of setting.

Parameters
settingsSettings block, or NULL to search all blocks
settingSetting to fetch
originOrigin of setting to fill in, or NULL
fetchedFetched setting to fill in, or NULL
valueBuffer to allocate and fill with formatted value
Return values
lenLength of formatted value, or negative error

The caller is responsible for eventually freeing the allocated buffer.

Definition at line 1277 of file settings.c.

1280  {
1281  struct settings *tmp_origin;
1282  struct setting tmp_fetched;
1283  int len;
1284  int check_len;
1285 
1286  /* Use local buffers if necessary */
1287  if ( ! origin )
1288  origin = &tmp_origin;
1289  if ( ! fetched )
1290  fetched = &tmp_fetched;
1291 
1292  /* Avoid returning uninitialised data on error */
1293  *value = NULL;
1294 
1295  /* Check existence, and fetch formatted value length */
1296  len = fetchf_setting ( settings, setting, origin, fetched, NULL, 0 );
1297  if ( len < 0 )
1298  return len;
1299 
1300  /* Allocate buffer */
1301  *value = zalloc ( len + 1 /* NUL */ );
1302  if ( ! *value )
1303  return -ENOMEM;
1304 
1305  /* Fetch formatted value */
1306  check_len = fetchf_setting ( *origin, fetched, NULL, NULL, *value,
1307  ( len + 1 /* NUL */ ) );
1308  assert ( check_len == len );
1309  return len;
1310 }
uint64_t origin
Origin.
Definition: hyperv.h:20
int fetchf_setting(struct settings *settings, const struct setting *setting, struct settings **origin, struct setting *fetched, char *buf, size_t len)
Fetch formatted value of setting.
Definition: settings.c:1230
#define ENOMEM
Not enough space.
Definition: errno.h:535
assert((readw(&hdr->flags) &(GTF_reading|GTF_writing))==0)
pseudo_bit_t value[0x00020]
Definition: arbel.h:13
ring len
Length.
Definition: dwmac.h:231
void * zalloc(size_t size)
Allocate cleared memory.
Definition: malloc.c:662
A settings block.
Definition: settings.h:133
A setting.
Definition: settings.h:24
#define NULL
NULL pointer (VOID *)
Definition: Base.h:322

References assert(), ENOMEM, fetchf_setting(), len, NULL, origin, value, and zalloc().

Referenced by expand_settings(), load_values(), read_value(), select_setting_row(), and show_exec().

◆ storef_setting()

int storef_setting ( struct settings settings,
const struct setting setting,
const char *  value 
)

Store formatted value of setting.

Parameters
settingsSettings block
settingSetting to store
valueFormatted setting data, or NULL
Return values
rcReturn status code

Definition at line 1320 of file settings.c.

1321  {
1322  void *raw;
1323  int raw_len;
1324  int check_len;
1325  int rc;
1326 
1327  /* NULL value or empty string implies deletion */
1328  if ( ( ! value ) || ( ! value[0] ) )
1329  return delete_setting ( settings, setting );
1330 
1331  /* Sanity check */
1332  assert ( setting->type != NULL );
1333 
1334  /* Get raw value length */
1336  if ( raw_len < 0 ) {
1337  rc = raw_len;
1338  goto err_raw_len;
1339  }
1340 
1341  /* Allocate buffer for raw value */
1342  raw = malloc ( raw_len );
1343  if ( ! raw ) {
1344  rc = -ENOMEM;
1345  goto err_alloc_raw;
1346  }
1347 
1348  /* Parse formatted value */
1349  check_len = setting_parse ( setting->type, value, raw, raw_len );
1350  assert ( check_len == raw_len );
1351 
1352  /* Store raw value */
1353  if ( ( rc = store_setting ( settings, setting, raw, raw_len ) ) != 0 )
1354  goto err_store;
1355 
1356  err_store:
1357  free ( raw );
1358  err_alloc_raw:
1359  err_raw_len:
1360  return rc;
1361 }
struct arbelprm_rc_send_wqe rc
Definition: arbel.h:14
static int delete_setting(struct settings *settings, const struct setting *setting)
Delete setting.
Definition: settings.h:534
int store_setting(struct settings *settings, const struct setting *setting, const void *data, size_t len)
Store value of setting.
Definition: settings.c:616
#define ENOMEM
Not enough space.
Definition: errno.h:535
assert((readw(&hdr->flags) &(GTF_reading|GTF_writing))==0)
pseudo_bit_t value[0x00020]
Definition: arbel.h:13
const struct setting_type * type
Setting type.
Definition: settings.h:37
static size_t raw_len
Definition: base16.h:54
static void(* free)(struct refcnt *refcnt))
Definition: refcnt.h:55
A settings block.
Definition: settings.h:133
void * malloc(size_t size)
Allocate memory.
Definition: malloc.c:621
A setting.
Definition: settings.h:24
__be32 raw[7]
Definition: CIB_PRM.h:28
int setting_parse(const struct setting_type *type, const char *value, void *buf, size_t len)
Parse formatted string to setting value.
Definition: settings.c:1171
#define NULL
NULL pointer (VOID *)
Definition: Base.h:322

References assert(), delete_setting(), ENOMEM, free, malloc(), NULL, raw, raw_len, rc, setting_parse(), store_setting(), setting::type, and value.

Referenced by choose_exec(), efi_snp_hii_store(), save_setting(), save_values(), set_core_exec(), and testnet_set_okx().

◆ fetchn_setting()

int fetchn_setting ( struct settings settings,
const struct setting setting,
struct settings **  origin,
struct setting fetched,
unsigned long *  value 
)

Fetch numeric value of setting.

Parameters
settingsSettings block, or NULL to search all blocks
settingSetting to fetch
originOrigin of setting to fill in, or NULL
fetchedFetched setting to fill in, or NULL
valueNumeric value to fill in
Return values
rcReturn status code

Definition at line 1373 of file settings.c.

1375  {
1376  struct setting tmp_fetched;
1377  void *raw;
1378  int raw_len;
1379  int rc;
1380 
1381  /* Use local buffers if necessary */
1382  if ( ! fetched )
1383  fetched = &tmp_fetched;
1384 
1385  /* Fetch raw value */
1387  &raw );
1388  if ( raw_len < 0 ) {
1389  rc = raw_len;
1390  goto err_fetch_copy;
1391  }
1392 
1393  /* Sanity check */
1394  assert ( fetched->type != NULL );
1395 
1396  /* Numerate setting */
1397  if ( ( rc = setting_numerate ( fetched->type, raw, raw_len,
1398  value ) ) < 0 )
1399  goto err_numerate;
1400 
1401  err_numerate:
1402  free ( raw );
1403  err_fetch_copy:
1404  return rc;
1405 }
struct arbelprm_rc_send_wqe rc
Definition: arbel.h:14
uint64_t origin
Origin.
Definition: hyperv.h:20
assert((readw(&hdr->flags) &(GTF_reading|GTF_writing))==0)
pseudo_bit_t value[0x00020]
Definition: arbel.h:13
const struct setting_type * type
Setting type.
Definition: settings.h:37
static size_t raw_len
Definition: base16.h:54
static void(* free)(struct refcnt *refcnt))
Definition: refcnt.h:55
A settings block.
Definition: settings.h:133
int fetch_setting_copy(struct settings *settings, const struct setting *setting, struct settings **origin, struct setting *fetched, void **data)
Fetch copy of setting.
Definition: settings.c:786
A setting.
Definition: settings.h:24
__be32 raw[7]
Definition: CIB_PRM.h:28
int setting_numerate(const struct setting_type *type, const void *raw, size_t raw_len, unsigned long *value)
Convert setting value to number.
Definition: settings.c:1190
#define NULL
NULL pointer (VOID *)
Definition: Base.h:322

References assert(), fetch_setting_copy(), free, NULL, origin, raw, raw_len, rc, setting_numerate(), setting::type, and value.

Referenced by inc_exec(), pciscan_exec(), and usbscan_exec().

◆ storen_setting()

int storen_setting ( struct settings settings,
const struct setting setting,
unsigned long  value 
)

Store numeric value of setting.

Parameters
settingsSettings block
settingSetting
valueNumeric value
Return values
rcReturn status code

Definition at line 1415 of file settings.c.

1416  {
1417  void *raw;
1418  int raw_len;
1419  int check_len;
1420  int rc;
1421 
1422  /* Sanity check */
1423  assert ( setting->type != NULL );
1424 
1425  /* Get raw value length */
1427  if ( raw_len < 0 ) {
1428  rc = raw_len;
1429  goto err_raw_len;
1430  }
1431 
1432  /* Allocate buffer for raw value */
1433  raw = malloc ( raw_len );
1434  if ( ! raw ) {
1435  rc = -ENOMEM;
1436  goto err_alloc_raw;
1437  }
1438 
1439  /* Denumerate value */
1440  check_len = setting_denumerate ( setting->type, value, raw, raw_len );
1441  assert ( check_len == raw_len );
1442 
1443  /* Store raw value */
1444  if ( ( rc = store_setting ( settings, setting, raw, raw_len ) ) != 0 )
1445  goto err_store;
1446 
1447  err_store:
1448  free ( raw );
1449  err_alloc_raw:
1450  err_raw_len:
1451  return rc;
1452 }
struct arbelprm_rc_send_wqe rc
Definition: arbel.h:14
int setting_denumerate(const struct setting_type *type, unsigned long value, void *buf, size_t len)
Convert number to setting value.
Definition: settings.c:1209
int store_setting(struct settings *settings, const struct setting *setting, const void *data, size_t len)
Store value of setting.
Definition: settings.c:616
#define ENOMEM
Not enough space.
Definition: errno.h:535
assert((readw(&hdr->flags) &(GTF_reading|GTF_writing))==0)
pseudo_bit_t value[0x00020]
Definition: arbel.h:13
const struct setting_type * type
Setting type.
Definition: settings.h:37
static size_t raw_len
Definition: base16.h:54
static void(* free)(struct refcnt *refcnt))
Definition: refcnt.h:55
A settings block.
Definition: settings.h:133
void * malloc(size_t size)
Allocate memory.
Definition: malloc.c:621
A setting.
Definition: settings.h:24
__be32 raw[7]
Definition: CIB_PRM.h:28
#define NULL
NULL pointer (VOID *)
Definition: Base.h:322

References assert(), ENOMEM, free, malloc(), NULL, raw, raw_len, rc, setting_denumerate(), store_setting(), setting::type, and value.

Referenced by inc_exec(), pciscan_exec(), and usbscan_exec().

◆ find_setting()

struct setting* find_setting ( const char *  name)

Find predefined setting.

Parameters
nameName
Return values
settingSetting, or NULL

Definition at line 1467 of file settings.c.

1467  {
1468  struct setting *setting;
1469 
1471  if ( strcmp ( name, setting->name ) == 0 )
1472  return setting;
1473  }
1474  return NULL;
1475 }
const char * name
Definition: ath9k_hw.c:1986
const char * name
Name.
Definition: settings.h:29
#define SETTINGS
Configuration setting table.
Definition: settings.h:54
#define for_each_table_entry(pointer, table)
Iterate through all entries within a linker table.
Definition: tables.h:386
A setting.
Definition: settings.h:24
int strcmp(const char *first, const char *second)
Compare strings.
Definition: string.c:174
#define NULL
NULL pointer (VOID *)
Definition: Base.h:322

References for_each_table_entry, setting::name, name, NULL, generic_setting::setting, SETTINGS, and strcmp().

Referenced by efi_snp_hii_fetch(), efi_snp_hii_store(), and guestinfo_fetch_type().

◆ parse_setting_tag()

static uint64_t parse_setting_tag ( const char *  name)
static

Parse setting name as tag number.

Parameters
nameName
Return values
tagTag number, or 0 if not a valid number

Definition at line 1483 of file settings.c.

1483  {
1484  char *tmp = ( ( char * ) name );
1485  uint64_t tag = 0;
1486 
1487  while ( 1 ) {
1488  tag = ( ( tag << 8 ) | strtoul ( tmp, &tmp, 0 ) );
1489  if ( *tmp == 0 )
1490  return tag;
1491  if ( *tmp != '.' )
1492  return 0;
1493  tmp++;
1494  }
1495 }
const char * name
Definition: ath9k_hw.c:1986
unsigned long strtoul(const char *string, char **endp, int base)
Convert string to numeric value.
Definition: string.c:485
unsigned long long uint64_t
Definition: stdint.h:13
unsigned long tmp
Definition: linux_pci.h:65
uint64_t tag
Identity tag.
Definition: edd.h:31

References name, strtoul(), tag, and tmp.

Referenced by parse_setting_name().

◆ find_setting_type()

static const struct setting_type* find_setting_type ( const char *  name)
static

Find setting type.

Parameters
nameName
Return values
typeSetting type, or NULL

Definition at line 1503 of file settings.c.

1503  {
1504  const struct setting_type *type;
1505 
1507  if ( strcmp ( name, type->name ) == 0 )
1508  return type;
1509  }
1510  return NULL;
1511 }
const char * name
Definition: ath9k_hw.c:1986
uint32_t type
Operating system type.
Definition: ena.h:12
#define for_each_table_entry(pointer, table)
Iterate through all entries within a linker table.
Definition: tables.h:386
int strcmp(const char *first, const char *second)
Compare strings.
Definition: string.c:174
#define SETTING_TYPES
Configuration setting type table.
Definition: settings.h:243
#define NULL
NULL pointer (VOID *)
Definition: Base.h:322
A setting type.
Definition: settings.h:192

References for_each_table_entry, name, NULL, SETTING_TYPES, strcmp(), and type.

Referenced by parse_setting_name().

◆ parse_setting_name()

int parse_setting_name ( char *  name,
get_child_settings_t  get_child,
struct settings **  settings,
struct setting setting 
)

Parse setting name.

Parameters
nameName of setting
get_childFunction to find or create child settings block
settingsSettings block to fill in
settingSetting to fill in
Return values
rcReturn status code

Interprets a name of the form "[settings_name/]tag_name[:type_name]" and fills in the appropriate fields.

Note that on success, this function will have modified the original setting name.

Definition at line 1529 of file settings.c.

1530  {
1531  char *settings_name;
1532  char *setting_name;
1533  char *type_name;
1534  struct setting *predefined;
1535  int rc;
1536 
1537  /* Set defaults */
1538  *settings = &settings_root;
1539  memset ( setting, 0, sizeof ( *setting ) );
1540  setting->name = "";
1541 
1542  /* Split name into "[settings_name/]setting_name[:type_name]" */
1543  if ( ( setting_name = strchr ( name, '/' ) ) != NULL ) {
1544  *(setting_name++) = 0;
1545  settings_name = name;
1546  } else {
1547  setting_name = name;
1548  settings_name = NULL;
1549  }
1550  if ( ( type_name = strchr ( setting_name, ':' ) ) != NULL )
1551  *(type_name++) = 0;
1552 
1553  /* Identify settings block, if specified */
1554  if ( settings_name ) {
1555  *settings = parse_settings_name ( settings_name, get_child );
1556  if ( *settings == NULL ) {
1557  DBG ( "Unrecognised settings block \"%s\" in \"%s\"\n",
1558  settings_name, name );
1559  rc = -ENODEV;
1560  goto err;
1561  }
1562  }
1563 
1564  /* Identify setting */
1566  setting->scope = (*settings)->default_scope;
1568  for_each_table_entry ( predefined, SETTINGS ) {
1569  /* Matches a predefined setting; use that setting */
1570  if ( setting_cmp ( predefined, setting ) == 0 ) {
1571  memcpy ( setting, predefined, sizeof ( *setting ) );
1572  break;
1573  }
1574  }
1575 
1576  /* Identify setting type, if specified */
1577  if ( type_name ) {
1578  setting->type = find_setting_type ( type_name );
1579  if ( setting->type == NULL ) {
1580  DBG ( "Invalid setting type \"%s\" in \"%s\"\n",
1581  type_name, name );
1582  rc = -ENOTSUP;
1583  goto err;
1584  }
1585  }
1586 
1587  return 0;
1588 
1589  err:
1590  /* Restore original name */
1591  if ( settings_name )
1592  *( setting_name - 1 ) = '/';
1593  if ( type_name )
1594  *( type_name - 1 ) = ':';
1595  return rc;
1596 }
struct arbelprm_rc_send_wqe rc
Definition: arbel.h:14
const char * name
Definition: ath9k_hw.c:1986
static struct settings * parse_settings_name(const char *name, get_child_settings_t get_child)
Parse settings block name.
Definition: settings.c:372
const char * settings_name(struct settings *settings)
Return settings block name.
Definition: settings.c:346
#define ENOTSUP
Operation not supported.
Definition: errno.h:590
const char * name
Name.
Definition: settings.h:29
#define SETTINGS
Configuration setting table.
Definition: settings.h:54
uint64_t tag
Setting tag, if applicable.
Definition: settings.h:44
void * memcpy(void *dest, const void *src, size_t len) __nonnull
const struct setting_type * type
Setting type.
Definition: settings.h:37
static uint64_t parse_setting_tag(const char *name)
Parse setting name as tag number.
Definition: settings.c:1483
char * strchr(const char *src, int character)
Find character within a string.
Definition: string.c:272
#define for_each_table_entry(pointer, table)
Iterate through all entries within a linker table.
Definition: tables.h:386
#define ENODEV
No such device.
Definition: errno.h:510
A settings block.
Definition: settings.h:133
#define settings_root
Root settings block.
Definition: settings.c:250
static const struct setting_type * find_setting_type(const char *name)
Find setting type.
Definition: settings.c:1503
A setting.
Definition: settings.h:24
#define DBG(...)
Print a debugging message.
Definition: compiler.h:498
const struct settings_scope * scope
Setting scope (or NULL)
Definition: settings.h:50
int setting_name(struct settings *settings, const struct setting *setting, char *buf, size_t len)
Return full setting name.
Definition: settings.c:1607
int setting_cmp(const struct setting *a, const struct setting *b)
Compare two settings.
Definition: settings.c:1121
#define NULL
NULL pointer (VOID *)
Definition: Base.h:322
void * memset(void *dest, int character, size_t len) __nonnull

References DBG, ENODEV, ENOTSUP, find_setting_type(), for_each_table_entry, memcpy(), memset(), setting::name, name, NULL, parse_setting_tag(), parse_settings_name(), rc, setting::scope, setting_cmp(), setting_name(), SETTINGS, settings_name(), settings_root, strchr(), setting::tag, and setting::type.

Referenced by expand_settings(), nslookup_resolv_done(), parse_names(), parse_setting(), and testnet_set_okx().

◆ setting_name()

int setting_name ( struct settings settings,
const struct setting setting,
char *  buf,
size_t  len 
)

Return full setting name.

Parameters
settingsSettings block, or NULL
settingSetting
bufBuffer
lenLength of buffer
Return values
lenLength of setting name, or negative error

Definition at line 1607 of file settings.c.

1608  {
1609  const char *name;
1610 
1612  name = settings_name ( settings );
1613  return snprintf ( buf, len, "%s%s%s:%s", name, ( name[0] ? "/" : "" ),
1614  setting->name, setting->type->name );
1615 }
const char * name
Definition: ath9k_hw.c:1986
const char * settings_name(struct settings *settings)
Return settings block name.
Definition: settings.c:346
const char * name
Name.
Definition: settings.h:29
struct settings * settings_target(struct settings *settings)
Redirect to target settings block.
Definition: settings.c:550
ring len
Length.
Definition: dwmac.h:231
const struct setting_type * type
Setting type.
Definition: settings.h:37
A settings block.
Definition: settings.h:133
A setting.
Definition: settings.h:24
const char * name
Name.
Definition: settings.h:197
int snprintf(char *buf, size_t size, const char *fmt,...)
Write a formatted string to a buffer.
Definition: vsprintf.c:383

References len, setting::name, setting_type::name, name, settings_name(), settings_target(), snprintf(), and setting::type.

Referenced by draw_info_row(), nslookup(), nslookup_exec(), parse_setting_name(), resolv_setting(), and show_exec().

◆ parse_string_setting()

static int parse_string_setting ( const struct setting_type *type  __unused,
const char *  value,
void *  buf,
size_t  len 
)
static

Parse string setting value.

Parameters
typeSetting type
valueFormatted setting value
bufBuffer to contain raw value
lenLength of buffer
Return values
lenLength of raw value, or negative error

Definition at line 1633 of file settings.c.

1634  {
1635  size_t raw_len = strlen ( value ); /* Exclude terminating NUL */
1636 
1637  /* Copy string to buffer */
1638  if ( len > raw_len )
1639  len = raw_len;
1640  memcpy ( buf, value, len );
1641 
1642  return raw_len;
1643 }
void * memcpy(void *dest, const void *src, size_t len) __nonnull
pseudo_bit_t value[0x00020]
Definition: arbel.h:13
ring len
Length.
Definition: dwmac.h:231
static size_t raw_len
Definition: base16.h:54
size_t strlen(const char *src)
Get length of string.
Definition: string.c:244

References len, memcpy(), raw_len, strlen(), and value.

◆ format_string_setting()

static int format_string_setting ( const struct setting_type *type  __unused,
const void *  raw,
size_t  raw_len,
char *  buf,
size_t  len 
)
static

Format string setting value.

Parameters
typeSetting type
rawRaw setting value
raw_lenLength of raw setting value
bufBuffer to contain formatted value
lenLength of buffer
Return values
lenLength of formatted value, or negative error

Definition at line 1655 of file settings.c.

1657  {
1658 
1659  /* Copy string to buffer, and terminate */
1660  memset ( buf, 0, len );
1661  if ( len > raw_len )
1662  len = raw_len;
1663  memcpy ( buf, raw, len );
1664 
1665  return raw_len;
1666 }
void * memcpy(void *dest, const void *src, size_t len) __nonnull
ring len
Length.
Definition: dwmac.h:231
static size_t raw_len
Definition: base16.h:54
__be32 raw[7]
Definition: CIB_PRM.h:28
void * memset(void *dest, int character, size_t len) __nonnull

References len, memcpy(), memset(), raw, and raw_len.

◆ parse_uristring_setting()

static int parse_uristring_setting ( const struct setting_type *type  __unused,
const char *  value,
void *  buf,
size_t  len 
)
static

Parse URI-encoded string setting value.

Parameters
typeSetting type
valueFormatted setting value
bufBuffer to contain raw value
lenLength of buffer
Return values
lenLength of raw value, or negative error

Definition at line 1684 of file settings.c.

1685  {
1686 
1687  return uri_decode ( value, buf, len );
1688 }
pseudo_bit_t value[0x00020]
Definition: arbel.h:13
ring len
Length.
Definition: dwmac.h:231
size_t uri_decode(const char *encoded, void *buf, size_t len)
Decode URI field.
Definition: uri.c:54

References len, uri_decode(), and value.

◆ format_uristring_setting()

static int format_uristring_setting ( const struct setting_type *type  __unused,
const void *  raw,
size_t  raw_len,
char *  buf,
size_t  len 
)
static

Format URI-encoded string setting value.

Parameters
typeSetting type
rawRaw setting value
raw_lenLength of raw setting value
bufBuffer to contain formatted value
lenLength of buffer
Return values
lenLength of formatted value, or negative error

Definition at line 1700 of file settings.c.

1702  {
1703 
1704  return uri_encode ( 0, raw, raw_len, buf, len );
1705 }
size_t uri_encode(unsigned int field, const void *raw, size_t raw_len, char *buf, ssize_t len)
Encode URI field.
Definition: uri.c:201
ring len
Length.
Definition: dwmac.h:231
static size_t raw_len
Definition: base16.h:54
__be32 raw[7]
Definition: CIB_PRM.h:28

References len, raw, raw_len, and uri_encode().

◆ parse_ipv4_setting()

__weak int parse_ipv4_setting ( const struct setting_type *type  __unused,
const char *value  __unused,
void *buf  __unused,
size_t len  __unused 
)

Parse IPv4 address setting value (when IPv4 support is not present)

Parameters
typeSetting type
valueFormatted setting value
bufBuffer to contain raw value
lenLength of buffer
Return values
lenLength of raw value, or negative error

Definition at line 1723 of file settings.c.

1725  {
1726  return -ENOTSUP;
1727 }
#define ENOTSUP
Operation not supported.
Definition: errno.h:590

References ENOTSUP.

◆ format_ipv4_setting()

__weak int format_ipv4_setting ( const struct setting_type *type  __unused,
const void *raw  __unused,
size_t raw_len  __unused,
char *buf  __unused,
size_t len  __unused 
)

Format IPv4 address setting value (when IPv4 support is not present)

Parameters
typeSetting type
rawRaw setting value
raw_lenLength of raw setting value
bufBuffer to contain formatted value
lenLength of buffer
Return values
lenLength of formatted value, or negative error

Definition at line 1739 of file settings.c.

1742  {
1743  return -ENOTSUP;
1744 }
#define ENOTSUP
Operation not supported.
Definition: errno.h:590

References ENOTSUP.

◆ parse_ipv6_setting()

__weak int parse_ipv6_setting ( const struct setting_type *type  __unused,
const char *value  __unused,
void *buf  __unused,
size_t len  __unused 
)

Parse IPv6 address setting value (when IPv6 support is not present)

Parameters
typeSetting type
valueFormatted setting value
bufBuffer to contain raw value
lenLength of buffer
Return values
lenLength of raw value, or negative error

Definition at line 1762 of file settings.c.

1764  {
1765  return -ENOTSUP;
1766 }
#define ENOTSUP
Operation not supported.
Definition: errno.h:590

References ENOTSUP.

◆ format_ipv6_setting()

__weak int format_ipv6_setting ( const struct setting_type *type  __unused,
const void *raw  __unused,
size_t raw_len  __unused,
char *buf  __unused,
size_t len  __unused 
)

Format IPv6 address setting value (when IPv6 support is not present)

Parameters
typeSetting type
rawRaw setting value
raw_lenLength of raw setting value
bufBuffer to contain formatted value
lenLength of buffer
Return values
lenLength of formatted value, or negative error

Definition at line 1778 of file settings.c.

1781  {
1782  return -ENOTSUP;
1783 }
#define ENOTSUP
Operation not supported.
Definition: errno.h:590

References ENOTSUP.

◆ setting_type_int_index()

static unsigned int setting_type_int_index ( const struct setting_type type)
static

Get integer setting type index.

Parameters
typeSetting type
Return values
indexInteger setting type index

Definition at line 1844 of file settings.c.

1844  {
1845 
1846  return ( ( type->name - setting_type_int_name[0] ) /
1847  sizeof ( setting_type_int_name[0] ) );
1848 }
uint32_t type
Operating system type.
Definition: ena.h:12
static const char setting_type_int_name[][8]
Integer setting type names.
Definition: settings.c:1816

References setting_type_int_name, and type.

◆ setting_type_int_width()

static unsigned int setting_type_int_width ( const struct setting_type type)
static

Get integer setting type width.

Parameters
typeSetting type
Return values
indexInteger setting type width

Definition at line 1856 of file settings.c.

1856  {
1857 
1858  return ( 1 << setting_type_int_index ( type ) );
1859 }
uint32_t type
Operating system type.
Definition: ena.h:12
setting_type_int_index
Integer setting type indices.
Definition: settings.c:1801

References type.

Referenced by denumerate_int_setting().

◆ setting_type_int_is_signed()

static int setting_type_int_is_signed ( const struct setting_type type)
static

Get integer setting type signedness.

Parameters
typeSetting type
Return values
is_signedInteger setting type is signed

Definition at line 1867 of file settings.c.

1867  {
1868  return ( ( type->name - setting_type_int_name[0] ) & 1 );
1869 }
uint32_t type
Operating system type.
Definition: ena.h:12
static const char setting_type_int_name[][8]
Integer setting type names.
Definition: settings.c:1816

References setting_type_int_name, and type.

Referenced by numerate_int_setting().

◆ denumerate_int_setting()

static int denumerate_int_setting ( const struct setting_type type,
unsigned long  value,
void *  buf,
size_t  len 
)
static

Convert number to setting value.

Parameters
typeSetting type
valueNumeric value
bufBuffer to contain raw value
lenLength of buffer
Return values
lenLength of raw value, or negative error

Definition at line 1880 of file settings.c.

1882  {
1883  unsigned int size = setting_type_int_width ( type );
1884  union {
1885  uint32_t num;
1886  uint8_t bytes[4];
1887  } u;
1888 
1889  u.num = htonl ( value );
1890  if ( len > size )
1891  len = size;
1892  memcpy ( buf, &u.bytes[ sizeof ( u ) - size ], len );
1893 
1894  return size;
1895 }
uint32_t type
Operating system type.
Definition: ena.h:12
uint16_t size
Buffer size.
Definition: dwmac.h:14
union @18 u
#define htonl(value)
Definition: byteswap.h:134
uint32_t num
Definition: multiboot.h:12
void * memcpy(void *dest, const void *src, size_t len) __nonnull
pseudo_bit_t value[0x00020]
Definition: arbel.h:13
ring len
Length.
Definition: dwmac.h:231
unsigned char uint8_t
Definition: stdint.h:10
unsigned int uint32_t
Definition: stdint.h:12
static unsigned int setting_type_int_width(const struct setting_type *type)
Get integer setting type width.
Definition: settings.c:1856
uint8_t bytes[64]
Definition: ib_mad.h:17

References bytes, htonl, len, memcpy(), num, setting_type_int_width(), size, type, u, and value.

◆ numerate_int_setting()

static int numerate_int_setting ( const struct setting_type type,
const void *  raw,
size_t  raw_len,
unsigned long *  value 
)
static

Convert setting value to number.

Parameters
typeSetting type
rawRaw setting value
raw_lenLength of raw setting value
valueNumeric value to fill in
Return values
rcReturn status code

Definition at line 1906 of file settings.c.

1908  {
1909  int is_signed = setting_type_int_is_signed ( type );
1910  int check_len;
1911 
1912  /* Extract numeric value */
1913  check_len = numeric_setting_value ( is_signed, raw, raw_len, value );
1914  if ( check_len < 0 )
1915  return check_len;
1916  assert ( check_len == ( int ) raw_len );
1917 
1918  return 0;
1919 }
uint32_t type
Operating system type.
Definition: ena.h:12
static int numeric_setting_value(int is_signed, const void *raw, size_t len, unsigned long *value)
Extract numeric value of setting.
Definition: settings.c:967
static int setting_type_int_is_signed(const struct setting_type *type)
Get integer setting type signedness.
Definition: settings.c:1867
assert((readw(&hdr->flags) &(GTF_reading|GTF_writing))==0)
pseudo_bit_t value[0x00020]
Definition: arbel.h:13
static size_t raw_len
Definition: base16.h:54
__be32 raw[7]
Definition: CIB_PRM.h:28

References assert(), numeric_setting_value(), raw, raw_len, setting_type_int_is_signed(), type, and value.

◆ parse_int_setting()

static int parse_int_setting ( const struct setting_type type,
const char *  value,
void *  buf,
size_t  len 
)
static

Parse integer setting value.

Parameters
typeSetting type
valueFormatted setting value
bufBuffer to contain raw value
lenLength of buffer
Return values
lenLength of raw value, or negative error

Definition at line 1930 of file settings.c.

1931  {
1932  char *endp;
1933  unsigned long num_value;
1934 
1935  /* Parse value */
1936  num_value = strtoul ( value, &endp, 0 );
1937  if ( *endp )
1938  return -EINVAL;
1939 
1940  return type->denumerate ( type, num_value, buf, len );
1941 }
#define EINVAL
Invalid argument.
Definition: errno.h:429
unsigned long strtoul(const char *string, char **endp, int base)
Convert string to numeric value.
Definition: string.c:485
uint32_t type
Operating system type.
Definition: ena.h:12
pseudo_bit_t value[0x00020]
Definition: arbel.h:13
ring len
Length.
Definition: dwmac.h:231

References EINVAL, len, strtoul(), type, and value.

◆ format_int_setting()

static int format_int_setting ( const struct setting_type type,
const void *  raw,
size_t  raw_len,
char *  buf,
size_t  len 
)
static

Format signed integer setting value.

Parameters
typeSetting type
rawRaw setting value
raw_lenLength of raw setting value
bufBuffer to contain formatted value
lenLength of buffer
Return values
lenLength of formatted value, or negative error

Definition at line 1953 of file settings.c.

1955  {
1956  unsigned long value;
1957  int ret;
1958 
1959  /* Extract numeric value */
1960  if ( ( ret = type->numerate ( type, raw, raw_len, &value ) ) < 0 )
1961  return ret;
1962 
1963  /* Format value */
1964  return snprintf ( buf, len, "%ld", value );
1965 }
uint32_t type
Operating system type.
Definition: ena.h:12
pseudo_bit_t value[0x00020]
Definition: arbel.h:13
ring len
Length.
Definition: dwmac.h:231
static size_t raw_len
Definition: base16.h:54
__be32 raw[7]
Definition: CIB_PRM.h:28
int snprintf(char *buf, size_t size, const char *fmt,...)
Write a formatted string to a buffer.
Definition: vsprintf.c:383

References len, raw, raw_len, snprintf(), type, and value.

◆ format_uint_setting()

static int format_uint_setting ( const struct setting_type type,
const void *  raw,
size_t  raw_len,
char *  buf,
size_t  len 
)
static

Format unsigned integer setting value.

Parameters
typeSetting type
rawRaw setting value
raw_lenLength of raw setting value
bufBuffer to contain formatted value
lenLength of buffer
Return values
lenLength of formatted value, or negative error

Definition at line 1977 of file settings.c.

1979  {
1980  unsigned long value;
1981  int ret;
1982 
1983  /* Extract numeric value */
1984  if ( ( ret = type->numerate ( type, raw, raw_len, &value ) ) < 0 )
1985  return ret;
1986 
1987  /* Format value */
1988  return snprintf ( buf, len, "%#lx", value );
1989 }
uint32_t type
Operating system type.
Definition: ena.h:12
pseudo_bit_t value[0x00020]
Definition: arbel.h:13
ring len
Length.
Definition: dwmac.h:231
static size_t raw_len
Definition: base16.h:54
__be32 raw[7]
Definition: CIB_PRM.h:28
int snprintf(char *buf, size_t size, const char *fmt,...)
Write a formatted string to a buffer.
Definition: vsprintf.c:383

References len, raw, raw_len, snprintf(), type, and value.

◆ parse_hex_setting()

static int parse_hex_setting ( const struct setting_type *type  __unused,
const char *  value,
void *  buf,
size_t  len 
)
static

Parse hex string setting value (using colon delimiter)

Parameters
typeSetting type
valueFormatted setting value
bufBuffer to contain raw value
lenLength of buffer
sizeInteger size, in bytes
Return values
lenLength of raw value, or negative error

Definition at line 2053 of file settings.c.

2054  {
2055  return hex_decode ( ':', value, buf, len );
2056 }
pseudo_bit_t value[0x00020]
Definition: arbel.h:13
ring len
Length.
Definition: dwmac.h:231
int hex_decode(char separator, const char *encoded, void *data, size_t len)
Decode hexadecimal string (with optional byte separator character)
Definition: base16.c:77

References hex_decode(), len, and value.

◆ format_hex_colon_setting()

static int format_hex_colon_setting ( const struct setting_type *type  __unused,
const void *  raw,
size_t  raw_len,
char *  buf,
size_t  len 
)
static

Format hex string setting value (using colon delimiter)

Parameters
typeSetting type
rawRaw setting value
raw_lenLength of raw setting value
bufBuffer to contain formatted value
lenLength of buffer
Return values
lenLength of formatted value, or negative error

Definition at line 2068 of file settings.c.

2070  {
2071  return hex_encode ( ':', raw, raw_len, buf, len );
2072 }
ring len
Length.
Definition: dwmac.h:231
static size_t raw_len
Definition: base16.h:54
size_t hex_encode(char separator, const void *raw, size_t raw_len, char *data, size_t len)
Encode hexadecimal string (with optional byte separator character)
Definition: base16.c:51
__be32 raw[7]
Definition: CIB_PRM.h:28

References hex_encode(), len, raw, and raw_len.

◆ parse_hex_hyphen_setting()

static int parse_hex_hyphen_setting ( const struct setting_type *type  __unused,
const char *  value,
void *  buf,
size_t  len 
)
static

Parse hex string setting value (using hyphen delimiter)

Parameters
typeSetting type
valueFormatted setting value
bufBuffer to contain raw value
lenLength of buffer
sizeInteger size, in bytes
Return values
lenLength of raw value, or negative error

Definition at line 2084 of file settings.c.

2086  {
2087  return hex_decode ( '-', value, buf, len );
2088 }
pseudo_bit_t value[0x00020]
Definition: arbel.h:13
ring len
Length.
Definition: dwmac.h:231
int hex_decode(char separator, const char *encoded, void *data, size_t len)
Decode hexadecimal string (with optional byte separator character)
Definition: base16.c:77

References hex_decode(), len, and value.

◆ format_hex_hyphen_setting()

static int format_hex_hyphen_setting ( const struct setting_type *type  __unused,
const void *  raw,
size_t  raw_len,
char *  buf,
size_t  len 
)
static

Format hex string setting value (using hyphen delimiter)

Parameters
typeSetting type
rawRaw setting value
raw_lenLength of raw setting value
bufBuffer to contain formatted value
lenLength of buffer
Return values
lenLength of formatted value, or negative error

Definition at line 2100 of file settings.c.

2102  {
2103  return hex_encode ( '-', raw, raw_len, buf, len );
2104 }
ring len
Length.
Definition: dwmac.h:231
static size_t raw_len
Definition: base16.h:54
size_t hex_encode(char separator, const void *raw, size_t raw_len, char *data, size_t len)
Encode hexadecimal string (with optional byte separator character)
Definition: base16.c:51
__be32 raw[7]
Definition: CIB_PRM.h:28

References hex_encode(), len, raw, and raw_len.

◆ parse_hex_raw_setting()

static int parse_hex_raw_setting ( const struct setting_type *type  __unused,
const char *  value,
void *  buf,
size_t  len 
)
static

Parse hex string setting value (using no delimiter)

Parameters
typeSetting type
valueFormatted setting value
bufBuffer to contain raw value
lenLength of buffer
sizeInteger size, in bytes
Return values
lenLength of raw value, or negative error

Definition at line 2116 of file settings.c.

2117  {
2118  return hex_decode ( 0, value, buf, len );
2119 }
pseudo_bit_t value[0x00020]
Definition: arbel.h:13
ring len
Length.
Definition: dwmac.h:231
int hex_decode(char separator, const char *encoded, void *data, size_t len)
Decode hexadecimal string (with optional byte separator character)
Definition: base16.c:77

References hex_decode(), len, and value.

◆ format_hex_raw_setting()

static int format_hex_raw_setting ( const struct setting_type *type  __unused,
const void *  raw,
size_t  raw_len,
char *  buf,
size_t  len 
)
static

Format hex string setting value (using no delimiter)

Parameters
typeSetting type
rawRaw setting value
raw_lenLength of raw setting value
bufBuffer to contain formatted value
lenLength of buffer
Return values
lenLength of formatted value, or negative error

Definition at line 2131 of file settings.c.

2133  {
2134  return hex_encode ( 0, raw, raw_len, buf, len );
2135 }
ring len
Length.
Definition: dwmac.h:231
static size_t raw_len
Definition: base16.h:54
size_t hex_encode(char separator, const void *raw, size_t raw_len, char *data, size_t len)
Encode hexadecimal string (with optional byte separator character)
Definition: base16.c:51
__be32 raw[7]
Definition: CIB_PRM.h:28

References hex_encode(), len, raw, and raw_len.

◆ parse_base64_setting()

static int parse_base64_setting ( const struct setting_type *type  __unused,
const char *  value,
void *  buf,
size_t  len 
)
static

Parse Base64-encoded setting value.

Parameters
typeSetting type
valueFormatted setting value
bufBuffer to contain raw value
lenLength of buffer
sizeInteger size, in bytes
Return values
lenLength of raw value, or negative error

Definition at line 2168 of file settings.c.

2169  {
2170 
2171  return base64_decode ( value, buf, len );
2172 }
int base64_decode(const char *encoded, void *data, size_t len)
Base64-decode string.
Definition: base64.c:92
pseudo_bit_t value[0x00020]
Definition: arbel.h:13
ring len
Length.
Definition: dwmac.h:231

References base64_decode(), len, and value.

◆ format_base64_setting()

static int format_base64_setting ( const struct setting_type *type  __unused,
const void *  raw,
size_t  raw_len,
char *  buf,
size_t  len 
)
static

Format Base64-encoded setting value.

Parameters
typeSetting type
rawRaw setting value
raw_lenLength of raw setting value
bufBuffer to contain formatted value
lenLength of buffer
Return values
lenLength of formatted value, or negative error

Definition at line 2184 of file settings.c.

2186  {
2187 
2188  return base64_encode ( raw, raw_len, buf, len );
2189 }
ring len
Length.
Definition: dwmac.h:231
static size_t raw_len
Definition: base16.h:54
__be32 raw[7]
Definition: CIB_PRM.h:28
size_t base64_encode(const void *raw, size_t raw_len, char *data, size_t len)
Base64-encode data.
Definition: base64.c:52

References base64_encode(), len, raw, and raw_len.

◆ parse_uuid_setting()

static int parse_uuid_setting ( const struct setting_type type,
const char *  value,
void *  buf,
size_t  len 
)
static

Parse UUID/GUID setting value.

Parameters
typeSetting type
valueFormatted setting value
bufBuffer to contain raw value
lenLength of buffer
sizeInteger size, in bytes
Return values
lenLength of raw value, or negative error

Definition at line 2208 of file settings.c.

2209  {
2210  union uuid uuid;
2211  int rc;
2212 
2213  /* Parse UUID */
2214  if ( ( rc = uuid_aton ( value, &uuid ) ) != 0 )
2215  return rc;
2216 
2217  /* Mangle GUID byte ordering */
2218  if ( type == &setting_type_guid )
2219  uuid_mangle ( &uuid );
2220 
2221  /* Copy value */
2222  if ( len > sizeof ( uuid ) )
2223  len = sizeof ( uuid );
2224  memcpy ( buf, uuid.raw, len );
2225 
2226  return ( sizeof ( uuid ) );
2227 }
struct arbelprm_rc_send_wqe rc
Definition: arbel.h:14
A universally unique ID.
Definition: uuid.h:16
uint32_t type
Operating system type.
Definition: ena.h:12
static void uuid_mangle(union uuid *uuid)
Change UUID endianness.
Definition: uuid.h:44
int uuid_aton(const char *string, union uuid *uuid)
Parse UUID.
Definition: uuid.c:67
void * memcpy(void *dest, const void *src, size_t len) __nonnull
uint8_t uuid[16]
UUID.
Definition: smbios.h:23
pseudo_bit_t value[0x00020]
Definition: arbel.h:13
ring len
Length.
Definition: dwmac.h:231
uint8_t raw[16]
Definition: uuid.h:30

References len, memcpy(), uuid::raw, rc, type, uuid, uuid_aton(), uuid_mangle(), and value.

◆ format_uuid_setting()

static int format_uuid_setting ( const struct setting_type type,
const void *  raw,
size_t  raw_len,
char *  buf,
size_t  len 
)
static

Format UUID/GUID setting value.

Parameters
typeSetting type
rawRaw setting value
raw_lenLength of raw setting value
bufBuffer to contain formatted value
lenLength of buffer
Return values
lenLength of formatted value, or negative error

Definition at line 2239 of file settings.c.

2241  {
2242  union uuid uuid;
2243 
2244  /* Range check */
2245  if ( raw_len != sizeof ( uuid ) )
2246  return -ERANGE;
2247 
2248  /* Copy value */
2249  memcpy ( &uuid, raw, sizeof ( uuid ) );
2250 
2251  /* Mangle GUID byte ordering */
2252  if ( type == &setting_type_guid )
2253  uuid_mangle ( &uuid );
2254 
2255  /* Format value */
2256  return snprintf ( buf, len, "%s", uuid_ntoa ( &uuid ) );
2257 }
A universally unique ID.
Definition: uuid.h:16
uint32_t type
Operating system type.
Definition: ena.h:12
static void uuid_mangle(union uuid *uuid)
Change UUID endianness.
Definition: uuid.h:44
void * memcpy(void *dest, const void *src, size_t len) __nonnull
ring len
Length.
Definition: dwmac.h:231
static size_t raw_len
Definition: base16.h:54
#define ERANGE
Result too large.
Definition: errno.h:640
const char * uuid_ntoa(const union uuid *uuid)
Convert UUID to printable string.
Definition: uuid.c:46
__be32 raw[7]
Definition: CIB_PRM.h:28
int snprintf(char *buf, size_t size, const char *fmt,...)
Write a formatted string to a buffer.
Definition: vsprintf.c:383

References ERANGE, len, memcpy(), raw, raw_len, snprintf(), type, uuid, uuid_mangle(), and uuid_ntoa().

◆ format_busdevfn_setting()

static int format_busdevfn_setting ( const struct setting_type *type  __unused,
const void *  raw,
size_t  raw_len,
char *  buf,
size_t  len 
)
static

Format PCI bus:dev.fn setting value.

Parameters
typeSetting type
rawRaw setting value
raw_lenLength of raw setting value
bufBuffer to contain formatted value
lenLength of buffer
Return values
lenLength of formatted value, or negative error

Definition at line 2283 of file settings.c.

2285  {
2286  unsigned long busdevfn;
2287  unsigned int seg;
2288  unsigned int bus;
2289  unsigned int slot;
2290  unsigned int func;
2291  int check_len;
2292 
2293  /* Extract numeric value */
2294  check_len = numeric_setting_value ( 0, raw, raw_len, &busdevfn );
2295  if ( check_len < 0 )
2296  return check_len;
2297  assert ( check_len == ( int ) raw_len );
2298 
2299  /* Extract PCI address components */
2300  seg = PCI_SEG ( busdevfn );
2301  bus = PCI_BUS ( busdevfn );
2302  slot = PCI_SLOT ( busdevfn );
2303  func = PCI_FUNC ( busdevfn );
2304 
2305  /* Format value */
2306  return snprintf ( buf, len, "%04x:%02x:%02x.%x", seg, bus, slot, func );
2307 }
#define PCI_FUNC(busdevfn)
Definition: pci.h:286
#define PCI_BUS(busdevfn)
Definition: pci.h:284
static int numeric_setting_value(int is_signed, const void *raw, size_t len, unsigned long *value)
Extract numeric value of setting.
Definition: settings.c:967
uint16_t busdevfn
PCI bus:dev.fn address.
Definition: ena.h:28
assert((readw(&hdr->flags) &(GTF_reading|GTF_writing))==0)
ring len
Length.
Definition: dwmac.h:231
static size_t raw_len
Definition: base16.h:54
#define PCI_SLOT(busdevfn)
Definition: pci.h:285
uint8_t slot
Slot.
Definition: edd.h:17
__be32 raw[7]
Definition: CIB_PRM.h:28
int snprintf(char *buf, size_t size, const char *fmt,...)
Write a formatted string to a buffer.
Definition: vsprintf.c:383
struct golan_mkey_seg seg
Definition: CIB_PRM.h:28
#define PCI_SEG(busdevfn)
Definition: pci.h:283
uint8_t bus
Bus.
Definition: edd.h:15

References assert(), bus, busdevfn, len, numeric_setting_value(), PCI_BUS, PCI_FUNC, PCI_SEG, PCI_SLOT, raw, raw_len, seg, slot, and snprintf().

◆ expand_settings()

char* expand_settings ( const char *  string)

Expand variables within string.

Parameters
stringString
Return values
expstrExpanded string

The expanded string is allocated with malloc() and the caller must eventually free() it.

Definition at line 2331 of file settings.c.

2331  {
2332  struct settings *settings;
2333  struct setting setting;
2334  char *expstr;
2335  char *start;
2336  char *end;
2337  char *head;
2338  char *name;
2339  char *tail;
2340  char *value;
2341  char *tmp;
2342  int new_len;
2343  int rc;
2344 
2345  /* Obtain temporary modifiable copy of string */
2346  expstr = strdup ( string );
2347  if ( ! expstr )
2348  return NULL;
2349 
2350  /* Expand while expansions remain */
2351  while ( 1 ) {
2352 
2353  head = expstr;
2354 
2355  /* Locate setting to be expanded */
2356  start = NULL;
2357  end = NULL;
2358  for ( tmp = expstr ; *tmp ; tmp++ ) {
2359  if ( ( tmp[0] == '$' ) && ( tmp[1] == '{' ) )
2360  start = tmp;
2361  if ( start && ( tmp[0] == '}' ) ) {
2362  end = tmp;
2363  break;
2364  }
2365  }
2366  if ( ! end )
2367  break;
2368  *start = '\0';
2369  name = ( start + 2 );
2370  *end = '\0';
2371  tail = ( end + 1 );
2372 
2373  /* Expand setting */
2375  &settings,
2376  &setting ) ) != 0 ) {
2377  /* Treat invalid setting names as empty */
2378  value = NULL;
2379  } else {
2380  /* Fetch and format setting value. Ignore
2381  * errors; treat non-existent settings as empty.
2382  */
2384  &value );
2385  }
2386 
2387  /* Construct expanded string and discard old string */
2388  tmp = expstr;
2389  new_len = asprintf ( &expstr, "%s%s%s",
2390  head, ( value ? value : "" ), tail );
2391  free ( value );
2392  free ( tmp );
2393  if ( new_len < 0 )
2394  return NULL;
2395  }
2396 
2397  return expstr;
2398 }
struct arbelprm_rc_send_wqe rc
Definition: arbel.h:14
const char * name
Definition: ath9k_hw.c:1986
int fetchf_setting_copy(struct settings *settings, const struct setting *setting, struct settings **origin, struct setting *fetched, char **value)
Fetch copy of formatted value of setting.
Definition: settings.c:1277
uint8_t head
Head number.
Definition: int13.h:34
uint32_t start
Starting offset.
Definition: netvsc.h:12
unsigned long tmp
Definition: linux_pci.h:65
pseudo_bit_t value[0x00020]
Definition: arbel.h:13
static void(* free)(struct refcnt *refcnt))
Definition: refcnt.h:55
int asprintf(char **strp, const char *fmt,...)
Write a formatted string to newly allocated memory.
Definition: asprintf.c:42
char * strdup(const char *src)
Duplicate string.
Definition: string.c:394
A settings block.
Definition: settings.h:133
A setting.
Definition: settings.h:24
uint32_t end
Ending offset.
Definition: netvsc.h:18
struct settings * find_child_settings(struct settings *parent, const char *name)
Find child settings block.
Definition: settings.c:280
#define NULL
NULL pointer (VOID *)
Definition: Base.h:322
int parse_setting_name(char *name, get_child_settings_t get_child, struct settings **settings, struct setting *setting)
Parse setting name.
Definition: settings.c:1529

References asprintf(), end, fetchf_setting_copy(), find_child_settings(), free, head, name, NULL, parse_setting_name(), rc, generic_setting::setting, start, strdup(), tmp, and value.

Referenced by expand_tokens(), fetch_next_server_and_filename(), fetch_root_path(), and fetch_san_filename().

◆ __setting() [1/18]

const struct setting hostname_setting __setting ( SETTING_HOST  ,
hostname   
)

Hostname setting.

◆ __setting() [2/18]

const struct setting domain_setting __setting ( SETTING_IP_EXTRA  ,
domain   
)

Domain name setting.

◆ __setting() [3/18]

const struct setting next_server_setting __setting ( SETTING_BOOT  ,
next server 
)

TFTP server setting.

◆ __setting() [4/18]

const struct setting filename_setting __setting ( SETTING_BOOT  ,
filename   
)

Filename setting.

◆ __setting() [5/18]

const struct setting root_path_setting __setting ( SETTING_SANBOOT  ,
root path 
)

Root path setting.

◆ __setting() [6/18]

const struct setting san_filename_setting __setting ( SETTING_SANBOOT  ,
san-  filename 
)

SAN filename setting.

◆ __setting() [7/18]

const struct setting username_setting __setting ( SETTING_AUTH  ,
username   
)

Username setting.

◆ __setting() [8/18]

const struct setting password_setting __setting ( SETTING_AUTH  ,
password   
)

Password setting.

◆ __setting() [9/18]

const struct setting priority_setting __setting ( SETTING_MISC  ,
priority   
)

Priority setting.

◆ __setting() [10/18]

const struct setting user_class_setting __setting ( SETTING_HOST_EXTRA  ,
user-  class 
)

DHCP user class setting.

◆ __setting() [11/18]

const struct setting vendor_class_setting __setting ( SETTING_HOST_EXTRA  ,
vendor class 
)

DHCP vendor class setting.

◆ errno_fetch()

static int errno_fetch ( void *  data,
size_t  len 
)
static

Fetch error number setting.

Parameters
dataBuffer to fill with setting data
lenLength of buffer
Return values
lenLength of setting data, or negative error

Definition at line 2515 of file settings.c.

2515  {
2516  uint32_t content;
2517 
2518  /* Return current error */
2519  content = htonl ( errno );
2520  if ( len > sizeof ( content ) )
2521  len = sizeof ( content );
2522  memcpy ( data, &content, len );
2523  return sizeof ( content );
2524 }
#define htonl(value)
Definition: byteswap.h:134
void * memcpy(void *dest, const void *src, size_t len) __nonnull
int errno
Global "last error" number.
Definition: errno.c:21
ring len
Length.
Definition: dwmac.h:231
unsigned int uint32_t
Definition: stdint.h:12
uint8_t data[48]
Additional event data.
Definition: ena.h:22

References data, errno, htonl, len, and memcpy().

◆ __setting() [12/18]

const struct setting errno_setting __setting ( SETTING_MISC  ,
errno   
)

Error number setting.

◆ buildarch_fetch()

static int buildarch_fetch ( void *  data,
size_t  len 
)
static

Fetch build architecture setting.

Parameters
dataBuffer to fill with setting data
lenLength of buffer
Return values
lenLength of setting data, or negative error

Definition at line 2547 of file settings.c.

2547  {
2548  static const char buildarch[] = _S2 ( ARCH );
2549 
2550  strncpy ( data, buildarch, len );
2551  return ( sizeof ( buildarch ) - 1 /* NUL */ );
2552 }
#define _S2(x)
Stringify expanded argument.
Definition: compiler.h:53
char * strncpy(char *dest, const char *src, size_t max)
Copy string.
Definition: string.c:361
ring len
Length.
Definition: dwmac.h:231
uint8_t data[48]
Additional event data.
Definition: ena.h:22

References _S2, data, len, and strncpy().

◆ __setting() [13/18]

const struct setting buildarch_setting __setting ( SETTING_MISC  ,
buildarch   
)

Build architecture setting.

◆ platform_fetch()

static int platform_fetch ( void *  data,
size_t  len 
)
static

Fetch platform setting.

Parameters
dataBuffer to fill with setting data
lenLength of buffer
Return values
lenLength of setting data, or negative error

Definition at line 2575 of file settings.c.

2575  {
2576  static const char platform[] = _S2 ( PLATFORM );
2577 
2578  strncpy ( data, platform, len );
2579  return ( sizeof ( platform ) - 1 /* NUL */ );
2580 }
#define _S2(x)
Stringify expanded argument.
Definition: compiler.h:53
char * strncpy(char *dest, const char *src, size_t max)
Copy string.
Definition: string.c:361
ring len
Length.
Definition: dwmac.h:231
uint8_t data[48]
Additional event data.
Definition: ena.h:22

References _S2, data, len, and strncpy().

◆ __setting() [14/18]

const struct setting platform_setting __setting ( SETTING_MISC  ,
platform   
)

Platform setting.

◆ version_fetch()

static int version_fetch ( void *  data,
size_t  len 
)
static

Fetch version setting.

Parameters
dataBuffer to fill with setting data
lenLength of buffer
Return values
lenLength of setting data, or negative error

Definition at line 2603 of file settings.c.

2603  {
2605  return ( strlen ( product_version ) );
2606 }
char * strncpy(char *dest, const char *src, size_t max)
Copy string.
Definition: string.c:361
ring len
Length.
Definition: dwmac.h:231
size_t strlen(const char *src)
Get length of string.
Definition: string.c:244
const char product_version[]
Product version string.
Definition: version.c:71
uint8_t data[48]
Additional event data.
Definition: ena.h:22

References data, len, product_version, strlen(), and strncpy().

◆ __setting() [15/18]

const struct setting version_setting __setting ( SETTING_MISC  ,
version   
)

Version setting.

◆ unixtime_fetch()

static int unixtime_fetch ( void *  data,
size_t  len 
)
static

Fetch current time setting.

Parameters
dataBuffer to fill with setting data
lenLength of buffer
Return values
lenLength of setting data, or negative error

Definition at line 2629 of file settings.c.

2629  {
2630  uint32_t content;
2631 
2632  /* Return current time */
2633  content = htonl ( time(NULL) );
2634  if ( len > sizeof ( content ) )
2635  len = sizeof ( content );
2636  memcpy ( data, &content, len );
2637  return sizeof ( content );
2638 }
#define htonl(value)
Definition: byteswap.h:134
void * memcpy(void *dest, const void *src, size_t len) __nonnull
ring len
Length.
Definition: dwmac.h:231
unsigned int uint32_t
Definition: stdint.h:12
uint8_t data[48]
Additional event data.
Definition: ena.h:22
#define NULL
NULL pointer (VOID *)
Definition: Base.h:322

References data, htonl, len, memcpy(), and NULL.

◆ __setting() [16/18]

const struct setting unixtime_setting __setting ( SETTING_MISC  ,
unixtime   
)

Current time setting.

◆ cwuri_fetch_uri()

static int cwuri_fetch_uri ( void *  data,
size_t  len,
const char *  rel 
)
static

Fetch current working URI-related setting.

Parameters
dataBuffer to fill with setting data
lenLength of buffer
relRelative URI string
Return values
lenLength of setting data, or negative error

Definition at line 2662 of file settings.c.

2662  {
2663  struct uri *reluri;
2664  struct uri *uri;
2665  char *uristring;
2666  int ret;
2667 
2668  /* Check that current working URI is set */
2669  if ( ! cwuri ) {
2670  ret = -ENOENT;
2671  goto err_unset;
2672  }
2673 
2674  /* Construct relative URI */
2675  reluri = parse_uri ( rel );
2676  if ( ! reluri ) {
2677  ret = -ENOMEM;
2678  goto err_parse;
2679  }
2680 
2681  /* Construct resolved URI */
2682  uri = resolve_uri ( cwuri, reluri );
2683  if ( ! uri ) {
2684  ret = -ENOMEM;
2685  goto err_resolve;
2686  }
2687 
2688  /* Format URI string into allocated buffer (with NUL) */
2689  uristring = format_uri_alloc ( uri );
2690  if ( ! uristring ) {
2691  ret = -ENOMEM;
2692  goto err_format;
2693  }
2694 
2695  /* Copy URI string to buffer */
2696  strncpy ( data, uristring, len );
2697  ret = strlen ( uristring );
2698 
2699  free ( uristring );
2700  err_format:
2701  uri_put ( uri );
2702  err_resolve:
2703  uri_put ( reluri );
2704  err_parse:
2705  err_unset:
2706  return ret;
2707 }
static void uri_put(struct uri *uri)
Decrement URI reference count.
Definition: uri.h:206
#define ENOENT
No such file or directory.
Definition: errno.h:515
char * strncpy(char *dest, const char *src, size_t max)
Copy string.
Definition: string.c:361
#define ENOMEM
Not enough space.
Definition: errno.h:535
ring len
Length.
Definition: dwmac.h:231
char * format_uri_alloc(const struct uri *uri)
Format URI.
Definition: uri.c:541
static void(* free)(struct refcnt *refcnt))
Definition: refcnt.h:55
size_t strlen(const char *src)
Get length of string.
Definition: string.c:244
uint8_t data[48]
Additional event data.
Definition: ena.h:22
A Uniform Resource Identifier.
Definition: uri.h:65
struct uri * resolve_uri(const struct uri *base_uri, struct uri *relative_uri)
Resolve base+relative URI.
Definition: uri.c:695
struct uri * cwuri
Current working URI.
Definition: cwuri.c:39
struct uri * parse_uri(const char *uri_string)
Parse URI.
Definition: uri.c:297

References cwuri, data, ENOENT, ENOMEM, format_uri_alloc(), free, len, parse_uri(), resolve_uri(), strlen(), strncpy(), and uri_put().

Referenced by cwduri_fetch(), and cwuri_fetch().

◆ cwuri_fetch()

static int cwuri_fetch ( void *  data,
size_t  len 
)
static

Fetch current working URI setting.

Parameters
dataBuffer to fill with setting data
lenLength of buffer
Return values
lenLength of setting data, or negative error

Definition at line 2716 of file settings.c.

2716  {
2717 
2718  return cwuri_fetch_uri ( data, len, "" );
2719 }
ring len
Length.
Definition: dwmac.h:231
static int cwuri_fetch_uri(void *data, size_t len, const char *rel)
Fetch current working URI-related setting.
Definition: settings.c:2662
uint8_t data[48]
Additional event data.
Definition: ena.h:22

References cwuri_fetch_uri(), data, and len.

◆ cwduri_fetch()

static int cwduri_fetch ( void *  data,
size_t  len 
)
static

Fetch current working directory URI setting.

Parameters
dataBuffer to fill with setting data
lenLength of buffer
Return values
lenLength of setting data, or negative error

Definition at line 2728 of file settings.c.

2728  {
2729 
2730  return cwuri_fetch_uri ( data, len, "." );
2731 }
ring len
Length.
Definition: dwmac.h:231
static int cwuri_fetch_uri(void *data, size_t len, const char *rel)
Fetch current working URI-related setting.
Definition: settings.c:2662
uint8_t data[48]
Additional event data.
Definition: ena.h:22

References cwuri_fetch_uri(), data, and len.

◆ __setting() [17/18]

const struct setting cwuri_setting __setting ( SETTING_MISC  ,
cwuri   
)

Current working URI setting.

◆ __setting() [18/18]

const struct setting cwduri_setting __setting ( SETTING_MISC  ,
cwduri   
)

Current working directory URI setting.

◆ builtin_fetch()

static int builtin_fetch ( struct settings *settings  __unused,
struct setting setting,
void *  data,
size_t  len 
)
static

Fetch built-in setting.

Parameters
settingsSettings block
settingSetting to fetch
dataBuffer to fill with setting data
lenLength of buffer
Return values
lenLength of setting data, or negative error

Definition at line 2770 of file settings.c.

2772  {
2773  struct builtin_setting *builtin;
2774 
2775  for_each_table_entry ( builtin, BUILTIN_SETTINGS ) {
2776  if ( setting_cmp ( setting, builtin->setting ) == 0 )
2777  return builtin->fetch ( data, len );
2778  }
2779  return -ENOENT;
2780 }
#define ENOENT
No such file or directory.
Definition: errno.h:515
int(* fetch)(void *data, size_t len)
Fetch setting value.
Definition: settings.h:277
const struct setting * setting
Setting.
Definition: settings.h:270
ring len
Length.
Definition: dwmac.h:231
#define for_each_table_entry(pointer, table)
Iterate through all entries within a linker table.
Definition: tables.h:386
A built-in setting.
Definition: settings.h:268
A setting.
Definition: settings.h:24
uint8_t data[48]
Additional event data.
Definition: ena.h:22
int setting_cmp(const struct setting *a, const struct setting *b)
Compare two settings.
Definition: settings.c:1121
#define BUILTIN_SETTINGS
Built-in settings table.
Definition: settings.h:281

References BUILTIN_SETTINGS, data, ENOENT, builtin_setting::fetch, for_each_table_entry, len, builtin_setting::setting, and setting_cmp().

◆ builtin_applies()

static int builtin_applies ( struct settings *settings  __unused,
const struct setting setting 
)
static

Check applicability of built-in setting.

Parameters
settingsSettings block
settingSetting
Return values
appliesSetting applies within this settings block

Definition at line 2789 of file settings.c.

2790  {
2791 
2792  return ( setting->scope == &builtin_scope );
2793 }
A setting.
Definition: settings.h:24
const struct settings_scope builtin_scope
Built-in setting scope.
Definition: settings.c:2506
const struct settings_scope * scope
Setting scope (or NULL)
Definition: settings.h:50

References builtin_scope, and setting::scope.

◆ builtin_init()

static void builtin_init ( void  )
static

Initialise built-in settings.

Definition at line 2810 of file settings.c.

2810  {
2811  int rc;
2812 
2814  "builtin" ) ) != 0 ) {
2815  DBG ( "Could not register built-in settings: %s\n",
2816  strerror ( rc ) );
2817  return;
2818  }
2819 }
struct arbelprm_rc_send_wqe rc
Definition: arbel.h:14
static struct settings builtin_settings
Built-in settings.
Definition: settings.c:2802
char * strerror(int errno)
Retrieve string representation of error number.
Definition: strerror.c:79
int register_settings(struct settings *settings, struct settings *parent, const char *name)
Register settings block.
Definition: settings.c:476
#define DBG(...)
Print a debugging message.
Definition: compiler.h:498
#define NULL
NULL pointer (VOID *)
Definition: Base.h:322

References builtin_settings, DBG, NULL, rc, register_settings(), and strerror().

◆ __init_fn()

struct init_fn builtin_init_fn __init_fn ( INIT_NORMAL  )

Built-in settings initialiser.

Variable Documentation

◆ generic_settings_operations

struct settings_operations generic_settings_operations
Initial value:
= {
}
void generic_settings_clear(struct settings *settings)
Clear generic settings block.
Definition: settings.c:208
int generic_settings_fetch(struct settings *settings, struct setting *setting, void *data, size_t len)
Fetch value of generic setting.
Definition: settings.c:179
int generic_settings_store(struct settings *settings, const struct setting *setting, const void *data, size_t len)
Store value of generic setting.
Definition: settings.c:127

Generic settings operations.

Definition at line 222 of file settings.c.

Referenced by generic_settings_init().

◆ generic_settings_root

struct generic_settings generic_settings_root
Initial value:
= {
.settings = {
.refcnt = NULL,
.name = "",
.siblings =
.children =
},
}
struct settings_operations generic_settings_operations
Generic settings operations.
Definition: settings.c:222
struct list_head list
List of generic settings.
Definition: settings.h:303
struct generic_settings generic_settings_root
Root generic settings block.
Definition: settings.c:236
struct list_head siblings
Sibling settings blocks.
Definition: settings.h:141
struct settings settings
Settings block.
Definition: settings.h:301
struct list_head children
Child settings blocks.
Definition: settings.h:143
#define LIST_HEAD_INIT(list)
Initialise a static list head.
Definition: list.h:31
#define NULL
NULL pointer (VOID *)
Definition: Base.h:322

Root generic settings block.

Definition at line 236 of file settings.c.

◆ __setting_type

const struct setting_type setting_type_busdevfn __setting_type
Initial value:
= {
.name = "string",
}
static int format_string_setting(const struct setting_type *type __unused, const void *raw, size_t raw_len, char *buf, size_t len)
Format string setting value.
Definition: settings.c:1655
static int parse_string_setting(const struct setting_type *type __unused, const char *value, void *buf, size_t len)
Parse string setting value.
Definition: settings.c:1633

A string setting type.

PCI bus:dev.fn setting type.

GUID setting type.

UUID setting type.

A Base64-encoded setting.

A hex-string setting (non-delimited)

A hex-string setting (hyphen-delimited)

A hex-string setting (colon-delimited)

An unsigned 32-bit integer setting type.

An unsigned 16-bit integer setting type.

An unsigned 8-bit integer setting type.

A signed 32-bit integer setting type.

A signed 16-bit integer setting type.

A signed 8-bit integer setting type.

An IPv6 address setting type.

An IPv4 address setting type.

A URI-encoded string setting type.

Definition at line 1669 of file settings.c.

◆ dhcpv6_scope

const struct settings_scope dhcpv6_scope

IPv6 settings scope.

DHCPv6 setting scope.

Definition at line 1793 of file settings.c.

Referenced by dhcpv6_applies(), and dhcpv6_register().

◆ setting_type_int_name

const char setting_type_int_name[][8]
static
Initial value:

Integer setting type names.

These names exist as a static array in order to allow the type's integer size and signedness to be determined from the type's name. Note that there are no separate entries for the signed integer types: the name pointers simply point to the second character of the relevant string.

Definition at line 1816 of file settings.c.

Referenced by setting_type_int_index(), and setting_type_int_is_signed().

◆ builtin_scope

const struct settings_scope builtin_scope

Built-in setting scope.

Definition at line 2506 of file settings.c.

Referenced by builtin_applies().

◆ __builtin_setting

struct builtin_setting cwduri_builtin_setting __builtin_setting
Initial value:
= {
.setting = &errno_setting,
.fetch = errno_fetch,
}
static int errno_fetch(void *data, size_t len)
Fetch error number setting.
Definition: settings.c:2515

Error number built-in setting.

Current working directory URI built-in setting.

Current working URI built-in setting.

Current time built-in setting.

Version built-in setting.

Platform built-in setting.

Build architecture built-in setting.

Definition at line 2535 of file settings.c.

◆ builtin_settings_operations

struct settings_operations builtin_settings_operations
static
Initial value:
= {
.applies = builtin_applies,
.fetch = builtin_fetch,
}
static int builtin_applies(struct settings *settings __unused, const struct setting *setting)
Check applicability of built-in setting.
Definition: settings.c:2789
static int builtin_fetch(struct settings *settings __unused, struct setting *setting, void *data, size_t len)
Fetch built-in setting.
Definition: settings.c:2770

Built-in settings operations.

Definition at line 2796 of file settings.c.

◆ builtin_settings

struct settings builtin_settings
static
Initial value:
= {
.refcnt = NULL,
}
static struct settings_operations builtin_settings_operations
Built-in settings operations.
Definition: settings.c:2796
static struct settings builtin_settings
Built-in settings.
Definition: settings.c:2802
struct list_head siblings
Sibling settings blocks.
Definition: settings.h:141
struct list_head children
Child settings blocks.
Definition: settings.h:143
#define LIST_HEAD_INIT(list)
Initialise a static list head.
Definition: list.h:31
#define NULL
NULL pointer (VOID *)
Definition: Base.h:322

Built-in settings.

Definition at line 2802 of file settings.c.

Referenced by builtin_init().