|
@@ -79,23 +79,36 @@ static inline char * setting_tag_name ( unsigned int tag ) {
|
79
|
79
|
******************************************************************************
|
80
|
80
|
*/
|
81
|
81
|
|
82
|
|
-// Dummy routine just for testing
|
|
82
|
+/**
|
|
83
|
+ * Store value of simple setting
|
|
84
|
+ *
|
|
85
|
+ * @v options DHCP option block
|
|
86
|
+ * @v tag Setting tag number
|
|
87
|
+ * @v data Setting data, or NULL to clear setting
|
|
88
|
+ * @v len Length of setting data
|
|
89
|
+ * @ret rc Return status code
|
|
90
|
+ */
|
83
|
91
|
int simple_settings_store ( struct settings *settings, unsigned int tag,
|
84
|
92
|
const void *data, size_t len ) {
|
85
|
|
- DBGC ( settings, "Settings %p: store %s to:\n",
|
86
|
|
- settings, setting_tag_name ( tag ) );
|
87
|
|
- DBGC_HD ( settings, data, len );
|
88
|
|
- return 0;
|
|
93
|
+ struct simple_settings *simple =
|
|
94
|
+ container_of ( settings, struct simple_settings, settings );
|
|
95
|
+ return dhcpopt_extensible_store ( &simple->dhcpopts, tag, data, len );
|
89
|
96
|
}
|
90
|
97
|
|
91
|
|
-// Dummy routine just for testing
|
|
98
|
+/**
|
|
99
|
+ * Fetch value of simple setting
|
|
100
|
+ *
|
|
101
|
+ * @v options DHCP option block
|
|
102
|
+ * @v tag Setting tag number
|
|
103
|
+ * @v data Buffer to fill with setting data
|
|
104
|
+ * @v len Length of buffer
|
|
105
|
+ * @ret len Length of setting data, or negative error
|
|
106
|
+ */
|
92
|
107
|
int simple_settings_fetch ( struct settings *settings, unsigned int tag,
|
93
|
108
|
void *data, size_t len ) {
|
94
|
|
- ( void ) settings;
|
95
|
|
- ( void ) tag;
|
96
|
|
- ( void ) data;
|
97
|
|
- ( void ) len;
|
98
|
|
- return -ENOENT;
|
|
109
|
+ struct simple_settings *simple =
|
|
110
|
+ container_of ( settings, struct simple_settings, settings );
|
|
111
|
+ return dhcpopt_fetch ( &simple->dhcpopts, tag, data, len );
|
99
|
112
|
}
|
100
|
113
|
|
101
|
114
|
/** Simple settings operations */
|
|
@@ -104,15 +117,22 @@ struct settings_operations simple_settings_operations = {
|
104
|
117
|
.fetch = simple_settings_fetch,
|
105
|
118
|
};
|
106
|
119
|
|
107
|
|
-/** Root settings block */
|
108
|
|
-struct settings settings_root = {
|
109
|
|
- .refcnt = NULL,
|
110
|
|
- .name = "",
|
111
|
|
- .siblings = LIST_HEAD_INIT ( settings_root.siblings ),
|
112
|
|
- .children = LIST_HEAD_INIT ( settings_root.children ),
|
113
|
|
- .op = &simple_settings_operations,
|
|
120
|
+/** Root simple settings block */
|
|
121
|
+struct simple_settings simple_settings_root = {
|
|
122
|
+ .settings = {
|
|
123
|
+ .refcnt = NULL,
|
|
124
|
+ .name = "",
|
|
125
|
+ .siblings =
|
|
126
|
+ LIST_HEAD_INIT ( simple_settings_root.settings.siblings ),
|
|
127
|
+ .children =
|
|
128
|
+ LIST_HEAD_INIT ( simple_settings_root.settings.children ),
|
|
129
|
+ .op = &simple_settings_operations,
|
|
130
|
+ },
|
114
|
131
|
};
|
115
|
132
|
|
|
133
|
+/** Root settings block */
|
|
134
|
+#define settings_root simple_settings_root.settings
|
|
135
|
+
|
116
|
136
|
/**
|
117
|
137
|
* Apply all settings
|
118
|
138
|
*
|