On Mon, Mar 20, 2017 at 3:08 PM, Alexandru Ardelean <ardeleana...@gmail.com> wrote: > From: Alexandru Ardelean <ardeleana...@gmail.com> > > 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 <ardeleana...@gmail.com> > --- > config.c | 10 ++++++++-- > config.h | 9 ++++++++- > main.c | 4 ++-- > netifd.h | 2 +- > ubus.c | 8 ++++++-- > 5 files changed, 25 insertions(+), 8 deletions(-) > > diff --git a/config.c b/config.c > index 0d965d3..3b1af82 100644 > --- a/config.c > +++ b/config.c > @@ -393,16 +393,20 @@ config_init_wireless(void) > vlist_flush(&wdev->interfaces); > } > > -void > +int > config_init_all(void) > { > + int ret = CONFIG_INIT_OK; > + > uci_network = config_init_package("network"); > if (!uci_network) { > fprintf(stderr, "Failed to load network config\n"); > - return; > + return CONFIG_INIT_ERR_NO_NETWORK; > } > > uci_wireless = config_init_package("wireless"); > + if (!uci_wireless) > + ret = CONFIG_INIT_ERR_NO_WIRELESS; > > vlist_update(&interfaces); > config_init = true; > @@ -426,4 +430,6 @@ config_init_all(void) > interface_refresh_assignments(false); > interface_start_pending(); > wireless_start_pending(); > + > + return ret; > } > diff --git a/config.h b/config.h > index 5adaca6..df30b64 100644 > --- a/config.h > +++ b/config.h > @@ -19,6 +19,13 @@ > > extern bool config_init; > > -void config_init_all(void); > +enum { > + CONFIG_INIT_OK, > + CONFIG_INIT_ERR_NO_WIRELESS, > + CONFIG_INIT_ERR_NO_NETWORK, > + __CONFIG_INIT_LAST > +}; > + > +int config_init_all(void); > > #endif > diff --git a/main.c b/main.c > index 5717b81..c173cef 100644 > --- a/main.c > +++ b/main.c > @@ -208,9 +208,9 @@ static void netifd_do_restart(struct uloop_timeout > *timeout) > 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) > diff --git a/netifd.h b/netifd.h > index 5a90858..e565423 100644 > --- a/netifd.h > +++ b/netifd.h > @@ -98,6 +98,6 @@ struct interface; > extern const char *main_path; > extern const char *config_path; > void netifd_restart(void); > -void netifd_reload(void); > +int netifd_reload(void); > > #endif > diff --git a/ubus.c b/ubus.c > index 1b1a4cd..31e535c 100644 > --- a/ubus.c > +++ b/ubus.c > @@ -44,8 +44,12 @@ netifd_handle_reload(struct ubus_context *ctx, struct > ubus_object *obj, > struct ubus_request_data *req, const char *method, > struct blob_attr *msg) > { > - netifd_reload(); > - return 0; > + switch (netifd_reload()) { > + case CONFIG_INIT_ERR_NO_NETWORK: > + return UBUS_STATUS_UNKNOWN_ERROR; Is there any reason why only an ubus error code is returned for a network uci failure and not for a wireless uci failure ?
Hans > + default: > + return UBUS_STATUS_OK; > + } > } > > enum { > -- > 2.7.4 > _______________________________________________ Lede-dev mailing list Lede-dev@lists.infradead.org http://lists.infradead.org/mailman/listinfo/lede-dev