[PATCH] ubus/lua: add fd sending to ubus requests

nicola.pancheri at netduma.com nicola.pancheri at netduma.com
Fri Aug 27 04:22:10 PDT 2021


From: Nicola Pancheri <nicola.pancheri at netduma.com>

Exposes the ubus file descriptor sharing interface to Lua.

Signed-off-by: Nicola Pancheri <nicola.pancheri at netduma.com>
---
 lua/ubus.c | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)

diff --git a/lua/ubus.c b/lua/ubus.c
index e2bb081..8378a25 100644
--- a/lua/ubus.c
+++ b/lua/ubus.c
@@ -321,7 +321,8 @@ ubus_method_handler(struct ubus_context *ctx, struct ubus_object *obj,
 			lua_pushnil(state);
 		else
 			ubus_lua_parse_blob_array(state, blob_data(msg), blob_len(msg), true);
-		lua_call(state, 2, 1);
+		lua_pushnumber(state,req->req_fd);
+		lua_call(state, 3, 1);
 		if (lua_isnumber(state, -1))
 			rv = lua_tonumber(state, -1);
 	}
@@ -668,6 +669,12 @@ ubus_lua_call(lua_State *L)
 	const char *path = luaL_checkstring(L, 2);
 	const char *func = luaL_checkstring(L, 3);
 
+  int fd = -1;
+	if( lua_isnumber(L,5) ){
+		fd = lua_tointeger(L,5);
+		lua_pushvalue( L, 4 );
+	}
+
 	luaL_checktype(L, 4, LUA_TTABLE);
 	blob_buf_init(&c->buf, 0);
 
@@ -688,7 +695,7 @@ ubus_lua_call(lua_State *L)
 	}
 
 	top = lua_gettop(L);
-	rv = ubus_invoke(c->ctx, id, func, c->buf.head, ubus_lua_call_cb, L, c->timeout * 1000);
+	rv = ubus_invoke_fd(c->ctx, id, func, c->buf.head, ubus_lua_call_cb, L, c->timeout * 1000, fd);
 
 	if (rv != UBUS_STATUS_OK)
 	{
-- 
2.25.1




More information about the openwrt-devel mailing list