+ * @package: store the loaded config package in this variable
+ */
+extern int uci_load(struct uci_context *ctx, const char *name, struct uci_package **package);
+
+/**
+ * uci_unload: Unload a config file from the uci context
+ *
+ * @ctx: uci context
+ * @package: pointer to the uci_package struct
+ */
+extern int uci_unload(struct uci_context *ctx, struct uci_package *p);
+
+/**
+ * uci_lookup_ptr: Split an uci tuple string and look up an element tree
+ * @ctx: uci context
+ * @ptr: lookup result struct
+ * @str: uci tuple string to look up
+ * @extended: allow extended syntax lookup
+ *
+ * if extended is set to true, uci_lookup_ptr supports the following
+ * extended syntax:
+ *
+ * Examples:
+ * network.@interface[0].ifname ('ifname' option of the first interface section)
+ * network.@interface[-1] (last interface section)
+ * Note: uci_lookup_ptr will automatically load a config package if necessary
+ * @str must not be constant, as it will be modified and used for the strings inside @ptr,
+ * thus it must also be available as long as @ptr is in use.
+ */
+extern int uci_lookup_ptr(struct uci_context *ctx, struct uci_ptr *ptr, char *str, bool extended);
+
+/**
+ * uci_add_section: Add an unnamed section
+ * @ctx: uci context
+ * @p: package to add the section to
+ * @type: section type
+ * @res: pointer to store a reference to the new section in
+ */
+extern int uci_add_section(struct uci_context *ctx, struct uci_package *p, const char *type, struct uci_section **res);
+
+/**
+ * uci_set: Set an element's value; create the element if necessary
+ * @ctx: uci context
+ * @ptr: uci pointer
+ *
+ * The updated/created element is stored in ptr->last
+ */
+extern int uci_set(struct uci_context *ctx, struct uci_ptr *ptr);
+
+/**
+ * uci_add_list: Append a string to an element list
+ * @ctx: uci context
+ * @ptr: uci pointer (with value)
+ *
+ * Note: if the given option already contains a string value,
+ * it will be converted to an 1-element-list before appending the next element
+ */
+extern int uci_add_list(struct uci_context *ctx, struct uci_ptr *ptr);
+
+/**
+ * uci_del_list: Remove a string from an element list
+ * @ctx: uci context
+ * @ptr: uci pointer (with value)
+ *
+ */
+extern int uci_del_list(struct uci_context *ctx, struct uci_ptr *ptr);
+
+/**
+ * uci_reorder: Reposition a section
+ * @ctx: uci context
+ * @s: uci section to reposition
+ * @pos: new position in the section list
+ */
+extern int uci_reorder_section(struct uci_context *ctx, struct uci_section *s, int pos);
+
+/**
+ * uci_rename: Rename an element
+ * @ctx: uci context
+ * @ptr: uci pointer (with value)
+ */
+extern int uci_rename(struct uci_context *ctx, struct uci_ptr *ptr);
+
+/**
+ * uci_delete: Delete a section or option
+ * @ctx: uci context
+ * @ptr: uci pointer
+ */
+extern int uci_delete(struct uci_context *ctx, struct uci_ptr *ptr);
+
+/**
+ * uci_save: save change delta for a package
+ * @ctx: uci context
+ * @p: uci_package struct
+ */
+extern int uci_save(struct uci_context *ctx, struct uci_package *p);
+
+/**
+ * uci_commit: commit changes to a package
+ * @ctx: uci context
+ * @p: uci_package struct pointer
+ * @overwrite: overwrite existing config data and flush delta
+ *
+ * committing may reload the whole uci_package data,
+ * the supplied pointer is updated accordingly
+ */
+extern int uci_commit(struct uci_context *ctx, struct uci_package **p, bool overwrite);
+
+/**
+ * uci_list_configs: List available uci config files
+ * @ctx: uci context
+ *
+ * caller is responsible for freeing the allocated memory behind list
+ */
+extern int uci_list_configs(struct uci_context *ctx, char ***list);
+
+/**
+ * uci_set_savedir: override the default delta save directory
+ * @ctx: uci context
+ * @dir: directory name
+ */
+extern int uci_set_savedir(struct uci_context *ctx, const char *dir);
+
+/**
+ * uci_set_savedir: override the default config storage directory
+ * @ctx: uci context
+ * @dir: directory name
+ */
+extern int uci_set_confdir(struct uci_context *ctx, const char *dir);
+
+/**
+ * uci_add_delta_path: add a directory to the search path for change delta files
+ * @ctx: uci context
+ * @dir: directory name
+ *
+ * This function allows you to add directories, which contain 'overlays'
+ * for the active config, that will never be committed.
+ * Caller of this API should ensure that no duplicate entries (including the
+ * default search path, e.g. `UCI_SAVEDIR') should be added.
+ */
+extern int uci_add_delta_path(struct uci_context *ctx, const char *dir);
+
+/**
+ * uci_revert: revert all changes to a config item
+ * @ctx: uci context
+ * @ptr: uci pointer
+ */
+extern int uci_revert(struct uci_context *ctx, struct uci_ptr *ptr);
+
+/**
+ * uci_parse_argument: parse a shell-style argument, with an arbitrary quoting style
+ * @ctx: uci context
+ * @stream: input stream
+ * @str: pointer to the current line (use NULL for parsing the next line)
+ * @result: pointer for the result
+ */
+extern int uci_parse_argument(struct uci_context *ctx, FILE *stream, char **str, char **result);
+
+/**
+ * uci_set_backend: change the default backend
+ * @ctx: uci context
+ * @name: name of the backend
+ *
+ * The default backend is "file", which uses /etc/config for config storage
+ */
+extern int uci_set_backend(struct uci_context *ctx, const char *name);
+
+/**
+ * uci_validate_text: validate a value string for uci options
+ * @str: value
+ *
+ * this function checks whether a given string is acceptable as value
+ * for uci options