Loading drivers/platform/msm/ipa/ipa_v3/rmnet_ipa.c +21 −10 Original line number Diff line number Diff line Loading @@ -3023,7 +3023,8 @@ static inline int rmnet_ipa3_delete_lan_client_info /* Reset the client info before sending the message. */ memset(lan_client, 0, sizeof(struct ipa_lan_client)); lan_client->client_idx = -1; /* Decrement the number of clients. */ rmnet_ipa3_ctx->tether_device[device_type].num_clients--; } return 0; } Loading Loading @@ -3097,7 +3098,7 @@ int rmnet_ipa3_set_lan_client_info( rmnet_ipa3_ctx->tether_device[data->device_type].num_clients++; IPAWANDBG("Set the lan client info: %d, %d, %d\n", IPAWANDBG("Set the lan client info: Id:%d, Source Pipe:%d, num:%d\n", lan_client->client_idx, rmnet_ipa3_ctx->tether_device[data->device_type].ul_src_pipe, rmnet_ipa3_ctx->tether_device[data->device_type].num_clients); Loading Loading @@ -3292,6 +3293,22 @@ int rmnet_ipa3_query_per_client_stats( mutex_lock(&rmnet_ipa3_ctx->per_client_stats_guard); /* Check if Source pipe is valid. */ if (rmnet_ipa3_ctx->tether_device [data->device_type].ul_src_pipe == -1) { IPAWANERR("Device not initialized: %d\n", data->device_type); mutex_unlock(&rmnet_ipa3_ctx->per_client_stats_guard); return -EINVAL; } /* Check if we have clients connected. */ if (rmnet_ipa3_ctx->tether_device[data->device_type].num_clients == 0) { IPAWANERR("No clients connected: %d\n", data->device_type); mutex_unlock(&rmnet_ipa3_ctx->per_client_stats_guard); return -EINVAL; } /* Check if num_clients is valid. */ if (data->num_clients == 1) { /* Check if the client info is valid.*/ lan_clnt_idx1 = rmnet_ipa3_get_lan_client_info( Loading Loading @@ -3375,19 +3392,13 @@ int rmnet_ipa3_query_per_client_stats( && i < IPA_MAX_NUM_HW_PATH_CLIENTS; i++) { /* Subtract the header bytes from the DL bytes. */ data->client_info[i].ipv4_rx_bytes = (resp->per_client_stats_list[i].num_dl_ipv4_bytes) - (rmnet_ipa3_ctx-> tether_device[data->device_type].hdr_len * resp->per_client_stats_list[i].num_dl_ipv4_pkts); resp->per_client_stats_list[i].num_dl_ipv4_bytes; /* UL header bytes are subtracted by Q6. */ data->client_info[i].ipv4_tx_bytes = resp->per_client_stats_list[i].num_ul_ipv4_bytes; /* Subtract the header bytes from the DL bytes. */ data->client_info[i].ipv6_rx_bytes = (resp->per_client_stats_list[i].num_dl_ipv6_bytes) - (rmnet_ipa3_ctx-> tether_device[data->device_type].hdr_len * resp->per_client_stats_list[i].num_dl_ipv6_pkts); resp->per_client_stats_list[i].num_dl_ipv6_bytes; /* UL header bytes are subtracted by Q6. */ data->client_info[i].ipv6_tx_bytes = resp->per_client_stats_list[i].num_ul_ipv6_bytes; Loading include/uapi/linux/rmnet_ipa_fd_ioctl.h +1 −0 Original line number Diff line number Diff line Loading @@ -215,6 +215,7 @@ struct wan_ioctl_query_per_client_stats { #define WAN_IOC_ADD_UL_FLT_RULE _IOWR(WAN_IOC_MAGIC, \ WAN_IOCTL_ADD_UL_FLT_RULE, \ struct ipa_configure_ul_firewall_rules_req_msg_v01 *) #define WAN_IOC_ENABLE_PER_CLIENT_STATS _IOWR(WAN_IOC_MAGIC, \ WAN_IOCTL_ENABLE_PER_CLIENT_STATS, \ bool *) Loading Loading
drivers/platform/msm/ipa/ipa_v3/rmnet_ipa.c +21 −10 Original line number Diff line number Diff line Loading @@ -3023,7 +3023,8 @@ static inline int rmnet_ipa3_delete_lan_client_info /* Reset the client info before sending the message. */ memset(lan_client, 0, sizeof(struct ipa_lan_client)); lan_client->client_idx = -1; /* Decrement the number of clients. */ rmnet_ipa3_ctx->tether_device[device_type].num_clients--; } return 0; } Loading Loading @@ -3097,7 +3098,7 @@ int rmnet_ipa3_set_lan_client_info( rmnet_ipa3_ctx->tether_device[data->device_type].num_clients++; IPAWANDBG("Set the lan client info: %d, %d, %d\n", IPAWANDBG("Set the lan client info: Id:%d, Source Pipe:%d, num:%d\n", lan_client->client_idx, rmnet_ipa3_ctx->tether_device[data->device_type].ul_src_pipe, rmnet_ipa3_ctx->tether_device[data->device_type].num_clients); Loading Loading @@ -3292,6 +3293,22 @@ int rmnet_ipa3_query_per_client_stats( mutex_lock(&rmnet_ipa3_ctx->per_client_stats_guard); /* Check if Source pipe is valid. */ if (rmnet_ipa3_ctx->tether_device [data->device_type].ul_src_pipe == -1) { IPAWANERR("Device not initialized: %d\n", data->device_type); mutex_unlock(&rmnet_ipa3_ctx->per_client_stats_guard); return -EINVAL; } /* Check if we have clients connected. */ if (rmnet_ipa3_ctx->tether_device[data->device_type].num_clients == 0) { IPAWANERR("No clients connected: %d\n", data->device_type); mutex_unlock(&rmnet_ipa3_ctx->per_client_stats_guard); return -EINVAL; } /* Check if num_clients is valid. */ if (data->num_clients == 1) { /* Check if the client info is valid.*/ lan_clnt_idx1 = rmnet_ipa3_get_lan_client_info( Loading Loading @@ -3375,19 +3392,13 @@ int rmnet_ipa3_query_per_client_stats( && i < IPA_MAX_NUM_HW_PATH_CLIENTS; i++) { /* Subtract the header bytes from the DL bytes. */ data->client_info[i].ipv4_rx_bytes = (resp->per_client_stats_list[i].num_dl_ipv4_bytes) - (rmnet_ipa3_ctx-> tether_device[data->device_type].hdr_len * resp->per_client_stats_list[i].num_dl_ipv4_pkts); resp->per_client_stats_list[i].num_dl_ipv4_bytes; /* UL header bytes are subtracted by Q6. */ data->client_info[i].ipv4_tx_bytes = resp->per_client_stats_list[i].num_ul_ipv4_bytes; /* Subtract the header bytes from the DL bytes. */ data->client_info[i].ipv6_rx_bytes = (resp->per_client_stats_list[i].num_dl_ipv6_bytes) - (rmnet_ipa3_ctx-> tether_device[data->device_type].hdr_len * resp->per_client_stats_list[i].num_dl_ipv6_pkts); resp->per_client_stats_list[i].num_dl_ipv6_bytes; /* UL header bytes are subtracted by Q6. */ data->client_info[i].ipv6_tx_bytes = resp->per_client_stats_list[i].num_ul_ipv6_bytes; Loading
include/uapi/linux/rmnet_ipa_fd_ioctl.h +1 −0 Original line number Diff line number Diff line Loading @@ -215,6 +215,7 @@ struct wan_ioctl_query_per_client_stats { #define WAN_IOC_ADD_UL_FLT_RULE _IOWR(WAN_IOC_MAGIC, \ WAN_IOCTL_ADD_UL_FLT_RULE, \ struct ipa_configure_ul_firewall_rules_req_msg_v01 *) #define WAN_IOC_ENABLE_PER_CLIENT_STATS _IOWR(WAN_IOC_MAGIC, \ WAN_IOCTL_ENABLE_PER_CLIENT_STATS, \ bool *) Loading