From 064186dd0f6768b8ffe6c8d648137111c5ceb0b5 Mon Sep 17 00:00:00 2001 From: Subash Abhinov Kasiviswanathan Date: Wed, 13 Oct 2021 00:06:08 -0700 Subject: [PATCH] perf: Initial commit Add the base changes for rmnet_perf. CRs-Fixed: 3012130 Change-Id: Ie4d33ebe9457a06661440ea46bd09694b1c44b4c Signed-off-by: Subash Abhinov Kasiviswanathan --- datarmnet_ext_dlkm_vendor_board.mk | 1 + datarmnet_ext_dlkm_vendor_product.mk | 1 + perf/Android.mk | 52 ++++++++++++++++++++++++++++ perf/Kbuild | 5 +++ perf/Kconfig | 11 ++++++ perf/Makefile | 17 +++++++++ perf/rmnet_perf_main.c | 51 +++++++++++++++++++++++++++ 7 files changed, 138 insertions(+) create mode 100644 perf/Android.mk create mode 100644 perf/Kbuild create mode 100644 perf/Kconfig create mode 100644 perf/Makefile create mode 100644 perf/rmnet_perf_main.c diff --git a/datarmnet_ext_dlkm_vendor_board.mk b/datarmnet_ext_dlkm_vendor_board.mk index dcd60e46c8..9283c57460 100644 --- a/datarmnet_ext_dlkm_vendor_board.mk +++ b/datarmnet_ext_dlkm_vendor_board.mk @@ -9,6 +9,7 @@ ifneq ($(TARGET_BOARD_AUTO),true) ifeq ($(call is-board-platform-in-list,$(DATA_OFFLOAD_DLKM_BOARD_PLATFORMS_LIST)),true) BOARD_VENDOR_KERNEL_MODULES += $(KERNEL_MODULES_OUT)/rmnet_offload.ko BOARD_VENDOR_KERNEL_MODULES += $(KERNEL_MODULES_OUT)/rmnet_perf_tether.ko +BOARD_VENDOR_KERNEL_MODULES += $(KERNEL_MODULES_OUT)/rmnet_perf.ko endif ifeq ($(call is-board-platform-in-list,$(DATA_SHS_DLKM_BOARD_PLATFORMS_LIST)),true) BOARD_VENDOR_KERNEL_MODULES += $(KERNEL_MODULES_OUT)/rmnet_shs.ko diff --git a/datarmnet_ext_dlkm_vendor_product.mk b/datarmnet_ext_dlkm_vendor_product.mk index a74cf00e28..fd1927c625 100644 --- a/datarmnet_ext_dlkm_vendor_product.mk +++ b/datarmnet_ext_dlkm_vendor_product.mk @@ -2,3 +2,4 @@ PRODUCT_PACKAGES += rmnet_offload.ko PRODUCT_PACKAGES += rmnet_shs.ko PRODUCT_PACKAGES += rmnet_wlan.ko PRODUCT_PACKAGES += rmnet_perf_tether.ko +PRODUCT_PACKAGES += rmnet_perf.ko diff --git a/perf/Android.mk b/perf/Android.mk new file mode 100644 index 0000000000..0737473d19 --- /dev/null +++ b/perf/Android.mk @@ -0,0 +1,52 @@ +ifneq ($(TARGET_BOARD_AUTO),true) +ifneq ($(TARGET_BOARD_PLATFORM),qssi) + +RMNET_PERF_DLKM_PLATFORMS_LIST := taro +RMNET_PERF_DLKM_PLATFORMS_LIST += kalama + +ifeq ($(call is-board-platform-in-list, $(RMNET_PERF_DLKM_PLATFORMS_LIST)),true) +LOCAL_PATH := $(call my-dir) +include $(CLEAR_VARS) + +LOCAL_MODULE_PATH := $(KERNEL_MODULES_OUT) + +LOCAL_MODULE := rmnet_perf.ko +LOCAL_SRC_FILES := $(wildcard $(LOCAL_PATH)/**/*) $(wildcard $(LOCAL_PATH)/*) + +#path from build top to the core directory +DATARMNET_CORE_PATH := datarmnet/core +RMNET_CORE_PATH := vendor/qcom/opensource/$(DATARMNET_CORE_PATH) +DLKM_DIR := $(TOP)/device/qcom/common/dlkm +#absolute path to the build directory. Can't use $(TOP) here since +#that resolves to ., and we pass this to Kbuild, where . is different +RMNET_CORE_INC_DIR := $(abspath $(RMNET_CORE_PATH)) + +#pass variables down to Kbuild environment +KBUILD_OPTIONS := RMNET_CORE_INC_DIR=$(RMNET_CORE_INC_DIR) +KBUILD_OPTIONS += RMNET_CORE_PATH=$(RMNET_CORE_PATH) +KBUILD_OPTIONS += DATARMNET_CORE_PATH=$(DATARMNET_CORE_PATH) +KBUILD_OPTIONS_GKI := RMNET_CORE_INC_DIR=$(RMNET_CORE_INC_DIR) +KBUILD_OPTIONS_GKI += RMNET_CORE_PATH=$(RMNET_CORE_PATH)/gki + +#rmnet shs path +DATARMNET_SHS_PATH := datarmnet-ext/shs +RMNET_SHS_PATH := vendor/qcom/opensource/$(DATARMNET_SHS_PATH) +RMNET_SHS_INC_DIR := $(abspath $(RMNET_SHS_PATH)) + +#Must be built after the core rmnet and shs module +KBUILD_OPTIONS += RMNET_SHS_INC_DIR=$(RMNET_SHS_INC_DIR) +KBUILD_OPTIONS += RMNET_SHS_PATH=$(RMNET_SHS_PATH) +KBUILD_OPTIONS += DATARMNET_SHS_PATH=$(DATARMNET_SHS_PATH) +KBUILD_OPTIONS_GKI += RMNET_SHS_INC_DIR=$(RMNET_SHS_INC_DIR) +KBUILD_OPTIONS_GKI += RMNET_SHS_PATH=$(RMNET_SHS_PATH)/gki + +LOCAL_ADDITIONAL_DEPENDENCIES := $(TARGET_OUT_INTERMEDIATES)/DLKM_OBJ/$(RMNET_CORE_PATH)/rmnet_core.ko +LOCAL_ADDITIONAL_DEPENDENCIES_GKI := $(TARGET_OUT_INTERMEDIATES)/DLKM_OBJ/$(RMNET_CORE_PATH)/gki/rmnet_core.ko +LOCAL_ADDITIONAL_DEPENDENCIES += $(TARGET_OUT_INTERMEDIATES)/DLKM_OBJ/$(RMNET_SHS_PATH)/rmnet_shs.ko +LOCAL_ADDITIONAL_DEPENDENCIES_GKI += $(TARGET_OUT_INTERMEDIATES)/DLKM_OBJ/$(RMNET_SHS_PATH)/gki/rmnet_shs.ko + +include $(DLKM_DIR)/Build_external_kernelmodule.mk + +endif #End of check for target +endif #End of Check for qssi target +endif #End of check for AUTO Target diff --git a/perf/Kbuild b/perf/Kbuild new file mode 100644 index 0000000000..096f66f286 --- /dev/null +++ b/perf/Kbuild @@ -0,0 +1,5 @@ +obj-m += rmnet_perf.o +#Need core headers +ccflags-y := -I$(RMNET_CORE_INC_DIR) \ + $(call cc-option,-Wno-misleading-indentation) +rmnet_perf-y := rmnet_perf_main.o diff --git a/perf/Kconfig b/perf/Kconfig new file mode 100644 index 0000000000..c25d92c70d --- /dev/null +++ b/perf/Kconfig @@ -0,0 +1,11 @@ +# +# RMNET_PERF driver +# + +menuconfig RMNET_PERF + tristate "Rmnet perf support" + default m + depends on RMNET_CORE + depends on RMNET_SHS + ---help--- + Performance support for the RmNet driver diff --git a/perf/Makefile b/perf/Makefile new file mode 100644 index 0000000000..33b7f2caa5 --- /dev/null +++ b/perf/Makefile @@ -0,0 +1,17 @@ +#By default build for CLD +RMNET_PERF_SELECT := CONFIG_RMNET_PERF=m +KBUILD_OPTIONS += $(RMNET_PERF_SELECT) +KBUILD_OPTIONS += $(KBUILD_EXTRA) # Extra config if any +KBUILD_EXTRA_SYMBOLS := $(M)/../../$(DATARMNET_CORE_PATH)/Module.symvers +KBUILD_EXTRA_SYMBOLS += $(M)/../../$(DATARMNET_SHS_PATH)/Module.symvers + +M ?= $(shell pwd) + +all: + $(MAKE) -C $(KERNEL_SRC) M=$(M) modules $(KBUILD_OPTIONS) $(KBUILD_EXTRA_SYMBOLS) + +modules_install: + $(MAKE) INSTALL_MOD_STRIP=1 -C $(KERNEL_SRC) M=$(M) modules_install + +clean: + $(MAKE) -C $(KERNEL_SRC) M=$(M) clean diff --git a/perf/rmnet_perf_main.c b/perf/rmnet_perf_main.c new file mode 100644 index 0000000000..435c9579d1 --- /dev/null +++ b/perf/rmnet_perf_main.c @@ -0,0 +1,51 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* Copyright (c) 2021-2022 Qualcomm Innovation Center, Inc. All rights reserved. + * + * RMNET PERF framework + * + */ +#include +#include +#include +#include +#include +#include +MODULE_LICENSE("\x47\x50\x4c\x20\x76\x32");extern int(*rmnet_perf_ingress_hook1) +(struct sk_buff*DATARMNET543491eb0f);extern void(*rmnet_perf_egress_hook1)( +struct sk_buff*DATARMNET543491eb0f); +#define DATARMNETf241a4b20f (0xe07+6616-0x2624) +static inline bool DATARMNETe1ef3edea2(struct udphdr*DATARMNETa1abb4897c){return + be16_to_cpu(DATARMNETa1abb4897c->source)==DATARMNETf241a4b20f||be16_to_cpu( +DATARMNETa1abb4897c->dest)==DATARMNETf241a4b20f;}static bool DATARMNET77ab42949f +(struct sk_buff*DATARMNET543491eb0f){u8*DATARMNET352416e828,DATARMNETd9bda61912; +struct udphdr*DATARMNETa1abb4897c;DATARMNETa1abb4897c=udp_hdr( +DATARMNET543491eb0f);if(!DATARMNETe1ef3edea2(DATARMNETa1abb4897c))return false; +if(be16_to_cpu(DATARMNETa1abb4897c->len)data)+sizeof(struct +udphdr),(0xd26+209-0xdf6),&DATARMNETd9bda61912);if(!DATARMNET352416e828)return +false;return((*DATARMNET352416e828)&(0xbf7+4869-0x1e3c))==(0xbf7+4869-0x1e3c);} +int DATARMNETee9214ce9b(struct sk_buff*DATARMNET543491eb0f){if( +DATARMNET543491eb0f->protocol==htons(ETH_P_IP)){if(ip_hdr(DATARMNET543491eb0f)-> +protocol!=IPPROTO_UDP)return-EINVAL;if(DATARMNET77ab42949f(DATARMNET543491eb0f)) +goto DATARMNET606558916b;return-EINVAL;}if(DATARMNET543491eb0f->protocol==htons( +ETH_P_IPV6)){if(ipv6_hdr(DATARMNET543491eb0f)->nexthdr!=IPPROTO_UDP)return- +EINVAL;if(DATARMNET77ab42949f(DATARMNET543491eb0f))goto DATARMNET606558916b;} +return-EINVAL;DATARMNET606558916b:DATARMNET543491eb0f->hash=(0xd2d+202-0xdf7); +DATARMNET543491eb0f->sw_hash=(0xd26+209-0xdf6);return(0xd2d+202-0xdf7);}void +DATARMNET05c4bf8af9(struct sk_buff*DATARMNET543491eb0f){if(DATARMNET543491eb0f-> +protocol==htons(ETH_P_IP)){if(ip_hdr(DATARMNET543491eb0f)->protocol!=IPPROTO_UDP +)return;if(DATARMNET77ab42949f(DATARMNET543491eb0f))goto DATARMNETb261f33b7b;}if +(DATARMNET543491eb0f->protocol==htons(ETH_P_IPV6)){if(ipv6_hdr( +DATARMNET543491eb0f)->nexthdr!=IPPROTO_UDP)return;if(DATARMNET77ab42949f( +DATARMNET543491eb0f))goto DATARMNETb261f33b7b;}return;DATARMNETb261f33b7b: +DATARMNET543491eb0f->priority=55834;}void DATARMNET49c17a32bc(void){ +rcu_assign_pointer(rmnet_perf_ingress_hook1,DATARMNETee9214ce9b); +rcu_assign_pointer(rmnet_perf_egress_hook1,DATARMNET05c4bf8af9);}void +DATARMNET41e8cc085c(void){rcu_assign_pointer(rmnet_perf_ingress_hook1,NULL); +rcu_assign_pointer(rmnet_perf_egress_hook1,NULL);}static int __init +DATARMNET63abbdc3d3(void){pr_info("%s(): Loading\n",__func__); +DATARMNET49c17a32bc();return(0xd2d+202-0xdf7);}static void __exit +DATARMNETa343229e33(void){DATARMNET41e8cc085c();pr_info( +"\x25\x73\x28\x29\x3a\x20\x65\x78\x69\x74\x69\x6e\x67" "\n",__func__);} +module_init(DATARMNET63abbdc3d3);module_exit(DATARMNETa343229e33);