diff options
Diffstat (limited to 'src/include')
| -rw-r--r-- | src/include/ipxe/net80211.h | 2 | ||||
| -rw-r--r-- | src/include/ipxe/nvo.h | 3 | ||||
| -rw-r--r-- | src/include/ipxe/settings.h | 180 |
3 files changed, 102 insertions, 83 deletions
diff --git a/src/include/ipxe/net80211.h b/src/include/ipxe/net80211.h index dd8bd2288..d752382ad 100644 --- a/src/include/ipxe/net80211.h +++ b/src/include/ipxe/net80211.h @@ -1093,7 +1093,7 @@ struct net80211_wlan /** 802.11 encryption key setting */ -extern struct setting net80211_key_setting __setting ( SETTING_NETDEV_EXTRA ); +extern const struct setting net80211_key_setting __setting ( SETTING_NETDEV_EXTRA ); /** diff --git a/src/include/ipxe/nvo.h b/src/include/ipxe/nvo.h index 487f8b3f2..1a629da78 100644 --- a/src/include/ipxe/nvo.h +++ b/src/include/ipxe/nvo.h @@ -45,7 +45,8 @@ struct nvo_block { /** Name of non-volatile options settings block */ #define NVO_SETTINGS_NAME "nvo" -extern int nvo_applies ( struct settings *settings, struct setting *setting ); +extern int nvo_applies ( struct settings *settings, + const struct setting *setting ); extern void nvo_init ( struct nvo_block *nvo, struct nvs_device *nvs, size_t address, size_t len, int ( * resize ) ( struct nvo_block *nvo, size_t len ), diff --git a/src/include/ipxe/settings.h b/src/include/ipxe/settings.h index a6dfd2102..25665ca78 100644 --- a/src/include/ipxe/settings.h +++ b/src/include/ipxe/settings.h @@ -32,7 +32,7 @@ struct setting { * This identifies the type of setting (e.g. string, IPv4 * address, etc.). */ - struct setting_type *type; + const struct setting_type *type; /** Setting tag, if applicable * * The setting tag is a numerical description of the setting @@ -45,7 +45,7 @@ struct setting { * For historic reasons, a NULL scope with a non-zero tag * indicates a DHCPv4 option setting. */ - struct settings_scope *scope; + const struct settings_scope *scope; }; /** Configuration setting table */ @@ -90,7 +90,7 @@ struct settings_operations { * @ret applies Setting applies within this settings block */ int ( * applies ) ( struct settings *settings, - struct setting *setting ); + const struct setting *setting ); /** Store value of setting * * @v settings Settings block @@ -99,7 +99,8 @@ struct settings_operations { * @v len Length of setting data * @ret rc Return status code */ - int ( * store ) ( struct settings *settings, struct setting *setting, + int ( * store ) ( struct settings *settings, + const struct setting *setting, const void *data, size_t len ); /** Fetch value of setting * @@ -136,7 +137,7 @@ struct settings { /** Settings block operations */ struct settings_operations *op; /** Default scope for numerical settings constructed for this block */ - struct settings_scope *default_scope; + const struct settings_scope *default_scope; }; /** @@ -193,7 +194,7 @@ struct setting_type { * @v len Length of buffer * @ret len Length of raw value, or negative error */ - int ( * parse ) ( struct setting_type *type, const char *value, + int ( * parse ) ( const struct setting_type *type, const char *value, void *buf, size_t len ); /** Format setting value as a string * @@ -204,7 +205,7 @@ struct setting_type { * @v len Length of buffer * @ret len Length of formatted value, or negative error */ - int ( * format ) ( struct setting_type *type, const void *raw, + int ( * format ) ( const struct setting_type *type, const void *raw, size_t raw_len, char *buf, size_t len ); /** Convert number to setting value * @@ -214,7 +215,8 @@ struct setting_type { * @v len Length of buffer * @ret len Length of raw value, or negative error */ - int ( * denumerate ) ( struct setting_type *type, unsigned long value, + int ( * denumerate ) ( const struct setting_type *type, + unsigned long value, void *buf, size_t len ); /** Convert setting value to number * @@ -224,7 +226,7 @@ struct setting_type { * @v value Numeric value to fill in * @ret rc Return status code */ - int ( * numerate ) ( struct setting_type *type, const void *raw, + int ( * numerate ) ( const struct setting_type *type, const void *raw, size_t raw_len, unsigned long *value ); }; @@ -256,7 +258,7 @@ struct settings_applicator { /** A built-in setting */ struct builtin_setting { /** Setting */ - struct setting *setting; + const struct setting *setting; /** Fetch setting value * * @v data Buffer to fill with setting data @@ -273,7 +275,7 @@ struct builtin_setting { #define __builtin_setting __table_entry ( BUILTIN_SETTINGS, 01 ) /** Built-in setting scope */ -extern struct settings_scope builtin_scope; +extern const struct settings_scope builtin_scope; /** * A generic settings block @@ -291,7 +293,7 @@ typedef struct settings * ( *get_child_settings_t ) ( struct settings *settings, const char *name ); extern struct settings_operations generic_settings_operations; extern int generic_settings_store ( struct settings *settings, - struct setting *setting, + const struct setting *setting, const void *data, size_t len ); extern int generic_settings_fetch ( struct settings *settings, struct setting *setting, @@ -304,42 +306,50 @@ extern void unregister_settings ( struct settings *settings ); extern struct settings * settings_target ( struct settings *settings ); extern int setting_applies ( struct settings *settings, - struct setting *setting ); -extern int store_setting ( struct settings *settings, struct setting *setting, + const struct setting *setting ); +extern int store_setting ( struct settings *settings, + const struct setting *setting, const void *data, size_t len ); -extern int fetch_setting ( struct settings *settings, struct setting *setting, +extern int fetch_setting ( struct settings *settings, + const struct setting *setting, + struct settings **origin, struct setting *fetched, void *data, size_t len ); -extern struct settings * fetch_setting_origin ( struct settings *settings, - struct setting *setting ); -extern int fetch_setting_len ( struct settings *settings, - struct setting *setting ); extern int fetch_setting_copy ( struct settings *settings, - struct setting *setting, void **data ); + const struct setting *setting, + struct settings **origin, + struct setting *fetched, void **data ); +extern int fetch_raw_setting ( struct settings *settings, + const struct setting *setting, + void *data, size_t len ); +extern int fetch_raw_setting_copy ( struct settings *settings, + const struct setting *setting, + void **data ); extern int fetch_string_setting ( struct settings *settings, - struct setting *setting, + const struct setting *setting, char *data, size_t len ); extern int fetch_string_setting_copy ( struct settings *settings, - struct setting *setting, + const struct setting *setting, char **data ); extern int fetch_ipv4_array_setting ( struct settings *settings, - struct setting *setting, - struct in_addr *inp, - unsigned int count ); + const struct setting *setting, + struct in_addr *inp, unsigned int count ); extern int fetch_ipv4_setting ( struct settings *settings, - struct setting *setting, struct in_addr *inp ); + const struct setting *setting, + struct in_addr *inp ); extern int fetch_int_setting ( struct settings *settings, - struct setting *setting, long *value ); + const struct setting *setting, long *value ); extern int fetch_uint_setting ( struct settings *settings, - struct setting *setting, + const struct setting *setting, unsigned long *value ); extern long fetch_intz_setting ( struct settings *settings, - struct setting *setting ); + const struct setting *setting ); extern unsigned long fetch_uintz_setting ( struct settings *settings, - struct setting *setting ); + const struct setting *setting ); extern int fetch_uuid_setting ( struct settings *settings, - struct setting *setting, union uuid *uuid ); + const struct setting *setting, + union uuid *uuid ); extern void clear_settings ( struct settings *settings ); -extern int setting_cmp ( struct setting *a, struct setting *b ); +extern int setting_cmp ( const struct setting *a, const struct setting *b ); extern struct settings * find_child_settings ( struct settings *parent, const char *name ); @@ -351,61 +361,68 @@ extern struct setting * find_setting ( const char *name ); extern int parse_setting_name ( char *name, get_child_settings_t get_child, struct settings **settings, struct setting *setting ); -extern int setting_name ( struct settings *settings, struct setting *setting, +extern int setting_name ( struct settings *settings, + const struct setting *setting, char *buf, size_t len ); -extern int setting_format ( struct setting_type *type, const void *raw, +extern int setting_format ( const struct setting_type *type, const void *raw, size_t raw_len, char *buf, size_t len ); -extern int setting_parse ( struct setting_type *type, const char *value, +extern int setting_parse ( const struct setting_type *type, const char *value, void *buf, size_t len ); -extern int setting_numerate ( struct setting_type *type, const void *raw, +extern int setting_numerate ( const struct setting_type *type, const void *raw, size_t raw_len, unsigned long *value ); -extern int setting_denumerate ( struct setting_type *type, unsigned long value, - void *buf, size_t len ); -extern int fetchf_setting ( struct settings *settings, struct setting *setting, +extern int setting_denumerate ( const struct setting_type *type, + unsigned long value, void *buf, size_t len ); +extern int fetchf_setting ( struct settings *settings, + const struct setting *setting, + struct settings **origin, struct setting *fetched, char *buf, size_t len ); extern int fetchf_setting_copy ( struct settings *settings, - struct setting *setting, char **value ); + const struct setting *setting, + struct settings **origin, + struct setting *fetched, char **value ); extern int storef_setting ( struct settings *settings, - struct setting *setting, - const char *value ); -extern int fetchn_setting ( struct settings *settings, struct setting *setting, + const struct setting *setting, const char *value ); +extern int fetchn_setting ( struct settings *settings, + const struct setting *setting, + struct settings **origin, struct setting *fetched, unsigned long *value ); -extern int storen_setting ( struct settings *settings, struct setting *setting, +extern int storen_setting ( struct settings *settings, + const struct setting *setting, unsigned long value ); extern char * expand_settings ( const char *string ); -extern struct setting_type setting_type_string __setting_type; -extern struct setting_type setting_type_uristring __setting_type; -extern struct setting_type setting_type_ipv4 __setting_type; -extern struct setting_type setting_type_ipv6 __setting_type; -extern struct setting_type setting_type_int8 __setting_type; -extern struct setting_type setting_type_int16 __setting_type; -extern struct setting_type setting_type_int32 __setting_type; -extern struct setting_type setting_type_uint8 __setting_type; -extern struct setting_type setting_type_uint16 __setting_type; -extern struct setting_type setting_type_uint32 __setting_type; -extern struct setting_type setting_type_hex __setting_type; -extern struct setting_type setting_type_hexhyp __setting_type; -extern struct setting_type setting_type_hexraw __setting_type; -extern struct setting_type setting_type_uuid __setting_type; -extern struct setting_type setting_type_busdevfn __setting_type; - -extern struct setting ip_setting __setting ( SETTING_IPv4 ); -extern struct setting netmask_setting __setting ( SETTING_IPv4 ); -extern struct setting gateway_setting __setting ( SETTING_IPv4 ); -extern struct setting dns_setting __setting ( SETTING_IPv4_EXTRA ); -extern struct setting hostname_setting __setting ( SETTING_HOST ); -extern struct setting domain_setting __setting ( SETTING_IPv4_EXTRA ); -extern struct setting filename_setting __setting ( SETTING_BOOT ); -extern struct setting root_path_setting __setting ( SETTING_SANBOOT ); -extern struct setting username_setting __setting ( SETTING_AUTH ); -extern struct setting password_setting __setting ( SETTING_AUTH ); -extern struct setting priority_setting __setting ( SETTING_MISC ); -extern struct setting uuid_setting __setting ( SETTING_HOST ); -extern struct setting next_server_setting __setting ( SETTING_BOOT ); -extern struct setting mac_setting __setting ( SETTING_NETDEV ); -extern struct setting busid_setting __setting ( SETTING_NETDEV ); -extern struct setting user_class_setting __setting ( SETTING_HOST_EXTRA ); +extern const struct setting_type setting_type_string __setting_type; +extern const struct setting_type setting_type_uristring __setting_type; +extern const struct setting_type setting_type_ipv4 __setting_type; +extern const struct setting_type setting_type_ipv6 __setting_type; +extern const struct setting_type setting_type_int8 __setting_type; +extern const struct setting_type setting_type_int16 __setting_type; +extern const struct setting_type setting_type_int32 __setting_type; +extern const struct setting_type setting_type_uint8 __setting_type; +extern const struct setting_type setting_type_uint16 __setting_type; +extern const struct setting_type setting_type_uint32 __setting_type; +extern const struct setting_type setting_type_hex __setting_type; +extern const struct setting_type setting_type_hexhyp __setting_type; +extern const struct setting_type setting_type_hexraw __setting_type; +extern const struct setting_type setting_type_uuid __setting_type; +extern const struct setting_type setting_type_busdevfn __setting_type; + +extern const struct setting ip_setting __setting ( SETTING_IPv4 ); +extern const struct setting netmask_setting __setting ( SETTING_IPv4 ); +extern const struct setting gateway_setting __setting ( SETTING_IPv4 ); +extern const struct setting dns_setting __setting ( SETTING_IPv4_EXTRA ); +extern const struct setting hostname_setting __setting ( SETTING_HOST ); +extern const struct setting domain_setting __setting ( SETTING_IPv4_EXTRA ); +extern const struct setting filename_setting __setting ( SETTING_BOOT ); +extern const struct setting root_path_setting __setting ( SETTING_SANBOOT ); +extern const struct setting username_setting __setting ( SETTING_AUTH ); +extern const struct setting password_setting __setting ( SETTING_AUTH ); +extern const struct setting priority_setting __setting ( SETTING_MISC ); +extern const struct setting uuid_setting __setting ( SETTING_HOST ); +extern const struct setting next_server_setting __setting ( SETTING_BOOT ); +extern const struct setting mac_setting __setting ( SETTING_NETDEV ); +extern const struct setting busid_setting __setting ( SETTING_NETDEV ); +extern const struct setting user_class_setting __setting ( SETTING_HOST_EXTRA ); /** * Initialise a settings block @@ -418,7 +435,7 @@ extern struct setting user_class_setting __setting ( SETTING_HOST_EXTRA ); static inline void settings_init ( struct settings *settings, struct settings_operations *op, struct refcnt *refcnt, - struct settings_scope *default_scope ) { + const struct settings_scope *default_scope ){ INIT_LIST_HEAD ( &settings->siblings ); INIT_LIST_HEAD ( &settings->children ); settings->op = op; @@ -447,20 +464,21 @@ static inline void generic_settings_init ( struct generic_settings *generics, * @ret rc Return status code */ static inline int delete_setting ( struct settings *settings, - struct setting *setting ) { + const struct setting *setting ) { return store_setting ( settings, setting, NULL, 0 ); } /** - * Check existence of setting + * Check existence of predefined setting * * @v settings Settings block, or NULL to search all blocks * @v setting Setting to fetch * @ret exists Setting exists */ static inline int setting_exists ( struct settings *settings, - struct setting *setting ) { - return ( fetch_setting_len ( settings, setting ) >= 0 ); + const struct setting *setting ) { + return ( fetch_setting ( settings, setting, NULL, NULL, + NULL, 0 ) >= 0 ); } #endif /* _IPXE_SETTINGS_H */ |
