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; }
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; }