From f782148ef2be32343f13b033c0df04a56fb9c38e Mon Sep 17 00:00:00 2001 From: Felix Fietkau Date: Sun, 11 Sep 2011 16:29:43 +0200 Subject: [PATCH 1/1] add an interface for notifying protocol handlers of state changes via ubus --- proto.h | 1 + ubus.c | 17 +++++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/proto.h b/proto.h index e066b43..c1b97b2 100644 --- a/proto.h +++ b/proto.h @@ -28,6 +28,7 @@ struct interface_proto_state { void (*proto_event)(struct interface_proto_state *, enum interface_proto_event ev); /* filled in by the protocol handler */ + int (*notify)(struct interface_proto_state *, struct blob_attr *data); int (*cb)(struct interface_proto_state *, enum interface_proto_cmd cmd, bool force); void (*free)(struct interface_proto_state *); }; 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 = -- 2.11.0