+network_parse_ip(void *section, struct uci_optmap *om, union ucimap_data *data, const char *str)
+{
+ unsigned char *target;
+ int tmp[4];
+ int i;
+
+ if (sscanf(str, "%d.%d.%d.%d", &tmp[0], &tmp[1], &tmp[2], &tmp[3]) != 4)
+ return -1;
+
+ target = malloc(4);
+ if (!target)
+ return -1;
+
+ data->ptr = target;
+ for (i = 0; i < 4; i++)
+ target[i] = (char) tmp[i];
+
+ return 0;
+}
+
+static int
+network_format_ip(void *section, struct uci_optmap *om, union ucimap_data *data, char **str)
+{
+ static char buf[16];
+ unsigned char *ip = (unsigned char *) data->ptr;
+
+ if (ip) {
+ sprintf(buf, "%d.%d.%d.%d", ip[0], ip[1], ip[2], ip[3]);
+ *str = buf;
+ } else {
+ *str = NULL;
+ }
+
+ return 0;
+}
+
+static void
+network_free_ip(void *section, struct uci_optmap *om, void *ptr)
+{
+ free(ptr);
+}
+
+static int