Commit c9627b40 authored by Jan Moskyto Matejka's avatar Jan Moskyto Matejka Committed by Jan Maria Matejka
Browse files

Lua: common log functions

parent 033a3389
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
src := filter.c
src := common.c filter.c
obj := $(src-o-files)
$(all-daemon)
#$(cf-local)

lua/common.c

0 → 100644
+77 −0
Original line number Diff line number Diff line
#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");
}
+2 −0
Original line number Diff line number Diff line
#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) {

lua/lua.h

0 → 100644
+5 −0
Original line number Diff line number Diff line
#include "nest/bird.h"

#include <lua.h>

void luaB_push_bird_table(lua_State *L);