+ iprule_update_start();
+
+ uci_foreach_element(&uci_network->sections, e) {
+ struct uci_section *s = uci_to_section(e);
+
+ if (!strcmp(s->type, "rule"))
+ config_parse_rule(s, false);
+ else if (!strcmp(s->type, "rule6"))
+ config_parse_rule(s, true);
+ }
+
+ iprule_update_complete();
+}
+static int
+config_parse_global_ps_val(struct uci_section *globals, const char *option)
+{
+ const char *val = uci_lookup_option_string(
+ uci_ctx, globals, option);
+ int ret = 0;
+
+ if (val)
+ ret = strtol(val, 0, 10);
+
+ return ret;
+}
+
+static void
+config_init_globals(void)
+{
+ struct uci_section *globals = uci_lookup_section(
+ uci_ctx, uci_network, "globals");
+ if (!globals)
+ return;
+
+ const char *ula_prefix = uci_lookup_option_string(
+ uci_ctx, globals, "ula_prefix");
+ interface_ip_set_ula_prefix(ula_prefix);
+
+ const char *default_ps = uci_lookup_option_string(
+ uci_ctx, globals, "default_ps");
+
+ if (default_ps)
+ device_set_default_ps(strcmp(default_ps, "1") ? false : true,
+ config_parse_global_ps_val(globals, "default_xps_val"),
+ config_parse_global_ps_val(globals, "default_rps_val"),
+ config_parse_global_ps_val(globals, "default_rps_flow_cnt"));
+}
+
+static void
+config_parse_wireless_device(struct uci_section *s)
+{
+ struct wireless_driver *drv;
+ const char *driver_name;