summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
2455271)
Interface update event will trigger an interface hotplug event and an ubus notify event
which will inform subscribers about the updated interface data field
Signed-off-by: Hans Dedecker <dedeckeh@gmail.com>
static void
set_config_state(struct interface *iface, enum interface_config_state s);
static void
set_config_state(struct interface *iface, enum interface_config_state s);
+static void
+interface_event(struct interface *iface, enum interface_event ev);
static void
interface_error_flush(struct interface *iface)
static void
interface_error_flush(struct interface *iface)
+int interface_parse_data(struct interface *iface, const struct blob_attr *attr)
+{
+ struct blob_attr *cur;
+ int rem, ret;
+
+ iface->updated = 0;
+
+ blob_for_each_attr(cur, attr, rem) {
+ ret = interface_add_data(iface, cur);
+ if (ret)
+ return ret;
+ }
+
+ if (iface->updated && iface->state == IFS_UP)
+ interface_event(iface, IFEV_UPDATE);
+
+ return 0;
+}
+
static void
interface_event(struct interface *iface, enum interface_event ev)
{
static void
interface_event(struct interface *iface, enum interface_event ev)
{
const char *code, const char **data, int n_data);
int interface_add_data(struct interface *iface, const struct blob_attr *data);
const char *code, const char **data, int n_data);
int interface_add_data(struct interface *iface, const struct blob_attr *data);
+int interface_parse_data(struct interface *iface, const struct blob_attr *attr);
void interface_update_start(struct interface *iface);
void interface_update_complete(struct interface *iface);
void interface_update_start(struct interface *iface);
void interface_update_complete(struct interface *iface);
struct blob_attr *msg)
{
struct interface *iface;
struct blob_attr *msg)
{
struct interface *iface;
- struct blob_attr *cur;
- int rem, ret;
iface = container_of(obj, struct interface, ubus);
iface = container_of(obj, struct interface, ubus);
- blob_for_each_attr(cur, msg, rem) {
- ret = interface_add_data(iface, cur);
- if (ret)
- return ret;
- }
-
- return 0;
+ return interface_parse_data(iface, msg);
}
static struct ubus_method iface_object_methods[] = {
}
static struct ubus_method iface_object_methods[] = {