Example #1
0
static int handle_eamt_display(struct nlmsghdr *nl_hdr, union request_eamt *request)
{
	struct nl_buffer *buffer;
	struct ipv4_prefix *prefix4;
	int error;

	log_debug("Sending EAMT to userspace.");

	buffer = nlbuffer_create(nl_socket, nl_hdr);
	if (!buffer)
		return respond_error(nl_hdr, -ENOMEM);

	prefix4 = request->display.prefix4_set ? &request->display.prefix4 : NULL;
	error = eamt_foreach(eam_entry_to_userspace, buffer, prefix4);
	error = (error >= 0) ? nlbuffer_close(buffer, error) : respond_error(nl_hdr, error);

	kfree(buffer);
	return error;
}
Example #2
0
File: eam.c Project: NICMx/Jool
static int handle_eamt_display(struct eam_table *eamt, struct genl_info *info,
		union request_eamt *request)
{
	struct nlcore_buffer buffer;
	struct ipv4_prefix *prefix4;
	int error;

	log_debug("Sending EAMT to userspace.");

	error = nlbuffer_init_response(&buffer, info, nlbuffer_response_max_size());
	if (error)
		nlcore_respond(info, error);

	prefix4 = request->display.prefix4_set ? &request->display.prefix4 : NULL;
	error = eamt_foreach(eamt, eam_entry_to_userspace, &buffer, prefix4);
	nlbuffer_set_pending_data(&buffer, error > 0);
	error = (error >= 0)
			? nlbuffer_send(info, &buffer)
			: nlcore_respond(info, error);

	nlbuffer_clean(&buffer);
	return error;
}