]> git.ipfire.org Git - thirdparty/bird.git/commitdiff
Lua: common log functions
authorJan Moskyto Matejka <mq@ucw.cz>
Mon, 6 Feb 2017 14:25:48 +0000 (15:25 +0100)
committerJan Maria Matejka <mq@ucw.cz>
Tue, 23 Jan 2018 14:17:01 +0000 (15:17 +0100)
lua/Makefile
lua/common.c [new file with mode: 0644]
lua/filter.c
lua/lua.h [new file with mode: 0644]

index 493b9475dda21480c48e840ea8fb9c17a423ea10..b74309debb2796aff1337f4a1b397308f94b4bf6 100644 (file)
@@ -1,4 +1,4 @@
-src := filter.c
+src := common.c filter.c
 obj := $(src-o-files)
 $(all-daemon)
 #$(cf-local)
diff --git a/lua/common.c b/lua/common.c
new file mode 100644 (file)
index 0000000..fea030f
--- /dev/null
@@ -0,0 +1,77 @@
+#include "nest/bird.h"
+#include "filter/filter.h"
+#include "lua.h"
+
+#include <lua.h>
+#include <lualib.h>
+#include <lauxlib.h>
+
+static int luaB_err(lua_State *L) {
+  int n = lua_gettop(L);
+  if (n != 1)
+    log(L_WARN "bird.err() accepts exactly 1 argument");
+
+  if (n < 1)
+    return 0;
+
+  log(L_ERR "%s", lua_tostring(L, 1));
+  return 0;
+}
+
+static int luaB_warn(lua_State *L) {
+  int n = lua_gettop(L);
+  if (n != 1)
+    log(L_WARN "bird.warn() accepts exactly 1 argument");
+
+  if (n < 1)
+    return 0;
+
+  log(L_WARN "%s", lua_tostring(L, 1));
+  return 0;
+}
+
+static int luaB_info(lua_State *L) {
+  int n = lua_gettop(L);
+  if (n != 1)
+    log(L_WARN "bird.info() accepts exactly 1 argument");
+
+  if (n < 1)
+    return 0;
+
+  log(L_INFO "%s", lua_tostring(L, 1));
+  return 0;
+}
+
+static int luaB_trace(lua_State *L) {
+  int n = lua_gettop(L);
+  if (n != 1)
+    log(L_WARN "bird.trace() accepts exactly 1 argument");
+
+  if (n < 1)
+    return 0;
+
+  log(L_TRACE "%s", lua_tostring(L, 1));
+  return 0;
+}
+
+void luaB_push_bird_table(lua_State *L) {
+  lua_newtable(L);
+
+  lua_pushstring(L, "err");
+  lua_pushcfunction(L, luaB_err);
+  lua_settable(L, -3);
+
+  lua_pushstring(L, "warn");
+  lua_pushcfunction(L, luaB_warn);
+  lua_settable(L, -3);
+
+  lua_pushstring(L, "info");
+  lua_pushcfunction(L, luaB_info);
+  lua_settable(L, -3);
+
+  lua_pushstring(L, "trace");
+  lua_pushcfunction(L, luaB_trace);
+  lua_settable(L, -3);
+
+  lua_setglobal(L, "bird");
+}
index c40a52073011ce0d2bde9ae318dcbb9d81912a2c..9dabb28f5892ead61b13b2315a06cd8a9dd2305b 100644 (file)
@@ -1,5 +1,6 @@
 #include "nest/bird.h"
 #include "filter/filter.h"
+#include "lua.h"
 
 #include <lua.h>
 #include <lualib.h>
@@ -8,6 +9,7 @@
 int filter_lua_chunk(const char *chunk, struct rte **e, struct rta *a, struct ea_list **ea, struct linpool *lp) {
   lua_State *L = luaL_newstate();
   luaL_openlibs(L);
+  luaB_push_bird_table(L);
   int le = luaL_dostring(L, chunk);
   int out;
   if (le) {
diff --git a/lua/lua.h b/lua/lua.h
new file mode 100644 (file)
index 0000000..7e6f31c
--- /dev/null
+++ b/lua/lua.h
@@ -0,0 +1,5 @@
+#include "nest/bird.h"
+
+#include <lua.h>
+
+void luaB_push_bird_table(lua_State *L);