From fe774fe356cbcaebe0f915ad8f039bc09f02e2be Mon Sep 17 00:00:00 2001 From: Michael Brown Date: Fri, 11 Aug 2006 18:22:41 +0000 Subject: [PATCH] Added ipv4 configuration type --- src/core/settings.c | 56 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) diff --git a/src/core/settings.c b/src/core/settings.c index 0de697e0..e15fc297 100644 --- a/src/core/settings.c +++ b/src/core/settings.c @@ -21,6 +21,8 @@ #include #include #include +#include +#include #include /** @file @@ -195,3 +197,57 @@ struct config_setting_type config_setting_type_string __config_setting_type = { .show = show_string, .set = set_string, }; + +/** + * Show value of IPv4 setting + * + * @v context Configuration context + * @v setting Configuration setting + * @v buf Buffer to contain value + * @v len Length of buffer + * @ret rc Return status code + */ +static int show_ipv4 ( struct config_context *context, + struct config_setting *setting, + char *buf, size_t len ) { + struct dhcp_option *option; + struct in_addr ipv4; + + option = find_dhcp_option ( context->options, setting->tag ); + if ( ! option ) + return -ENOENT; + dhcp_ipv4_option ( option, &ipv4 ); + snprintf ( buf, len, inet_ntoa ( ipv4 ) ); + return 0; +} + +/** Set value of IPV4 setting + * + * @v context Configuration context + * @v setting Configuration setting + * @v value Setting value (as a string) + * @ret rc Return status code + */ +static int set_ipv4 ( struct config_context *context, + struct config_setting *setting, + const char *value ) { + struct dhcp_option *option; + struct in_addr ipv4; + int rc; + + if ( ( rc = inet_aton ( value, &ipv4 ) ) != 0 ) + return rc; + option = set_dhcp_option ( context->options, setting->tag, + &ipv4, sizeof ( ipv4 ) ); + if ( ! option ) + return -ENOMEM; + return 0; +} + +/** An IPv4 configuration setting */ +struct config_setting_type config_setting_type_ipv4 __config_setting_type = { + .name = "ipv4", + .show = show_ipv4, + .set = set_ipv4, +}; +