The context is that we generate some of the UCI config
for netifd via scripts/programs.
Every once in a while, there's a goof when doing that
UCI generation, and netifd prints out the error at
stderr, but returns 0 (success) err-code.
This change will fail the ubus call if UCI config
is invalid or missing for /etc/config/network.
Signed-off-by: Alexandru Ardelean <ardeleanalex@gmail.com>
Acked-by: Hans Dedecker <dedeckeh@gmail.com>
vlist_flush(&wdev->interfaces);
}
-void
+int
config_init_all(void)
{
+ int ret = 0;
+
uci_network = config_init_package("network");
if (!uci_network) {
fprintf(stderr, "Failed to load network config\n");
- return;
+ return -1;
}
uci_wireless = config_init_package("wireless");
+ if (!uci_wireless)
+ ret = -1;
vlist_update(&interfaces);
config_init = true;
interface_refresh_assignments(false);
interface_start_pending();
wireless_start_pending();
+
+ return ret;
}
extern bool config_init;
-void config_init_all(void);
+int config_init_all(void);
#endif
execvp(global_argv[0], global_argv);
}
-void netifd_reload(void)
+int netifd_reload(void)
{
- config_init_all();
+ return config_init_all();
}
void netifd_restart(void)
extern const char *main_path;
extern const char *config_path;
void netifd_restart(void);
-void netifd_reload(void);
+int netifd_reload(void);
#endif
struct ubus_request_data *req, const char *method,
struct blob_attr *msg)
{
- netifd_reload();
- return 0;
+ if (netifd_reload())
+ return UBUS_STATUS_UNKNOWN_ERROR;
+
+ return UBUS_STATUS_OK;
}
enum {