Add string configuration type
[people/dverkamp/gpxe.git] / src / include / gpxe / settings.h
1 #ifndef _GPXE_SETTINGS_H
2 #define _GPXE_SETTINGS_H
3
4 /** @file
5  *
6  * Configuration settings
7  *
8  */
9
10 #include <stdint.h>
11 #include <gpxe/dhcp.h>
12 #include <gpxe/tables.h>
13
14 struct config_setting;
15
16 /**
17  * A configuration context
18  *
19  * This identifies the context within which settings are inspected and
20  * changed.  For example, the context might be global, or might be
21  * restricted to the settings stored in NVS on a particular device.
22  */
23 struct config_context {
24         /** DHCP options block, or NULL
25          *
26          * If NULL, all registered DHCP options blocks will be used.
27          */
28         struct dhcp_option_block *options;
29 };
30
31 /**
32  * A configuration setting type
33  *
34  * This represents a type of configuration setting (e.g. string, IPv4
35  * address, etc.).
36  */
37 struct config_setting_type {
38         /** Name
39          *
40          * This is the name exposed to the user (e.g. "string").
41          */
42         const char *name;
43         /** Show value of setting
44          *
45          * @v context           Configuration context
46          * @v setting           Configuration setting
47          * @v buf               Buffer to contain value
48          * @v len               Length of buffer
49          * @ret rc              Return status code
50          */
51         int ( * show ) ( struct config_context *context,
52                          struct config_setting *setting,
53                          char *buf, size_t len );
54         /** Set value of setting
55          *
56          * @v context           Configuration context
57          * @v setting           Configuration setting
58          * @v value             Setting value (as a string)
59          * @ret rc              Return status code
60          */ 
61         int ( * set ) ( struct config_context *context,
62                         struct config_setting *setting,
63                         const char *value );
64 };
65
66 /** Declare a configuration setting type */
67 #define __config_setting_type __table ( config_setting_types, 01 )
68
69 /**
70  * A configuration setting
71  *
72  * This represents a single configuration setting (e.g. "hostname").
73  */
74 struct config_setting {
75         /** Name
76          *
77          * This is the human-readable name for the setting.  Where
78          * possible, it should match the name used in dhcpd.conf (see
79          * dhcp-options(5)).
80          */
81         const char *name;
82         /** DHCP option tag
83          *
84          * This is the DHCP tag used to identify the option in DHCP
85          * packets and stored option blocks.
86          */
87         unsigned int tag;
88         /** Configuration setting type
89          *
90          * This identifies the type of setting (e.g. string, IPv4
91          * address, etc.).
92          */
93         struct config_setting_type *type;
94 };
95
96 /** Declare a configuration setting */
97 #define __config_setting __table ( config_settings, 01 )
98
99 /* Function prototypes */
100
101 extern int ( show_setting ) ( struct config_context *context, const char *name,
102                               char *buf, size_t len );
103 extern int ( set_setting ) ( struct config_context *context, const char *name,
104                              const char *value );
105
106 #endif /* _GPXE_SETTINGS_H */