diff --git a/package/libgluonutil/src/libgluonutil.c b/package/libgluonutil/src/libgluonutil.c index 5932c54402b9b2e48a54d44219ecdfebe824ada8..db46b9c90a2a32d4709f1efcf85e714a3261a89e 100644 --- a/package/libgluonutil/src/libgluonutil.c +++ b/package/libgluonutil/src/libgluonutil.c @@ -27,7 +27,7 @@ #include "libgluonutil.h" #include <json-c/json.h> - +#include <arpa/inet.h> #include <stdio.h> #include <string.h> #include <stdlib.h> @@ -109,6 +109,38 @@ struct json_object * gluonutil_wrap_and_free_string(char *str) { return ret; } + +bool gluonutil_get_node_prefix6(struct in6_addr *prefix) { + struct json_object *site = gluonutil_load_site_config(); + if (!site) + return false; + + struct json_object *node_prefix = NULL; + if (!json_object_object_get_ex(site, "node_prefix6", &node_prefix)) { + json_object_put(site); + return false; + } + + const char *str_prefix = json_object_get_string(node_prefix); + if (!str_prefix) { + json_object_put(site); + return false; + } + + char *prefix_addr = strndup(str_prefix, strchrnul(str_prefix, '/')-str_prefix); + + int ret = inet_pton(AF_INET6, prefix_addr, prefix); + + free(prefix_addr); + json_object_put(site); + + if (ret != 1) + return false; + + return true; +} + + struct json_object * gluonutil_load_site_config(void) { return json_object_from_file("/lib/gluon/site.json"); } diff --git a/package/libgluonutil/src/libgluonutil.h b/package/libgluonutil/src/libgluonutil.h index 961952818779ffc959660937936167b104dc85ec..b2f90d699da759b58e1adfed59f94891f954fe7c 100644 --- a/package/libgluonutil/src/libgluonutil.h +++ b/package/libgluonutil/src/libgluonutil.h @@ -27,10 +27,15 @@ #ifndef _LIBGLUON_LIBGLUON_H_ #define _LIBGLUON_LIBGLUON_H_ +#include <netinet/in.h> +#include <stdbool.h> + + char * gluonutil_read_line(const char *filename); char * gluonutil_get_sysconfig(const char *key); char * gluonutil_get_node_id(void); char * gluonutil_get_interface_address(const char *ifname); +bool gluonutil_get_node_prefix6(struct in6_addr *prefix); struct json_object * gluonutil_wrap_string(const char *str); struct json_object * gluonutil_wrap_and_free_string(char *str);