static int handle_session_config(struct nlmsghdr *nl_hdr, struct request_hdr *nat64_hdr, struct request_session *request) { __u64 count; int error; if (nat64_is_stateless()) { log_err("SIIT doesn't have session tables."); return -EINVAL; } switch (nat64_hdr->operation) { case OP_DISPLAY: return handle_session_display(nl_hdr, request); case OP_COUNT: log_debug("Returning session count."); error = sessiondb_count(request->l4_proto, &count); if (error) return respond_error(nl_hdr, error); return respond_setcfg(nl_hdr, &count, sizeof(count)); default: log_err("Unknown operation: %d", nat64_hdr->operation); return respond_error(nl_hdr, -EINVAL); } }
int handle_session_config(struct xlator *jool, struct genl_info *info) { struct request_hdr *hdr; struct request_session *request; int error; if (xlat_is_siit()) { log_err("SIIT doesn't have session tables."); return nlcore_respond(info, -EINVAL); } hdr = get_jool_hdr(info); request = (struct request_session *)(hdr + 1); error = validate_request_size(info, sizeof(*request)); if (error) return nlcore_respond(info, error); switch (be16_to_cpu(hdr->operation)) { case OP_DISPLAY: return handle_session_display(jool->nat64.bib, info, request); case OP_COUNT: return handle_session_count(jool->nat64.bib, info, request); } log_err("Unknown operation: %u", be16_to_cpu(hdr->operation)); return nlcore_respond(info, -EINVAL); }