summaryrefslogtreecommitdiffhomepage
path: root/ubus.c
diff options
context:
space:
mode:
authorFelix Fietkau <nbd@openwrt.org>2011-09-11 16:29:43 +0200
committerFelix Fietkau <nbd@openwrt.org>2011-09-11 16:29:43 +0200
commitf782148ef2be32343f13b033c0df04a56fb9c38e (patch)
tree285da65c13fc389d963664f9bcb58ead5f205611 /ubus.c
parent0b29011386305b9364ed25609b0dcfe351c610c5 (diff)
add an interface for notifying protocol handlers of state changes via ubus
Diffstat (limited to 'ubus.c')
-rw-r--r--ubus.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/ubus.c b/ubus.c
index c8f178c..a8d3e3c 100644
--- a/ubus.c
+++ b/ubus.c
@@ -2,6 +2,7 @@
#include "netifd.h"
#include "interface.h"
+#include "proto.h"
#include "ubus.h"
static struct ubus_context *ctx = NULL;
@@ -241,6 +242,21 @@ netifd_iface_handle_device(struct ubus_context *ctx, struct ubus_object *obj,
}
+static int
+netifd_iface_notify_proto(struct ubus_context *ctx, struct ubus_object *obj,
+ struct ubus_request_data *req, const char *method,
+ struct blob_attr *msg)
+{
+ struct interface *iface;
+
+ iface = container_of(obj, struct interface, ubus);
+
+ if (!iface->proto || !iface->proto->notify)
+ return UBUS_STATUS_NOT_SUPPORTED;
+
+ return iface->proto->notify(iface->proto, msg);
+}
+
static struct ubus_method iface_object_methods[] = {
{ .name = "up", .handler = netifd_handle_up },
{ .name = "down", .handler = netifd_handle_down },
@@ -249,6 +265,7 @@ static struct ubus_method iface_object_methods[] = {
.policy = dev_policy, .n_policy = __DEV_MAX_NOFORCE },
{ .name = "remove_device", .handler = netifd_iface_handle_device,
.policy = dev_policy, .n_policy = __DEV_MAX_NOFORCE },
+ { .name = "notify_proto", .handler = netifd_iface_notify_proto },
};
static struct ubus_object_type iface_object_type =