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); }
int handle_pool4_config(struct xlator *jool, struct genl_info *info) { struct request_hdr *hdr = get_jool_hdr(info); union request_pool4 *request = (union request_pool4 *)(hdr + 1); int error; if (xlat_is_siit()) { log_err("SIIT doesn't have pool4."); return nlcore_respond(info, -EINVAL); } error = validate_request_size(info, sizeof(*request)); if (error) return nlcore_respond(info, error); switch (hdr->operation) { case OP_FOREACH: return handle_pool4_display(jool->nat64.pool4, info, request); case OP_ADD: return handle_pool4_add(jool->nat64.pool4, info, request); case OP_UPDATE: return handle_pool4_update(jool->nat64.pool4, info, request); case OP_REMOVE: return handle_pool4_rm(jool, info, request); case OP_FLUSH: return handle_pool4_flush(jool, info, request); } log_err("Unknown operation: %u", hdr->operation); return nlcore_respond(info, -EINVAL); }
int handle_eamt_config(struct xlator *jool, struct genl_info *info) { struct request_hdr *hdr; union request_eamt *request; int error; if (xlat_is_nat64()) { log_err("Stateful NAT64 doesn't have an EAMT."); return nlcore_respond(info, -EINVAL); } hdr = get_jool_hdr(info); request = (union request_eamt *)(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_eamt_display(jool->siit.eamt, info, request); case OP_COUNT: return handle_eamt_count(jool->siit.eamt, info); case OP_ADD: error = handle_eamt_add(jool->siit.eamt, request); break; case OP_REMOVE: error = handle_eamt_rm(jool->siit.eamt, request); break; case OP_FLUSH: error = handle_eamt_flush(jool->siit.eamt); break; default: log_err("Unknown operation: %u", be16_to_cpu(hdr->operation)); error = -EINVAL; } return nlcore_respond(info, error); }