]> git.proxmox.com Git - mirror_frr.git/blame - lib/frrlua.h
Merge pull request #9806 from jonglezb/master
[mirror_frr.git] / lib / frrlua.h
CommitLineData
634949ae 1/*
60219659
QY
2 * Copyright (C) 2016-2019 Cumulus Networks, Inc.
3 * Donald Sharp, Quentin Young
634949ae 4 *
60219659
QY
5 * This program is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License as published by the Free
7 * Software Foundation; either version 2 of the License, or (at your option)
8 * any later version.
634949ae 9 *
60219659
QY
10 * This program is distributed in the hope that it will be useful, but WITHOUT
11 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
13 * more details.
634949ae
DS
14 *
15 * You should have received a copy of the GNU General Public License along
60219659
QY
16 * with this program; see the file COPYING; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
634949ae 18 */
60219659
QY
19#ifndef __FRRLUA_H__
20#define __FRRLUA_H__
634949ae 21
fa22080d
QY
22#include <zebra.h>
23
24#ifdef HAVE_SCRIPTING
634949ae 25
9e47ee98
QY
26#include <lua.h>
27#include <lualib.h>
28#include <lauxlib.h>
634949ae 29
60219659 30#include "prefix.h"
5f98c815 31#include "frrscript.h"
60219659 32
5e244469
RW
33#ifdef __cplusplus
34extern "C" {
35#endif
36
78f1ac25
DL
37DECLARE_MTYPE(SCRIPT_RES);
38
ea6caa1f
DS
39/*
40 * gcc-10 is complaining about the wrapper function
41 * not being compatible with lua_pushstring returning
42 * a char *. Let's wrapper it here to make our life
43 * easier
44 */
45static inline void lua_pushstring_wrapper(lua_State *L, const char *str)
46{
47 (void)lua_pushstring(L, str);
48}
49
60219659 50/*
f869ab17 51 * Converts a prefix to a Lua value and pushes it on the stack.
634949ae 52 */
47dd8736 53void lua_pushprefix(lua_State *L, const struct prefix *prefix);
634949ae 54
3a3cfe47
DL
55void lua_decode_prefix(lua_State *L, int idx, struct prefix *prefix);
56
cd6ca660 57/*
f869ab17
QY
58 * Converts the Lua value at idx to a prefix.
59 *
60 * Returns:
61 * struct prefix allocated with MTYPE_TMP
62 */
63void *lua_toprefix(lua_State *L, int idx);
64
65/*
66 * Converts an interface to a Lua value and pushes it on the stack.
cd6ca660 67 */
47dd8736 68void lua_pushinterface(lua_State *L, const struct interface *ifp);
cd6ca660 69
3a3cfe47
DL
70void lua_decode_interface(lua_State *L, int idx, struct interface *ifp);
71
60219659 72/*
f869ab17
QY
73 * Converts the Lua value at idx to an interface.
74 *
75 * Returns:
76 * struct interface allocated with MTYPE_TMP. This interface is not hooked
77 * to anything, nor is it inserted in the global interface tree.
78 */
79void *lua_tointerface(lua_State *L, int idx);
80
81/*
82 * Converts an in_addr to a Lua value and pushes it on the stack.
42ae55b5 83 */
47dd8736 84void lua_pushinaddr(lua_State *L, const struct in_addr *addr);
42ae55b5 85
3a3cfe47
DL
86void lua_decode_inaddr(lua_State *L, int idx, struct in_addr *addr);
87
42ae55b5 88/*
f869ab17
QY
89 * Converts the Lua value at idx to an in_addr.
90 *
91 * Returns:
92 * struct in_addr allocated with MTYPE_TMP.
93 */
94void *lua_toinaddr(lua_State *L, int idx);
95
96/*
97 * Converts an in6_addr to a Lua value and pushes it on the stack.
42ae55b5 98 */
47dd8736 99void lua_pushin6addr(lua_State *L, const struct in6_addr *addr);
42ae55b5 100
3a3cfe47
DL
101void lua_decode_in6addr(lua_State *L, int idx, struct in6_addr *addr);
102
42ae55b5 103/*
f869ab17
QY
104 * Converts the Lua value at idx to an in6_addr.
105 *
106 * Returns:
107 * struct in6_addr allocated with MTYPE_TMP.
108 */
109void *lua_toin6addr(lua_State *L, int idx);
110
111/*
112 * Converts a time_t to a Lua value and pushes it on the stack.
42ae55b5 113 */
47dd8736 114void lua_pushtimet(lua_State *L, const time_t *time);
42ae55b5 115
3a3cfe47
DL
116void lua_decode_timet(lua_State *L, int idx, time_t *time);
117
42ae55b5 118/*
f869ab17
QY
119 * Converts the Lua value at idx to a time_t.
120 *
121 * Returns:
122 * time_t allocated with MTYPE_TMP.
123 */
124void *lua_totimet(lua_State *L, int idx);
125
126/*
127 * Converts a sockunion to a Lua value and pushes it on the stack.
60219659 128 */
47dd8736 129void lua_pushsockunion(lua_State *L, const union sockunion *su);
634949ae 130
3a3cfe47
DL
131void lua_decode_sockunion(lua_State *L, int idx, union sockunion *su);
132
eeb61724 133/*
f869ab17
QY
134 * Converts the Lua value at idx to a sockunion.
135 *
136 * Returns:
137 * sockunion allocated with MTYPE_TMP.
138 */
139void *lua_tosockunion(lua_State *L, int idx);
140
141/*
142 * Converts an int to a Lua value and pushes it on the stack.
143 */
144void lua_pushintegerp(lua_State *L, const long long *num);
145
3a3cfe47
DL
146void lua_decode_integerp(lua_State *L, int idx, long long *num);
147
f869ab17
QY
148/*
149 * Converts the Lua value at idx to an int.
150 *
151 * Returns:
152 * int allocated with MTYPE_TMP.
153 */
154void *lua_tointegerp(lua_State *L, int idx);
155
3a3cfe47
DL
156void lua_decode_stringp(lua_State *L, int idx, char *str);
157
f869ab17
QY
158/*
159 * Pop string.
160 *
161 * Sets *string to a copy of the string at the top of the stack. The copy is
162 * allocated with MTYPE_TMP and the caller is responsible for freeing it.
eeb61724 163 */
f869ab17 164void *lua_tostringp(lua_State *L, int idx);
eeb61724 165
7e058da5 166/*
6d28552d 167 * No-op decoders
7e058da5
DL
168 */
169void lua_decode_noop(lua_State *L, int idx, const void *ptr);
170
36cf58c7 171void lua_decode_integer_noop(lua_State *L, int idx, int i);
2b67227e 172
634949ae 173/*
60219659
QY
174 * Retrieve an integer from table on the top of the stack.
175 *
176 * key
177 * Key of string value in table
634949ae 178 */
60219659 179int frrlua_table_get_integer(lua_State *L, const char *key);
5e244469 180
d473bdc7
QY
181/*
182 * Exports a new table containing bindings to FRR zlog functions into the
183 * global namespace.
184 *
185 * From Lua, these functions may be accessed as:
186 *
187 * - log.debug()
188 * - log.info()
189 * - log.warn()
190 * - log.error()
191 *
192 * They take a single string argument.
193 */
194void frrlua_export_logging(lua_State *L);
195
e93f19fb
QY
196/*
197 * Dump Lua stack to a string.
198 *
199 * Return value must be freed with XFREE(MTYPE_TMP, ...);
200 */
201char *frrlua_stackdump(lua_State *L);
202
5e244469
RW
203#ifdef __cplusplus
204}
205#endif
206
fa22080d
QY
207#endif /* HAVE_SCRIPTING */
208
60219659 209#endif /* __FRRLUA_H__ */