Exemplo n.º 1
0
static void __init ascii_init(void)
{
	c_fd = stdout;
	c_format = strdup("$(element:name) $(attr:rx:bytes) $(attr:tx:bytes) " \
	    "$(attr:rx:packets) $(attr:tx:packets)\\n");

	output_register(&format_ops);
}
Exemplo n.º 2
0
// Called from C to register all the outputs after the lua file was executed
int addon_output_register_all(struct addon *addon) {

	lua_getfield(addon->L, LUA_REGISTRYINDEX, ADDON_OUTPUTS_TABLE); // Stack : outputs

	lua_pushnil(addon->L); // Stack : outputs, nil
	while (lua_next(addon->L, -2)) { // Stack : outputs, name, output

		// Key is the name of the output
		const char *name = lua_tostring(addon->L, -2);
		
		pomlog(POMLOG_DEBUG "Registering addon output %s ...", name);

		lua_getfield(addon->L, -1, "__descr"); // Stack : outputs, name, output, __descr
		const char *descr = lua_tostring(addon->L, -1);
		lua_pop(addon->L, 1);

		struct output_reg_info *output_info = lua_newuserdata(addon->L, sizeof(struct output_reg_info)); // Stack : outputs, name, output, output_info
		memset(output_info, 0, sizeof(struct output_reg_info));

		// Add the output_reg metatable
		luaL_getmetatable(addon->L, ADDON_OUTPUT_REG_METATABLE); // Stack : outputs, name, output, output_info, metatable
		lua_setmetatable(addon->L, -2); // Stack : outputs, name, output, output_info
	
		output_info->name = strdup(name);
		if (!output_info->name)
			addon_oom(addon->L, strlen(name) + 1);

		output_info->description = strdup(descr);
		if (!output_info->description) {
			free(output_info->name);
			addon_oom(addon->L, strlen(descr) + 1);
		}

		output_info->mod = addon->mod;
		output_info->init = addon_output_init;
		output_info->open = addon_output_open;
		output_info->close = addon_output_close;
		output_info->cleanup = addon_output_cleanup;

		if (output_register(output_info) != POM_OK)
			luaL_error(addon->L, "Error while registering addon input %s", name);

		// Add the info to the class, we need to keep a copy of that so lua is a perfect location to store it
		lua_setfield(addon->L, -2, "__info"); // Stack : outputs, name, output
		lua_pop(addon->L, 1); // Stack : outputs, name

		pomlog(POMLOG_DEBUG "Registered addon output %s", name);
	}

	lua_pop(addon->L, 1); // Stack : empty

	return 0;
}
Exemplo n.º 3
0
static int output_inject_mod_register(struct mod_reg *mod) {

	static struct output_reg_info output_inject;
	memset(&output_inject, 0, sizeof(struct output_reg_info));
	output_inject.name = "inject";
	output_inject.description = "Inject packets on an interface";
	output_inject.mod = mod;

	output_inject.init = output_inject_init;
	output_inject.open = output_inject_open;
	output_inject.close = output_inject_close;
	output_inject.cleanup = output_inject_cleanup;

	return output_register(&output_inject);

}
Exemplo n.º 4
0
int output_tap_mod_register(struct mod_reg *mod) {


	static struct output_reg_info output_tap = { 0 };
	output_tap.name = "tap";
	output_tap.description = "Send packets to a virtual tap interface";
	output_tap.mod = mod;

	output_tap.init = output_tap_init;
	output_tap.open = output_tap_open;
	output_tap.close = output_tap_close;
	output_tap.cleanup = output_tap_cleanup;

	static struct addon_plugin_pload_reg addon_tap = { 0 };
	addon_tap.name = "tap";
	addon_tap.mod = mod;

	addon_tap.open = output_tap_open;
	addon_tap.close = output_tap_close;

	static struct addon_pload_param_reg params[] = {
		{ "ifname", "string" },
		{ "persistent", "bool" },
		{ "filter", "string" },
		{ 0 }
	};

	addon_tap.pload_params = params;

	if (output_register(&output_tap) != POM_OK ||
		addon_plugin_pload_register(&addon_tap) != POM_OK) {
		output_tap_mod_unregister();
		return POM_ERR;
	}

	return POM_OK;
}
Exemplo n.º 5
0
int output_file_mod_register(struct mod_reg *mod) {


	static struct output_reg_info output_file = { 0 };
	output_file.name = "file";
	output_file.api_ver = OUTPUT_API_VER;
	output_file.mod = mod;

	output_file.init = output_file_init;
	output_file.open = output_file_open;
	output_file.close = output_file_close;
	output_file.cleanup = output_file_cleanup;

	static struct addon_plugin_pload_reg addon_file = { 0 };
	addon_file.name = "file";
	addon_file.mod = mod;

	addon_file.pload_open = addon_file_pload_open;
	addon_file.pload_write = output_file_pload_write;
	addon_file.pload_close = output_file_pload_close;

	static struct addon_pload_param_reg params[] = {
		{ "filename", "string" },
		{ 0 }
	};

	addon_file.pload_params = params;


	if (output_register(&output_file) != POM_OK ||
		addon_plugin_pload_register(&addon_file) != POM_OK) {
		output_file_mod_unregister();
		return POM_ERR;
	}

	return POM_OK;
}