-struct uci_optmap network_smap_options[] = {
- OPTMAP_OPTION(UCIMAP_STRING, struct uci_network, proto, .data.s.maxlen = 32),
- OPTMAP_OPTION(UCIMAP_STRING, struct uci_network, ifname),
- OPTMAP_OPTION(UCIMAP_STRING, struct uci_network, ipaddr),
- OPTMAP_OPTION(UCIMAP_BOOL, struct uci_network, enabled),
- OPTMAP_OPTION(UCIMAP_INT, struct uci_network, test),
+static int
+network_add_alias(struct uci_map *map, void *section)
+{
+ struct uci_alias *a = section;
+
+ if (a->interface)
+ list_add_tail(&a->list, &a->interface->alias);
+
+ return 0;
+}
+
+static struct ucimap_section_data *
+network_allocate(struct uci_map *map, struct uci_sectionmap *sm, struct uci_section *s)
+{
+ struct uci_network *p = malloc(sizeof(struct uci_network));
+ memset(p, 0, sizeof(struct uci_network));
+ return &p->map;
+}
+
+struct my_optmap {
+ struct uci_optmap map;
+ int test;
+};
+
+static struct uci_sectionmap network_interface;
+static struct uci_sectionmap network_alias;
+
+static struct my_optmap network_interface_options[] = {
+ {
+ .map = {
+ UCIMAP_OPTION(struct uci_network, proto),
+ .type = UCIMAP_STRING,
+ .name = "proto",
+ .data.s.maxlen = 32,
+ }
+ },
+ {
+ .map = {
+ UCIMAP_OPTION(struct uci_network, ifname),
+ .type = UCIMAP_STRING,
+ .name = "ifname"
+ }
+ },
+ {
+ .map = {
+ UCIMAP_OPTION(struct uci_network, ipaddr),
+ .type = UCIMAP_CUSTOM,
+ .name = "ipaddr",
+ .parse = network_parse_ip,
+ .format = network_format_ip,
+ .free = network_free_ip,
+ }
+ },
+ {
+ .map = {
+ UCIMAP_OPTION(struct uci_network, enabled),
+ .type = UCIMAP_BOOL,
+ .name = "enabled",
+ }
+ },
+ {
+ .map = {
+ UCIMAP_OPTION(struct uci_network, test),
+ .type = UCIMAP_INT,
+ .name = "test"
+ }
+ },
+ {
+ .map = {
+ UCIMAP_OPTION(struct uci_network, aliases),
+ .type = UCIMAP_LIST | UCIMAP_SECTION | UCIMAP_LIST_AUTO,
+ .data.sm = &network_alias
+ }
+ }
+};
+
+static struct uci_sectionmap network_interface = {
+ UCIMAP_SECTION(struct uci_network, map),
+ .type = "interface",
+ .alloc = network_allocate,
+ .init = network_init_interface,
+ .add = network_add_interface,
+ .options = &network_interface_options[0].map,
+ .n_options = ARRAY_SIZE(network_interface_options),
+ .options_size = sizeof(struct my_optmap)