mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-05 22:07:57 +00:00
lib: Enable consecutive frrscript_call
Previous: - frrscript_load: push Lua function onto stack - frrscript_call: calls Lua function Now: - frrscript_load: checks Lua function - frrscript_call: pushes and calls Lua function (first clear the stack) So now we just need one frrscript_load for consecutive frrscript_call. frrscript_call does not recompile or reload the script file, it just keys it from the global Lua table (where it should already be). Signed-off-by: Donald Lee <dlqs@gmx.com>
This commit is contained in:
parent
80bfe93670
commit
2ed598ba6b
@ -288,13 +288,16 @@ int frrscript_load(struct frrscript *fs, const char *function_name,
|
||||
goto fail;
|
||||
}
|
||||
|
||||
/* Push the Lua function we want */
|
||||
/* To check the Lua function, we get it from the global table */
|
||||
lua_getglobal(L, function_name);
|
||||
if (lua_isfunction(L, lua_gettop(L)) == 0) {
|
||||
zlog_err("frrscript: loaded script '%s.lua' but %s not found",
|
||||
script_name, function_name);
|
||||
goto fail;
|
||||
}
|
||||
/* Then pop the function (frrscript_call will push it when it needs it)
|
||||
*/
|
||||
lua_pop(L, 1);
|
||||
|
||||
if (load_cb && (*load_cb)(fs) != 0) {
|
||||
zlog_err(
|
||||
|
@ -203,8 +203,18 @@ const struct prefix * : lua_decode_noop \
|
||||
int _frrscript_call_lua(struct lua_function_state *lfs, int nargs);
|
||||
|
||||
/*
|
||||
* Wrapper for calling Lua function state. Maps values passed in to their
|
||||
* encoder and decoder types.
|
||||
* Wrapper for calling Lua function state.
|
||||
*
|
||||
* The Lua function name (f) to run should have already been checked by
|
||||
* frrscript_load. So this wrapper will:
|
||||
* 1) Find the Lua function state, which contains the Lua state
|
||||
* 2) Clear the Lua state (there may be leftovers items from previous call)
|
||||
* 3) Push the Lua function (f)
|
||||
* 4) Map frrscript_call arguments onto their encoder and decoders, push those
|
||||
* 5) Call _frrscript_call_lua (Lua execution takes place)
|
||||
* 6) Write back to frrscript_call arguments using their decoders
|
||||
*
|
||||
* This wrapper can be called multiple times (after one frrscript_load).
|
||||
*
|
||||
* fs
|
||||
* The struct frrscript in which the Lua fuction was loaded into
|
||||
@ -226,6 +236,8 @@ int _frrscript_call_lua(struct lua_function_state *lfs, int nargs);
|
||||
1; \
|
||||
}) \
|
||||
: ({ \
|
||||
lua_settop(lfs->L, 0); \
|
||||
lua_getglobal(lfs->L, f); \
|
||||
MAP_LISTS(ENCODE_ARGS, ##__VA_ARGS__); \
|
||||
_frrscript_call_lua( \
|
||||
lfs, PP_NARG(__VA_ARGS__)); \
|
||||
|
Loading…
Reference in New Issue
Block a user