Loading drivers/platform/msm/ipa/ipa_v3/ipa_qmi_service.c +15 −3 Original line number Diff line number Diff line Loading @@ -1335,13 +1335,25 @@ int ipa3_qmi_filter_notify_send( return -EINVAL; } if (req->rule_id_ex_len == 0) { IPAWANDBG(" delete UL filter rule for pipe %d\n", req->source_pipe_index); } else if (req->rule_id_ex_len > QMI_IPA_MAX_FILTERS_EX2_V01) { IPAWANERR(" UL filter rule for pipe %d exceed max (%u)\n", req->source_pipe_index, req->rule_id_ex_len); return -EINVAL; } if (req->install_status != IPA_QMI_RESULT_SUCCESS_V01) { IPAWANERR(" UL filter rule for pipe %d install_status = %d\n", req->source_pipe_index, req->install_status); return -EINVAL; } else if (req->rule_id_valid != 1) { IPAWANERR(" UL filter rule for pipe %d rule_id_valid = %d\n", req->source_pipe_index, req->rule_id_valid); } else if ((req->rule_id_valid != 1) && (req->rule_id_ex_valid != 1)) { IPAWANERR(" UL filter rule for pipe %d rule_id_valid = %d/%d\n", req->source_pipe_index, req->rule_id_valid, req->rule_id_ex_valid); return -EINVAL; } else if (req->source_pipe_index >= ipa3_ctx->ipa_num_pipes) { IPAWANDBG( Loading drivers/platform/msm/ipa/ipa_v3/ipa_qmi_service.h +3 −0 Original line number Diff line number Diff line Loading @@ -116,6 +116,9 @@ struct ipa3_qmi_context { int num_ipa_offload_connection; struct ipa_offload_connection_val ipa_offload_cache[QMI_IPA_MAX_FILTERS_V01]; uint8_t ul_firewall_indices_list_valid; uint32_t ul_firewall_indices_list_len; uint32_t ul_firewall_indices_list[QMI_IPA_MAX_FILTERS_V01]; }; struct ipa3_rmnet_mux_val { Loading drivers/platform/msm/ipa/ipa_v3/ipa_qmi_service_v01.c +1 −1 Original line number Diff line number Diff line Loading @@ -2304,7 +2304,7 @@ struct qmi_elem_info ipa3_fltr_installed_notif_req_msg_data_v01_ei[] = { { .data_type = QMI_DATA_LEN, .elem_len = 1, .elem_size = sizeof(uint8_t), .elem_size = sizeof(uint32_t), .is_array = NO_ARRAY, .tlv_type = 0x19, .offset = offsetof( Loading drivers/platform/msm/ipa/ipa_v3/rmnet_ipa.c +35 −0 Original line number Diff line number Diff line Loading @@ -691,6 +691,41 @@ int ipa3_copy_ul_filter_rule_to_ipa(struct ipa_install_fltr_rule_req_msg_v01 } } } if (rule_req->ul_firewall_indices_list_valid) { IPAWANDBG("Receive ul_firewall_indices_list_len = (%d)", rule_req->ul_firewall_indices_list_len); if (rule_req->ul_firewall_indices_list_len > rmnet_ipa3_ctx->num_q6_rules) { IPAWANERR("UL rule indices are not valid: (%d/%d)\n", rule_req->xlat_filter_indices_list_len, rmnet_ipa3_ctx->num_q6_rules); goto failure; } ipa3_qmi_ctx->ul_firewall_indices_list_valid = 1; ipa3_qmi_ctx->ul_firewall_indices_list_len = rule_req->ul_firewall_indices_list_len; for (i = 0; i < rule_req->ul_firewall_indices_list_len; i++) { ipa3_qmi_ctx->ul_firewall_indices_list[i] = rule_req->ul_firewall_indices_list[i]; } for (i = 0; i < rule_req->ul_firewall_indices_list_len; i++) { if (rule_req->ul_firewall_indices_list[i] >= rmnet_ipa3_ctx->num_q6_rules) { IPAWANERR("UL rule idx is wrong: %d\n", rule_req->ul_firewall_indices_list[i]); goto failure; } else { ipa3_qmi_ctx->q6_ul_filter_rule [rule_req->ul_firewall_indices_list[i]] .replicate_needed = 1; } } } goto success; failure: Loading include/uapi/linux/msm_ipa.h +2 −0 Original line number Diff line number Diff line Loading @@ -1962,6 +1962,8 @@ struct ipa_ioc_ext_intf_prop { uint8_t is_xlat_rule; uint32_t rule_id; uint8_t is_rule_hashable; #define IPA_V6_UL_WL_FIREWALL_HANDLE uint8_t replicate_needed; }; /** Loading Loading
drivers/platform/msm/ipa/ipa_v3/ipa_qmi_service.c +15 −3 Original line number Diff line number Diff line Loading @@ -1335,13 +1335,25 @@ int ipa3_qmi_filter_notify_send( return -EINVAL; } if (req->rule_id_ex_len == 0) { IPAWANDBG(" delete UL filter rule for pipe %d\n", req->source_pipe_index); } else if (req->rule_id_ex_len > QMI_IPA_MAX_FILTERS_EX2_V01) { IPAWANERR(" UL filter rule for pipe %d exceed max (%u)\n", req->source_pipe_index, req->rule_id_ex_len); return -EINVAL; } if (req->install_status != IPA_QMI_RESULT_SUCCESS_V01) { IPAWANERR(" UL filter rule for pipe %d install_status = %d\n", req->source_pipe_index, req->install_status); return -EINVAL; } else if (req->rule_id_valid != 1) { IPAWANERR(" UL filter rule for pipe %d rule_id_valid = %d\n", req->source_pipe_index, req->rule_id_valid); } else if ((req->rule_id_valid != 1) && (req->rule_id_ex_valid != 1)) { IPAWANERR(" UL filter rule for pipe %d rule_id_valid = %d/%d\n", req->source_pipe_index, req->rule_id_valid, req->rule_id_ex_valid); return -EINVAL; } else if (req->source_pipe_index >= ipa3_ctx->ipa_num_pipes) { IPAWANDBG( Loading
drivers/platform/msm/ipa/ipa_v3/ipa_qmi_service.h +3 −0 Original line number Diff line number Diff line Loading @@ -116,6 +116,9 @@ struct ipa3_qmi_context { int num_ipa_offload_connection; struct ipa_offload_connection_val ipa_offload_cache[QMI_IPA_MAX_FILTERS_V01]; uint8_t ul_firewall_indices_list_valid; uint32_t ul_firewall_indices_list_len; uint32_t ul_firewall_indices_list[QMI_IPA_MAX_FILTERS_V01]; }; struct ipa3_rmnet_mux_val { Loading
drivers/platform/msm/ipa/ipa_v3/ipa_qmi_service_v01.c +1 −1 Original line number Diff line number Diff line Loading @@ -2304,7 +2304,7 @@ struct qmi_elem_info ipa3_fltr_installed_notif_req_msg_data_v01_ei[] = { { .data_type = QMI_DATA_LEN, .elem_len = 1, .elem_size = sizeof(uint8_t), .elem_size = sizeof(uint32_t), .is_array = NO_ARRAY, .tlv_type = 0x19, .offset = offsetof( Loading
drivers/platform/msm/ipa/ipa_v3/rmnet_ipa.c +35 −0 Original line number Diff line number Diff line Loading @@ -691,6 +691,41 @@ int ipa3_copy_ul_filter_rule_to_ipa(struct ipa_install_fltr_rule_req_msg_v01 } } } if (rule_req->ul_firewall_indices_list_valid) { IPAWANDBG("Receive ul_firewall_indices_list_len = (%d)", rule_req->ul_firewall_indices_list_len); if (rule_req->ul_firewall_indices_list_len > rmnet_ipa3_ctx->num_q6_rules) { IPAWANERR("UL rule indices are not valid: (%d/%d)\n", rule_req->xlat_filter_indices_list_len, rmnet_ipa3_ctx->num_q6_rules); goto failure; } ipa3_qmi_ctx->ul_firewall_indices_list_valid = 1; ipa3_qmi_ctx->ul_firewall_indices_list_len = rule_req->ul_firewall_indices_list_len; for (i = 0; i < rule_req->ul_firewall_indices_list_len; i++) { ipa3_qmi_ctx->ul_firewall_indices_list[i] = rule_req->ul_firewall_indices_list[i]; } for (i = 0; i < rule_req->ul_firewall_indices_list_len; i++) { if (rule_req->ul_firewall_indices_list[i] >= rmnet_ipa3_ctx->num_q6_rules) { IPAWANERR("UL rule idx is wrong: %d\n", rule_req->ul_firewall_indices_list[i]); goto failure; } else { ipa3_qmi_ctx->q6_ul_filter_rule [rule_req->ul_firewall_indices_list[i]] .replicate_needed = 1; } } } goto success; failure: Loading
include/uapi/linux/msm_ipa.h +2 −0 Original line number Diff line number Diff line Loading @@ -1962,6 +1962,8 @@ struct ipa_ioc_ext_intf_prop { uint8_t is_xlat_rule; uint32_t rule_id; uint8_t is_rule_hashable; #define IPA_V6_UL_WL_FIREWALL_HANDLE uint8_t replicate_needed; }; /** Loading