[LEDE-DEV] ubus: how to add an object with a 'catch' all method/signature

Delio Brignoli brignoli.delio at gmail.com
Thu Sep 1 23:45:37 PDT 2016


Hello Felix,

Resending, please let me know if you are not the right person to talk to about this. Thanks.

Is it possible to fill in struct ubus_object and struct ubus_object_type so that only one "catch all" method is defined and have the object available for lookup?

I can do:

struct ubus_method type_m = {
	.name = "_",
	.handler = NULL,
};

struct ubus_object_type obj_type = {
	.n_methods = 1,
	.methods = &type_m,
}

struct ubus_method obj_m = {
	.name = NULL,
	.handler = func,
};

struct ubus_object o = {
	.name = “path/to/obj”,
	.type = &obj_type;
	.n_methods = 1,
	.methods = &obj_m,
};

and libubus will be happy to call my handler for any method name as long as I define at least one method with a nonzero name length for the *type*. If (o.type == NULL) or (o.type->n_methods == 0) or (o.type->methods.name == NULL) or (o.type->methods.name == “") adding the object will succeed but the object cannot be looked up (its path does not appear when running `ubus list`).

Are objects with an empty signature not supported? If so, should adding such an object fail? If not, how can I setup a "catch all” (or empty) signature?

Thank you
—
Delio




More information about the Lede-dev mailing list