Browse Source

Added ipv4 configuration type

tags/v0.9.3
Michael Brown 18 years ago
parent
commit
fe774fe356
1 changed files with 56 additions and 0 deletions
  1. 56
    0
      src/core/settings.c

+ 56
- 0
src/core/settings.c View File

@@ -21,6 +21,8 @@
21 21
 #include <string.h>
22 22
 #include <errno.h>
23 23
 #include <assert.h>
24
+#include <vsprintf.h>
25
+#include <gpxe/in.h>
24 26
 #include <gpxe/settings.h>
25 27
 
26 28
 /** @file
@@ -195,3 +197,57 @@ struct config_setting_type config_setting_type_string __config_setting_type = {
195 197
 	.show = show_string,
196 198
 	.set = set_string,
197 199
 };
200
+
201
+/**
202
+ * Show value of IPv4 setting
203
+ *
204
+ * @v context		Configuration context
205
+ * @v setting		Configuration setting
206
+ * @v buf		Buffer to contain value
207
+ * @v len		Length of buffer
208
+ * @ret rc		Return status code
209
+ */
210
+static int show_ipv4 ( struct config_context *context,
211
+		       struct config_setting *setting,
212
+		       char *buf, size_t len ) {
213
+	struct dhcp_option *option;
214
+	struct in_addr ipv4;
215
+
216
+	option = find_dhcp_option ( context->options, setting->tag );
217
+	if ( ! option )
218
+		return -ENOENT;
219
+	dhcp_ipv4_option ( option, &ipv4 );
220
+	snprintf ( buf, len, inet_ntoa ( ipv4 ) );
221
+	return 0;
222
+}
223
+
224
+/** Set value of IPV4 setting
225
+ *
226
+ * @v context		Configuration context
227
+ * @v setting		Configuration setting
228
+ * @v value		Setting value (as a string)
229
+ * @ret rc		Return status code
230
+ */ 
231
+static int set_ipv4 ( struct config_context *context,
232
+		      struct config_setting *setting,
233
+		      const char *value ) {
234
+	struct dhcp_option *option;
235
+	struct in_addr ipv4;
236
+	int rc;
237
+	
238
+	if ( ( rc = inet_aton ( value, &ipv4 ) ) != 0 )
239
+		return rc;
240
+	option = set_dhcp_option ( context->options, setting->tag,
241
+				   &ipv4, sizeof ( ipv4 ) );
242
+	if ( ! option )
243
+		return -ENOMEM;
244
+	return 0;
245
+}
246
+
247
+/** An IPv4 configuration setting */
248
+struct config_setting_type config_setting_type_ipv4 __config_setting_type = {
249
+	.name = "ipv4",
250
+	.show = show_ipv4,
251
+	.set = set_ipv4,
252
+};
253
+

Loading…
Cancel
Save