]> git.ipfire.org Git - thirdparty/ipxe.git/commitdiff
[settings] Add fetch_ipv6_setting()
authorMichael Brown <mcb30@ipxe.org>
Wed, 4 Dec 2013 23:36:53 +0000 (23:36 +0000)
committerMichael Brown <mcb30@ipxe.org>
Thu, 5 Dec 2013 00:41:49 +0000 (00:41 +0000)
Signed-off-by: Michael Brown <mcb30@ipxe.org>
src/core/settings.c
src/include/ipxe/settings.h

index 9b4087e8b70224937999259d04fe481028a5bc6f..1269c9a30b9548fb794fa3b7135d98cefb327b20 100644 (file)
@@ -877,6 +877,44 @@ int fetch_ipv4_setting ( struct settings *settings,
        return fetch_ipv4_array_setting ( settings, setting, inp, 1 );
 }
 
+/**
+ * Fetch value of IPv6 address setting
+ *
+ * @v settings         Settings block, or NULL to search all blocks
+ * @v setting          Setting to fetch
+ * @v inp              IPv6 addresses to fill in
+ * @v count            Maximum number of IPv6 addresses
+ * @ret len            Length of setting, or negative error
+ */
+int fetch_ipv6_array_setting ( struct settings *settings,
+                              const struct setting *setting,
+                              struct in6_addr *inp, unsigned int count ) {
+       int len;
+
+       len = fetch_raw_setting ( settings, setting, inp,
+                                 ( sizeof ( *inp ) * count ) );
+       if ( len < 0 )
+               return len;
+       if ( ( len % sizeof ( *inp ) ) != 0 )
+               return -ERANGE;
+       return len;
+}
+
+/**
+ * Fetch value of IPv6 address setting
+ *
+ * @v settings         Settings block, or NULL to search all blocks
+ * @v setting          Setting to fetch
+ * @v inp              IPv6 address to fill in
+ * @ret len            Length of setting, or negative error
+ */
+int fetch_ipv6_setting ( struct settings *settings,
+                        const struct setting *setting,
+                        struct in6_addr *inp ) {
+
+       return fetch_ipv6_array_setting ( settings, setting, inp, 1 );
+}
+
 /**
  * Extract numeric value of setting
  *
index 3b1328c826904efc77c43be21ff2e517f30f9ed3..39756f7fdf00ac0689324be90a0be5313eda08df 100644 (file)
@@ -16,6 +16,7 @@ FILE_LICENCE ( GPL2_OR_LATER );
 
 struct settings;
 struct in_addr;
+struct in6_addr;
 union uuid;
 
 /** A setting */
@@ -341,6 +342,12 @@ extern int fetch_ipv4_array_setting ( struct settings *settings,
 extern int fetch_ipv4_setting ( struct settings *settings,
                                const struct setting *setting,
                                struct in_addr *inp );
+extern int fetch_ipv6_array_setting ( struct settings *settings,
+                                     const struct setting *setting,
+                                     struct in6_addr *inp, unsigned int count);
+extern int fetch_ipv6_setting ( struct settings *settings,
+                               const struct setting *setting,
+                               struct in6_addr *inp );
 extern int fetch_int_setting ( struct settings *settings,
                               const struct setting *setting, long *value );
 extern int fetch_uint_setting ( struct settings *settings,