Quellcode durchsuchen

Add 'qcom/opensource/datarmnet-ext/' from commit 'e7a27480ae7c8dbc5508a8dcfa69c5628d3afe2d'

git-subtree-dir: qcom/opensource/datarmnet-ext
git-subtree-mainline: 16648ad2dfcabd6a8b5be8d679b8c48c9011806e
git-subtree-split: e7a27480ae7c8dbc5508a8dcfa69c5628d3afe2d
Change-Id:
repo: https://git.codelinaro.org/clo/la/platform/vendor/qcom/opensource/datarmnet-ext
tag: LA.VENDOR.14.3.0.r1-17300-lanai.QSSI15.0
David Wronek vor 5 Monaten
Ursprung
Commit
2d61911ef6
100 geänderte Dateien mit 9263 neuen und 0 gelöschten Zeilen
  1. 40 0
      qcom/opensource/datarmnet-ext/aps/Android.mk
  2. 14 0
      qcom/opensource/datarmnet-ext/aps/BUILD.bazel
  3. 6 0
      qcom/opensource/datarmnet-ext/aps/Kbuild
  4. 9 0
      qcom/opensource/datarmnet-ext/aps/Kconfig
  5. 16 0
      qcom/opensource/datarmnet-ext/aps/Makefile
  6. 37 0
      qcom/opensource/datarmnet-ext/aps/define_aps.bzl
  7. 45 0
      qcom/opensource/datarmnet-ext/aps/rmnet_aps.h
  8. 39 0
      qcom/opensource/datarmnet-ext/aps/rmnet_aps_genl.c
  9. 26 0
      qcom/opensource/datarmnet-ext/aps/rmnet_aps_genl.h
  10. 794 0
      qcom/opensource/datarmnet-ext/aps/rmnet_aps_main.c
  11. 56 0
      qcom/opensource/datarmnet-ext/datarmnet_ext_dlkm_vendor_board.mk
  12. 8 0
      qcom/opensource/datarmnet-ext/datarmnet_ext_dlkm_vendor_product.mk
  13. 32 0
      qcom/opensource/datarmnet-ext/mem/Android.mk
  14. 34 0
      qcom/opensource/datarmnet-ext/mem/BUILD.bazel
  15. 7 0
      qcom/opensource/datarmnet-ext/mem/Kbuild
  16. 9 0
      qcom/opensource/datarmnet-ext/mem/Kconfig
  17. 16 0
      qcom/opensource/datarmnet-ext/mem/Makefile
  18. 37 0
      qcom/opensource/datarmnet-ext/mem/define_mem.bzl
  19. 25 0
      qcom/opensource/datarmnet-ext/mem/rmnet_mem.h
  20. 125 0
      qcom/opensource/datarmnet-ext/mem/rmnet_mem_main.c
  21. 39 0
      qcom/opensource/datarmnet-ext/mem/rmnet_mem_nl.c
  22. 47 0
      qcom/opensource/datarmnet-ext/mem/rmnet_mem_nl.h
  23. 39 0
      qcom/opensource/datarmnet-ext/mem/rmnet_mem_pool.c
  24. 26 0
      qcom/opensource/datarmnet-ext/mem/rmnet_mem_priv.h
  25. 45 0
      qcom/opensource/datarmnet-ext/offload/Android.mk
  26. 18 0
      qcom/opensource/datarmnet-ext/offload/BUILD.bazel
  27. 8 0
      qcom/opensource/datarmnet-ext/offload/Kbuild
  28. 10 0
      qcom/opensource/datarmnet-ext/offload/Kconfig
  29. 16 0
      qcom/opensource/datarmnet-ext/offload/Makefile
  30. 46 0
      qcom/opensource/datarmnet-ext/offload/define_offload.bzl
  31. 195 0
      qcom/opensource/datarmnet-ext/offload/rmnet_offload_engine.c
  32. 37 0
      qcom/opensource/datarmnet-ext/offload/rmnet_offload_engine.h
  33. 75 0
      qcom/opensource/datarmnet-ext/offload/rmnet_offload_knob.c
  34. 18 0
      qcom/opensource/datarmnet-ext/offload/rmnet_offload_knob.h
  35. 267 0
      qcom/opensource/datarmnet-ext/offload/rmnet_offload_main.c
  36. 74 0
      qcom/opensource/datarmnet-ext/offload/rmnet_offload_main.h
  37. 101 0
      qcom/opensource/datarmnet-ext/offload/rmnet_offload_state.c
  38. 30 0
      qcom/opensource/datarmnet-ext/offload/rmnet_offload_state.h
  39. 20 0
      qcom/opensource/datarmnet-ext/offload/rmnet_offload_stats.c
  40. 27 0
      qcom/opensource/datarmnet-ext/offload/rmnet_offload_stats.h
  41. 83 0
      qcom/opensource/datarmnet-ext/offload/rmnet_offload_tcp.c
  42. 21 0
      qcom/opensource/datarmnet-ext/offload/rmnet_offload_tcp.h
  43. 40 0
      qcom/opensource/datarmnet-ext/offload/rmnet_offload_udp.c
  44. 21 0
      qcom/opensource/datarmnet-ext/offload/rmnet_offload_udp.h
  45. 59 0
      qcom/opensource/datarmnet-ext/perf/Android.mk
  46. 18 0
      qcom/opensource/datarmnet-ext/perf/BUILD.bazel
  47. 7 0
      qcom/opensource/datarmnet-ext/perf/Kbuild
  48. 11 0
      qcom/opensource/datarmnet-ext/perf/Kconfig
  49. 17 0
      qcom/opensource/datarmnet-ext/perf/Makefile
  50. 37 0
      qcom/opensource/datarmnet-ext/perf/define_perf.bzl
  51. 135 0
      qcom/opensource/datarmnet-ext/perf/rmnet_perf_main.c
  52. 252 0
      qcom/opensource/datarmnet-ext/perf/rmnet_perf_tcp.c
  53. 17 0
      qcom/opensource/datarmnet-ext/perf/rmnet_perf_tcp.h
  54. 176 0
      qcom/opensource/datarmnet-ext/perf/rmnet_perf_udp.c
  55. 15 0
      qcom/opensource/datarmnet-ext/perf/rmnet_perf_udp.h
  56. 46 0
      qcom/opensource/datarmnet-ext/perf_tether/Android.mk
  57. 18 0
      qcom/opensource/datarmnet-ext/perf_tether/BUILD.bazel
  58. 5 0
      qcom/opensource/datarmnet-ext/perf_tether/Kbuild
  59. 10 0
      qcom/opensource/datarmnet-ext/perf_tether/Kconfig
  60. 16 0
      qcom/opensource/datarmnet-ext/perf_tether/Makefile
  61. 33 0
      qcom/opensource/datarmnet-ext/perf_tether/define_perf_tether.bzl
  62. 243 0
      qcom/opensource/datarmnet-ext/perf_tether/rmnet_perf_tether_main.c
  63. 28 0
      qcom/opensource/datarmnet-ext/sch/Android.mk
  64. 14 0
      qcom/opensource/datarmnet-ext/sch/BUILD.bazel
  65. 4 0
      qcom/opensource/datarmnet-ext/sch/Kbuild
  66. 9 0
      qcom/opensource/datarmnet-ext/sch/Kconfig
  67. 15 0
      qcom/opensource/datarmnet-ext/sch/Makefile
  68. 29 0
      qcom/opensource/datarmnet-ext/sch/define_sch.bzl
  69. 151 0
      qcom/opensource/datarmnet-ext/sch/rmnet_sch_main.c
  70. 46 0
      qcom/opensource/datarmnet-ext/shs/Android.mk
  71. 17 0
      qcom/opensource/datarmnet-ext/shs/BUILD.bazel
  72. 13 0
      qcom/opensource/datarmnet-ext/shs/Kbuild
  73. 10 0
      qcom/opensource/datarmnet-ext/shs/Kconfig
  74. 15 0
      qcom/opensource/datarmnet-ext/shs/Makefile
  75. 50 0
      qcom/opensource/datarmnet-ext/shs/define_shs.bzl
  76. 190 0
      qcom/opensource/datarmnet-ext/shs/rmnet_shs.h
  77. 238 0
      qcom/opensource/datarmnet-ext/shs/rmnet_shs_common.c
  78. 67 0
      qcom/opensource/datarmnet-ext/shs/rmnet_shs_common.h
  79. 110 0
      qcom/opensource/datarmnet-ext/shs/rmnet_shs_config.c
  80. 27 0
      qcom/opensource/datarmnet-ext/shs/rmnet_shs_config.h
  81. 130 0
      qcom/opensource/datarmnet-ext/shs/rmnet_shs_freq.c
  82. 22 0
      qcom/opensource/datarmnet-ext/shs/rmnet_shs_freq.h
  83. 380 0
      qcom/opensource/datarmnet-ext/shs/rmnet_shs_ll.c
  84. 22 0
      qcom/opensource/datarmnet-ext/shs/rmnet_shs_ll.h
  85. 1020 0
      qcom/opensource/datarmnet-ext/shs/rmnet_shs_main.c
  86. 252 0
      qcom/opensource/datarmnet-ext/shs/rmnet_shs_modules.c
  87. 63 0
      qcom/opensource/datarmnet-ext/shs/rmnet_shs_modules.h
  88. 995 0
      qcom/opensource/datarmnet-ext/shs/rmnet_shs_wq.c
  89. 143 0
      qcom/opensource/datarmnet-ext/shs/rmnet_shs_wq.h
  90. 353 0
      qcom/opensource/datarmnet-ext/shs/rmnet_shs_wq_genl.c
  91. 84 0
      qcom/opensource/datarmnet-ext/shs/rmnet_shs_wq_genl.h
  92. 677 0
      qcom/opensource/datarmnet-ext/shs/rmnet_shs_wq_mem.c
  93. 87 0
      qcom/opensource/datarmnet-ext/shs/rmnet_shs_wq_mem.h
  94. 49 0
      qcom/opensource/datarmnet-ext/wlan/Android.mk
  95. 22 0
      qcom/opensource/datarmnet-ext/wlan/BUILD.bazel
  96. 9 0
      qcom/opensource/datarmnet-ext/wlan/Kbuild
  97. 10 0
      qcom/opensource/datarmnet-ext/wlan/Kconfig
  98. 16 0
      qcom/opensource/datarmnet-ext/wlan/Makefile
  99. 42 0
      qcom/opensource/datarmnet-ext/wlan/define_wlan.bzl
  100. 61 0
      qcom/opensource/datarmnet-ext/wlan/rmnet_wlan.h

+ 40 - 0
qcom/opensource/datarmnet-ext/aps/Android.mk

@@ -0,0 +1,40 @@
+ifeq ($(TARGET_DATARMNET_EXT_ENABLE), true)
+ifneq ($(TARGET_BOARD_AUTO),true)
+ifneq ($(TARGET_BOARD_PLATFORM),qssi)
+
+RMNET_APS_DLKM_PLATFORMS_LIST := pineapple
+RMNET_APS_DLKM_PLATFORMS_LIST += pitti
+RMNET_APS_DLKM_PLATFORMS_LIST += volcano
+
+ifeq ($(call is-board-platform-in-list, $(RMNET_APS_DLKM_PLATFORMS_LIST)),true)
+LOCAL_PATH := $(call my-dir)
+
+#Enabling BAZEL
+LOCAL_MODULE_DDK_BUILD := true
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := rmnet_aps.ko
+LOCAL_MODULE_PATH := $(KERNEL_MODULES_OUT)
+LOCAL_SRC_FILES := $(wildcard $(LOCAL_PATH)/**/*) $(wildcard $(LOCAL_PATH)/*)
+
+DATARMNET_CORE_PATH := datarmnet/core
+RMNET_CORE_PATH := vendor/qcom/opensource/$(DATARMNET_CORE_PATH)
+DLKM_DIR := $(TOP)/device/qcom/common/dlkm
+RMNET_CORE_INC_DIR := $(abspath $(RMNET_CORE_PATH))
+
+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
+
+#Must be built after the core rmnet module
+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
+
+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
+endif #End of Check for datarmnet

+ 14 - 0
qcom/opensource/datarmnet-ext/aps/BUILD.bazel

@@ -0,0 +1,14 @@
+load(":define_aps.bzl", "define_aps")
+load("//build/kernel/kleaf:kernel.bzl", "ddk_module")
+
+define_aps("pineapple", "consolidate")
+
+define_aps("pineapple", "gki")
+
+define_aps("pitti", "consolidate")
+
+define_aps("pitti", "gki")
+
+define_aps("volcano", "consolidate")
+
+define_aps("volcano", "gki")

+ 6 - 0
qcom/opensource/datarmnet-ext/aps/Kbuild

@@ -0,0 +1,6 @@
+obj-m += rmnet_aps.o
+ccflags-y := -I$(RMNET_CORE_INC_DIR) \
+             $(call cc-option,-Wno-misleading-indentation)
+rmnet_aps-y := \
+        rmnet_aps_main.o \
+	rmnet_aps_genl.o

+ 9 - 0
qcom/opensource/datarmnet-ext/aps/Kconfig

@@ -0,0 +1,9 @@
+#
+# RMNET_APS drivers
+#
+
+menuconfig RMNET_APS
+    tristate "Rmnet APS support"
+    default m
+    ---help---
+        Apps prioritization module for RmNet driver

+ 16 - 0
qcom/opensource/datarmnet-ext/aps/Makefile

@@ -0,0 +1,16 @@
+#By default build for CLD
+RMNET_APS_SELECT := CONFIG_RMNET_APS=m
+KBUILD_OPTIONS += $(RMNET_APS_SELECT)
+KBUILD_OPTIONS += $(KBUILD_EXTRA) # Extra config if any
+KBUILD_EXTRA_SYMBOLS := $(M)/../../$(DATARMNET_CORE_PATH)/Module.symvers
+
+M ?= $(shell pwd)
+
+all:
+	$(MAKE) -C $(KERNEL_SRC) M=$(M) modules $(KBUILD_OPTIONS)
+
+modules_install:
+	$(MAKE) INSTALL_MOD_STRIP=1 -C $(KERNEL_SRC) M=$(M) modules_install
+
+clean:
+	$(MAKE) -C $(KERNEL_SRC) M=$(M) clean

+ 37 - 0
qcom/opensource/datarmnet-ext/aps/define_aps.bzl

@@ -0,0 +1,37 @@
+load("//build/bazel_common_rules/dist:dist.bzl", "copy_to_dist_dir")
+load("//build/kernel/kleaf:kernel.bzl", "ddk_module")
+
+def define_aps(target, variant):
+    kernel_build_variant = "{}_{}".format(target, variant)
+    include_base = "../../../{}".format(native.package_name())
+
+    ddk_module(
+        name = "{}_aps".format(kernel_build_variant),
+        out = "rmnet_aps.ko",
+        srcs = [
+            "rmnet_aps_genl.c",
+            "rmnet_aps_main.c",
+            "rmnet_aps.h",
+            "rmnet_aps_genl.h",
+        ],
+        kernel_build = "//msm-kernel:{}".format(kernel_build_variant),
+        deps = [
+            "//msm-kernel:all_headers",
+            "//vendor/qcom/opensource/datarmnet:{}_rmnet_core".format(kernel_build_variant),
+            "//vendor/qcom/opensource/datarmnet:rmnet_core_headers",
+        ],
+        copts = ["-Wno-misleading-indentation"],
+        includes = ["include"],
+    )
+
+    copy_to_dist_dir(
+        name = "{}_datarment-ext_dist".format(kernel_build_variant),
+        data = [
+            ":{}_aps".format(kernel_build_variant),
+        ],
+        dist_dir = "out/target/product/{}/dlkm/lib/modules/".format(target),
+        flat = True,
+        wipe_dist_dir = False,
+        allow_duplicate_filenames = False,
+        mode_overrides = {"**/*": "644"},
+    )

+ 45 - 0
qcom/opensource/datarmnet-ext/aps/rmnet_aps.h

@@ -0,0 +1,45 @@
+/* Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 and
+ * only version 2 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ */
+
+#ifndef DATARMNETa70542332d
+#define DATARMNETa70542332d
+#include <linux/skbuff.h>
+#include <net/genetlink.h>
+#ifdef DATARMNETd7ef88d6df
+#define DATARMNET112d724eff(...) pr_err(__VA_ARGS__)
+#else
+#define DATARMNET112d724eff(...)
+#endif
+struct DATARMNET5d4139d9d7{u32 cmd;u32 DATARMNETbb588401ec;u32 
+DATARMNET655f822a62;u32 ifindex;u8 DATARMNET6c2cba039d;u8 DATARMNET626c626b74;u8
+ DATARMNET40bb1d945b;u8 DATARMNETecca9147fd;};struct DATARMNETca79857d4a{u32 cmd
+;u32 DATARMNETe65883bfce;u32 DATARMNETbb588401ec;};
+#define DATARMNET53f589a196 (0xd26+209-0xdf6)
+#define DATARMNET3cff03c531 (0xd1f+216-0xdf5)
+struct DATARMNETd51e57e3f4{u32 cmd;u32 DATARMNETbb588401ec;u32 ifindex;s32 
+DATARMNET61b4abcc9b;__be32 saddr[(0xd11+230-0xdf3)];__be32 daddr[
+(0xd11+230-0xdf3)];u16 sport;u16 dport;u32 DATARMNETe9aad463ce;u8 tos;u8 
+DATARMNETa400ad4f72;u8 DATARMNET06d2413ad2;u8 DATARMNET0711bbda6c;u8 
+DATARMNETecca9147fd[(0xef7+1114-0x130d)];};struct DATARMNET15bcb4844b{u32 cmd;
+u32 DATARMNETe65883bfce;u32 DATARMNETbb588401ec;};struct DATARMNET797a5b1493{u32
+ ifindex;u64 DATARMNET9c9a589dce;u32 DATARMNETc277c62678;u32 DATARMNETecca9147fd
+[(0xd35+210-0xdff)];};struct DATARMNET9a727f81bc{u32 ifindex;u32 
+DATARMNETecca9147fd[(0xcfc+267-0xe00)];};struct DATARMNET7fb3ee4333{u8 mux_id;u8
+ DATARMNET6f031e7934;u8 DATARMNET08e1628d23;u8 len;u32 DATARMNETa960d37cad[
+(0xd35+210-0xdff)];};int DATARMNET37a9efbbcb(struct sk_buff*DATARMNETaafc1d9519,
+struct genl_info*DATARMNET54338da2ff);int DATARMNET1998d09852(struct sk_buff*
+DATARMNETaafc1d9519,struct genl_info*DATARMNET54338da2ff);int 
+DATARMNETae6b282c61(struct sk_buff*DATARMNETaafc1d9519,struct genl_info*
+DATARMNET54338da2ff);int DATARMNET568dffe281(struct sk_buff*DATARMNETaafc1d9519,
+struct genl_info*DATARMNET54338da2ff);
+#endif 
+

+ 39 - 0
qcom/opensource/datarmnet-ext/aps/rmnet_aps_genl.c

@@ -0,0 +1,39 @@
+/* Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 and
+ * only version 2 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ */
+
+#include "rmnet_aps_genl.h"
+#include "rmnet_aps.h"
+static struct nla_policy DATARMNET157d4c7a8a[DATARMNET3b044438b9+
+(0xd26+209-0xdf6)]={[DATARMNET98b93f2e86]=NLA_POLICY_EXACT_LEN(sizeof(struct 
+DATARMNET5d4139d9d7)),[DATARMNET818a0b6438]=NLA_POLICY_EXACT_LEN(sizeof(struct 
+DATARMNETca79857d4a)),[DATARMNET572e4a28eb]=NLA_POLICY_EXACT_LEN(sizeof(struct 
+DATARMNET797a5b1493)),[DATARMNETe54d857ffe]=NLA_POLICY_EXACT_LEN(sizeof(struct 
+DATARMNET9a727f81bc)),[DATARMNET7edfedec7f]=NLA_POLICY_EXACT_LEN(sizeof(struct 
+DATARMNETd51e57e3f4)),[DATARMNETd2b1517d6b]=NLA_POLICY_EXACT_LEN(sizeof(struct 
+DATARMNET15bcb4844b)),[DATARMNET24b8b9ef93]=NLA_POLICY_EXACT_LEN(sizeof(struct 
+DATARMNET7fb3ee4333)),};
+#define DATARMNET7dc6237681(DATARMNET5aeb0ef9bc, DATARMNETbd9859b58e)\
+                                         \
+	{                                                                      \
+		.cmd = DATARMNET5aeb0ef9bc, .doit = DATARMNETbd9859b58e, .dumpit = NULL, .\
+flags = (0xd2d+202-0xdf7),        \
+	}
+static const struct genl_ops DATARMNET27a52625e4[]={DATARMNET7dc6237681(
+DATARMNET15437be67e,DATARMNET37a9efbbcb),DATARMNET7dc6237681(DATARMNET4f09ad7688
+,DATARMNET1998d09852),DATARMNET7dc6237681(DATARMNET97eefd45e3,
+DATARMNETae6b282c61),DATARMNET7dc6237681(DATARMNET30180ab70e,DATARMNET568dffe281
+),};struct genl_family DATARMNETcdba30eca9={.hdrsize=(0xd2d+202-0xdf7),.name=
+DATARMNETa4a6e34e45,.version=DATARMNET33d1a3e23a,.maxattr=DATARMNET3b044438b9,.
+policy=DATARMNET157d4c7a8a,.ops=DATARMNET27a52625e4,.n_ops=ARRAY_SIZE(
+DATARMNET27a52625e4),};int DATARMNETcfa8d492f8(void){return genl_register_family
+(&DATARMNETcdba30eca9);}void DATARMNETca7606cfd1(void){genl_unregister_family(&
+DATARMNETcdba30eca9);}

+ 26 - 0
qcom/opensource/datarmnet-ext/aps/rmnet_aps_genl.h

@@ -0,0 +1,26 @@
+/* Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 and
+ * only version 2 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ */
+
+#ifndef DATARMNET975050c527
+#define DATARMNET975050c527
+#include <net/genetlink.h>
+#define DATARMNET33d1a3e23a (0xd26+209-0xdf6)
+#define DATARMNETa4a6e34e45 "\x52\x4d\x4e\x45\x54\x5f\x41\x50\x53"
+enum{DATARMNETeafde44f15,DATARMNET15437be67e,DATARMNET4f09ad7688,
+DATARMNET97eefd45e3,DATARMNET30180ab70e,DATARMNET4ac82df478,};enum{
+DATARMNET900754429d,DATARMNET98b93f2e86,DATARMNET818a0b6438,DATARMNET572e4a28eb,
+DATARMNETe54d857ffe,DATARMNET7edfedec7f,DATARMNETd2b1517d6b,DATARMNET24b8b9ef93,
+DATARMNET074e71007e,};
+#define DATARMNET3b044438b9 (DATARMNET074e71007e - (0xd26+209-0xdf6))
+int DATARMNETcfa8d492f8(void);void DATARMNETca7606cfd1(void);
+#endif 
+

+ 794 - 0
qcom/opensource/datarmnet-ext/aps/rmnet_aps_main.c

@@ -0,0 +1,794 @@
+/* Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 and
+ * only version 2 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ */
+
+#include <linux/timer.h>
+#include <linux/list_sort.h>
+#include <linux/workqueue.h>
+#include <linux/netdevice.h>
+#include <linux/proc_fs.h>
+#include <net/ip.h>
+#include <net/ipv6.h>
+#include "rmnet_config.h"
+#include "rmnet_module.h"
+#include "rmnet_descriptor.h"
+#include "rmnet_qmap.h"
+#include "rmnet_aps.h"
+#include "rmnet_aps_genl.h"
+static char*verinfo[]={"\x62\x30\x37\x39\x65\x62\x37\x61",
+"\x38\x64\x65\x64\x63\x37\x31\x38","\x36\x35\x35\x33\x39\x62\x38\x34",
+"\x65\x32\x31\x38\x66\x34\x35\x31","\x33\x32\x61\x36\x65\x62\x61\x39",
+"\x36\x39\x30\x35\x35\x36\x38\x65","\x37\x34\x31\x35\x39\x32\x31\x63",
+"\x39\x66\x36\x36\x38\x31\x62\x34"};module_param_array(verinfo,charp,NULL,
+(0xcb7+5769-0x221c));MODULE_PARM_DESC(verinfo,
+"\x56\x65\x72\x73\x69\x6f\x6e\x20\x6f\x66\x20\x74\x68\x65\x20\x64\x72\x69\x76\x65\x72"
+);
+#define DATARMNET63ff5c35c2 (0xd26+209-0xdf6)
+#define DATARMNETceae994093 (0xd1f+216-0xdf5)
+#define DATARMNET3412b803e1 (0xd18+223-0xdf4)
+#define DATARMNET1efd633004 (0xd11+230-0xdf3)
+#define DATARMNETdc217f1b29 (0xd0a+237-0xdf2)
+#define DATARMNETd0bce1573e (0xd03+244-0xdf1)
+#define DATARMNETee209ff1f9 (0xd26+209-0xdf6)
+#define DATARMNET24e4186a83 (0xd1f+216-0xdf5)
+#define DATARMNET94016043b8 (0xd18+223-0xdf4)
+#define DATARMNET50dac65bef (0xd2d+202-0xdf7)
+#define DATARMNETe1763a8705 (0xbf7+4364-0x1c04)
+#define DATARMNET3bc5e7094a (0xd0a+237-0xdf2)
+#define DATARMNET7b5bbaa047 ((0xd18+223-0xdf4))
+#define DATARMNETfd026b105a (DATARMNET7b5bbaa047 * HZ)
+#define DATARMNET65d0d735fa ((0xdf7+6169-0x241c) * (0xdf7+2629-0x143c) * \
+(0xdf7+2629-0x143c) / (0xd35+210-0xdff) * DATARMNET7b5bbaa047)
+#define DATARMNETb8ab933cae ((0xc07+4861-0x1e3c) * (0xdf7+2629-0x143c) * \
+(0xdf7+2629-0x143c) / (0xd35+210-0xdff) * DATARMNET7b5bbaa047)
+static const char*DATARMNETe5ef0e617c="\x31\x2e\x34";static u16 
+DATARMNET2fe4661b82;static struct genl_info DATARMNET7d98961cbe;static bool 
+DATARMNET54b95e4416;static u32 DATARMNETfef55eaf9a;static u8 DATARMNET9628311a6b
+[DATARMNET3bc5e7094a]={(0xd2d+202-0xdf7),(0xd03+244-0xdf1),(0xcfc+267-0xe00),
+(0xd35+210-0xdff),9};DEFINE_MUTEX(DATARMNETd7b5a80f84);static DEFINE_SPINLOCK(
+DATARMNET33bd4139f4);static LIST_HEAD(DATARMNET7520901fb5);struct 
+DATARMNETb356c61ad6{struct rcu_head DATARMNET28bfe9e6ad;struct 
+DATARMNETd51e57e3f4 DATARMNET54338da2ff;};struct DATARMNET6fd48c33f6{struct 
+rcu_head DATARMNET28bfe9e6ad;struct list_head DATARMNET14c01d3877;struct 
+list_head DATARMNETed4d7b4a3c;struct DATARMNET5d4139d9d7 DATARMNET54338da2ff;
+struct DATARMNETb356c61ad6 __rcu*DATARMNET8f197b20f6;u32 DATARMNET556cdfb5eb;u32
+ DATARMNETee01ad514b;unsigned long expires;u64 DATARMNETa27e524d8a;bool 
+DATARMNET626c626b74;bool DATARMNET40bb1d945b;};struct DATARMNETc4743b996e{struct
+ rcu_head DATARMNET28bfe9e6ad;struct list_head DATARMNET46c1c4375f;};struct 
+DATARMNET758277d429{char DATARMNET91119c34ed;char DATARMNETecca9147fd[
+(0xcfc+267-0xe00)];struct DATARMNETc4743b996e __rcu*DATARMNETac8d594fb6;};
+#define DATARMNET4e81d27dfb(DATARMNET413e8dcf7b) (!strncmp(DATARMNET413e8dcf7b->\
+name, "\x72\x6d\x6e\x65\x74\x5f\x64\x61\x74\x61", (0xd27+224-0xdfd)))
+#define DATARMNETe1c7654a2e(DATARMNET413e8dcf7b)\
+                                                      \
+	((struct DATARMNET758277d429 *)(((struct rmnet_priv *)netdev_priv(\
+DATARMNET413e8dcf7b))       \
+					 ->aps_cb))
+extern void(*rmnet_aps_pre_queue)(struct net_device*DATARMNET413e8dcf7b,struct 
+sk_buff*DATARMNET543491eb0f);extern int(*rmnet_aps_post_queue)(struct net_device
+*DATARMNET413e8dcf7b,struct sk_buff*DATARMNET543491eb0f);extern struct 
+genl_family DATARMNETcdba30eca9;static void DATARMNET30dd480cad(struct 
+net_device*DATARMNET413e8dcf7b,struct sk_buff*DATARMNET543491eb0f);static void 
+DATARMNET446f780f19(u32 DATARMNETbb588401ec,u8 DATARMNETf8bbe3b0fb);static void 
+DATARMNETf844db79d9(struct timer_list*DATARMNET6e4292679f);static DEFINE_TIMER(
+DATARMNETd21629e047,DATARMNETf844db79d9);static void DATARMNETd1a02b8188(struct 
+work_struct*DATARMNET33110a3ff5);static DECLARE_WORK(DATARMNET8e3aef0760,
+DATARMNETd1a02b8188);static void DATARMNET5979020f87(struct work_struct*
+DATARMNET33110a3ff5);static DECLARE_DELAYED_WORK(DATARMNET3481998252,
+DATARMNET5979020f87);static int DATARMNET998f6cbce7(struct notifier_block*
+DATARMNET272c159b3c,unsigned long DATARMNET9a4761f31c,void*data);static struct 
+notifier_block DATARMNETc580548769 __read_mostly={.notifier_call=
+DATARMNET998f6cbce7,.priority=(0xd1f+216-0xdf5),};struct DATARMNETf21ed5deb4{
+__u8 DATARMNET9d758b8e5b;__u8 DATARMNETe419bc836d;__u8 DATARMNETd43be7664c;__u8 
+DATARMNET06d2413ad2;__be32 saddr[(0xd11+230-0xdf3)];__be32 daddr[
+(0xd11+230-0xdf3)];__u16 sport;__u16 dport;__u32 DATARMNETe9aad463ce;__u8 tos;};
+static int DATARMNET481989429b(struct sk_buff*DATARMNET543491eb0f,struct 
+DATARMNETf21ed5deb4*DATARMNET203a7a0136){struct DATARMNET6d4c22c781{__be16 sport
+;__be16 dport;};int DATARMNETb65c469a15;if(DATARMNET543491eb0f->protocol==htons(
+ETH_P_IP)){struct iphdr*DATARMNET86f1f2cdc9,DATARMNET8dc568fa4c;
+DATARMNET86f1f2cdc9=__skb_header_pointer(DATARMNET543491eb0f,(0xd2d+202-0xdf7),
+sizeof(*DATARMNET86f1f2cdc9),DATARMNET543491eb0f->data,skb_headlen(
+DATARMNET543491eb0f),&DATARMNET8dc568fa4c);if(unlikely(!DATARMNET86f1f2cdc9||
+DATARMNET86f1f2cdc9->ihl<(0xd0a+237-0xdf2)))return-EINVAL;if(unlikely(
+ip_is_fragment(DATARMNET86f1f2cdc9))){DATARMNET203a7a0136->DATARMNETe419bc836d=
+(0xd26+209-0xdf6);DATARMNET203a7a0136->DATARMNETd43be7664c=!(DATARMNET86f1f2cdc9
+->frag_off&htons(IP_OFFSET));}DATARMNETb65c469a15=DATARMNET86f1f2cdc9->ihl<<
+(0xd1f+216-0xdf5);DATARMNET203a7a0136->DATARMNET9d758b8e5b=(0xd11+230-0xdf3);
+DATARMNET203a7a0136->DATARMNET06d2413ad2=DATARMNET86f1f2cdc9->protocol;
+DATARMNET203a7a0136->saddr[(0xd2d+202-0xdf7)]=DATARMNET86f1f2cdc9->saddr;
+DATARMNET203a7a0136->daddr[(0xd2d+202-0xdf7)]=DATARMNET86f1f2cdc9->daddr;
+DATARMNET203a7a0136->tos=DATARMNET86f1f2cdc9->tos;}else if(DATARMNET543491eb0f->
+protocol==htons(ETH_P_IPV6)){struct ipv6hdr*DATARMNETbf55123e5b,
+DATARMNET9df40d3f99;__be16 frag_off=(0xd2d+202-0xdf7);u8 nexthdr;
+DATARMNETbf55123e5b=__skb_header_pointer(DATARMNET543491eb0f,(0xd2d+202-0xdf7),
+sizeof(*DATARMNETbf55123e5b),DATARMNET543491eb0f->data,skb_headlen(
+DATARMNET543491eb0f),&DATARMNET9df40d3f99);if(unlikely(!DATARMNETbf55123e5b))
+return-EINVAL;nexthdr=DATARMNETbf55123e5b->nexthdr;DATARMNETb65c469a15=
+ipv6_skip_exthdr(DATARMNET543491eb0f,sizeof(*DATARMNETbf55123e5b),&nexthdr,&
+frag_off);if(unlikely(DATARMNETb65c469a15<(0xd2d+202-0xdf7)))return-EFAULT;if(
+unlikely(frag_off)){DATARMNET203a7a0136->DATARMNETe419bc836d=(0xd26+209-0xdf6);
+DATARMNET203a7a0136->DATARMNETd43be7664c=!(frag_off&htons(IP6_OFFSET));}
+DATARMNET203a7a0136->DATARMNET9d758b8e5b=(0xd03+244-0xdf1);DATARMNET203a7a0136->
+DATARMNET06d2413ad2=nexthdr;memcpy(DATARMNET203a7a0136->saddr,
+DATARMNETbf55123e5b->saddr.in6_u.u6_addr8,(0xeb7+1158-0x132d));memcpy(
+DATARMNET203a7a0136->daddr,DATARMNETbf55123e5b->daddr.in6_u.u6_addr8,
+(0xeb7+1158-0x132d));DATARMNET203a7a0136->tos=ip6_tclass(ip6_flowinfo(
+DATARMNETbf55123e5b));DATARMNET203a7a0136->DATARMNETe9aad463ce=ntohl(
+ip6_flowlabel(DATARMNETbf55123e5b));}else{return-EINVAL;}if(DATARMNET203a7a0136
+->DATARMNETe419bc836d&&!DATARMNET203a7a0136->DATARMNETd43be7664c)return
+(0xd2d+202-0xdf7);if(DATARMNET203a7a0136->DATARMNET06d2413ad2==IPPROTO_TCP||
+DATARMNET203a7a0136->DATARMNET06d2413ad2==IPPROTO_UDP){struct 
+DATARMNET6d4c22c781*DATARMNET975b252236,DATARMNET7121c974d6;DATARMNET975b252236=
+__skb_header_pointer(DATARMNET543491eb0f,DATARMNETb65c469a15,sizeof(*
+DATARMNET975b252236),DATARMNET543491eb0f->data,skb_headlen(DATARMNET543491eb0f),
+&DATARMNET7121c974d6);if(unlikely(!DATARMNET975b252236))return-EINVAL;
+DATARMNET203a7a0136->sport=ntohs(DATARMNET975b252236->sport);DATARMNET203a7a0136
+->dport=ntohs(DATARMNET975b252236->dport);}return(0xd2d+202-0xdf7);}static int 
+DATARMNET9e7ac83deb(struct rmnet_frag_descriptor*DATARMNET9d1b321642,struct 
+DATARMNETf21ed5deb4*DATARMNET203a7a0136){struct DATARMNET6d4c22c781{__be16 sport
+;__be16 dport;};int DATARMNETb65c469a15;u8*data;data=rmnet_frag_data_ptr(
+DATARMNET9d1b321642);if(unlikely(!data))return-EINVAL;if((data[(0xd2d+202-0xdf7)
+]&(0xbf7+4405-0x1c3c))==(0xef7+1142-0x132d)){struct iphdr*DATARMNET86f1f2cdc9,
+DATARMNET8dc568fa4c;DATARMNET86f1f2cdc9=rmnet_frag_header_ptr(
+DATARMNET9d1b321642,(0xd2d+202-0xdf7),sizeof(*DATARMNET86f1f2cdc9),&
+DATARMNET8dc568fa4c);if(unlikely(!DATARMNET86f1f2cdc9||DATARMNET86f1f2cdc9->ihl<
+(0xd0a+237-0xdf2)))return-EINVAL;if(unlikely(ip_is_fragment(DATARMNET86f1f2cdc9)
+)){DATARMNET203a7a0136->DATARMNETe419bc836d=(0xd26+209-0xdf6);
+DATARMNET203a7a0136->DATARMNETd43be7664c=!(DATARMNET86f1f2cdc9->frag_off&htons(
+IP_OFFSET));}DATARMNETb65c469a15=DATARMNET86f1f2cdc9->ihl<<(0xd1f+216-0xdf5);
+DATARMNET203a7a0136->DATARMNET9d758b8e5b=(0xd11+230-0xdf3);DATARMNET203a7a0136->
+DATARMNET06d2413ad2=DATARMNET86f1f2cdc9->protocol;DATARMNET203a7a0136->saddr[
+(0xd2d+202-0xdf7)]=DATARMNET86f1f2cdc9->saddr;DATARMNET203a7a0136->daddr[
+(0xd2d+202-0xdf7)]=DATARMNET86f1f2cdc9->daddr;DATARMNET203a7a0136->tos=
+DATARMNET86f1f2cdc9->tos;}else if((data[(0xd2d+202-0xdf7)]&(0xbf7+4405-0x1c3c))
+==(0xeb7+726-0x112d)){struct ipv6hdr*DATARMNETbf55123e5b,DATARMNET9df40d3f99;
+__be16 frag_off;u8 nexthdr;bool DATARMNET4ea088426f;DATARMNETbf55123e5b=
+rmnet_frag_header_ptr(DATARMNET9d1b321642,(0xd2d+202-0xdf7),sizeof(*
+DATARMNETbf55123e5b),&DATARMNET9df40d3f99);if(unlikely(!DATARMNETbf55123e5b))
+return-EINVAL;nexthdr=DATARMNETbf55123e5b->nexthdr;DATARMNETb65c469a15=
+rmnet_frag_ipv6_skip_exthdr(DATARMNET9d1b321642,sizeof(*DATARMNETbf55123e5b),&
+nexthdr,&frag_off,&DATARMNET4ea088426f);if(unlikely(DATARMNETb65c469a15<
+(0xd2d+202-0xdf7)))return-EFAULT;if(unlikely(frag_off||DATARMNET4ea088426f)){
+DATARMNET203a7a0136->DATARMNETe419bc836d=(0xd26+209-0xdf6);DATARMNET203a7a0136->
+DATARMNETd43be7664c=!(frag_off&htons(IP6_OFFSET));}DATARMNET203a7a0136->
+DATARMNET9d758b8e5b=(0xd03+244-0xdf1);DATARMNET203a7a0136->DATARMNET06d2413ad2=
+nexthdr;memcpy(DATARMNET203a7a0136->saddr,DATARMNETbf55123e5b->saddr.in6_u.
+u6_addr8,(0xeb7+1158-0x132d));memcpy(DATARMNET203a7a0136->daddr,
+DATARMNETbf55123e5b->daddr.in6_u.u6_addr8,(0xeb7+1158-0x132d));
+DATARMNET203a7a0136->tos=ip6_tclass(ip6_flowinfo(DATARMNETbf55123e5b));
+DATARMNET203a7a0136->DATARMNETe9aad463ce=ntohl(ip6_flowlabel(DATARMNETbf55123e5b
+));}else{return-EINVAL;}if(DATARMNET203a7a0136->DATARMNETe419bc836d&&!
+DATARMNET203a7a0136->DATARMNETd43be7664c)return(0xd2d+202-0xdf7);if(
+DATARMNET203a7a0136->DATARMNET06d2413ad2==IPPROTO_TCP||DATARMNET203a7a0136->
+DATARMNET06d2413ad2==IPPROTO_UDP){struct DATARMNET6d4c22c781*DATARMNET975b252236
+,DATARMNET7121c974d6;DATARMNET975b252236=rmnet_frag_header_ptr(
+DATARMNET9d1b321642,DATARMNETb65c469a15,sizeof(*DATARMNET975b252236),&
+DATARMNET7121c974d6);if(unlikely(!DATARMNET975b252236))return-EINVAL;
+DATARMNET203a7a0136->sport=ntohs(DATARMNET975b252236->sport);DATARMNET203a7a0136
+->dport=ntohs(DATARMNET975b252236->dport);}return(0xd2d+202-0xdf7);}static bool 
+DATARMNETdf0ec0363b(struct DATARMNETd51e57e3f4*DATARMNET8f197b20f6,struct 
+DATARMNETf21ed5deb4*DATARMNET203a7a0136){if(DATARMNET8f197b20f6->
+DATARMNET06d2413ad2){if(DATARMNET8f197b20f6->DATARMNET06d2413ad2==
+(0xc07+4362-0x1c14)){if(DATARMNET203a7a0136->DATARMNET06d2413ad2!=IPPROTO_TCP&&
+DATARMNET203a7a0136->DATARMNET06d2413ad2!=IPPROTO_UDP)return false;}else if(
+DATARMNET8f197b20f6->DATARMNET06d2413ad2!=DATARMNET203a7a0136->
+DATARMNET06d2413ad2){return false;}}if(DATARMNET203a7a0136->DATARMNET06d2413ad2
+==IPPROTO_TCP||DATARMNET203a7a0136->DATARMNET06d2413ad2==IPPROTO_UDP){if((
+DATARMNET8f197b20f6->dport&&DATARMNET8f197b20f6->dport!=DATARMNET203a7a0136->
+dport)||(DATARMNET8f197b20f6->sport&&DATARMNET8f197b20f6->sport!=
+DATARMNET203a7a0136->sport))return false;}if(DATARMNET8f197b20f6->
+DATARMNET61b4abcc9b==AF_INET){if(((DATARMNET8f197b20f6->DATARMNET0711bbda6c&
+DATARMNET3cff03c531)&&DATARMNET8f197b20f6->daddr[(0xd2d+202-0xdf7)]!=
+DATARMNET203a7a0136->daddr[(0xd2d+202-0xdf7)])||((DATARMNET8f197b20f6->
+DATARMNET0711bbda6c&DATARMNET53f589a196)&&DATARMNET8f197b20f6->saddr[
+(0xd2d+202-0xdf7)]!=DATARMNET203a7a0136->saddr[(0xd2d+202-0xdf7)]))return false;
+if(DATARMNET8f197b20f6->tos&&DATARMNET8f197b20f6->tos!=(DATARMNET203a7a0136->tos
+&DATARMNET8f197b20f6->DATARMNETa400ad4f72))return false;}else if(
+DATARMNET8f197b20f6->DATARMNET61b4abcc9b==AF_INET6){if(((DATARMNET8f197b20f6->
+DATARMNET0711bbda6c&DATARMNET3cff03c531)&&memcmp(DATARMNET8f197b20f6->daddr,
+DATARMNET203a7a0136->daddr,(0xeb7+1158-0x132d)))||((DATARMNET8f197b20f6->
+DATARMNET0711bbda6c&DATARMNET53f589a196)&&memcmp(DATARMNET8f197b20f6->saddr,
+DATARMNET203a7a0136->saddr,(0xeb7+1158-0x132d))))return false;if(
+DATARMNET8f197b20f6->tos&&DATARMNET8f197b20f6->tos!=(DATARMNET203a7a0136->tos&
+DATARMNET8f197b20f6->DATARMNETa400ad4f72))return false;if(DATARMNET8f197b20f6->
+DATARMNETe9aad463ce&&DATARMNET8f197b20f6->DATARMNETe9aad463ce!=
+DATARMNET203a7a0136->DATARMNETe9aad463ce)return false;}else{return false;}return
+ true;}static struct DATARMNET6fd48c33f6*DATARMNETfb13c018fc(struct list_head*
+DATARMNET817a8d238c,struct sk_buff*DATARMNET543491eb0f){struct 
+DATARMNETf21ed5deb4 DATARMNET203a7a0136={(0xd2d+202-0xdf7),};struct 
+DATARMNET6fd48c33f6*DATARMNETaa568481cf;struct DATARMNETb356c61ad6*
+DATARMNET8f197b20f6;bool DATARMNETc9657a740d=false;list_for_each_entry_rcu(
+DATARMNETaa568481cf,DATARMNET817a8d238c,DATARMNET14c01d3877){DATARMNET8f197b20f6
+=rcu_dereference(DATARMNETaa568481cf->DATARMNET8f197b20f6);if(unlikely(!
+DATARMNET8f197b20f6))continue;if((DATARMNET8f197b20f6->DATARMNET54338da2ff.
+DATARMNET61b4abcc9b==AF_INET&&DATARMNET543491eb0f->protocol!=htons(ETH_P_IP))||(
+DATARMNET8f197b20f6->DATARMNET54338da2ff.DATARMNET61b4abcc9b==AF_INET6&&
+DATARMNET543491eb0f->protocol!=htons(ETH_P_IPV6)))continue;if(!
+DATARMNETc9657a740d){if(DATARMNET481989429b(DATARMNET543491eb0f,&
+DATARMNET203a7a0136)||DATARMNET203a7a0136.DATARMNETe419bc836d)break;
+DATARMNETc9657a740d=true;}if(DATARMNETdf0ec0363b(&DATARMNET8f197b20f6->
+DATARMNET54338da2ff,&DATARMNET203a7a0136))return DATARMNETaa568481cf;}return 
+NULL;}static struct DATARMNET6fd48c33f6*DATARMNET3ed11fdc8d(struct list_head*
+DATARMNET817a8d238c,u32 DATARMNETbb588401ec){struct DATARMNET6fd48c33f6*
+DATARMNETaa568481cf;list_for_each_entry_rcu(DATARMNETaa568481cf,
+DATARMNET817a8d238c,DATARMNET14c01d3877){if(DATARMNETaa568481cf->
+DATARMNET54338da2ff.DATARMNETbb588401ec==DATARMNETbb588401ec)return 
+DATARMNETaa568481cf;}return NULL;}static void DATARMNET1e616c2160(struct 
+list_head*DATARMNET817a8d238c,struct DATARMNET6fd48c33f6*DATARMNETaa568481cf){
+list_add_rcu(&DATARMNETaa568481cf->DATARMNET14c01d3877,DATARMNET817a8d238c);
+list_add(&DATARMNETaa568481cf->DATARMNETed4d7b4a3c,&DATARMNET7520901fb5);
+DATARMNETfef55eaf9a++;if(DATARMNETaa568481cf->expires){if(!timer_pending(&
+DATARMNETd21629e047)||time_before(DATARMNETaa568481cf->expires,
+DATARMNETd21629e047.expires))mod_timer(&DATARMNETd21629e047,DATARMNETaa568481cf
+->expires);}DATARMNET112d724eff("aps: flow 0x%x added (%u)\n",
+DATARMNETaa568481cf->DATARMNET54338da2ff.DATARMNETbb588401ec,DATARMNETfef55eaf9a
+);}static void DATARMNET7fa3dd63cb(struct DATARMNET6fd48c33f6*
+DATARMNETaa568481cf){struct DATARMNETb356c61ad6*DATARMNET8f197b20f6;list_del_rcu
+(&DATARMNETaa568481cf->DATARMNET14c01d3877);list_del(&DATARMNETaa568481cf->
+DATARMNETed4d7b4a3c);if(likely(DATARMNETfef55eaf9a))DATARMNETfef55eaf9a--;if(!
+DATARMNETfef55eaf9a)del_timer(&DATARMNETd21629e047);DATARMNET112d724eff(
+"\x61\x70\x73\x3a\x20\x66\x6c\x6f\x77\x20\x30\x78\x25\x78\x20\x72\x65\x6d\x6f\x76\x69\x6e\x67\x20\x28\x25\x75\x29" "\n"
+,DATARMNETaa568481cf->DATARMNET54338da2ff.DATARMNETbb588401ec,
+DATARMNETfef55eaf9a);DATARMNET8f197b20f6=rcu_dereference(DATARMNETaa568481cf->
+DATARMNET8f197b20f6);if(DATARMNET8f197b20f6){rcu_assign_pointer(
+DATARMNETaa568481cf->DATARMNET8f197b20f6,NULL);kfree_rcu(DATARMNETaa568481cf->
+DATARMNET8f197b20f6,DATARMNET28bfe9e6ad);}kfree_rcu(DATARMNETaa568481cf,
+DATARMNET28bfe9e6ad);}static void DATARMNET9ac8a34003(void){struct 
+DATARMNET6fd48c33f6*DATARMNETaa568481cf,*DATARMNET0386f6f82a;
+list_for_each_entry_safe(DATARMNETaa568481cf,DATARMNET0386f6f82a,&
+DATARMNET7520901fb5,DATARMNETed4d7b4a3c){DATARMNET7fa3dd63cb(DATARMNETaa568481cf
+);}DATARMNET112d724eff(
+"\x61\x70\x73\x3a\x20\x61\x6c\x6c\x20\x66\x6c\x6f\x77\x73\x20\x72\x65\x6d\x6f\x76\x65\x64" "\n"
+);}static void DATARMNET250448eb06(int ifindex){struct DATARMNET6fd48c33f6*
+DATARMNETaa568481cf,*DATARMNET0386f6f82a;list_for_each_entry_safe(
+DATARMNETaa568481cf,DATARMNET0386f6f82a,&DATARMNET7520901fb5,DATARMNETed4d7b4a3c
+){if(DATARMNETaa568481cf->DATARMNET54338da2ff.ifindex==ifindex){
+DATARMNET112d724eff(
+"\x61\x70\x73\x3a\x20\x66\x6c\x6f\x77\x20\x30\x78\x25\x78\x20\x64\x6f\x77\x6e" "\n"
+,DATARMNETaa568481cf->DATARMNET54338da2ff.DATARMNETbb588401ec);
+DATARMNET446f780f19(DATARMNETaa568481cf->DATARMNET54338da2ff.DATARMNETbb588401ec
+,DATARMNET24e4186a83);DATARMNET7fa3dd63cb(DATARMNETaa568481cf);}}}static void 
+DATARMNETd1a02b8188(struct work_struct*DATARMNET33110a3ff5){struct 
+DATARMNET6fd48c33f6*DATARMNETaa568481cf,*DATARMNET0386f6f82a;unsigned long 
+DATARMNET02dfdbc38d=jiffies;unsigned long DATARMNET2cf3deab22;u32 
+DATARMNETbb588401ec;DATARMNET2cf3deab22=DATARMNET02dfdbc38d;mutex_lock(&
+DATARMNETd7b5a80f84);if(!DATARMNET54b95e4416)goto DATARMNETbf4095f79e;
+spin_lock_bh(&DATARMNET33bd4139f4);list_for_each_entry_safe(DATARMNETaa568481cf,
+DATARMNET0386f6f82a,&DATARMNET7520901fb5,DATARMNETed4d7b4a3c){if(!
+DATARMNETaa568481cf->expires)continue;if(time_before_eq(DATARMNETaa568481cf->
+expires,DATARMNET02dfdbc38d)){DATARMNETbb588401ec=DATARMNETaa568481cf->
+DATARMNET54338da2ff.DATARMNETbb588401ec;DATARMNET112d724eff(
+"\x61\x70\x73\x3a\x20\x66\x6c\x6f\x77\x20\x30\x78\x25\x78\x20\x65\x78\x70\x69\x72\x65\x64" "\n"
+,DATARMNETbb588401ec);DATARMNET7fa3dd63cb(DATARMNETaa568481cf);
+DATARMNET446f780f19(DATARMNETbb588401ec,DATARMNETee209ff1f9);}else if(
+DATARMNET2cf3deab22==DATARMNET02dfdbc38d||time_before(DATARMNETaa568481cf->
+expires,DATARMNET2cf3deab22)){DATARMNET2cf3deab22=DATARMNETaa568481cf->expires;}
+}if(DATARMNET2cf3deab22!=DATARMNET02dfdbc38d)mod_timer(&DATARMNETd21629e047,
+DATARMNET2cf3deab22);spin_unlock_bh(&DATARMNET33bd4139f4);DATARMNETbf4095f79e:
+mutex_unlock(&DATARMNETd7b5a80f84);}static void DATARMNETf844db79d9(struct 
+timer_list*DATARMNET6e4292679f){schedule_work(&DATARMNET8e3aef0760);}static void
+ DATARMNET3281082da4(struct DATARMNET6fd48c33f6*DATARMNETaa568481cf){u32 
+DATARMNET556cdfb5eb;DATARMNET556cdfb5eb=RMNET_APS_MAJOR<<(0xeb7+1158-0x132d);if(
+DATARMNETaa568481cf->DATARMNET54338da2ff.DATARMNET6c2cba039d>=
+DATARMNET3bc5e7094a)DATARMNET556cdfb5eb|=DATARMNET9628311a6b[(0xd2d+202-0xdf7)];
+else DATARMNET556cdfb5eb|=DATARMNET9628311a6b[DATARMNETaa568481cf->
+DATARMNET54338da2ff.DATARMNET6c2cba039d];if(DATARMNETaa568481cf->
+DATARMNET626c626b74)DATARMNET556cdfb5eb|=RMNET_APS_LLC_MASK;if(
+DATARMNETaa568481cf->DATARMNET40bb1d945b)DATARMNET556cdfb5eb|=RMNET_APS_LLB_MASK
+;DATARMNETaa568481cf->DATARMNET556cdfb5eb=DATARMNET556cdfb5eb;}static int 
+DATARMNET772c0b87c5(void*DATARMNETe823dcf978,const struct list_head*
+DATARMNET9cf7d31274,const struct list_head*DATARMNET5444bd3b6f){struct 
+DATARMNET6fd48c33f6*DATARMNET40e125212a;struct DATARMNET6fd48c33f6*
+DATARMNETdcaff77beb;DATARMNET40e125212a=list_entry(DATARMNET9cf7d31274,struct 
+DATARMNET6fd48c33f6,DATARMNETed4d7b4a3c);DATARMNETdcaff77beb=list_entry(
+DATARMNET5444bd3b6f,struct DATARMNET6fd48c33f6,DATARMNETed4d7b4a3c);return 
+DATARMNET40e125212a->DATARMNETa27e524d8a>DATARMNETdcaff77beb->
+DATARMNETa27e524d8a;}static void DATARMNET5979020f87(struct work_struct*
+DATARMNET33110a3ff5){struct DATARMNET6fd48c33f6*DATARMNETaa568481cf;u64 
+DATARMNETf78537d374=(0xd2d+202-0xdf7);u64 DATARMNETd39b09fa66=(0xd2d+202-0xdf7);
+u64 DATARMNETedd419d6e2;bool DATARMNETd3eb49eab3=false;mutex_lock(&
+DATARMNETd7b5a80f84);if(!DATARMNET54b95e4416)goto DATARMNETbf4095f79e;
+spin_lock_bh(&DATARMNET33bd4139f4);list_sort(NULL,&DATARMNET7520901fb5,
+DATARMNET772c0b87c5);list_for_each_entry(DATARMNETaa568481cf,&
+DATARMNET7520901fb5,DATARMNETed4d7b4a3c){if(DATARMNETaa568481cf->
+DATARMNET54338da2ff.DATARMNET626c626b74){DATARMNETedd419d6e2=DATARMNETf78537d374
++DATARMNETaa568481cf->DATARMNETa27e524d8a;if(DATARMNETedd419d6e2<
+DATARMNET65d0d735fa){DATARMNETaa568481cf->DATARMNET626c626b74=true;
+DATARMNETaa568481cf->DATARMNET556cdfb5eb|=RMNET_APS_LLC_MASK;DATARMNETf78537d374
+=DATARMNETedd419d6e2;}else{DATARMNETaa568481cf->DATARMNET626c626b74=false;
+DATARMNETaa568481cf->DATARMNET556cdfb5eb&=~RMNET_APS_LLC_MASK;}
+DATARMNET112d724eff(
+"\x61\x70\x73\x3a\x20\x66\x6c\x6f\x77\x20\x30\x78\x25\x78\x20\x74\x78\x5f\x62\x79\x74\x65\x73\x20\x25\x6c\x6c\x75\x20\x6c\x6c\x63\x20\x25\x64\x20\x6c\x6c\x63\x5f\x62\x79\x74\x65\x73\x20"
+"\x25\x6c\x6c\x75" "\n",DATARMNETaa568481cf->DATARMNET54338da2ff.
+DATARMNETbb588401ec,DATARMNETaa568481cf->DATARMNETa27e524d8a,DATARMNETaa568481cf
+->DATARMNET626c626b74,DATARMNETf78537d374);}if(DATARMNETaa568481cf->
+DATARMNET54338da2ff.DATARMNET40bb1d945b){DATARMNETedd419d6e2=DATARMNETd39b09fa66
++DATARMNETaa568481cf->DATARMNETa27e524d8a;if(DATARMNETedd419d6e2<
+DATARMNETb8ab933cae){DATARMNETaa568481cf->DATARMNET40bb1d945b=true;
+DATARMNETaa568481cf->DATARMNET556cdfb5eb|=RMNET_APS_LLB_MASK;DATARMNETd39b09fa66
+=DATARMNETedd419d6e2;}else{DATARMNETaa568481cf->DATARMNET40bb1d945b=false;
+DATARMNETaa568481cf->DATARMNET556cdfb5eb&=~RMNET_APS_LLB_MASK;}
+DATARMNET112d724eff(
+"\x61\x70\x73\x3a\x20\x66\x6c\x6f\x77\x20\x30\x78\x25\x78\x20\x74\x78\x5f\x62\x79\x74\x65\x73\x20\x25\x6c\x6c\x75\x20\x6c\x6c\x62\x20\x25\x64\x20\x6c\x6c\x62\x5f\x62\x79\x74\x65\x73\x20"
+"\x25\x6c\x6c\x75" "\n",DATARMNETaa568481cf->DATARMNET54338da2ff.
+DATARMNETbb588401ec,DATARMNETaa568481cf->DATARMNETa27e524d8a,DATARMNETaa568481cf
+->DATARMNET40bb1d945b,DATARMNETd39b09fa66);}if(DATARMNETaa568481cf->
+DATARMNETa27e524d8a){DATARMNETd3eb49eab3=true;DATARMNETaa568481cf->
+DATARMNETa27e524d8a=(0xd2d+202-0xdf7);}}spin_unlock_bh(&DATARMNET33bd4139f4);
+DATARMNETbf4095f79e:mutex_unlock(&DATARMNETd7b5a80f84);if(DATARMNETd3eb49eab3)
+schedule_delayed_work(&DATARMNET3481998252,DATARMNETfd026b105a);}static int 
+DATARMNET82d65f9ca6(struct list_head*DATARMNET817a8d238c,struct 
+DATARMNET5d4139d9d7*DATARMNETddcafd8b91){struct DATARMNET6fd48c33f6*
+DATARMNETaa568481cf;DATARMNETaa568481cf=DATARMNET3ed11fdc8d(DATARMNET817a8d238c,
+DATARMNETddcafd8b91->DATARMNETbb588401ec);if(DATARMNETddcafd8b91->cmd==
+DATARMNET3412b803e1){if(DATARMNETaa568481cf)DATARMNET7fa3dd63cb(
+DATARMNETaa568481cf);return(0xd2d+202-0xdf7);}if(DATARMNETddcafd8b91->cmd==
+DATARMNETceae994093&&DATARMNETaa568481cf){DATARMNET7fa3dd63cb(
+DATARMNETaa568481cf);DATARMNETaa568481cf=NULL;}if(!DATARMNETaa568481cf){if(
+DATARMNETfef55eaf9a>=DATARMNETe1763a8705){DATARMNET112d724eff(
+"\x61\x70\x73\x3a\x20\x66\x6c\x6f\x77\x20\x63\x6f\x75\x6e\x74\x20\x25\x75\x20\x65\x78\x63\x65\x65\x64\x73\x20\x6d\x61\x78" "\n"
+,DATARMNETfef55eaf9a);return-EINVAL;}DATARMNETaa568481cf=kzalloc(sizeof(*
+DATARMNETaa568481cf),GFP_KERNEL);if(!DATARMNETaa568481cf){DATARMNET112d724eff(
+"\x61\x70\x73\x3a\x20\x6e\x6f\x20\x6d\x65\x6d\x6f\x72\x79" "\n");return-ENOMEM;}
+memcpy(&DATARMNETaa568481cf->DATARMNET54338da2ff,DATARMNETddcafd8b91,sizeof(
+DATARMNETaa568481cf->DATARMNET54338da2ff));DATARMNETaa568481cf->
+DATARMNET626c626b74=DATARMNETaa568481cf->DATARMNET54338da2ff.DATARMNET626c626b74
+;DATARMNETaa568481cf->DATARMNET40bb1d945b=DATARMNETaa568481cf->
+DATARMNET54338da2ff.DATARMNET40bb1d945b;DATARMNET3281082da4(DATARMNETaa568481cf)
+;if(DATARMNETddcafd8b91->DATARMNET655f822a62){DATARMNETaa568481cf->
+DATARMNETee01ad514b=DATARMNETddcafd8b91->DATARMNET655f822a62*HZ;
+DATARMNETaa568481cf->expires=jiffies+DATARMNETaa568481cf->DATARMNETee01ad514b;}
+DATARMNET1e616c2160(DATARMNET817a8d238c,DATARMNETaa568481cf);}else{spin_lock_bh(
+&DATARMNET33bd4139f4);memcpy(&DATARMNETaa568481cf->DATARMNET54338da2ff,
+DATARMNETddcafd8b91,sizeof(DATARMNETaa568481cf->DATARMNET54338da2ff));
+DATARMNETaa568481cf->DATARMNET626c626b74=DATARMNETaa568481cf->
+DATARMNET54338da2ff.DATARMNET626c626b74;DATARMNETaa568481cf->DATARMNET40bb1d945b
+=DATARMNETaa568481cf->DATARMNET54338da2ff.DATARMNET40bb1d945b;
+DATARMNET3281082da4(DATARMNETaa568481cf);spin_unlock_bh(&DATARMNET33bd4139f4);
+DATARMNET112d724eff(
+"\x61\x70\x73\x3a\x20\x66\x6c\x6f\x77\x20\x30\x78\x25\x78\x20\x75\x70\x64\x61\x74\x65\x64" "\n"
+,DATARMNETaa568481cf->DATARMNET54338da2ff.DATARMNETbb588401ec);}return
+(0xd2d+202-0xdf7);}static int DATARMNETbd1d5c8f28(struct genl_info*
+DATARMNET54338da2ff,u8 cmd,int DATARMNETbc8c3c13e8,int DATARMNET5d9df1c423,void*
+DATARMNET8dad72c67a,gfp_t flags){struct sk_buff*DATARMNET543491eb0f=NULL;void*
+DATARMNETd7f97e2e5a;int DATARMNETb14e52a504;if(unlikely(!DATARMNET54338da2ff))
+return-EINVAL;DATARMNET543491eb0f=genlmsg_new(nla_total_size(DATARMNET5d9df1c423
+),flags);if(!DATARMNET543491eb0f)goto DATARMNETbf4095f79e;DATARMNETd7f97e2e5a=
+genlmsg_put(DATARMNET543491eb0f,(0xd2d+202-0xdf7),DATARMNET54338da2ff->snd_seq+
+(0xd26+209-0xdf6),&DATARMNETcdba30eca9,(0xd2d+202-0xdf7),cmd);if(!
+DATARMNETd7f97e2e5a)goto DATARMNETbf4095f79e;DATARMNETb14e52a504=nla_put(
+DATARMNET543491eb0f,DATARMNETbc8c3c13e8,DATARMNET5d9df1c423,DATARMNET8dad72c67a)
+;if(DATARMNETb14e52a504)goto DATARMNETbf4095f79e;genlmsg_end(DATARMNET543491eb0f
+,DATARMNETd7f97e2e5a);DATARMNETb14e52a504=genlmsg_unicast(genl_info_net(
+DATARMNET54338da2ff),DATARMNET543491eb0f,DATARMNET54338da2ff->snd_portid);if(
+DATARMNETb14e52a504){DATARMNET543491eb0f=NULL;goto DATARMNETbf4095f79e;}return
+(0xd2d+202-0xdf7);DATARMNETbf4095f79e:DATARMNET112d724eff(
+"\x61\x70\x73\x3a\x20\x46\x41\x49\x4c\x45\x44\x20\x74\x6f\x20\x73\x65\x6e\x64\x20\x6d\x73\x67\x20\x25\x64" "\n"
+,cmd);if(DATARMNET543491eb0f)kfree_skb(DATARMNET543491eb0f);return-EFAULT;}
+static void DATARMNET446f780f19(u32 DATARMNETbb588401ec,u8 DATARMNETf8bbe3b0fb){
+struct DATARMNETca79857d4a DATARMNETa13fcf9070;if(!DATARMNET7d98961cbe.
+snd_portid){DATARMNET112d724eff(
+"\x61\x70\x73\x3a\x20\x63\x6c\x69\x65\x6e\x74\x20\x6e\x6f\x74\x20\x63\x6f\x6e\x6e\x65\x63\x74\x65\x64" "\n"
+);return;}DATARMNETa13fcf9070.cmd=DATARMNETdc217f1b29;DATARMNETa13fcf9070.
+DATARMNETe65883bfce=DATARMNETf8bbe3b0fb;DATARMNETa13fcf9070.DATARMNETbb588401ec=
+DATARMNETbb588401ec;if(DATARMNETbd1d5c8f28(&DATARMNET7d98961cbe,
+DATARMNET15437be67e,DATARMNET818a0b6438,sizeof(DATARMNETa13fcf9070),&
+DATARMNETa13fcf9070,GFP_ATOMIC)){DATARMNET112d724eff(
+"\x61\x70\x73\x3a\x20\x63\x6c\x69\x65\x6e\x74\x20\x73\x65\x6e\x64\x20\x66\x61\x69\x6c\x65\x64\x2e\x20\x64\x69\x73\x61\x62\x6c\x65\x20\x63\x6c\x69\x65\x6e\x74" "\n"
+);DATARMNET7d98961cbe.snd_portid=(0xd2d+202-0xdf7);}}static void 
+DATARMNET30dd480cad(struct net_device*DATARMNET413e8dcf7b,struct sk_buff*
+DATARMNET543491eb0f){struct DATARMNET6fd48c33f6*DATARMNETaa568481cf;struct 
+DATARMNET758277d429*aps_cb;struct DATARMNETc4743b996e*DATARMNET81b03d6be4;if(
+DATARMNET2fe4661b82&&(DATARMNET543491eb0f->priority>>(0xeb7+1158-0x132d)!=
+DATARMNET2fe4661b82))return;aps_cb=DATARMNETe1c7654a2e(DATARMNET413e8dcf7b);
+DATARMNET81b03d6be4=rcu_dereference(aps_cb->DATARMNETac8d594fb6);if(!
+DATARMNET81b03d6be4)return;if(DATARMNET2fe4661b82)DATARMNETaa568481cf=
+DATARMNET3ed11fdc8d(&DATARMNET81b03d6be4->DATARMNET46c1c4375f,
+DATARMNET543491eb0f->priority);else DATARMNETaa568481cf=DATARMNETfb13c018fc(&
+DATARMNET81b03d6be4->DATARMNET46c1c4375f,DATARMNET543491eb0f);if(
+DATARMNETaa568481cf){spin_lock_bh(&DATARMNET33bd4139f4);DATARMNET543491eb0f->
+priority=DATARMNETaa568481cf->DATARMNET556cdfb5eb;DATARMNETaa568481cf->expires=
+jiffies+DATARMNETaa568481cf->DATARMNETee01ad514b;DATARMNETaa568481cf->
+DATARMNETa27e524d8a+=DATARMNET543491eb0f->len;spin_unlock_bh(&
+DATARMNET33bd4139f4);schedule_delayed_work(&DATARMNET3481998252,
+DATARMNETfd026b105a);}}static int DATARMNET998f6cbce7(struct notifier_block*
+DATARMNET272c159b3c,unsigned long DATARMNET9a4761f31c,void*data){struct 
+net_device*DATARMNET413e8dcf7b;struct DATARMNET758277d429*aps_cb;struct 
+DATARMNETc4743b996e*DATARMNET81b03d6be4;DATARMNET413e8dcf7b=
+netdev_notifier_info_to_dev(data);if(unlikely(!DATARMNET413e8dcf7b))return 
+NOTIFY_DONE;if(!DATARMNET4e81d27dfb(DATARMNET413e8dcf7b))return NOTIFY_DONE;
+aps_cb=DATARMNETe1c7654a2e(DATARMNET413e8dcf7b);BUILD_BUG_ON(sizeof(*aps_cb)>
+sizeof(((struct rmnet_priv*)(0xd2d+202-0xdf7))->aps_cb));switch(
+DATARMNET9a4761f31c){case NETDEV_DOWN:aps_cb->DATARMNET91119c34ed=
+(0xd2d+202-0xdf7);mutex_lock(&DATARMNETd7b5a80f84);DATARMNET250448eb06(
+DATARMNET413e8dcf7b->ifindex);mutex_unlock(&DATARMNETd7b5a80f84);break;case 
+NETDEV_UNREGISTER:mutex_lock(&DATARMNETd7b5a80f84);DATARMNET250448eb06(
+DATARMNET413e8dcf7b->ifindex);DATARMNET81b03d6be4=rcu_dereference(aps_cb->
+DATARMNETac8d594fb6);if(DATARMNET81b03d6be4){WARN_ON(!list_empty(&
+DATARMNET81b03d6be4->DATARMNET46c1c4375f));rcu_assign_pointer(aps_cb->
+DATARMNETac8d594fb6,NULL);kfree_rcu(DATARMNET81b03d6be4,DATARMNET28bfe9e6ad);}
+mutex_unlock(&DATARMNETd7b5a80f84);break;default:break;}return NOTIFY_DONE;}int 
+DATARMNET37a9efbbcb(struct sk_buff*DATARMNETaafc1d9519,struct genl_info*
+DATARMNET54338da2ff){struct nlattr*DATARMNET9c5e00ef03;struct 
+DATARMNET5d4139d9d7 DATARMNETddcafd8b91;struct DATARMNETca79857d4a 
+DATARMNETa13fcf9070;struct net_device*DATARMNET413e8dcf7b=NULL;struct 
+DATARMNET758277d429*aps_cb;struct DATARMNETc4743b996e*DATARMNET81b03d6be4;int 
+DATARMNETb14e52a504=-EINVAL;DATARMNET112d724eff(
+"\x61\x70\x73\x3a\x20\x25\x73" "\n",__func__);if(!DATARMNET54338da2ff)return-
+EINVAL;DATARMNET9c5e00ef03=DATARMNET54338da2ff->attrs[DATARMNET98b93f2e86];if(!
+DATARMNET9c5e00ef03){DATARMNET112d724eff(
+"\x61\x70\x73\x3a\x20\x6e\x6f\x20\x61\x74\x74\x72\x73" "\n");return-EINVAL;}if(
+nla_memcpy(&DATARMNETddcafd8b91,DATARMNET9c5e00ef03,sizeof(DATARMNETddcafd8b91))
+<=(0xd2d+202-0xdf7)){DATARMNET112d724eff(
+"\x61\x70\x73\x3a\x20\x6e\x6c\x61\x5f\x6d\x65\x6d\x63\x70\x79\x20\x66\x61\x69\x6c\x65\x64" "\n"
+);return-EINVAL;}mutex_lock(&DATARMNETd7b5a80f84);if(!DATARMNET54b95e4416)goto 
+DATARMNETbf4095f79e;switch(DATARMNETddcafd8b91.cmd){case DATARMNET63ff5c35c2:
+DATARMNET7d98961cbe=*DATARMNET54338da2ff;DATARMNET9ac8a34003();
+DATARMNET2fe4661b82=(u16)DATARMNETddcafd8b91.DATARMNETbb588401ec;
+DATARMNET112d724eff(
+"\x61\x70\x73\x3a\x20\x63\x6c\x69\x65\x6e\x74\x20\x69\x6e\x69\x74\x20\x63\x6f\x6f\x6b\x69\x65\x20\x30\x78\x25\x78" "\n"
+,DATARMNET2fe4661b82);DATARMNETb14e52a504=(0xd2d+202-0xdf7);break;case 
+DATARMNETceae994093:case DATARMNET3412b803e1:case DATARMNET1efd633004:if(
+DATARMNETddcafd8b91.ifindex)DATARMNET413e8dcf7b=dev_get_by_index(&init_net,
+DATARMNETddcafd8b91.ifindex);if(!DATARMNET413e8dcf7b){DATARMNET112d724eff(
+"\x61\x70\x73\x3a\x20\x6e\x6f\x20\x64\x65\x76\x20\x66\x6f\x72\x20\x69\x66\x69\x6e\x64\x65\x78\x20\x25\x75" "\n"
+,DATARMNETddcafd8b91.ifindex);break;}if(DATARMNET4e81d27dfb(DATARMNET413e8dcf7b)
+){aps_cb=DATARMNETe1c7654a2e(DATARMNET413e8dcf7b);DATARMNET81b03d6be4=
+rcu_dereference(aps_cb->DATARMNETac8d594fb6);if(!DATARMNET81b03d6be4&&
+DATARMNETddcafd8b91.cmd==DATARMNETceae994093){DATARMNET81b03d6be4=kzalloc(sizeof
+(*DATARMNET81b03d6be4),GFP_KERNEL);if(DATARMNET81b03d6be4){INIT_LIST_HEAD(&
+DATARMNET81b03d6be4->DATARMNET46c1c4375f);rcu_assign_pointer(aps_cb->
+DATARMNETac8d594fb6,DATARMNET81b03d6be4);}else{DATARMNET112d724eff(
+"\x61\x70\x73\x3a\x20\x6e\x6f\x20\x6d\x65\x6d\x6f\x72\x79" "\n");}}if(
+DATARMNET81b03d6be4)DATARMNETb14e52a504=DATARMNET82d65f9ca6(&DATARMNET81b03d6be4
+->DATARMNET46c1c4375f,&DATARMNETddcafd8b91);else DATARMNET112d724eff(
+"\x61\x70\x73\x3a\x20\x6e\x6f\x20\x66\x6c\x6f\x77\x20\x6c\x69\x73\x74\x20\x66\x6f\x72\x20\x66\x6c\x6f\x77\x20\x72\x65\x71" "\n"
+);}dev_put(DATARMNET413e8dcf7b);break;default:break;}DATARMNETbf4095f79e:
+mutex_unlock(&DATARMNETd7b5a80f84);DATARMNETa13fcf9070.cmd=DATARMNETddcafd8b91.
+cmd;DATARMNETa13fcf9070.DATARMNETe65883bfce=DATARMNETb14e52a504;
+DATARMNETa13fcf9070.DATARMNETbb588401ec=DATARMNETddcafd8b91.DATARMNETbb588401ec;
+DATARMNETb14e52a504=DATARMNETbd1d5c8f28(DATARMNET54338da2ff,DATARMNET15437be67e,
+DATARMNET818a0b6438,sizeof(DATARMNETa13fcf9070),&DATARMNETa13fcf9070,GFP_KERNEL)
+;return DATARMNETb14e52a504;}static int DATARMNET9e18f3d501(struct list_head*
+DATARMNET817a8d238c,struct DATARMNETd51e57e3f4*DATARMNETddcafd8b91){struct 
+DATARMNET6fd48c33f6*DATARMNETaa568481cf;struct DATARMNETb356c61ad6*
+DATARMNET8f197b20f6;DATARMNETaa568481cf=DATARMNET3ed11fdc8d(DATARMNET817a8d238c,
+DATARMNETddcafd8b91->DATARMNETbb588401ec);if(!DATARMNETaa568481cf){
+DATARMNET112d724eff(
+"\x61\x70\x73\x3a\x20\x66\x6c\x6f\x77\x20\x30\x78\x25\x78\x20\x6e\x6f\x74\x20\x66\x6f\x75\x6e\x64" "\n"
+,DATARMNETddcafd8b91->DATARMNETbb588401ec);return-EINVAL;}switch(
+DATARMNETddcafd8b91->cmd){case DATARMNETd0bce1573e:DATARMNET8f197b20f6=
+rcu_dereference(DATARMNETaa568481cf->DATARMNET8f197b20f6);if(DATARMNET8f197b20f6
+){DATARMNET112d724eff(
+"\x61\x70\x73\x3a\x20\x66\x69\x6c\x74\x65\x72\x20\x66\x6f\x72\x20\x66\x6c\x6f\x77\x20\x30\x78\x25\x78\x20\x65\x78\x69\x73\x74\x73" "\n"
+,DATARMNETddcafd8b91->DATARMNETbb588401ec);return-EINVAL;}DATARMNET8f197b20f6=
+kzalloc(sizeof(*DATARMNET8f197b20f6),GFP_KERNEL);if(!DATARMNET8f197b20f6){
+DATARMNET112d724eff(
+"\x61\x70\x73\x3a\x20\x6e\x6f\x20\x6d\x65\x6d\x6f\x72\x79" "\n");return-ENOMEM;}
+memcpy(&DATARMNET8f197b20f6->DATARMNET54338da2ff,DATARMNETddcafd8b91,sizeof(*
+DATARMNETddcafd8b91));if(DATARMNET8f197b20f6->DATARMNET54338da2ff.tos){if(!
+DATARMNET8f197b20f6->DATARMNET54338da2ff.DATARMNETa400ad4f72)DATARMNET8f197b20f6
+->DATARMNET54338da2ff.DATARMNETa400ad4f72=(0xbf7+4364-0x1c04);
+DATARMNET8f197b20f6->DATARMNET54338da2ff.tos&=DATARMNET8f197b20f6->
+DATARMNET54338da2ff.DATARMNETa400ad4f72;}rcu_assign_pointer(DATARMNETaa568481cf
+->DATARMNET8f197b20f6,DATARMNET8f197b20f6);break;default:return-EINVAL;}return
+(0xd2d+202-0xdf7);}int DATARMNETae6b282c61(struct sk_buff*DATARMNETaafc1d9519,
+struct genl_info*DATARMNET54338da2ff){struct nlattr*DATARMNET9c5e00ef03;struct 
+DATARMNETd51e57e3f4 DATARMNETddcafd8b91;struct DATARMNET15bcb4844b 
+DATARMNETa13fcf9070;struct net_device*DATARMNET413e8dcf7b=NULL;struct 
+DATARMNET758277d429*aps_cb;struct DATARMNETc4743b996e*DATARMNET81b03d6be4;int 
+DATARMNETb14e52a504=-EINVAL;DATARMNET112d724eff(
+"\x61\x70\x73\x3a\x20\x25\x73" "\n",__func__);if(!DATARMNET54338da2ff)return-
+EINVAL;DATARMNET9c5e00ef03=DATARMNET54338da2ff->attrs[DATARMNET7edfedec7f];if(!
+DATARMNET9c5e00ef03){DATARMNET112d724eff(
+"\x61\x70\x73\x3a\x20\x6e\x6f\x20\x61\x74\x74\x72\x73" "\n");return-EINVAL;}if(
+nla_memcpy(&DATARMNETddcafd8b91,DATARMNET9c5e00ef03,sizeof(DATARMNETddcafd8b91))
+<=(0xd2d+202-0xdf7)){DATARMNET112d724eff(
+"\x61\x70\x73\x3a\x20\x6e\x6c\x61\x5f\x6d\x65\x6d\x63\x70\x79\x20\x66\x61\x69\x6c\x65\x64" "\n"
+);return-EINVAL;}mutex_lock(&DATARMNETd7b5a80f84);if(!DATARMNET54b95e4416)goto 
+DATARMNETbf4095f79e;if(DATARMNETddcafd8b91.ifindex)DATARMNET413e8dcf7b=
+dev_get_by_index(&init_net,DATARMNETddcafd8b91.ifindex);if(!DATARMNET413e8dcf7b)
+{DATARMNET112d724eff(
+"\x61\x70\x73\x3a\x20\x6e\x6f\x20\x64\x65\x76\x20\x66\x6f\x72\x20\x69\x66\x69\x6e\x64\x65\x78\x20\x25\x75" "\n"
+,DATARMNETddcafd8b91.ifindex);goto DATARMNETbf4095f79e;}if(!DATARMNET4e81d27dfb(
+DATARMNET413e8dcf7b)){dev_put(DATARMNET413e8dcf7b);goto DATARMNETbf4095f79e;}
+switch(DATARMNETddcafd8b91.cmd){case DATARMNETd0bce1573e:aps_cb=
+DATARMNETe1c7654a2e(DATARMNET413e8dcf7b);DATARMNET81b03d6be4=rcu_dereference(
+aps_cb->DATARMNETac8d594fb6);if(DATARMNET81b03d6be4)DATARMNETb14e52a504=
+DATARMNET9e18f3d501(&DATARMNET81b03d6be4->DATARMNET46c1c4375f,&
+DATARMNETddcafd8b91);else DATARMNET112d724eff(
+"\x61\x70\x73\x3a\x20\x6e\x6f\x20\x66\x6c\x6f\x77\x20\x6c\x69\x73\x74" "\n");
+break;default:break;}dev_put(DATARMNET413e8dcf7b);DATARMNETbf4095f79e:
+mutex_unlock(&DATARMNETd7b5a80f84);DATARMNETa13fcf9070.cmd=DATARMNETddcafd8b91.
+cmd;DATARMNETa13fcf9070.DATARMNETe65883bfce=DATARMNETb14e52a504;
+DATARMNETa13fcf9070.DATARMNETbb588401ec=DATARMNETddcafd8b91.DATARMNETbb588401ec;
+DATARMNETb14e52a504=DATARMNETbd1d5c8f28(DATARMNET54338da2ff,DATARMNET97eefd45e3,
+DATARMNETd2b1517d6b,sizeof(DATARMNETa13fcf9070),&DATARMNETa13fcf9070,GFP_KERNEL)
+;return DATARMNETb14e52a504;}static ktime_t DATARMNETe7a1ab1dab;int 
+DATARMNET1998d09852(struct sk_buff*DATARMNETaafc1d9519,struct genl_info*
+DATARMNET54338da2ff){struct nlattr*DATARMNET9c5e00ef03;struct 
+DATARMNET797a5b1493 DATARMNETddcafd8b91;struct DATARMNET9a727f81bc 
+DATARMNETa13fcf9070;struct net_device*DATARMNET413e8dcf7b;struct 
+DATARMNET758277d429*aps_cb;int DATARMNETb14e52a504;DATARMNET112d724eff(
+"\x61\x70\x73\x3a\x20\x25\x73" "\n",__func__);if(!DATARMNET54338da2ff)return-
+EINVAL;DATARMNET9c5e00ef03=DATARMNET54338da2ff->attrs[DATARMNET572e4a28eb];if(!
+DATARMNET9c5e00ef03){DATARMNET112d724eff(
+"\x61\x70\x73\x3a\x20\x6e\x6f\x20\x61\x74\x74\x72\x73" "\n");return-EINVAL;}if(
+nla_memcpy(&DATARMNETddcafd8b91,DATARMNET9c5e00ef03,sizeof(DATARMNETddcafd8b91))
+<=(0xd2d+202-0xdf7)){DATARMNET112d724eff(
+"\x61\x70\x73\x3a\x20\x6e\x6c\x61\x5f\x6d\x65\x6d\x63\x70\x79\x20\x66\x61\x69\x6c\x65\x64" "\n"
+);return-EINVAL;}DATARMNET112d724eff(
+"\x61\x70\x73\x3a\x20\x69\x66\x69\x6e\x64\x65\x78\x20\x25\x75\x20\x65\x78\x70\x69\x72\x65\x5f\x6d\x73\x20\x25\x75" "\n"
+,DATARMNETddcafd8b91.ifindex,DATARMNETddcafd8b91.DATARMNETc277c62678);if(
+DATARMNETddcafd8b91.DATARMNETc277c62678){ktime_t DATARMNET35f4c14174=ms_to_ktime
+(DATARMNETddcafd8b91.DATARMNETc277c62678);if(DATARMNETe7a1ab1dab!=
+DATARMNET35f4c14174)DATARMNETe7a1ab1dab=DATARMNET35f4c14174;}DATARMNET413e8dcf7b
+=dev_get_by_index(&init_net,DATARMNETddcafd8b91.ifindex);if(DATARMNET413e8dcf7b)
+{if(DATARMNET4e81d27dfb(DATARMNET413e8dcf7b)){aps_cb=DATARMNETe1c7654a2e(
+DATARMNET413e8dcf7b);aps_cb->DATARMNET91119c34ed=DATARMNETddcafd8b91.
+DATARMNETc277c62678?(0xd26+209-0xdf6):(0xd2d+202-0xdf7);}dev_put(
+DATARMNET413e8dcf7b);}memset(&DATARMNETa13fcf9070,(0xd2d+202-0xdf7),sizeof(
+DATARMNETa13fcf9070));DATARMNETa13fcf9070.ifindex=DATARMNETddcafd8b91.ifindex;
+DATARMNETb14e52a504=DATARMNETbd1d5c8f28(DATARMNET54338da2ff,DATARMNET4f09ad7688,
+DATARMNETe54d857ffe,sizeof(DATARMNETa13fcf9070),&DATARMNETa13fcf9070,GFP_KERNEL)
+;return DATARMNETb14e52a504;}static void DATARMNETe0c7b9d5a4(struct net_device*
+DATARMNET413e8dcf7b,struct sk_buff*DATARMNET543491eb0f){struct 
+DATARMNET758277d429*aps_cb=DATARMNETe1c7654a2e(DATARMNET413e8dcf7b);if(aps_cb->
+DATARMNET91119c34ed)skb_hwtstamps(DATARMNET543491eb0f)->hwtstamp=
+ktime_get_boottime();else skb_hwtstamps(DATARMNET543491eb0f)->hwtstamp=
+(0xd2d+202-0xdf7);if(READ_ONCE(DATARMNETfef55eaf9a))DATARMNET30dd480cad(
+DATARMNET413e8dcf7b,DATARMNET543491eb0f);}static int DATARMNET6ab4bbdaf4(struct 
+net_device*DATARMNET413e8dcf7b,struct sk_buff*DATARMNET543491eb0f){struct 
+DATARMNET758277d429*aps_cb=DATARMNETe1c7654a2e(DATARMNET413e8dcf7b);ktime_t 
+DATARMNET912d2a7edd;if(aps_cb->DATARMNET91119c34ed&&skb_hwtstamps(
+DATARMNET543491eb0f)->hwtstamp&&DATARMNETe7a1ab1dab){DATARMNET912d2a7edd=
+ktime_get_boottime();if(ktime_sub(DATARMNET912d2a7edd,skb_hwtstamps(
+DATARMNET543491eb0f)->hwtstamp)>DATARMNETe7a1ab1dab)return-ETIMEDOUT;}return
+(0xd2d+202-0xdf7);}static const struct rmnet_module_hook_register_info 
+DATARMNET509284caa6[]={{.hooknum=RMNET_MODULE_HOOK_APS_PRE_QUEUE,.func=
+DATARMNETe0c7b9d5a4,},{.hooknum=RMNET_MODULE_HOOK_APS_POST_QUEUE,.func=
+DATARMNET6ab4bbdaf4,},};static struct proc_dir_entry*DATARMNET147f9b9f22;static 
+struct proc_dir_entry*DATARMNETf9422af3b0;static DEFINE_SPINLOCK(
+DATARMNET86e81617f0);struct DATARMNET837f670f1d{ktime_t DATARMNET763f2e5fac;
+struct DATARMNETf21ed5deb4 DATARMNET5fe4c722a8;};
+#define DATARMNET137373fbd9 (0xd27+224-0xdfd)
+static int DATARMNET04583f0705;static struct DATARMNET837f670f1d 
+DATARMNETeb47903253[DATARMNET137373fbd9];static unsigned int inactive_time;
+static ktime_t DATARMNET6736d5e29d;static ktime_t DATARMNETd4b2cd928c;static int
+ DATARMNETd7fae4b1c9(struct seq_file*DATARMNET80f4138358,void*
+DATARMNETc3d0f72ff1){struct DATARMNET837f670f1d*DATARMNET590c4d44f6;s64 
+DATARMNET3c8f5f41f1,DATARMNET7d003c10d9;u8 DATARMNET5c33dbe77d,
+DATARMNETa845529338,DATARMNET35784a722f;int DATARMNETefc9df3df2;spin_lock_bh(&
+DATARMNET86e81617f0);if(!DATARMNETeb47903253[DATARMNET04583f0705].
+DATARMNET763f2e5fac)DATARMNETefc9df3df2=(0xd2d+202-0xdf7);else 
+DATARMNETefc9df3df2=DATARMNET04583f0705;do{DATARMNET590c4d44f6=&
+DATARMNETeb47903253[DATARMNETefc9df3df2];if(!DATARMNET590c4d44f6->
+DATARMNET763f2e5fac)break;DATARMNET3c8f5f41f1=ktime_divns(DATARMNET590c4d44f6->
+DATARMNET763f2e5fac,NSEC_PER_SEC);DATARMNET7d003c10d9=DATARMNET3c8f5f41f1/86400;
+DATARMNET5c33dbe77d=DATARMNET3c8f5f41f1%86400/(0x17a8+2156-0x1204);
+DATARMNETa845529338=DATARMNET3c8f5f41f1%(0x17a8+2156-0x1204)/(0xf07+1090-0x130d)
+;DATARMNET35784a722f=DATARMNET3c8f5f41f1%(0xf07+1090-0x130d);if(
+DATARMNET590c4d44f6->DATARMNET5fe4c722a8.DATARMNET06d2413ad2==IPPROTO_TCP||
+DATARMNET590c4d44f6->DATARMNET5fe4c722a8.DATARMNET06d2413ad2==IPPROTO_UDP){if(
+DATARMNET590c4d44f6->DATARMNET5fe4c722a8.DATARMNET9d758b8e5b==(0xd11+230-0xdf3))
+seq_printf(DATARMNET80f4138358,
+"\x5b\x25\x36\x6c\x6c\x64\x20\x25\x30\x32\x64\x3a\x25\x30\x32\x64\x3a\x25\x30\x32\x64\x5d\x20\x25\x32\x75\x20"
+"\x25\x70\x49\x34\x2f\x25\x75\x20\x25\x70\x49\x34\x2f\x25\x75" "\n",
+DATARMNET7d003c10d9,DATARMNET5c33dbe77d,DATARMNETa845529338,DATARMNET35784a722f,
+DATARMNET590c4d44f6->DATARMNET5fe4c722a8.DATARMNET06d2413ad2,DATARMNET590c4d44f6
+->DATARMNET5fe4c722a8.saddr,DATARMNET590c4d44f6->DATARMNET5fe4c722a8.sport,
+DATARMNET590c4d44f6->DATARMNET5fe4c722a8.daddr,DATARMNET590c4d44f6->
+DATARMNET5fe4c722a8.dport);else seq_printf(DATARMNET80f4138358,
+"\x5b\x25\x36\x6c\x6c\x64\x20\x25\x30\x32\x64\x3a\x25\x30\x32\x64\x3a\x25\x30\x32\x64\x5d\x20\x25\x32\x75\x20"
+"\x25\x70\x49\x36\x2f\x25\x75\x20\x25\x70\x49\x36\x2f\x25\x75" "\n",
+DATARMNET7d003c10d9,DATARMNET5c33dbe77d,DATARMNETa845529338,DATARMNET35784a722f,
+DATARMNET590c4d44f6->DATARMNET5fe4c722a8.DATARMNET06d2413ad2,DATARMNET590c4d44f6
+->DATARMNET5fe4c722a8.saddr,DATARMNET590c4d44f6->DATARMNET5fe4c722a8.sport,
+DATARMNET590c4d44f6->DATARMNET5fe4c722a8.daddr,DATARMNET590c4d44f6->
+DATARMNET5fe4c722a8.dport);}else{if(DATARMNET590c4d44f6->DATARMNET5fe4c722a8.
+DATARMNET9d758b8e5b==(0xd11+230-0xdf3))seq_printf(DATARMNET80f4138358,
+"\x5b\x25\x36\x6c\x6c\x64\x20\x25\x30\x32\x64\x3a\x25\x30\x32\x64\x3a\x25\x30\x32\x64\x5d\x20\x25\x32\x75\x20\x25\x70\x49\x34\x20"
+"\x25\x70\x49\x34" "\n",DATARMNET7d003c10d9,DATARMNET5c33dbe77d,
+DATARMNETa845529338,DATARMNET35784a722f,DATARMNET590c4d44f6->DATARMNET5fe4c722a8
+.DATARMNET06d2413ad2,DATARMNET590c4d44f6->DATARMNET5fe4c722a8.saddr,
+DATARMNET590c4d44f6->DATARMNET5fe4c722a8.daddr);else seq_printf(
+DATARMNET80f4138358,
+"\x5b\x25\x36\x6c\x6c\x64\x20\x25\x30\x32\x64\x3a\x25\x30\x32\x64\x3a\x25\x30\x32\x64\x5d\x20\x25\x32\x75\x20\x25\x70\x49\x36\x20"
+"\x25\x70\x49\x36" "\n",DATARMNET7d003c10d9,DATARMNET5c33dbe77d,
+DATARMNETa845529338,DATARMNET35784a722f,DATARMNET590c4d44f6->DATARMNET5fe4c722a8
+.DATARMNET06d2413ad2,DATARMNET590c4d44f6->DATARMNET5fe4c722a8.saddr,
+DATARMNET590c4d44f6->DATARMNET5fe4c722a8.daddr);}if(++DATARMNETefc9df3df2>=
+DATARMNET137373fbd9)DATARMNETefc9df3df2=(0xd2d+202-0xdf7);}while(
+DATARMNETefc9df3df2!=DATARMNET04583f0705);spin_unlock_bh(&DATARMNET86e81617f0);
+return(0xd2d+202-0xdf7);}static void DATARMNET71e03e7287(void){spin_lock_bh(&
+DATARMNET86e81617f0);DATARMNETd4b2cd928c=ktime_get_coarse_boottime();
+spin_unlock_bh(&DATARMNET86e81617f0);}static void DATARMNETfb7a2ce025(struct 
+rmnet_frag_descriptor*DATARMNET9d1b321642,struct sk_buff*DATARMNET543491eb0f){
+struct DATARMNETf21ed5deb4 DATARMNET203a7a0136={(0xd2d+202-0xdf7),};struct 
+DATARMNET837f670f1d*DATARMNET590c4d44f6;ktime_t DATARMNET5711967d6f;int 
+DATARMNET61c2303133;if(!DATARMNET9d1b321642&&!DATARMNET543491eb0f)return;
+spin_lock_bh(&DATARMNET86e81617f0);if(!DATARMNET6736d5e29d)goto 
+DATARMNETbf4095f79e;DATARMNET5711967d6f=ktime_get_coarse_boottime();if(ktime_sub
+(DATARMNET5711967d6f,DATARMNETd4b2cd928c)>DATARMNET6736d5e29d){if(
+DATARMNET9d1b321642)DATARMNET61c2303133=DATARMNET9e7ac83deb(DATARMNET9d1b321642,
+&DATARMNET203a7a0136);else if(DATARMNET543491eb0f)DATARMNET61c2303133=
+DATARMNET481989429b(DATARMNET543491eb0f,&DATARMNET203a7a0136);else 
+DATARMNET61c2303133=-EINVAL;if(DATARMNET61c2303133||(DATARMNET203a7a0136.
+DATARMNETe419bc836d&&!DATARMNET203a7a0136.DATARMNETd43be7664c))goto 
+DATARMNETbf4095f79e;DATARMNET590c4d44f6=&DATARMNETeb47903253[DATARMNET04583f0705
+];DATARMNET590c4d44f6->DATARMNET763f2e5fac=DATARMNET5711967d6f;
+DATARMNET590c4d44f6->DATARMNET5fe4c722a8=DATARMNET203a7a0136;if(++
+DATARMNET04583f0705>=DATARMNET137373fbd9)DATARMNET04583f0705=(0xd2d+202-0xdf7);}
+DATARMNETbf4095f79e:spin_unlock_bh(&DATARMNET86e81617f0);}static const struct 
+rmnet_module_hook_register_info DATARMNETbdf157f06a[]={{.hooknum=
+RMNET_MODULE_HOOK_APS_DATA_INACTIVE,.func=DATARMNET71e03e7287,},{.hooknum=
+RMNET_MODULE_HOOK_APS_DATA_ACTIVE,.func=DATARMNETfb7a2ce025,},};static int 
+DATARMNET8871996254(const char*DATARMNETcc6099cb14,const struct kernel_param*
+DATARMNETb3ce0fdc63){unsigned int DATARMNET3f85732c70;if(kstrtouint(
+DATARMNETcc6099cb14,(0xd27+224-0xdfd),&DATARMNET3f85732c70))return-EINVAL;
+spin_lock_bh(&DATARMNET86e81617f0);if(DATARMNET3f85732c70){DATARMNET6736d5e29d=
+ms_to_ktime(DATARMNET3f85732c70*(0xdc7+2653-0x143c));DATARMNETd4b2cd928c=
+ktime_get_coarse_boottime();rmnet_module_hook_register(DATARMNETbdf157f06a,
+ARRAY_SIZE(DATARMNETbdf157f06a));}else{DATARMNET6736d5e29d=(0xd2d+202-0xdf7);
+rmnet_module_hook_unregister_no_sync(DATARMNETbdf157f06a,ARRAY_SIZE(
+DATARMNETbdf157f06a));}spin_unlock_bh(&DATARMNET86e81617f0);return 
+param_set_uint(DATARMNETcc6099cb14,DATARMNETb3ce0fdc63);}static const struct 
+kernel_param_ops DATARMNETd34b496ea4={.set=DATARMNET8871996254,.get=
+param_get_uint,};module_param_cb(inactive_time,&DATARMNETd34b496ea4,&
+inactive_time,(0xdb7+6665-0x261c));MODULE_PARM_DESC(inactive_time,
+"\x49\x6e\x61\x63\x74\x69\x76\x65\x20\x74\x69\x6d\x65\x20\x69\x6e\x20\x73\x65\x63\x6f\x6e\x64\x73"
+);static void DATARMNET519162865c(void){DATARMNET147f9b9f22=proc_mkdir(
+"\x61\x70\x73",NULL);if(!DATARMNET147f9b9f22){pr_err(
+"\x61\x70\x73\x3a\x20\x66\x61\x69\x6c\x65\x64\x20\x74\x6f\x20\x63\x72\x65\x61\x74\x65\x20\x70\x72\x6f\x63\x20\x64\x69\x72" "\n"
+);return;}DATARMNETf9422af3b0=proc_create_single_data(
+"\x64\x6c\x5f\x61\x63\x74\x69\x76\x69\x74\x79",(0xcb7+5769-0x221c),
+DATARMNET147f9b9f22,DATARMNETd7fae4b1c9,NULL);if(!DATARMNETf9422af3b0)pr_err(
+"\x61\x70\x73\x3a\x20\x66\x61\x69\x6c\x65\x64\x20\x74\x6f\x20\x63\x72\x65\x61\x74\x65\x20\x64\x6c\x5f\x61\x63\x74\x69\x76\x69\x74\x79\x20\x65\x6e\x74\x72\x79" "\n"
+);}static void DATARMNETb4a75cfdea(void){proc_remove(DATARMNETf9422af3b0);
+proc_remove(DATARMNET147f9b9f22);}static bool DATARMNET5500f4ed98=true;static 
+u32 DATARMNETb666ba3e85;static DEFINE_SPINLOCK(DATARMNETc3c07e6644);static 
+LIST_HEAD(DATARMNET5e3c62e3a4);static void DATARMNET2cc15953ac(struct timer_list
+*DATARMNET6e4292679f);static DEFINE_TIMER(DATARMNET2d8efce4f0,
+DATARMNET2cc15953ac);struct DATARMNET321b555862{struct list_head 
+DATARMNET46c1c4375f;struct genl_info DATARMNET54338da2ff;__be32 tx_id;unsigned 
+long expires;};struct DATARMNET548caa01db{struct qmap_cmd_hdr 
+DATARMNET9eab1e957c;u8 DATARMNETde8ef6e56a;u8 DATARMNET6f031e7934;u8 
+DATARMNET08e1628d23;u8 len;__be32 DATARMNETa960d37cad[(0xd35+210-0xdff)];}
+__aligned((0xd26+209-0xdf6));static int DATARMNET3eadc89edf(u8 
+DATARMNET6f031e7934,u8 mux_id,u8 DATARMNETc2284e5688,__be32*DATARMNET40f827eabe)
+{struct sk_buff*DATARMNET543491eb0f;struct DATARMNET548caa01db*
+DATARMNET791beb2b4a;unsigned int len;len=sizeof(struct DATARMNET548caa01db);
+DATARMNET543491eb0f=alloc_skb(len,GFP_ATOMIC);if(!DATARMNET543491eb0f)return-
+ENOMEM;DATARMNET543491eb0f->protocol=htons(ETH_P_MAP);DATARMNET791beb2b4a=
+skb_put(DATARMNET543491eb0f,len);memset(DATARMNET791beb2b4a,(0xd2d+202-0xdf7),
+len);DATARMNET791beb2b4a->DATARMNET9eab1e957c.cd_bit=(0xd26+209-0xdf6);
+DATARMNET791beb2b4a->DATARMNET9eab1e957c.mux_id=DATARMNETc2284e5688?
+(0xbf7+4364-0x1c04):mux_id;DATARMNET791beb2b4a->DATARMNET9eab1e957c.pkt_len=
+htons(len-QMAP_HDR_LEN);DATARMNET791beb2b4a->DATARMNET9eab1e957c.cmd_name=
+QMAP_DATA_REPORT;DATARMNET791beb2b4a->DATARMNET9eab1e957c.cmd_type=
+QMAP_CMD_REQUEST;DATARMNET791beb2b4a->DATARMNET9eab1e957c.tx_id=htonl(
+rmnet_qmap_next_txid());DATARMNET791beb2b4a->DATARMNETde8ef6e56a=
+(0xd26+209-0xdf6);DATARMNET791beb2b4a->DATARMNET6f031e7934=DATARMNET6f031e7934;
+DATARMNET791beb2b4a->DATARMNET08e1628d23=DATARMNETc2284e5688?(0xd26+209-0xdf6):
+(0xd2d+202-0xdf7);if(DATARMNET40f827eabe)*DATARMNET40f827eabe=
+DATARMNET791beb2b4a->DATARMNET9eab1e957c.tx_id;return rmnet_qmap_send(
+DATARMNET543491eb0f,RMNET_CH_CTL,false);}void DATARMNET5ff569bc33(struct sk_buff
+*DATARMNET543491eb0f){struct DATARMNET548caa01db*DATARMNET791beb2b4a;struct 
+DATARMNET321b555862*DATARMNET66942f9c00=NULL;struct DATARMNET321b555862*
+DATARMNETf7b3d2c1a0;struct DATARMNET7fb3ee4333 DATARMNETa13fcf9070;int 
+DATARMNETefc9df3df2;if(DATARMNET543491eb0f->len<sizeof(struct 
+DATARMNET548caa01db))return;DATARMNET791beb2b4a=(struct DATARMNET548caa01db*)
+DATARMNET543491eb0f->data;if(!DATARMNET791beb2b4a||DATARMNET791beb2b4a->
+DATARMNET9eab1e957c.cmd_name!=QMAP_DATA_REPORT||DATARMNET791beb2b4a->
+DATARMNET9eab1e957c.cmd_type!=QMAP_CMD_ACK)return;if(DATARMNET791beb2b4a->len>
+ARRAY_SIZE(DATARMNET791beb2b4a->DATARMNETa960d37cad))return;spin_lock_bh(&
+DATARMNETc3c07e6644);list_for_each_entry(DATARMNETf7b3d2c1a0,&
+DATARMNET5e3c62e3a4,DATARMNET46c1c4375f){if(DATARMNETf7b3d2c1a0->tx_id==
+DATARMNET791beb2b4a->DATARMNET9eab1e957c.tx_id){DATARMNET66942f9c00=
+DATARMNETf7b3d2c1a0;list_del(&DATARMNET66942f9c00->DATARMNET46c1c4375f);
+DATARMNETb666ba3e85--;break;}}spin_unlock_bh(&DATARMNETc3c07e6644);if(
+DATARMNET66942f9c00){DATARMNETa13fcf9070.mux_id=DATARMNET791beb2b4a->
+DATARMNET9eab1e957c.mux_id;DATARMNETa13fcf9070.DATARMNET6f031e7934=
+DATARMNET791beb2b4a->DATARMNET6f031e7934;DATARMNETa13fcf9070.DATARMNET08e1628d23
+=DATARMNET791beb2b4a->DATARMNET08e1628d23;DATARMNETa13fcf9070.len=
+DATARMNET791beb2b4a->len;for(DATARMNETefc9df3df2=(0xd2d+202-0xdf7);
+DATARMNETefc9df3df2<DATARMNETa13fcf9070.len;DATARMNETefc9df3df2++)
+DATARMNETa13fcf9070.DATARMNETa960d37cad[DATARMNETefc9df3df2]=ntohl(
+DATARMNET791beb2b4a->DATARMNETa960d37cad[DATARMNETefc9df3df2]);
+DATARMNETbd1d5c8f28(&DATARMNET66942f9c00->DATARMNET54338da2ff,
+DATARMNET30180ab70e,DATARMNET24b8b9ef93,sizeof(DATARMNETa13fcf9070),&
+DATARMNETa13fcf9070,GFP_ATOMIC);kfree(DATARMNET66942f9c00);}}int 
+DATARMNET568dffe281(struct sk_buff*DATARMNETaafc1d9519,struct genl_info*
+DATARMNET54338da2ff){struct nlattr*DATARMNET9c5e00ef03;struct 
+DATARMNET7fb3ee4333 DATARMNETddcafd8b91;__be32 DATARMNET40f827eabe;struct 
+DATARMNET321b555862*DATARMNET66942f9c00;unsigned long DATARMNETfb1521ef26=
+(0xd2d+202-0xdf7);int DATARMNETb14e52a504;if(!DATARMNET54338da2ff)return-EINVAL;
+DATARMNET9c5e00ef03=DATARMNET54338da2ff->attrs[DATARMNET24b8b9ef93];if(!
+DATARMNET9c5e00ef03){DATARMNET112d724eff(
+"\x61\x70\x73\x3a\x20\x4e\x6f\x20\x64\x61\x74\x61\x20\x72\x65\x70\x6f\x72\x74\x20\x61\x74\x74\x72" "\n"
+);return-EINVAL;}if(nla_memcpy(&DATARMNETddcafd8b91,DATARMNET9c5e00ef03,sizeof(
+DATARMNETddcafd8b91))<=(0xd2d+202-0xdf7)){DATARMNET112d724eff(
+"\x61\x70\x73\x3a\x20\x63\x6f\x70\x79\x20\x64\x61\x74\x61\x20\x72\x65\x70\x6f\x72\x74\x20\x61\x74\x74\x72\x20\x66\x61\x69\x6c\x65\x64" "\n"
+);return-EINVAL;}spin_lock_bh(&DATARMNETc3c07e6644);if(!DATARMNET5500f4ed98){
+DATARMNET112d724eff(
+"\x61\x70\x73\x3a\x20\x69\x67\x6e\x6f\x72\x65\x20\x74\x68\x65\x20\x64\x61\x74\x61\x20\x72\x65\x70\x6f\x72\x74\x20\x72\x65\x71\x75\x65\x73\x74" "\n"
+);goto DATARMNETbf2e68b8a3;}if(DATARMNETb666ba3e85>=(0xd0a+237-0xdf2)){
+DATARMNET112d724eff(
+"\x61\x70\x73\x3a\x20\x74\x6f\x6f\x20\x6d\x61\x6e\x79\x20\x6f\x75\x74\x73\x74\x61\x6e\x64\x69\x6e\x67\x20\x72\x65\x71\x75\x65\x73\x74\x73" "\n"
+);goto DATARMNETbf2e68b8a3;}if(DATARMNET3eadc89edf(DATARMNETddcafd8b91.
+DATARMNET6f031e7934,DATARMNETddcafd8b91.mux_id,DATARMNETddcafd8b91.
+DATARMNET08e1628d23,&DATARMNET40f827eabe)){DATARMNET112d724eff(
+"\x61\x70\x73\x3a\x20\x66\x61\x69\x6c\x65\x64\x20\x74\x6f\x20\x73\x65\x6e\x64\x20\x64\x61\x74\x61\x20\x72\x65\x70\x6f\x72\x74\x20\x63\x6f\x6d\x6d\x61\x6e\x64"
+);goto DATARMNETbf2e68b8a3;}DATARMNET66942f9c00=kzalloc(sizeof(*
+DATARMNET66942f9c00),GFP_ATOMIC);if(!DATARMNET66942f9c00){DATARMNET112d724eff(
+"\x61\x70\x73\x3a\x20\x6e\x6f\x20\x6d\x65\x6d\x6f\x72\x79\x20\x66\x6f\x72\x20\x64\x61\x74\x61\x20\x72\x65\x70\x6f\x72\x74" "\n"
+);goto DATARMNETbf2e68b8a3;}DATARMNET66942f9c00->DATARMNET54338da2ff=*
+DATARMNET54338da2ff;DATARMNET66942f9c00->tx_id=DATARMNET40f827eabe;
+DATARMNET66942f9c00->expires=jiffies+HZ;if(list_empty(&DATARMNET5e3c62e3a4))
+DATARMNETfb1521ef26=DATARMNET66942f9c00->expires;list_add(&DATARMNET66942f9c00->
+DATARMNET46c1c4375f,&DATARMNET5e3c62e3a4);DATARMNETb666ba3e85++;spin_unlock_bh(&
+DATARMNETc3c07e6644);if(DATARMNETfb1521ef26){DATARMNET112d724eff(
+"\x61\x70\x73\x3a\x20\x73\x74\x61\x72\x74\x69\x6e\x67\x20\x64\x61\x74\x61\x20\x72\x65\x70\x6f\x72\x74\x20\x74\x69\x6d\x65\x72" "\n"
+);mod_timer(&DATARMNET2d8efce4f0,DATARMNETfb1521ef26);}return(0xd2d+202-0xdf7);
+DATARMNETbf2e68b8a3:spin_unlock_bh(&DATARMNETc3c07e6644);DATARMNETddcafd8b91.len
+=(0xd2d+202-0xdf7);DATARMNETb14e52a504=DATARMNETbd1d5c8f28(DATARMNET54338da2ff,
+DATARMNET30180ab70e,DATARMNET24b8b9ef93,sizeof(DATARMNETddcafd8b91),&
+DATARMNETddcafd8b91,GFP_KERNEL);return DATARMNETb14e52a504;}static void 
+DATARMNET2cc15953ac(struct timer_list*DATARMNET6e4292679f){struct 
+DATARMNET321b555862*DATARMNET66942f9c00;struct DATARMNET321b555862*
+DATARMNETf7b3d2c1a0;unsigned long DATARMNET02dfdbc38d=jiffies;bool 
+DATARMNETb7430302d6=false;DATARMNET112d724eff(
+"\x61\x70\x73\x3a\x20\x64\x61\x74\x61\x20\x72\x65\x70\x6f\x72\x74\x20\x74\x69\x6d\x65\x72\x20\x66\x69\x72\x65\x64" "\n"
+);spin_lock_bh(&DATARMNETc3c07e6644);list_for_each_entry_safe(
+DATARMNET66942f9c00,DATARMNETf7b3d2c1a0,&DATARMNET5e3c62e3a4,DATARMNET46c1c4375f
+){if(time_before_eq(DATARMNET66942f9c00->expires,DATARMNET02dfdbc38d)){list_del(
+&DATARMNET66942f9c00->DATARMNET46c1c4375f);kfree(DATARMNET66942f9c00);
+DATARMNETb666ba3e85--;DATARMNET112d724eff(
+"\x61\x70\x73\x3a\x20\x72\x65\x6d\x6f\x76\x65\x64\x20\x6f\x6e\x65\x20\x64\x61\x74\x61\x20\x72\x65\x70\x6f\x72\x74\x20\x72\x65\x71\x75\x65\x73\x74" "\n"
+);}}if(!list_empty(&DATARMNET5e3c62e3a4))DATARMNETb7430302d6=true;spin_unlock_bh
+(&DATARMNETc3c07e6644);if(DATARMNETb7430302d6){DATARMNET112d724eff(
+"\x61\x70\x73\x3a\x20\x64\x61\x74\x61\x20\x72\x65\x70\x6f\x72\x74\x20\x74\x69\x6d\x65\x72\x20\x72\x65\x2d\x61\x72\x6d\x65\x64" "\n"
+);mod_timer(&DATARMNET2d8efce4f0,jiffies+HZ);}}static void DATARMNETb3f219d872(
+void){struct DATARMNET321b555862*DATARMNET66942f9c00;struct DATARMNET321b555862*
+DATARMNETf7b3d2c1a0;spin_lock_bh(&DATARMNETc3c07e6644);list_for_each_entry_safe(
+DATARMNET66942f9c00,DATARMNETf7b3d2c1a0,&DATARMNET5e3c62e3a4,DATARMNET46c1c4375f
+){list_del(&DATARMNET66942f9c00->DATARMNET46c1c4375f);kfree(DATARMNET66942f9c00)
+;}DATARMNET5500f4ed98=false;DATARMNETb666ba3e85=(0xd2d+202-0xdf7);spin_unlock_bh
+(&DATARMNETc3c07e6644);}static const struct rmnet_module_hook_register_info 
+DATARMNET644887c40e[]={{.hooknum=RMNET_MODULE_HOOK_APS_DATA_REPORT,.func=
+DATARMNET5ff569bc33,},};static int __init DATARMNET0718a3fa4c(void){int 
+DATARMNETb14e52a504;pr_info(
+"\x61\x70\x73\x3a\x20\x69\x6e\x69\x74\x20\x28\x25\x73\x29" "\n",
+DATARMNETe5ef0e617c);DATARMNETb14e52a504=DATARMNETcfa8d492f8();if(
+DATARMNETb14e52a504){pr_err(
+"\x61\x70\x73\x3a\x20\x66\x61\x69\x6c\x65\x64\x20\x74\x6f\x20\x72\x65\x67\x69\x73\x74\x65\x72\x20\x67\x65\x6e\x6c\x20\x66\x61\x6d\x69\x6c\x79" "\n"
+);return DATARMNETb14e52a504;}register_netdevice_notifier(&DATARMNETc580548769);
+rcu_assign_pointer(rmnet_aps_pre_queue,DATARMNETe0c7b9d5a4);rcu_assign_pointer(
+rmnet_aps_post_queue,DATARMNET6ab4bbdaf4);rmnet_module_hook_register(
+DATARMNET509284caa6,ARRAY_SIZE(DATARMNET509284caa6));rmnet_module_hook_register(
+DATARMNET644887c40e,ARRAY_SIZE(DATARMNET644887c40e));mutex_lock(&
+DATARMNETd7b5a80f84);DATARMNET54b95e4416=true;mutex_unlock(&DATARMNETd7b5a80f84)
+;DATARMNET519162865c();return(0xd2d+202-0xdf7);}static void __exit 
+DATARMNETff67054ba9(void){DATARMNETb4a75cfdea();
+rmnet_module_hook_unregister_no_sync(DATARMNETbdf157f06a,ARRAY_SIZE(
+DATARMNETbdf157f06a));rmnet_module_hook_unregister_no_sync(DATARMNET644887c40e,
+ARRAY_SIZE(DATARMNET644887c40e));rcu_assign_pointer(rmnet_aps_pre_queue,NULL);
+rcu_assign_pointer(rmnet_aps_post_queue,NULL);rmnet_module_hook_unregister(
+DATARMNET509284caa6,ARRAY_SIZE(DATARMNET509284caa6));mutex_lock(&
+DATARMNETd7b5a80f84);DATARMNET54b95e4416=false;DATARMNET9ac8a34003();
+mutex_unlock(&DATARMNETd7b5a80f84);DATARMNET446f780f19((0xd2d+202-0xdf7),
+DATARMNET94016043b8);cancel_delayed_work_sync(&DATARMNET3481998252);
+del_timer_sync(&DATARMNETd21629e047);cancel_work_sync(&DATARMNET8e3aef0760);
+DATARMNETb3f219d872();del_timer_sync(&DATARMNET2d8efce4f0);
+unregister_netdevice_notifier(&DATARMNETc580548769);DATARMNETca7606cfd1();
+DATARMNET112d724eff("\x61\x70\x73\x3a\x20\x65\x78\x69\x74" "\n");}MODULE_LICENSE
+("\x47\x50\x4c\x20\x76\x32");module_init(DATARMNET0718a3fa4c);module_exit(
+DATARMNETff67054ba9);

+ 56 - 0
qcom/opensource/datarmnet-ext/datarmnet_ext_dlkm_vendor_board.mk

@@ -0,0 +1,56 @@
+TARGET_DATARMNET_EXT_ENABLE := false
+
+ifeq ($(TARGET_KERNEL_DLKM_DISABLE), true)
+	ifeq ($(TARGET_KERNEL_DLKM_DATARMNETEXT_OVERRIDE), true)
+		TARGET_DATARMNET_EXT_ENABLE := true
+	endif
+else
+	TARGET_DATARMNET_EXT_ENABLE := true
+endif
+
+ifeq ($(TARGET_DATARMNET_EXT_ENABLE), true)
+	#Build rmnet modules
+	DATA_OFFLOAD_DLKM_BOARD_PLATFORMS_LIST := pineapple
+	DATA_OFFLOAD_DLKM_BOARD_PLATFORMS_LIST += blair
+	DATA_OFFLOAD_DLKM_BOARD_PLATFORMS_LIST += pitti
+	DATA_OFFLOAD_DLKM_BOARD_PLATFORMS_LIST += volcano
+	DATA_SHS_DLKM_BOARD_PLATFORMS_LIST := pineapple
+	DATA_SHS_DLKM_BOARD_PLATFORMS_LIST += blair
+	DATA_SHS_DLKM_BOARD_PLATFORMS_LIST += pitti
+	DATA_SHS_DLKM_BOARD_PLATFORMS_LIST += volcano
+	DATA_APS_DLKM_BOARD_PLATFORMS_LIST := pineapple
+	DATA_APS_DLKM_BOARD_PLATFORMS_LIST += pitti
+	DATA_APS_DLKM_BOARD_PLATFORMS_LIST += volcano
+	DATA_WLAN_DLKM_BOARD_PLATFORMS_LIST := pineapple
+	DATA_WLAN_DLKM_BOARD_PLATFORMS_LIST += blair
+	DATA_WLAN_DLKM_BOARD_PLATFORMS_LIST += monaco
+	DATA_WLAN_DLKM_BOARD_PLATFORMS_LIST += pitti
+	DATA_WLAN_DLKM_BOARD_PLATFORMS_LIST += volcano
+	DATA_MEM_DLKM_BOARD_PLATFORMS_LIST := pineapple
+	DATA_MEM_DLKM_BOARD_PLATFORMS_LIST += blair
+	DATA_MEM_DLKM_BOARD_PLATFORMS_LIST += monaco
+	DATA_MEM_DLKM_BOARD_PLATFORMS_LIST += pitti
+	DATA_MEM_DLKM_BOARD_PLATFORMS_LIST += volcano
+
+	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
+			BOARD_VENDOR_KERNEL_MODULES += $(KERNEL_MODULES_OUT)/rmnet_wlan.ko
+		endif
+		ifeq ($(call is-board-platform-in-list,$(DATA_MEM_DLKM_BOARD_PLATFORMS_LIST)),true)
+			BOARD_VENDOR_KERNEL_MODULES += $(KERNEL_MODULES_OUT)/rmnet_mem.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
+		endif
+		ifeq ($(call is-board-platform-in-list,$(DATA_APS_DLKM_BOARD_PLATFORMS_LIST)),true)
+			BOARD_VENDOR_KERNEL_MODULES += $(KERNEL_MODULES_OUT)/rmnet_aps.ko
+			BOARD_VENDOR_KERNEL_MODULES += $(KERNEL_MODULES_OUT)/rmnet_sch.ko
+		endif
+		ifeq ($(call is-board-platform-in-list,$(DATA_WLAN_DLKM_BOARD_PLATFORMS_LIST)),true)
+			BOARD_VENDOR_KERNEL_MODULES += $(KERNEL_MODULES_OUT)/rmnet_wlan.ko
+		endif
+	endif
+endif

+ 8 - 0
qcom/opensource/datarmnet-ext/datarmnet_ext_dlkm_vendor_product.mk

@@ -0,0 +1,8 @@
+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
+PRODUCT_PACKAGES += rmnet_aps.ko
+PRODUCT_PACKAGES += rmnet_sch.ko
+PRODUCT_PACKAGES += rmnet_mem.ko

+ 32 - 0
qcom/opensource/datarmnet-ext/mem/Android.mk

@@ -0,0 +1,32 @@
+ifeq ($(TARGET_DATARMNET_EXT_ENABLE), true)
+ifneq ($(TARGET_BOARD_AUTO),true)
+ifneq ($(TARGET_BOARD_PLATFORM),qssi)
+
+RMNET_MEM_DLKM_PLATFORMS_LIST := pineapple
+RMNET_MEM_DLKM_PLATFORMS_LIST += blair
+RMNET_MEM_DLKM_PLATFORMS_LIST += monaco
+RMNET_MEM_DLKM_PLATFORMS_LIST += pitti
+RMNET_MEM_DLKM_PLATFORMS_LIST += volcano
+
+ifeq ($(call is-board-platform-in-list, $(RMNET_MEM_DLKM_PLATFORMS_LIST)),true)
+LOCAL_PATH := $(call my-dir)
+include $(CLEAR_VARS)
+
+#Enabling BAZEL
+LOCAL_MODULE_DDK_BUILD := true
+
+LOCAL_MODULE_PATH := $(KERNEL_MODULES_OUT)
+LOCAL_CLANG :=true
+LOCAL_MODULE := rmnet_mem.ko
+LOCAL_SRC_FILES := $(wildcard $(LOCAL_PATH)/**/*) $(wildcard $(LOCAL_PATH)/*)
+
+BOARD_COMMON_DIR ?= device/qcom/common
+
+DLKM_DIR := $(TOP)/$(BOARD_COMMON_DIR)/dlkm
+
+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
+endif #End of Check for datarmnet

+ 34 - 0
qcom/opensource/datarmnet-ext/mem/BUILD.bazel

@@ -0,0 +1,34 @@
+load(":define_mem.bzl", "define_mem")
+load("//build/kernel/kleaf:kernel.bzl", "ddk_headers")
+
+define_mem("pineapple", "consolidate")
+
+define_mem("pineapple", "gki")
+
+define_mem("blair", "consolidate")
+
+define_mem("blair", "gki")
+
+define_mem("monaco", "consolidate")
+
+define_mem("monaco", "gki")
+
+define_mem("pitti", "consolidate")
+
+define_mem("pitti", "gki")
+
+define_mem("volcano", "consolidate")
+
+define_mem("volcano", "gki")
+
+package(
+	default_visibility = [
+	"//visibility:public", ],
+)
+ddk_headers(
+    name = "rmnet_mem_headers",
+    hdrs = glob([
+        "*.h",
+    ]),
+    includes = ["."],
+)

+ 7 - 0
qcom/opensource/datarmnet-ext/mem/Kbuild

@@ -0,0 +1,7 @@
+obj-m += rmnet_mem.o
+
+ccflags-y := $(call cc-option,-Wno-misleading-indentation)
+        rmnet_mem-y := \
+        rmnet_mem_main.o \
+        rmnet_mem_nl.o \
+	rmnet_mem_pool.o

+ 9 - 0
qcom/opensource/datarmnet-ext/mem/Kconfig

@@ -0,0 +1,9 @@
+#
+# RMNET_MEM driver
+#
+
+menuconfig RMNET_MEM
+    tristate "Rmnet MEM  support"
+    default m
+    ---help---
+        Memory module for RmNet driver

+ 16 - 0
qcom/opensource/datarmnet-ext/mem/Makefile

@@ -0,0 +1,16 @@
+#By default build for CLD
+RMNET_MEM_SELECT := CONFIG_RMNET_MEM=m
+KBUILD_OPTIONS += $(RMNET_MEM_SELECT)
+KBUILD_OPTIONS += $(KBUILD_EXTRA) # Extra config if any
+
+M ?= $(shell pwd)
+
+all:
+		$(MAKE) -C $(KERNEL_SRC) M=$(M) modules $(KBUILD_OPTIONS)
+
+modules_install:
+		$(MAKE) INSTALL_MOD_STRIP=1 -C $(KERNEL_SRC) M=$(M) modules_install
+
+clean:
+		$(MAKE) -C $(KERNEL_SRC) M=$(M) clean
+

+ 37 - 0
qcom/opensource/datarmnet-ext/mem/define_mem.bzl

@@ -0,0 +1,37 @@
+load("//build/bazel_common_rules/dist:dist.bzl", "copy_to_dist_dir")
+load("//build/kernel/kleaf:kernel.bzl", "ddk_module")
+
+def define_mem(target, variant):
+    kernel_build_variant = "{}_{}".format(target, variant)
+    include_base = "../../../{}".format(native.package_name())
+
+    ddk_module(
+        name = "{}_rmnet_mem".format(kernel_build_variant),
+        out = "rmnet_mem.ko",
+	includes = ["."],
+	hdrs = [ "rmnet_mem.h" ],
+        srcs = [
+            "rmnet_mem_main.c",
+            "rmnet_mem_nl.c",
+            "rmnet_mem_nl.h",
+            "rmnet_mem_pool.c",
+            "rmnet_mem_priv.h",
+        ],
+        kernel_build = "//msm-kernel:{}".format(kernel_build_variant),
+        deps = [
+            "//msm-kernel:all_headers",
+        ],
+        copts = ["-Wno-misleading-indentation"],
+    )
+
+    copy_to_dist_dir(
+        name = "{}_datarment-ext_dist".format(kernel_build_variant),
+        data = [
+            ":{}_rmnet_mem".format(kernel_build_variant),
+        ],
+        dist_dir = "out/target/product/{}/dlkm/lib/modules/".format(target),
+        flat = True,
+        wipe_dist_dir = False,
+        allow_duplicate_filenames = False,
+        mode_overrides = {"**/*": "644"},
+    )

+ 25 - 0
qcom/opensource/datarmnet-ext/mem/rmnet_mem.h

@@ -0,0 +1,25 @@
+/* Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
+ * SPDX-License-Identifier: GPL-2.0-only
+ */
+
+#ifndef _RMNET_MEM_H_
+#define _RMNET_MEM_H_
+#include <linux/kernel.h>
+#include <linux/netdevice.h>
+#include <linux/module.h>
+#include <linux/mm.h>
+#define IPA_ID (0xd26+209-0xdf6)
+#define RMNET_CORE_ID (0xd1f+216-0xdf5)
+#define POOL_NOTIF (0xd18+223-0xdf4)
+#define RMNET_MEM_SUCCESS (0xd2d+202-0xdf7)
+#define RMNET_MEM_FAIL -(0xd26+209-0xdf6)
+#define RMNET_MEM_DOWNGRADE -(0xd1f+216-0xdf5)
+#define RMNET_MEM_UPGRADE -(0xd18+223-0xdf4)
+int rmnet_mem_unregister_notifier(struct notifier_block*nb);int 
+rmnet_mem_register_notifier(struct notifier_block*nb);extern struct 
+rmnet_mem_notif_s rmnet_mem_notifier;void rmnet_mem_put_page_entry(struct page*
+page);void rmnet_mem_page_ref_inc_entry(struct page*page,unsigned id);struct 
+page*rmnet_mem_get_pages_entry(gfp_t gfp_mask,unsigned int order,int*code,int*
+pageorder,unsigned id);
+#endif
+

+ 125 - 0
qcom/opensource/datarmnet-ext/mem/rmnet_mem_main.c

@@ -0,0 +1,125 @@
+/* Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
+* SPDX-License-Identifier: GPL-2.0-only
+*/
+
+#include <linux/kernel.h>
+#include <linux/netdevice.h>
+#include <linux/module.h>
+#include <linux/mm.h>
+#include "rmnet_mem_nl.h"
+#include "rmnet_mem.h"
+#include "rmnet_mem_priv.h"
+MODULE_LICENSE("\x47\x50\x4c\x20\x76\x32");DEFINE_SPINLOCK(rmnet_mem_lock);int 
+DATARMNETfb2a1a4560[POOL_LEN];module_param_array(DATARMNETfb2a1a4560,int,NULL,
+(0xcb7+5769-0x221c));MODULE_PARM_DESC(DATARMNETfb2a1a4560,
+"\x67\x61\x76\x65\x75\x70\x20\x70\x65\x72\x20\x69\x64");int max_pool_size[
+POOL_LEN]={(0xd2d+202-0xdf7),(0xd2d+202-0xdf7),MAX_POOL_O2,MAX_POOL_O3};
+module_param_array(max_pool_size,int,NULL,(0xdb7+6665-0x261c));MODULE_PARM_DESC(
+max_pool_size,
+"\x4d\x61\x78\x20\x50\x6f\x6f\x6c\x20\x73\x69\x7a\x65\x20\x70\x65\x72\x20\x6f\x72\x64\x65\x72"
+);int static_pool_size[POOL_LEN];module_param_array(static_pool_size,int,NULL,
+(0xcb7+5769-0x221c));MODULE_PARM_DESC(static_pool_size,
+"\x50\x6f\x6f\x6c\x20\x73\x69\x7a\x65\x20\x70\x65\x72\x20\x6f\x72\x64\x65\x72");
+int pool_unbound_feature[POOL_LEN]={(0xd2d+202-0xdf7),(0xd2d+202-0xdf7),
+(0xd26+209-0xdf6),(0xd26+209-0xdf6)};module_param_array(pool_unbound_feature,int
+,NULL,(0xdb7+6665-0x261c));MODULE_PARM_DESC(pool_unbound_featue,
+"\x50\x6f\x6f\x6c\x20\x62\x6f\x75\x6e\x64\x20\x67\x61\x74\x65");int 
+rmnet_mem_order_requests[POOL_LEN];module_param_array(rmnet_mem_order_requests,
+int,NULL,(0xcb7+5769-0x221c));MODULE_PARM_DESC(rmnet_mem_order_requests,
+"\x52\x65\x71\x75\x65\x73\x74\x20\x70\x65\x72\x20\x6f\x72\x64\x65\x72");int 
+rmnet_mem_id_req[POOL_LEN];module_param_array(rmnet_mem_id_req,int,NULL,
+(0xcb7+5769-0x221c));MODULE_PARM_DESC(rmnet_mem_id_req,
+"\x52\x65\x71\x75\x65\x73\x74\x20\x70\x65\x72\x20\x69\x64");int 
+rmnet_mem_id_recycled[POOL_LEN];module_param_array(rmnet_mem_id_recycled,int,
+NULL,(0xcb7+5769-0x221c));MODULE_PARM_DESC(rmnet_mem_id_recycled,
+"\x52\x65\x63\x79\x63\x6c\x65\x64\x20\x70\x65\x72\x20\x69\x64");struct 
+workqueue_struct*mem_wq;int target_static_pool_size[POOL_LEN];module_param_array
+(target_static_pool_size,int,NULL,(0xcb7+5769-0x221c));MODULE_PARM_DESC(
+target_static_pool_size,
+"\x50\x6f\x6f\x6c\x20\x73\x69\x7a\x65\x20\x70\x65\x72\x20\x6f\x72\x64\x65\x72");
+struct work_struct pool_adjust_work;struct list_head rmnet_mem_pool[POOL_LEN];
+struct mem_info{struct page*addr;struct list_head mem_head;u8 order;};void 
+rmnet_mem_page_ref_inc_entry(struct page*page,unsigned id){page_ref_inc(page);}
+EXPORT_SYMBOL(rmnet_mem_page_ref_inc_entry);struct rmnet_mem_notif_s{struct 
+raw_notifier_head chain;spinlock_t lock;};struct rmnet_mem_notif_s 
+rmnet_mem_notifier={.chain=RAW_NOTIFIER_INIT(rmnet_mem_notifier.chain),.lock=
+__SPIN_LOCK_UNLOCKED(rmnet_mem_notifier.lock),};EXPORT_SYMBOL(rmnet_mem_notifier
+);int rmnet_mem_mode_notify(unsigned pool_size){unsigned long flags;
+spin_lock_irqsave(&rmnet_mem_notifier.lock,flags);raw_notifier_call_chain(&
+rmnet_mem_notifier.chain,pool_size,NULL);spin_unlock_irqrestore(&
+rmnet_mem_notifier.lock,flags);return NOTIFY_OK;}int rmnet_mem_register_notifier
+(struct notifier_block*nb){unsigned long flags;int ret;spin_lock_irqsave(&
+rmnet_mem_notifier.lock,flags);ret=raw_notifier_chain_register(&
+rmnet_mem_notifier.chain,nb);spin_unlock_irqrestore(&rmnet_mem_notifier.lock,
+flags);return ret;}EXPORT_SYMBOL_GPL(rmnet_mem_register_notifier);int 
+rmnet_mem_unregister_notifier(struct notifier_block*nb){unsigned long flags;int 
+ret;spin_lock_irqsave(&rmnet_mem_notifier.lock,flags);ret=
+raw_notifier_chain_unregister(&rmnet_mem_notifier.chain,nb);
+spin_unlock_irqrestore(&rmnet_mem_notifier.lock,flags);return ret;}
+EXPORT_SYMBOL_GPL(rmnet_mem_unregister_notifier);struct mem_info*
+rmnet_mem_add_page(struct page*page,u8 pageorder){struct mem_info*mem_slot;
+mem_slot=(struct mem_info*)kzalloc(sizeof(*mem_slot),GFP_ATOMIC);if(!mem_slot)
+return NULL;static_pool_size[pageorder]++;mem_slot->order=pageorder;mem_slot->
+addr=(void*)page;INIT_LIST_HEAD(&mem_slot->mem_head);if(pageorder<POOL_LEN){
+list_add_rcu(&mem_slot->mem_head,&(rmnet_mem_pool[pageorder]));}return mem_slot;
+}void rmnet_mem_free_all(void){unsigned long flags;struct mem_info*mem_slot;
+struct list_head*ptr=NULL,*next=NULL;int i;spin_lock_irqsave(&rmnet_mem_lock,
+flags);for(i=(0xd2d+202-0xdf7);i<POOL_LEN;i++){list_for_each_safe(ptr,next,&
+rmnet_mem_pool[i]){mem_slot=list_entry(ptr,struct mem_info,mem_head);list_del(&
+mem_slot->mem_head);put_page(mem_slot->addr);static_pool_size[mem_slot->order]--
+;kfree(mem_slot);}}spin_unlock_irqrestore(&rmnet_mem_lock,flags);}struct page*
+rmnet_mem_get_pages_entry(gfp_t gfp_mask,unsigned int order,int*code,int*
+pageorder,unsigned id){unsigned long flags;struct mem_info*mem_page;struct page*
+page=NULL;int i=(0xd2d+202-0xdf7);int j=(0xd2d+202-0xdf7);int 
+DATARMNET8224a106d8=(0xd2d+202-0xdf7);spin_lock_irqsave(&rmnet_mem_lock,flags);
+if(order<POOL_LEN){rmnet_mem_id_req[id]++;rmnet_mem_order_requests[order]++;for(
+j=order;j>(0xd2d+202-0xdf7)&&j<POOL_LEN;j++){do{mem_page=
+list_first_entry_or_null(&rmnet_mem_pool[j],struct mem_info,mem_head);if(!
+mem_page){break;}if(page_ref_count(mem_page->addr)==(0xd26+209-0xdf6)){
+rmnet_mem_id_recycled[j]++;page=mem_page->addr;page_ref_inc(mem_page->addr);
+list_rotate_left(&rmnet_mem_pool[j]);break;}list_rotate_left(&rmnet_mem_pool[j])
+;i++;}while(i<=(0xd0a+237-0xdf2));if(page&&pageorder){*pageorder=j;break;}i=
+(0xd2d+202-0xdf7);}}if(static_pool_size[order]<max_pool_size[order]&&
+pool_unbound_feature[order]){DATARMNET8224a106d8=(0xd26+209-0xdf6);}else 
+spin_unlock_irqrestore(&rmnet_mem_lock,flags);if(!page){DATARMNETfb2a1a4560[id]
+++;if(order<(0xd18+223-0xdf4)){page=__dev_alloc_pages((DATARMNET8224a106d8)?
+GFP_ATOMIC:gfp_mask,order);if(page){if(DATARMNET8224a106d8){rmnet_mem_add_page(
+page,order);page_ref_inc(page);}if(pageorder){*pageorder=order;}}}else{if(
+DATARMNET8224a106d8){page=__dev_alloc_pages((DATARMNET8224a106d8)?GFP_ATOMIC:
+gfp_mask,order);if(page){rmnet_mem_add_page(page,order);page_ref_inc(page);}if(
+pageorder){*pageorder=order;}}}}if(DATARMNET8224a106d8)spin_unlock_irqrestore(&
+rmnet_mem_lock,flags);if(pageorder&&code&&page){if(*pageorder==order)*code=
+RMNET_MEM_SUCCESS;else if(*pageorder>order)*code=RMNET_MEM_UPGRADE;else if(*
+pageorder<order)*code=RMNET_MEM_DOWNGRADE;}else if(pageorder&&code){*code=
+RMNET_MEM_FAIL;*pageorder=(0xd2d+202-0xdf7);}return page;}EXPORT_SYMBOL(
+rmnet_mem_get_pages_entry);void rmnet_mem_put_page_entry(struct page*page){
+put_page(page);}EXPORT_SYMBOL(rmnet_mem_put_page_entry);static void 
+mem_update_pool_work(struct work_struct*work){int i;for(i=(0xd2d+202-0xdf7);i<
+POOL_LEN;i++){local_bh_disable();rmnet_mem_adjust(target_static_pool_size[i],i);
+if(i==POOL_NOTIF){rmnet_mem_mode_notify(target_static_pool_size[i]);}
+local_bh_enable();}}void rmnet_mem_adjust(unsigned perm_size,u8 pageorder){
+struct list_head*entry,*next;struct mem_info*mem_slot;int i;struct page*newpage=
+NULL;int adjustment;unsigned long flags;if(pageorder>=POOL_LEN||perm_size>
+MAX_STATIC_POOL)return;adjustment=perm_size-static_pool_size[pageorder];if(
+perm_size==static_pool_size[pageorder])return;spin_lock_irqsave(&rmnet_mem_lock,
+flags);if(perm_size>static_pool_size[pageorder]){for(i=(0xd2d+202-0xdf7);i<(
+adjustment);i++){newpage=__dev_alloc_pages(GFP_ATOMIC,pageorder);if(!newpage){
+continue;}rmnet_mem_add_page(newpage,pageorder);}}else{list_for_each_safe(entry,
+next,&(rmnet_mem_pool[pageorder])){mem_slot=list_entry(entry,struct mem_info,
+mem_head);list_del(&mem_slot->mem_head);put_page(mem_slot->addr);kfree(mem_slot)
+;static_pool_size[pageorder]--;if(static_pool_size[pageorder]==perm_size)break;}
+}spin_unlock_irqrestore(&rmnet_mem_lock,flags);}int __init rmnet_mem_module_init
+(void){int rc=(0xd2d+202-0xdf7);int i=(0xd2d+202-0xdf7);pr_info(
+"\x25\x73\x28\x29\x3a\x20\x53\x74\x61\x72\x74\x69\x6e\x67\x20\x72\x6d\x6e\x65\x74\x20\x6d\x65\x6d\x20\x6d\x6f\x64\x75\x6c\x65" "\n"
+,__func__);for(i=(0xd2d+202-0xdf7);i<POOL_LEN;i++){INIT_LIST_HEAD(&(
+rmnet_mem_pool[i]));}mem_wq=alloc_workqueue("\x6d\x65\x6d\x5f\x77\x71",
+WQ_HIGHPRI,(0xd2d+202-0xdf7));if(!mem_wq){pr_err(
+"\x25\x73\x28\x29\x3a\x20\x46\x61\x69\x6c\x65\x64\x20\x74\x6f\x20\x61\x6c\x6c\x6f\x63\x20\x77\x6f\x72\x6b\x71\x75\x65\x75\x65\x20" "\n"
+,__func__);return-ENOMEM;}INIT_WORK(&pool_adjust_work,mem_update_pool_work);rc=
+rmnet_mem_nl_register();if(rc){pr_err(
+"\x25\x73\x28\x29\x3a\x20\x46\x61\x69\x6c\x65\x64\x20\x74\x6f\x20\x72\x65\x67\x69\x73\x74\x65\x72\x20\x67\x65\x6e\x65\x72\x69\x63\x20\x6e\x65\x74\x6c\x69\x6e\x6b\x20\x66\x61\x6d\x69\x6c\x79" "\n"
+,__func__);return-ENOMEM;}return(0xd2d+202-0xdf7);}void __exit 
+rmnet_mem_module_exit(void){rmnet_mem_nl_unregister();if(mem_wq){
+cancel_work_sync(&pool_adjust_work);drain_workqueue(mem_wq);destroy_workqueue(
+mem_wq);mem_wq=NULL;}rmnet_mem_free_all();}module_init(rmnet_mem_module_init);
+module_exit(rmnet_mem_module_exit);

+ 39 - 0
qcom/opensource/datarmnet-ext/mem/rmnet_mem_nl.c

@@ -0,0 +1,39 @@
+/* Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
+ * SPDX-License-Identifier: GPL-2.0-only
+ */
+
+#include "rmnet_mem_nl.h"
+#include "rmnet_mem_priv.h"
+#define DATARMNETb005a78b72 "\x52\x4d\x4e\x45\x54\x5f\x4d\x45\x4d"
+#define DATARMNET39e021cd6f (0xd26+209-0xdf6)
+enum{DATARMNET5277047270,DATARMNET654ec9d727,DATARMNET579b73b6a1,
+DATARMNET99bbc5ae70,};
+#define DATARMNETb2539ccff0 (DATARMNETc820b7a9dc - (0xd26+209-0xdf6))
+uint32_t DATARMNET7c4038843f;static struct nla_policy DATARMNET93ad46699e[
+DATARMNETb2539ccff0+(0xd26+209-0xdf6)]={[DATARMNETe5184c7a76]=
+NLA_POLICY_EXACT_LEN(sizeof(struct DATARMNET5d6175c98d)),[DATARMNETb0428b7575]=
+NLA_POLICY_EXACT_LEN(sizeof(struct DATARMNET5d23779a8f)),};static const struct 
+genl_ops DATARMNETb68b0ed922[]={{.cmd=DATARMNET654ec9d727,.doit=
+DATARMNET291f036d31,},{.cmd=DATARMNET579b73b6a1,.doit=DATARMNET8e48a951e4,},};
+struct genl_family DATARMNET595b5c3a9e __ro_after_init={.hdrsize=
+(0xd2d+202-0xdf7),.name=DATARMNETb005a78b72,.version=DATARMNET39e021cd6f,.
+maxattr=DATARMNETb2539ccff0,.policy=DATARMNET93ad46699e,.ops=DATARMNETb68b0ed922
+,.n_ops=ARRAY_SIZE(DATARMNETb68b0ed922),};int DATARMNETe85d734d4f(int val,struct
+ genl_info*DATARMNET54338da2ff){struct sk_buff*skb;void*msg_head;int rc;skb=
+genlmsg_new(NLMSG_GOODSIZE,GFP_ATOMIC);if(skb==NULL)goto DATARMNETbf4095f79e;
+msg_head=genlmsg_put(skb,(0xd2d+202-0xdf7),(0xd2d+202-0xdf7),&
+DATARMNET595b5c3a9e,(0xd2d+202-0xdf7),DATARMNET654ec9d727);if(msg_head==NULL){rc
+=-ENOMEM;rm_err(
+"\x4d\x45\x4d\x5f\x47\x4e\x4c\x3a\x20\x46\x41\x49\x4c\x45\x44\x20\x74\x6f\x20\x6d\x73\x67\x5f\x68\x65\x61\x64\x20\x25\x64" "\n"
+,rc);kfree(skb);goto DATARMNETbf4095f79e;}rc=nla_put_u32(skb,DATARMNETbd57d2442f
+,val);if(rc!=(0xd2d+202-0xdf7)){rm_err(
+"\x4d\x45\x4d\x5f\x47\x4e\x4c\x3a\x20\x46\x41\x49\x4c\x45\x44\x20\x6e\x6c\x61\x5f\x70\x75\x74\x20\x25\x64" "\n"
+,rc);kfree(skb);goto DATARMNETbf4095f79e;}genlmsg_end(skb,msg_head);rc=
+genlmsg_reply(skb,DATARMNET54338da2ff);if(rc!=(0xd2d+202-0xdf7))goto 
+DATARMNETbf4095f79e;rm_err(
+"\x4d\x45\x4d\x5f\x47\x4e\x4c\x3a\x20\x53\x75\x63\x63\x65\x73\x73\x66\x75\x6c\x6c\x79\x20\x73\x65\x6e\x74\x20\x69\x6e\x74\x20\x25\x64" "\n"
+,val);return(0xd2d+202-0xdf7);DATARMNETbf4095f79e:rm_err(
+"\x4d\x45\x4d\x5f\x47\x4e\x4c\x3a\x20\x46\x41\x49\x4c\x45\x44\x20\x74\x6f\x20\x73\x65\x6e\x64\x20\x69\x6e\x74\x20\x25\x64" "\n"
+,val);return-(0xd26+209-0xdf6);}int rmnet_mem_nl_register(void){return 
+genl_register_family(&DATARMNET595b5c3a9e);}void rmnet_mem_nl_unregister(void){
+genl_unregister_family(&DATARMNET595b5c3a9e);}

+ 47 - 0
qcom/opensource/datarmnet-ext/mem/rmnet_mem_nl.h

@@ -0,0 +1,47 @@
+/* Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
+ * SPDX-License-Identifier: GPL-2.0-only
+ */
+
+#ifndef _RMNET_MEM_NL_H_
+#define _RMNET_MEM_NL_H_
+
+#include <net/genetlink.h>
+
+enum {
+	RMNET_MEM_ATTR_UNSPEC,
+	RMNET_MEM_ATTR_MODE,
+	RMNET_MEM_ATTR_POOL_SIZE,
+	RMNET_MEM_ATTR_INT,
+	__RMNET_MEM_ATTR_MAX,
+};
+
+struct rmnet_memzone_req {
+        int zone;
+        int valid;
+};
+struct rmnet_pool_update_req {
+        unsigned poolsize[4];
+        unsigned valid_mask;
+};
+
+int rmnet_mem_nl_register(void);
+void rmnet_mem_nl_unregister(void);
+int rmnet_mem_nl_cmd_update_mode(struct sk_buff *skb, struct genl_info *info);
+int rmnet_mem_nl_cmd_update_pool_size(struct sk_buff *skb, struct genl_info *info);
+int rmnet_mem_genl_send_int_to_userspace_no_info(int val, struct genl_info *info);
+
+#endif /* _RMNET_MEM_GENL_H_ */
+
+#ifndef DATARMNET7b1420e7bf
+#define DATARMNET7b1420e7bf
+#include <net/genetlink.h>
+enum{DATARMNET2cc66aaa85,DATARMNETe5184c7a76,DATARMNETb0428b7575,
+DATARMNETbd57d2442f,DATARMNETc820b7a9dc,};struct DATARMNET5d6175c98d{int 
+DATARMNET3a4d9ad400;int valid;};struct DATARMNET5d23779a8f{unsigned 
+DATARMNETe87b937bb6[(0xd11+230-0xdf3)];unsigned DATARMNET855b934a37;};int 
+rmnet_mem_nl_register(void);void rmnet_mem_nl_unregister(void);int 
+DATARMNET291f036d31(struct sk_buff*skb,struct genl_info*DATARMNET54338da2ff);int
+ DATARMNET8e48a951e4(struct sk_buff*skb,struct genl_info*DATARMNET54338da2ff);
+int DATARMNETe85d734d4f(int val,struct genl_info*DATARMNET54338da2ff);
+#endif 
+

+ 39 - 0
qcom/opensource/datarmnet-ext/mem/rmnet_mem_pool.c

@@ -0,0 +1,39 @@
+/* Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
+ * SPDX-License-Identifier: GPL-2.0-only
+ */
+
+#include "rmnet_mem_nl.h"
+#include "rmnet_mem_priv.h"
+#define DATARMNETc8aadbe769 (0xdf7+6169-0x241c)
+#define DATARMNET831d60a2b1 (0xd18+223-0xdf4)
+#define DATARMNETa967925c7a (0xdb7+6677-0x263c)
+#define DATARMNET19337c1bbf (0xdb7+6670-0x2634)
+extern struct work_struct pool_adjust_work;extern struct workqueue_struct*mem_wq
+;int DATARMNET291f036d31(struct sk_buff*skb,struct genl_info*DATARMNET54338da2ff
+){u8 mode=(0xd2d+202-0xdf7);struct sk_buff*DATARMNETa13fcf9070;struct 
+DATARMNET5d6175c98d mem_info;struct nlattr*na;if(DATARMNET54338da2ff->attrs[
+DATARMNETe5184c7a76]){na=DATARMNET54338da2ff->attrs[DATARMNETe5184c7a76];if(
+nla_memcpy(&mem_info,na,sizeof(mem_info))>(0xd2d+202-0xdf7)){rm_err(
+"%s(): modeinfo %u\n",__func__,mem_info.DATARMNET3a4d9ad400);}rm_err(
+"\x25\x73\x28\x29\x3a\x20\x6d\x6f\x64\x65\x20\x25\x75" "\n",__func__,mode);
+DATARMNETa13fcf9070=nlmsg_new(NLMSG_DEFAULT_SIZE,GFP_KERNEL);if(!
+DATARMNETa13fcf9070)return-ENOMEM;DATARMNETe85d734d4f(DATARMNETa967925c7a,
+DATARMNET54338da2ff);}else{DATARMNETe85d734d4f(DATARMNET19337c1bbf,
+DATARMNET54338da2ff);}return(0xd2d+202-0xdf7);}int DATARMNET8e48a951e4(struct 
+sk_buff*skb,struct genl_info*DATARMNET54338da2ff){struct sk_buff*
+DATARMNETa13fcf9070;struct DATARMNET5d23779a8f mem_info;struct nlattr*na;int i;
+u8 DATARMNET205e85dea0=(0xd2d+202-0xdf7);if(DATARMNET54338da2ff->attrs[
+DATARMNETb0428b7575]){na=DATARMNET54338da2ff->attrs[DATARMNETb0428b7575];if(
+nla_memcpy(&mem_info,na,sizeof(mem_info))>(0xd2d+202-0xdf7)){pr_err(
+"\x25\x73\x28\x29\x3a\x20\x6d\x6f\x64\x65\x69\x6e\x66\x6f\x20\x25\x75" "\n",
+__func__,mem_info.DATARMNET855b934a37);}rm_err(
+"\x25\x73\x28\x29\x3a\x20\x70\x6f\x6f\x6c\x5f\x73\x69\x7a\x65\x20\x25\x75" "\n",
+__func__,mem_info.DATARMNETe87b937bb6[(0xd2d+202-0xdf7)]);for(i=
+(0xd2d+202-0xdf7);i<POOL_LEN;i++){if(mem_info.DATARMNET855b934a37&
+(0xd26+209-0xdf6)<<i&&mem_info.DATARMNETe87b937bb6[i]!=static_pool_size[i]){
+target_static_pool_size[i]=mem_info.DATARMNETe87b937bb6[i];DATARMNET205e85dea0=
+(0xd26+209-0xdf6);}}if(DATARMNET205e85dea0&&mem_wq)queue_work(mem_wq,&
+pool_adjust_work);DATARMNETa13fcf9070=nlmsg_new(NLMSG_DEFAULT_SIZE,GFP_KERNEL);
+if(!DATARMNETa13fcf9070)return-ENOMEM;DATARMNETe85d734d4f(DATARMNETa967925c7a,
+DATARMNET54338da2ff);}else{DATARMNETe85d734d4f(DATARMNET19337c1bbf,
+DATARMNET54338da2ff);}return(0xd2d+202-0xdf7);}

+ 26 - 0
qcom/opensource/datarmnet-ext/mem/rmnet_mem_priv.h

@@ -0,0 +1,26 @@
+/* Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
+ * SPDX-License-Identifier: GPL-2.0-only
+ */
+
+#ifndef DATARMNET64d33b9eb9
+#define DATARMNET64d33b9eb9
+#include <linux/kernel.h>
+#include <linux/netdevice.h>
+#include <linux/module.h>
+#include <linux/mm.h>
+#define IPA_ID (0xd26+209-0xdf6)
+#define RMNET_CORE_ID (0xd1f+216-0xdf5)
+#define POOL_LEN (0xd11+230-0xdf3)
+#define MAX_STATIC_POOL (0xc07+1233-0xe1c)
+#define MAX_POOL_O3 (0xbb7+1296-0xe24)
+#define MAX_POOL_O2 (0xbb7+4453-0x1c3c)
+void rmnet_mem_adjust(unsigned perm_size,u8 order);
+#define rm_err(DATARMNET6c3cf5865b, ...)  \
+	do { if ((0xd2d+202-0xdf7)) pr_err(DATARMNET6c3cf5865b, __VA_ARGS__); } while (\
+(0xd2d+202-0xdf7))
+extern int max_pool_size[POOL_LEN];extern int static_pool_size[POOL_LEN];extern 
+int pool_unbound_feature[POOL_LEN];extern int rmnet_mem_order_requests[POOL_LEN]
+;extern int rmnet_mem_id_req[POOL_LEN];extern int rmnet_mem_id_recycled[POOL_LEN
+];extern int target_static_pool_size[POOL_LEN];
+#endif
+

+ 45 - 0
qcom/opensource/datarmnet-ext/offload/Android.mk

@@ -0,0 +1,45 @@
+ifeq ($(TARGET_DATARMNET_EXT_ENABLE), true)
+ifneq ($(TARGET_BOARD_AUTO),true)
+ifneq ($(TARGET_BOARD_PLATFORM),qssi)
+
+RMNET_OFFLOAD_DLKM_PLATFORMS_LIST := pineapple
+RMNET_OFFLOAD_DLKM_PLATFORMS_LIST += blair
+RMNET_OFFLOAD_DLKM_PLATFORMS_LIST += pitti
+RMNET_OFFLOAD_DLKM_PLATFORMS_LIST += volcano
+
+ifeq ($(call is-board-platform-in-list, $(RMNET_OFFLOAD_DLKM_PLATFORMS_LIST)),true)
+LOCAL_PATH := $(call my-dir)
+include $(CLEAR_VARS)
+
+#Enabling BAZEL
+LOCAL_MODULE_DDK_BUILD := true
+
+LOCAL_MODULE_PATH := $(KERNEL_MODULES_OUT)
+LOCAL_MODULE := rmnet_offload.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
+
+#Must be built after the core rmnet module
+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
+
+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
+endif #End of Check for datarmnet

+ 18 - 0
qcom/opensource/datarmnet-ext/offload/BUILD.bazel

@@ -0,0 +1,18 @@
+load(":define_offload.bzl", "define_offload")
+load("//build/kernel/kleaf:kernel.bzl", "ddk_module")
+
+define_offload("pineapple", "consolidate")
+
+define_offload("pineapple", "gki")
+
+define_offload("blair", "consolidate")
+
+define_offload("blair", "gki")
+
+define_offload("pitti", "consolidate")
+
+define_offload("pitti", "gki")
+
+define_offload("volcano", "consolidate")
+
+define_offload("volcano", "gki")

+ 8 - 0
qcom/opensource/datarmnet-ext/offload/Kbuild

@@ -0,0 +1,8 @@
+obj-m += rmnet_offload.o
+#Need core headers
+ccflags-y := -I$(RMNET_CORE_INC_DIR) \
+             $(call cc-option,-Wno-misleading-indentation)
+rmnet_offload-y := rmnet_offload_state.o rmnet_offload_main.o \
+		   rmnet_offload_engine.o rmnet_offload_tcp.o \
+		   rmnet_offload_udp.o rmnet_offload_stats.o \
+		   rmnet_offload_knob.o

+ 10 - 0
qcom/opensource/datarmnet-ext/offload/Kconfig

@@ -0,0 +1,10 @@
+#
+# RMNET_OFFLOAD driver
+#
+
+menuconfig RMNET_OFFLOAD
+    tristate "Rmnet offload support"
+    default m
+    depends on RMNET_CORE
+    ---help---
+        Offload support for the RmNet driver

+ 16 - 0
qcom/opensource/datarmnet-ext/offload/Makefile

@@ -0,0 +1,16 @@
+#By default build for CLD
+RMNET_OFFLOAD_SELECT := CONFIG_RMNET_OFFLOAD=m
+KBUILD_OPTIONS += $(RMNET_OFFLOAD_SELECT)
+KBUILD_OPTIONS += $(KBUILD_EXTRA) # Extra config if any
+KBUILD_EXTRA_SYMBOLS := $(M)/../../$(DATARMNET_CORE_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

+ 46 - 0
qcom/opensource/datarmnet-ext/offload/define_offload.bzl

@@ -0,0 +1,46 @@
+load("//build/bazel_common_rules/dist:dist.bzl", "copy_to_dist_dir")
+load("//build/kernel/kleaf:kernel.bzl", "ddk_module")
+
+def define_offload(target, variant):
+    kernel_build_variant = "{}_{}".format(target, variant)
+    include_base = "../../../{}".format(native.package_name())
+
+    ddk_module(
+        name = "{}_offload".format(kernel_build_variant),
+        out = "rmnet_offload.ko",
+        srcs = [
+            "rmnet_offload_engine.c",
+            "rmnet_offload_engine.h",
+            "rmnet_offload_knob.c",
+            "rmnet_offload_knob.h",
+            "rmnet_offload_main.c",
+            "rmnet_offload_main.h",
+            "rmnet_offload_state.c",
+            "rmnet_offload_state.h",
+            "rmnet_offload_stats.c",
+            "rmnet_offload_stats.h",
+            "rmnet_offload_tcp.c",
+            "rmnet_offload_tcp.h",
+            "rmnet_offload_udp.c",
+            "rmnet_offload_udp.h",
+        ],
+        kernel_build = "//msm-kernel:{}".format(kernel_build_variant),
+        deps = [
+            "//msm-kernel:all_headers",
+            "//vendor/qcom/opensource/datarmnet:{}_rmnet_core".format(kernel_build_variant),
+            "//vendor/qcom/opensource/datarmnet:rmnet_core_headers",
+        ],
+        copts = ["-Wno-misleading-indentation"],
+    )
+
+    copy_to_dist_dir(
+        name = "{}_datarment-ext_dist".format(kernel_build_variant),
+        data = [
+            ":{}_offload".format(kernel_build_variant),
+        ],
+        dist_dir = "out/target/product/{}/dlkm/lib/modules/".format(target),
+        flat = True,
+        wipe_dist_dir = False,
+        allow_duplicate_filenames = False,
+        mode_overrides = {"**/*": "644"},
+    )

+ 195 - 0
qcom/opensource/datarmnet-ext/offload/rmnet_offload_engine.c

@@ -0,0 +1,195 @@
+/* Copyright (c) 2018-2021, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 and
+ * only version 2 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ */
+
+#include <linux/log2.h>
+#include <linux/list.h>
+#include <linux/hashtable.h>
+#include "rmnet_descriptor.h"
+#include "rmnet_module.h"
+#include "rmnet_offload_state.h"
+#include "rmnet_offload_engine.h"
+#include "rmnet_offload_main.h"
+#include "rmnet_offload_tcp.h"
+#include "rmnet_offload_udp.h"
+#include "rmnet_offload_stats.h"
+#include "rmnet_offload_knob.h"
+#define DATARMNET644a5e11da \
+	(const_ilog2(DATARMNET78d9393ac8))
+static DEFINE_HASHTABLE(DATARMNET4791268d67,DATARMNET644a5e11da);static u32 
+DATARMNET1993bae165(u8 DATARMNET06d2413ad2,struct list_head*DATARMNET6f9bfa17e6)
+{struct DATARMNETd7c9631acd*DATARMNET7c382e536d;int DATARMNETae0201901a;u32 
+DATARMNET737bbd41c3=(0xd2d+202-0xdf7);hash_for_each(DATARMNET4791268d67,
+DATARMNETae0201901a,DATARMNET7c382e536d,DATARMNETbd5d7d96d8){if(
+DATARMNET7c382e536d->DATARMNET1db11fa85e&&DATARMNET7c382e536d->
+DATARMNET78fd20ce0e.DATARMNET7fa8b2acbf==DATARMNET06d2413ad2){
+DATARMNET737bbd41c3++;DATARMNETa3055c21f2(DATARMNET7c382e536d,
+DATARMNET6f9bfa17e6);}}return DATARMNET737bbd41c3;}static bool 
+DATARMNET2013036d80(u8 DATARMNET06d2413ad2){u64 DATARMNET3924f3f9e3;
+DATARMNET3924f3f9e3=DATARMNETf1d1b8287f(DATARMNET6d2ed4b822);if(
+DATARMNET3924f3f9e3==DATARMNET2d89680280)return true;if(DATARMNET3924f3f9e3==
+DATARMNET03daf91a60&&DATARMNET06d2413ad2==DATARMNETfd5c3d30e5)return true;if(
+DATARMNET3924f3f9e3==DATARMNET88a9920663&&DATARMNET06d2413ad2==
+DATARMNETa656f324b2)return true;return false;}static bool DATARMNET5a0f9fc3a2(
+struct DATARMNETd7c9631acd*DATARMNETaa568481cf,struct DATARMNETd812bcdbb5*
+DATARMNET5fe4c722a8){if(!DATARMNETaa568481cf->DATARMNET1db11fa85e)return false;
+if(DATARMNET5fe4c722a8->DATARMNET144d119066.DATARMNET388842c721==
+(0xd11+230-0xdf3)){struct DATARMNET4287f07234*DATARMNET699c2c62cd,*
+DATARMNET8814564ab9;DATARMNET699c2c62cd=&DATARMNETaa568481cf->
+DATARMNET78fd20ce0e;DATARMNET8814564ab9=&DATARMNET5fe4c722a8->
+DATARMNET144d119066;if(DATARMNET699c2c62cd->DATARMNET19b03754c4^
+DATARMNET8814564ab9->DATARMNET19b03754c4||DATARMNET699c2c62cd->
+DATARMNET57bf608183^DATARMNET8814564ab9->DATARMNET57bf608183||
+DATARMNET699c2c62cd->DATARMNETcf915688f5^DATARMNET8814564ab9->
+DATARMNETcf915688f5||DATARMNET699c2c62cd->DATARMNET4ca5ac9de1^
+DATARMNET8814564ab9->DATARMNET4ca5ac9de1)return true;}else if(
+DATARMNET5fe4c722a8->DATARMNET144d119066.DATARMNET388842c721==(0xd03+244-0xdf1))
+{__be32 DATARMNET25ffacbec5,DATARMNETb351dd927f;__be32 DATARMNET9422f16113;
+DATARMNET25ffacbec5=DATARMNETaa568481cf->DATARMNET78fd20ce0e.DATARMNETabd58f7f89
+;DATARMNETb351dd927f=DATARMNET5fe4c722a8->DATARMNET144d119066.
+DATARMNETabd58f7f89;;DATARMNET9422f16113=DATARMNET25ffacbec5^DATARMNETb351dd927f
+;if(DATARMNET9422f16113&htonl(267386880))return true;}return false;}static bool 
+DATARMNET6895620058(struct DATARMNETd7c9631acd*DATARMNETaa568481cf,struct 
+DATARMNETd812bcdbb5*DATARMNET5fe4c722a8){struct DATARMNET4287f07234*
+DATARMNET699c2c62cd,*DATARMNET8814564ab9;DATARMNET699c2c62cd=&
+DATARMNETaa568481cf->DATARMNET78fd20ce0e;DATARMNET8814564ab9=&
+DATARMNET5fe4c722a8->DATARMNET144d119066;if(!DATARMNETaa568481cf->
+DATARMNET1db11fa85e)return DATARMNETaa568481cf->DATARMNET381f1cadc4==
+DATARMNET5fe4c722a8->DATARMNET645e8912b8;if(DATARMNET699c2c62cd->
+DATARMNET7fa8b2acbf!=DATARMNET8814564ab9->DATARMNET7fa8b2acbf)return false;if(
+DATARMNET699c2c62cd->DATARMNETa60d2ae3f6^DATARMNET8814564ab9->
+DATARMNETa60d2ae3f6||DATARMNET699c2c62cd->DATARMNET5e7452ec23^
+DATARMNET8814564ab9->DATARMNET5e7452ec23)return false;if(DATARMNET8814564ab9->
+DATARMNET388842c721==(0xd11+230-0xdf3)){if(DATARMNET699c2c62cd->
+DATARMNET1a2be7b6c2^DATARMNET8814564ab9->DATARMNET1a2be7b6c2||
+DATARMNET699c2c62cd->DATARMNET0a28fa80f4^DATARMNET8814564ab9->
+DATARMNET0a28fa80f4)return false;}else if(DATARMNET8814564ab9->
+DATARMNET388842c721==(0xd03+244-0xdf1)){if(memcmp(DATARMNET699c2c62cd->
+DATARMNET949c2754de,DATARMNET8814564ab9->DATARMNET949c2754de,sizeof(
+DATARMNET8814564ab9->DATARMNET949c2754de))||memcmp(DATARMNET699c2c62cd->
+DATARMNET45ec858bc5,DATARMNET8814564ab9->DATARMNET45ec858bc5,sizeof(
+DATARMNET8814564ab9->DATARMNET45ec858bc5)))return false;}else{return false;}
+return true;}static struct DATARMNETd7c9631acd*DATARMNETd41def0046(void){struct 
+DATARMNET70f3b87b5d*DATARMNETe05748b000=DATARMNETc2a630b113();struct 
+DATARMNET907d58c807*DATARMNETa6f73cbe10;struct DATARMNETd7c9631acd*
+DATARMNET6745427f98;LIST_HEAD(DATARMNET6f9bfa17e6);DATARMNETa6f73cbe10=&
+DATARMNETe05748b000->DATARMNETebb45c8d86;if(DATARMNETa6f73cbe10->
+DATARMNET8dfc11cccd<DATARMNET78d9393ac8){DATARMNET6745427f98=&
+DATARMNETa6f73cbe10->DATARMNET2846a01cce[DATARMNETa6f73cbe10->
+DATARMNET8dfc11cccd];DATARMNETa6f73cbe10->DATARMNET8dfc11cccd++;return 
+DATARMNET6745427f98;}DATARMNET6745427f98=&DATARMNETa6f73cbe10->
+DATARMNET2846a01cce[DATARMNETa6f73cbe10->DATARMNET57d435b225];
+DATARMNETa6f73cbe10->DATARMNET57d435b225++;DATARMNETa6f73cbe10->
+DATARMNET57d435b225%=DATARMNET78d9393ac8;hash_del(&DATARMNET6745427f98->
+DATARMNETbd5d7d96d8);if(DATARMNET6745427f98->DATARMNET1db11fa85e){
+DATARMNETa00cda79d0(DATARMNETf3f92fc0b9);DATARMNETa3055c21f2(DATARMNET6745427f98
+,&DATARMNET6f9bfa17e6);}DATARMNETc70e73c8d4(&DATARMNET6f9bfa17e6);return 
+DATARMNET6745427f98;}static void DATARMNETbe30d096c6(void){LIST_HEAD(
+DATARMNET6f9bfa17e6);DATARMNET664568fcd0();if(DATARMNETae70636c90(&
+DATARMNET6f9bfa17e6))DATARMNETa00cda79d0(DATARMNET5727f095ec);
+DATARMNET6a76048590();DATARMNETc70e73c8d4(&DATARMNET6f9bfa17e6);}static const 
+struct rmnet_module_hook_register_info DATARMNETcbc211d052={.hooknum=
+RMNET_MODULE_HOOK_OFFLOAD_CHAIN_END,.func=DATARMNETbe30d096c6,};void 
+DATARMNETd4230b6bfe(void){rcu_assign_pointer(rmnet_perf_chain_end,
+DATARMNETbe30d096c6);rmnet_module_hook_register(&DATARMNETcbc211d052,
+(0xd26+209-0xdf6));}void DATARMNET560e127137(void){rcu_assign_pointer(
+rmnet_perf_chain_end,NULL);rmnet_module_hook_unregister_no_sync(&
+DATARMNETcbc211d052,(0xd26+209-0xdf6));}int DATARMNET241493ab9a(u64 
+DATARMNET0470698d6c,u64 DATARMNETfeff65e096){LIST_HEAD(DATARMNET6f9bfa17e6);u32 
+DATARMNET737bbd41c3=(0xd2d+202-0xdf7);if(DATARMNET0470698d6c==
+DATARMNET5fe3af8828||DATARMNETfeff65e096==DATARMNET2d89680280)return
+(0xd2d+202-0xdf7);switch(DATARMNETfeff65e096){case DATARMNET03daf91a60:
+DATARMNET737bbd41c3=DATARMNET1993bae165(DATARMNETa656f324b2,&DATARMNET6f9bfa17e6
+);break;case DATARMNET88a9920663:DATARMNET737bbd41c3=DATARMNET1993bae165(
+DATARMNETfd5c3d30e5,&DATARMNET6f9bfa17e6);break;case DATARMNET5fe3af8828:
+DATARMNET737bbd41c3=DATARMNETae70636c90(&DATARMNET6f9bfa17e6);break;}
+DATARMNETbad3b5165e(DATARMNETddf572458d,DATARMNET737bbd41c3);DATARMNETc70e73c8d4
+(&DATARMNET6f9bfa17e6);return(0xd2d+202-0xdf7);}void DATARMNETa3055c21f2(struct 
+DATARMNETd7c9631acd*DATARMNETaa568481cf,struct list_head*DATARMNET6f9bfa17e6){
+struct DATARMNET70f3b87b5d*DATARMNETe05748b000=DATARMNETc2a630b113();struct 
+rmnet_frag_descriptor*DATARMNETd74aeaa49a,*DATARMNETa1625e27e2,*
+DATARMNET0386f6f82a;struct DATARMNET4287f07234*DATARMNET699c2c62cd=&
+DATARMNETaa568481cf->DATARMNET78fd20ce0e;u32 DATARMNET567bdc7221=
+DATARMNET699c2c62cd->DATARMNET4ca5ac9de1+DATARMNET699c2c62cd->
+DATARMNET0aeee57ceb;if(!DATARMNETaa568481cf->DATARMNET1db11fa85e)return;
+DATARMNETd74aeaa49a=list_first_entry(&DATARMNETaa568481cf->DATARMNETb76b79d0d5,
+struct rmnet_frag_descriptor,list);if(!DATARMNETd74aeaa49a->gso_segs)
+DATARMNETd74aeaa49a->gso_segs=(0xd26+209-0xdf6);DATARMNETd74aeaa49a->gso_size=
+DATARMNETaa568481cf->DATARMNET1978d5d8de;DATARMNETa1625e27e2=DATARMNETd74aeaa49a
+;list_for_each_entry_safe_continue(DATARMNETa1625e27e2,DATARMNET0386f6f82a,&
+DATARMNETaa568481cf->DATARMNETb76b79d0d5,list){u32 DATARMNET904423d5e4=
+DATARMNETa1625e27e2->len-DATARMNET567bdc7221;if(!
+rmnet_frag_descriptor_add_frags_from(DATARMNETd74aeaa49a,DATARMNETa1625e27e2,
+DATARMNET567bdc7221,DATARMNET904423d5e4)){DATARMNETd74aeaa49a->gso_segs+=(
+DATARMNETa1625e27e2->gso_segs)?:(0xd26+209-0xdf6);DATARMNETd74aeaa49a->
+coal_bytes+=DATARMNETa1625e27e2->coal_bytes;DATARMNETd74aeaa49a->coal_bufsize+=
+DATARMNETa1625e27e2->coal_bufsize;}rmnet_recycle_frag_descriptor(
+DATARMNETa1625e27e2,DATARMNETe05748b000->DATARMNET403589239f);}
+DATARMNETd74aeaa49a->hash=DATARMNETaa568481cf->DATARMNET381f1cadc4;list_del_init
+(&DATARMNETd74aeaa49a->list);list_add_tail(&DATARMNETd74aeaa49a->list,
+DATARMNET6f9bfa17e6);DATARMNETaa568481cf->DATARMNET1db11fa85e=(0xd2d+202-0xdf7);
+DATARMNETaa568481cf->DATARMNETcf28ae376b=(0xd2d+202-0xdf7);}void 
+DATARMNETc38c135c9f(u32 DATARMNET3f8cc6fc24,struct list_head*DATARMNET6f9bfa17e6
+){struct DATARMNETd7c9631acd*DATARMNETaa568481cf;hash_for_each_possible(
+DATARMNET4791268d67,DATARMNETaa568481cf,DATARMNETbd5d7d96d8,DATARMNET3f8cc6fc24)
+{if(DATARMNETaa568481cf->DATARMNET381f1cadc4==DATARMNET3f8cc6fc24&&
+DATARMNETaa568481cf->DATARMNET1db11fa85e)DATARMNETa3055c21f2(DATARMNETaa568481cf
+,DATARMNET6f9bfa17e6);}}u32 DATARMNETae70636c90(struct list_head*
+DATARMNET6f9bfa17e6){struct DATARMNETd7c9631acd*DATARMNETaa568481cf;int 
+DATARMNETae0201901a;u32 DATARMNET737bbd41c3=(0xd2d+202-0xdf7);hash_for_each(
+DATARMNET4791268d67,DATARMNETae0201901a,DATARMNETaa568481cf,DATARMNETbd5d7d96d8)
+{if(DATARMNETaa568481cf->DATARMNET1db11fa85e){DATARMNET737bbd41c3++;
+DATARMNETa3055c21f2(DATARMNETaa568481cf,DATARMNET6f9bfa17e6);}}return 
+DATARMNET737bbd41c3;}void DATARMNET33aa5df9ef(struct DATARMNETd7c9631acd*
+DATARMNETaa568481cf,struct DATARMNETd812bcdbb5*DATARMNET5fe4c722a8){if(
+DATARMNET5fe4c722a8->DATARMNETf1b6b0a6cc){memcpy(&DATARMNETaa568481cf->
+DATARMNET78fd20ce0e,&DATARMNET5fe4c722a8->DATARMNET144d119066,sizeof(
+DATARMNETaa568481cf->DATARMNET78fd20ce0e));DATARMNETaa568481cf->
+DATARMNET381f1cadc4=DATARMNET5fe4c722a8->DATARMNET645e8912b8;DATARMNETaa568481cf
+->DATARMNET1978d5d8de=(DATARMNET5fe4c722a8->DATARMNET719f68fb88->gso_size)?:
+DATARMNET5fe4c722a8->DATARMNET1ef22e4c76;}if(DATARMNET5fe4c722a8->
+DATARMNET144d119066.DATARMNET7fa8b2acbf==DATARMNETfd5c3d30e5)DATARMNETaa568481cf
+->DATARMNET78fd20ce0e.DATARMNETbc28a5970f+=DATARMNET5fe4c722a8->
+DATARMNET1ef22e4c76;list_add_tail(&DATARMNET5fe4c722a8->DATARMNET719f68fb88->
+list,&DATARMNETaa568481cf->DATARMNETb76b79d0d5);DATARMNETaa568481cf->
+DATARMNET1db11fa85e++;DATARMNETaa568481cf->DATARMNETcf28ae376b+=
+DATARMNET5fe4c722a8->DATARMNET1ef22e4c76;}bool DATARMNETfbf5798e15(struct 
+DATARMNETd812bcdbb5*DATARMNET5fe4c722a8,struct list_head*DATARMNET6f9bfa17e6){
+struct DATARMNETd7c9631acd*DATARMNETaa568481cf;bool DATARMNET885970f252=false;u8
+ DATARMNET9695aa5b1d=DATARMNET5fe4c722a8->DATARMNET144d119066.
+DATARMNET7fa8b2acbf;if(!DATARMNET2013036d80(DATARMNET9695aa5b1d)){
+DATARMNETa00cda79d0(DATARMNET6a894ab63d);return false;}hash_for_each_possible(
+DATARMNET4791268d67,DATARMNETaa568481cf,DATARMNETbd5d7d96d8,DATARMNET5fe4c722a8
+->DATARMNET645e8912b8){bool DATARMNET2dd83daa1c;if(!DATARMNET6895620058(
+DATARMNETaa568481cf,DATARMNET5fe4c722a8))continue;DATARMNETc6f994577c:
+DATARMNET2dd83daa1c=DATARMNET5a0f9fc3a2(DATARMNETaa568481cf,DATARMNET5fe4c722a8)
+;DATARMNET5fe4c722a8->DATARMNETf1b6b0a6cc=true;DATARMNET885970f252=true;switch(
+DATARMNET9695aa5b1d){case DATARMNETfd5c3d30e5:return DATARMNET4c7cdc25b7(
+DATARMNETaa568481cf,DATARMNET5fe4c722a8,DATARMNET2dd83daa1c,DATARMNET6f9bfa17e6)
+;case DATARMNETa656f324b2:return DATARMNET8dc47eb7af(DATARMNETaa568481cf,
+DATARMNET5fe4c722a8,DATARMNET2dd83daa1c,DATARMNET6f9bfa17e6);default:return 
+false;}}if(!DATARMNET885970f252){DATARMNETaa568481cf=DATARMNETd41def0046();
+DATARMNETaa568481cf->DATARMNET381f1cadc4=DATARMNET5fe4c722a8->
+DATARMNET645e8912b8;hash_add(DATARMNET4791268d67,&DATARMNETaa568481cf->
+DATARMNETbd5d7d96d8,DATARMNETaa568481cf->DATARMNET381f1cadc4);goto 
+DATARMNETc6f994577c;}return false;}void DATARMNETb98b78b8e3(void){struct 
+DATARMNETd7c9631acd*DATARMNETaa568481cf;struct hlist_node*DATARMNET0386f6f82a;
+int DATARMNETae0201901a;hash_for_each_safe(DATARMNET4791268d67,
+DATARMNETae0201901a,DATARMNET0386f6f82a,DATARMNETaa568481cf,DATARMNETbd5d7d96d8)
+hash_del(&DATARMNETaa568481cf->DATARMNETbd5d7d96d8);}int DATARMNETdbcaf01255(
+void){struct DATARMNET70f3b87b5d*DATARMNETe05748b000=DATARMNETc2a630b113();u8 
+DATARMNETefc9df3df2;for(DATARMNETefc9df3df2=(0xd2d+202-0xdf7);
+DATARMNETefc9df3df2<DATARMNET78d9393ac8;DATARMNETefc9df3df2++){struct 
+DATARMNETd7c9631acd*DATARMNETaa568481cf;DATARMNETaa568481cf=&DATARMNETe05748b000
+->DATARMNETebb45c8d86.DATARMNET2846a01cce[DATARMNETefc9df3df2];INIT_LIST_HEAD(&
+DATARMNETaa568481cf->DATARMNETb76b79d0d5);INIT_HLIST_NODE(&DATARMNETaa568481cf->
+DATARMNETbd5d7d96d8);}return DATARMNET0529bb9c4e;}

+ 37 - 0
qcom/opensource/datarmnet-ext/offload/rmnet_offload_engine.h

@@ -0,0 +1,37 @@
+/* Copyright (c) 2018-2021, The Linux Foundation. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 and
+ * only version 2 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ */
+
+#ifndef DATARMNETbf894466c7
+#define DATARMNETbf894466c7
+#include <linux/types.h>
+#include "rmnet_offload_main.h"
+#define DATARMNET78d9393ac8 (0xef7+1112-0x131d)
+enum{DATARMNET7af645849a,DATARMNETb0bd5db24d,DATARMNET0413b43080,};enum{
+DATARMNETa2ddeec85f,DATARMNET2d89680280=DATARMNETa2ddeec85f,DATARMNET03daf91a60,
+DATARMNET88a9920663,DATARMNET5fe3af8828,DATARMNETaccb69cf16=DATARMNET5fe3af8828,
+};struct DATARMNETd7c9631acd{struct hlist_node DATARMNETbd5d7d96d8;struct 
+list_head DATARMNETb76b79d0d5;struct DATARMNET4287f07234 DATARMNET78fd20ce0e;u32
+ DATARMNET381f1cadc4;u16 DATARMNETcf28ae376b;u32 DATARMNETd3a1a2b9b5;u16 
+DATARMNET1978d5d8de;u8 DATARMNET1db11fa85e;};struct DATARMNET907d58c807{struct 
+DATARMNETd7c9631acd DATARMNET2846a01cce[DATARMNET78d9393ac8];u8 
+DATARMNET8dfc11cccd;u8 DATARMNET57d435b225;};void DATARMNETd4230b6bfe(void);void
+ DATARMNET560e127137(void);int DATARMNET241493ab9a(u64 DATARMNET0470698d6c,u64 
+DATARMNETfeff65e096);void DATARMNETa3055c21f2(struct DATARMNETd7c9631acd*
+DATARMNETaa568481cf,struct list_head*DATARMNET6f9bfa17e6);void 
+DATARMNETc38c135c9f(u32 DATARMNET3f8cc6fc24,struct list_head*DATARMNET6f9bfa17e6
+);u32 DATARMNETae70636c90(struct list_head*DATARMNET6f9bfa17e6);void 
+DATARMNET33aa5df9ef(struct DATARMNETd7c9631acd*DATARMNETaa568481cf,struct 
+DATARMNETd812bcdbb5*DATARMNET5fe4c722a8);bool DATARMNETfbf5798e15(struct 
+DATARMNETd812bcdbb5*DATARMNET5fe4c722a8,struct list_head*DATARMNET6f9bfa17e6);
+void DATARMNETb98b78b8e3(void);int DATARMNETdbcaf01255(void);
+#endif
+

+ 75 - 0
qcom/opensource/datarmnet-ext/offload/rmnet_offload_knob.c

@@ -0,0 +1,75 @@
+/* Copyright (c) 2018-2020, The Linux Foundation. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 and
+ * only version 2 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ */
+
+#include <linux/moduleparam.h>
+#include "rmnet_offload_knob.h"
+#include "rmnet_offload_main.h"
+#include "rmnet_offload_engine.h"
+#define DATARMNET7996ea045b(DATARMNET4c4a5ce272) \
+	static int __ ## DATARMNET4c4a5ce272(const char *DATARMNETcc6099cb14, const \
+struct kernel_param *DATARMNETb3ce0fdc63) \
+	{ \
+		return DATARMNETf467eaf6fc(DATARMNETcc6099cb14, DATARMNETb3ce0fdc63, \
+DATARMNET4c4a5ce272); \
+	}
+#define DATARMNETce9a74c748(DATARMNET4c4a5ce272, DATARMNET91574ba67a, \
+DATARMNET8f535916a4, DATARMNETae9bf9b111, DATARMNETbdf6f9d425) \
+	(struct DATARMNET5374f6eafa) { \
+		.DATARMNETd67569df12 = DATARMNET91574ba67a, \
+		.DATARMNET949fb858da = DATARMNET8f535916a4, \
+		.DATARMNET6c81c0097b = DATARMNETae9bf9b111, \
+		.DATARMNET8a7dce7d36 = DATARMNETbdf6f9d425, \
+		.DATARMNET9cee06cbe4 = { \
+			.set = __ ## DATARMNET4c4a5ce272, \
+			.get = param_get_ullong, \
+		}, \
+	}
+#define DATARMNET584f34118e(DATARMNETe1196c6554, DATARMNET4c4a5ce272) \
+	module_param_cb(DATARMNETe1196c6554, &DATARMNET07ae1e39fb[DATARMNET4c4a5ce272].\
+DATARMNET9cee06cbe4, \
+			&DATARMNET07ae1e39fb[DATARMNET4c4a5ce272].DATARMNETd67569df12, \
+(0xdb7+6665-0x261c))
+struct DATARMNET5374f6eafa{u64 DATARMNETd67569df12;u64 DATARMNET949fb858da;u64 
+DATARMNET6c81c0097b;int(*DATARMNET8a7dce7d36)(u64 DATARMNET7e07157b72,u64 
+DATARMNETcd597b0a1b);struct kernel_param_ops DATARMNET9cee06cbe4;};static int 
+DATARMNETf467eaf6fc(const char*DATARMNETcc6099cb14,const struct kernel_param*
+DATARMNETb3ce0fdc63,u32 DATARMNET4c4a5ce272);DATARMNET7996ea045b(
+DATARMNETdf66588a73);DATARMNET7996ea045b(DATARMNET9c85bb95a3);
+DATARMNET7996ea045b(DATARMNET6d2ed4b822);static struct DATARMNET5374f6eafa 
+DATARMNET07ae1e39fb[DATARMNET94aa767bca]={DATARMNETce9a74c748(
+DATARMNETdf66588a73,65000,(0xd2d+202-0xdf7),65000,NULL),DATARMNETce9a74c748(
+DATARMNET9c85bb95a3,65000,(0xd2d+202-0xdf7),65000,NULL),DATARMNETce9a74c748(
+DATARMNET6d2ed4b822,DATARMNET2d89680280,DATARMNETa2ddeec85f,DATARMNETaccb69cf16,
+DATARMNET241493ab9a),};static int DATARMNETf467eaf6fc(const char*
+DATARMNETcc6099cb14,const struct kernel_param*DATARMNETb3ce0fdc63,u32 
+DATARMNET4c4a5ce272){struct DATARMNET5374f6eafa*DATARMNET0751f2024d;unsigned 
+long long DATARMNETcd597b0a1b;u64 DATARMNET7e07157b72;int DATARMNETb14e52a504;if
+(DATARMNET4c4a5ce272>=DATARMNET94aa767bca)return-EINVAL;DATARMNETb14e52a504=
+kstrtoull(DATARMNETcc6099cb14,(0xd2d+202-0xdf7),&DATARMNETcd597b0a1b);if(
+DATARMNETb14e52a504<(0xd2d+202-0xdf7))return DATARMNETb14e52a504;
+DATARMNET0751f2024d=&DATARMNET07ae1e39fb[DATARMNET4c4a5ce272];if((u64)
+DATARMNETcd597b0a1b<DATARMNET0751f2024d->DATARMNET949fb858da||(u64)
+DATARMNETcd597b0a1b>DATARMNET0751f2024d->DATARMNET6c81c0097b)return-ERANGE;
+DATARMNET664568fcd0();DATARMNET7e07157b72=*(u64*)DATARMNETb3ce0fdc63->arg;if((
+u64)DATARMNETcd597b0a1b==DATARMNET7e07157b72){DATARMNET6a76048590();return
+(0xd2d+202-0xdf7);}if(DATARMNET0751f2024d->DATARMNET8a7dce7d36){
+DATARMNETb14e52a504=DATARMNET0751f2024d->DATARMNET8a7dce7d36(DATARMNET7e07157b72
+,(u64)DATARMNETcd597b0a1b);if(DATARMNETb14e52a504<(0xd2d+202-0xdf7)){
+DATARMNET6a76048590();return DATARMNETb14e52a504;}}*(u64*)DATARMNETb3ce0fdc63->
+arg=(u64)DATARMNETcd597b0a1b;DATARMNET6a76048590();return(0xd2d+202-0xdf7);}
+DATARMNET584f34118e(rmnet_offload_knob0,DATARMNETdf66588a73);DATARMNET584f34118e
+(rmnet_offload_knob1,DATARMNET9c85bb95a3);DATARMNET584f34118e(
+rmnet_offload_knob2,DATARMNET6d2ed4b822);u64 DATARMNETf1d1b8287f(u32 
+DATARMNET4c4a5ce272){struct DATARMNET5374f6eafa*DATARMNET0751f2024d;if(
+DATARMNET4c4a5ce272>=DATARMNET94aa767bca)return(u64)~(0xd2d+202-0xdf7);
+DATARMNET0751f2024d=&DATARMNET07ae1e39fb[DATARMNET4c4a5ce272];return 
+DATARMNET0751f2024d->DATARMNETd67569df12;}

+ 18 - 0
qcom/opensource/datarmnet-ext/offload/rmnet_offload_knob.h

@@ -0,0 +1,18 @@
+/* Copyright (c) 2018-2020, The Linux Foundation. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 and
+ * only version 2 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ */
+
+#ifndef DATARMNET5833be0738
+#define DATARMNET5833be0738
+#include <linux/types.h>
+enum{DATARMNETdf66588a73,DATARMNET9c85bb95a3,DATARMNET6d2ed4b822,
+DATARMNET94aa767bca,};u64 DATARMNETf1d1b8287f(u32 DATARMNET4c4a5ce272);
+#endif

+ 267 - 0
qcom/opensource/datarmnet-ext/offload/rmnet_offload_main.c

@@ -0,0 +1,267 @@
+/* Copyright (c) 2018-2021, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2022-2023, Qualcomm Innovation Center, Inc. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 and
+ * only version 2 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ */
+
+#include <linux/compiler.h>
+#include <linux/rcupdate.h>
+#include <linux/jhash.h>
+#include <linux/spinlock.h>
+#include "rmnet_descriptor.h"
+#include "rmnet_handlers.h"
+#include "rmnet_map.h"
+#include "rmnet_module.h"
+#include "rmnet_offload_main.h"
+#include "rmnet_offload_state.h"
+#include "rmnet_offload_engine.h"
+#include "rmnet_offload_stats.h"
+static char*verinfo[]={"\x63\x38\x61\x63\x61\x66\x38\x35",
+"\x65\x32\x31\x38\x66\x34\x35\x31","\x32\x61\x34\x34\x66\x36\x62\x65",
+"\x37\x34\x31\x35\x39\x32\x31\x63","\x34\x31\x32\x39\x36\x62\x30\x39"};
+module_param_array(verinfo,charp,NULL,(0xcb7+5769-0x221c));MODULE_PARM_DESC(
+verinfo,
+"\x56\x65\x72\x73\x69\x6f\x6e\x20\x6f\x66\x20\x74\x68\x65\x20\x64\x72\x69\x76\x65\x72"
+);static DEFINE_SPINLOCK(DATARMNET0b5e447f18);static u32 DATARMNETcb7325e02d(
+struct DATARMNETd812bcdbb5*DATARMNET458b70e7e5){struct DATARMNET4287f07234*
+DATARMNET8814564ab9=&DATARMNET458b70e7e5->DATARMNET144d119066;__be32 
+DATARMNETdfd47b00ff[(0xd20+231-0xdfc)];u32 DATARMNET5ebf661879;__be16 
+DATARMNET08e913477e=(0xd2d+202-0xdf7),DATARMNETda7f7fa492=(0xd2d+202-0xdf7);if(
+DATARMNET8814564ab9->DATARMNET7fa8b2acbf==DATARMNETa656f324b2||
+DATARMNET8814564ab9->DATARMNET7fa8b2acbf==DATARMNETfd5c3d30e5){
+DATARMNET08e913477e=DATARMNET8814564ab9->DATARMNETa60d2ae3f6;DATARMNETda7f7fa492
+=DATARMNET8814564ab9->DATARMNET5e7452ec23;}if(DATARMNET8814564ab9->
+DATARMNET388842c721==(0xd11+230-0xdf3)){DATARMNETdfd47b00ff[(0xd2d+202-0xdf7)]=
+DATARMNET8814564ab9->DATARMNET0a28fa80f4;DATARMNETdfd47b00ff[(0xd26+209-0xdf6)]=
+DATARMNET8814564ab9->DATARMNET1a2be7b6c2;DATARMNETdfd47b00ff[(0xd1f+216-0xdf5)]=
+DATARMNET8814564ab9->DATARMNET7fa8b2acbf;DATARMNETdfd47b00ff[(0xd18+223-0xdf4)]=
+DATARMNETda7f7fa492;DATARMNETdfd47b00ff[(0xd11+230-0xdf3)]=DATARMNET08e913477e;
+DATARMNET5ebf661879=(0xd0a+237-0xdf2);}else{memcpy(&DATARMNETdfd47b00ff[
+(0xd2d+202-0xdf7)],&DATARMNET8814564ab9->DATARMNET45ec858bc5[(0xd2d+202-0xdf7)],
+sizeof(DATARMNET8814564ab9->DATARMNET45ec858bc5));memcpy(&DATARMNETdfd47b00ff[
+(0xd0a+237-0xdf2)],&DATARMNET8814564ab9->DATARMNET949c2754de[(0xd2d+202-0xdf7)],
+sizeof(DATARMNET8814564ab9->DATARMNET45ec858bc5));DATARMNETdfd47b00ff[
+(0xd35+210-0xdff)]=DATARMNET8814564ab9->DATARMNET7fa8b2acbf;DATARMNETdfd47b00ff[
+9]=DATARMNETda7f7fa492;DATARMNETdfd47b00ff[(0xd27+224-0xdfd)]=
+DATARMNET08e913477e;DATARMNET5ebf661879=(0xd20+231-0xdfc);}return jhash2(
+DATARMNETdfd47b00ff,DATARMNET5ebf661879,(0xd2d+202-0xdf7));}static void 
+DATARMNETe26a68d20e(u32 DATARMNET5affe290b8){u32 DATARMNET2991ac9aa9;if(
+DATARMNET5affe290b8>50000)DATARMNET2991ac9aa9=DATARMNETa121404606;else if(
+DATARMNET5affe290b8>30000)DATARMNET2991ac9aa9=DATARMNET787b04223a;else if(
+DATARMNET5affe290b8>23000)DATARMNET2991ac9aa9=DATARMNET8e1480cff2;else if(
+DATARMNET5affe290b8>14500)DATARMNET2991ac9aa9=DATARMNETf335e26298;else if(
+DATARMNET5affe290b8>7000)DATARMNET2991ac9aa9=DATARMNET3067ea3199;else if(
+DATARMNET5affe290b8>(0x5b4+1875-0x78f))DATARMNET2991ac9aa9=DATARMNETa76d93355c;
+else DATARMNET2991ac9aa9=DATARMNET92f3434694;DATARMNETa00cda79d0(
+DATARMNET2991ac9aa9);}static bool DATARMNET1a7ed9a6a2(struct 
+rmnet_frag_descriptor*DATARMNET9d1b321642,struct DATARMNETd812bcdbb5*
+DATARMNET458b70e7e5){struct DATARMNET4287f07234*DATARMNET8814564ab9=&
+DATARMNET458b70e7e5->DATARMNET144d119066;u8*DATARMNETdf2dbc641f;u16 
+DATARMNET5affe290b8;u16 DATARMNETdaa9248df1;DATARMNET5affe290b8=
+DATARMNET9d1b321642->len;DATARMNET458b70e7e5->DATARMNET3eb91ee54d=true;if(
+unlikely(!(DATARMNET9d1b321642->dev->features&NETIF_F_RXCSUM))){goto 
+DATARMNETaabe3a05f8;}if(DATARMNET9d1b321642->hdrs_valid){struct 
+DATARMNET0b82084e89*DATARMNET75be5f3406,DATARMNETc82d2f4e16;struct 
+DATARMNETd2991e8952*DATARMNET2e7cc88971,DATARMNETd1ff6cd568;DATARMNET8814564ab9
+->DATARMNET388842c721=DATARMNET9d1b321642->ip_proto;DATARMNET8814564ab9->
+DATARMNET4ca5ac9de1=DATARMNET9d1b321642->ip_len;DATARMNET8814564ab9->
+DATARMNET7fa8b2acbf=DATARMNET9d1b321642->trans_proto;DATARMNET8814564ab9->
+DATARMNET0aeee57ceb=DATARMNET9d1b321642->trans_len;DATARMNET5affe290b8=
+DATARMNET9d1b321642->len;if(DATARMNET8814564ab9->DATARMNET388842c721==
+(0xd11+230-0xdf3)){struct DATARMNET308c06fca6*DATARMNET86f1f2cdc9,
+DATARMNETbf6548198e;DATARMNET86f1f2cdc9=rmnet_frag_header_ptr(
+DATARMNET9d1b321642,(0xd2d+202-0xdf7),sizeof(*DATARMNET86f1f2cdc9),&
+DATARMNETbf6548198e);if(!DATARMNET86f1f2cdc9)goto DATARMNETaabe3a05f8;
+DATARMNET8814564ab9->DATARMNET1a2be7b6c2=DATARMNET86f1f2cdc9->
+DATARMNET9bbd2ca483;DATARMNET8814564ab9->DATARMNET0a28fa80f4=DATARMNET86f1f2cdc9
+->DATARMNET11ef55b2bb;DATARMNET8814564ab9->DATARMNET19b03754c4=
+DATARMNET86f1f2cdc9->DATARMNET1eb6c27583;DATARMNET8814564ab9->
+DATARMNET57bf608183=DATARMNET86f1f2cdc9->DATARMNET03e081f69f;DATARMNET8814564ab9
+->DATARMNETcf915688f5=DATARMNET86f1f2cdc9->DATARMNET2c091223da;}else{struct 
+DATARMNET64bb8f616e*DATARMNETbf55123e5b,DATARMNETcf1d9e2c1e;DATARMNETbf55123e5b=
+rmnet_frag_header_ptr(DATARMNET9d1b321642,(0xd2d+202-0xdf7),sizeof(*
+DATARMNETbf55123e5b),&DATARMNETcf1d9e2c1e);if(!DATARMNETbf55123e5b)goto 
+DATARMNETaabe3a05f8;memcpy(&DATARMNET8814564ab9->DATARMNET949c2754de[
+(0xd2d+202-0xdf7)],&DATARMNETbf55123e5b->DATARMNET31202449fc[(0xd2d+202-0xdf7)],
+sizeof(DATARMNETbf55123e5b->DATARMNET31202449fc));memcpy(&DATARMNET8814564ab9->
+DATARMNET45ec858bc5[(0xd2d+202-0xdf7)],&DATARMNETbf55123e5b->DATARMNETc657c0a139
+[(0xd2d+202-0xdf7)],sizeof(DATARMNETbf55123e5b->DATARMNETc657c0a139));
+DATARMNET8814564ab9->DATARMNETabd58f7f89=DATARMNETbf55123e5b->
+DATARMNET0687f7ecdc;if(DATARMNET8814564ab9->DATARMNET4ca5ac9de1>sizeof(*
+DATARMNETbf55123e5b)){int DATARMNET0afb05821a;__be16 DATARMNET833503918f;bool 
+DATARMNETcd214ed34c;u8 DATARMNET615595a09c=DATARMNETbf55123e5b->
+DATARMNET7244bfdc4f;DATARMNET0afb05821a=rmnet_frag_ipv6_skip_exthdr(
+DATARMNET9d1b321642,sizeof(*DATARMNETbf55123e5b),&DATARMNET615595a09c,&
+DATARMNET833503918f,&DATARMNETcd214ed34c);if(DATARMNET0afb05821a<
+(0xd2d+202-0xdf7)||DATARMNET833503918f||DATARMNETcd214ed34c){if(
+DATARMNET615595a09c==DATARMNET5b166167a8)DATARMNET8814564ab9->
+DATARMNET4ca5ac9de1+=(0xd35+210-0xdff);DATARMNETa00cda79d0(DATARMNET807e4dad18);
+goto DATARMNETaabe3a05f8;}}}DATARMNET75be5f3406=rmnet_frag_header_ptr(
+DATARMNET9d1b321642,DATARMNET8814564ab9->DATARMNET4ca5ac9de1,sizeof(*
+DATARMNET75be5f3406),&DATARMNETc82d2f4e16);if(!DATARMNET75be5f3406)goto 
+DATARMNETaabe3a05f8;DATARMNET8814564ab9->DATARMNETa60d2ae3f6=DATARMNET75be5f3406
+->DATARMNET1b1c406ae9;DATARMNET8814564ab9->DATARMNET5e7452ec23=
+DATARMNET75be5f3406->DATARMNETdf0e8545ee;if(DATARMNET8814564ab9->
+DATARMNET7fa8b2acbf==DATARMNETfd5c3d30e5){__be32 DATARMNET0849981c7c;
+DATARMNET2e7cc88971=rmnet_frag_header_ptr(DATARMNET9d1b321642,
+DATARMNET8814564ab9->DATARMNET4ca5ac9de1,sizeof(*DATARMNET2e7cc88971),&
+DATARMNETd1ff6cd568);if(!DATARMNET2e7cc88971)goto DATARMNETaabe3a05f8;if(
+DATARMNET9d1b321642->tcp_seq_set)DATARMNET0849981c7c=DATARMNET9d1b321642->
+tcp_seq;else DATARMNET0849981c7c=DATARMNET2e7cc88971->DATARMNETb3e70104e0;
+DATARMNET8814564ab9->DATARMNETbc28a5970f=ntohl(DATARMNET0849981c7c);}
+DATARMNET458b70e7e5->DATARMNET645e8912b8=DATARMNETcb7325e02d(DATARMNET458b70e7e5
+);DATARMNET458b70e7e5->DATARMNET1ef22e4c76=DATARMNET9d1b321642->len-
+DATARMNET9d1b321642->ip_len-DATARMNET9d1b321642->trans_len;DATARMNET458b70e7e5->
+DATARMNET719f68fb88=DATARMNET9d1b321642;DATARMNET458b70e7e5->DATARMNET3eb91ee54d
+=false;return false;}DATARMNETdf2dbc641f=rmnet_frag_data_ptr(DATARMNET9d1b321642
+);if(unlikely(!DATARMNETdf2dbc641f))return true;DATARMNET8814564ab9->
+DATARMNET388842c721=(DATARMNETdf2dbc641f[(0xd2d+202-0xdf7)]&(0xbf7+4405-0x1c3c))
+>>(0xd11+230-0xdf3);if(DATARMNET8814564ab9->DATARMNET388842c721==
+(0xd11+230-0xdf3)){struct DATARMNET308c06fca6*DATARMNET86f1f2cdc9,
+DATARMNETbf6548198e;DATARMNET86f1f2cdc9=rmnet_frag_header_ptr(
+DATARMNET9d1b321642,(0xd2d+202-0xdf7),sizeof(*DATARMNET86f1f2cdc9),&
+DATARMNETbf6548198e);if(!DATARMNET86f1f2cdc9)goto DATARMNETaabe3a05f8;
+DATARMNET8814564ab9->DATARMNET4ca5ac9de1=DATARMNET86f1f2cdc9->
+DATARMNET610d06a887*(0xd11+230-0xdf3);DATARMNET8814564ab9->DATARMNET7fa8b2acbf=
+DATARMNET86f1f2cdc9->DATARMNET953d32410f;DATARMNET8814564ab9->
+DATARMNET1a2be7b6c2=DATARMNET86f1f2cdc9->DATARMNET9bbd2ca483;DATARMNET8814564ab9
+->DATARMNET0a28fa80f4=DATARMNET86f1f2cdc9->DATARMNET11ef55b2bb;
+DATARMNET8814564ab9->DATARMNET19b03754c4=DATARMNET86f1f2cdc9->
+DATARMNET1eb6c27583;DATARMNET8814564ab9->DATARMNET57bf608183=DATARMNET86f1f2cdc9
+->DATARMNET03e081f69f;DATARMNET8814564ab9->DATARMNETcf915688f5=
+DATARMNET86f1f2cdc9->DATARMNET2c091223da;if(DATARMNET86f1f2cdc9->
+DATARMNET2c091223da&htons(16383)){DATARMNETa00cda79d0(DATARMNET807e4dad18);goto 
+DATARMNETaabe3a05f8;}DATARMNETdaa9248df1=ntohs(DATARMNET86f1f2cdc9->
+DATARMNET8e175ac02d);DATARMNET458b70e7e5->DATARMNET8f59f5a745=
+DATARMNETdaa9248df1!=DATARMNET5affe290b8;}else if(DATARMNET8814564ab9->
+DATARMNET388842c721==(0xd03+244-0xdf1)){struct DATARMNET64bb8f616e*
+DATARMNETbf55123e5b,DATARMNETcf1d9e2c1e;int DATARMNET0549c61885;__be16 
+DATARMNET833503918f;bool DATARMNETcd214ed34c;u8 DATARMNET3f56a2bcf4;
+DATARMNETbf55123e5b=rmnet_frag_header_ptr(DATARMNET9d1b321642,(0xd2d+202-0xdf7),
+sizeof(*DATARMNETbf55123e5b),&DATARMNETcf1d9e2c1e);if(!DATARMNETbf55123e5b)goto 
+DATARMNETaabe3a05f8;DATARMNET3f56a2bcf4=DATARMNETbf55123e5b->DATARMNET7244bfdc4f
+;DATARMNET0549c61885=rmnet_frag_ipv6_skip_exthdr(DATARMNET9d1b321642,sizeof(*
+DATARMNETbf55123e5b),&DATARMNET3f56a2bcf4,&DATARMNET833503918f,&
+DATARMNETcd214ed34c);if(DATARMNET0549c61885<(0xd2d+202-0xdf7)){goto 
+DATARMNETaabe3a05f8;}DATARMNET8814564ab9->DATARMNET4ca5ac9de1=(u16)
+DATARMNET0549c61885;DATARMNET8814564ab9->DATARMNET7fa8b2acbf=DATARMNET3f56a2bcf4
+;memcpy(&DATARMNET8814564ab9->DATARMNET949c2754de[(0xd2d+202-0xdf7)],&
+DATARMNETbf55123e5b->DATARMNET31202449fc[(0xd2d+202-0xdf7)],sizeof(
+DATARMNETbf55123e5b->DATARMNET31202449fc));memcpy(&DATARMNET8814564ab9->
+DATARMNET45ec858bc5[(0xd2d+202-0xdf7)],&DATARMNETbf55123e5b->DATARMNETc657c0a139
+[(0xd2d+202-0xdf7)],sizeof(DATARMNETbf55123e5b->DATARMNETc657c0a139));
+DATARMNET8814564ab9->DATARMNETabd58f7f89=DATARMNETbf55123e5b->
+DATARMNET0687f7ecdc;if(DATARMNET833503918f||DATARMNETcd214ed34c){if(
+DATARMNET8814564ab9->DATARMNET7fa8b2acbf==DATARMNET5b166167a8)
+DATARMNET8814564ab9->DATARMNET4ca5ac9de1+=(0xd35+210-0xdff);DATARMNETa00cda79d0(
+DATARMNET807e4dad18);goto DATARMNETaabe3a05f8;}DATARMNETdaa9248df1=ntohs(
+DATARMNETbf55123e5b->DATARMNETaa340485c5)+sizeof(*DATARMNETbf55123e5b);
+DATARMNET458b70e7e5->DATARMNET8f59f5a745=DATARMNETdaa9248df1!=
+DATARMNET5affe290b8;}else{return true;}if(DATARMNET8814564ab9->
+DATARMNET7fa8b2acbf==DATARMNETfd5c3d30e5){struct DATARMNETd2991e8952*
+DATARMNET2e7cc88971,DATARMNETd1ff6cd568;DATARMNET2e7cc88971=
+rmnet_frag_header_ptr(DATARMNET9d1b321642,DATARMNET8814564ab9->
+DATARMNET4ca5ac9de1,sizeof(*DATARMNET2e7cc88971),&DATARMNETd1ff6cd568);if(!
+DATARMNET2e7cc88971)goto DATARMNETaabe3a05f8;DATARMNET8814564ab9->
+DATARMNET0aeee57ceb=DATARMNET2e7cc88971->DATARMNETcf2e43ad69*(0xd11+230-0xdf3);
+DATARMNET8814564ab9->DATARMNETa60d2ae3f6=DATARMNET2e7cc88971->
+DATARMNET6acbeeebb1;DATARMNET8814564ab9->DATARMNET5e7452ec23=DATARMNET2e7cc88971
+->DATARMNET29b8c05d14;DATARMNET8814564ab9->DATARMNETbc28a5970f=ntohl(
+DATARMNET2e7cc88971->DATARMNETb3e70104e0);}else if(DATARMNET8814564ab9->
+DATARMNET7fa8b2acbf==DATARMNETa656f324b2){struct DATARMNET0b82084e89*
+DATARMNET75be5f3406,DATARMNETc82d2f4e16;DATARMNET75be5f3406=
+rmnet_frag_header_ptr(DATARMNET9d1b321642,DATARMNET8814564ab9->
+DATARMNET4ca5ac9de1,sizeof(*DATARMNET75be5f3406),&DATARMNETc82d2f4e16);if(!
+DATARMNET75be5f3406)goto DATARMNETaabe3a05f8;DATARMNET8814564ab9->
+DATARMNET0aeee57ceb=sizeof(*DATARMNET75be5f3406);DATARMNET8814564ab9->
+DATARMNETa60d2ae3f6=DATARMNET75be5f3406->DATARMNET1b1c406ae9;DATARMNET8814564ab9
+->DATARMNET5e7452ec23=DATARMNET75be5f3406->DATARMNETdf0e8545ee;}else{goto 
+DATARMNETaabe3a05f8;}DATARMNET458b70e7e5->DATARMNET3eb91ee54d=false;
+DATARMNET458b70e7e5->DATARMNET645e8912b8=DATARMNETcb7325e02d(DATARMNET458b70e7e5
+);if(!DATARMNET458b70e7e5->DATARMNET8f59f5a745){DATARMNET9d1b321642->ip_proto=
+DATARMNET8814564ab9->DATARMNET388842c721;DATARMNET9d1b321642->ip_len=
+DATARMNET8814564ab9->DATARMNET4ca5ac9de1;DATARMNET9d1b321642->trans_proto=
+DATARMNET8814564ab9->DATARMNET7fa8b2acbf;DATARMNET9d1b321642->trans_len=
+DATARMNET8814564ab9->DATARMNET0aeee57ceb;DATARMNET9d1b321642->hdrs_valid=
+(0xd26+209-0xdf6);}DATARMNETaabe3a05f8:DATARMNET458b70e7e5->DATARMNET1ef22e4c76=
+DATARMNET5affe290b8-DATARMNET8814564ab9->DATARMNET4ca5ac9de1-DATARMNET8814564ab9
+->DATARMNET0aeee57ceb;if(DATARMNET458b70e7e5->DATARMNET8f59f5a745)
+DATARMNETa00cda79d0(DATARMNET52b7da9033);DATARMNET458b70e7e5->
+DATARMNET719f68fb88=DATARMNET9d1b321642;return false;}static void 
+DATARMNETb56d685c50(struct rmnet_frag_descriptor*DATARMNET9d1b321642,struct 
+rmnet_port*DATARMNETf0d9de7e2f){struct DATARMNET70f3b87b5d*DATARMNETe05748b000=
+DATARMNETc2a630b113();struct DATARMNETd812bcdbb5 DATARMNET458b70e7e5;LIST_HEAD(
+DATARMNET6f9bfa17e6);memset(&DATARMNET458b70e7e5,(0xd2d+202-0xdf7),sizeof(
+DATARMNET458b70e7e5));DATARMNET664568fcd0();DATARMNETe05748b000->
+DATARMNET403589239f=DATARMNETf0d9de7e2f;if(DATARMNET1a7ed9a6a2(
+DATARMNET9d1b321642,&DATARMNET458b70e7e5)){DATARMNETa00cda79d0(
+DATARMNET1cddffce49);rmnet_recycle_frag_descriptor(DATARMNET9d1b321642,
+DATARMNETf0d9de7e2f);goto DATARMNETbf4095f79e;}DATARMNETa00cda79d0(
+DATARMNET9b3fdb0e16);if(DATARMNET458b70e7e5.DATARMNET3eb91ee54d){goto 
+DATARMNET806c6f8e60;}else if(DATARMNET458b70e7e5.DATARMNET8f59f5a745){
+DATARMNETc38c135c9f(DATARMNET458b70e7e5.DATARMNET645e8912b8,&DATARMNET6f9bfa17e6
+);goto DATARMNET806c6f8e60;}if(!DATARMNET9d1b321642->csum_valid){goto 
+DATARMNET806c6f8e60;}if(!DATARMNETfbf5798e15(&DATARMNET458b70e7e5,&
+DATARMNET6f9bfa17e6))goto DATARMNET806c6f8e60;goto DATARMNETbf4095f79e;
+DATARMNET806c6f8e60:DATARMNET19d190f2bd(&DATARMNET458b70e7e5,&
+DATARMNET6f9bfa17e6);DATARMNETbf4095f79e:DATARMNET6a76048590();
+DATARMNETc70e73c8d4(&DATARMNET6f9bfa17e6);}static void DATARMNET29e8d137c4(
+struct list_head*DATARMNETb5730f5283,struct rmnet_port*DATARMNETf0d9de7e2f){
+struct rmnet_frag_descriptor*DATARMNETced5b4128f,*DATARMNET0386f6f82a;
+list_for_each_entry_safe(DATARMNETced5b4128f,DATARMNET0386f6f82a,
+DATARMNETb5730f5283,list){list_del_init(&DATARMNETced5b4128f->list);
+DATARMNETb56d685c50(DATARMNETced5b4128f,DATARMNETf0d9de7e2f);}}void 
+DATARMNET664568fcd0(void){spin_lock_bh(&DATARMNET0b5e447f18);}void 
+DATARMNET6a76048590(void){spin_unlock_bh(&DATARMNET0b5e447f18);}static const 
+struct rmnet_module_hook_register_info DATARMNET162e7a2013={.hooknum=
+RMNET_MODULE_HOOK_OFFLOAD_INGRESS,.func=DATARMNET29e8d137c4,};void 
+DATARMNET818b960147(void){rcu_assign_pointer(rmnet_perf_desc_entry,
+DATARMNETb56d685c50);rmnet_module_hook_register(&DATARMNET162e7a2013,
+(0xd26+209-0xdf6));}void DATARMNETba38823a2f(void){rcu_assign_pointer(
+rmnet_perf_desc_entry,NULL);rmnet_module_hook_unregister_no_sync(&
+DATARMNET162e7a2013,(0xd26+209-0xdf6));}void DATARMNETc70e73c8d4(struct 
+list_head*DATARMNETb5730f5283){struct DATARMNET70f3b87b5d*DATARMNETe05748b000=
+DATARMNETc2a630b113();struct rmnet_frag_descriptor*DATARMNET9d1b321642,*
+DATARMNET0386f6f82a;list_for_each_entry_safe(DATARMNET9d1b321642,
+DATARMNET0386f6f82a,DATARMNETb5730f5283,list){DATARMNETe26a68d20e(
+DATARMNET9d1b321642->len);DATARMNETa00cda79d0(DATARMNET65843ad009);list_del_init
+(&DATARMNET9d1b321642->list);rmnet_frag_deliver(DATARMNET9d1b321642,
+DATARMNETe05748b000->DATARMNET403589239f);}}void DATARMNET19d190f2bd(struct 
+DATARMNETd812bcdbb5*DATARMNET458b70e7e5,struct list_head*DATARMNET6f9bfa17e6){
+struct rmnet_frag_descriptor*DATARMNET9d1b321642=DATARMNET458b70e7e5->
+DATARMNET719f68fb88;u32 DATARMNET5affe290b8=DATARMNET458b70e7e5->
+DATARMNET1ef22e4c76+DATARMNET458b70e7e5->DATARMNET144d119066.DATARMNET4ca5ac9de1
++DATARMNET458b70e7e5->DATARMNET144d119066.DATARMNET0aeee57ceb;if(
+DATARMNET5affe290b8>65536)return;if(!DATARMNET458b70e7e5->DATARMNET3eb91ee54d)
+DATARMNET9d1b321642->hash=DATARMNET458b70e7e5->DATARMNET645e8912b8;list_add_tail
+(&DATARMNET9d1b321642->list,DATARMNET6f9bfa17e6);}void DATARMNET9292bebdd3(void*
+DATARMNETf0d9de7e2f){}void DATARMNETb7e47d7254(void*DATARMNETf0d9de7e2f){}void 
+DATARMNET95e1703026(struct rmnet_map_dl_ind_hdr*DATARMNET7c7748ef7a,struct 
+rmnet_map_control_command_header*DATARMNET8b07ee3e82){struct DATARMNET70f3b87b5d
+*DATARMNETe05748b000=DATARMNETc2a630b113();LIST_HEAD(DATARMNET6f9bfa17e6);(void)
+DATARMNET8b07ee3e82;DATARMNET664568fcd0();if(DATARMNETe05748b000->
+DATARMNETa9f2b2f677.DATARMNETb165d2c5c4&&DATARMNETae70636c90(&
+DATARMNET6f9bfa17e6))DATARMNETa00cda79d0(DATARMNET372ef39ae4);
+DATARMNETe05748b000->DATARMNETa9f2b2f677.DATARMNETb165d2c5c4=true;
+DATARMNETe05748b000->DATARMNETa9f2b2f677.DATARMNETe2251ce433=DATARMNET7c7748ef7a
+->le.seq;DATARMNETe05748b000->DATARMNETa9f2b2f677.DATARMNET7f59b108db=
+DATARMNET7c7748ef7a->le.pkts;DATARMNET6a76048590();DATARMNETc70e73c8d4(&
+DATARMNET6f9bfa17e6);}void DATARMNETc9dd320f49(struct rmnet_map_dl_ind_trl*
+DATARMNET2541770fea,struct rmnet_map_control_command_header*DATARMNET8b07ee3e82)
+{struct DATARMNET70f3b87b5d*DATARMNETe05748b000=DATARMNETc2a630b113();LIST_HEAD(
+DATARMNET6f9bfa17e6);(void)DATARMNET8b07ee3e82;DATARMNET664568fcd0();if(
+DATARMNETe05748b000->DATARMNETa9f2b2f677.DATARMNETe2251ce433!=
+DATARMNET2541770fea->seq_le)DATARMNETa00cda79d0(DATARMNET30a4d88ea6);if(
+DATARMNETae70636c90(&DATARMNET6f9bfa17e6))DATARMNETa00cda79d0(
+DATARMNETa03ed3629e);DATARMNETe05748b000->DATARMNETa9f2b2f677.
+DATARMNETb165d2c5c4=false;DATARMNETe05748b000->DATARMNETa9f2b2f677.
+DATARMNETe2251ce433=(0xd2d+202-0xdf7);DATARMNETe05748b000->DATARMNETa9f2b2f677.
+DATARMNET7f59b108db=(0xd2d+202-0xdf7);DATARMNET6a76048590();DATARMNETc70e73c8d4(
+&DATARMNET6f9bfa17e6);}

+ 74 - 0
qcom/opensource/datarmnet-ext/offload/rmnet_offload_main.h

@@ -0,0 +1,74 @@
+/* Copyright (c) 2018-2021, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2022, Qualcomm Innovation Center, Inc. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 and
+ * only version 2 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ */
+
+#ifndef DATARMNET3f65517842
+#define DATARMNET3f65517842
+#include <linux/types.h>
+#include <asm/byteorder.h>
+#include "rmnet_descriptor.h"
+#include "rmnet_map.h"
+#define DATARMNETfd5c3d30e5		(0xd03+244-0xdf1)
+#define DATARMNETa656f324b2		(0xeb7+1151-0x1325)
+#define DATARMNET5b166167a8	(0xec7+1138-0x130d)
+struct DATARMNET308c06fca6{
+#if defined(__LITTLE_ENDIAN_BITFIELD)
+u8 DATARMNET610d06a887:(0xd11+230-0xdf3);u8 DATARMNET7af6b06548:
+(0xd11+230-0xdf3);
+#elif defined (__BIG_ENDIAN_BITFIELD)
+u8 DATARMNET7af6b06548:(0xd11+230-0xdf3);u8 DATARMNET610d06a887:
+(0xd11+230-0xdf3);
+#else
+#error "<asm/byteorder.h> error"
+#endif
+u8 DATARMNET03e081f69f;__be16 DATARMNET8e175ac02d;__be16 DATARMNET4acf94d119;
+__be16 DATARMNET2c091223da;u8 DATARMNET1eb6c27583;u8 DATARMNET953d32410f;__be16 
+DATARMNET9e4950461a;__be32 DATARMNET9bbd2ca483;__be32 DATARMNET11ef55b2bb;};
+struct DATARMNET64bb8f616e{__be32 DATARMNET0687f7ecdc;__be16 DATARMNETaa340485c5
+;u8 DATARMNET7244bfdc4f;u8 DATARMNET00f98dd445;__be32 DATARMNET31202449fc[
+(0xd11+230-0xdf3)];__be32 DATARMNETc657c0a139[(0xd11+230-0xdf3)];};struct 
+DATARMNETd2991e8952{__be16 DATARMNET6acbeeebb1;__be16 DATARMNET29b8c05d14;__be32
+ DATARMNETb3e70104e0;__be32 DATARMNET9a9c9d060a;
+#if defined(__LITTLE_ENDIAN_BITFIELD)
+u8 DATARMNET655b34c160:(0xd11+230-0xdf3);u8 DATARMNETcf2e43ad69:
+(0xd11+230-0xdf3);
+#elif defined (__BIG_ENDIAN_BITFIELD)
+u8 DATARMNETcf2e43ad69:(0xd11+230-0xdf3);u8 DATARMNET655b34c160:
+(0xd11+230-0xdf3);
+#else
+#error "<asm/byteorder.h> error"
+#endif
+u8 DATARMNETd570802f3d;__be16 DATARMNET807cd6af6c;__be16 DATARMNET8891a7f7ce;
+__be16 DATARMNET9921296467;};struct DATARMNET0b82084e89{__be16 
+DATARMNET1b1c406ae9;__be16 DATARMNETdf0e8545ee;__be16 DATARMNET39a05c5524;__be16
+ DATARMNET45a3ebe8e3;};struct DATARMNET4287f07234{__be16 DATARMNETa60d2ae3f6;
+__be16 DATARMNET5e7452ec23;union{__be32 DATARMNET1a2be7b6c2;__be32 
+DATARMNET949c2754de[(0xd11+230-0xdf3)];};union{__be32 DATARMNET0a28fa80f4;__be32
+ DATARMNET45ec858bc5[(0xd11+230-0xdf3)];};union{struct{u8 DATARMNET19b03754c4;u8
+ DATARMNET57bf608183;__be16 DATARMNETcf915688f5;};__be32 DATARMNETabd58f7f89;};
+u32 DATARMNETbc28a5970f;u16 DATARMNET4ca5ac9de1;u16 DATARMNET0aeee57ceb;u8 
+DATARMNET388842c721;u8 DATARMNET7fa8b2acbf;};struct DATARMNETd812bcdbb5{struct 
+rmnet_frag_descriptor*DATARMNET719f68fb88;struct DATARMNET4287f07234 
+DATARMNET144d119066;u32 DATARMNET645e8912b8;u16 DATARMNET1ef22e4c76;bool 
+DATARMNETf1b6b0a6cc;bool DATARMNET3eb91ee54d;bool DATARMNET8f59f5a745;};void 
+DATARMNET664568fcd0(void);void DATARMNET6a76048590(void);void 
+DATARMNET818b960147(void);void DATARMNETba38823a2f(void);void 
+DATARMNETc70e73c8d4(struct list_head*DATARMNETb5730f5283);void 
+DATARMNET19d190f2bd(struct DATARMNETd812bcdbb5*DATARMNET458b70e7e5,struct 
+list_head*DATARMNET6f9bfa17e6);void DATARMNET9292bebdd3(void*DATARMNETf0d9de7e2f
+);void DATARMNETb7e47d7254(void*DATARMNETf0d9de7e2f);void DATARMNET95e1703026(
+struct rmnet_map_dl_ind_hdr*DATARMNET7c7748ef7a,struct 
+rmnet_map_control_command_header*DATARMNET8b07ee3e82);void DATARMNETc9dd320f49(
+struct rmnet_map_dl_ind_trl*DATARMNET2541770fea,struct 
+rmnet_map_control_command_header*DATARMNET8b07ee3e82);
+#endif
+

+ 101 - 0
qcom/opensource/datarmnet-ext/offload/rmnet_offload_state.c

@@ -0,0 +1,101 @@
+/* Copyright (c) 2018-2021, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2022, Qualcomm Innovation Center, Inc. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 and
+ * only version 2 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ */
+
+#include <linux/module.h>
+#include <linux/netdevice.h>
+#include <linux/rcupdate.h>
+#include "rmnet_map.h"
+#include "rmnet_private.h"
+#include "qmi_rmnet.h"
+#include "rmnet_offload_state.h"
+#include "rmnet_offload_engine.h"
+MODULE_LICENSE("\x47\x50\x4c\x20\x76\x32");
+#define DATARMNET1f03ff7987 (0xd2d+202-0xdf7)
+static struct DATARMNET70f3b87b5d*DATARMNETe05748b000;static void 
+DATARMNETac9c8c14b1(void){struct rmnet_port*DATARMNETf0d9de7e2f=
+DATARMNETe05748b000->DATARMNET403589239f;struct DATARMNET74bb35b8f2*
+DATARMNET87b015f76f;qmi_rmnet_ps_ind_deregister(DATARMNETf0d9de7e2f,&
+DATARMNETe05748b000->DATARMNET341393eda2);DATARMNET87b015f76f=&
+DATARMNETe05748b000->DATARMNETa9f2b2f677;if(DATARMNET87b015f76f->
+DATARMNETc2832b8f85)rmnet_map_dl_ind_deregister(DATARMNETf0d9de7e2f,&
+DATARMNET87b015f76f->DATARMNET8633ae8f1e);}static void DATARMNET345f805b34(void)
+{LIST_HEAD(DATARMNET6f9bfa17e6);if(!DATARMNETe05748b000)return;
+DATARMNETac9c8c14b1();DATARMNETba38823a2f();DATARMNET560e127137();
+synchronize_rcu();DATARMNETae70636c90(&DATARMNET6f9bfa17e6);DATARMNETb98b78b8e3(
+);kfree(DATARMNETe05748b000);DATARMNETe05748b000=NULL;}static int 
+DATARMNETd68e3594a7(void){struct rmnet_port*DATARMNETf0d9de7e2f=
+DATARMNETe05748b000->DATARMNET403589239f;struct qmi_rmnet_ps_ind*
+DATARMNETbc78d7fd3c;struct DATARMNET74bb35b8f2*DATARMNET87b015f76f;struct 
+rmnet_map_dl_ind*DATARMNET8633ae8f1e;int DATARMNETb14e52a504=DATARMNET0529bb9c4e
+;DATARMNETbc78d7fd3c=&DATARMNETe05748b000->DATARMNET341393eda2;
+DATARMNETbc78d7fd3c->ps_on_handler=DATARMNET9292bebdd3;DATARMNETbc78d7fd3c->
+ps_off_handler=DATARMNETb7e47d7254;if(qmi_rmnet_ps_ind_register(
+DATARMNETf0d9de7e2f,DATARMNETbc78d7fd3c)){DATARMNETb14e52a504=
+DATARMNET8e1c5c09f8;pr_warn(
+"\x25\x73\x28\x29\x3a\x20\x50\x53\x20\x43\x42\x20\x72\x65\x67\x69\x73\x74\x72\x61\x74\x69\x6f\x6e\x20\x66\x61\x69\x6c\x65\x64" "\n"
+,__func__);}if(DATARMNETf0d9de7e2f->data_format&
+RMNET_INGRESS_FORMAT_DL_MARKER_V2){DATARMNET87b015f76f=&DATARMNETe05748b000->
+DATARMNETa9f2b2f677;DATARMNET8633ae8f1e=&DATARMNET87b015f76f->
+DATARMNET8633ae8f1e;DATARMNET8633ae8f1e->priority=DATARMNET1f03ff7987;
+DATARMNET8633ae8f1e->dl_hdr_handler_v2=DATARMNET95e1703026;DATARMNET8633ae8f1e->
+dl_trl_handler_v2=DATARMNETc9dd320f49;if(rmnet_map_dl_ind_register(
+DATARMNETf0d9de7e2f,DATARMNET8633ae8f1e)){DATARMNETb14e52a504=
+DATARMNET8e1c5c09f8;pr_warn(
+"\x25\x73\x28\x29\x3a\x20\x44\x4c\x20\x43\x42\x20\x72\x65\x67\x69\x73\x74\x72\x61\x74\x61\x74\x69\x6f\x6e\x20\x66\x61\x69\x6c\x65\x64" "\n"
+,__func__);}else{DATARMNET87b015f76f->DATARMNETc2832b8f85=true;}}
+DATARMNETd4230b6bfe();return DATARMNETb14e52a504;}static int DATARMNET9f53d54812
+(struct rmnet_port*DATARMNETf0d9de7e2f){int DATARMNETb14e52a504;
+DATARMNETe05748b000=kzalloc(sizeof(*DATARMNETe05748b000),GFP_KERNEL);if(!
+DATARMNETe05748b000){pr_err(
+"\x25\x73\x28\x29\x3a\x20\x52\x65\x73\x6f\x75\x72\x63\x65\x20\x61\x6c\x6c\x6f\x63\x61\x74\x69\x6f\x6e\x20\x66\x61\x69\x6c\x65\x64" "\n"
+,__func__);return DATARMNETb881657565;}DATARMNETe05748b000->DATARMNET403589239f=
+DATARMNETf0d9de7e2f;DATARMNETb14e52a504=DATARMNETdbcaf01255();if(
+DATARMNETb14e52a504<(0xd2d+202-0xdf7))goto DATARMNET1d7e728ddf;
+DATARMNETb14e52a504=DATARMNETd68e3594a7();if(DATARMNETb14e52a504!=
+DATARMNET0529bb9c4e){pr_warn(
+"\x25\x73\x28\x29\x3a\x20\x43\x61\x6c\x6c\x62\x61\x63\x6b\x20\x72\x65\x67\x69\x73\x74\x72\x61\x74\x69\x6f\x6e\x20\x66\x61\x69\x6c\x65\x64" "\n"
+,__func__);}DATARMNETe05748b000->DATARMNETcb2b3ae8e4=(0xd26+209-0xdf6);
+DATARMNET818b960147();return DATARMNETb14e52a504;DATARMNET1d7e728ddf:kfree(
+DATARMNETe05748b000);DATARMNETe05748b000=NULL;return DATARMNETb14e52a504;}static
+ int DATARMNET7dec24813e(struct notifier_block*DATARMNET272c159b3c,unsigned long
+ DATARMNET4abd997295,void*DATARMNET3f254bae11){struct net_device*
+DATARMNET00dcb79bc4=netdev_notifier_info_to_dev(DATARMNET3f254bae11);struct 
+rmnet_port*DATARMNETf0d9de7e2f;struct rmnet_priv*DATARMNETe823dcf978;int 
+DATARMNETb14e52a504;(void)DATARMNET272c159b3c;if(!DATARMNET00dcb79bc4||strncmp(
+DATARMNET00dcb79bc4->name,"\x72\x6d\x6e\x65\x74\x5f\x64\x61\x74\x61",
+(0xd27+224-0xdfd)))goto DATARMNETaabe3a05f8;switch(DATARMNET4abd997295){case 
+NETDEV_REGISTER:if(DATARMNETe05748b000){DATARMNETe05748b000->DATARMNETcb2b3ae8e4
+++;goto DATARMNETaabe3a05f8;}DATARMNETe823dcf978=netdev_priv(DATARMNET00dcb79bc4
+);DATARMNETf0d9de7e2f=rmnet_get_port(DATARMNETe823dcf978->real_dev);if(!
+DATARMNETf0d9de7e2f){pr_err(
+"\x25\x73\x28\x29\x3a\x20\x49\x6e\x76\x61\x6c\x69\x64\x20\x72\x6d\x6e\x65\x74\x20\x63\x6f\x6e\x66\x69\x67\x75\x72\x61\x74\x69\x6f\x6e\x20\x6f\x6e\x20\x25\x73" "\n"
+,__func__,DATARMNET00dcb79bc4->name);goto DATARMNETaabe3a05f8;}pr_info(
+"\x25\x73\x28\x29\x3a\x20\x49\x6e\x69\x74\x69\x61\x6c\x69\x7a\x69\x6e\x67\x20\x6f\x6e\x20\x64\x65\x76\x69\x63\x65\x20\x25\x73" "\n"
+,__func__,DATARMNET00dcb79bc4->name);DATARMNETb14e52a504=DATARMNET9f53d54812(
+DATARMNETf0d9de7e2f);if(DATARMNETb14e52a504==DATARMNETb881657565){pr_err(
+"\x25\x73\x28\x29\x3a\x20\x49\x6e\x69\x74\x69\x61\x6c\x69\x7a\x61\x74\x69\x6f\x6e\x20\x66\x61\x69\x6c\x65\x64" "\n"
+,__func__);goto DATARMNETaabe3a05f8;}break;case NETDEV_UNREGISTER:if(!
+DATARMNETe05748b000)goto DATARMNETaabe3a05f8;if(--DATARMNETe05748b000->
+DATARMNETcb2b3ae8e4)goto DATARMNETaabe3a05f8;pr_info(
+"\x25\x73\x28\x29\x3a\x20\x55\x6e\x69\x6e\x69\x74\x69\x61\x6c\x69\x7a\x69\x6e\x67\x20\x6f\x6e\x20\x64\x65\x76\x69\x63\x65\x20\x25\x73" "\n"
+,__func__,DATARMNET00dcb79bc4->name);DATARMNET345f805b34();break;}
+DATARMNETaabe3a05f8:return NOTIFY_DONE;}static struct notifier_block 
+DATARMNETcae9c64c41={.notifier_call=DATARMNET7dec24813e,.priority=
+(0xd26+209-0xdf6),};static int __init DATARMNETb1c42acd9c(void){pr_info(
+"\x25\x73\x28\x29\x3a\x20\x72\x6d\x6e\x65\x74\x5f\x6f\x66\x66\x6c\x6f\x61\x64\x20\x69\x6e\x69\x74\x69\x61\x6c\x69\x7a\x69\x6e\x67" "\n"
+,__func__);return register_netdevice_notifier(&DATARMNETcae9c64c41);}static void
+ __exit DATARMNET0f6d85e415(void){pr_info(
+"\x25\x73\x28\x29\x3a\x20\x72\x6d\x6e\x65\x74\x5f\x6f\x66\x66\x6c\x6f\x61\x64\x20\x65\x78\x69\x74\x69\x6e\x67" "\n"
+,__func__);unregister_netdevice_notifier(&DATARMNETcae9c64c41);}struct 
+DATARMNET70f3b87b5d*DATARMNETc2a630b113(void){return DATARMNETe05748b000;}
+module_init(DATARMNETb1c42acd9c);module_exit(DATARMNET0f6d85e415);

+ 30 - 0
qcom/opensource/datarmnet-ext/offload/rmnet_offload_state.h

@@ -0,0 +1,30 @@
+/* Copyright (c) 2013-2014, 2016-2017, 2019-2020 The Linux Foundation. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 and
+ * only version 2 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ */
+
+#ifndef DATARMNETc03e325706
+#define DATARMNETc03e325706
+#include "rmnet_offload_engine.h"
+#include "rmnet_map.h"
+#include "rmnet_descriptor.h"
+#include "qmi_rmnet.h"
+enum{DATARMNET0529bb9c4e,DATARMNET8e1c5c09f8,DATARMNETb881657565,};extern void(*
+rmnet_perf_desc_entry)(struct rmnet_frag_descriptor*DATARMNET9d1b321642,struct 
+rmnet_port*DATARMNETf0d9de7e2f);extern void(*rmnet_perf_chain_end)(void);struct 
+DATARMNET74bb35b8f2{struct rmnet_map_dl_ind DATARMNET8633ae8f1e;u32 
+DATARMNETe2251ce433;u32 DATARMNET7f59b108db;bool DATARMNETc2832b8f85;bool 
+DATARMNETb165d2c5c4;};struct DATARMNET70f3b87b5d{struct rmnet_port*
+DATARMNET403589239f;struct DATARMNET74bb35b8f2 DATARMNETa9f2b2f677;struct 
+qmi_rmnet_ps_ind DATARMNET341393eda2;struct DATARMNET907d58c807 
+DATARMNETebb45c8d86;u8 DATARMNETcb2b3ae8e4;};struct DATARMNET70f3b87b5d*
+DATARMNETc2a630b113(void);
+#endif
+

+ 20 - 0
qcom/opensource/datarmnet-ext/offload/rmnet_offload_stats.c

@@ -0,0 +1,20 @@
+/* Copyright (c) 2018-2020, The Linux Foundation. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 and
+ * only version 2 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ */
+
+#include <linux/moduleparam.h>
+#include "rmnet_offload_stats.h"
+static u64 DATARMNET6c78aba0c8[DATARMNETd04f96aa13];module_param_array_named(
+rmnet_offload_stat,DATARMNET6c78aba0c8,ullong,NULL,(0xcb7+5769-0x221c));void 
+DATARMNETbad3b5165e(u32 DATARMNET248f120dd5,u64 DATARMNETb639f6e1b1){if(
+DATARMNET248f120dd5<DATARMNETd04f96aa13)DATARMNET6c78aba0c8[DATARMNET248f120dd5]
++=DATARMNETb639f6e1b1;}void DATARMNETa00cda79d0(u32 DATARMNET248f120dd5){
+DATARMNETbad3b5165e(DATARMNET248f120dd5,(0xd26+209-0xdf6));}

+ 27 - 0
qcom/opensource/datarmnet-ext/offload/rmnet_offload_stats.h

@@ -0,0 +1,27 @@
+/* Copyright (c) 2018-2020, The Linux Foundation. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 and
+ * only version 2 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ */
+
+#ifndef DATARMNETbc7bfad32a
+#define DATARMNETbc7bfad32a
+#include <linux/types.h>
+enum{DATARMNET9b3fdb0e16,DATARMNET65843ad009,DATARMNET1cddffce49,
+DATARMNET372ef39ae4,DATARMNET30a4d88ea6,DATARMNETa03ed3629e,DATARMNET807e4dad18,
+DATARMNET52b7da9033,DATARMNETf3f92fc0b9,DATARMNET5727f095ec,DATARMNET6a894ab63d,
+DATARMNETddf572458d,DATARMNET47a963957c,DATARMNETb322de38be,DATARMNET38317c7efd,
+DATARMNET31c0e41f5a,DATARMNET0cd1fa0d98,DATARMNET1c0d243816,DATARMNETc34a778ea2,
+DATARMNETbc56977b7e,DATARMNETc9b8ef90d1,DATARMNET92f3434694,DATARMNETa76d93355c,
+DATARMNET3067ea3199,DATARMNETf335e26298,DATARMNET8e1480cff2,DATARMNET787b04223a,
+DATARMNETa121404606,DATARMNETd04f96aa13,};void DATARMNETbad3b5165e(u32 
+DATARMNET248f120dd5,u64 DATARMNETb639f6e1b1);void DATARMNETa00cda79d0(u32 
+DATARMNET248f120dd5);
+#endif
+

+ 83 - 0
qcom/opensource/datarmnet-ext/offload/rmnet_offload_tcp.c

@@ -0,0 +1,83 @@
+/* Copyright (c) 2018-2021, The Linux Foundation. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 and
+ * only version 2 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ */
+
+#include <linux/list.h>
+#include "rmnet_descriptor.h"
+#include "rmnet_offload_main.h"
+#include "rmnet_offload_engine.h"
+#include "rmnet_offload_stats.h"
+#include "rmnet_offload_knob.h"
+union DATARMNETe0a7777e12{struct DATARMNETd2991e8952 DATARMNETe31a04a369;u8 
+DATARMNET021aa8e68d[(0xf07+1090-0x130d)];};static bool DATARMNET2818ea93ec(
+struct DATARMNETd812bcdbb5*DATARMNET5fe4c722a8){struct DATARMNETd2991e8952*
+DATARMNET2e7cc88971,DATARMNETd1ff6cd568;__be32 DATARMNETa8eeab014d;u8 
+DATARMNETfb0677cc3c;DATARMNET2e7cc88971=rmnet_frag_header_ptr(
+DATARMNET5fe4c722a8->DATARMNET719f68fb88,DATARMNET5fe4c722a8->
+DATARMNET144d119066.DATARMNET4ca5ac9de1,sizeof(*DATARMNET2e7cc88971),&
+DATARMNETd1ff6cd568);if(!DATARMNET2e7cc88971)return true;DATARMNETa8eeab014d=
+(0xbf7+4796-0x1e04);DATARMNETfb0677cc3c=DATARMNET2e7cc88971->DATARMNETd570802f3d
+;if(DATARMNET5fe4c722a8->DATARMNET719f68fb88->tcp_flags_set)DATARMNETfb0677cc3c=
+(u8)ntohs(DATARMNET5fe4c722a8->DATARMNET719f68fb88->tcp_flags);if((!
+DATARMNET5fe4c722a8->DATARMNET1ef22e4c76&&(DATARMNETfb0677cc3c&
+(0xeb7+1158-0x132d)))||(DATARMNETfb0677cc3c&DATARMNETa8eeab014d))return true;
+return false;}static bool DATARMNET829fcf5939(struct DATARMNETd7c9631acd*
+DATARMNETaa568481cf,struct DATARMNETd812bcdbb5*DATARMNET5fe4c722a8){union 
+DATARMNETe0a7777e12*DATARMNET699c2c62cd,DATARMNETee66845de4;union 
+DATARMNETe0a7777e12*DATARMNET8814564ab9,DATARMNETa27d4d22be;struct 
+rmnet_frag_descriptor*DATARMNET48cfce4de4;u32 DATARMNET3c3abe9e2c,
+DATARMNETefc9df3df2;DATARMNET48cfce4de4=list_first_entry(&DATARMNETaa568481cf->
+DATARMNETb76b79d0d5,struct rmnet_frag_descriptor,list);DATARMNET699c2c62cd=
+rmnet_frag_header_ptr(DATARMNET48cfce4de4,DATARMNETaa568481cf->
+DATARMNET78fd20ce0e.DATARMNET4ca5ac9de1,DATARMNETaa568481cf->DATARMNET78fd20ce0e
+.DATARMNET0aeee57ceb,&DATARMNETee66845de4);if(!DATARMNET699c2c62cd)return true;
+DATARMNET8814564ab9=rmnet_frag_header_ptr(DATARMNET5fe4c722a8->
+DATARMNET719f68fb88,DATARMNET5fe4c722a8->DATARMNET144d119066.DATARMNET4ca5ac9de1
+,DATARMNET5fe4c722a8->DATARMNET144d119066.DATARMNET0aeee57ceb,&
+DATARMNETa27d4d22be);if(!DATARMNET8814564ab9)return true;DATARMNET3c3abe9e2c=
+DATARMNET699c2c62cd->DATARMNETe31a04a369.DATARMNETcf2e43ad69*(0xd11+230-0xdf3);
+if(DATARMNET8814564ab9->DATARMNETe31a04a369.DATARMNETcf2e43ad69*
+(0xd11+230-0xdf3)!=DATARMNET3c3abe9e2c)return true;for(DATARMNETefc9df3df2=
+sizeof(DATARMNET699c2c62cd->DATARMNETe31a04a369);DATARMNETefc9df3df2<
+DATARMNET3c3abe9e2c;DATARMNETefc9df3df2+=(0xd11+230-0xdf3)){if(*(u32*)(
+DATARMNET699c2c62cd->DATARMNET021aa8e68d+DATARMNETefc9df3df2)^*(u32*)(
+DATARMNET8814564ab9->DATARMNET021aa8e68d+DATARMNETefc9df3df2))return true;}
+return false;}static int DATARMNET9a13d70865(struct DATARMNETd7c9631acd*
+DATARMNETaa568481cf,struct DATARMNETd812bcdbb5*DATARMNET5fe4c722a8){u64 
+DATARMNET7457d496cb;u32 DATARMNET95acece3fc;if(DATARMNET2818ea93ec(
+DATARMNET5fe4c722a8)){DATARMNETa00cda79d0(DATARMNETb322de38be);return 
+DATARMNET7af645849a;}if(!DATARMNETaa568481cf->DATARMNET1db11fa85e)return 
+DATARMNET0413b43080;if(DATARMNET829fcf5939(DATARMNETaa568481cf,
+DATARMNET5fe4c722a8)){DATARMNETa00cda79d0(DATARMNET38317c7efd);return 
+DATARMNETb0bd5db24d;}if(DATARMNET5fe4c722a8->DATARMNET144d119066.
+DATARMNETbc28a5970f^DATARMNETaa568481cf->DATARMNET78fd20ce0e.DATARMNETbc28a5970f
+){DATARMNETa00cda79d0(DATARMNET31c0e41f5a);return DATARMNET7af645849a;}
+DATARMNET95acece3fc=(DATARMNET5fe4c722a8->DATARMNET719f68fb88->gso_size)?:
+DATARMNET5fe4c722a8->DATARMNET1ef22e4c76;if(DATARMNET95acece3fc!=
+DATARMNETaa568481cf->DATARMNET1978d5d8de){DATARMNETa00cda79d0(
+DATARMNET0cd1fa0d98);return DATARMNETb0bd5db24d;}DATARMNET7457d496cb=
+DATARMNETf1d1b8287f(DATARMNETdf66588a73);if(DATARMNET5fe4c722a8->
+DATARMNET1ef22e4c76+DATARMNETaa568481cf->DATARMNETcf28ae376b>=
+DATARMNET7457d496cb){DATARMNETa00cda79d0(DATARMNET1c0d243816);return 
+DATARMNETb0bd5db24d;}DATARMNET5fe4c722a8->DATARMNETf1b6b0a6cc=false;return 
+DATARMNET0413b43080;}bool DATARMNET4c7cdc25b7(struct DATARMNETd7c9631acd*
+DATARMNETaa568481cf,struct DATARMNETd812bcdbb5*DATARMNET5fe4c722a8,bool 
+DATARMNETd87669e323,struct list_head*DATARMNET6f9bfa17e6){int 
+DATARMNETb14e52a504;if(DATARMNETd87669e323){DATARMNETa00cda79d0(
+DATARMNET47a963957c);DATARMNETa3055c21f2(DATARMNETaa568481cf,DATARMNET6f9bfa17e6
+);DATARMNET19d190f2bd(DATARMNET5fe4c722a8,DATARMNET6f9bfa17e6);return true;}
+DATARMNETb14e52a504=DATARMNET9a13d70865(DATARMNETaa568481cf,DATARMNET5fe4c722a8)
+;if(DATARMNETb14e52a504==DATARMNET0413b43080){DATARMNET33aa5df9ef(
+DATARMNETaa568481cf,DATARMNET5fe4c722a8);}else if(DATARMNETb14e52a504==
+DATARMNETb0bd5db24d){DATARMNETa3055c21f2(DATARMNETaa568481cf,DATARMNET6f9bfa17e6
+);DATARMNET33aa5df9ef(DATARMNETaa568481cf,DATARMNET5fe4c722a8);}else{
+DATARMNETa3055c21f2(DATARMNETaa568481cf,DATARMNET6f9bfa17e6);DATARMNET19d190f2bd
+(DATARMNET5fe4c722a8,DATARMNET6f9bfa17e6);}return true;}

+ 21 - 0
qcom/opensource/datarmnet-ext/offload/rmnet_offload_tcp.h

@@ -0,0 +1,21 @@
+/* Copyright (c) 2018-2021, The Linux Foundation. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 and
+ * only version 2 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ */
+
+#ifndef DATARMNET1f0bf20b47
+#define DATARMNET1f0bf20b47
+#include "rmnet_offload_main.h"
+#include "rmnet_offload_engine.h"
+bool DATARMNET4c7cdc25b7(struct DATARMNETd7c9631acd*DATARMNETaa568481cf,struct 
+DATARMNETd812bcdbb5*DATARMNET5fe4c722a8,bool DATARMNETd87669e323,struct 
+list_head*DATARMNET6f9bfa17e6);
+#endif
+

+ 40 - 0
qcom/opensource/datarmnet-ext/offload/rmnet_offload_udp.c

@@ -0,0 +1,40 @@
+/* Copyright (c) 2018-2021, The Linux Foundation. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 and
+ * only version 2 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ */
+
+#include "rmnet_descriptor.h"
+#include "rmnet_offload_main.h"
+#include "rmnet_offload_engine.h"
+#include "rmnet_offload_stats.h"
+#include "rmnet_offload_knob.h"
+static int DATARMNETdf8e0dc3a0(struct DATARMNETd7c9631acd*DATARMNETaa568481cf,
+struct DATARMNETd812bcdbb5*DATARMNET5fe4c722a8){u64 DATARMNET71c7d18d88;u16 
+DATARMNET95acece3fc;if(!DATARMNETaa568481cf->DATARMNET1db11fa85e)return 
+DATARMNET0413b43080;DATARMNET95acece3fc=(DATARMNET5fe4c722a8->
+DATARMNET719f68fb88->gso_size)?:DATARMNET5fe4c722a8->DATARMNET1ef22e4c76;if(
+DATARMNET95acece3fc!=DATARMNETaa568481cf->DATARMNET1978d5d8de){
+DATARMNETa00cda79d0(DATARMNETbc56977b7e);return DATARMNETb0bd5db24d;}
+DATARMNET71c7d18d88=DATARMNETf1d1b8287f(DATARMNET9c85bb95a3);if(
+DATARMNET5fe4c722a8->DATARMNET1ef22e4c76+DATARMNETaa568481cf->
+DATARMNETcf28ae376b>=DATARMNET71c7d18d88){DATARMNETa00cda79d0(
+DATARMNETc9b8ef90d1);return DATARMNETb0bd5db24d;}DATARMNET5fe4c722a8->
+DATARMNETf1b6b0a6cc=false;return DATARMNET0413b43080;}bool DATARMNET8dc47eb7af(
+struct DATARMNETd7c9631acd*DATARMNETaa568481cf,struct DATARMNETd812bcdbb5*
+DATARMNET5fe4c722a8,bool DATARMNETd87669e323,struct list_head*
+DATARMNET6f9bfa17e6){int DATARMNETb14e52a504;if(DATARMNETd87669e323){
+DATARMNETa00cda79d0(DATARMNETc34a778ea2);DATARMNETa3055c21f2(DATARMNETaa568481cf
+,DATARMNET6f9bfa17e6);DATARMNET19d190f2bd(DATARMNET5fe4c722a8,
+DATARMNET6f9bfa17e6);return true;}DATARMNETb14e52a504=DATARMNETdf8e0dc3a0(
+DATARMNETaa568481cf,DATARMNET5fe4c722a8);if(DATARMNETb14e52a504==
+DATARMNET0413b43080){DATARMNET33aa5df9ef(DATARMNETaa568481cf,DATARMNET5fe4c722a8
+);}else if(DATARMNETb14e52a504==DATARMNETb0bd5db24d){DATARMNETa3055c21f2(
+DATARMNETaa568481cf,DATARMNET6f9bfa17e6);DATARMNET33aa5df9ef(DATARMNETaa568481cf
+,DATARMNET5fe4c722a8);}return true;}

+ 21 - 0
qcom/opensource/datarmnet-ext/offload/rmnet_offload_udp.h

@@ -0,0 +1,21 @@
+/* Copyright (c) 2018-2021, The Linux Foundation. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 and
+ * only version 2 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ */
+
+#ifndef DATARMNETd4ae2cf0b5
+#define DATARMNETd4ae2cf0b5
+#include "rmnet_offload_main.h"
+#include "rmnet_offload_engine.h"
+bool DATARMNET8dc47eb7af(struct DATARMNETd7c9631acd*DATARMNETaa568481cf,struct 
+DATARMNETd812bcdbb5*DATARMNET5fe4c722a8,bool DATARMNETd87669e323,struct 
+list_head*DATARMNET6f9bfa17e6);
+#endif
+

+ 59 - 0
qcom/opensource/datarmnet-ext/perf/Android.mk

@@ -0,0 +1,59 @@
+ifeq ($(TARGET_DATARMNET_EXT_ENABLE), true)
+ifneq ($(TARGET_BOARD_AUTO),true)
+ifneq ($(TARGET_BOARD_PLATFORM),qssi)
+
+RMNET_PERF_DLKM_PLATFORMS_LIST := pineapple
+RMNET_PERF_DLKM_PLATFORMS_LIST += blair
+RMNET_PERF_DLKM_PLATFORMS_LIST += pitti
+RMNET_PERF_DLKM_PLATFORMS_LIST += volcano
+
+ifeq ($(call is-board-platform-in-list, $(RMNET_PERF_DLKM_PLATFORMS_LIST)),true)
+LOCAL_PATH := $(call my-dir)
+include $(CLEAR_VARS)
+
+#Enabling BAZEL
+LOCAL_MODULE_DDK_BUILD := true
+
+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
+endif #End of Check for datarmnet

+ 18 - 0
qcom/opensource/datarmnet-ext/perf/BUILD.bazel

@@ -0,0 +1,18 @@
+load(":define_perf.bzl", "define_perf")
+load("//build/kernel/kleaf:kernel.bzl", "ddk_module")
+
+define_perf("pineapple", "consolidate")
+
+define_perf("pineapple", "gki")
+
+define_perf("blair", "consolidate")
+
+define_perf("blair", "gki")
+
+define_perf("pitti", "consolidate")
+
+define_perf("pitti", "gki")
+
+define_perf("volcano", "consolidate")
+
+define_perf("volcano", "gki")

+ 7 - 0
qcom/opensource/datarmnet-ext/perf/Kbuild

@@ -0,0 +1,7 @@
+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 \
+		rmnet_perf_tcp.o \
+		rmnet_perf_udp.o

+ 11 - 0
qcom/opensource/datarmnet-ext/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

+ 17 - 0
qcom/opensource/datarmnet-ext/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

+ 37 - 0
qcom/opensource/datarmnet-ext/perf/define_perf.bzl

@@ -0,0 +1,37 @@
+load("//build/bazel_common_rules/dist:dist.bzl", "copy_to_dist_dir")
+load("//build/kernel/kleaf:kernel.bzl", "ddk_module")
+
+def define_perf(target, variant):
+    kernel_build_variant = "{}_{}".format(target, variant)
+    include_base = "../../../{}".format(native.package_name())
+
+    ddk_module(
+        name = "{}_perf".format(kernel_build_variant),
+        out = "rmnet_perf.ko",
+        srcs = [
+            "rmnet_perf_main.c",
+            "rmnet_perf_tcp.c",
+            "rmnet_perf_tcp.h",
+            "rmnet_perf_udp.c",
+            "rmnet_perf_udp.h",
+        ],
+        kernel_build = "//msm-kernel:{}".format(kernel_build_variant),
+        deps = [
+            "//msm-kernel:all_headers",
+            "//vendor/qcom/opensource/datarmnet:{}_rmnet_core".format(kernel_build_variant),
+            "//vendor/qcom/opensource/datarmnet:rmnet_core_headers",
+        ],
+        copts = ["-Wno-misleading-indentation"],
+    )
+
+    copy_to_dist_dir(
+        name = "{}_datarment-ext_dist".format(kernel_build_variant),
+        data = [
+            ":{}_perf".format(kernel_build_variant),
+        ],
+        dist_dir = "out/target/product/{}/dlkm/lib/modules/".format(target),
+        flat = True,
+        wipe_dist_dir = False,
+        allow_duplicate_filenames = False,
+        mode_overrides = {"**/*": "644"},
+    )

+ 135 - 0
qcom/opensource/datarmnet-ext/perf/rmnet_perf_main.c

@@ -0,0 +1,135 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/* Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
+ *
+ * RMNET PERF framework
+ *
+ */
+
+#include <linux/module.h>
+#include <linux/skbuff.h>
+#include <linux/in.h>
+#include <linux/udp.h>
+#include <linux/ip.h>
+#include <linux/ipv6.h>
+#include <net/ip.h>
+#include <net/ipv6.h>
+#include "rmnet_module.h"
+#include <net/ipv6.h>
+#include <net/ip.h>
+#include "rmnet_perf_tcp.h"
+#include "rmnet_perf_udp.h"
+MODULE_LICENSE("\x47\x50\x4c\x20\x76\x32");static char*verinfo[]={
+"\x38\x61\x62\x30\x61\x38\x65\x65","\x66\x32\x32\x62\x61\x63\x65\x30",
+"\x63\x63\x39\x38\x66\x30\x38\x61","\x63\x65\x37\x39\x33\x32\x31\x63",
+"\x35\x64\x63\x64\x64\x34\x63\x30","\x34\x63\x39\x62\x35\x33\x33\x37",
+"\x61\x33\x62\x61\x62\x64\x34\x30","\x37\x66\x30\x37\x38\x66\x39\x36",
+"\x65\x35\x36\x63\x62\x35\x35\x64","\x65\x32\x31\x38\x66\x34\x35\x31",
+"\x33\x39\x63\x62\x64\x37\x64\x35","\x37\x34\x31\x35\x39\x32\x31\x63",
+"\x34\x64\x65\x34\x39\x64\x62\x35","\x62\x31\x63\x34\x34\x62\x34\x63"};
+module_param_array(verinfo,charp,NULL,(0xcb7+5769-0x221c));MODULE_PARM_DESC(
+verinfo,
+"\x56\x65\x72\x73\x69\x6f\x6e\x20\x6f\x66\x20\x74\x68\x65\x20\x64\x72\x69\x76\x65\x72"
+);bool DATARMNETc03b668e4c=true;module_param_named(rmnet_perf_knob0,
+DATARMNETc03b668e4c,bool,(0xdb7+6665-0x261c));static bool DATARMNET21c7a3c377=
+true;module_param_named(rmnet_perf_knob1,DATARMNET21c7a3c377,bool,
+(0xdb7+6665-0x261c));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,int DATARMNET611d08d671){u8*
+DATARMNET352416e828,DATARMNETd9bda61912;struct udphdr*DATARMNETa1abb4897c,
+DATARMNET7b1af10647;DATARMNETa1abb4897c=skb_header_pointer(DATARMNET543491eb0f,
+DATARMNET611d08d671,sizeof(*DATARMNETa1abb4897c),&DATARMNET7b1af10647);if(!
+DATARMNETa1abb4897c||!DATARMNETe1ef3edea2(DATARMNETa1abb4897c))return false;if(
+be16_to_cpu(DATARMNETa1abb4897c->len)<sizeof(struct udphdr)+(0xd26+209-0xdf6))
+return false;DATARMNET352416e828=skb_header_pointer(DATARMNET543491eb0f,
+DATARMNET611d08d671+sizeof(struct udphdr),(0xd26+209-0xdf6),&DATARMNETd9bda61912
+);if(!DATARMNET352416e828)return false;return((*DATARMNET352416e828)&
+(0xbf7+4869-0x1e3c))==(0xbf7+4869-0x1e3c);}static int DATARMNETee9214ce9b(struct
+ sk_buff*DATARMNET543491eb0f,int DATARMNET611d08d671){if(DATARMNET77ab42949f(
+DATARMNET543491eb0f,DATARMNET611d08d671)){DATARMNET543491eb0f->hash=
+(0xd2d+202-0xdf7);DATARMNET543491eb0f->sw_hash=(0xd26+209-0xdf6);return
+(0xd2d+202-0xdf7);}return-EINVAL;}int DATARMNETf2958615b1(struct sk_buff*
+DATARMNET543491eb0f){if(DATARMNET543491eb0f->protocol==htons(ETH_P_IP)){struct 
+iphdr*DATARMNET86f1f2cdc9,DATARMNETbf6548198e;DATARMNET86f1f2cdc9=
+skb_header_pointer(DATARMNET543491eb0f,(0xd2d+202-0xdf7),sizeof(*
+DATARMNET86f1f2cdc9),&DATARMNETbf6548198e);if(!DATARMNET86f1f2cdc9||
+ip_is_fragment(DATARMNET86f1f2cdc9))return-EINVAL;if(DATARMNET86f1f2cdc9->
+protocol==IPPROTO_UDP){if(DATARMNET21c7a3c377)DATARMNET2a6d02a6a5(
+DATARMNET543491eb0f);return DATARMNETee9214ce9b(DATARMNET543491eb0f,
+DATARMNET86f1f2cdc9->ihl*(0xd11+230-0xdf3));}if(DATARMNET86f1f2cdc9->protocol==
+IPPROTO_TCP){if(DATARMNETc03b668e4c)DATARMNET9250714999(DATARMNET543491eb0f);
+return-EINVAL;}}else if(DATARMNET543491eb0f->protocol==htons(ETH_P_IPV6)){struct
+ ipv6hdr*DATARMNETbf55123e5b,DATARMNETcf1d9e2c1e;int DATARMNET611d08d671;__be16 
+DATARMNET98fed39916;u8 DATARMNET65293f17c4;DATARMNETbf55123e5b=
+skb_header_pointer(DATARMNET543491eb0f,(0xd2d+202-0xdf7),sizeof(*
+DATARMNETbf55123e5b),&DATARMNETcf1d9e2c1e);if(!DATARMNETbf55123e5b)return-EINVAL
+;DATARMNET65293f17c4=DATARMNETbf55123e5b->nexthdr;DATARMNET611d08d671=
+ipv6_skip_exthdr(DATARMNET543491eb0f,sizeof(*DATARMNETbf55123e5b),&
+DATARMNET65293f17c4,&DATARMNET98fed39916);if(DATARMNET611d08d671<
+(0xd2d+202-0xdf7)||DATARMNET98fed39916)return-EINVAL;if(DATARMNET65293f17c4==
+IPPROTO_UDP){if(DATARMNET21c7a3c377)DATARMNET2a6d02a6a5(DATARMNET543491eb0f);
+return DATARMNETee9214ce9b(DATARMNET543491eb0f,DATARMNET611d08d671);}if(
+DATARMNET65293f17c4==IPPROTO_TCP){if(DATARMNETc03b668e4c)DATARMNET9250714999(
+DATARMNET543491eb0f);return-EINVAL;}}return-EINVAL;}void DATARMNET7b0253229f(
+struct sk_buff*DATARMNET543491eb0f){if(DATARMNET543491eb0f->protocol==htons(
+ETH_P_IP)){struct iphdr*DATARMNET86f1f2cdc9,DATARMNETbf6548198e;
+DATARMNET86f1f2cdc9=skb_header_pointer(DATARMNET543491eb0f,(0xd2d+202-0xdf7),
+sizeof(*DATARMNET86f1f2cdc9),&DATARMNETbf6548198e);if(!DATARMNET86f1f2cdc9||
+ip_is_fragment(DATARMNET86f1f2cdc9))return;if(DATARMNET86f1f2cdc9->protocol==
+IPPROTO_TCP){if(DATARMNETc03b668e4c)DATARMNETd8fdde8978(DATARMNET543491eb0f);}}
+else if(DATARMNET543491eb0f->protocol==htons(ETH_P_IPV6)){struct ipv6hdr*
+DATARMNETbf55123e5b,DATARMNETcf1d9e2c1e;int DATARMNET611d08d671;__be16 
+DATARMNET98fed39916;u8 DATARMNET65293f17c4;DATARMNETbf55123e5b=
+skb_header_pointer(DATARMNET543491eb0f,(0xd2d+202-0xdf7),sizeof(*
+DATARMNETbf55123e5b),&DATARMNETcf1d9e2c1e);if(!DATARMNETbf55123e5b)return;
+DATARMNET65293f17c4=DATARMNETbf55123e5b->nexthdr;DATARMNET611d08d671=
+ipv6_skip_exthdr(DATARMNET543491eb0f,sizeof(*DATARMNETbf55123e5b),&
+DATARMNET65293f17c4,&DATARMNET98fed39916);if(DATARMNET611d08d671<
+(0xd2d+202-0xdf7)||DATARMNET98fed39916)return;if(DATARMNET65293f17c4==
+IPPROTO_TCP){if(DATARMNETc03b668e4c)DATARMNETd8fdde8978(DATARMNET543491eb0f);}}}
+static void DATARMNET05c4bf8af9(struct sk_buff*DATARMNET543491eb0f,int 
+DATARMNET611d08d671){if(DATARMNET77ab42949f(DATARMNET543491eb0f,
+DATARMNET611d08d671))DATARMNET543491eb0f->priority=14286874;}void 
+DATARMNET324fe25dad(struct sk_buff*DATARMNET543491eb0f){if(DATARMNET543491eb0f->
+protocol==htons(ETH_P_IP)){struct iphdr*DATARMNET86f1f2cdc9,DATARMNETbf6548198e;
+DATARMNET86f1f2cdc9=skb_header_pointer(DATARMNET543491eb0f,(0xd2d+202-0xdf7),
+sizeof(*DATARMNET86f1f2cdc9),&DATARMNETbf6548198e);if(!DATARMNET86f1f2cdc9||
+ip_is_fragment(DATARMNET86f1f2cdc9))return;if(DATARMNET86f1f2cdc9->protocol==
+IPPROTO_UDP){if(DATARMNET21c7a3c377)DATARMNET5ecc30669c(DATARMNET543491eb0f);
+DATARMNET05c4bf8af9(DATARMNET543491eb0f,DATARMNET86f1f2cdc9->ihl*
+(0xd11+230-0xdf3));return;}if(DATARMNET86f1f2cdc9->protocol==IPPROTO_TCP){if(
+DATARMNETc03b668e4c)DATARMNET9d574e64b1(DATARMNET543491eb0f);return;}}else if(
+DATARMNET543491eb0f->protocol==htons(ETH_P_IPV6)){struct ipv6hdr*
+DATARMNETbf55123e5b,DATARMNETcf1d9e2c1e;int DATARMNET611d08d671;__be16 
+DATARMNET98fed39916;u8 DATARMNET65293f17c4;DATARMNETbf55123e5b=
+skb_header_pointer(DATARMNET543491eb0f,(0xd2d+202-0xdf7),sizeof(*
+DATARMNETbf55123e5b),&DATARMNETcf1d9e2c1e);if(!DATARMNETbf55123e5b)return;
+DATARMNET65293f17c4=DATARMNETbf55123e5b->nexthdr;DATARMNET611d08d671=
+ipv6_skip_exthdr(DATARMNET543491eb0f,sizeof(*DATARMNETbf55123e5b),&
+DATARMNET65293f17c4,&DATARMNET98fed39916);if(DATARMNET611d08d671<
+(0xd2d+202-0xdf7)||DATARMNET98fed39916)return;if(DATARMNET65293f17c4==
+IPPROTO_UDP){if(DATARMNET21c7a3c377)DATARMNET5ecc30669c(DATARMNET543491eb0f);
+DATARMNET05c4bf8af9(DATARMNET543491eb0f,DATARMNET611d08d671);return;}if(
+DATARMNET65293f17c4==IPPROTO_TCP){if(DATARMNETc03b668e4c)DATARMNET9d574e64b1(
+DATARMNET543491eb0f);return;}}}static const struct 
+rmnet_module_hook_register_info DATARMNET95a71e03c1[]={{.hooknum=
+RMNET_MODULE_HOOK_PERF_INGRESS,.func=DATARMNETf2958615b1,},{.hooknum=
+RMNET_MODULE_HOOK_PERF_EGRESS,.func=DATARMNET324fe25dad,},{.hooknum=
+RMNET_MODULE_HOOK_PERF_SET_THRESH,.func=DATARMNET7fa1835595,},{.hooknum=
+RMNET_MODULE_HOOK_PERF_INGRESS_RX_HANDLER,.func=DATARMNET7b0253229f,},};void 
+DATARMNET49c17a32bc(void){rcu_assign_pointer(rmnet_perf_egress_hook1,
+DATARMNET324fe25dad);rmnet_module_hook_register(DATARMNET95a71e03c1,ARRAY_SIZE(
+DATARMNET95a71e03c1));}void DATARMNET41e8cc085c(void){rcu_assign_pointer(
+rmnet_perf_egress_hook1,NULL);rmnet_module_hook_unregister(DATARMNET95a71e03c1,
+ARRAY_SIZE(DATARMNET95a71e03c1));}static int __init DATARMNET63abbdc3d3(void){
+int DATARMNETb14e52a504;pr_info("%s(): Loading\n",__func__);DATARMNETb14e52a504=
+DATARMNET7e9995246e();if(DATARMNETb14e52a504)return DATARMNETb14e52a504;
+DATARMNETb14e52a504=DATARMNETe80a33d544();if(DATARMNETb14e52a504){
+DATARMNET38bb6f2b7a();return DATARMNETb14e52a504;}DATARMNET49c17a32bc();return
+(0xd2d+202-0xdf7);}static void __exit DATARMNETa343229e33(void){
+DATARMNET41e8cc085c();DATARMNET4b5170a1ef();DATARMNET38bb6f2b7a();pr_info(
+"\x25\x73\x28\x29\x3a\x20\x65\x78\x69\x74\x69\x6e\x67" "\n",__func__);}
+module_init(DATARMNET63abbdc3d3);module_exit(DATARMNETa343229e33);

+ 252 - 0
qcom/opensource/datarmnet-ext/perf/rmnet_perf_tcp.c

@@ -0,0 +1,252 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/* Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
+ *
+ * RMNET PERF TCP framework
+ *
+ */
+
+#include <linux/types.h>
+#include <linux/module.h>
+#include <linux/moduleparam.h>
+#include <linux/skbuff.h>
+#include <linux/spinlock.h>
+#include <linux/rcupdate.h>
+#include <linux/hashtable.h>
+#include <linux/log2.h>
+#include <linux/workqueue.h>
+#include <net/ip.h>
+#include <net/inet_hashtables.h>
+#include <net/ipv6.h>
+#include <net/inet6_hashtables.h>
+#include <net/tcp.h>
+#include <net/sock.h>
+#include "rmnet_private.h"
+#include "rmnet_perf_tcp.h"
+#define DATARMNET3dad3dfdc0 ((0x16a8+1565-0x14f5))
+#define DATARMNETe6309522cf ((0xdf7+6169-0x241c))
+#define DATARMNET99a2e6e390 (192000)
+#define DATARMNET714c9c3081 ((0xeb7+1158-0x132d))
+#define DATARMNET347bd5eb15 \
+	(const_ilog2(DATARMNET714c9c3081))
+enum{DATARMNETe0e37fef7a,DATARMNETf354672897,DATARMNET9cc765a89e,
+DATARMNETb03f9571a3,DATARMNET53c8cfb28e,DATARMNET74f0a28fec,DATARMNETaa18c75b61,
+};struct DATARMNET4b40fe9cd4{union{__be32 DATARMNETdfe430c2d6;struct in6_addr 
+DATARMNET815cbb4bf5;};union{__be32 DATARMNET2cb607d686;struct in6_addr 
+DATARMNETc3f31215b7;};union{struct{__be16 DATARMNET08e913477e;__be16 
+DATARMNETda7f7fa492;};u32 DATARMNET556bcfcf8f;};u8 DATARMNET0d956cc77a;};struct 
+DATARMNETddbc1e5435{struct hlist_node hash;struct rcu_head DATARMNET28bfe9e6ad;
+struct DATARMNET4b40fe9cd4 DATARMNET54338da2ff;unsigned long DATARMNET763f2e5fac
+;u32 DATARMNETfef3675ce7;u32 DATARMNET9076d335ab;u32 DATARMNET9c389f3b86;u32 
+DATARMNET9a57846b4e;u32 DATARMNETb8fc35ed64;bool DATARMNET55056146f6;u8 
+DATARMNET1717afebc7;};struct DATARMNET74cfea3d20{struct delayed_work 
+DATARMNET190b4452e8;bool DATARMNETcd94e0d3c7;};static DEFINE_SPINLOCK(
+DATARMNET8e3721c47d);static DEFINE_HASHTABLE(DATARMNET1fd012f255,
+DATARMNET347bd5eb15);static u32 DATARMNET1c62a8e2c9;static struct 
+DATARMNET74cfea3d20 DATARMNETac6535da80;static u32 DATARMNET84337b8855=
+(0xeb7+698-0x110d);module_param_named(rmnet_perf_tcp_knob0,DATARMNET84337b8855,
+uint,(0xdb7+6665-0x261c));static u64 DATARMNETeb09e391b5[DATARMNETaa18c75b61];
+module_param_array_named(rmnet_perf_tcp_stat,DATARMNETeb09e391b5,ullong,NULL,
+(0xcb7+5769-0x221c));static void DATARMNET32b91c8ae6(u32 DATARMNET248f120dd5){if
+(DATARMNET248f120dd5<DATARMNETaa18c75b61)DATARMNETeb09e391b5[DATARMNET248f120dd5
+]+=(0xd26+209-0xdf6);}static bool DATARMNETd92eab34a9(struct DATARMNETddbc1e5435
+*DATARMNET63b1a086d5,unsigned long DATARMNET763f2e5fac){unsigned long 
+DATARMNETc2d5c71ce1;DATARMNETc2d5c71ce1=msecs_to_jiffies(DATARMNET3dad3dfdc0);if
+(DATARMNET763f2e5fac-DATARMNET63b1a086d5->DATARMNET763f2e5fac>
+DATARMNETc2d5c71ce1)return true;return false;}static void DATARMNET776e08992c(
+struct rcu_head*DATARMNET5d432e897f){struct DATARMNETddbc1e5435*
+DATARMNET63b1a086d5;DATARMNET63b1a086d5=container_of(DATARMNET5d432e897f,struct 
+DATARMNETddbc1e5435,DATARMNET28bfe9e6ad);kfree(DATARMNET63b1a086d5);}static bool
+ DATARMNETb8167597bc(bool DATARMNETe78ad140cc){struct DATARMNETddbc1e5435*
+DATARMNET63b1a086d5;struct hlist_node*DATARMNET0386f6f82a;unsigned long 
+DATARMNET763f2e5fac;int DATARMNET5c2fd31d7b;DATARMNET763f2e5fac=jiffies;
+hash_for_each_safe(DATARMNET1fd012f255,DATARMNET5c2fd31d7b,DATARMNET0386f6f82a,
+DATARMNET63b1a086d5,hash){if(DATARMNET63b1a086d5->DATARMNET1717afebc7)continue;
+if(DATARMNETe78ad140cc||DATARMNETd92eab34a9(DATARMNET63b1a086d5,
+DATARMNET763f2e5fac)){DATARMNET63b1a086d5->DATARMNET1717afebc7=true;hash_del_rcu
+(&DATARMNET63b1a086d5->hash);call_rcu(&DATARMNET63b1a086d5->DATARMNET28bfe9e6ad,
+DATARMNET776e08992c);DATARMNET32b91c8ae6(DATARMNET9cc765a89e);
+DATARMNET1c62a8e2c9--;}}return!!DATARMNET1c62a8e2c9;}static void 
+DATARMNETfec9085d8e(struct work_struct*DATARMNET190b4452e8){struct 
+DATARMNET74cfea3d20*DATARMNET9dd153bdf2;unsigned long DATARMNETfb0677cc3c;bool 
+DATARMNET6e1c466378;DATARMNET9dd153bdf2=container_of(to_delayed_work(
+DATARMNET190b4452e8),struct DATARMNET74cfea3d20,DATARMNET190b4452e8);
+spin_lock_irqsave(&DATARMNET8e3721c47d,DATARMNETfb0677cc3c);DATARMNET6e1c466378=
+DATARMNETb8167597bc(DATARMNET9dd153bdf2->DATARMNETcd94e0d3c7);if(
+DATARMNET6e1c466378){unsigned long DATARMNETf71ef1b8da;DATARMNETf71ef1b8da=
+msecs_to_jiffies(DATARMNETe6309522cf);schedule_delayed_work(&DATARMNET9dd153bdf2
+->DATARMNET190b4452e8,DATARMNETf71ef1b8da);}spin_unlock_irqrestore(&
+DATARMNET8e3721c47d,DATARMNETfb0677cc3c);}static bool DATARMNET2f1039220d(struct
+ DATARMNET4b40fe9cd4*DATARMNETae0905b0b3,struct DATARMNET4b40fe9cd4*
+DATARMNETdb49f21565){if(DATARMNETae0905b0b3->DATARMNET0d956cc77a!=
+DATARMNETdb49f21565->DATARMNET0d956cc77a||DATARMNETae0905b0b3->
+DATARMNET08e913477e!=DATARMNETdb49f21565->DATARMNET08e913477e||
+DATARMNETae0905b0b3->DATARMNETda7f7fa492!=DATARMNETdb49f21565->
+DATARMNETda7f7fa492)return false;if(DATARMNETae0905b0b3->DATARMNET0d956cc77a==
+(0xd11+230-0xdf3))return DATARMNETae0905b0b3->DATARMNETdfe430c2d6==
+DATARMNETdb49f21565->DATARMNETdfe430c2d6&&DATARMNETae0905b0b3->
+DATARMNET2cb607d686==DATARMNETdb49f21565->DATARMNET2cb607d686;return!
+ipv6_addr_cmp(&DATARMNETae0905b0b3->DATARMNET815cbb4bf5,&DATARMNETdb49f21565->
+DATARMNET815cbb4bf5)&&!ipv6_addr_cmp(&DATARMNETae0905b0b3->DATARMNETc3f31215b7,&
+DATARMNETdb49f21565->DATARMNETc3f31215b7);}static struct DATARMNETddbc1e5435*
+DATARMNETba919c78e5(struct DATARMNET4b40fe9cd4*DATARMNET3396919a68)__must_hold(&
+DATARMNET8e3721c47d){struct DATARMNETddbc1e5435*DATARMNET63b1a086d5;if(
+DATARMNET1c62a8e2c9>=DATARMNET84337b8855)return NULL;DATARMNET63b1a086d5=kzalloc
+(sizeof(*DATARMNET63b1a086d5),GFP_ATOMIC);if(!DATARMNET63b1a086d5){
+DATARMNET32b91c8ae6(DATARMNETf354672897);return NULL;}INIT_HLIST_NODE(&
+DATARMNET63b1a086d5->hash);memcpy(&DATARMNET63b1a086d5->DATARMNET54338da2ff,
+DATARMNET3396919a68,sizeof(*DATARMNET3396919a68));DATARMNET63b1a086d5->
+DATARMNET9a57846b4e=DATARMNET99a2e6e390;DATARMNET63b1a086d5->DATARMNET763f2e5fac
+=jiffies;hash_add_rcu(DATARMNET1fd012f255,&DATARMNET63b1a086d5->hash,
+DATARMNET3396919a68->DATARMNET556bcfcf8f);DATARMNET32b91c8ae6(
+DATARMNETe0e37fef7a);if(!DATARMNET1c62a8e2c9){unsigned long DATARMNETf71ef1b8da;
+DATARMNETf71ef1b8da=msecs_to_jiffies(DATARMNETe6309522cf);schedule_delayed_work(
+&DATARMNETac6535da80.DATARMNET190b4452e8,DATARMNETf71ef1b8da);}
+DATARMNET1c62a8e2c9++;return DATARMNET63b1a086d5;}static void 
+DATARMNET11a5f0fd38(struct DATARMNETddbc1e5435*DATARMNET63b1a086d5,struct 
+sk_buff*DATARMNET543491eb0f,bool DATARMNETd147c14c0e)__must_hold(RCU){struct 
+tcphdr*DATARMNET668416551c=tcp_hdr(DATARMNET543491eb0f);struct rmnet_skb_cb*
+DATARMNET1ec4882bf7=RMNET_SKB_CB(DATARMNET543491eb0f);DATARMNET63b1a086d5->
+DATARMNET9c389f3b86=DATARMNET543491eb0f->hash;if(DATARMNETd147c14c0e){u32 
+DATARMNET9076d335ab=ntohl(DATARMNET668416551c->ack_seq);WRITE_ONCE(
+DATARMNET63b1a086d5->DATARMNET9076d335ab,DATARMNET9076d335ab);WRITE_ONCE(
+DATARMNET63b1a086d5->DATARMNETfef3675ce7,DATARMNET9076d335ab);}else{u32 
+DATARMNETfef3675ce7=ntohl(DATARMNET668416551c->seq);WRITE_ONCE(
+DATARMNET63b1a086d5->DATARMNETfef3675ce7,DATARMNETfef3675ce7);WRITE_ONCE(
+DATARMNET63b1a086d5->DATARMNET9076d335ab,DATARMNETfef3675ce7-(0xd26+209-0xdf6));
+DATARMNET1ec4882bf7->bif=(0xd2d+202-0xdf7);DATARMNET1ec4882bf7->ack_thresh=
+READ_ONCE(DATARMNET63b1a086d5->DATARMNET9a57846b4e);}}static struct 
+DATARMNETddbc1e5435*DATARMNET9f0aaf07cc(struct DATARMNET4b40fe9cd4*
+DATARMNET3396919a68,struct sk_buff*DATARMNET543491eb0f,bool DATARMNETd147c14c0e)
+__must_hold(RCU){struct DATARMNETddbc1e5435*DATARMNET63b1a086d5;unsigned long 
+DATARMNETfb0677cc3c;spin_lock_irqsave(&DATARMNET8e3721c47d,DATARMNETfb0677cc3c);
+hash_for_each_possible_rcu(DATARMNET1fd012f255,DATARMNET63b1a086d5,hash,
+DATARMNET3396919a68->DATARMNET556bcfcf8f){if(DATARMNET63b1a086d5->
+DATARMNET1717afebc7)continue;if(DATARMNET2f1039220d(&DATARMNET63b1a086d5->
+DATARMNET54338da2ff,DATARMNET3396919a68)){spin_unlock_irqrestore(&
+DATARMNET8e3721c47d,DATARMNETfb0677cc3c);return DATARMNET63b1a086d5;}}
+DATARMNET63b1a086d5=DATARMNETba919c78e5(DATARMNET3396919a68);
+spin_unlock_irqrestore(&DATARMNET8e3721c47d,DATARMNETfb0677cc3c);if(
+DATARMNET63b1a086d5)DATARMNET11a5f0fd38(DATARMNET63b1a086d5,DATARMNET543491eb0f,
+DATARMNETd147c14c0e);return DATARMNET63b1a086d5;}static struct sock*
+DATARMNETc0b5d624ae(struct DATARMNET4b40fe9cd4*DATARMNET3396919a68,struct 
+net_device*DATARMNETc96400be1e){struct net*net=dev_net(DATARMNETc96400be1e);if(
+DATARMNET3396919a68->DATARMNET0d956cc77a==(0xd11+230-0xdf3))return 
+inet_lookup_established(net,&tcp_hashinfo,DATARMNET3396919a68->
+DATARMNETdfe430c2d6,DATARMNET3396919a68->DATARMNET08e913477e,DATARMNET3396919a68
+->DATARMNET2cb607d686,DATARMNET3396919a68->DATARMNETda7f7fa492,
+DATARMNETc96400be1e->ifindex);return __inet6_lookup_established(net,&
+tcp_hashinfo,&DATARMNET3396919a68->DATARMNET815cbb4bf5,DATARMNET3396919a68->
+DATARMNET08e913477e,&DATARMNET3396919a68->DATARMNETc3f31215b7,ntohs(
+DATARMNET3396919a68->DATARMNETda7f7fa492),DATARMNETc96400be1e->ifindex,
+(0xd2d+202-0xdf7));}static void DATARMNET31a7673e56(struct DATARMNETddbc1e5435*
+DATARMNET63b1a086d5,struct sk_buff*DATARMNET543491eb0f)__must_hold(RCU){struct 
+sock*sk;if(DATARMNET543491eb0f->sk){sk=DATARMNET543491eb0f->sk;if(sk_fullsock(sk
+)){if(sk->sk_state==TCP_ESTABLISHED&&!sock_flag(sk,SOCK_DEAD)&&!sk_unhashed(sk)
+&&sk->sk_shutdown!=SHUTDOWN_MASK){inet_csk(sk)->icsk_ack.pending|=ICSK_ACK_NOW;
+DATARMNET63b1a086d5->DATARMNETb8fc35ed64++;DATARMNET32b91c8ae6(
+DATARMNET74f0a28fec);}}return;}sk=DATARMNETc0b5d624ae(&DATARMNET63b1a086d5->
+DATARMNET54338da2ff,DATARMNET543491eb0f->dev);if(!sk){struct rmnet_skb_cb*
+DATARMNET1ec4882bf7=RMNET_SKB_CB(DATARMNET543491eb0f);DATARMNET32b91c8ae6(
+DATARMNETb03f9571a3);DATARMNET63b1a086d5->DATARMNET55056146f6=true;
+DATARMNET1ec4882bf7->tethered=true;return;}if(sk_fullsock(sk)){bh_lock_sock(sk);
+if(sk->sk_state==TCP_ESTABLISHED&&!sock_flag(sk,SOCK_DEAD)&&!sk_unhashed(sk)&&sk
+->sk_shutdown!=SHUTDOWN_MASK){inet_csk(sk)->icsk_ack.pending|=ICSK_ACK_NOW;
+inet_csk_schedule_ack(sk);DATARMNET63b1a086d5->DATARMNETb8fc35ed64++;
+DATARMNET32b91c8ae6(DATARMNET53c8cfb28e);}bh_unlock_sock(sk);}sock_gen_put(sk);}
+static u32 DATARMNET62fb576113(struct sk_buff*DATARMNET543491eb0f){struct tcphdr
+*DATARMNET668416551c=tcp_hdr(DATARMNET543491eb0f);return DATARMNET543491eb0f->
+len-((u8*)DATARMNET668416551c-DATARMNET543491eb0f->data)-DATARMNET668416551c->
+doff*(0xd11+230-0xdf3);}static void DATARMNET55fda9e01e(struct 
+DATARMNETddbc1e5435*DATARMNET63b1a086d5,struct sk_buff*DATARMNET543491eb0f,bool 
+DATARMNETd147c14c0e)__must_hold(RCU){struct tcphdr*DATARMNET668416551c=tcp_hdr(
+DATARMNET543491eb0f);u32 DATARMNET26945497d8=ntohl(DATARMNET668416551c->seq);u32
+ DATARMNETb1b0ee1b2d=ntohl(DATARMNET668416551c->ack_seq);u32 DATARMNETb6ff6d25f8
+=READ_ONCE(DATARMNET63b1a086d5->DATARMNETfef3675ce7);u32 DATARMNET91c1d5c029=
+READ_ONCE(DATARMNET63b1a086d5->DATARMNET9076d335ab);u32 DATARMNET9445bc443c=
+READ_ONCE(DATARMNET63b1a086d5->DATARMNET9a57846b4e);DATARMNET63b1a086d5->
+DATARMNET763f2e5fac=jiffies;if(DATARMNET63b1a086d5->DATARMNET55056146f6)return;
+if(DATARMNETd147c14c0e){if(after(DATARMNETb1b0ee1b2d,DATARMNET91c1d5c029)){u32 
+DATARMNET4e557c82d6=(0xd2d+202-0xdf7);if(DATARMNETb1b0ee1b2d>DATARMNETb6ff6d25f8
+)DATARMNET4e557c82d6=DATARMNETb1b0ee1b2d-DATARMNETb6ff6d25f8;if(
+DATARMNET4e557c82d6>DATARMNET9445bc443c)DATARMNET31a7673e56(DATARMNET63b1a086d5,
+DATARMNET543491eb0f);WRITE_ONCE(DATARMNET63b1a086d5->DATARMNET9076d335ab,
+DATARMNETb1b0ee1b2d);}}else{u32 DATARMNET4e557c82d6;if(after(DATARMNET26945497d8
+,DATARMNETb6ff6d25f8)){DATARMNET4e557c82d6=DATARMNET26945497d8-
+DATARMNET91c1d5c029;DATARMNET4e557c82d6+=DATARMNET62fb576113(DATARMNET543491eb0f
+);if(DATARMNET4e557c82d6>DATARMNET9445bc443c)DATARMNET31a7673e56(
+DATARMNET63b1a086d5,DATARMNET543491eb0f);WRITE_ONCE(DATARMNET63b1a086d5->
+DATARMNETfef3675ce7,DATARMNET26945497d8);}}}static bool DATARMNET6670717310(
+struct sk_buff*DATARMNET543491eb0f,struct DATARMNET4b40fe9cd4*
+DATARMNET3396919a68){struct tcphdr*DATARMNET668416551c;u32 DATARMNETd660a1a629;
+if(!skb_transport_header_was_set(DATARMNET543491eb0f)||DATARMNET543491eb0f->
+ip_summed==CHECKSUM_NONE)return false;DATARMNET668416551c=tcp_hdr(
+DATARMNET543491eb0f);if(DATARMNET668416551c->syn)return false;
+DATARMNETd660a1a629=DATARMNET62fb576113(DATARMNET543491eb0f);if(!
+DATARMNETd660a1a629&&DATARMNET668416551c->ack)return false;DATARMNET3396919a68->
+DATARMNET08e913477e=DATARMNET668416551c->source;DATARMNET3396919a68->
+DATARMNETda7f7fa492=DATARMNET668416551c->dest;if(DATARMNET543491eb0f->protocol==
+htons(ETH_P_IP)){struct iphdr*DATARMNET86f1f2cdc9=ip_hdr(DATARMNET543491eb0f);
+DATARMNET3396919a68->DATARMNETdfe430c2d6=DATARMNET86f1f2cdc9->saddr;
+DATARMNET3396919a68->DATARMNET2cb607d686=DATARMNET86f1f2cdc9->daddr;
+DATARMNET3396919a68->DATARMNET0d956cc77a=(0xd11+230-0xdf3);}else{struct ipv6hdr*
+DATARMNETbf55123e5b=ipv6_hdr(DATARMNET543491eb0f);memcpy(&DATARMNET3396919a68->
+DATARMNET815cbb4bf5,&DATARMNETbf55123e5b->saddr,sizeof(DATARMNETbf55123e5b->
+saddr));memcpy(&DATARMNET3396919a68->DATARMNETc3f31215b7,&DATARMNETbf55123e5b->
+daddr,sizeof(DATARMNETbf55123e5b->daddr));DATARMNET3396919a68->
+DATARMNET0d956cc77a=(0xd03+244-0xdf1);}return true;}void DATARMNET9250714999(
+struct sk_buff*DATARMNET543491eb0f){struct rmnet_skb_cb*DATARMNET1ec4882bf7=
+RMNET_SKB_CB(DATARMNET543491eb0f);struct DATARMNET4b40fe9cd4 DATARMNET3396919a68
+={};struct DATARMNETddbc1e5435*DATARMNET63b1a086d5;if(!DATARMNET6670717310(
+DATARMNET543491eb0f,&DATARMNET3396919a68))return;rcu_read_lock();
+DATARMNET63b1a086d5=DATARMNET9f0aaf07cc(&DATARMNET3396919a68,DATARMNET543491eb0f
+,false);if(!DATARMNET63b1a086d5)goto DATARMNETbf4095f79e;if(unlikely(
+DATARMNETd92eab34a9(DATARMNET63b1a086d5,jiffies)))goto DATARMNETbf4095f79e;if(
+DATARMNET63b1a086d5->DATARMNET55056146f6){DATARMNET1ec4882bf7->tethered=true;}
+else{u32 DATARMNET4e557c82d6=READ_ONCE(DATARMNET63b1a086d5->DATARMNETfef3675ce7)
+-READ_ONCE(DATARMNET63b1a086d5->DATARMNET9076d335ab);DATARMNET1ec4882bf7->bif=
+DATARMNET4e557c82d6;DATARMNET1ec4882bf7->ack_thresh=READ_ONCE(
+DATARMNET63b1a086d5->DATARMNET9a57846b4e);DATARMNET1ec4882bf7->ack_forced=
+DATARMNET63b1a086d5->DATARMNETb8fc35ed64;}DATARMNETbf4095f79e:rcu_read_unlock();
+}void DATARMNETd8fdde8978(struct sk_buff*DATARMNET543491eb0f){struct 
+DATARMNET4b40fe9cd4 DATARMNET3396919a68={};struct DATARMNETddbc1e5435*
+DATARMNET63b1a086d5;if(!DATARMNET6670717310(DATARMNET543491eb0f,&
+DATARMNET3396919a68))return;rcu_read_lock();DATARMNET63b1a086d5=
+DATARMNET9f0aaf07cc(&DATARMNET3396919a68,DATARMNET543491eb0f,false);if(
+DATARMNET63b1a086d5){if(likely(!DATARMNETd92eab34a9(DATARMNET63b1a086d5,jiffies)
+))DATARMNET55fda9e01e(DATARMNET63b1a086d5,DATARMNET543491eb0f,false);}
+rcu_read_unlock();}void DATARMNET9d574e64b1(struct sk_buff*DATARMNET543491eb0f){
+struct DATARMNET4b40fe9cd4 DATARMNET3396919a68={};struct DATARMNETddbc1e5435*
+DATARMNET63b1a086d5;struct tcphdr*DATARMNET668416551c;u32 DATARMNETd660a1a629;if
+(!skb_transport_header_was_set(DATARMNET543491eb0f))return;DATARMNET668416551c=
+tcp_hdr(DATARMNET543491eb0f);if(DATARMNET668416551c->syn)return;
+DATARMNETd660a1a629=DATARMNET62fb576113(DATARMNET543491eb0f);if(
+DATARMNETd660a1a629||!DATARMNET668416551c->ack)return;DATARMNET3396919a68.
+DATARMNET08e913477e=DATARMNET668416551c->dest;DATARMNET3396919a68.
+DATARMNETda7f7fa492=DATARMNET668416551c->source;if(DATARMNET543491eb0f->protocol
+==htons(ETH_P_IP)){struct iphdr*DATARMNET86f1f2cdc9=ip_hdr(DATARMNET543491eb0f);
+DATARMNET3396919a68.DATARMNETdfe430c2d6=DATARMNET86f1f2cdc9->daddr;
+DATARMNET3396919a68.DATARMNET2cb607d686=DATARMNET86f1f2cdc9->saddr;
+DATARMNET3396919a68.DATARMNET0d956cc77a=(0xd11+230-0xdf3);}else{struct ipv6hdr*
+DATARMNETbf55123e5b=ipv6_hdr(DATARMNET543491eb0f);memcpy(&DATARMNET3396919a68.
+DATARMNET815cbb4bf5,&DATARMNETbf55123e5b->daddr,sizeof(DATARMNETbf55123e5b->
+daddr));memcpy(&DATARMNET3396919a68.DATARMNETc3f31215b7,&DATARMNETbf55123e5b->
+saddr,sizeof(DATARMNETbf55123e5b->saddr));DATARMNET3396919a68.
+DATARMNET0d956cc77a=(0xd03+244-0xdf1);}rcu_read_lock();DATARMNET63b1a086d5=
+DATARMNET9f0aaf07cc(&DATARMNET3396919a68,DATARMNET543491eb0f,true);if(
+DATARMNET63b1a086d5){if(likely(!DATARMNETd92eab34a9(DATARMNET63b1a086d5,jiffies)
+))DATARMNET55fda9e01e(DATARMNET63b1a086d5,DATARMNET543491eb0f,true);}
+rcu_read_unlock();}void DATARMNET7fa1835595(u32 DATARMNET556bcfcf8f,u32 
+DATARMNET9445bc443c){struct DATARMNETddbc1e5435*DATARMNET63b1a086d5;int 
+DATARMNET5c2fd31d7b;if(DATARMNET556bcfcf8f==(0xd2d+202-0xdf7)){if(
+DATARMNET9445bc443c==(0xd2d+202-0xdf7)){DATARMNETc03b668e4c=false;}else if(
+DATARMNET9445bc443c==(0xd26+209-0xdf6)){DATARMNETc03b668e4c=true;}return;}
+rcu_read_lock();hash_for_each_rcu(DATARMNET1fd012f255,DATARMNET5c2fd31d7b,
+DATARMNET63b1a086d5,hash){if(DATARMNET63b1a086d5->DATARMNET9c389f3b86==
+DATARMNET556bcfcf8f)WRITE_ONCE(DATARMNET63b1a086d5->DATARMNET9a57846b4e,
+DATARMNET9445bc443c);}rcu_read_unlock();}int DATARMNET7e9995246e(void){
+INIT_DELAYED_WORK(&DATARMNETac6535da80.DATARMNET190b4452e8,DATARMNETfec9085d8e);
+return(0xd2d+202-0xdf7);}void DATARMNET38bb6f2b7a(void){cancel_delayed_work_sync
+(&DATARMNETac6535da80.DATARMNET190b4452e8);DATARMNETac6535da80.
+DATARMNETcd94e0d3c7=true;schedule_delayed_work(&DATARMNETac6535da80.
+DATARMNET190b4452e8,(0xd2d+202-0xdf7));cancel_delayed_work_sync(&
+DATARMNETac6535da80.DATARMNET190b4452e8);}

+ 17 - 0
qcom/opensource/datarmnet-ext/perf/rmnet_perf_tcp.h

@@ -0,0 +1,17 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/* Copyright (c) 2023, Qualcomm Innovation Center, Inc. All rights reserved.
+ *
+ * RMNET PERF TCP framework
+ *
+ */
+
+#ifndef DATARMNET3a73abbc73
+#define DATARMNET3a73abbc73
+#include <linux/skbuff.h>
+extern bool DATARMNETc03b668e4c;void DATARMNET9250714999(struct sk_buff*
+DATARMNET543491eb0f);void DATARMNETd8fdde8978(struct sk_buff*DATARMNET543491eb0f
+);void DATARMNET9d574e64b1(struct sk_buff*DATARMNET543491eb0f);void 
+DATARMNET7fa1835595(u32 hash,u32 DATARMNET9445bc443c);int DATARMNET7e9995246e(
+void);void DATARMNET38bb6f2b7a(void);
+#endif
+

+ 176 - 0
qcom/opensource/datarmnet-ext/perf/rmnet_perf_udp.c

@@ -0,0 +1,176 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/* Copyright (c) 2023,Qualcomm Innovation Center, Inc. All rights reserved.
+ *
+ * RMNET PERF UDP framework
+ *
+ */
+
+#include <linux/types.h>
+#include <linux/module.h>
+#include <linux/moduleparam.h>
+#include <linux/skbuff.h>
+#include <linux/spinlock.h>
+#include <linux/rcupdate.h>
+#include <linux/hashtable.h>
+#include <linux/log2.h>
+#include <linux/workqueue.h>
+#include <linux/refcount.h>
+#include <net/ip.h>
+#include <net/ipv6.h>
+#include <net/udp.h>
+#include <net/sock.h>
+#include "rmnet_private.h"
+#include "rmnet_perf_udp.h"
+#define DATARMNET15dbec5cc0 ((0x16a8+1565-0x14f5))
+#define DATARMNET1b69f5599a ((0xdf7+6169-0x241c))
+#define DATARMNETe19b881e3e ((0xeb7+1158-0x132d))
+#define DATARMNET98862aed95 \
+	(const_ilog2(DATARMNETe19b881e3e))
+enum{DATARMNETcffce1f6da,DATARMNET1d79c7ae4b,DATARMNETf1cd747d89,
+DATARMNETf5e31b47ad,DATARMNETbaf32ca0ac,};struct DATARMNETee0c11924c{union{
+__be32 DATARMNETdfe430c2d6;struct in6_addr DATARMNET815cbb4bf5;};union{__be32 
+DATARMNET2cb607d686;struct in6_addr DATARMNETc3f31215b7;};union{struct{__be16 
+DATARMNET08e913477e;__be16 DATARMNETda7f7fa492;};u32 DATARMNET556bcfcf8f;};u8 
+DATARMNET0d956cc77a;};struct DATARMNETac2887e8c4{struct hlist_node hash;struct 
+rcu_head DATARMNET28bfe9e6ad;struct DATARMNETee0c11924c DATARMNET54338da2ff;
+struct sock*DATARMNETa3e9a18f1b;unsigned long DATARMNET763f2e5fac;u8 
+DATARMNET1717afebc7;};struct DATARMNET451f84b309{struct delayed_work 
+DATARMNET190b4452e8;bool DATARMNETcd94e0d3c7;};static DEFINE_SPINLOCK(
+DATARMNETa125272ee8);static DEFINE_HASHTABLE(DATARMNET187c01aba9,
+DATARMNET98862aed95);static u32 DATARMNETe0c4a54a69;static struct 
+DATARMNET451f84b309 DATARMNET3ed0b852e9;static u64 DATARMNETf41987fea1[
+DATARMNETbaf32ca0ac];module_param_array_named(rmnet_perf_udp_stat,
+DATARMNETf41987fea1,ullong,NULL,(0xcb7+5769-0x221c));static void 
+DATARMNET19b3edd6de(u32 DATARMNET248f120dd5){if(DATARMNET248f120dd5<
+DATARMNETbaf32ca0ac)DATARMNETf41987fea1[DATARMNET248f120dd5]+=(0xd26+209-0xdf6);
+}static bool DATARMNETa8d347a4e6(struct DATARMNETac2887e8c4*DATARMNET63b1a086d5,
+unsigned long DATARMNET763f2e5fac){unsigned long DATARMNETc2d5c71ce1;
+DATARMNETc2d5c71ce1=msecs_to_jiffies(DATARMNET15dbec5cc0);if(DATARMNET763f2e5fac
+-DATARMNET63b1a086d5->DATARMNET763f2e5fac>DATARMNETc2d5c71ce1)return true;return
+ false;}static void DATARMNETfcb3ce7715(struct rcu_head*DATARMNET5d432e897f){
+struct DATARMNETac2887e8c4*DATARMNET63b1a086d5;DATARMNET63b1a086d5=container_of(
+DATARMNET5d432e897f,struct DATARMNETac2887e8c4,DATARMNET28bfe9e6ad);if(!
+IS_ERR_OR_NULL(DATARMNET63b1a086d5->DATARMNETa3e9a18f1b))sock_put(
+DATARMNET63b1a086d5->DATARMNETa3e9a18f1b);kfree(DATARMNET63b1a086d5);}static 
+bool DATARMNET18d263f0ec(bool DATARMNETe78ad140cc){struct DATARMNETac2887e8c4*
+DATARMNET63b1a086d5;struct hlist_node*DATARMNET0386f6f82a;unsigned long 
+DATARMNET763f2e5fac;int DATARMNET5c2fd31d7b;DATARMNET763f2e5fac=jiffies;
+hash_for_each_safe(DATARMNET187c01aba9,DATARMNET5c2fd31d7b,DATARMNET0386f6f82a,
+DATARMNET63b1a086d5,hash){if(DATARMNET63b1a086d5->DATARMNET1717afebc7)continue;
+if(DATARMNETe78ad140cc||DATARMNETa8d347a4e6(DATARMNET63b1a086d5,
+DATARMNET763f2e5fac)){DATARMNET63b1a086d5->DATARMNET1717afebc7=(0xd26+209-0xdf6)
+;hash_del_rcu(&DATARMNET63b1a086d5->hash);call_rcu(&DATARMNET63b1a086d5->
+DATARMNET28bfe9e6ad,DATARMNETfcb3ce7715);DATARMNET19b3edd6de(DATARMNETf1cd747d89
+);DATARMNETe0c4a54a69--;}}return!!DATARMNETe0c4a54a69;}static void 
+DATARMNET47ed281d61(struct work_struct*DATARMNET190b4452e8){struct 
+DATARMNET451f84b309*DATARMNET3a3a7762bb;unsigned long DATARMNETfb0677cc3c;bool 
+DATARMNET6e1c466378;DATARMNET3a3a7762bb=container_of(to_delayed_work(
+DATARMNET190b4452e8),struct DATARMNET451f84b309,DATARMNET190b4452e8);
+spin_lock_irqsave(&DATARMNETa125272ee8,DATARMNETfb0677cc3c);DATARMNET6e1c466378=
+DATARMNET18d263f0ec(DATARMNET3a3a7762bb->DATARMNETcd94e0d3c7);if(
+DATARMNET6e1c466378){unsigned long DATARMNETf71ef1b8da;DATARMNETf71ef1b8da=
+msecs_to_jiffies(DATARMNET1b69f5599a);schedule_delayed_work(&DATARMNET3a3a7762bb
+->DATARMNET190b4452e8,DATARMNETf71ef1b8da);}spin_unlock_irqrestore(&
+DATARMNETa125272ee8,DATARMNETfb0677cc3c);}static bool DATARMNET47899a016a(struct
+ DATARMNETee0c11924c*DATARMNETae0905b0b3,struct DATARMNETee0c11924c*
+DATARMNETdb49f21565){if(DATARMNETae0905b0b3->DATARMNET0d956cc77a!=
+DATARMNETdb49f21565->DATARMNET0d956cc77a||DATARMNETae0905b0b3->
+DATARMNET08e913477e!=DATARMNETdb49f21565->DATARMNET08e913477e||
+DATARMNETae0905b0b3->DATARMNETda7f7fa492!=DATARMNETdb49f21565->
+DATARMNETda7f7fa492)return false;if(DATARMNETae0905b0b3->DATARMNET0d956cc77a==
+(0xd11+230-0xdf3))return DATARMNETae0905b0b3->DATARMNETdfe430c2d6==
+DATARMNETdb49f21565->DATARMNETdfe430c2d6&&DATARMNETae0905b0b3->
+DATARMNET2cb607d686==DATARMNETdb49f21565->DATARMNET2cb607d686;return!
+ipv6_addr_cmp(&DATARMNETae0905b0b3->DATARMNET815cbb4bf5,&DATARMNETdb49f21565->
+DATARMNET815cbb4bf5)&&!ipv6_addr_cmp(&DATARMNETae0905b0b3->DATARMNETc3f31215b7,&
+DATARMNETdb49f21565->DATARMNETc3f31215b7);}static struct DATARMNETac2887e8c4*
+DATARMNET7b1084dc09(struct DATARMNETee0c11924c*DATARMNET3396919a68)__must_hold(&
+DATARMNETa125272ee8){struct DATARMNETac2887e8c4*DATARMNET63b1a086d5;
+DATARMNET63b1a086d5=kzalloc(sizeof(*DATARMNET63b1a086d5),GFP_ATOMIC);if(!
+DATARMNET63b1a086d5){DATARMNET19b3edd6de(DATARMNET1d79c7ae4b);return NULL;}
+INIT_HLIST_NODE(&DATARMNET63b1a086d5->hash);memcpy(&DATARMNET63b1a086d5->
+DATARMNET54338da2ff,DATARMNET3396919a68,sizeof(*DATARMNET3396919a68));
+DATARMNET63b1a086d5->DATARMNET763f2e5fac=jiffies;hash_add_rcu(
+DATARMNET187c01aba9,&DATARMNET63b1a086d5->hash,DATARMNET3396919a68->
+DATARMNET556bcfcf8f);DATARMNET19b3edd6de(DATARMNETcffce1f6da);if(!
+DATARMNETe0c4a54a69){unsigned long DATARMNETf71ef1b8da;DATARMNETf71ef1b8da=
+msecs_to_jiffies(DATARMNET1b69f5599a);schedule_delayed_work(&DATARMNET3ed0b852e9
+.DATARMNET190b4452e8,DATARMNETf71ef1b8da);}DATARMNETe0c4a54a69++;return 
+DATARMNET63b1a086d5;}static struct DATARMNETac2887e8c4*DATARMNET270a2369fc(
+struct DATARMNETee0c11924c*DATARMNET3396919a68)__must_hold(RCU){struct 
+DATARMNETac2887e8c4*DATARMNET63b1a086d5;unsigned long DATARMNETfb0677cc3c;
+spin_lock_irqsave(&DATARMNETa125272ee8,DATARMNETfb0677cc3c);
+hash_for_each_possible_rcu(DATARMNET187c01aba9,DATARMNET63b1a086d5,hash,
+DATARMNET3396919a68->DATARMNET556bcfcf8f){if(DATARMNET63b1a086d5->
+DATARMNET1717afebc7)continue;if(DATARMNET47899a016a(&DATARMNET63b1a086d5->
+DATARMNET54338da2ff,DATARMNET3396919a68))goto DATARMNETbf4095f79e;}
+DATARMNET63b1a086d5=DATARMNET7b1084dc09(DATARMNET3396919a68);DATARMNETbf4095f79e
+:spin_unlock_irqrestore(&DATARMNETa125272ee8,DATARMNETfb0677cc3c);return 
+DATARMNET63b1a086d5;}static struct sock*DATARMNETa9a99daddb(struct 
+DATARMNETee0c11924c*DATARMNET3396919a68,struct sk_buff*DATARMNET543491eb0f){
+struct sock*DATARMNET370b0f4269;if(DATARMNET3396919a68->DATARMNET0d956cc77a==
+(0xd11+230-0xdf3))DATARMNET370b0f4269=__udp4_lib_lookup(dev_net(
+DATARMNET543491eb0f->dev),DATARMNET3396919a68->DATARMNETdfe430c2d6,
+DATARMNET3396919a68->DATARMNET08e913477e,DATARMNET3396919a68->
+DATARMNET2cb607d686,DATARMNET3396919a68->DATARMNETda7f7fa492,inet_iif(
+DATARMNET543491eb0f),(0xd2d+202-0xdf7),&udp_table,NULL);else DATARMNET370b0f4269
+=__udp6_lib_lookup(dev_net(DATARMNET543491eb0f->dev),&DATARMNET3396919a68->
+DATARMNET815cbb4bf5,DATARMNET3396919a68->DATARMNET08e913477e,&
+DATARMNET3396919a68->DATARMNETc3f31215b7,DATARMNET3396919a68->
+DATARMNETda7f7fa492,inet6_iif(DATARMNET543491eb0f),(0xd2d+202-0xdf7),&udp_table,
+NULL);if(DATARMNET370b0f4269&&!refcount_inc_not_zero(&DATARMNET370b0f4269->
+sk_refcnt))DATARMNET370b0f4269=NULL;return DATARMNET370b0f4269;}static void 
+DATARMNET991df48508(struct DATARMNETac2887e8c4*DATARMNET63b1a086d5,struct 
+sk_buff*DATARMNET543491eb0f)__must_hold(RCU){struct rmnet_skb_cb*
+DATARMNET1ec4882bf7=RMNET_SKB_CB(DATARMNET543491eb0f);DATARMNET63b1a086d5->
+DATARMNET763f2e5fac=jiffies;if(IS_ERR(DATARMNET63b1a086d5->DATARMNETa3e9a18f1b))
+{DATARMNET1ec4882bf7->tethered=true;return;}if(!DATARMNET63b1a086d5->
+DATARMNETa3e9a18f1b){DATARMNET63b1a086d5->DATARMNETa3e9a18f1b=
+DATARMNETa9a99daddb(&DATARMNET63b1a086d5->DATARMNET54338da2ff,
+DATARMNET543491eb0f);if(!DATARMNET63b1a086d5->DATARMNETa3e9a18f1b){
+DATARMNET19b3edd6de(DATARMNETf5e31b47ad);DATARMNET63b1a086d5->
+DATARMNETa3e9a18f1b=ERR_PTR(-EINVAL);DATARMNET1ec4882bf7->tethered=true;return;}
+}}void DATARMNET2a6d02a6a5(struct sk_buff*DATARMNET543491eb0f){struct 
+DATARMNETee0c11924c DATARMNET3396919a68={};struct DATARMNETac2887e8c4*
+DATARMNET63b1a086d5;struct udphdr*DATARMNETa1abb4897c;if(!
+skb_transport_header_was_set(DATARMNET543491eb0f)||DATARMNET543491eb0f->
+ip_summed==CHECKSUM_NONE)return;DATARMNETa1abb4897c=udp_hdr(DATARMNET543491eb0f)
+;DATARMNET3396919a68.DATARMNET08e913477e=DATARMNETa1abb4897c->source;
+DATARMNET3396919a68.DATARMNETda7f7fa492=DATARMNETa1abb4897c->dest;if(
+DATARMNET543491eb0f->protocol==htons(ETH_P_IP)){struct iphdr*DATARMNET86f1f2cdc9
+=ip_hdr(DATARMNET543491eb0f);DATARMNET3396919a68.DATARMNETdfe430c2d6=
+DATARMNET86f1f2cdc9->saddr;DATARMNET3396919a68.DATARMNET2cb607d686=
+DATARMNET86f1f2cdc9->daddr;DATARMNET3396919a68.DATARMNET0d956cc77a=
+(0xd11+230-0xdf3);}else{struct ipv6hdr*DATARMNETbf55123e5b=ipv6_hdr(
+DATARMNET543491eb0f);memcpy(&DATARMNET3396919a68.DATARMNET815cbb4bf5,&
+DATARMNETbf55123e5b->saddr,sizeof(DATARMNETbf55123e5b->saddr));memcpy(&
+DATARMNET3396919a68.DATARMNETc3f31215b7,&DATARMNETbf55123e5b->daddr,sizeof(
+DATARMNETbf55123e5b->daddr));DATARMNET3396919a68.DATARMNET0d956cc77a=
+(0xd03+244-0xdf1);}rcu_read_lock();DATARMNET63b1a086d5=DATARMNET270a2369fc(&
+DATARMNET3396919a68);if(DATARMNET63b1a086d5){if(likely(!DATARMNETa8d347a4e6(
+DATARMNET63b1a086d5,jiffies)))DATARMNET991df48508(DATARMNET63b1a086d5,
+DATARMNET543491eb0f);}rcu_read_unlock();}void DATARMNET5ecc30669c(struct sk_buff
+*DATARMNET543491eb0f){struct DATARMNETee0c11924c DATARMNET3396919a68={};struct 
+DATARMNETac2887e8c4*DATARMNET63b1a086d5;struct udphdr*DATARMNETa1abb4897c;if(!
+skb_transport_header_was_set(DATARMNET543491eb0f))return;DATARMNETa1abb4897c=
+udp_hdr(DATARMNET543491eb0f);DATARMNET3396919a68.DATARMNET08e913477e=
+DATARMNETa1abb4897c->dest;DATARMNET3396919a68.DATARMNETda7f7fa492=
+DATARMNETa1abb4897c->source;if(DATARMNET543491eb0f->protocol==htons(ETH_P_IP)){
+struct iphdr*DATARMNET86f1f2cdc9=ip_hdr(DATARMNET543491eb0f);DATARMNET3396919a68
+.DATARMNETdfe430c2d6=DATARMNET86f1f2cdc9->daddr;DATARMNET3396919a68.
+DATARMNET2cb607d686=DATARMNET86f1f2cdc9->saddr;DATARMNET3396919a68.
+DATARMNET0d956cc77a=(0xd11+230-0xdf3);}else{struct ipv6hdr*DATARMNETbf55123e5b=
+ipv6_hdr(DATARMNET543491eb0f);memcpy(&DATARMNET3396919a68.DATARMNET815cbb4bf5,&
+DATARMNETbf55123e5b->daddr,sizeof(DATARMNETbf55123e5b->daddr));memcpy(&
+DATARMNET3396919a68.DATARMNETc3f31215b7,&DATARMNETbf55123e5b->saddr,sizeof(
+DATARMNETbf55123e5b->saddr));DATARMNET3396919a68.DATARMNET0d956cc77a=
+(0xd03+244-0xdf1);}rcu_read_lock();DATARMNET63b1a086d5=DATARMNET270a2369fc(&
+DATARMNET3396919a68);if(DATARMNET63b1a086d5){if(likely(!DATARMNETa8d347a4e6(
+DATARMNET63b1a086d5,jiffies)))DATARMNET991df48508(DATARMNET63b1a086d5,
+DATARMNET543491eb0f);}rcu_read_unlock();}int DATARMNETe80a33d544(void){
+INIT_DELAYED_WORK(&DATARMNET3ed0b852e9.DATARMNET190b4452e8,DATARMNET47ed281d61);
+return(0xd2d+202-0xdf7);}void DATARMNET4b5170a1ef(void){cancel_delayed_work_sync
+(&DATARMNET3ed0b852e9.DATARMNET190b4452e8);DATARMNET3ed0b852e9.
+DATARMNETcd94e0d3c7=true;schedule_delayed_work(&DATARMNET3ed0b852e9.
+DATARMNET190b4452e8,(0xd2d+202-0xdf7));cancel_delayed_work_sync(&
+DATARMNET3ed0b852e9.DATARMNET190b4452e8);}

+ 15 - 0
qcom/opensource/datarmnet-ext/perf/rmnet_perf_udp.h

@@ -0,0 +1,15 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/* Copyright (c) 2023, Qualcomm Innovation Center, Inc. All rights reserved.
+ *
+ * RMNET PERF UDP framework
+ *
+ */
+
+#ifndef DATARMNET7d5af408af
+#define DATARMNET7d5af408af
+#include <linux/skbuff.h>
+void DATARMNET2a6d02a6a5(struct sk_buff*DATARMNET543491eb0f);void 
+DATARMNET5ecc30669c(struct sk_buff*DATARMNET543491eb0f);int DATARMNETe80a33d544(
+void);void DATARMNET4b5170a1ef(void);
+#endif
+

+ 46 - 0
qcom/opensource/datarmnet-ext/perf_tether/Android.mk

@@ -0,0 +1,46 @@
+ifeq ($(TARGET_DATARMNET_EXT_ENABLE), true)
+ifneq ($(TARGET_BOARD_AUTO),true)
+ifneq ($(TARGET_BOARD_PLATFORM),qssi)
+
+RMNET_PERF_TETHER_DLKM_PLATFORMS_LIST := pineapple
+RMNET_PERF_TETHER_DLKM_PLATFORMS_LIST += blair
+RMNET_PERF_TETHER_DLKM_PLATFORMS_LIST += pitti
+RMNET_PERF_TETHER_DLKM_PLATFORMS_LIST += volcano
+
+ifeq ($(call is-board-platform-in-list, $(RMNET_PERF_TETHER_DLKM_PLATFORMS_LIST)),true)
+LOCAL_PATH := $(call my-dir)
+include $(CLEAR_VARS)
+
+#Enabling BAZEL
+LOCAL_MODULE_DDK_BUILD := true
+
+LOCAL_MODULE_PATH := $(KERNEL_MODULES_OUT)
+
+LOCAL_MODULE := rmnet_perf_tether.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
+
+#Must be built after the core rmnet module
+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
+
+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
+endif #End of Check for datarmnet

+ 18 - 0
qcom/opensource/datarmnet-ext/perf_tether/BUILD.bazel

@@ -0,0 +1,18 @@
+load(":define_perf_tether.bzl", "define_perf_tether")
+load("//build/kernel/kleaf:kernel.bzl", "ddk_module")
+
+define_perf_tether("pineapple", "consolidate")
+
+define_perf_tether("pineapple", "gki")
+
+define_perf_tether("blair", "consolidate")
+
+define_perf_tether("blair", "gki")
+
+define_perf_tether("pitti", "consolidate")
+
+define_perf_tether("pitti", "gki")
+
+define_perf_tether("volcano", "consolidate")
+
+define_perf_tether("volcano", "gki")

+ 5 - 0
qcom/opensource/datarmnet-ext/perf_tether/Kbuild

@@ -0,0 +1,5 @@
+obj-m += rmnet_perf_tether.o
+#Need core headers
+ccflags-y := -I$(RMNET_CORE_INC_DIR) \
+             $(call cc-option,-Wno-misleading-indentation)
+rmnet_perf_tether-y := rmnet_perf_tether_main.o

+ 10 - 0
qcom/opensource/datarmnet-ext/perf_tether/Kconfig

@@ -0,0 +1,10 @@
+#
+# RMNET_PERF_TETHER driver
+#
+
+menuconfig RMNET_PERF_TETHER
+    tristate "Rmnet perf tethering support"
+    default m
+    depends on RMNET_CORE
+    ---help---
+        Offload support for the RmNet driver

+ 16 - 0
qcom/opensource/datarmnet-ext/perf_tether/Makefile

@@ -0,0 +1,16 @@
+#By default build for CLD
+RMNET_PERF_TETHER_SELECT := CONFIG_RMNET_PERF_TETHER=m
+KBUILD_OPTIONS += $(RMNET_PERF_TETHER_SELECT)
+KBUILD_OPTIONS += $(KBUILD_EXTRA) # Extra config if any
+KBUILD_EXTRA_SYMBOLS := $(M)/../../$(DATARMNET_CORE_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

+ 33 - 0
qcom/opensource/datarmnet-ext/perf_tether/define_perf_tether.bzl

@@ -0,0 +1,33 @@
+load("//build/bazel_common_rules/dist:dist.bzl", "copy_to_dist_dir")
+load("//build/kernel/kleaf:kernel.bzl", "ddk_module")
+
+def define_perf_tether(target, variant):
+    kernel_build_variant = "{}_{}".format(target, variant)
+    include_base = "../../../{}".format(native.package_name())
+
+    ddk_module(
+        name = "{}_perf_tether".format(kernel_build_variant),
+        out = "rmnet_perf_tether.ko",
+        srcs = [
+            "rmnet_perf_tether_main.c",
+        ],
+        kernel_build = "//msm-kernel:{}".format(kernel_build_variant),
+        deps = [
+            "//msm-kernel:all_headers",
+            "//vendor/qcom/opensource/datarmnet:{}_rmnet_core".format(kernel_build_variant),
+            "//vendor/qcom/opensource/datarmnet:rmnet_core_headers",
+        ],
+        copts = ["-Wno-misleading-indentation"],
+    )
+
+    copy_to_dist_dir(
+        name = "{}_datarment-ext_dist".format(kernel_build_variant),
+        data = [
+            ":{}_perf_tether".format(kernel_build_variant),
+        ],
+        dist_dir = "out/target/product/{}/dlkm/lib/modules/".format(target),
+        flat = True,
+        wipe_dist_dir = False,
+        allow_duplicate_filenames = False,
+        mode_overrides = {"**/*": "644"},
+    )

+ 243 - 0
qcom/opensource/datarmnet-ext/perf_tether/rmnet_perf_tether_main.c

@@ -0,0 +1,243 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/* Copyright (c) 2021, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
+ *
+ * RMNET PERF TETHER framework
+ *
+ */
+
+#include <linux/module.h>
+#include <net/tcp.h>
+#include "rmnet_descriptor.h"
+#include "rmnet_map.h"
+#include "rmnet_qmap.h"
+#include "rmnet_module.h"
+MODULE_LICENSE("\x47\x50\x4c\x20\x76\x32");static char*verinfo[]={
+"\x65\x32\x31\x38\x66\x34\x35\x31","\x36\x34\x38\x62\x37\x30\x39\x35",
+"\x37\x34\x31\x35\x39\x32\x31\x63","\x34\x39\x61\x66\x39\x62\x64\x34"};
+module_param_array(verinfo,charp,NULL,(0xcb7+5769-0x221c));MODULE_PARM_DESC(
+verinfo,
+"\x56\x65\x72\x73\x69\x6f\x6e\x20\x6f\x66\x20\x74\x68\x65\x20\x64\x72\x69\x76\x65\x72"
+);extern void(*rmnet_perf_tether_ingress_hook)(struct tcphdr*DATARMNET2e7cc88971
+,struct rmnet_frag_descriptor*DATARMNET9d1b321642,struct iphdr*
+DATARMNET86f1f2cdc9);extern void(*rmnet_perf_tether_egress_hook)(struct sk_buff*
+DATARMNET543491eb0f);extern void(*rmnet_perf_tether_cmd_hook)(u8 
+DATARMNET07b1a05079,u64 DATARMNETcc6099cb14);struct DATARMNETf9eee4068d{u8 
+DATARMNETd0ef85194f;};static struct DATARMNETf9eee4068d*DATARMNET8a1e9920bf;
+unsigned int configure_knob1 __read_mostly=(0xd2d+202-0xdf7);module_param(
+configure_knob1,uint,(0xdb7+6665-0x261c));unsigned int knob1 __read_mostly=
+(0xd2d+202-0xdf7);module_param(knob1,uint,(0xdb7+6665-0x261c));unsigned int 
+configure_knob2 __read_mostly=(0xd2d+202-0xdf7);module_param(configure_knob2,
+uint,(0xdb7+6665-0x261c));unsigned int knob2 __read_mostly=(0xd2d+202-0xdf7);
+module_param(knob2,uint,(0xdb7+6665-0x261c));static DEFINE_SPINLOCK(
+DATARMNETcf56327171);
+#define DATARMNETd063f2edce ((0xef7+1112-0x131d))
+#define DATARMNET4c845df513 \
+	(const_ilog2(DATARMNETd063f2edce))
+static DEFINE_HASHTABLE(DATARMNET031f18e039,DATARMNET4c845df513);struct 
+DATARMNETb477d446e7{struct list_head list;struct hlist_node hlist;u32 hash;
+__be32 DATARMNETdfd47b00ff[(0xd20+231-0xdfc)];u32 DATARMNET4b119c4ff3;};struct 
+list_head DATARMNETc588a190d4=LIST_HEAD_INIT(DATARMNETc588a190d4);
+#define DATARMNETc99cb98651 ((0xd26+209-0xdf6))
+#define DATARMNETfc6d4bac8a ((0xd19+238-0xdfb))
+#define DATARMNETc152fdcc34 ((0xec7+1129-0x1315))
+#define DATARMNET7bd625a8c0 ((0xd26+209-0xdf6))
+struct DATARMNETb0eda9d28e{u8 DATARMNETba8c503d04;u8 DATARMNET4f46aa107b;u8 
+DATARMNETc59f891d69;u8 DATARMNETecca9147fd;};static u32 DATARMNET233bccd449(
+struct sk_buff*DATARMNET543491eb0f,int*DATARMNET76bafbc6ce,int 
+DATARMNET32b08042b9,int DATARMNET3a925295d9){__be32 DATARMNETdfd47b00ff[
+(0xd20+231-0xdfc)];u32 DATARMNET5ebf661879;if(DATARMNET543491eb0f->protocol==
+htons(ETH_P_IP)){if(!tcp_hdr(DATARMNET543491eb0f)->syn)goto DATARMNET1d7e728ddf;
+if(DATARMNET32b08042b9){if(!tcp_hdr(DATARMNET543491eb0f)->ack)goto 
+DATARMNET1d7e728ddf;}else{if(tcp_hdr(DATARMNET543491eb0f)->ack)goto 
+DATARMNET1d7e728ddf;}DATARMNETdfd47b00ff[(0xd2d+202-0xdf7)]=DATARMNET3a925295d9?
+ip_hdr(DATARMNET543491eb0f)->daddr:ip_hdr(DATARMNET543491eb0f)->saddr;
+DATARMNETdfd47b00ff[(0xd26+209-0xdf6)]=DATARMNET3a925295d9?ip_hdr(
+DATARMNET543491eb0f)->saddr:ip_hdr(DATARMNET543491eb0f)->daddr;
+DATARMNETdfd47b00ff[(0xd1f+216-0xdf5)]=ip_hdr(DATARMNET543491eb0f)->protocol;
+DATARMNETdfd47b00ff[(0xd18+223-0xdf4)]=DATARMNET3a925295d9?tcp_hdr(
+DATARMNET543491eb0f)->dest:tcp_hdr(DATARMNET543491eb0f)->source;
+DATARMNETdfd47b00ff[(0xd11+230-0xdf3)]=DATARMNET3a925295d9?tcp_hdr(
+DATARMNET543491eb0f)->source:tcp_hdr(DATARMNET543491eb0f)->dest;
+DATARMNET5ebf661879=(0xd0a+237-0xdf2);}else if(DATARMNET543491eb0f->protocol==
+htons(ETH_P_IPV6)){if(!tcp_hdr(DATARMNET543491eb0f)->syn)goto 
+DATARMNET1d7e728ddf;if(DATARMNET32b08042b9){if(!tcp_hdr(DATARMNET543491eb0f)->
+ack)goto DATARMNET1d7e728ddf;}else{if(tcp_hdr(DATARMNET543491eb0f)->ack)goto 
+DATARMNET1d7e728ddf;}memcpy(&DATARMNETdfd47b00ff[(0xd2d+202-0xdf7)],
+DATARMNET3a925295d9?ipv6_hdr(DATARMNET543491eb0f)->daddr.s6_addr:ipv6_hdr(
+DATARMNET543491eb0f)->saddr.s6_addr,sizeof(struct in6_addr));memcpy(&
+DATARMNETdfd47b00ff[(0xd0a+237-0xdf2)],DATARMNET3a925295d9?ipv6_hdr(
+DATARMNET543491eb0f)->saddr.s6_addr:ipv6_hdr(DATARMNET543491eb0f)->daddr.s6_addr
+,sizeof(struct in6_addr));DATARMNETdfd47b00ff[(0xd35+210-0xdff)]=ipv6_hdr(
+DATARMNET543491eb0f)->nexthdr;DATARMNETdfd47b00ff[9]=tcp_hdr(DATARMNET543491eb0f
+)->dest;DATARMNETdfd47b00ff[(0xd27+224-0xdfd)]=tcp_hdr(DATARMNET543491eb0f)->
+source;DATARMNET5ebf661879=(0xd20+231-0xdfc);}else{goto DATARMNET1d7e728ddf;}*
+DATARMNET76bafbc6ce=(0xd26+209-0xdf6);return jhash2(DATARMNETdfd47b00ff,
+DATARMNET5ebf661879,(0xd2d+202-0xdf7));DATARMNET1d7e728ddf:*DATARMNET76bafbc6ce=
+(0xd2d+202-0xdf7);return(0xd2d+202-0xdf7);}static void DATARMNET9d42c8a184(
+struct tcphdr*DATARMNET2e7cc88971){if(DATARMNET2e7cc88971->syn&&
+DATARMNET2e7cc88971->ack){if(configure_knob1){if(knob1>65535)knob1=65535;
+DATARMNET2e7cc88971->window=cpu_to_be16(knob1);}if(configure_knob2){unsigned 
+char*DATARMNET7b34b7b5be;u32 DATARMNET539d2ad3f2;if(knob2>TCP_MAX_WSCALE)knob2=
+TCP_MAX_WSCALE;DATARMNET539d2ad3f2=DATARMNET2e7cc88971->doff*(0xd11+230-0xdf3)-
+sizeof(struct tcphdr);DATARMNET7b34b7b5be=(unsigned char*)(DATARMNET2e7cc88971+
+(0xd26+209-0xdf6));while(DATARMNET539d2ad3f2>(0xd2d+202-0xdf7)){int 
+DATARMNET969cfb9094=*DATARMNET7b34b7b5be++;int DATARMNET68a21637e9;switch(
+DATARMNET969cfb9094){case TCPOPT_EOL:return;case TCPOPT_NOP:DATARMNET539d2ad3f2
+--;continue;default:if(DATARMNET539d2ad3f2<(0xd1f+216-0xdf5))return;
+DATARMNET68a21637e9=*DATARMNET7b34b7b5be++;if(DATARMNET68a21637e9<
+(0xd1f+216-0xdf5))return;if(DATARMNET68a21637e9>DATARMNET539d2ad3f2)return;if(
+DATARMNET969cfb9094==TCPOPT_WINDOW)*DATARMNET7b34b7b5be=knob2;
+DATARMNET7b34b7b5be+=DATARMNET68a21637e9-(0xd1f+216-0xdf5);DATARMNET539d2ad3f2-=
+DATARMNET68a21637e9;}}}}}static int DATARMNET94d0b7e790(struct 
+DATARMNETb477d446e7*DATARMNET63b1a086d5,struct sk_buff*DATARMNET543491eb0f){if(
+DATARMNET543491eb0f->protocol==htons(ETH_P_IP)){if((DATARMNET63b1a086d5->
+DATARMNETdfd47b00ff[(0xd2d+202-0xdf7)]==ip_hdr(DATARMNET543491eb0f)->saddr)&&(
+DATARMNET63b1a086d5->DATARMNETdfd47b00ff[(0xd26+209-0xdf6)]==ip_hdr(
+DATARMNET543491eb0f)->daddr)&&(DATARMNET63b1a086d5->DATARMNETdfd47b00ff[
+(0xd1f+216-0xdf5)]==ip_hdr(DATARMNET543491eb0f)->protocol)&&(DATARMNET63b1a086d5
+->DATARMNETdfd47b00ff[(0xd18+223-0xdf4)]==tcp_hdr(DATARMNET543491eb0f)->source)
+&&(DATARMNET63b1a086d5->DATARMNETdfd47b00ff[(0xd11+230-0xdf3)]==tcp_hdr(
+DATARMNET543491eb0f)->dest)&&(DATARMNET63b1a086d5->DATARMNET4b119c4ff3==
+(0xd0a+237-0xdf2)))return(0xd2d+202-0xdf7);}else if(DATARMNET543491eb0f->
+protocol==htons(ETH_P_IPV6)){if((!memcmp(&DATARMNET63b1a086d5->
+DATARMNETdfd47b00ff[(0xd2d+202-0xdf7)],ipv6_hdr(DATARMNET543491eb0f)->saddr.
+s6_addr,sizeof(struct in6_addr)))&&(!memcmp(&DATARMNET63b1a086d5->
+DATARMNETdfd47b00ff[(0xd0a+237-0xdf2)],ipv6_hdr(DATARMNET543491eb0f)->daddr.
+s6_addr,sizeof(struct in6_addr)))&&(DATARMNET63b1a086d5->DATARMNETdfd47b00ff[
+(0xd35+210-0xdff)]==ipv6_hdr(DATARMNET543491eb0f)->nexthdr)&&(
+DATARMNET63b1a086d5->DATARMNETdfd47b00ff[9]==tcp_hdr(DATARMNET543491eb0f)->
+source)&&(DATARMNET63b1a086d5->DATARMNETdfd47b00ff[(0xd27+224-0xdfd)]==tcp_hdr(
+DATARMNET543491eb0f)->dest)&&(DATARMNET63b1a086d5->DATARMNET4b119c4ff3==
+(0xd20+231-0xdfc)))return(0xd2d+202-0xdf7);}return(0xd26+209-0xdf6);}void 
+DATARMNETe70d5ec61a(struct tcphdr*DATARMNET2e7cc88971,struct sk_buff*
+DATARMNET543491eb0f){int DATARMNET76bafbc6ce=(0xd2d+202-0xdf7);u32 hash;unsigned
+ long DATARMNETfb0677cc3c;struct DATARMNETb477d446e7*DATARMNET63b1a086d5,*
+DATARMNET0386f6f82a=NULL;if(!configure_knob1&&!configure_knob2)return;hash=
+DATARMNET233bccd449(DATARMNET543491eb0f,&DATARMNET76bafbc6ce,(0xd26+209-0xdf6),
+(0xd2d+202-0xdf7));if(!DATARMNET76bafbc6ce)return;spin_lock_irqsave(&
+DATARMNETcf56327171,DATARMNETfb0677cc3c);hash_for_each_possible(
+DATARMNET031f18e039,DATARMNET63b1a086d5,hlist,hash){if(!DATARMNET94d0b7e790(
+DATARMNET63b1a086d5,DATARMNET543491eb0f)){DATARMNET0386f6f82a=
+DATARMNET63b1a086d5;break;}DATARMNET0386f6f82a=NULL;}if(!DATARMNET0386f6f82a){
+spin_unlock_irqrestore(&DATARMNETcf56327171,DATARMNETfb0677cc3c);return;}if(
+DATARMNET63b1a086d5){hash_del(&DATARMNET63b1a086d5->hlist);list_add_tail(&
+DATARMNET63b1a086d5->list,&DATARMNETc588a190d4);}spin_unlock_irqrestore(&
+DATARMNETcf56327171,DATARMNETfb0677cc3c);DATARMNET9d42c8a184(DATARMNET2e7cc88971
+);}static void DATARMNET9eb31df630(struct DATARMNETb477d446e7*
+DATARMNET63b1a086d5,struct sk_buff*DATARMNET543491eb0f){if(DATARMNET543491eb0f->
+protocol==htons(ETH_P_IP)){DATARMNET63b1a086d5->DATARMNETdfd47b00ff[
+(0xd2d+202-0xdf7)]=ip_hdr(DATARMNET543491eb0f)->daddr;DATARMNET63b1a086d5->
+DATARMNETdfd47b00ff[(0xd26+209-0xdf6)]=ip_hdr(DATARMNET543491eb0f)->saddr;
+DATARMNET63b1a086d5->DATARMNETdfd47b00ff[(0xd1f+216-0xdf5)]=ip_hdr(
+DATARMNET543491eb0f)->protocol;DATARMNET63b1a086d5->DATARMNETdfd47b00ff[
+(0xd18+223-0xdf4)]=tcp_hdr(DATARMNET543491eb0f)->dest;DATARMNET63b1a086d5->
+DATARMNETdfd47b00ff[(0xd11+230-0xdf3)]=tcp_hdr(DATARMNET543491eb0f)->source;
+DATARMNET63b1a086d5->DATARMNET4b119c4ff3=(0xd0a+237-0xdf2);}else if(
+DATARMNET543491eb0f->protocol==htons(ETH_P_IPV6)){memcpy(&DATARMNET63b1a086d5->
+DATARMNETdfd47b00ff[(0xd2d+202-0xdf7)],ipv6_hdr(DATARMNET543491eb0f)->daddr.
+s6_addr,sizeof(struct in6_addr));memcpy(&DATARMNET63b1a086d5->
+DATARMNETdfd47b00ff[(0xd0a+237-0xdf2)],ipv6_hdr(DATARMNET543491eb0f)->saddr.
+s6_addr,sizeof(struct in6_addr));DATARMNET63b1a086d5->DATARMNETdfd47b00ff[
+(0xd35+210-0xdff)]=ipv6_hdr(DATARMNET543491eb0f)->nexthdr;DATARMNET63b1a086d5->
+DATARMNETdfd47b00ff[9]=tcp_hdr(DATARMNET543491eb0f)->dest;DATARMNET63b1a086d5->
+DATARMNETdfd47b00ff[(0xd27+224-0xdfd)]=tcp_hdr(DATARMNET543491eb0f)->source;
+DATARMNET63b1a086d5->DATARMNET4b119c4ff3=(0xd20+231-0xdfc);}}void 
+DATARMNET6ab362e985(struct sk_buff*DATARMNET543491eb0f){int DATARMNET76bafbc6ce=
+(0xd2d+202-0xdf7);u32 hash;unsigned long DATARMNETfb0677cc3c;struct 
+DATARMNETb477d446e7*DATARMNET63b1a086d5;struct hlist_node*DATARMNET0386f6f82a;
+int DATARMNETae0201901a;struct net_device*dev;if(!configure_knob1&&!
+configure_knob2)return;if(!DATARMNET543491eb0f->skb_iif)return;dev=
+__dev_get_by_index(&init_net,DATARMNET543491eb0f->skb_iif);if(!dev)return;hash=
+DATARMNET233bccd449(DATARMNET543491eb0f,&DATARMNET76bafbc6ce,(0xd2d+202-0xdf7),
+(0xd26+209-0xdf6));if(!DATARMNET76bafbc6ce)return;spin_lock_irqsave(&
+DATARMNETcf56327171,DATARMNETfb0677cc3c);DATARMNET63b1a086d5=
+list_first_entry_or_null(&DATARMNETc588a190d4,struct DATARMNETb477d446e7,list);
+if(DATARMNET63b1a086d5){list_del(&DATARMNET63b1a086d5->list);DATARMNET63b1a086d5
+->hash=hash;DATARMNET9eb31df630(DATARMNET63b1a086d5,DATARMNET543491eb0f);
+hash_add(DATARMNET031f18e039,&DATARMNET63b1a086d5->hlist,DATARMNET63b1a086d5->
+hash);}else{hash_for_each_safe(DATARMNET031f18e039,DATARMNETae0201901a,
+DATARMNET0386f6f82a,DATARMNET63b1a086d5,hlist){hash_del(&DATARMNET63b1a086d5->
+hlist);DATARMNET63b1a086d5->hash=hash;DATARMNET9eb31df630(DATARMNET63b1a086d5,
+DATARMNET543491eb0f);hash_add(DATARMNET031f18e039,&DATARMNET63b1a086d5->hlist,
+DATARMNET63b1a086d5->hash);break;}}spin_unlock_irqrestore(&DATARMNETcf56327171,
+DATARMNETfb0677cc3c);}void DATARMNET136e008d70(u8 DATARMNET07b1a05079,u64 
+DATARMNETcc6099cb14){struct net_device*dev=dev_get_by_name(&init_net,
+"rmnet_ipa0");struct sk_buff*DATARMNET543491eb0f;if(!dev)return;if(
+DATARMNET07b1a05079==DATARMNETc99cb98651){struct 
+rmnet_map_control_command_header*DATARMNETb87c07b92a;struct DATARMNETb0eda9d28e*
+DATARMNETcd32395e82;struct rmnet_map_header*DATARMNETf937c77d8f;
+DATARMNET543491eb0f=alloc_skb((0xeb7+1158-0x132d),GFP_ATOMIC);if(!
+DATARMNET543491eb0f)goto DATARMNETaabe3a05f8;skb_put(DATARMNET543491eb0f,
+(0xeb7+1158-0x132d));memset(DATARMNET543491eb0f->data,(0xd2d+202-0xdf7),
+(0xeb7+1158-0x132d));DATARMNETf937c77d8f=(struct rmnet_map_header*)
+DATARMNET543491eb0f->data;DATARMNETf937c77d8f->cd_bit=(0xd26+209-0xdf6);
+DATARMNETf937c77d8f->pkt_len=htons(DATARMNETfc6d4bac8a);DATARMNETb87c07b92a=(
+struct rmnet_map_control_command_header*)(DATARMNET543491eb0f->data+sizeof(*
+DATARMNETf937c77d8f));DATARMNETb87c07b92a->command_name=DATARMNETc152fdcc34;
+DATARMNETcd32395e82=(struct DATARMNETb0eda9d28e*)(DATARMNET543491eb0f->data+
+sizeof(*DATARMNETf937c77d8f)+sizeof(*DATARMNETb87c07b92a));DATARMNETcd32395e82->
+DATARMNETba8c503d04=DATARMNET7bd625a8c0;DATARMNETcd32395e82->DATARMNETc59f891d69
+=!DATARMNETcc6099cb14;DATARMNET543491eb0f->dev=dev;DATARMNET543491eb0f->protocol
+=htons(ETH_P_MAP);rmnet_qmap_send(DATARMNET543491eb0f,RMNET_CH_CTL,false);}
+DATARMNETaabe3a05f8:dev_put(dev);}static const struct 
+rmnet_module_hook_register_info DATARMNET0762b4f121[]={{.hooknum=
+RMNET_MODULE_HOOK_PERF_TETHER_INGRESS,.func=DATARMNETe70d5ec61a,},{.hooknum=
+RMNET_MODULE_HOOK_PERF_TETHER_EGRESS,.func=DATARMNET6ab362e985,},{.hooknum=
+RMNET_MODULE_HOOK_PERF_TETHER_CMD,.func=DATARMNET136e008d70,},};void 
+DATARMNET5fe3ffe2ab(void){rcu_assign_pointer(rmnet_perf_tether_ingress_hook,
+DATARMNETe70d5ec61a);rcu_assign_pointer(rmnet_perf_tether_egress_hook,
+DATARMNET6ab362e985);rcu_assign_pointer(rmnet_perf_tether_cmd_hook,
+DATARMNET136e008d70);rmnet_module_hook_register(DATARMNET0762b4f121,ARRAY_SIZE(
+DATARMNET0762b4f121));}void DATARMNET229327cbd2(void){rcu_assign_pointer(
+rmnet_perf_tether_ingress_hook,NULL);rcu_assign_pointer(
+rmnet_perf_tether_egress_hook,NULL);rcu_assign_pointer(
+rmnet_perf_tether_cmd_hook,NULL);rmnet_module_hook_unregister(
+DATARMNET0762b4f121,ARRAY_SIZE(DATARMNET0762b4f121));}static int 
+DATARMNETaa549ce89a(void){int DATARMNETefc9df3df2;DATARMNET8a1e9920bf=kzalloc(
+sizeof(*DATARMNET8a1e9920bf),GFP_KERNEL);if(!DATARMNET8a1e9920bf){pr_err(
+"\x25\x73\x28\x29\x3a\x20\x52\x65\x73\x6f\x75\x72\x63\x65\x20\x61\x6c\x6c\x6f\x63\x61\x74\x69\x6f\x6e\x20\x66\x61\x69\x6c\x65\x64" "\n"
+,__func__);return-(0xd26+209-0xdf6);}DATARMNET8a1e9920bf->DATARMNETd0ef85194f++;
+for(DATARMNETefc9df3df2=(0xd2d+202-0xdf7);DATARMNETefc9df3df2<
+DATARMNETd063f2edce;DATARMNETefc9df3df2++){struct DATARMNETb477d446e7*
+DATARMNET63b1a086d5;DATARMNET63b1a086d5=kzalloc(sizeof(*DATARMNET63b1a086d5),
+GFP_ATOMIC);if(!DATARMNET63b1a086d5)continue;INIT_LIST_HEAD(&DATARMNET63b1a086d5
+->list);INIT_HLIST_NODE(&DATARMNET63b1a086d5->hlist);list_add_tail(&
+DATARMNET63b1a086d5->list,&DATARMNETc588a190d4);}DATARMNET5fe3ffe2ab();return
+(0xd2d+202-0xdf7);}static void DATARMNET2b8220b2f3(void){struct 
+DATARMNETb477d446e7*DATARMNET63b1a086d5;struct hlist_node*DATARMNET0386f6f82a;
+int DATARMNETae0201901a;hash_for_each_safe(DATARMNET031f18e039,
+DATARMNETae0201901a,DATARMNET0386f6f82a,DATARMNET63b1a086d5,hlist){hash_del(&
+DATARMNET63b1a086d5->hlist);kfree(DATARMNET63b1a086d5);}}static void 
+DATARMNET66219231cc(void){struct DATARMNETb477d446e7*DATARMNET63b1a086d5,*
+DATARMNET2133db01db;list_for_each_entry_safe(DATARMNET63b1a086d5,
+DATARMNET2133db01db,&DATARMNETc588a190d4,list){list_del(&DATARMNET63b1a086d5->
+list);kfree(DATARMNET63b1a086d5);}}static void DATARMNET3ece352201(void){
+DATARMNET229327cbd2();DATARMNET66219231cc();DATARMNET2b8220b2f3();kfree(
+DATARMNET8a1e9920bf);DATARMNET8a1e9920bf=NULL;}static int DATARMNET6e31e62d2e(
+struct notifier_block*DATARMNET272c159b3c,unsigned long DATARMNET4abd997295,void
+*DATARMNET3f254bae11){struct net_device*DATARMNET00dcb79bc4=
+netdev_notifier_info_to_dev(DATARMNET3f254bae11);int DATARMNETb14e52a504;(void)
+DATARMNET272c159b3c;if(!DATARMNET00dcb79bc4||strncmp(DATARMNET00dcb79bc4->name,
+"\x72\x6d\x6e\x65\x74\x5f\x64\x61\x74\x61",(0xd27+224-0xdfd)))goto 
+DATARMNETaabe3a05f8;switch(DATARMNET4abd997295){case NETDEV_REGISTER:if(
+DATARMNET8a1e9920bf){DATARMNET8a1e9920bf->DATARMNETd0ef85194f++;goto 
+DATARMNETaabe3a05f8;}pr_info(
+"\x25\x73\x28\x29\x3a\x20\x49\x6e\x69\x74\x69\x61\x6c\x69\x7a\x69\x6e\x67\x20\x6f\x6e\x20\x64\x65\x76\x69\x63\x65\x20\x25\x73" "\n"
+,__func__,DATARMNET00dcb79bc4->name);DATARMNETb14e52a504=DATARMNETaa549ce89a();
+if(DATARMNETb14e52a504){pr_err(
+"\x25\x73\x28\x29\x3a\x20\x49\x6e\x69\x74\x69\x61\x6c\x69\x7a\x61\x74\x69\x6f\x6e\x20\x66\x61\x69\x6c\x65\x64" "\n"
+,__func__);goto DATARMNETaabe3a05f8;}break;case NETDEV_UNREGISTER:if(!
+DATARMNET8a1e9920bf)goto DATARMNETaabe3a05f8;if(--DATARMNET8a1e9920bf->
+DATARMNETd0ef85194f)goto DATARMNETaabe3a05f8;pr_info(
+"\x25\x73\x28\x29\x3a\x20\x55\x6e\x69\x6e\x69\x74\x69\x61\x6c\x69\x7a\x69\x6e\x67\x20\x6f\x6e\x20\x64\x65\x76\x69\x63\x65\x20\x25\x73" "\n"
+,__func__,DATARMNET00dcb79bc4->name);DATARMNET3ece352201();break;}
+DATARMNETaabe3a05f8:return NOTIFY_DONE;}static struct notifier_block 
+DATARMNETd9d8382fca={.notifier_call=DATARMNET6e31e62d2e,.priority=
+(0xd18+223-0xdf4),};static int __init DATARMNET5e4be08a32(void){pr_info(
+"\x25\x73\x28\x29\x3a\x20\x4c\x6f\x61\x64\x69\x6e\x67" "\n",__func__);return 
+register_netdevice_notifier(&DATARMNETd9d8382fca);}static void __exit 
+DATARMNET50e3d76d94(void){pr_info(
+"\x25\x73\x28\x29\x3a\x20\x65\x78\x69\x74\x69\x6e\x67" "\n",__func__);
+unregister_netdevice_notifier(&DATARMNETd9d8382fca);}module_init(
+DATARMNET5e4be08a32);module_exit(DATARMNET50e3d76d94);

+ 28 - 0
qcom/opensource/datarmnet-ext/sch/Android.mk

@@ -0,0 +1,28 @@
+ifeq ($(TARGET_DATARMNET_EXT_ENABLE), true)
+ifneq ($(TARGET_BOARD_AUTO),true)
+ifneq ($(TARGET_BOARD_PLATFORM),qssi)
+
+RMNET_SCH_DLKM_PLATFORMS_LIST := pineapple
+RMNET_SCH_DLKM_PLATFORMS_LIST += pitti
+RMNET_SCH_DLKM_PLATFORMS_LIST += volcano
+
+ifeq ($(call is-board-platform-in-list, $(RMNET_SCH_DLKM_PLATFORMS_LIST)),true)
+LOCAL_PATH := $(call my-dir)
+include $(CLEAR_VARS)
+
+#Enabling BAZEL
+LOCAL_MODULE_DDK_BUILD := true
+
+LOCAL_MODULE_PATH := $(KERNEL_MODULES_OUT)
+
+LOCAL_MODULE := rmnet_sch.ko
+LOCAL_SRC_FILES := $(wildcard $(LOCAL_PATH)/**/*) $(wildcard $(LOCAL_PATH)/*)
+
+DLKM_DIR := $(TOP)/device/qcom/common/dlkm
+
+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
+endif #End of Check for datarmnet

+ 14 - 0
qcom/opensource/datarmnet-ext/sch/BUILD.bazel

@@ -0,0 +1,14 @@
+load(":define_sch.bzl", "define_sch")
+load("//build/kernel/kleaf:kernel.bzl", "ddk_module")
+
+define_sch("pineapple", "consolidate")
+
+define_sch("pineapple", "gki")
+
+define_sch("pitti", "consolidate")
+
+define_sch("pitti", "gki")
+
+define_sch("volcano", "consolidate")
+
+define_sch("volcano", "gki")

+ 4 - 0
qcom/opensource/datarmnet-ext/sch/Kbuild

@@ -0,0 +1,4 @@
+obj-m += rmnet_sch.o
+ccflags-y := $(call cc-option,-Wno-misleading-indentation)
+rmnet_sch-y := \
+        rmnet_sch_main.o \

+ 9 - 0
qcom/opensource/datarmnet-ext/sch/Kconfig

@@ -0,0 +1,9 @@
+#
+# RMNET_SCH driver
+#
+
+menuconfig RMNET_SCH
+    tristate "Rmnet SCH Qdisc support"
+    default m
+    ---help---
+        QDisc module for RmNet driver

+ 15 - 0
qcom/opensource/datarmnet-ext/sch/Makefile

@@ -0,0 +1,15 @@
+#By default build for CLD
+RMNET_SCH_SELECT := CONFIG_RMNET_SCH=m
+KBUILD_OPTIONS += $(RMNET_SCH_SELECT)
+KBUILD_OPTIONS += $(KBUILD_EXTRA) # Extra config if any
+
+M ?= $(shell pwd)
+
+all:
+	$(MAKE) -C $(KERNEL_SRC) M=$(M) modules $(KBUILD_OPTIONS)
+
+modules_install:
+	$(MAKE) INSTALL_MOD_STRIP=1 -C $(KERNEL_SRC) M=$(M) modules_install
+
+clean:
+	$(MAKE) -C $(KERNEL_SRC) M=$(M) clean

+ 29 - 0
qcom/opensource/datarmnet-ext/sch/define_sch.bzl

@@ -0,0 +1,29 @@
+load("//build/bazel_common_rules/dist:dist.bzl", "copy_to_dist_dir")
+load("//build/kernel/kleaf:kernel.bzl", "ddk_module")
+
+def define_sch(target, variant):
+    kernel_build_variant = "{}_{}".format(target, variant)
+    include_base = "../../../{}".format(native.package_name())
+
+    ddk_module(
+        name = "{}_sch".format(kernel_build_variant),
+        out = "rmnet_sch.ko",
+        srcs = [
+            "rmnet_sch_main.c",
+        ],
+        deps = ["//msm-kernel:all_headers"],
+        copts = ["-Wno-misleading-indentation"],
+        kernel_build = "//msm-kernel:{}".format(kernel_build_variant),
+    )
+
+    copy_to_dist_dir(
+        name = "{}_datarment-ext_dist".format(kernel_build_variant),
+        data = [
+            ":{}_sch".format(kernel_build_variant),
+        ],
+        dist_dir = "out/target/product/{}/dlkm/lib/modules/".format(target),
+        flat = True,
+        wipe_dist_dir = False,
+        allow_duplicate_filenames = False,
+        mode_overrides = {"**/*": "644"},
+    )

+ 151 - 0
qcom/opensource/datarmnet-ext/sch/rmnet_sch_main.c

@@ -0,0 +1,151 @@
+/* Copyright (c) 2021-2022 Qualcomm Innovation Center, Inc. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 and
+ * only version 2 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ */
+
+#include <linux/module.h>
+#include <linux/types.h>
+#include <linux/kernel.h>
+#include <linux/string.h>
+#include <linux/errno.h>
+#include <linux/skbuff.h>
+#include <linux/rtnetlink.h>
+#include <net/pkt_sched.h>
+static char*verinfo[]={"\x62\x31\x30\x66\x32\x65\x61\x32",
+"\x65\x36\x33\x37\x31\x64\x34\x30","\x37\x34\x31\x35\x39\x32\x31\x63",
+"\x61\x65\x32\x34\x34\x61\x39\x64"};module_param_array(verinfo,charp,NULL,
+(0xcb7+5769-0x221c));MODULE_PARM_DESC(verinfo,
+"\x56\x65\x72\x73\x69\x6f\x6e\x20\x6f\x66\x20\x74\x68\x65\x20\x64\x72\x69\x76\x65\x72"
+);static const char*DATARMNETf1bb41174a="\x31\x2e\x32";
+#define DATARMNETe632b2e0b0 (0xd11+230-0xdf3)
+static const u8 DATARMNET93bdeed8cb[TC_PRIO_MAX+(0xd26+209-0xdf6)]={
+(0xd18+223-0xdf4),(0xd18+223-0xdf4),(0xd18+223-0xdf4),(0xd18+223-0xdf4),
+(0xd18+223-0xdf4),(0xd18+223-0xdf4),(0xd2d+202-0xdf7),(0xd26+209-0xdf6),
+(0xd1f+216-0xdf5),(0xd18+223-0xdf4),(0xd18+223-0xdf4),(0xd18+223-0xdf4),
+(0xd18+223-0xdf4),(0xd18+223-0xdf4),(0xd18+223-0xdf4),(0xd18+223-0xdf4)};static 
+const int DATARMNET91bbdde74c[DATARMNETe632b2e0b0]={(0xbf7+4421-0x1c3c)*
+(0xdf7+2629-0x143c),(0xef7+694-0x112d)*(0xdf7+2629-0x143c),(0xef7+1142-0x132d)*
+(0xdf7+2629-0x143c),(0xeb7+1174-0x132d)*(0xdf7+2629-0x143c)};static const int 
+DATARMNET9dd1382d86[DATARMNETe632b2e0b0]={(0xd35+210-0xdff),(0xd03+244-0xdf1),
+(0xd11+230-0xdf3),(0xd1f+216-0xdf5)};static const int DATARMNET14ed95ab67[
+DATARMNETe632b2e0b0]={(0xd11+230-0xdf3),(0xd18+223-0xdf4),(0xd1f+216-0xdf5),
+(0xd26+209-0xdf6)};struct DATARMNET93da852cc2{struct qdisc_skb_head q;int 
+DATARMNET1de7b3d891;int DATARMNETf9afebb887;unsigned int DATARMNETb93c9b44d9;
+unsigned int DATARMNET04fa439380;};struct DATARMNET74e95d25df{struct 
+DATARMNET93da852cc2 DATARMNETb4180393e4[DATARMNETe632b2e0b0];};static int 
+DATARMNETdaae0b9ea8(struct DATARMNET74e95d25df*DATARMNETe823dcf978){int 
+DATARMNET70fa801d65=DATARMNETe632b2e0b0;int DATARMNET3c5d4329d8=
+DATARMNETe632b2e0b0;int DATARMNET2372d14a3d,DATARMNET713b43476b,
+DATARMNETdc41089b89=-(0xd26+209-0xdf6);for(DATARMNET2372d14a3d=(0xd2d+202-0xdf7)
+;DATARMNET2372d14a3d<DATARMNETe632b2e0b0;DATARMNET2372d14a3d++){if(
+DATARMNETe823dcf978->DATARMNETb4180393e4[DATARMNET2372d14a3d].q.qlen>
+DATARMNETe823dcf978->DATARMNETb4180393e4[DATARMNET2372d14a3d].
+DATARMNET04fa439380){DATARMNET713b43476b=DATARMNETe823dcf978->
+DATARMNETb4180393e4[DATARMNET2372d14a3d].q.qlen-DATARMNETe823dcf978->
+DATARMNETb4180393e4[DATARMNET2372d14a3d].DATARMNET04fa439380;if(
+DATARMNET713b43476b>=DATARMNETdc41089b89){DATARMNETdc41089b89=
+DATARMNET713b43476b;DATARMNET70fa801d65=DATARMNET2372d14a3d;}}if(
+DATARMNETe823dcf978->DATARMNETb4180393e4[DATARMNET2372d14a3d].q.qlen>
+DATARMNETe823dcf978->DATARMNETb4180393e4[DATARMNET2372d14a3d].
+DATARMNETb93c9b44d9)DATARMNET3c5d4329d8=DATARMNET2372d14a3d;}if(
+DATARMNET70fa801d65<DATARMNETe632b2e0b0)return DATARMNET70fa801d65;return 
+DATARMNET3c5d4329d8;}static inline void DATARMNET8c1d8c9f65(struct 
+DATARMNET74e95d25df*DATARMNETe823dcf978,int DATARMNET2372d14a3d){
+DATARMNETe823dcf978->DATARMNETb4180393e4[DATARMNET2372d14a3d].
+DATARMNET1de7b3d891=DATARMNET9dd1382d86[DATARMNET2372d14a3d];DATARMNETe823dcf978
+->DATARMNETb4180393e4[DATARMNET2372d14a3d].DATARMNETf9afebb887=
+DATARMNET91bbdde74c[DATARMNET2372d14a3d];}static inline void DATARMNET60cff0042c
+(struct DATARMNET74e95d25df*DATARMNETe823dcf978,int DATARMNET2372d14a3d,unsigned
+ int DATARMNETf9d25d31ff){DATARMNETe823dcf978->DATARMNETb4180393e4[
+DATARMNET2372d14a3d].DATARMNETb93c9b44d9=DATARMNETf9d25d31ff/(0xd27+224-0xdfd)*
+DATARMNET14ed95ab67[DATARMNET2372d14a3d];DATARMNETe823dcf978->
+DATARMNETb4180393e4[DATARMNET2372d14a3d].DATARMNET04fa439380=DATARMNETe823dcf978
+->DATARMNETb4180393e4[DATARMNET2372d14a3d].DATARMNETb93c9b44d9<<
+(0xd26+209-0xdf6);}static int DATARMNET3a797cc4e9(struct sk_buff*
+DATARMNET543491eb0f,struct Qdisc*DATARMNET9b0193c8c4,struct sk_buff**
+DATARMNET6af05df5b3){struct DATARMNET74e95d25df*DATARMNETe823dcf978=qdisc_priv(
+DATARMNET9b0193c8c4);unsigned int DATARMNET5affe290b8=qdisc_pkt_len(
+DATARMNET543491eb0f);int DATARMNETba251b7c9f;int DATARMNETa9b7aedc43;struct 
+sk_buff*DATARMNET7495e55ca2;DATARMNETba251b7c9f=DATARMNET93bdeed8cb[
+DATARMNET543491eb0f->priority&TC_PRIO_MAX];if(unlikely(DATARMNET9b0193c8c4->q.
+qlen>=qdisc_dev(DATARMNET9b0193c8c4)->tx_queue_len)){DATARMNETa9b7aedc43=
+DATARMNETdaae0b9ea8(DATARMNETe823dcf978);if(DATARMNETa9b7aedc43<
+DATARMNETe632b2e0b0&&DATARMNETa9b7aedc43!=DATARMNETba251b7c9f){
+DATARMNET7495e55ca2=__qdisc_dequeue_head(&DATARMNETe823dcf978->
+DATARMNETb4180393e4[DATARMNETa9b7aedc43].q);if(likely(DATARMNET7495e55ca2)){
+DATARMNET9b0193c8c4->qstats.backlog-=qdisc_pkt_len(DATARMNET7495e55ca2);
+DATARMNET9b0193c8c4->q.qlen--;qdisc_drop(DATARMNET7495e55ca2,DATARMNET9b0193c8c4
+,DATARMNET6af05df5b3);}}else{return qdisc_drop(DATARMNET543491eb0f,
+DATARMNET9b0193c8c4,DATARMNET6af05df5b3);}}__qdisc_enqueue_tail(
+DATARMNET543491eb0f,&DATARMNETe823dcf978->DATARMNETb4180393e4[
+DATARMNETba251b7c9f].q);qdisc_update_stats_at_enqueue(DATARMNET9b0193c8c4,
+DATARMNET5affe290b8);return NET_XMIT_SUCCESS;}static u8 DATARMNETf9ac3daa83(
+struct DATARMNET74e95d25df*DATARMNETe823dcf978){int DATARMNET2372d14a3d,
+DATARMNET70fa801d65=DATARMNETe632b2e0b0;for(DATARMNET2372d14a3d=
+(0xd2d+202-0xdf7);DATARMNET2372d14a3d<DATARMNETe632b2e0b0;DATARMNET2372d14a3d++)
+{if(!DATARMNETe823dcf978->DATARMNETb4180393e4[DATARMNET2372d14a3d].q.qlen)
+continue;if(DATARMNETe823dcf978->DATARMNETb4180393e4[DATARMNET2372d14a3d].
+DATARMNET1de7b3d891<=(0xd2d+202-0xdf7)||DATARMNETe823dcf978->DATARMNETb4180393e4
+[DATARMNET2372d14a3d].DATARMNETf9afebb887<=(0xd2d+202-0xdf7)){if(
+DATARMNET2372d14a3d<DATARMNET70fa801d65)DATARMNET70fa801d65=DATARMNET2372d14a3d;
+continue;}return DATARMNET2372d14a3d;}for(DATARMNET2372d14a3d=(0xd2d+202-0xdf7);
+DATARMNET2372d14a3d<DATARMNETe632b2e0b0;DATARMNET2372d14a3d++)
+DATARMNET8c1d8c9f65(DATARMNETe823dcf978,DATARMNET2372d14a3d);return 
+DATARMNET70fa801d65;}static struct sk_buff*DATARMNET11bbc6360d(struct Qdisc*
+DATARMNET9b0193c8c4){struct DATARMNET74e95d25df*DATARMNETe823dcf978=qdisc_priv(
+DATARMNET9b0193c8c4);struct sk_buff*DATARMNET543491eb0f=NULL;u8 
+DATARMNET2372d14a3d;DATARMNET2372d14a3d=DATARMNETf9ac3daa83(DATARMNETe823dcf978)
+;if(DATARMNET2372d14a3d<DATARMNETe632b2e0b0){DATARMNET543491eb0f=
+__qdisc_dequeue_head(&DATARMNETe823dcf978->DATARMNETb4180393e4[
+DATARMNET2372d14a3d].q);if(likely(DATARMNET543491eb0f)){DATARMNETe823dcf978->
+DATARMNETb4180393e4[DATARMNET2372d14a3d].DATARMNET1de7b3d891--;
+DATARMNETe823dcf978->DATARMNETb4180393e4[DATARMNET2372d14a3d].
+DATARMNETf9afebb887-=qdisc_pkt_len(DATARMNET543491eb0f);
+qdisc_update_stats_at_dequeue(DATARMNET9b0193c8c4,DATARMNET543491eb0f);}}return 
+DATARMNET543491eb0f;}static struct sk_buff*DATARMNET5842e6aac7(struct Qdisc*
+DATARMNET9b0193c8c4){struct DATARMNET74e95d25df*DATARMNETe823dcf978=qdisc_priv(
+DATARMNET9b0193c8c4);struct sk_buff*DATARMNET543491eb0f=NULL;u8 
+DATARMNET2372d14a3d;DATARMNET2372d14a3d=DATARMNETf9ac3daa83(DATARMNETe823dcf978)
+;if(DATARMNET2372d14a3d<DATARMNETe632b2e0b0)DATARMNET543491eb0f=
+DATARMNETe823dcf978->DATARMNETb4180393e4[DATARMNET2372d14a3d].q.head;return 
+DATARMNET543491eb0f;}static int DATARMNET757a7de682(struct Qdisc*
+DATARMNET9b0193c8c4,struct nlattr*DATARMNET8bdeb8bf5c,struct netlink_ext_ack*
+DATARMNET79a1f177ed){struct DATARMNET74e95d25df*DATARMNETe823dcf978=qdisc_priv(
+DATARMNET9b0193c8c4);int DATARMNET2372d14a3d;for(DATARMNET2372d14a3d=
+(0xd2d+202-0xdf7);DATARMNET2372d14a3d<DATARMNETe632b2e0b0;DATARMNET2372d14a3d++)
+{DATARMNET8c1d8c9f65(DATARMNETe823dcf978,DATARMNET2372d14a3d);
+DATARMNET60cff0042c(DATARMNETe823dcf978,DATARMNET2372d14a3d,qdisc_dev(
+DATARMNET9b0193c8c4)->tx_queue_len);}DATARMNET9b0193c8c4->flags|=
+TCQ_F_CAN_BYPASS;return(0xd2d+202-0xdf7);}static void DATARMNET9593ab9587(struct
+ Qdisc*DATARMNET9b0193c8c4){struct DATARMNET74e95d25df*DATARMNETe823dcf978=
+qdisc_priv(DATARMNET9b0193c8c4);int DATARMNET2372d14a3d;for(DATARMNET2372d14a3d=
+(0xd2d+202-0xdf7);DATARMNET2372d14a3d<DATARMNETe632b2e0b0;DATARMNET2372d14a3d++)
+{kfree_skb_list(DATARMNETe823dcf978->DATARMNETb4180393e4[DATARMNET2372d14a3d].q.
+head);DATARMNETe823dcf978->DATARMNETb4180393e4[DATARMNET2372d14a3d].q.head=NULL;
+DATARMNETe823dcf978->DATARMNETb4180393e4[DATARMNET2372d14a3d].q.tail=NULL;
+DATARMNETe823dcf978->DATARMNETb4180393e4[DATARMNET2372d14a3d].q.qlen=
+(0xd2d+202-0xdf7);DATARMNET8c1d8c9f65(DATARMNETe823dcf978,DATARMNET2372d14a3d);
+DATARMNET60cff0042c(DATARMNETe823dcf978,DATARMNET2372d14a3d,qdisc_dev(
+DATARMNET9b0193c8c4)->tx_queue_len);}}static int DATARMNET6647342968(struct 
+Qdisc*DATARMNET9b0193c8c4,unsigned int qlen){struct DATARMNET74e95d25df*
+DATARMNETe823dcf978=qdisc_priv(DATARMNET9b0193c8c4);int DATARMNET2372d14a3d;for(
+DATARMNET2372d14a3d=(0xd2d+202-0xdf7);DATARMNET2372d14a3d<DATARMNETe632b2e0b0;
+DATARMNET2372d14a3d++)DATARMNET60cff0042c(DATARMNETe823dcf978,
+DATARMNET2372d14a3d,qlen);return(0xd2d+202-0xdf7);}static struct Qdisc_ops 
+DATARMNET9afaec21de __read_mostly={.id="\x72\x6d\x6e\x65\x74\x5f\x73\x63\x68",.
+priv_size=sizeof(struct DATARMNET74e95d25df),.enqueue=DATARMNET3a797cc4e9,.
+dequeue=DATARMNET11bbc6360d,.peek=DATARMNET5842e6aac7,.init=DATARMNET757a7de682,
+.reset=DATARMNET9593ab9587,.change_tx_queue_len=DATARMNET6647342968,.owner=
+THIS_MODULE,};static int __init DATARMNETe97da0a844(void){pr_info(
+"\x73\x63\x68\x3a\x20\x69\x6e\x69\x74\x20\x28\x25\x73\x29" "\n",
+DATARMNETf1bb41174a);return register_qdisc(&DATARMNET9afaec21de);}static void 
+__exit DATARMNET1dc9099e88(void){unregister_qdisc(&DATARMNET9afaec21de);}
+MODULE_LICENSE("\x47\x50\x4c\x20\x76\x32");module_init(DATARMNETe97da0a844);
+module_exit(DATARMNET1dc9099e88);

+ 46 - 0
qcom/opensource/datarmnet-ext/shs/Android.mk

@@ -0,0 +1,46 @@
+ifeq ($(TARGET_DATARMNET_EXT_ENABLE), true)
+ifneq ($(TARGET_BOARD_PLATFORM),qssi)
+RMNET_SHS_DLKM_PLATFORMS_LIST := pineapple
+RMNET_SHS_DLKM_PLATFORMS_LIST += blair
+RMNET_SHS_DLKM_PLATFORMS_LIST += pitti
+RMNET_SHS_DLKM_PLATFORMS_LIST += volcano
+
+ifeq ($(call is-board-platform-in-list, $(RMNET_SHS_DLKM_PLATFORMS_LIST)),true)
+#Make file to create RMNET_SHS DLKM
+LOCAL_PATH := $(call my-dir)
+include $(CLEAR_VARS)
+
+LOCAL_CFLAGS := -Wno-macro-redefined -Wno-unused-function -Wall -Werror
+LOCAL_CLANG :=true
+
+#Enabling BAZEL
+LOCAL_MODULE_DDK_BUILD := true
+
+LOCAL_MODULE_PATH := $(KERNEL_MODULES_OUT)
+LOCAL_MODULE := rmnet_shs.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
+
+#Must be built after the core rmnet module
+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
+
+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 datarmnet

+ 17 - 0
qcom/opensource/datarmnet-ext/shs/BUILD.bazel

@@ -0,0 +1,17 @@
+load(":define_shs.bzl", "define_shs")
+
+define_shs("pineapple", "consolidate")
+
+define_shs("pineapple", "gki")
+
+define_shs("blair", "consolidate")
+
+define_shs("blair", "gki")
+
+define_shs("pitti", "consolidate")
+
+define_shs("pitti", "gki")
+
+define_shs("volcano", "consolidate")
+
+define_shs("volcano", "gki")

+ 13 - 0
qcom/opensource/datarmnet-ext/shs/Kbuild

@@ -0,0 +1,13 @@
+obj-m += rmnet_shs.o
+#Need core headers
+ccflags-y := -I$(RMNET_CORE_INC_DIR) \
+             $(call cc-option,-Wno-misleading-indentation)
+rmnet_shs-y :=  rmnet_shs_config.o \
+		rmnet_shs_ll.o \
+		rmnet_shs_main.o \
+		rmnet_shs_common.o \
+		rmnet_shs_wq.o \
+		rmnet_shs_freq.o \
+		rmnet_shs_wq_mem.o \
+		rmnet_shs_wq_genl.o \
+		rmnet_shs_modules.o

+ 10 - 0
qcom/opensource/datarmnet-ext/shs/Kconfig

@@ -0,0 +1,10 @@
+#
+# RMNET_SHS driver
+#
+
+menuconfig RMNET_SHS
+    tristate "Rmnet SHS driver"
+    default m
+    depends on RMNET_CORE
+    ---help---
+        performance mode of rmnet driver

+ 15 - 0
qcom/opensource/datarmnet-ext/shs/Makefile

@@ -0,0 +1,15 @@
+KERNEL_SRC ?= /lib/modules/$(shell uname -r)/build
+
+KBUILD_OPTIONS := RMNET_SHS_ROOT=$(PWD)
+KBUILD_OPTIONS += MODNAME?=rmnet_shs
+KBUILD_EXTRA_SYMBOLS := $(M)/../../$(DATARMNET_CORE_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

+ 50 - 0
qcom/opensource/datarmnet-ext/shs/define_shs.bzl

@@ -0,0 +1,50 @@
+load("//build/bazel_common_rules/dist:dist.bzl", "copy_to_dist_dir")
+load("//build/kernel/kleaf:kernel.bzl", "ddk_module")
+
+def define_shs(target, variant):
+    kernel_build_variant = "{}_{}".format(target, variant)
+    include_base = "../../../{}".format(native.package_name())
+
+    ddk_module(
+        name = "{}_shs".format(kernel_build_variant),
+        out = "rmnet_shs.ko",
+        srcs = [
+            "rmnet_shs.h",
+            "rmnet_shs_common.c",
+            "rmnet_shs_common.h",
+            "rmnet_shs_config.c",
+            "rmnet_shs_config.h",
+            "rmnet_shs_freq.c",
+            "rmnet_shs_freq.h",
+            "rmnet_shs_ll.c",
+            "rmnet_shs_ll.h",
+            "rmnet_shs_main.c",
+            "rmnet_shs_modules.c",
+            "rmnet_shs_modules.h",
+            "rmnet_shs_wq.c",
+            "rmnet_shs_wq.h",
+            "rmnet_shs_wq_genl.c",
+            "rmnet_shs_wq_genl.h",
+            "rmnet_shs_wq_mem.c",
+            "rmnet_shs_wq_mem.h",
+        ],
+        kernel_build = "//msm-kernel:{}".format(kernel_build_variant),
+        deps = [
+            "//msm-kernel:all_headers",
+            "//vendor/qcom/opensource/datarmnet:{}_rmnet_core".format(kernel_build_variant),
+            "//vendor/qcom/opensource/datarmnet:rmnet_core_headers",
+        ],
+        copts = ["-Wno-misleading-indentation"],
+    )
+
+    copy_to_dist_dir(
+        name = "{}_datarment-ext_dist".format(kernel_build_variant),
+        data = [
+            ":{}_shs".format(kernel_build_variant),
+        ],
+        dist_dir = "out/target/product/{}/dlkm/lib/modules/".format(target),
+        flat = True,
+        wipe_dist_dir = False,
+        allow_duplicate_filenames = False,
+        mode_overrides = {"**/*": "644"},
+    )

+ 190 - 0
qcom/opensource/datarmnet-ext/shs/rmnet_shs.h

@@ -0,0 +1,190 @@
+/* Copyright (c) 2018-2021 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2022-2024 Qualcomm Innovation Center, Inc. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 and
+ * only version 2 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ */
+
+#include <linux/skbuff.h>
+#include <linux/in.h>
+#include <linux/ip.h>
+#include <linux/ipv6.h>
+#include <linux/tcp.h>
+#include <linux/udp.h>
+#include "rmnet_shs_wq.h"
+#ifndef DATARMNETbd5709177a
+#define DATARMNETbd5709177a
+#include "rmnet_shs_freq.h"
+#include "rmnet_config.h"
+#include "rmnet_map.h"
+#include "rmnet_shs_wq_genl.h"
+#include "rmnet_private.h"
+#include "rmnet_handlers.h"
+#include "rmnet_trace.h"
+#include "qmi_rmnet.h"
+#define DATARMNETe603c3a4b3 DATARMNETbfe1afe595
+#define DATARMNET25437d35fd 9
+#define DATARMNET4899358462 (0xeb7+1101-0x12f5)
+#define DATARMNET401583e606 DATARMNETecc0627c70.DATARMNET2f954f58f8
+#define DATARMNETc6782fed88  (0xd35+210-0xdff)
+#define DATARMNETbc3c416b77 DATARMNETecc0627c70.DATARMNETf510b48c29
+#define DATARMNET9273f84bf1 DATARMNETecc0627c70.DATARMNET637025ccc1
+#define DATARMNET12f3a261a0 ((0xc07+4861-0x1e3c))
+#define DATARMNETb91aee91fd -(0xd26+209-0xdf6)
+#define DATARMNET2edff26954 (0xd2d+202-0xdf7)
+#define DATARMNET752465942a (0xbf7+4364-0x1c04)
+#define DATARMNETbfe31ef643 (0xc07+1233-0xe1c)
+#define DATARMNET2d0941aa7c (0xd11+230-0xdf3)
+#define DATARMNETaa0602144b 11184810
+#define DATARMNET7a815512d3 (0xef7+1100-0x12fd)
+#define DATARMNET270b564b55  (0xd35+210-0xdff)
+#define DATARMNET1c2d76f636 (0xf07+658-0x110d)
+#define DATARMNET2922c89d50  (0xd1f+216-0xdf5)
+#define DATARMNET015fb2ba0e(...) \
+  do { if (DATARMNET756bdd424a) trace_rmnet_shs_err(__VA_ARGS__); } while (\
+(0xd2d+202-0xdf7))
+#define DATARMNET52de1f3dc0(...) \
+  do { if (DATARMNET756bdd424a) trace_rmnet_shs_high(__VA_ARGS__); } while (\
+(0xd2d+202-0xdf7))
+#define DATARMNETda96251102(...) \
+  do { if (DATARMNET756bdd424a) trace_rmnet_shs_low(__VA_ARGS__); } while (\
+(0xd2d+202-0xdf7))
+#define DATARMNETd82a2ed45e  204800
+#define DATARMNETc668d192f2 (0xec7+1093-0x12f5) 
+#define DATARMNETb38cb72105 100000
+#define DATARMNETfbee9e182e 100000
+#define DATARMNETac6d632788 (80000*DATARMNETc668d192f2)
+#define DATARMNET243c638e7d 210000
+#define DATARMNET03fd42433e (210000*DATARMNETc668d192f2)
+#define DATARMNET9bc9e0cac3 (0xd2d+202-0xdf7)
+#define DATARMNET22feab5726 40000
+#define DATARMNET4298ee0d38 (40000*DATARMNETc668d192f2)
+#define DATARMNET3a9bca9cba 20000
+#define DATARMNETcdee526004 (DATARMNET243c638e7d / (0xd1f+216-0xdf5))
+struct DATARMNETa6f2d499b2{struct hrtimer DATARMNET758a55f103;struct work_struct
+ DATARMNET33110a3ff5;struct timespec64 DATARMNET251b97a380;int 
+DATARMNETe61d62310f;u8 DATARMNET42c3ecbd5e;};struct DATARMNETa6b20d7e8b{struct 
+hrtimer DATARMNET6fd692fc7a;struct hrtimer DATARMNET645fb3b468;struct hrtimer 
+hrtimer_wake;struct hrtimer DATARMNET533dba0f29;struct rmnet_map_dl_ind 
+DATARMNET08dbb5ab35;struct rmnet_map_pb_ind DATARMNET6b783c98fe;struct 
+qmi_rmnet_ps_ind rmnet_idl_ind_cb;struct rmnet_port*port;struct 
+DATARMNETa6f2d499b2 DATARMNET132b9c7dc4[DATARMNETc6782fed88];u64 
+DATARMNETbd3a0ee74e[DATARMNETc6782fed88];long DATARMNETc252a1f55d;long 
+DATARMNETa2e32cdd3a;atomic_long_t DATARMNET64bb8a8f57;u8 DATARMNET110549da6f;u8 
+DATARMNET9c869c1ec2;u8 DATARMNETd9cfd2812b;u8 DATARMNETf5ab31b9b0;u8 
+DATARMNET34097703c8;u8 DATARMNETfc89d842ae;u8 DATARMNET6fe0db3a49;u8 
+DATARMNETba3f7a11ef;u8 map_mask;u8 map_len;u8 DATARMNET5c24e1df05;u8 
+DATARMNET6625085b71;u16 DATARMNETfeee6933fc;u8 DATARMNET7d667e828e;u8 
+DATARMNETe250463eef;ktime_t DATARMNETdd3caf9200;struct wakeup_source*ws;u8 
+DATARMNET2f954f58f8;u8 DATARMNETf510b48c29;u8 DATARMNET637025ccc1;u8 
+DATARMNET75af9f3c31;};struct DATARMNETa034b2e60c{struct sk_buff*head;struct 
+sk_buff*tail;u64 DATARMNETbaa5765693;u32 DATARMNET6215127f48;u32 
+DATARMNET35234676d4;};struct DATARMNET63d7680df2{union{struct iphdr 
+DATARMNETac9bbaad7c;struct ipv6hdr DATARMNET1688a97aa4;}ip_hdr;union{struct 
+tcphdr tp;struct udphdr up;}DATARMNETe33b41dad9;struct list_head 
+DATARMNET04c88b8191;struct net_device*dev;struct DATARMNET6c78e47d24*
+DATARMNET341ea38662;struct DATARMNETa034b2e60c DATARMNETae4b27456e;struct 
+hlist_node list;u64 DATARMNET11930c5df8;u64 DATARMNETa8940e4a7b;u64 
+DATARMNET2594c418db;u64 DATARMNET3ecedac168;u64 DATARMNETce5f56eab9;u32 
+DATARMNET1743c92e66;u32 queue_head;u32 hash;u32 bif;u32 ack_thresh;u16 map_index
+;u16 map_cpu;u16 DATARMNETfbbec4c537;u16 DATARMNETa59ce1fd2d;u8 
+DATARMNET85c698ec34;u16 DATARMNET0371465875;u16 DATARMNET1e9d25d9ff;u8 
+DATARMNET6250e93187;u8 DATARMNET80eb31d7b8;u8 DATARMNETd986107d55;u8 mux_id;};
+enum DATARMNETa40e71cf32{DATARMNET39a19f2e82,DATARMNETbb52958049,
+DATARMNET46a17e3ec5,DATARMNETfeb864b93d,DATARMNET3503c562cb};enum 
+DATARMNET055bc2777b{DATARMNETf8fcf5a1db,DATARMNET6a801720f2,DATARMNET64165df74d,
+DATARMNETfb9ca677b8};enum DATARMNET156842d55e{DATARMNET7bc926fdbe,
+DATARMNETb3e3b2a799,DATARMNET8dcf06727b};enum DATARMNET8463cba7c7{
+DATARMNETc3bce05be2,DATARMNET14067f0be4,DATARMNET28bb261646,DATARMNET67b67dc88f,
+DATARMNET0efbbe2821,DATARMNETa4267dfd8a,DATARMNETf13db5ace8,DATARMNETb6eae1e097,
+DATARMNET0e398136dc,DATARMNET975060d6b5,DATARMNET7f401828b3,DATARMNET6ea8a58f4e,
+DATARMNETcf84373518,DATARMNET6bf40b86f6,DATARMNET9f8bd72ee5,DATARMNET5eefd5051a,
+DATARMNET6d1e5ff045,DATARMNETf6458f40e6,DATARMNET438fb7f8f3,DATARMNET6fed39da20,
+DATARMNET706cd2d052,DATARMNETaac8ed4c2d,DATARMNETeccb61ebc3};enum 
+DATARMNETf355367410{DATARMNET557ff68d74,DATARMNET1c55e5fdb1,DATARMNET4ab5a31d0c,
+DATARMNETde2dd86539};enum DATARMNET6c7f7f22c7{DATARMNETe35e238437,
+DATARMNET465c0e5e6d,DATARMNET0d61981934};enum DATARMNET3f3bc61c03{
+DATARMNETf5157a9b85,DATARMNET709b59b0e6,DATARMNET99db6e7d86,DATARMNETe3c02ddaeb,
+DATARMNET394acaf558,DATARMNETef8cbfa62f,DATARMNETe6e77f9f03,DATARMNETecdf13872c,
+DATARMNETd1687e0776,DATARMNET1828d69e96,DATARMNET40ceff078e,DATARMNET42b73d0f3f,
+DATARMNETb8fe2c0e64,DATARMNET72db8b9bac,DATARMNET33a9d4759f,DATARMNET46966e7828,
+DATARMNETa1f9420686,DATARMNET54b67b8a75,DATARMNETac729c3d29,DATARMNET6533f70c87,
+DATARMNET6f6efeaf61,DATARMNETcc0ef52ccb,DATARMNETf8de7cb644,DATARMNETdd6bf3de6b,
+DATARMNETfeaf903a28,DATARMNET767c76ca08,DATARMNET048727d1d9,DATARMNET43405942ed,
+DATARMNET2e68f4bd9f,DATARMNET0fa3506473,DATARMNETbb641cd339,DATARMNETf352684b06,
+DATARMNET62807647a4,DATARMNET3b5329031b,DATARMNETdfffcec2c8,DATARMNETf3110711cb}
+;enum DATARMNET269385986c{DATARMNET5c4c7e20f2,DATARMNET95c85e6fe1,
+DATARMNET27fb9a225d,DATARMNETbbf8fe40aa,DATARMNETa7d45fb6d4,DATARMNET0acd775aa8,
+DATARMNET2217440c2e,DATARMNET6aecae7be2,DATARMNETf3dfa53867,DATARMNET0492ddb5d5}
+;enum DATARMNETd751e3ec84{DATARMNETcc3c294f38,DATARMNET802083239a,
+DATARMNETed69052342,DATARMNETcfb1764a91,DATARMNET84a9e136b8,DATARMNET01bf75e27c,
+DATARMNETd45c383019,DATARMNETbb5757569c,DATARMNETc8058e2cff,DATARMNET04dac3a62b,
+DATARMNETdf6ecde77a,DATARMNET94658618fc,DATARMNET0d07041c32,DATARMNET3cef75f6cd}
+;struct DATARMNETfd554c7eac{struct sk_buff*skb;struct DATARMNETfd554c7eac*next;}
+;struct DATARMNET37ef896af8{struct work_struct DATARMNET33110a3ff5;struct 
+rmnet_port*port;};struct DATARMNETe600c5b727{struct list_head 
+DATARMNET3dc4262f53;u32 DATARMNETae196235f2;u32 qtail;u32 DATARMNET96571b28de;
+u32 DATARMNET4133fc9428;u32 seg;u8 DATARMNETef866573e0;u8 DATARMNET1e1f197118;u8
+ DATARMNET72067bf727;};enum DATARMNETf0a06dc55a{DATARMNET1790979ccf,
+DATARMNETd5eb6398da,DATARMNETcd24fca747,DATARMNETe50d824af7,DATARMNET6b317c4c73,
+DATARMNET75d955c408,DATARMNETf3aaad06eb,DATARMNET720469c0a9,DATARMNET4510abc30d,
+DATARMNET23f8730007,DATARMNETb77d87790d,DATARMNETf783febe14,};enum 
+DATARMNETc1d9e38720{DATARMNET0b15fd8b54,DATARMNET5b5927fd7e,DATARMNETba3049005f}
+;enum DATARMNET4f392b0182{DATARMNET72cb00fdc0,DATARMNET443dab7031,
+DATARMNET96db46917c,DATARMNET89958f9b63,DATARMNET6d7a3a033a,DATARMNET16a68afc17,
+DATARMNET916f444e0a,DATARMNETe9a79499ac,DATARMNET89f4779456,DATARMNETa94c7e31a0,
+DATARMNET116c96c236,DATARMNET9da2ea4f74,DATARMNETe55953a107,DATARMNET43225b7a7c,
+DATARMNET4dbb6812b5,DATARMNETbf80eada88,DATARMNET26438cb654,DATARMNETa6d85c8497,
+DATARMNET650a0ef6e1,DATARMNET3e031f1532,DATARMNET9f467b9ce4,DATARMNETc154fd2d48,
+DATARMNET5874e1ecd7,DATARMNET4f09dc5794,DATARMNET11a1fd3964,DATARMNETf2fc7954d4,
+DATARMNET4e91ddb48a,DATARMNET16befe9635,DATARMNET856c53293b,DATARMNET7e63a08ad4,
+DATARMNETf7c8c7aa3f,DATARMNET08b6defcff,DATARMNETf5c836f9ae,DATARMNETdd870ee64c,
+DATARMNETf730f80f06,DATARMNET998c6de143,DATARMNETe7afce2292,DATARMNETe0fee0991a,
+DATARMNETbc2a6aea12,DATARMNETde91850c28,DATARMNET237e7bd5f6,DATARMNETf16e78412b,
+DATARMNET83147a2e7d,DATARMNET816bb1e327,DATARMNETf311f20c00,DATARMNETa2bd301af7,
+DATARMNET99640d60f7,DATARMNET562b7d32a8,DATARMNET0808844559,DATARMNET5410705c1c,
+DATARMNET022082b219,DATARMNETe4ee0d2636,DATARMNET23b8465daf,DATARMNET052f49b190,
+DATARMNETfb753e521e,DATARMNET64b02f64c6,DATARMNET576793621a,DATARMNETc262b24b02,
+DATARMNET4ebbc01257,DATARMNET595eed6ea2,DATARMNETde090e8314,DATARMNETa593d87b38,
+DATARMNET8a2898988b,DATARMNET0709c9f764,DATARMNETae009376be,DATARMNET5994bb1411,
+DATARMNET623224aa0a,DATARMNET94906cea05,};struct DATARMNETe2f668ccb4{u8 
+DATARMNET42c3ecbd5e;u8 DATARMNET24fec1b9ad;u8 DATARMNETf58377e952;unsigned long 
+DATARMNET5c98629e14;};extern struct DATARMNET37ef896af8 DATARMNET1731db288b;
+extern spinlock_t DATARMNETd83ee17944;extern spinlock_t DATARMNET3764d083f0;
+extern spinlock_t DATARMNETec2a4f5211;extern spinlock_t DATARMNETfbdbab2ef6;
+extern struct hlist_head DATARMNETe603c3a4b3[(0xd26+209-0xdf6)<<(
+DATARMNET25437d35fd)];extern int(*rmnet_shs_skb_entry)(struct sk_buff*skb,struct
+ rmnet_shs_clnt_s*DATARMNET9e820fbfe3);extern int(*rmnet_shs_ll_skb_entry)(
+struct sk_buff*skb,struct rmnet_shs_clnt_s*DATARMNET9e820fbfe3);extern int(*
+rmnet_shs_switch)(struct sk_buff*skb,struct rmnet_shs_clnt_s*DATARMNET9e820fbfe3
+);void DATARMNET203752febd(void);void DATARMNET7520667b38(void);void 
+DATARMNETa871eeb7e7(void);void DATARMNET8f9da46b14(void);int DATARMNET362b15f941
+(u16 cpu);void DATARMNETeacad8334e(void);void DATARMNETe1f95274f1(void);void 
+DATARMNETaeb508acb0(void);unsigned int DATARMNET02cdd9b125(void);int 
+DATARMNET310c3eb16e(u8 mask);int DATARMNETe02152c351(struct DATARMNET63d7680df2*
+DATARMNET63b1a086d5,u8 DATARMNETd87669e323,u8 DATARMNET5447204733,struct sk_buff
+**DATARMNETc88d0a6cdd);void DATARMNET4684d6c911(struct rmnet_map_pb_ind_hdr*
+DATARMNET4e61dda775);void DATARMNET78bb6be330(struct rmnet_map_dl_ind_hdr*dlhdr,
+struct rmnet_map_control_command_header*qcmd);void DATARMNETf61cd23b90(struct 
+rmnet_map_dl_ind_trl*dltrl,struct rmnet_map_control_command_header*qcmd);void 
+DATARMNET7ed4cef8a3(struct rmnet_map_dl_ind_hdr*dlhdr);void DATARMNET613a81eca8(
+struct rmnet_map_dl_ind_trl*dltrl);int DATARMNET756778f14f(struct sk_buff*skb,
+struct rmnet_shs_clnt_s*DATARMNET9e820fbfe3);void DATARMNETa4bf9fbf64(u8 
+DATARMNET665469cfb6,u8 DATARMNET5447204733);void DATARMNETde8ee16f92(struct 
+DATARMNET63d7680df2*DATARMNET63b1a086d5);void DATARMNET45d8cdb224(struct 
+net_device*dev,struct net_device*vnd);void DATARMNET9297340f58(unsigned int 
+DATARMNET9f4bc49c6f);void DATARMNET7f1d9480cb(void*port);void 
+DATARMNETa4bd2ef52c(void*port);void DATARMNETe074a09496(void);void 
+DATARMNET23c7ddd780(struct DATARMNET63d7680df2*DATARMNET63b1a086d5,u8 
+DATARMNET5447204733);void DATARMNET349c3a0cab(u16 map_cpu,bool 
+DATARMNETb639f6e1b1);void DATARMNETe767554e6e(struct sk_buff*skb);u32 
+DATARMNETadb0248bd4(u8 DATARMNET42a992465f);
+#endif 
+

+ 238 - 0
qcom/opensource/datarmnet-ext/shs/rmnet_shs_common.c

@@ -0,0 +1,238 @@
+/* Copyright (c) 2020-2021 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 and
+ * only version 2 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ */
+
+#include "rmnet_shs.h"
+#include "rmnet_shs_wq.h"
+#include "rmnet_shs_modules.h"
+#include <net/ip.h>
+#include <linux/cpu.h>
+#include <linux/bitmap.h>
+#include <linux/netdevice.h>
+#include <linux/kernel.h>
+#include <linux/smp.h>
+#include <linux/ipv6.h>
+#include <linux/netdevice.h>
+#define DATARMNET48a89fcc16 (0xd26+209-0xdf6)
+#define DATARMNETbfe901fc62 (0xd2d+202-0xdf7)
+void DATARMNET4095253347(struct DATARMNET9b44b71ee9*ep){trace_rmnet_shs_wq_low(
+DATARMNET5e796836fb,DATARMNET7fc202c4c1,(0x16e8+787-0xc0c),(0x16e8+787-0xc0c),
+(0x16e8+787-0xc0c),(0x16e8+787-0xc0c),ep,NULL);list_add(&ep->DATARMNET0763436b8d
+,&DATARMNET30a3e83974);}void DATARMNETf7d317ed55(struct DATARMNET9b44b71ee9*ep){
+trace_rmnet_shs_wq_low(DATARMNET5e796836fb,DATARMNET7643ab0f49,
+(0x16e8+787-0xc0c),(0x16e8+787-0xc0c),(0x16e8+787-0xc0c),(0x16e8+787-0xc0c),ep,
+NULL);list_del_init(&ep->DATARMNET0763436b8d);}void DATARMNET36e5e526fa(struct 
+DATARMNET6c78e47d24*DATARMNETd2a694d52a){trace_rmnet_shs_wq_low(
+DATARMNET238d08f0df,DATARMNET3f2d29c867,(0x16e8+787-0xc0c),(0x16e8+787-0xc0c),
+(0x16e8+787-0xc0c),(0x16e8+787-0xc0c),DATARMNETd2a694d52a,NULL);spin_lock_bh(&
+DATARMNETfbdbab2ef6);list_add_rcu(&DATARMNETd2a694d52a->DATARMNET6de26f0feb,&
+DATARMNET9825511866);spin_unlock_bh(&DATARMNETfbdbab2ef6);}void 
+DATARMNET2fe780019f(struct DATARMNET6c78e47d24*DATARMNETd2a694d52a){
+trace_rmnet_shs_wq_low(DATARMNET238d08f0df,DATARMNET5a3ea29c57,
+(0x16e8+787-0xc0c),(0x16e8+787-0xc0c),(0x16e8+787-0xc0c),(0x16e8+787-0xc0c),
+DATARMNETd2a694d52a,NULL);spin_lock_bh(&DATARMNETfbdbab2ef6);list_del_rcu(&
+DATARMNETd2a694d52a->DATARMNET6de26f0feb);spin_unlock_bh(&DATARMNETfbdbab2ef6);}
+void DATARMNETb4a6870b3b(struct DATARMNET6c78e47d24*DATARMNETd2a694d52a){
+trace_rmnet_shs_wq_low(DATARMNET92b282b12c,DATARMNETdb9197631d,
+(0x16e8+787-0xc0c),(0x16e8+787-0xc0c),(0x16e8+787-0xc0c),(0x16e8+787-0xc0c),
+DATARMNETd2a694d52a,NULL);spin_lock_bh(&DATARMNETfbdbab2ef6);list_del_init(&
+DATARMNETd2a694d52a->DATARMNET742867e97a);spin_unlock_bh(&DATARMNETfbdbab2ef6);}
+void DATARMNETd8a6375e9c(struct DATARMNET6c78e47d24*DATARMNETd2a694d52a,struct 
+list_head*head){trace_rmnet_shs_wq_low(DATARMNET92b282b12c,DATARMNET4b58d51c6a,
+(0x16e8+787-0xc0c),(0x16e8+787-0xc0c),(0x16e8+787-0xc0c),(0x16e8+787-0xc0c),
+DATARMNETd2a694d52a,NULL);spin_lock_bh(&DATARMNETfbdbab2ef6);list_add(&
+DATARMNETd2a694d52a->DATARMNET742867e97a,head);spin_unlock_bh(&
+DATARMNETfbdbab2ef6);}void DATARMNET9914e9761e(struct DATARMNET6c78e47d24*
+DATARMNETd2a694d52a,struct list_head*head){trace_rmnet_shs_wq_low(
+DATARMNET92b282b12c,DATARMNETfd4d416388,DATARMNETd2a694d52a->DATARMNET7c894c2f8f
+,(0x16e8+787-0xc0c),(0x16e8+787-0xc0c),(0x16e8+787-0xc0c),DATARMNETd2a694d52a,
+NULL);spin_lock_bh(&DATARMNETfbdbab2ef6);list_move(&DATARMNETd2a694d52a->
+DATARMNET742867e97a,head);spin_unlock_bh(&DATARMNETfbdbab2ef6);}void 
+DATARMNET6bf538fa23(void){spin_lock_bh(&DATARMNETec2a4f5211);}void 
+DATARMNETaea4c85748(void){spin_unlock_bh(&DATARMNETec2a4f5211);}void 
+DATARMNETe46c480d71(void){u8 mask=DATARMNET752465942a;u8 DATARMNET998de79791=
+(0xd2d+202-0xdf7);struct DATARMNET9b44b71ee9*ep;list_for_each_entry(ep,&
+DATARMNET30a3e83974,DATARMNET0763436b8d){if(!ep->DATARMNET4a4e6f66b5)continue;if
+(ep->DATARMNET9fb369ce5f){mask&=ep->DATARMNET9fb369ce5f;DATARMNET998de79791=
+(0xd26+209-0xdf6);}}if(!DATARMNET998de79791){DATARMNETecc0627c70.map_mask=
+(0xd2d+202-0xdf7);DATARMNETecc0627c70.map_len=(0xd2d+202-0xdf7);return;}else if(
+DATARMNETecc0627c70.map_mask!=mask){DATARMNETecc0627c70.map_mask=mask;
+DATARMNETecc0627c70.map_len=DATARMNET310c3eb16e(mask);pr_info(
+"\x72\x6d\x6e\x65\x74\x5f\x73\x68\x73\x3a\x20\x20\x6d\x61\x73\x6b\x3a\x20\x30\x78\x25\x78\x20\x6d\x61\x70\x6c\x65\x6e\x3a\x20\x25\x64"
+,DATARMNETecc0627c70.map_mask,DATARMNETecc0627c70.map_len);}}void 
+DATARMNETde8ee16f92(struct DATARMNET63d7680df2*DATARMNET63b1a086d5){
+DATARMNETda96251102(DATARMNETd5eb6398da,DATARMNETe9a79499ac,(0x16e8+787-0xc0c),
+(0x16e8+787-0xc0c),(0x16e8+787-0xc0c),(0x16e8+787-0xc0c),NULL,NULL);
+list_del_init(&DATARMNET63b1a086d5->DATARMNET04c88b8191);DATARMNET349c3a0cab(
+DATARMNET63b1a086d5->map_cpu,DATARMNETbfe901fc62);}void DATARMNET3e37ad2816(
+struct DATARMNET63d7680df2*DATARMNET63b1a086d5,struct list_head*
+DATARMNET4d030eb9b5){DATARMNETda96251102(DATARMNETd5eb6398da,DATARMNET16a68afc17
+,(0x16e8+787-0xc0c),(0x16e8+787-0xc0c),(0x16e8+787-0xc0c),(0x16e8+787-0xc0c),
+NULL,NULL);list_add(&DATARMNET63b1a086d5->DATARMNET04c88b8191,
+DATARMNET4d030eb9b5);DATARMNET349c3a0cab(DATARMNET63b1a086d5->map_cpu,
+DATARMNET48a89fcc16);}void DATARMNETe102b3a798(struct DATARMNET63d7680df2*
+DATARMNET63b1a086d5,struct list_head*DATARMNET4d030eb9b5,int DATARMNETa7a5705ab0
+){DATARMNETda96251102(DATARMNETd5eb6398da,DATARMNET916f444e0a,(0x16e8+787-0xc0c)
+,(0x16e8+787-0xc0c),(0x16e8+787-0xc0c),(0x16e8+787-0xc0c),NULL,NULL);list_move(&
+DATARMNET63b1a086d5->DATARMNET04c88b8191,DATARMNET4d030eb9b5);
+DATARMNET349c3a0cab(DATARMNET63b1a086d5->map_cpu,DATARMNET48a89fcc16);
+DATARMNET349c3a0cab((u16)DATARMNETa7a5705ab0,DATARMNETbfe901fc62);}void 
+DATARMNET4bde88919f(u8 cpu,int count){if(cpu<DATARMNETc6782fed88){
+DATARMNET443cf5aaaf[cpu]+=count;}}u64 DATARMNETfc888b4d3e(u16 cpu){if(cpu>=
+DATARMNETc6782fed88){DATARMNET68d84e7b98[DATARMNET54b67b8a75]++;return
+(0xd2d+202-0xdf7);}return DATARMNET713717107f[cpu];}inline int 
+DATARMNET362b15f941(u16 cpu){return!(((0xd26+209-0xdf6)<<cpu)&
+DATARMNETbc3c416b77);}u32 DATARMNETadb0248bd4(u8 DATARMNET42a992465f){u32 ret=
+(0xd2d+202-0xdf7);if(DATARMNET42a992465f<DATARMNETc6782fed88)ret=
+DATARMNET0997c5650d[DATARMNET42a992465f].DATARMNETae196235f2;DATARMNETda96251102
+(DATARMNET75d955c408,DATARMNET9f467b9ce4,DATARMNET42a992465f,ret,
+(0x16e8+787-0xc0c),(0x16e8+787-0xc0c),NULL,NULL);return ret;}u32 
+DATARMNETeb3978575d(u8 DATARMNET42a992465f){u32 ret=(0xd2d+202-0xdf7);if(
+DATARMNET42a992465f<DATARMNETc6782fed88)ret=DATARMNET0997c5650d[
+DATARMNET42a992465f].qtail;DATARMNETda96251102(DATARMNET75d955c408,
+DATARMNETc154fd2d48,DATARMNET42a992465f,ret,(0x16e8+787-0xc0c),
+(0x16e8+787-0xc0c),NULL,NULL);return ret;}u32 DATARMNETeea3cef5b6(u8 
+DATARMNET42a992465f){u32 ret=(0xd2d+202-0xdf7);if(DATARMNET42a992465f<
+DATARMNETc6782fed88)ret=DATARMNET0997c5650d[DATARMNET42a992465f].
+DATARMNET96571b28de;DATARMNETda96251102(DATARMNET75d955c408,DATARMNETc154fd2d48,
+DATARMNET42a992465f,ret,(0x16e8+787-0xc0c),(0x16e8+787-0xc0c),NULL,NULL);return 
+ret;}int DATARMNET4e292977da(void*priv,const struct list_head*
+DATARMNET9cf7d31274,const struct list_head*DATARMNET5444bd3b6f){struct 
+DATARMNETe176be7f7c*DATARMNET40e125212a;struct DATARMNETe176be7f7c*
+DATARMNETdcaff77beb;if(!DATARMNET9cf7d31274||!DATARMNET5444bd3b6f)return
+(0xd2d+202-0xdf7);DATARMNET40e125212a=list_entry(DATARMNET9cf7d31274,struct 
+DATARMNETe176be7f7c,DATARMNET7287946e7b);DATARMNETdcaff77beb=list_entry(
+DATARMNET5444bd3b6f,struct DATARMNETe176be7f7c,DATARMNET7287946e7b);if(
+DATARMNET40e125212a->DATARMNET253a9fc708>DATARMNETdcaff77beb->
+DATARMNET253a9fc708)return-(0xd26+209-0xdf6);else if(DATARMNET40e125212a->
+DATARMNET253a9fc708<DATARMNETdcaff77beb->DATARMNET253a9fc708)return
+(0xd26+209-0xdf6);return(0xd2d+202-0xdf7);}int DATARMNET3c489db64a(void*priv,
+const struct list_head*DATARMNET9cf7d31274,const struct list_head*
+DATARMNET5444bd3b6f){struct DATARMNET13c47d154e*DATARMNET40e125212a;struct 
+DATARMNET13c47d154e*DATARMNETdcaff77beb;if(!DATARMNET9cf7d31274||!
+DATARMNET5444bd3b6f)return(0xd2d+202-0xdf7);DATARMNET40e125212a=list_entry(
+DATARMNET9cf7d31274,struct DATARMNET13c47d154e,DATARMNETec0e3cb8f0);
+DATARMNETdcaff77beb=list_entry(DATARMNET5444bd3b6f,struct DATARMNET13c47d154e,
+DATARMNETec0e3cb8f0);if(DATARMNET40e125212a->DATARMNET253a9fc708>
+DATARMNETdcaff77beb->DATARMNET253a9fc708)return-(0xd26+209-0xdf6);else if(
+DATARMNET40e125212a->DATARMNET253a9fc708<DATARMNETdcaff77beb->
+DATARMNET253a9fc708)return(0xd26+209-0xdf6);return(0xd2d+202-0xdf7);}int 
+DATARMNETd5c15f1ff3(void*priv,const struct list_head*DATARMNET9cf7d31274,const 
+struct list_head*DATARMNET5444bd3b6f){struct DATARMNET09a412b1c6*
+DATARMNET40e125212a;struct DATARMNET09a412b1c6*DATARMNETdcaff77beb;if(!
+DATARMNET9cf7d31274||!DATARMNET5444bd3b6f)return(0xd2d+202-0xdf7);
+DATARMNET40e125212a=list_entry(DATARMNET9cf7d31274,struct DATARMNET09a412b1c6,
+DATARMNETd502c0412a);DATARMNETdcaff77beb=list_entry(DATARMNET5444bd3b6f,struct 
+DATARMNET09a412b1c6,DATARMNETd502c0412a);if(DATARMNET40e125212a->
+DATARMNET253a9fc708>DATARMNETdcaff77beb->DATARMNET253a9fc708)return-
+(0xd26+209-0xdf6);else if(DATARMNET40e125212a->DATARMNET253a9fc708<
+DATARMNETdcaff77beb->DATARMNET253a9fc708)return(0xd26+209-0xdf6);return
+(0xd2d+202-0xdf7);}int DATARMNET85af86a36d(void*priv,const struct list_head*
+DATARMNET9cf7d31274,const struct list_head*DATARMNET5444bd3b6f){struct 
+DATARMNET47a6995138*DATARMNETdad817a72a;struct DATARMNET47a6995138*
+DATARMNET11d167e92b;if(!DATARMNET9cf7d31274||!DATARMNET5444bd3b6f)return
+(0xd2d+202-0xdf7);DATARMNETdad817a72a=list_entry(DATARMNET9cf7d31274,struct 
+DATARMNET47a6995138,DATARMNET02523bfb57);DATARMNET11d167e92b=list_entry(
+DATARMNET5444bd3b6f,struct DATARMNET47a6995138,DATARMNET02523bfb57);if(
+DATARMNETdad817a72a->DATARMNET4da6031170>DATARMNET11d167e92b->
+DATARMNET4da6031170)return-(0xd26+209-0xdf6);else if(DATARMNETdad817a72a->
+DATARMNET4da6031170<DATARMNET11d167e92b->DATARMNET4da6031170)return
+(0xd26+209-0xdf6);return(0xd2d+202-0xdf7);}int DATARMNETf181a18009(struct 
+net_device*dev){u8 DATARMNETde5894dad9;u8 DATARMNETd9e9d4ff7e;int 
+DATARMNET895df156d7=-(0xd26+209-0xdf6);u8 is_match_found=(0xd2d+202-0xdf7);
+struct DATARMNET9b44b71ee9*ep=NULL;if(!dev){DATARMNET68d84e7b98[
+DATARMNETf5157a9b85]++;return DATARMNET895df156d7;}spin_lock_bh(&
+DATARMNETec2a4f5211);list_for_each_entry(ep,&DATARMNET30a3e83974,
+DATARMNET0763436b8d){if(!ep->DATARMNET4a4e6f66b5)continue;if(ep->ep==dev){
+is_match_found=(0xd26+209-0xdf6);break;}}if(!is_match_found){DATARMNET68d84e7b98
+[DATARMNETb8fe2c0e64]++;spin_unlock_bh(&DATARMNETec2a4f5211);return 
+DATARMNET895df156d7;}DATARMNETde5894dad9=ep->DATARMNET6bda8fe27e;
+DATARMNETd9e9d4ff7e=ep->DATARMNETd7a83774f8;while(DATARMNETde5894dad9<
+DATARMNETd9e9d4ff7e){if(ep->DATARMNET5af04d0405[DATARMNETde5894dad9]>=
+(0xd2d+202-0xdf7)){DATARMNET895df156d7=ep->DATARMNET5af04d0405[
+DATARMNETde5894dad9];break;}DATARMNETde5894dad9++;}if((DATARMNET895df156d7>=
+(0xd2d+202-0xdf7))||((ep->DATARMNET6bda8fe27e+(0xd26+209-0xdf6))>=ep->
+DATARMNETd7a83774f8))ep->DATARMNET6bda8fe27e=((ep->DATARMNET6bda8fe27e+
+(0xd26+209-0xdf6))%ep->DATARMNETd7a83774f8);spin_unlock_bh(&DATARMNETec2a4f5211)
+;return DATARMNET895df156d7;}int DATARMNET98b2a0ce62(struct net_device*dev){
+struct DATARMNET9b44b71ee9*ep=NULL;int DATARMNET895df156d7=-(0xd26+209-0xdf6);u8
+ DATARMNETcc5b7cd962;u8 DATARMNET15bde5cb53;u8 is_match_found=(0xd2d+202-0xdf7);
+if(!dev){DATARMNET68d84e7b98[DATARMNETf5157a9b85]++;return DATARMNET895df156d7;}
+spin_lock_bh(&DATARMNETec2a4f5211);list_for_each_entry(ep,&DATARMNET30a3e83974,
+DATARMNET0763436b8d){if(!ep->DATARMNET4a4e6f66b5)continue;if(ep->ep==dev){
+is_match_found=(0xd26+209-0xdf6);break;}}if(!is_match_found){DATARMNET68d84e7b98
+[DATARMNETb8fe2c0e64]++;spin_unlock_bh(&DATARMNETec2a4f5211);return 
+DATARMNET895df156d7;}DATARMNETcc5b7cd962=ep->DATARMNET121a654efd;
+DATARMNET15bde5cb53=ep->DATARMNET847276e5af;while(DATARMNETcc5b7cd962<
+DATARMNET15bde5cb53){if(ep->DATARMNET7167e10d99[DATARMNETcc5b7cd962]>=
+(0xd2d+202-0xdf7)){DATARMNET895df156d7=ep->DATARMNET7167e10d99[
+DATARMNETcc5b7cd962];break;}DATARMNETcc5b7cd962++;}if(DATARMNET895df156d7>=
+(0xd2d+202-0xdf7))ep->DATARMNET121a654efd=((DATARMNETcc5b7cd962+
+(0xd26+209-0xdf6))%DATARMNET15bde5cb53);spin_unlock_bh(&DATARMNETec2a4f5211);
+return DATARMNET895df156d7;}void DATARMNET7f1d9480cb(void*port){
+DATARMNET4063c95208();}void DATARMNETa4bd2ef52c(void*port){DATARMNET7b6c061b06()
+;}u8 DATARMNET928c931df9(struct rps_map*map){u8 mask=(0xd2d+202-0xdf7);u8 i;for(
+i=(0xd2d+202-0xdf7);i<map->len;i++)mask|=(0xd26+209-0xdf6)<<map->cpus[i];return 
+mask;}int DATARMNET310c3eb16e(u8 mask){u8 i;u8 DATARMNETc2284e5688=
+(0xd2d+202-0xdf7);for(i=(0xd2d+202-0xdf7);i<DATARMNETc6782fed88;i++){if(mask&(
+(0xd26+209-0xdf6)<<i))DATARMNETc2284e5688++;}return DATARMNETc2284e5688;}int 
+DATARMNET04e8d1b862(u8 cpu,u8 mask){int ret=DATARMNETb91aee91fd;u8 idx=
+(0xd2d+202-0xdf7);u8 i;if(!(mask&(0xd26+209-0xdf6)<<cpu))return ret;for(i=
+(0xd2d+202-0xdf7);i<DATARMNETc6782fed88;i++){if(i==cpu&&(mask&((0xd26+209-0xdf6)
+<<i))){ret=idx;break;}if(mask&((0xd26+209-0xdf6)<<i))idx++;}return ret;}int 
+DATARMNET217fe38119(u64 DATARMNETab155dfd5d,struct net_device*dev){int 
+DATARMNETf54fdb137b=DATARMNETb91aee91fd;if(DATARMNETab155dfd5d<
+DATARMNETd82a2ed45e)DATARMNETf54fdb137b=DATARMNETf181a18009(dev);if(
+DATARMNETf54fdb137b==DATARMNETb91aee91fd||DATARMNETab155dfd5d>=
+DATARMNETd82a2ed45e)DATARMNETf54fdb137b=DATARMNET98b2a0ce62(dev);
+DATARMNET52de1f3dc0(DATARMNET720469c0a9,DATARMNET7e63a08ad4,DATARMNETf54fdb137b,
+DATARMNETab155dfd5d,(0x16e8+787-0xc0c),(0x16e8+787-0xc0c),NULL,NULL);return 
+DATARMNETf54fdb137b;}void*DATARMNETefcaf5fbe9(struct sk_buff*skb,u32 offset,u32 
+DATARMNET567bdc7221,void*buf){struct skb_shared_info*shinfo=skb_shinfo(skb);
+skb_frag_t*frag;u32 DATARMNETedc267a909=offset;int i;if(offset>skb->len||
+DATARMNET567bdc7221>skb->len||offset+DATARMNET567bdc7221>skb->len)return NULL;if
+(skb_headlen(skb)>=offset+DATARMNET567bdc7221)return skb->data+offset;offset-=
+skb_headlen(skb);for(i=(0xd2d+202-0xdf7);i<shinfo->nr_frags;i++){u32 frag_size;
+frag=&shinfo->frags[i];frag_size=skb_frag_size(frag);if(offset>=frag_size){
+offset-=frag_size;continue;}if(frag_size>=offset+DATARMNET567bdc7221)return 
+skb_frag_address(frag)+offset;}if(skb_copy_bits(skb,(int)DATARMNETedc267a909,buf
+,(int)DATARMNET567bdc7221))return NULL;return buf;}void DATARMNET44459105b4(
+struct sk_buff*skb,struct DATARMNET63d7680df2*node_p){struct iphdr*ip4h,
+DATARMNETc00baf31c3;struct ipv6hdr*ip6h,DATARMNETcf1d9e2c1e;struct tcphdr*tp,
+DATARMNETd1ff6cd568;struct udphdr*up,DATARMNETc82d2f4e16;int len=
+(0xd2d+202-0xdf7);u16 ip_len=(0xd2d+202-0xdf7);__be16 frag_off;u8 protocol;
+switch(skb->protocol){case htons(ETH_P_IP):ip4h=DATARMNETefcaf5fbe9(skb,
+(0xd2d+202-0xdf7),sizeof(*ip4h),&DATARMNETc00baf31c3);if(!ip4h)return;node_p->
+DATARMNET1e9d25d9ff=ip4h->protocol;memcpy(&(node_p->ip_hdr.DATARMNETac9bbaad7c),
+ip4h,sizeof(*ip4h));ip_len=ip4h->ihl*(0xd11+230-0xdf3);break;case htons(
+ETH_P_IPV6):ip6h=DATARMNETefcaf5fbe9(skb,(0xd2d+202-0xdf7),sizeof(*ip6h),&
+DATARMNETcf1d9e2c1e);if(!ip6h)return;node_p->DATARMNET1e9d25d9ff=ip6h->nexthdr;
+memcpy(&(node_p->ip_hdr.DATARMNET1688a97aa4),ip6h,sizeof(*ip6h));protocol=ip6h->
+nexthdr;len=ipv6_skip_exthdr(skb,sizeof(*ip6h),&protocol,&frag_off);if(len<
+(0xd2d+202-0xdf7)){return;}ip_len=(u16)len;break;default:break;}if(node_p->
+DATARMNET1e9d25d9ff==IPPROTO_TCP){tp=DATARMNETefcaf5fbe9(skb,ip_len,sizeof(*tp),
+&DATARMNETd1ff6cd568);if(!tp)return;memcpy(&(node_p->DATARMNETe33b41dad9.tp),tp,
+sizeof(struct tcphdr));}else if(node_p->DATARMNET1e9d25d9ff==IPPROTO_UDP){up=
+DATARMNETefcaf5fbe9(skb,ip_len,sizeof(*up),&DATARMNETc82d2f4e16);if(!up)return;
+memcpy(&(node_p->DATARMNETe33b41dad9.up),up,sizeof(struct udphdr));}else{}}u32 
+DATARMNET8532ab3089(u32 index,u32 DATARMNET0258668025,u32 hash,u8 
+DATARMNET72067bf727){int DATARMNETebbd4cd1d9[DATARMNETc6782fed88/
+(0xd1f+216-0xdf5)]={(0xd35+210-0xdff),(0xd11+230-0xdf3),(0xd18+223-0xdf4),
+(0xd1f+216-0xdf5)};u32 ret=(0xd2d+202-0xdf7);if(!DATARMNET0258668025){
+DATARMNET68d84e7b98[DATARMNETef8cbfa62f]++;return ret;}if(DATARMNET0258668025<
+DATARMNETc6782fed88)ret=((((index+((DATARMNET0258668025%(0xd1f+216-0xdf5))?
+(0xd26+209-0xdf6):(0xd2d+202-0xdf7))))<<(0xec7+1122-0x130d))*DATARMNETebbd4cd1d9
+[(DATARMNET0258668025-(0xd26+209-0xdf6))>>(0xd26+209-0xdf6)])|(hash&16777215);if
+(DATARMNET72067bf727)ret=(ret&~1048575)|DATARMNET94fa0a43a2;DATARMNETda96251102(
+DATARMNETf3aaad06eb,DATARMNET4e91ddb48a,ret,hash,index,DATARMNET0258668025,NULL,
+NULL);return ret;}

+ 67 - 0
qcom/opensource/datarmnet-ext/shs/rmnet_shs_common.h

@@ -0,0 +1,67 @@
+/* Copyright (c) 2020 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 and
+ * only version 2 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ */
+
+#ifndef DATARMNET4e9dcb0338
+#define DATARMNET4e9dcb0338
+#undef TRACE_INCLUDE_PATH
+#include <trace/hooks/sched.h>
+#include <linux/tracepoint.h>
+#include <trace/hooks/vendor_hooks.h>
+#define DATARMNET94fa0a43a2 489335
+void DATARMNET4095253347(struct DATARMNET9b44b71ee9*ep);void DATARMNETf7d317ed55
+(struct DATARMNET9b44b71ee9*ep);void DATARMNET36e5e526fa(struct 
+DATARMNET6c78e47d24*DATARMNETd2a694d52a);void DATARMNET2fe780019f(struct 
+DATARMNET6c78e47d24*DATARMNETd2a694d52a);void DATARMNETd8a6375e9c(struct 
+DATARMNET6c78e47d24*DATARMNETd2a694d52a,struct list_head*head);void 
+DATARMNET9914e9761e(struct DATARMNET6c78e47d24*DATARMNETd2a694d52a,struct 
+list_head*head);void DATARMNET6bf538fa23(void);void DATARMNETaea4c85748(void);
+void DATARMNETe46c480d71(void);void DATARMNETde8ee16f92(struct 
+DATARMNET63d7680df2*DATARMNET63b1a086d5);void DATARMNET3e37ad2816(struct 
+DATARMNET63d7680df2*DATARMNET63b1a086d5,struct list_head*DATARMNET4d030eb9b5);
+void DATARMNETe102b3a798(struct DATARMNET63d7680df2*DATARMNET63b1a086d5,struct 
+list_head*DATARMNET4d030eb9b5,int DATARMNETa7a5705ab0);void DATARMNET4bde88919f(
+u8 cpu,int count);inline int DATARMNET362b15f941(u16 cpu);u64 
+DATARMNETfc888b4d3e(u16 cpu);u32 DATARMNETeb3978575d(u8 DATARMNET42a992465f);u32
+ DATARMNETeea3cef5b6(u8 DATARMNET42a992465f);u8 DATARMNET928c931df9(struct 
+rps_map*map);int DATARMNET4e292977da(void*priv,const struct list_head*
+DATARMNET9cf7d31274,const struct list_head*DATARMNET5444bd3b6f);int 
+DATARMNET3c489db64a(void*priv,const struct list_head*DATARMNET9cf7d31274,const 
+struct list_head*DATARMNET5444bd3b6f);int DATARMNETd5c15f1ff3(void*priv,const 
+struct list_head*DATARMNET9cf7d31274,const struct list_head*DATARMNET5444bd3b6f)
+;int DATARMNET85af86a36d(void*priv,const struct list_head*DATARMNET9cf7d31274,
+const struct list_head*DATARMNET5444bd3b6f);int DATARMNETf181a18009(struct 
+net_device*dev);int DATARMNET98b2a0ce62(struct net_device*dev);void 
+DATARMNET7f1d9480cb(void*port);void DATARMNETa4bd2ef52c(void*port);int 
+DATARMNET310c3eb16e(u8 mask);void DATARMNETb4a6870b3b(struct DATARMNET6c78e47d24
+*DATARMNETd2a694d52a);void DATARMNETd8a6375e9c(struct DATARMNET6c78e47d24*
+DATARMNETd2a694d52a,struct list_head*head);void DATARMNET9914e9761e(struct 
+DATARMNET6c78e47d24*DATARMNETd2a694d52a,struct list_head*head);int 
+DATARMNET04e8d1b862(u8 cpu,u8 mask);void DATARMNET44459105b4(struct sk_buff*skb,
+struct DATARMNET63d7680df2*node_p);int DATARMNET217fe38119(u64 
+DATARMNETab155dfd5d,struct net_device*dev);void*DATARMNETefcaf5fbe9(struct 
+sk_buff*skb,u32 offset,u32 DATARMNET567bdc7221,void*buf);u32 DATARMNET8532ab3089
+(u32 index,u32 DATARMNET0258668025,u32 hash,u8 DATARMNET778962e2c2);extern 
+struct list_head DATARMNET9825511866;static inline void DATARMNET3e88a91b63(void
+*unused,struct wait_queue_head*DATARMNETa08427f746,int*done,struct sock*sk){if((
+sk->sk_protocol==IPPROTO_TCP||sk->sk_protocol==IPPROTO_UDP)&&(sk->sk_rxhash&
+1048575)==DATARMNET94fa0a43a2){(*done)=(0xd26+209-0xdf6);
+wake_up_interruptible_poll(DATARMNETa08427f746,EPOLLIN|EPOLLPRI|EPOLLRDNORM|
+EPOLLRDBAND);}}static inline int DATARMNETed3cac41ac(void){int rc=
+(0xd2d+202-0xdf7);rc=register_trace_android_vh_do_wake_up_sync(
+DATARMNET3e88a91b63,NULL);return rc;}static inline int DATARMNET7fcf8c178f(void)
+{int rc=(0xd2d+202-0xdf7);rc=unregister_trace_android_vh_do_wake_up_sync(
+DATARMNET3e88a91b63,NULL);return rc;}
+#undef TRACE_INCLUDE_PATH
+#endif
+

+ 110 - 0
qcom/opensource/datarmnet-ext/shs/rmnet_shs_config.c

@@ -0,0 +1,110 @@
+/* Copyright (c) 2018-2021 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 and
+ * only version 2 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ */
+
+#include <linux/kernel.h>
+#include <linux/netdevice.h>
+#include <linux/module.h>
+#include "rmnet_map.h"
+#include "rmnet_private.h"
+#include "rmnet_shs_config.h"
+#include "rmnet_shs.h"
+#include "rmnet_shs_wq.h"
+#include "rmnet_shs_ll.h"
+#include "rmnet_shs_freq.h"
+#include "rmnet_shs_wq_genl.h"
+#include "rmnet_shs_common.h"
+#include "rmnet_shs_modules.h"
+#include "rmnet_module.h"
+static int DATARMNETe9173bbe0e(struct notifier_block*DATARMNET272c159b3c,
+unsigned long DATARMNET7f045a1e6e,void*data);static struct notifier_block 
+DATARMNET5fc54f7a13 __read_mostly={.notifier_call=DATARMNETe9173bbe0e,.priority=
+(0xd1f+216-0xdf5),};static char*DATARMNETbc8418e817[]={"\x34\x33\x61\x36\x62",
+"\x61\x32\x63\x65\x36","\x64\x31\x61\x62\x31","\x64\x38\x37\x39\x62",
+"\x61\x63\x36\x32\x36","\x35\x63\x66\x66\x37","\x61\x35\x38\x36\x62"};
+module_param_array(DATARMNETbc8418e817,charp,NULL,(0xcb7+5769-0x221c));
+MODULE_PARM_DESC(DATARMNETbc8418e817,
+"\x56\x65\x72\x73\x69\x6f\x6e\x20\x6f\x66\x20\x73\x68\x73\x20\x64\x72\x69\x76\x65\x72"
+);static const struct rmnet_module_hook_register_info DATARMNETf6217b20b8={.
+hooknum=RMNET_MODULE_HOOK_SHS_SKB_LL_ENTRY,.func=DATARMNETf5821256ad};static int
+ DATARMNET2cb9ae589c;int __init DATARMNET163e93649e(void){pr_info(
+"\x25\x73\x28\x29\x3a\x20\x53\x74\x61\x72\x74\x69\x6e\x67\x20\x72\x6d\x6e\x65\x74\x20\x53\x48\x53\x20\x6d\x6f\x64\x75\x6c\x65\x20\x25\x73\x20" "\n"
+,__func__,DATARMNETbc8418e817[(0xd2d+202-0xdf7)]);trace_rmnet_shs_high(
+DATARMNET1790979ccf,DATARMNET72cb00fdc0,(0x16e8+787-0xc0c),(0x16e8+787-0xc0c),
+(0x16e8+787-0xc0c),(0x16e8+787-0xc0c),NULL,NULL);if(DATARMNET0dbc627e8f()){
+rm_err("\x25\x73",
+"\x53\x48\x53\x5f\x47\x4e\x4c\x3a\x20\x46\x61\x69\x6c\x65\x64\x20\x74\x6f\x20\x69\x6e\x69\x74\x20\x67\x65\x6e\x65\x72\x69\x63\x20\x6e\x65\x74\x6c\x69\x6e\x6b"
+);}return register_netdevice_notifier(&DATARMNET5fc54f7a13);}void __exit 
+DATARMNETf3298dab6f(void){trace_rmnet_shs_high(DATARMNET1790979ccf,
+DATARMNET89958f9b63,(0x16e8+787-0xc0c),(0x16e8+787-0xc0c),(0x16e8+787-0xc0c),
+(0x16e8+787-0xc0c),NULL,NULL);unregister_netdevice_notifier(&DATARMNET5fc54f7a13
+);DATARMNETeabd69d1ab();pr_info(
+"\x25\x73\x28\x29\x3a\x20\x45\x78\x69\x74\x69\x6e\x67\x20\x72\x6d\x6e\x65\x74\x20\x53\x48\x53\x20\x6d\x6f\x64\x75\x6c\x65" "\n"
+,__func__);}static int DATARMNETe9173bbe0e(struct notifier_block*
+DATARMNET272c159b3c,unsigned long DATARMNET7f045a1e6e,void*data){struct 
+net_device*dev=netdev_notifier_info_to_dev(data);struct rmnet_priv*priv;struct 
+rmnet_port*port;int ret=(0xd2d+202-0xdf7);if(!dev){DATARMNET68d84e7b98[
+DATARMNETf5157a9b85]++;return NOTIFY_DONE;}if(!(strncmp(dev->name,
+"\x72\x6d\x6e\x65\x74\x5f\x64\x61\x74\x61",(0xd27+224-0xdfd))==(0xd2d+202-0xdf7)
+))return NOTIFY_DONE;switch(DATARMNET7f045a1e6e){case NETDEV_DOWN:
+DATARMNETd6ee05f1b4(dev);break;case NETDEV_UNREGISTER:DATARMNET2cb9ae589c--;if(!
+DATARMNET2cb9ae589c&&DATARMNETecc0627c70.DATARMNETfc89d842ae){unsigned int 
+DATARMNET9f4bc49c6f;pr_info(
+"\x72\x6d\x6e\x65\x74\x5f\x73\x68\x73\x20\x64\x65\x69\x6e\x69\x74\x20\x25\x73\x20\x67\x6f\x69\x6e\x67\x20\x64\x6f\x77\x6e\x20"
+,dev->name);DATARMNET203752febd();DATARMNETa871eeb7e7();
+rmnet_module_hook_unregister_no_sync(&DATARMNETf6217b20b8,(0xd26+209-0xdf6));
+qmi_rmnet_ps_ind_deregister(DATARMNETecc0627c70.port,&DATARMNETecc0627c70.
+rmnet_idl_ind_cb);rmnet_map_dl_ind_deregister(DATARMNETecc0627c70.port,&
+DATARMNETecc0627c70.DATARMNET08dbb5ab35);rmnet_map_pb_ind_deregister(
+DATARMNETecc0627c70.port,&DATARMNETecc0627c70.DATARMNET6b783c98fe);
+DATARMNETeacad8334e();DATARMNET90fe3a4b56();DATARMNET9f4bc49c6f=
+DATARMNET02cdd9b125();if(DATARMNETecc0627c70.DATARMNET9c869c1ec2)
+DATARMNET7fcf8c178f();DATARMNETf7dcab9a9e();DATARMNET9297340f58(
+DATARMNET9f4bc49c6f);trace_rmnet_shs_high(DATARMNET1790979ccf,
+DATARMNET443dab7031,(0x16e8+787-0xc0c),(0x16e8+787-0xc0c),(0x16e8+787-0xc0c),
+(0x16e8+787-0xc0c),NULL,NULL);}break;case NETDEV_REGISTER:DATARMNET2cb9ae589c++;
+if(DATARMNET2cb9ae589c&&!DATARMNETecc0627c70.DATARMNETfc89d842ae){pr_info(
+"\x72\x6d\x6e\x65\x74\x5f\x73\x68\x73\x20\x69\x6e\x69\x74\x69\x61\x6c\x69\x7a\x69\x6e\x67\x20\x25\x73"
+,dev->name);priv=netdev_priv(dev);port=rmnet_get_port(priv->real_dev);if(!port){
+pr_err(
+"\x72\x6d\x6e\x65\x74\x5f\x73\x68\x73\x3a\x20\x69\x6e\x76\x61\x6c\x69\x64\x20\x72\x6d\x6e\x65\x74\x5f\x70\x6f\x72\x74"
+);break;}DATARMNET45d8cdb224(priv->real_dev,dev);DATARMNET3ae0d614d6();
+DATARMNETe1f95274f1();DATARMNETecc0627c70.DATARMNETf5ab31b9b0=(0xd26+209-0xdf6);
+}break;case NETDEV_UP:if(!DATARMNETecc0627c70.DATARMNET9c869c1ec2&&
+DATARMNETecc0627c70.DATARMNETfc89d842ae){port=DATARMNETecc0627c70.port;if(!port)
+{pr_err(
+"\x72\x6d\x6e\x65\x74\x5f\x73\x68\x73\x3a\x20\x69\x6e\x76\x61\x6c\x69\x64\x20\x72\x6d\x6e\x65\x74\x5f\x63\x66\x67\x5f\x70\x6f\x72\x74"
+);break;}DATARMNETecc0627c70.DATARMNET08dbb5ab35.priority=RMNET_SHS;
+DATARMNETecc0627c70.DATARMNET6b783c98fe.priority=RMNET_SHS;if(port->data_format&
+RMNET_INGRESS_FORMAT_DL_MARKER_V2){DATARMNETecc0627c70.DATARMNET08dbb5ab35.
+dl_hdr_handler_v2=&DATARMNET78bb6be330;DATARMNETecc0627c70.DATARMNET08dbb5ab35.
+dl_trl_handler_v2=&DATARMNETf61cd23b90;DATARMNETecc0627c70.DATARMNET6b783c98fe.
+pb_ind_handler=&DATARMNET4684d6c911;}DATARMNETecc0627c70.rmnet_idl_ind_cb.
+ps_on_handler=&DATARMNET7f1d9480cb;DATARMNETecc0627c70.rmnet_idl_ind_cb.
+ps_off_handler=&DATARMNETa4bd2ef52c;ret=rmnet_map_dl_ind_register(port,&
+DATARMNETecc0627c70.DATARMNET08dbb5ab35);if(ret)pr_err(
+"\x25\x73\x28\x29\x3a\x20\x72\x6d\x6e\x65\x74\x20\x64\x6c\x5f\x69\x6e\x64\x20\x72\x65\x67\x69\x73\x74\x72\x61\x74\x69\x6f\x6e\x20\x66\x61\x69\x6c" "\n"
+,__func__);ret=rmnet_map_pb_ind_register(port,&DATARMNETecc0627c70.
+DATARMNET6b783c98fe);if(ret)pr_err(
+"\x25\x73\x28\x29\x3a\x20\x72\x6d\x6e\x65\x74\x20\x70\x62\x5f\x69\x6e\x64\x20\x72\x65\x67\x69\x73\x74\x72\x61\x74\x69\x6f\x6e\x20\x66\x61\x69\x6c" "\n"
+,__func__);ret=qmi_rmnet_ps_ind_register(port,&DATARMNETecc0627c70.
+rmnet_idl_ind_cb);if(ret)pr_err(
+"\x25\x73\x28\x29\x3a\x20\x72\x6d\x6e\x65\x74\x20\x70\x73\x5f\x69\x6e\x64\x20\x72\x65\x67\x69\x73\x74\x72\x61\x74\x69\x6f\x6e\x20\x66\x61\x69\x6c" "\n"
+,__func__);DATARMNET7492293980(dev);DATARMNET039ac6d55d();DATARMNET0a6fb12cb2();
+DATARMNETe46c480d71();trace_rmnet_shs_high(DATARMNET1790979ccf,
+DATARMNET443dab7031,(0x16e8+787-0xc0c),(0x16e8+787-0xc0c),(0x16e8+787-0xc0c),
+(0x16e8+787-0xc0c),NULL,NULL);DATARMNETa871eeb7e7();DATARMNET7520667b38();
+rmnet_module_hook_register(&DATARMNETf6217b20b8,(0xd26+209-0xdf6));
+DATARMNETed3cac41ac();DATARMNETecc0627c70.DATARMNET9c869c1ec2=(0xd26+209-0xdf6);
+break;}DATARMNET7492293980(dev);break;default:break;}return NOTIFY_DONE;}
+module_init(DATARMNET163e93649e);module_exit(DATARMNETf3298dab6f);

+ 27 - 0
qcom/opensource/datarmnet-ext/shs/rmnet_shs_config.h

@@ -0,0 +1,27 @@
+/* Copyright (c) 2018-2021 The Linux Foundation. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 and
+ * only version 2 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ */
+
+#include <linux/init.h>
+#include <linux/module.h>
+#include <linux/netdevice.h>
+#ifndef DATARMNET104309e08f
+#define DATARMNET104309e08f
+#define DATARMNETadb2d068fe	(0xd26+209-0xdf6)
+#define DATARMNET8120d41372	(0xd1f+216-0xdf5)
+#define DATARMNET47c2367f93	(0xd18+223-0xdf4)
+extern struct DATARMNETa6b20d7e8b DATARMNETecc0627c70;extern int 
+rmnet_is_real_dev_registered(const struct net_device*real_dev);extern 
+rx_handler_result_t rmnet_rx_handler(struct sk_buff**DATARMNET89946cec52);int 
+__init DATARMNET163e93649e(void);void __exit DATARMNETf3298dab6f(void);
+#endif 
+

+ 130 - 0
qcom/opensource/datarmnet-ext/shs/rmnet_shs_freq.c

@@ -0,0 +1,130 @@
+/* Copyright (c) 2020-2021 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 and
+ * only version 2 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ */
+
+#include <linux/module.h>
+#include "rmnet_shs.h"
+#include "rmnet_shs_freq.h"
+#include "rmnet_shs_modules.h"
+#include <linux/cpufreq.h>
+#include <linux/cpu.h>
+#include <linux/pm_qos.h>
+#define DATARMNET81fe789d21 INT_MAX
+#define MIN_FREQ (0xd2d+202-0xdf7)
+#define DATARMNET59b491fbc9 DATARMNET81fe789d21
+#define DATARMNET03d51cb126 (0xd1f+216-0xdf5)
+struct cpu_freq{unsigned int DATARMNET103c8d34fe;unsigned int 
+DATARMNET1159aa2cb6;};unsigned int DATARMNET666c9ff35e __read_mostly=
+(0xd26+209-0xdf6);module_param(DATARMNET666c9ff35e,uint,(0xdb7+6665-0x261c));
+MODULE_PARM_DESC(DATARMNET666c9ff35e,
+"\x45\x6e\x61\x62\x6c\x65\x2f\x64\x69\x73\x61\x62\x6c\x65\x20\x66\x72\x65\x71\x20\x62\x6f\x6f\x73\x74\x20\x66\x65\x61\x74\x75\x72\x65"
+);struct workqueue_struct*DATARMNETde8f350999;struct DATARMNET4e6b0cd2b8{struct 
+cpu_freq __percpu*DATARMNET9dd9bc4abb;};static struct DATARMNET4e6b0cd2b8 
+DATARMNETc4b1be7898;static struct work_struct DATARMNETbfcbb4b8ac;static 
+DEFINE_PER_CPU(struct freq_qos_request,DATARMNET17d6a9530a);struct 
+DATARMNET257fd3bf84{struct cpu_freq __percpu*DATARMNETde47bee4ac;};static struct
+ DATARMNET257fd3bf84 DATARMNET7cf8d49bd5;static struct work_struct 
+DATARMNET3dc8e3c69f;static DEFINE_PER_CPU(struct freq_qos_request,
+DATARMNET68a4af61b9);static void DATARMNETb90d2272b4(struct work_struct*
+DATARMNET33110a3ff5){struct cpu_freq*DATARMNETe24d518157;unsigned int i;int ret;
+struct freq_qos_request*DATARMNETddcafd8b91;cpus_read_lock();for_each_online_cpu
+(i){DATARMNETe24d518157=per_cpu_ptr(DATARMNETc4b1be7898.DATARMNET9dd9bc4abb,i);
+DATARMNETddcafd8b91=&per_cpu(DATARMNET17d6a9530a,i);ret=freq_qos_update_request(
+DATARMNETddcafd8b91,DATARMNETe24d518157->DATARMNET103c8d34fe);}cpus_read_unlock(
+);}static void DATARMNET5a406b068f(struct work_struct*DATARMNET33110a3ff5){
+struct cpu_freq*DATARMNETe24d518157;unsigned int i;int ret;struct 
+freq_qos_request*DATARMNETddcafd8b91;cpus_read_lock();for_each_online_cpu(i){
+DATARMNETe24d518157=per_cpu_ptr(DATARMNET7cf8d49bd5.DATARMNETde47bee4ac,i);
+DATARMNETddcafd8b91=&per_cpu(DATARMNET68a4af61b9,i);ret=freq_qos_update_request(
+DATARMNETddcafd8b91,DATARMNETe24d518157->DATARMNET103c8d34fe);
+DATARMNETda96251102(DATARMNETb77d87790d,DATARMNET5994bb1411,DATARMNETe24d518157
+->DATARMNET103c8d34fe,DATARMNETe24d518157->DATARMNET1159aa2cb6,
+(0x16e8+787-0xc0c),(0x16e8+787-0xc0c),NULL,NULL);}cpus_read_unlock();}void 
+DATARMNET82d7f4ffa2(void){struct cpu_freq*DATARMNETe24d518157;int i;
+for_each_possible_cpu(i){DATARMNETe24d518157=per_cpu_ptr(DATARMNETc4b1be7898.
+DATARMNET9dd9bc4abb,i);DATARMNETe24d518157->DATARMNET103c8d34fe=MIN_FREQ;
+DATARMNETe24d518157->DATARMNET1159aa2cb6=DATARMNET81fe789d21;}
+for_each_possible_cpu(i){DATARMNETe24d518157=per_cpu_ptr(DATARMNET7cf8d49bd5.
+DATARMNETde47bee4ac,i);DATARMNETe24d518157->DATARMNET103c8d34fe=MIN_FREQ;
+DATARMNETe24d518157->DATARMNET1159aa2cb6=DATARMNET81fe789d21;}}void 
+DATARMNET5e4aeef593(int cpu){struct cpu_freq*DATARMNETe24d518157;int i=cpu;if(
+cpu<(0xd2d+202-0xdf7)||cpu>=DATARMNETc6782fed88)return;if(((0xd26+209-0xdf6)<<i)
+&DATARMNET9273f84bf1)return;DATARMNETe24d518157=per_cpu_ptr(DATARMNETc4b1be7898.
+DATARMNET9dd9bc4abb,i);DATARMNETe24d518157->DATARMNET103c8d34fe=
+DATARMNET59b491fbc9;DATARMNETe24d518157->DATARMNET1159aa2cb6=DATARMNET81fe789d21
+;trace_rmnet_freq_boost(i,DATARMNET59b491fbc9);}void DATARMNETfb7007f025(void){
+struct cpu_freq*DATARMNETe24d518157;int i;for_each_possible_cpu(i){if((
+(0xd26+209-0xdf6)<<i)&DATARMNETbc3c416b77)continue;DATARMNETe24d518157=
+per_cpu_ptr(DATARMNETc4b1be7898.DATARMNET9dd9bc4abb,i);DATARMNETe24d518157->
+DATARMNET103c8d34fe=DATARMNET59b491fbc9;DATARMNETe24d518157->DATARMNET1159aa2cb6
+=DATARMNET81fe789d21;trace_rmnet_freq_boost(i,DATARMNET59b491fbc9);}if(
+work_pending(&DATARMNETbfcbb4b8ac))return;if(DATARMNETde8f350999){queue_work_on(
+DATARMNET03d51cb126,DATARMNETde8f350999,&DATARMNETbfcbb4b8ac);}}void 
+DATARMNET202a68d7d0(void){struct cpu_freq*DATARMNETe24d518157;int i;
+for_each_possible_cpu(i){if(((0xd26+209-0xdf6)<<i)&DATARMNETbc3c416b77)continue;
+DATARMNETe24d518157=per_cpu_ptr(DATARMNET7cf8d49bd5.DATARMNETde47bee4ac,i);
+DATARMNETe24d518157->DATARMNET103c8d34fe=DATARMNET59b491fbc9;DATARMNETe24d518157
+->DATARMNET1159aa2cb6=DATARMNET81fe789d21;trace_rmnet_freq_boost(i,
+DATARMNET59b491fbc9);}if(work_pending(&DATARMNET3dc8e3c69f))return;if(
+DATARMNETde8f350999){queue_work_on(DATARMNET03d51cb126,DATARMNETde8f350999,&
+DATARMNET3dc8e3c69f);}}void DATARMNET371703c28d(void){struct cpu_freq*
+DATARMNETe24d518157;int i;for_each_possible_cpu(i){DATARMNETe24d518157=
+per_cpu_ptr(DATARMNETc4b1be7898.DATARMNET9dd9bc4abb,i);DATARMNETe24d518157->
+DATARMNET103c8d34fe=MIN_FREQ;DATARMNETe24d518157->DATARMNET1159aa2cb6=
+DATARMNET81fe789d21;trace_rmnet_freq_reset(i,MIN_FREQ);}if(work_pending(&
+DATARMNETbfcbb4b8ac))return;if(DATARMNETde8f350999)queue_work_on(
+DATARMNET03d51cb126,DATARMNETde8f350999,&DATARMNETbfcbb4b8ac);}void 
+DATARMNETf20806b279(void){struct cpu_freq*DATARMNETe24d518157;int i;
+for_each_possible_cpu(i){DATARMNETe24d518157=per_cpu_ptr(DATARMNET7cf8d49bd5.
+DATARMNETde47bee4ac,i);DATARMNETe24d518157->DATARMNET103c8d34fe=MIN_FREQ;
+DATARMNETe24d518157->DATARMNET1159aa2cb6=DATARMNET81fe789d21;
+trace_rmnet_freq_reset(i,MIN_FREQ);}if(work_pending(&DATARMNET3dc8e3c69f))return
+;if(DATARMNETde8f350999)queue_work_on(DATARMNET03d51cb126,DATARMNETde8f350999,&
+DATARMNET3dc8e3c69f);}static void DATARMNET009d37d173(void){struct 
+freq_qos_request*DATARMNETddcafd8b91;int i;for_each_possible_cpu(i){
+DATARMNETddcafd8b91=&per_cpu(DATARMNET17d6a9530a,i);if(DATARMNETddcafd8b91&&
+freq_qos_request_active(DATARMNETddcafd8b91)){freq_qos_remove_request(
+DATARMNETddcafd8b91);}DATARMNETddcafd8b91=&per_cpu(DATARMNET68a4af61b9,i);if(
+DATARMNETddcafd8b91&&freq_qos_request_active(DATARMNETddcafd8b91)){
+freq_qos_remove_request(DATARMNETddcafd8b91);}}}int DATARMNETe6e8431304(void){
+struct cpu_freq*DATARMNETe24d518157;int i;int ret=(0xd2d+202-0xdf7);struct 
+freq_qos_request*DATARMNETddcafd8b91;struct cpufreq_policy*policy;
+DATARMNETc4b1be7898.DATARMNET9dd9bc4abb=alloc_percpu(struct cpu_freq);if(!
+DATARMNETc4b1be7898.DATARMNET9dd9bc4abb)return-ENOMEM;DATARMNET7cf8d49bd5.
+DATARMNETde47bee4ac=alloc_percpu(struct cpu_freq);if(!DATARMNET7cf8d49bd5.
+DATARMNETde47bee4ac){free_percpu(DATARMNETc4b1be7898.DATARMNET9dd9bc4abb);return
+-ENOMEM;}if(!DATARMNETde8f350999)DATARMNETde8f350999=alloc_workqueue(
+"\x73\x68\x73\x5f\x62\x6f\x6f\x73\x74\x5f\x77\x71",WQ_HIGHPRI,(0xd2d+202-0xdf7))
+;if(!DATARMNETde8f350999){ret=-ENOMEM;goto err;}for_each_possible_cpu(i){
+DATARMNETe24d518157=per_cpu_ptr(DATARMNETc4b1be7898.DATARMNET9dd9bc4abb,i);
+DATARMNETddcafd8b91=&per_cpu(DATARMNET17d6a9530a,i);policy=cpufreq_cpu_get(i);if
+(!policy){pr_err(
+"\x25\x73\x3a\x20\x63\x70\x75\x66\x72\x65\x71\x20\x70\x6f\x6c\x69\x63\x79\x20\x6e\x6f\x74\x20\x66\x6f\x75\x6e\x64\x20\x66\x6f\x72\x20\x63\x70\x75\x25\x64" "\n"
+,__func__,i);return-ESRCH;}ret=freq_qos_add_request(&policy->constraints,
+DATARMNETddcafd8b91,FREQ_QOS_MIN,MIN_FREQ);if(ret<(0xd2d+202-0xdf7)){pr_err(
+"\x25\x73\x3a\x20\x46\x61\x69\x6c\x65\x64\x20\x74\x6f\x20\x61\x64\x64\x20\x66\x72\x65\x71\x20\x63\x6f\x6e\x73\x74\x72\x61\x69\x6e\x74\x20\x28\x25\x64\x29" "\n"
+,__func__,ret);return ret;}DATARMNETddcafd8b91=&per_cpu(DATARMNET68a4af61b9,i);
+policy=cpufreq_cpu_get(i);if(!policy){pr_err(
+"\x25\x73\x3a\x20\x63\x70\x75\x66\x72\x65\x71\x20\x70\x6f\x6c\x69\x63\x79\x20\x6e\x6f\x74\x20\x66\x6f\x75\x6e\x64\x20\x66\x6f\x72\x20\x70\x62\x20\x63\x70\x75\x25\x64" "\n"
+,__func__,i);return-ESRCH;}ret=freq_qos_add_request(&policy->constraints,
+DATARMNETddcafd8b91,FREQ_QOS_MIN,MIN_FREQ);if(ret<(0xd2d+202-0xdf7)){pr_err(
+"\x25\x73\x3a\x20\x46\x61\x69\x6c\x65\x64\x20\x74\x6f\x20\x61\x64\x64\x20\x70\x62\x20\x66\x72\x65\x71\x20\x63\x6f\x6e\x73\x74\x72\x61\x69\x6e\x74\x20\x28\x25\x64\x29" "\n"
+,__func__,ret);return ret;}}INIT_WORK(&DATARMNETbfcbb4b8ac,DATARMNETb90d2272b4);
+INIT_WORK(&DATARMNET3dc8e3c69f,DATARMNET5a406b068f);DATARMNET82d7f4ffa2();return
+(0xd2d+202-0xdf7);err:DATARMNET82d7f4ffa2();free_percpu(DATARMNETc4b1be7898.
+DATARMNET9dd9bc4abb);free_percpu(DATARMNET7cf8d49bd5.DATARMNETde47bee4ac);if(
+DATARMNETde8f350999){destroy_workqueue(DATARMNETde8f350999);DATARMNETde8f350999=
+NULL;}return ret;}int DATARMNETdf74db7e38(void){DATARMNET009d37d173();if(
+DATARMNETde8f350999){destroy_workqueue(DATARMNETde8f350999);DATARMNETde8f350999=
+NULL;}free_percpu(DATARMNETc4b1be7898.DATARMNET9dd9bc4abb);free_percpu(
+DATARMNET7cf8d49bd5.DATARMNETde47bee4ac);return(0xd2d+202-0xdf7);}

+ 22 - 0
qcom/opensource/datarmnet-ext/shs/rmnet_shs_freq.h

@@ -0,0 +1,22 @@
+/* Copyright (c) 2020-2021 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 and
+ * only version 2 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ */
+
+#ifndef DATARMNETef19703014
+#define DATARMNETef19703014
+int DATARMNETe6e8431304(void);int DATARMNETdf74db7e38(void);void 
+DATARMNETfb7007f025(void);void DATARMNET371703c28d(void);void 
+DATARMNET202a68d7d0(void);void DATARMNETf20806b279(void);void 
+DATARMNET5e4aeef593(int cpu);
+#endif
+

+ 380 - 0
qcom/opensource/datarmnet-ext/shs/rmnet_shs_ll.c

@@ -0,0 +1,380 @@
+/* Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 and
+ * only version 2 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ */
+
+#include <net/sock.h>
+#include <linux/netlink.h>
+#include <linux/ip.h>
+#include <linux/cpu.h>
+#include <net/ip.h>
+#include <linux/cpu.h>
+#include <linux/bitmap.h>
+#include <linux/kernel.h>
+#include <linux/smp.h>
+#include <linux/ipv6.h>
+#include <linux/netdevice.h>
+#include <linux/percpu-defs.h>
+#include "rmnet_shs.h"
+#include "rmnet_shs_wq_genl.h"
+#include "rmnet_shs_config.h"
+#include "rmnet_shs_wq.h"
+#include "rmnet_shs_modules.h"
+#include "rmnet_shs_common.h"
+#include "rmnet_trace.h"
+#include <linux/icmp.h>
+#include <linux/inet.h>
+DEFINE_HASHTABLE(DATARMNET58fe8ac797,DATARMNET25437d35fd);DEFINE_HASHTABLE(
+DATARMNET5750992efb,DATARMNET25437d35fd);DEFINE_SPINLOCK(DATARMNETd83ee17944);
+struct DATARMNETe600c5b727 DATARMNET148e775ece[DATARMNETc6782fed88];
+#define DATARMNET82243f712c (0xeb7+698-0x110d)
+#define DATARMNET832731a933(CPU) (per_cpu(softnet_data, CPU).input_pkt_queue)
+#define DATARMNET3de2536baf(CPU) (per_cpu(softnet_data, CPU).process_queue)
+#define DATARMNETd2d15e7f67(CPU) (DATARMNET832731a933(CPU).qlen + \
+DATARMNET3de2536baf(CPU).qlen)
+#define DATARMNET78ec5e8746(DATARMNETfbfdc7f27e, CPU) (per_cpu(\
+DATARMNETfbfdc7f27e, CPU).input_queue_tail)
+#define DATARMNET9c1c20df35(DATARMNETfbfdc7f27e, CPU) (per_cpu(\
+DATARMNETfbfdc7f27e, CPU).input_queue_head)
+#define DATARMNET66ead9195a(CPU) (per_cpu(softnet_data, CPU).input_queue_head)
+#define DATARMNETbb1541e65b(CPU) (per_cpu(softnet_data, CPU).input_queue_tail)
+#define DATARMNET8053357aa4 (0xeb7+1130-0x130d)
+unsigned int DATARMNETefe3dcad0a=(0xd2d+202-0xdf7);module_param(
+DATARMNETefe3dcad0a,uint,(0xdb7+6665-0x261c));MODULE_PARM_DESC(
+DATARMNETefe3dcad0a,
+"\x4c\x4c\x20\x70\x61\x63\x6b\x65\x74\x73\x20\x73\x65\x65\x6e\x20\x69\x6e\x20\x6c\x6c\x20\x72\x6d\x6e\x65\x74\x5f\x73\x68\x73"
+);unsigned int DATARMNET75ae82094a=(0xd2d+202-0xdf7);module_param(
+DATARMNET75ae82094a,uint,(0xdb7+6665-0x261c));MODULE_PARM_DESC(
+DATARMNET75ae82094a,
+"\x4c\x4c\x20\x66\x69\x6c\x74\x65\x72\x20\x63\x6f\x75\x6e\x74\x20\x73\x65\x65\x6e\x20\x69\x6e\x20\x6c\x6c\x20\x72\x6d\x6e\x65\x74\x5f\x73\x68\x73"
+);int DATARMNETf4aefff4c2(struct sk_buff*skb){int DATARMNETbd864aa442=
+(0xd2d+202-0xdf7);struct iphdr*ip4h,DATARMNETc00baf31c3;struct ipv6hdr*ip6h,
+DATARMNETcf1d9e2c1e;const struct ipv6_opt_hdr*DATARMNET7b34b7b5be;struct 
+ipv6_opt_hdr DATARMNET1688a97aa4;switch(skb->protocol){case htons(ETH_P_IP):ip4h
+=DATARMNETefcaf5fbe9(skb,(0xd2d+202-0xdf7),sizeof(*ip4h),&DATARMNETc00baf31c3);
+if(!ip4h)break;if(!ip_is_fragment(ip4h)&&(ip4h->protocol==IPPROTO_TCP||ip4h->
+protocol==IPPROTO_UDP)){DATARMNETbd864aa442=(0xd26+209-0xdf6);break;}if(ip4h->
+protocol==IPPROTO_ICMP){skb->hash=(0xd2d+202-0xdf7);skb->sw_hash=
+(0xd26+209-0xdf6);if(trace_print_icmp_rx_enabled()){char saddr[INET6_ADDRSTRLEN]
+,daddr[INET6_ADDRSTRLEN];u16 ip_proto=(0xd2d+202-0xdf7);__be16 sequence=
+(0xd2d+202-0xdf7);u8 type=(0xd2d+202-0xdf7);struct icmphdr*icmphdr,
+DATARMNET5aa29a2264;memset(saddr,(0xd2d+202-0xdf7),INET6_ADDRSTRLEN);memset(
+daddr,(0xd2d+202-0xdf7),INET6_ADDRSTRLEN);icmphdr=DATARMNETefcaf5fbe9(skb,ip4h->
+ihl*(0xd11+230-0xdf3),sizeof(*icmphdr),&DATARMNET5aa29a2264);if(!icmphdr)goto 
+DATARMNET03fd0cd6e6;if(icmphdr->type!=ICMP_ECHOREPLY&&icmphdr->type!=ICMP_ECHO)
+goto DATARMNET03fd0cd6e6;ip_proto=htons(ETH_P_IP);type=icmphdr->type;sequence=
+icmphdr->un.echo.sequence;snprintf(saddr,INET6_ADDRSTRLEN,"\x25\x70\x49\x34",&
+ip4h->saddr);snprintf(daddr,INET6_ADDRSTRLEN,"\x25\x70\x49\x34",&ip4h->daddr);
+trace_print_icmp_rx(skb,ip_proto,type,sequence,saddr,daddr);}}else if(ip4h->
+protocol==IPPROTO_ESP){skb->hash=DATARMNETaa0602144b;skb->sw_hash=
+(0xd26+209-0xdf6);}DATARMNET03fd0cd6e6:break;case htons(ETH_P_IPV6):ip6h=
+DATARMNETefcaf5fbe9(skb,(0xd2d+202-0xdf7),sizeof(*ip6h),&DATARMNETcf1d9e2c1e);if
+(!ip6h)break;if(!(ip6h->nexthdr==NEXTHDR_FRAGMENT)&&(ip6h->nexthdr==IPPROTO_TCP
+||ip6h->nexthdr==IPPROTO_UDP)){DATARMNETbd864aa442=(0xd26+209-0xdf6);break;}if(
+ip6h->nexthdr==NEXTHDR_ICMP){skb->hash=(0xd2d+202-0xdf7);skb->sw_hash=
+(0xd26+209-0xdf6);if(trace_print_icmp_rx_enabled()){char saddr[INET6_ADDRSTRLEN]
+,daddr[INET6_ADDRSTRLEN];u16 ip_proto=(0xd2d+202-0xdf7);__be16 sequence=
+(0xd2d+202-0xdf7);u8 type=(0xd2d+202-0xdf7);struct icmp6hdr*icmp6hdr,
+DATARMNETaa41336581;memset(saddr,(0xd2d+202-0xdf7),INET6_ADDRSTRLEN);memset(
+daddr,(0xd2d+202-0xdf7),INET6_ADDRSTRLEN);icmp6hdr=DATARMNETefcaf5fbe9(skb,
+sizeof(*ip6h),sizeof(*icmp6hdr),&DATARMNETaa41336581);if(!icmp6hdr)goto 
+DATARMNETf623862dd4;if(icmp6hdr->icmp6_type!=ICMPV6_ECHO_REQUEST&&icmp6hdr->
+icmp6_type!=ICMPV6_ECHO_REPLY)goto DATARMNETf623862dd4;ip_proto=htons(ETH_P_IPV6
+);type=icmp6hdr->icmp6_type;sequence=icmp6hdr->icmp6_sequence;snprintf(saddr,
+INET6_ADDRSTRLEN,"\x25\x70\x49\x36",&ip6h->saddr);snprintf(daddr,
+INET6_ADDRSTRLEN,"\x25\x70\x49\x36",&ip6h->daddr);trace_print_icmp_rx(skb,
+ip_proto,type,sequence,saddr,daddr);}}else if(ip6h->nexthdr==NEXTHDR_ESP){skb->
+hash=DATARMNETaa0602144b;skb->sw_hash=(0xd26+209-0xdf6);}else if(ip6h->nexthdr==
+NEXTHDR_FRAGMENT){if(skb->len-sizeof(struct ipv6hdr)<(int)sizeof(struct 
+ipv6_opt_hdr)){break;}DATARMNET7b34b7b5be=skb_header_pointer(skb,sizeof(struct 
+ipv6hdr),sizeof(DATARMNET1688a97aa4),&DATARMNET1688a97aa4);if(
+DATARMNET7b34b7b5be&&DATARMNET7b34b7b5be->nexthdr==NEXTHDR_ESP){skb->hash=
+DATARMNETaa0602144b;skb->sw_hash=(0xd26+209-0xdf6);}}DATARMNETf623862dd4:break;
+default:break;}DATARMNETda96251102(DATARMNETcd24fca747,DATARMNET116c96c236,
+DATARMNETbd864aa442,(0x16e8+787-0xc0c),(0x16e8+787-0xc0c),(0x16e8+787-0xc0c),skb
+,NULL);return DATARMNETbd864aa442;}int DATARMNET71b0abb49e(struct sk_buff*skb,
+struct ipv6hdr*DATARMNET5d09fca14e,struct DATARMNETbf4d34b241*
+DATARMNET54338da2ff){struct tcphdr*tp,DATARMNETd1ff6cd568;struct udphdr*up,
+DATARMNETc82d2f4e16;int DATARMNETb3ce3d0107,DATARMNETb16a9be210,
+DATARMNET5a94751027,DATARMNETad7ab41bc8,DATARMNETf13f5dee10=false;int ret=false;
+int DATARMNETd6e492a659=(0xd2d+202-0xdf7);u8 protocol;__be16 frag_off;
+DATARMNETb3ce3d0107=!DATARMNET54338da2ff->DATARMNET1819cae4a3||ipv6_addr_equal(&
+DATARMNET5d09fca14e->saddr,&DATARMNET54338da2ff->DATARMNET53d5f671f0.v6_saddr);
+DATARMNETb16a9be210=!DATARMNET54338da2ff->DATARMNETb035edcfb9||ipv6_addr_equal(&
+DATARMNET5d09fca14e->daddr,&DATARMNET54338da2ff->DATARMNETea422561ef.v6_daddr);
+DATARMNET5a94751027=!DATARMNET54338da2ff->DATARMNET8b5ace4a98||
+DATARMNET54338da2ff->proto==DATARMNET5d09fca14e->nexthdr;DATARMNETad7ab41bc8=!
+DATARMNET54338da2ff->DATARMNET5a5907dd87;DATARMNETf13f5dee10=!
+DATARMNET54338da2ff->DATARMNET1c959e10ca;protocol=DATARMNET5d09fca14e->nexthdr;
+if(DATARMNET54338da2ff->DATARMNET5a5907dd87||DATARMNET54338da2ff->
+DATARMNET1c959e10ca){DATARMNETd6e492a659=ipv6_skip_exthdr(skb,sizeof(*
+DATARMNET5d09fca14e),&protocol,&frag_off);if(DATARMNETd6e492a659<
+(0xd2d+202-0xdf7)){return false;}if(DATARMNET5d09fca14e->nexthdr==IPPROTO_TCP){
+tp=DATARMNETefcaf5fbe9(skb,DATARMNETd6e492a659,sizeof(*tp),&DATARMNETd1ff6cd568)
+;if(!tp){DATARMNETad7ab41bc8=false;DATARMNETf13f5dee10=false;}else{
+DATARMNETad7ab41bc8=!DATARMNET54338da2ff->DATARMNET5a5907dd87||tp->source==(
+DATARMNET54338da2ff->src_port);DATARMNETf13f5dee10=!DATARMNET54338da2ff->
+DATARMNET1c959e10ca||tp->dest==(DATARMNET54338da2ff->DATARMNET1e49bc75c8);}}else
+ if(DATARMNET5d09fca14e->nexthdr==IPPROTO_UDP){up=DATARMNETefcaf5fbe9(skb,
+DATARMNETd6e492a659,sizeof(*up),&DATARMNETc82d2f4e16);if(!up){
+DATARMNETad7ab41bc8=false;DATARMNETf13f5dee10=false;}else{DATARMNETad7ab41bc8=!
+DATARMNET54338da2ff->DATARMNET5a5907dd87||up->source==(DATARMNET54338da2ff->
+src_port);DATARMNETf13f5dee10=!DATARMNET54338da2ff->DATARMNET1c959e10ca||up->
+dest==(DATARMNET54338da2ff->DATARMNET1e49bc75c8);}}}if((DATARMNETb3ce3d0107)&&(
+DATARMNETb16a9be210)&&(DATARMNET5a94751027)&&(DATARMNETad7ab41bc8)&&(
+DATARMNETf13f5dee10))ret=true;return ret;}int DATARMNETb9e0ebf153(struct sk_buff
+*skb,struct iphdr*skb_ip4h,struct DATARMNETbf4d34b241*DATARMNET54338da2ff){int 
+ret=false;struct tcphdr*tp,DATARMNETd1ff6cd568;struct udphdr*up,
+DATARMNETc82d2f4e16;u16 DATARMNET43b01ff41b=skb_ip4h->ihl*(0xd11+230-0xdf3);int 
+DATARMNETb3ce3d0107=!DATARMNET54338da2ff->DATARMNET1819cae4a3||skb_ip4h->saddr==
+DATARMNET54338da2ff->DATARMNET53d5f671f0.saddr;int DATARMNETb16a9be210=!
+DATARMNET54338da2ff->DATARMNETb035edcfb9||skb_ip4h->daddr==(DATARMNET54338da2ff
+->DATARMNETea422561ef.daddr);int DATARMNET5a94751027=!DATARMNET54338da2ff->
+DATARMNET8b5ace4a98||skb_ip4h->protocol==DATARMNET54338da2ff->proto;int 
+DATARMNETad7ab41bc8=!DATARMNET54338da2ff->DATARMNET5a5907dd87;int 
+DATARMNETf13f5dee10=!DATARMNET54338da2ff->DATARMNET1c959e10ca;if(
+DATARMNET54338da2ff->DATARMNET5a5907dd87||DATARMNET54338da2ff->
+DATARMNET1c959e10ca){if(skb_ip4h->protocol==IPPROTO_TCP){tp=DATARMNETefcaf5fbe9(
+skb,DATARMNET43b01ff41b,sizeof(*tp),&DATARMNETd1ff6cd568);if(!tp){
+DATARMNETad7ab41bc8=false;DATARMNETf13f5dee10=false;}else{DATARMNETad7ab41bc8=!
+DATARMNET54338da2ff->DATARMNET5a5907dd87||tp->source==(DATARMNET54338da2ff->
+src_port);DATARMNETf13f5dee10=!DATARMNET54338da2ff->DATARMNET1c959e10ca||tp->
+dest==(DATARMNET54338da2ff->DATARMNET1e49bc75c8);}}else if(skb_ip4h->protocol==
+IPPROTO_UDP){up=DATARMNETefcaf5fbe9(skb,DATARMNET43b01ff41b,sizeof(*up),&
+DATARMNETc82d2f4e16);if(!up){DATARMNETad7ab41bc8=false;DATARMNETf13f5dee10=false
+;}else{DATARMNETad7ab41bc8=!DATARMNET54338da2ff->DATARMNET5a5907dd87||up->source
+==(DATARMNET54338da2ff->src_port);DATARMNETf13f5dee10=!DATARMNET54338da2ff->
+DATARMNET1c959e10ca||up->dest==(DATARMNET54338da2ff->DATARMNET1e49bc75c8);}}}if(
+(DATARMNETb3ce3d0107)&&(DATARMNETb16a9be210)&&(DATARMNET5a94751027)&&(
+DATARMNETad7ab41bc8)&&(DATARMNETf13f5dee10))ret=true;rm_err(
+"\x53\x48\x53\x5f\x4c\x4c\x3a\x20\x56\x34\x20\x73\x61\x64\x64\x72\x20\x6d\x61\x74\x63\x68\x20\x25\x75\x20\x64\x61\x64\x64\x72\x20\x6d\x61\x74\x63\x68\x20\x25\x75\x2c\x20\x70\x72\x6f\x74\x6f\x20\x6d\x61\x74\x63\x68\x20\x25\x75\x2c\x20\x73\x72\x63\x20\x70\x6f\x72\x74\x20\x25\x75\x2c\x20\x64\x65\x73\x74\x20\x70\x6f\x72\x74\x20\x6d\x61\x74\x63\x68\x20\x25\x75\x20\x20\x70\x72\x6f\x74\x6f\x20\x25\x75" "\n"
+,DATARMNETb3ce3d0107,DATARMNETb16a9be210,DATARMNET5a94751027,DATARMNETad7ab41bc8
+,DATARMNETf13f5dee10,skb_ip4h->protocol);return ret;}int DATARMNET8fc45abdc4(
+struct DATARMNET0331d6732d*DATARMNET63b1a086d5,struct DATARMNET0331d6732d*
+DATARMNET82190d5ee0){struct DATARMNETbf4d34b241*DATARMNET54338da2ff=&
+DATARMNET63b1a086d5->DATARMNET54338da2ff;struct DATARMNETbf4d34b241*
+DATARMNET099bdc749a=&DATARMNET82190d5ee0->DATARMNET54338da2ff;int 
+DATARMNET10f1c9f8db=DATARMNET54338da2ff->DATARMNET602389fe52==
+DATARMNET099bdc749a->DATARMNET602389fe52;int DATARMNETb3ce3d0107,
+DATARMNETb16a9be210,DATARMNET5a94751027,DATARMNETad7ab41bc8,DATARMNETf13f5dee10=
+false;if(DATARMNET54338da2ff->seq&&DATARMNET099bdc749a->seq&&(
+DATARMNET54338da2ff->seq==DATARMNET099bdc749a->seq)){return true;}
+DATARMNETb3ce3d0107=(!DATARMNET54338da2ff->DATARMNET1819cae4a3&&!
+DATARMNET099bdc749a->DATARMNET1819cae4a3)||(DATARMNET54338da2ff->
+DATARMNET1819cae4a3&&DATARMNET099bdc749a->DATARMNET1819cae4a3&&(
+DATARMNET54338da2ff->DATARMNET602389fe52==(0xd11+230-0xdf3))?(
+DATARMNET54338da2ff->DATARMNET53d5f671f0.saddr==DATARMNET099bdc749a->
+DATARMNET53d5f671f0.saddr):ipv6_addr_equal(&DATARMNET099bdc749a->
+DATARMNET53d5f671f0.v6_saddr,&DATARMNET54338da2ff->DATARMNET53d5f671f0.v6_saddr)
+);DATARMNETb16a9be210=(!DATARMNET54338da2ff->DATARMNETb035edcfb9&&!
+DATARMNET099bdc749a->DATARMNETb035edcfb9)||(DATARMNET54338da2ff->
+DATARMNETb035edcfb9&&DATARMNET099bdc749a->DATARMNETb035edcfb9&&(
+DATARMNET54338da2ff->DATARMNET602389fe52==(0xd11+230-0xdf3))?(
+DATARMNET54338da2ff->DATARMNETea422561ef.daddr==DATARMNET099bdc749a->
+DATARMNETea422561ef.daddr):ipv6_addr_equal(&DATARMNET099bdc749a->
+DATARMNETea422561ef.v6_daddr,&DATARMNET54338da2ff->DATARMNETea422561ef.v6_daddr)
+);DATARMNET5a94751027=(!DATARMNET54338da2ff->DATARMNET8b5ace4a98&&!
+DATARMNET099bdc749a->DATARMNET8b5ace4a98)||(DATARMNET54338da2ff->
+DATARMNET8b5ace4a98&&DATARMNET099bdc749a->DATARMNET8b5ace4a98&&
+DATARMNET54338da2ff->proto==DATARMNET099bdc749a->proto);DATARMNETad7ab41bc8=(!
+DATARMNET54338da2ff->DATARMNET5a5907dd87&&!DATARMNET099bdc749a->
+DATARMNET5a5907dd87)||(DATARMNET54338da2ff->DATARMNET5a5907dd87&&
+DATARMNET099bdc749a->DATARMNET5a5907dd87&&DATARMNET54338da2ff->src_port==
+DATARMNET099bdc749a->src_port);DATARMNETf13f5dee10=(!DATARMNET54338da2ff->
+DATARMNET1c959e10ca&&!DATARMNET099bdc749a->DATARMNET1c959e10ca)||(
+DATARMNET54338da2ff->DATARMNET1c959e10ca&&DATARMNET099bdc749a->
+DATARMNET1c959e10ca&&DATARMNET54338da2ff->DATARMNET1e49bc75c8==
+DATARMNET099bdc749a->DATARMNET1e49bc75c8);rm_err(
+"\x53\x48\x53\x5f\x4c\x4c\x3a\x20\x6d\x61\x74\x63\x68\x20\x72\x65\x73\x75\x6c\x74\x20\x73\x61\x64\x72\x20\x6d\x61\x74\x63\x68\x20\x25\x75\x20\x64\x61\x64\x64\x72\x20\x6d\x61\x74\x63\x68\x20\x25\x75\x2c\x20\x70\x72\x6f\x74\x6f\x20\x6d\x61\x74\x63\x68\x20\x25\x75\x2c\x20\x73\x72\x63\x20\x70\x6f\x72\x74\x20\x25\x75\x2c\x20\x64\x65\x73\x74\x20\x70\x6f\x72\x74\x20\x6d\x61\x74\x63\x68\x20\x25\x75\x20\x20\x76\x65\x72\x73\x69\x6f\x6e\x6d\x61\x74\x63\x68\x20\x25\x75" "\n"
+,DATARMNETb3ce3d0107,DATARMNETb16a9be210,DATARMNET5a94751027,DATARMNETad7ab41bc8
+,DATARMNETf13f5dee10,DATARMNET10f1c9f8db);return(DATARMNET10f1c9f8db&&
+DATARMNETb3ce3d0107&&DATARMNETb16a9be210&&DATARMNET5a94751027&&
+DATARMNETad7ab41bc8&&DATARMNETf13f5dee10);}int DATARMNETe24386452c(struct 
+sk_buff*skb){struct iphdr*ip4h,DATARMNETc00baf31c3;struct ipv6hdr*ip6h,
+DATARMNETcf1d9e2c1e;struct DATARMNET0331d6732d*node_p;struct hlist_node*tmp;int 
+ret=false;spin_lock_bh(&DATARMNETd83ee17944);switch(skb->protocol){case htons(
+ETH_P_IP):ip4h=DATARMNETefcaf5fbe9(skb,(0xd2d+202-0xdf7),sizeof(*ip4h),&
+DATARMNETc00baf31c3);if(!ip4h){break;}hash_for_each_possible_safe(
+DATARMNET5750992efb,node_p,tmp,list,ip4h->saddr){if(DATARMNETb9e0ebf153(skb,ip4h
+,&node_p->DATARMNET54338da2ff)){ret=true;break;}}break;case htons(ETH_P_IPV6):
+ip6h=DATARMNETefcaf5fbe9(skb,(0xd2d+202-0xdf7),sizeof(*ip6h),&
+DATARMNETcf1d9e2c1e);if(!ip6h){break;}hash_for_each_possible_safe(
+DATARMNET5750992efb,node_p,tmp,list,ip6h->saddr.in6_u.u6_addr32[
+(0xd2d+202-0xdf7)]){if(DATARMNET71b0abb49e(skb,ip6h,&node_p->DATARMNET54338da2ff
+)){ret=true;break;}}break;default:break;}spin_unlock_bh(&DATARMNETd83ee17944);
+rm_err(
+"\x53\x48\x53\x5f\x4c\x4c\x3a\x20\x50\x61\x63\x6b\x65\x74\x20\x46\x69\x6c\x74\x65\x72\x20\x63\x68\x65\x63\x6b\x65\x64\x20\x61\x6e\x61\x6c\x79\x7a\x65\x64\x20\x72\x65\x74\x3a\x20\x25\x64"
+,ret);return ret;}void DATARMNETd52d50282d(struct DATARMNET0331d6732d*
+DATARMNET63b1a086d5){struct DATARMNET0331d6732d*DATARMNET9a739c7d8b;struct 
+hlist_node*tmp;struct DATARMNET6c78e47d24*DATARMNETd2a694d52a=NULL;unsigned long
+ bkt;int i=(0xd2d+202-0xdf7);spin_lock_bh(&DATARMNETd83ee17944);
+hash_for_each_safe(DATARMNET5750992efb,bkt,tmp,DATARMNET9a739c7d8b,list){i++;if(
+DATARMNET8fc45abdc4(DATARMNET9a739c7d8b,DATARMNET63b1a086d5)){rm_err(
+"\x53\x48\x53\x5f\x4c\x4c\x3a\x20\x25\x73" "\n",
+"\x46\x69\x6c\x74\x65\x72\x20\x61\x6c\x72\x65\x61\x64\x79\x20\x69\x6e\x73\x74\x61\x6c\x6c\x65\x64\x2c\x20\x44\x75\x70\x20\x46\x69\x6c\x74\x65\x72"
+);hash_del_rcu(&DATARMNET9a739c7d8b->list);kfree(DATARMNET9a739c7d8b);break;}}
+spin_unlock_bh(&DATARMNETd83ee17944);spin_lock_bh(&DATARMNETfbdbab2ef6);
+list_for_each_entry(DATARMNETd2a694d52a,&DATARMNET9825511866,DATARMNET6de26f0feb
+){if(DATARMNETd2a694d52a->DATARMNET63b1a086d5&&!DATARMNETd2a694d52a->
+DATARMNET63b1a086d5->DATARMNET80eb31d7b8){DATARMNETd2a694d52a->
+DATARMNET63b1a086d5->DATARMNET80eb31d7b8=DATARMNET64165df74d;}}spin_unlock_bh(&
+DATARMNETfbdbab2ef6);kfree(DATARMNET63b1a086d5);DATARMNETecc0627c70.
+DATARMNET110549da6f--;DATARMNET75ae82094a--;rm_err(
+"\x53\x48\x53\x5f\x4c\x4c\x3a\x20\x25\x73",
+"\x20\x55\x6e\x69\x6e\x73\x74\x61\x6c\x6c\x65\x64\x20\x4c\x4c\x20\x66\x69\x6c\x74\x65\x72"
+);}void DATARMNET1e918c8e0d(struct DATARMNET0331d6732d*DATARMNET63b1a086d5){
+struct DATARMNETbf4d34b241*DATARMNET54338da2ff=&DATARMNET63b1a086d5->
+DATARMNET54338da2ff;pr_info(
+"\x53\x48\x53\x5f\x4c\x4c\x3a\x20\x70\x72\x6f\x74\x6f\x20\x76\x61\x6c\x69\x64\x20\x25\x75\x20\x73\x72\x63\x20\x61\x64\x64\x72\x20\x76\x61\x6c\x69\x64\x20\x25\x75\x2c\x20\x64\x65\x73\x74\x20\x61\x64\x64\x72\x20\x76\x61\x6c\x69\x64\x20\x25\x75\x2c\x20\x64\x65\x73\x74\x20\x70\x6f\x72\x74\x20\x76\x61\x6c\x69\x64\x20\x25\x75\x2c\x20\x73\x72\x63\x70\x6f\x72\x74\x20\x76\x61\x6c\x69\x64\x20\x25\x75\x2c\x20\x69\x70\x20\x76\x65\x72\x73\x69\x6f\x6e\x20\x25\x75\x20\x73\x65\x71\x20\x25\x75"
+,DATARMNET54338da2ff->DATARMNET8b5ace4a98,DATARMNET54338da2ff->
+DATARMNET1819cae4a3,DATARMNET54338da2ff->DATARMNETb035edcfb9,DATARMNET54338da2ff
+->DATARMNET1c959e10ca,DATARMNET54338da2ff->DATARMNET5a5907dd87,
+DATARMNET54338da2ff->DATARMNET602389fe52,DATARMNET54338da2ff->seq);pr_info(
+"\x53\x48\x53\x5f\x4c\x4c\x3a\x20\x69\x6e\x66\x6f\x2d\x3e\x69\x70\x5f\x76\x65\x72\x73\x69\x6f\x6e\x20\x25\x75"
+,DATARMNET54338da2ff->DATARMNET602389fe52);pr_info(
+"\x53\x48\x53\x5f\x4c\x4c\x3a\x20\x69\x6e\x66\x6f\x2d\x3e\x70\x72\x6f\x74\x6f\x20\x25\x75"
+,DATARMNET54338da2ff->proto);pr_info(
+"\x53\x48\x53\x5f\x4c\x4c\x3a\x20\x69\x6e\x66\x6f\x2d\x3e\x64\x65\x73\x74\x5f\x70\x6f\x72\x74\x20\x25\x75"
+,DATARMNET54338da2ff->DATARMNET1e49bc75c8);pr_info(
+"\x53\x48\x53\x5f\x4c\x4c\x3a\x20\x69\x6e\x66\x6f\x2d\x3e\x73\x72\x63\x5f\x70\x6f\x72\x74\x20\x25\x75"
+,DATARMNET54338da2ff->src_port);pr_info(
+"\x53\x48\x53\x5f\x4c\x4c\x3a\x20\x69\x6e\x66\x6f\x2d\x3e\x64\x65\x73\x74\x5f\x61\x64\x64\x72\x5f\x76\x61\x6c\x69\x64\x20\x25\x75"
+,DATARMNET54338da2ff->DATARMNETb035edcfb9);pr_info(
+"\x53\x48\x53\x5f\x4c\x4c\x3a\x20\x69\x6e\x66\x6f\x2d\x3e\x73\x72\x63\x5f\x61\x64\x64\x72\x5f\x76\x61\x6c\x69\x64\x20\x25\x75"
+,DATARMNET54338da2ff->DATARMNET1819cae4a3);pr_info(
+"\x53\x48\x53\x5f\x4c\x4c\x3a\x20\x69\x6e\x66\x6f\x2d\x3e\x73\x65\x71\x20\x25\x75"
+,DATARMNET54338da2ff->seq);if(DATARMNET54338da2ff->DATARMNET602389fe52==
+(0xd11+230-0xdf3)&&(DATARMNET54338da2ff->DATARMNETb035edcfb9)&&(
+DATARMNET54338da2ff->DATARMNET1819cae4a3)){pr_info(
+"\x4e\x65\x77\x20\x66\x6c\x6f\x77\x20\x69\x6e\x66\x6f\x2d\x3e\x64\x65\x73\x74\x5f\x61\x64\x64\x72\x5f\x76\x61\x6c\x69\x64\x20\x25\x75\x20"
+,DATARMNET54338da2ff->DATARMNETea422561ef.daddr);pr_info(
+"\x4e\x65\x77\x20\x66\x6c\x6f\x77\x20\x69\x6e\x66\x6f\x2d\x3e\x73\x72\x63\x5f\x61\x64\x64\x72\x5f\x76\x61\x6c\x69\x64\x20\x25\x75"
+,DATARMNET54338da2ff->DATARMNET53d5f671f0.saddr);}if(DATARMNET54338da2ff->
+DATARMNET602389fe52==(0xd03+244-0xdf1)&&(DATARMNET54338da2ff->
+DATARMNETb035edcfb9)&&(DATARMNET54338da2ff->DATARMNET1819cae4a3)){pr_info(
+"\x4e\x65\x77\x20\x66\x6c\x6f\x77\x20\x69\x6e\x66\x6f\x2d\x3e\x64\x65\x73\x74\x5f\x61\x64\x64\x72\x5f\x76\x61\x6c\x69\x64\x20\x25\x75\x20\x25\x75\x20\x25\x75\x20\x25\x75\x20"
+,DATARMNET63b1a086d5->DATARMNET54338da2ff.DATARMNETea422561ef.v6_daddr.in6_u.
+u6_addr32[(0xd18+223-0xdf4)],DATARMNET63b1a086d5->DATARMNET54338da2ff.
+DATARMNETea422561ef.v6_daddr.in6_u.u6_addr32[(0xd1f+216-0xdf5)],
+DATARMNET63b1a086d5->DATARMNET54338da2ff.DATARMNETea422561ef.v6_daddr.in6_u.
+u6_addr32[(0xd26+209-0xdf6)],DATARMNET63b1a086d5->DATARMNET54338da2ff.
+DATARMNETea422561ef.v6_daddr.in6_u.u6_addr32[(0xd2d+202-0xdf7)]);pr_info(
+"\x4e\x65\x77\x20\x66\x6c\x6f\x77\x20\x69\x6e\x66\x6f\x2d\x3e\x73\x72\x63\x5f\x61\x64\x64\x72\x5f\x76\x61\x6c\x69\x64\x20\x20\x25\x75\x20\x25\x75\x20\x25\x75\x20\x25\x75"
+,DATARMNET63b1a086d5->DATARMNET54338da2ff.DATARMNET53d5f671f0.v6_saddr.in6_u.
+u6_addr32[(0xd18+223-0xdf4)],DATARMNET63b1a086d5->DATARMNET54338da2ff.
+DATARMNET53d5f671f0.v6_saddr.in6_u.u6_addr32[(0xd1f+216-0xdf5)],
+DATARMNET63b1a086d5->DATARMNET54338da2ff.DATARMNET53d5f671f0.v6_saddr.in6_u.
+u6_addr32[(0xd26+209-0xdf6)],DATARMNET63b1a086d5->DATARMNET54338da2ff.
+DATARMNET53d5f671f0.v6_saddr.in6_u.u6_addr32[(0xd2d+202-0xdf7)]);}}void 
+DATARMNET2ac305d296(struct DATARMNET0331d6732d*DATARMNET63b1a086d5){struct 
+DATARMNET0331d6732d*DATARMNET9a739c7d8b;struct DATARMNET6c78e47d24*
+DATARMNETd2a694d52a=NULL;unsigned long bkt;int i=(0xd2d+202-0xdf7);spin_lock_bh(
+&DATARMNETd83ee17944);hash_for_each(DATARMNET5750992efb,bkt,DATARMNET9a739c7d8b,
+list){i++;if(DATARMNET8fc45abdc4(DATARMNET9a739c7d8b,DATARMNET63b1a086d5)){kfree
+(DATARMNET63b1a086d5);spin_unlock_bh(&DATARMNETd83ee17944);rm_err(
+"\x53\x48\x53\x5f\x4c\x4c\x3a\x20\x25\x73",
+"\x20\x44\x75\x70\x20\x66\x69\x6c\x74\x65\x72\x20\x73\x65\x65\x6e\x20\x6d\x61\x74\x63\x68\x20\x73\x65\x65\x6e\x2c\x20\x6e\x6f\x20\x69\x6e\x73\x74\x61\x6c\x6c"
+);return;}}if(DATARMNETecc0627c70.DATARMNET110549da6f>=DATARMNET82243f712c){
+kfree(DATARMNET63b1a086d5);spin_unlock_bh(&DATARMNETd83ee17944);
+DATARMNET68d84e7b98[DATARMNET62807647a4]++;rm_err(
+"\x53\x48\x53\x5f\x4c\x4c\x3a\x20\x25\x73" "\n",
+"\x49\x6e\x73\x74\x61\x6c\x6c\x65\x64\x20\x4c\x4c\x20\x66\x69\x6c\x74\x65\x72\x20\x66\x61\x69\x6c\x65\x64\x3a\x20\x4d\x61\x78\x20\x72\x65\x61\x63\x68\x65\x64"
+);return;}DATARMNETecc0627c70.DATARMNET110549da6f++;DATARMNET75ae82094a++;if(
+DATARMNET756bdd424a)DATARMNET1e918c8e0d(DATARMNET63b1a086d5);hash_add(
+DATARMNET5750992efb,&DATARMNET63b1a086d5->list,DATARMNET63b1a086d5->
+DATARMNET54338da2ff.DATARMNET53d5f671f0.saddr);spin_unlock_bh(&
+DATARMNETd83ee17944);rm_err("\x53\x48\x53\x5f\x4c\x4c\x3a\x20\x25\x73" "\n",
+"\x53\x65\x74\x74\x69\x6e\x67\x20\x6c\x6f\x77\x20\x6c\x61\x74\x65\x6e\x63\x79\x20\x66\x6c\x6f\x77\x20\x63\x68\x65\x63\x6b\x20\x66\x6f\x72\x20\x61\x6c\x6c\x20\x66\x6c\x6f\x77\x73"
+);spin_lock_bh(&DATARMNETfbdbab2ef6);list_for_each_entry(DATARMNETd2a694d52a,&
+DATARMNET9825511866,DATARMNET6de26f0feb){if(DATARMNETd2a694d52a->
+DATARMNET63b1a086d5&&!DATARMNETd2a694d52a->DATARMNET63b1a086d5->
+DATARMNET80eb31d7b8){DATARMNETd2a694d52a->DATARMNET63b1a086d5->
+DATARMNET80eb31d7b8=DATARMNET64165df74d;}}spin_unlock_bh(&DATARMNETfbdbab2ef6);
+rm_err("\x53\x48\x53\x5f\x4c\x4c\x3a\x20\x25\x73" "\n",
+"\x49\x6e\x73\x74\x61\x6c\x6c\x65\x64\x20\x4c\x4c\x20\x66\x69\x6c\x74\x65\x72");
+}void DATARMNET337eca0417(struct sk_buff*skb,struct DATARMNET63d7680df2*
+DATARMNET63b1a086d5){u32 DATARMNET1fcbf046ec=(0xd2d+202-0xdf7);u8 map=
+(0xd2d+202-0xdf7),DATARMNET0258668025=(0xd2d+202-0xdf7);u16 index;if(!
+DATARMNET63b1a086d5->DATARMNETfbbec4c537){map=DATARMNETecc0627c70.map_mask;
+DATARMNET0258668025=DATARMNETecc0627c70.map_len;index=DATARMNET63b1a086d5->
+map_index;}else{map=DATARMNET63b1a086d5->DATARMNETfbbec4c537;DATARMNET0258668025
+=DATARMNET63b1a086d5->DATARMNETa59ce1fd2d;index=DATARMNET63b1a086d5->map_index;}
+if(map){DATARMNET1fcbf046ec=DATARMNET8532ab3089(index,DATARMNET0258668025,
+DATARMNET63b1a086d5->hash,(0xd2d+202-0xdf7));skb->hash=DATARMNET1fcbf046ec;}}int
+ DATARMNETf5821256ad(struct sk_buff*skb,struct rmnet_shs_clnt_s*
+DATARMNET0bf01e7c6f){struct DATARMNET63d7680df2*node_p;struct hlist_node*tmp;int
+ map=DATARMNETecc0627c70.map_mask;int DATARMNETb925972e2a=DATARMNET3874292c18;
+int map_cpu;u32 hash;u8 is_match_found=(0xd2d+202-0xdf7);struct 
+DATARMNETe600c5b727*DATARMNETa4055affd5;struct rmnet_priv*priv;
+DATARMNETefe3dcad0a++;hash=skb_get_hash(skb);if(!(DATARMNET0bf01e7c6f->config&
+RMNET_SHS_STMP_ALL)&&!DATARMNETf4aefff4c2(skb)){DATARMNETe767554e6e(skb);return
+(0xd2d+202-0xdf7);}spin_lock_bh(&DATARMNETd83ee17944);do{
+hash_for_each_possible_safe(DATARMNET58fe8ac797,node_p,tmp,list,hash){if(hash!=
+node_p->hash)continue;is_match_found=(0xd26+209-0xdf6);node_p->map_cpu=
+DATARMNET3874292c18;node_p->map_index=DATARMNET04e8d1b862(node_p->map_cpu,map);
+break;}if(is_match_found)break;if(DATARMNETb925972e2a<(0xd2d+202-0xdf7)){
+DATARMNET68d84e7b98[DATARMNETa1f9420686]++;break;}if(atomic_long_read(&
+DATARMNETecc0627c70.DATARMNET64bb8a8f57)>DATARMNETbfe31ef643){
+DATARMNET68d84e7b98[DATARMNETe6e77f9f03]++;break;}node_p=kzalloc(sizeof(*node_p)
+,GFP_ATOMIC);if(!node_p){DATARMNET68d84e7b98[DATARMNET394acaf558]++;break;}
+atomic_long_inc(&DATARMNETecc0627c70.DATARMNET64bb8a8f57);node_p->
+DATARMNETfbbec4c537=DATARMNET0bf01e7c6f->map_mask;node_p->DATARMNETa59ce1fd2d=
+DATARMNETecc0627c70.map_mask;node_p->dev=skb->dev;node_p->hash=skb->hash;node_p
+->map_cpu=DATARMNETb925972e2a;node_p->DATARMNET80eb31d7b8=(0xd26+209-0xdf6);
+node_p->map_index=DATARMNET04e8d1b862(node_p->map_cpu,map);node_p->map_cpu=
+raw_smp_processor_id();node_p->map_index=DATARMNET04e8d1b862(node_p->map_cpu,map
+);INIT_LIST_HEAD(&node_p->DATARMNET04c88b8191);DATARMNET44459105b4(skb,node_p);
+DATARMNET350f55bfca(node_p);map_cpu=node_p->map_cpu;DATARMNETa4055affd5=&
+DATARMNET148e775ece[map_cpu];priv=netdev_priv(node_p->dev);if(!priv){rm_err(
+"\x53\x48\x53\x5f\x4c\x4c\x3a\x20\x70\x72\x69\x76\x20\x66\x6f\x72\x20\x6e\x65\x74\x64\x65\x76\x20\x69\x73\x20\x6e\x75\x6c\x6c\x20\x66\x6f\x72\x20\x68\x61\x73\x68\x20\x30\x78\x25\x78"
+,node_p->hash);DATARMNET68d84e7b98[DATARMNETf5157a9b85]++;}else{node_p->
+DATARMNET341ea38662->mux_id=priv->mux_id;rm_err(
+"\x53\x48\x53\x5f\x4c\x4c\x3a\x20\x6d\x75\x78\x20\x69\x64\x20\x66\x6f\x72\x20\x68\x61\x73\x68\x20\x30\x78\x25\x78\x20\x69\x73\x20\x25\x64"
+,node_p->hash,node_p->DATARMNET341ea38662->mux_id);}DATARMNET3e37ad2816(node_p,&
+DATARMNETa4055affd5->DATARMNET3dc4262f53);hash_add_rcu(DATARMNET58fe8ac797,&
+node_p->list,skb->hash);is_match_found=(0xd26+209-0xdf6);break;}while(
+(0xd2d+202-0xdf7));spin_unlock_bh(&DATARMNETd83ee17944);if(is_match_found){
+DATARMNET337eca0417(skb,node_p);if(!node_p->DATARMNETd986107d55&&
+DATARMNET362b15f941(raw_smp_processor_id())){if(DATARMNETd2d15e7f67(
+raw_smp_processor_id())<DATARMNET8053357aa4&&DATARMNETdc7bead533(
+raw_smp_processor_id(),(0x2495+531-0x1708))){skb->hash=(0xd2d+202-0xdf7);skb->
+sw_hash=(0xd26+209-0xdf6);}else if(!node_p->DATARMNETd986107d55){node_p->
+DATARMNETd986107d55=DATARMNETbb52958049;node_p->map_cpu=DATARMNETb925972e2a;
+node_p->map_index=DATARMNET04e8d1b862(node_p->map_cpu,map);}}else if(node_p->
+DATARMNETd986107d55!=DATARMNET46a17e3ec5){if(!DATARMNET362b15f941(
+raw_smp_processor_id())){if(DATARMNETd2d15e7f67(raw_smp_processor_id())<
+DATARMNET8053357aa4&&DATARMNETdc7bead533(raw_smp_processor_id(),12000)){skb->
+hash=(0xd2d+202-0xdf7);skb->sw_hash=(0xd26+209-0xdf6);}else{node_p->
+DATARMNETd986107d55=DATARMNET46a17e3ec5;node_p->map_cpu=DATARMNETb925972e2a;
+node_p->map_index=DATARMNET04e8d1b862(node_p->map_cpu,map);}}}if(skb_shinfo(skb)
+->gso_segs){node_p->DATARMNET11930c5df8+=skb_shinfo(skb)->gso_segs;
+DATARMNET0997c5650d[node_p->map_cpu].DATARMNET4133fc9428++;node_p->
+DATARMNETae4b27456e.DATARMNET35234676d4+=skb_shinfo(skb)->gso_segs;}else{node_p
+->DATARMNET11930c5df8+=(0xd26+209-0xdf6);DATARMNET0997c5650d[node_p->map_cpu].
+DATARMNET4133fc9428++;node_p->DATARMNETae4b27456e.DATARMNET35234676d4++;}node_p
+->DATARMNETa8940e4a7b+=(0xd26+209-0xdf6);node_p->DATARMNET3ecedac168+=
+RMNET_SKB_CB(skb)->coal_bytes;node_p->DATARMNETce5f56eab9+=RMNET_SKB_CB(skb)->
+coal_bufsize;if(skb->priority==55834)node_p->DATARMNET1743c92e66++;node_p->
+DATARMNET2594c418db+=skb->len;}DATARMNETe767554e6e(skb);return(0xd2d+202-0xdf7);
+}void DATARMNET44499733f2(void){u8 DATARMNET0e4304d903;for(DATARMNET0e4304d903=
+(0xd2d+202-0xdf7);DATARMNET0e4304d903<DATARMNETc6782fed88;DATARMNET0e4304d903++)
+INIT_LIST_HEAD(&DATARMNET148e775ece[DATARMNET0e4304d903].DATARMNET3dc4262f53);}
+void DATARMNET90fe3a4b56(void){struct DATARMNET0331d6732d*DATARMNET63b1a086d5;
+struct hlist_node*tmp;unsigned long bkt;rm_err("\x25\x73",
+"\x53\x48\x53\x5f\x4c\x4c\x3a\x20\x44\x65\x2d\x69\x6e\x69\x74\x20\x4c\x4c\x20\x62\x6f\x6f\x6b\x2d\x6b\x65\x65\x70\x69\x6e\x67"
+);spin_lock_bh(&DATARMNETd83ee17944);hash_for_each_safe(DATARMNET58fe8ac797,bkt,
+tmp,DATARMNET63b1a086d5,list){hash_del_rcu(&DATARMNET63b1a086d5->list);}
+hash_for_each_safe(DATARMNET5750992efb,bkt,tmp,DATARMNET63b1a086d5,list){
+hash_del_rcu(&DATARMNET63b1a086d5->list);kfree(DATARMNET63b1a086d5);
+DATARMNETecc0627c70.DATARMNET110549da6f--;DATARMNET75ae82094a--;}spin_unlock_bh(
+&DATARMNETd83ee17944);rm_err("\x25\x73",
+"\x53\x48\x53\x5f\x4c\x4c\x3a\x20\x44\x65\x2d\x69\x6e\x69\x74\x20\x4c\x4c\x20\x62\x6f\x6f\x6b\x2d\x6b\x65\x65\x70\x69\x6e\x67\x20\x65\x78\x69\x74"
+);}

+ 22 - 0
qcom/opensource/datarmnet-ext/shs/rmnet_shs_ll.h

@@ -0,0 +1,22 @@
+/* Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 and
+ * only version 2 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ */
+
+#ifndef DATARMNETf391f4bee3
+#define DATARMNETf391f4bee3
+int DATARMNETf5821256ad(struct sk_buff*skb,struct rmnet_shs_clnt_s*
+DATARMNET0bf01e7c6f);void DATARMNET44499733f2(void);void DATARMNET90fe3a4b56(
+void);void DATARMNET2ac305d296(struct DATARMNET0331d6732d*DATARMNET63b1a086d5);
+void DATARMNETd52d50282d(struct DATARMNET0331d6732d*DATARMNET63b1a086d5);int 
+DATARMNETe24386452c(struct sk_buff*skb);
+#endif 
+

+ 1020 - 0
qcom/opensource/datarmnet-ext/shs/rmnet_shs_main.c

@@ -0,0 +1,1020 @@
+/* Copyright (c) 2018-2021 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2022-2024 Qualcomm Innovation Center, Inc. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 and
+ * only version 2 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ */
+
+#include <net/sock.h>
+#include <linux/netlink.h>
+#include <linux/ip.h>
+#include <linux/cpu.h>
+#include <linux/oom.h>
+#include <net/ip.h>
+#include <linux/cpu.h>
+#include <linux/bitmap.h>
+#include <linux/netdevice.h>
+#include <linux/kernel.h>
+#include <linux/pm_wakeup.h>
+#include <linux/smp.h>
+#include <linux/ipv6.h>
+#include <linux/netdevice.h>
+#include <linux/percpu-defs.h>
+#include "rmnet_module.h"
+#include "rmnet_shs.h"
+#include "rmnet_shs_config.h"
+#include "rmnet_shs_wq.h"
+#include "rmnet_shs_modules.h"
+#include "rmnet_shs_common.h"
+#include "rmnet_trace.h"
+#include "rmnet_shs_wq_genl.h"
+#include "rmnet_shs_ll.h"
+#include <linux/module.h>
+#include <linux/cpumask.h>
+#include <linux/icmp.h>
+#include <linux/inet.h>
+static char*verinfo[]={"\x34\x35\x35\x66\x31\x32\x38\x38"
+"\x36\x37\x30\x32\x34\x34\x63\x35","\x63\x66\x66\x31\x64\x38\x38\x36",
+"\x30\x37\x63\x37\x63\x37\x36\x39","\x63\x34\x65\x33\x65\x61\x34\x65",
+"\x37\x66\x63\x32\x33\x39\x31\x66","\x39\x35\x38\x61\x65\x34\x32\x34",
+"\x30\x66\x66\x65\x65\x39\x66\x65","\x32\x31\x30\x33\x65\x39\x38\x62",
+"\x37\x61\x32\x34\x64\x35\x34\x61","\x34\x34\x62\x37\x32\x33\x31\x32",
+"\x62\x66\x61\x30\x39\x34\x62\x35","\x62\x38\x38\x39\x38\x62\x66\x32",
+"\x33\x35\x32\x37\x62\x38\x30\x65","\x63\x30\x39\x37\x35\x35\x62\x33",
+"\x32\x36\x66\x64\x33\x30\x36\x35","\x65\x36\x66\x64\x34\x31\x33\x37",
+"\x36\x64\x38\x31\x37\x39\x62\x63","\x64\x66\x39\x32\x65\x35\x33\x34",
+"\x30\x38\x61\x39\x34\x38\x64\x61","\x36\x35\x35\x37\x37\x63\x32\x32"};
+module_param_array(verinfo,charp,NULL,(0xcb7+5769-0x221c));MODULE_PARM_DESC(
+verinfo,
+"\x56\x65\x72\x73\x69\x6f\x6e\x20\x6f\x66\x20\x74\x68\x65\x20\x64\x72\x69\x76\x65\x72"
+);
+#define DATARMNET2f67183a86 2000000
+#define DATARMNET68fc0be252 1000000
+#define DATARMNETd391fbd694 (0xd2d+202-0xdf7)
+#define DATARMNETae2e980d66 (0xd11+230-0xdf3)
+#define DATARMNET249a927510 (0xd27+224-0xdfd)
+#define DATARMNET904145ccb9 (0xd11+230-0xdf3)
+#define DATARMNETb91aee91fd -(0xd26+209-0xdf6)
+#define DATARMNET00d5787aad 2000000
+#define DATARMNET8948dc953d (0xd0a+237-0xdf2)
+#define DATARMNET20dc6bb36b (0xd26+209-0xdf6)
+#define DATARMNETafc650134e (0xd26+209-0xdf6)
+#define DATARMNET832731a933(CPU) (per_cpu(softnet_data, CPU).input_pkt_queue)
+#define DATARMNET3de2536baf(CPU) (per_cpu(softnet_data, CPU).process_queue)
+#define DATARMNETd2d15e7f67(CPU) (DATARMNET832731a933(CPU).qlen + \
+DATARMNET3de2536baf(CPU).qlen)
+#define DATARMNET78ec5e8746(DATARMNETfbfdc7f27e, CPU) (per_cpu(\
+DATARMNETfbfdc7f27e, CPU).input_queue_tail)
+#define DATARMNET9c1c20df35(DATARMNETfbfdc7f27e, CPU) (per_cpu(\
+DATARMNETfbfdc7f27e, CPU).input_queue_head)
+#define DATARMNET66ead9195a(CPU) (per_cpu(softnet_data, CPU).input_queue_head)
+#define DATARMNETbb1541e65b(CPU) (per_cpu(softnet_data, CPU).input_queue_tail)
+#define DATARMNETba5ea4329f(CPU) DATARMNETecc0627c70.DATARMNET132b9c7dc4[CPU].\
+DATARMNET758a55f103
+#define DATARMNETe84c5b47ba (0xd2d+202-0xdf7)
+#define DATARMNET313d662f61 (0xd26+209-0xdf6)
+#define DATARMNET0085702236 (0xd0a+237-0xdf2)
+#define DATARMNETec970d7090 (0xd26+209-0xdf6)
+#define DATARMNET8fadb49f38 (0xd2d+202-0xdf7)
+#define DATARMNET48a89fcc16 (0xd26+209-0xdf6)
+#define DATARMNETbfe901fc62 (0xd2d+202-0xdf7)
+DEFINE_SPINLOCK(DATARMNET3764d083f0);DEFINE_HASHTABLE(DATARMNETe603c3a4b3,
+DATARMNET25437d35fd);struct DATARMNETe600c5b727 DATARMNET0997c5650d[
+DATARMNETc6782fed88];int DATARMNETcff375d916[DATARMNETc6782fed88];unsigned int 
+DATARMNET064fbe9e3a __read_mostly=(0xd2d+202-0xdf7);module_param(
+DATARMNET064fbe9e3a,uint,(0xdb7+6665-0x261c));MODULE_PARM_DESC(
+DATARMNET064fbe9e3a,"\x77\x61\x6b\x65\x20\x73\x74\x61\x74\x75\x73");unsigned int
+ DATARMNETe4a6d22824 __read_mostly=(0xc07+4861-0x1e3c);module_param(
+DATARMNETe4a6d22824,uint,(0xdb7+6665-0x261c));MODULE_PARM_DESC(
+DATARMNET94b2cc2f14,
+"\x75\x70\x20\x64\x75\x74\x79\x20\x63\x79\x63\x6c\x65\x20\x69\x6e\x20\x6d\x73");
+unsigned int DATARMNETaf998640fd __read_mostly=(0xcb7+1735-0x102c);module_param(
+DATARMNETaf998640fd,uint,(0xdb7+6665-0x261c));MODULE_PARM_DESC(
+DATARMNETaf998640fd,
+"\x4d\x61\x78\x20\x69\x6e\x74\x65\x72\x6c\x65\x61\x76\x65\x64\x20\x69\x70\x61\x20\x70\x6b\x74\x73\x20\x73\x68\x73\x20\x77\x69\x6c\x6c\x20\x70\x61\x72\x6b"
+);unsigned int DATARMNET566e381630 __read_mostly=(0xf07+658-0x110d);module_param
+(DATARMNET566e381630,uint,(0xdb7+6665-0x261c));MODULE_PARM_DESC(
+DATARMNETaf998640fd,
+"\x4d\x61\x78\x20\x69\x6e\x74\x65\x72\x6c\x65\x61\x76\x65\x64\x20\x69\x70\x61\x20\x70\x6b\x74\x73\x20\x73\x68\x73\x20\x77\x69\x6c\x6c\x20\x62\x65\x20\x70\x61\x72\x6b\x20\x66\x6f\x72\x20\x28\x6d\x73\x29"
+);unsigned int DATARMNETf4cacbb5dc __read_mostly=7000;module_param(
+DATARMNETf4cacbb5dc,uint,(0xdb7+6665-0x261c));MODULE_PARM_DESC(
+DATARMNETf4cacbb5dc,
+"\x4d\x61\x78\x20\x70\x61\x63\x6b\x65\x74\x73\x20\x73\x68\x73\x20\x77\x69\x6c\x6c\x20\x73\x74\x65\x65\x72"
+);unsigned int DATARMNET673cf85e28 __read_mostly=(0xd2d+202-0xdf7);module_param(
+DATARMNET673cf85e28,uint,(0xdb7+6665-0x261c));MODULE_PARM_DESC(
+DATARMNET673cf85e28,
+"\x4d\x61\x78\x20\x70\x68\x79\x20\x62\x61\x63\x6b\x6c\x6f\x67\x20\x73\x65\x65\x6e"
+);unsigned int DATARMNETcb9ef310a4 __read_mostly=(0xd2d+202-0xdf7);module_param(
+DATARMNETcb9ef310a4,uint,(0xdb7+6665-0x261c));MODULE_PARM_DESC(
+DATARMNETcb9ef310a4,
+"\x20\x45\x73\x70\x20\x70\x61\x63\x6b\x65\x74\x73\x20\x73\x65\x65\x6e");unsigned
+ int DATARMNET2be16c76ac __read_mostly=(0xef7+1112-0x131d);module_param(
+DATARMNET2be16c76ac,uint,(0xdb7+6665-0x261c));MODULE_PARM_DESC(
+DATARMNET2be16c76ac,
+"\x44\x75\x72\x61\x74\x69\x6f\x6e\x20\x74\x68\x61\x74\x20\x50\x42\x20\x42\x6f\x6f\x73\x74\x20\x77\x69\x6c\x6c\x20\x62\x65\x20\x61\x63\x74\x69\x76\x65\x20\x66\x6f\x72\x20\x62\x65\x66\x6f\x72\x65\x20\x72\x65\x73\x65\x74"
+);struct DATARMNETa6b20d7e8b DATARMNETecc0627c70;struct DATARMNET37ef896af8 
+shs_rx_work;int DATARMNET762cfa52fe(u8 mask);unsigned DATARMNET016351c9e4=
+(0xd2d+202-0xdf7);ssize_t DATARMNET713da9913c(struct netdev_rx_queue*
+DATARMNETb4180393e4,u8 cpu,u8 DATARMNET5780499e9c){struct rps_map*
+DATARMNETaeb4918e65,*map;cpumask_var_t mask;map=rcu_dereference(
+DATARMNETb4180393e4->rps_map);if(map){map->cpus[(0xd2d+202-0xdf7)]=cpu;map->len=
+(0xd26+209-0xdf6);if(((0xd26+209-0xdf6)<<cpu)&DATARMNETbc3c416b77)
+DATARMNETb7ddf3c5dd[DATARMNET975060d6b5]++;else DATARMNETb7ddf3c5dd[
+DATARMNET0e398136dc]++;return(0xd2d+202-0xdf7);}if(!alloc_cpumask_var(&mask,
+GFP_ATOMIC))return-ENOMEM;cpumask_set_cpu(cpu,(struct cpumask*)&mask);map=
+kzalloc(max_t(unsigned int,RPS_MAP_SIZE(cpumask_weight(mask)),L1_CACHE_BYTES),
+GFP_ATOMIC);if(!map){free_cpumask_var(mask);return-ENOMEM;}map->cpus[
+(0xd2d+202-0xdf7)]=cpu;map->len=(0xd26+209-0xdf6);if(((0xd26+209-0xdf6)<<cpu)&
+DATARMNETbc3c416b77)DATARMNETb7ddf3c5dd[DATARMNET975060d6b5]++;else 
+DATARMNETb7ddf3c5dd[DATARMNET0e398136dc]++;rcu_read_lock();DATARMNETaeb4918e65=
+rcu_dereference(DATARMNETb4180393e4->rps_map);rcu_assign_pointer(
+DATARMNETb4180393e4->rps_map,map);if(DATARMNETaeb4918e65)kfree(
+DATARMNETaeb4918e65);free_cpumask_var(mask);rcu_read_unlock();return
+(0xd2d+202-0xdf7);}int DATARMNET9303cec796(struct sk_buff*skb,u8*ret){int 
+DATARMNETbd864aa442=(0xd2d+202-0xdf7);struct iphdr*ip4h,DATARMNETc00baf31c3;
+struct ipv6hdr*ip6h,DATARMNETcf1d9e2c1e;const struct ipv6_opt_hdr*
+DATARMNET7b34b7b5be;struct ipv6_opt_hdr DATARMNET1688a97aa4;s64 
+DATARMNETe30c7cdaf5;struct timespec64 time;int DATARMNET441081ddc0;if(
+rmnet_module_hook_perf_ingress(&DATARMNET441081ddc0,skb)){if(!
+DATARMNET441081ddc0){goto done;}}switch(skb->protocol){case htons(ETH_P_IP):ip4h
+=DATARMNETefcaf5fbe9(skb,(0xd2d+202-0xdf7),sizeof(*ip4h),&DATARMNETc00baf31c3);
+if(!ip4h)break;if(!ip_is_fragment(ip4h)&&(ip4h->protocol==IPPROTO_TCP||ip4h->
+protocol==IPPROTO_UDP)){DATARMNETbd864aa442=(0xd26+209-0xdf6);break;}if(ip4h->
+protocol==IPPROTO_ICMP){skb->hash=(0xd2d+202-0xdf7);skb->sw_hash=
+(0xd26+209-0xdf6);(void)ktime_get_boottime_ts64(&time);DATARMNETe30c7cdaf5=
+ktime_ms_delta(ktime_set(time.tv_sec,time.tv_nsec),DATARMNETecc0627c70.
+DATARMNETdd3caf9200);if(hrtimer_active(&DATARMNETecc0627c70.hrtimer_wake)){
+hrtimer_cancel(&DATARMNETecc0627c70.hrtimer_wake);hrtimer_start(&
+DATARMNETecc0627c70.hrtimer_wake,ns_to_ktime((0xbf7+4070-0x172d)*
+DATARMNET68fc0be252),HRTIMER_MODE_REL|HRTIMER_MODE_PINNED);DATARMNET064fbe9e3a=
+(0xd1f+216-0xdf5);}else{hrtimer_start(&DATARMNETecc0627c70.hrtimer_wake,
+ns_to_ktime((0xbf7+4070-0x172d)*DATARMNET68fc0be252),HRTIMER_MODE_REL|
+HRTIMER_MODE_PINNED);__pm_stay_awake(DATARMNETecc0627c70.ws);DATARMNET064fbe9e3a
+=(0xd1f+216-0xdf5);}if(!hrtimer_active(&DATARMNETecc0627c70.DATARMNET645fb3b468)
+){hrtimer_start(&DATARMNETecc0627c70.DATARMNET645fb3b468,ns_to_ktime(
+(0xdf7+3019-0x160c)*DATARMNET68fc0be252),HRTIMER_MODE_REL|HRTIMER_MODE_PINNED);
+if(DATARMNETe30c7cdaf5>DATARMNET12f3a261a0&&DATARMNETecc0627c70.
+DATARMNETdd3caf9200){DATARMNET930a441406[DATARMNETe35e238437]++;}else{*ret=
+(0xd26+209-0xdf6);}}else{DATARMNET930a441406[DATARMNETe35e238437]++;}if(
+trace_print_icmp_rx_enabled()){char saddr[INET6_ADDRSTRLEN],daddr[
+INET6_ADDRSTRLEN];u16 ip_proto=(0xd2d+202-0xdf7);__be16 sequence=
+(0xd2d+202-0xdf7);u8 type=(0xd2d+202-0xdf7);struct icmphdr*icmphdr,
+DATARMNET5aa29a2264;memset(saddr,(0xd2d+202-0xdf7),INET6_ADDRSTRLEN);memset(
+daddr,(0xd2d+202-0xdf7),INET6_ADDRSTRLEN);icmphdr=DATARMNETefcaf5fbe9(skb,ip4h->
+ihl*(0xd11+230-0xdf3),sizeof(*icmphdr),&DATARMNET5aa29a2264);if(!icmphdr)goto 
+DATARMNET03fd0cd6e6;if(icmphdr->type!=ICMP_ECHOREPLY&&icmphdr->type!=ICMP_ECHO)
+goto DATARMNET03fd0cd6e6;ip_proto=htons(ETH_P_IP);type=icmphdr->type;sequence=
+icmphdr->un.echo.sequence;snprintf(saddr,INET6_ADDRSTRLEN,"\x25\x70\x49\x34",&
+ip4h->saddr);snprintf(daddr,INET6_ADDRSTRLEN,"\x25\x70\x49\x34",&ip4h->daddr);
+trace_print_icmp_rx(skb,ip_proto,type,sequence,saddr,daddr);}}else if(ip4h->
+protocol==IPPROTO_ESP){skb->hash=DATARMNETaa0602144b;skb->sw_hash=
+(0xd26+209-0xdf6);DATARMNETcb9ef310a4++;}DATARMNET03fd0cd6e6:break;case htons(
+ETH_P_IPV6):ip6h=DATARMNETefcaf5fbe9(skb,(0xd2d+202-0xdf7),sizeof(*ip6h),&
+DATARMNETcf1d9e2c1e);if(!ip6h)break;if(!(ip6h->nexthdr==NEXTHDR_FRAGMENT)&&(ip6h
+->nexthdr==IPPROTO_TCP||ip6h->nexthdr==IPPROTO_UDP)){DATARMNETbd864aa442=
+(0xd26+209-0xdf6);break;}if(ip6h->nexthdr==NEXTHDR_ICMP){skb->hash=
+(0xd2d+202-0xdf7);skb->sw_hash=(0xd26+209-0xdf6);(void)ktime_get_boottime_ts64(&
+time);DATARMNETe30c7cdaf5=ktime_ms_delta(ktime_set(time.tv_sec,time.tv_nsec),
+DATARMNETecc0627c70.DATARMNETdd3caf9200);if(hrtimer_active(&DATARMNETecc0627c70.
+hrtimer_wake)){hrtimer_cancel(&DATARMNETecc0627c70.hrtimer_wake);hrtimer_start(&
+DATARMNETecc0627c70.hrtimer_wake,ns_to_ktime((0xbf7+4070-0x172d)*
+DATARMNET68fc0be252),HRTIMER_MODE_REL|HRTIMER_MODE_PINNED);DATARMNET064fbe9e3a=
+(0xd1f+216-0xdf5);}else{hrtimer_start(&DATARMNETecc0627c70.hrtimer_wake,
+ns_to_ktime((0xbf7+4070-0x172d)*DATARMNET68fc0be252),HRTIMER_MODE_REL|
+HRTIMER_MODE_PINNED);__pm_stay_awake(DATARMNETecc0627c70.ws);DATARMNET064fbe9e3a
+=(0xd1f+216-0xdf5);}if(!hrtimer_active(&DATARMNETecc0627c70.DATARMNET645fb3b468)
+){hrtimer_start(&DATARMNETecc0627c70.DATARMNET645fb3b468,ns_to_ktime(
+(0xdf7+3019-0x160c)*DATARMNET68fc0be252),HRTIMER_MODE_REL|HRTIMER_MODE_PINNED);
+if(DATARMNETe30c7cdaf5>DATARMNET12f3a261a0&&DATARMNETecc0627c70.
+DATARMNETdd3caf9200){DATARMNET930a441406[DATARMNETe35e238437]++;}else{*ret=
+(0xd26+209-0xdf6);}}else{DATARMNET930a441406[DATARMNETe35e238437]++;}if(
+trace_print_icmp_rx_enabled()){char saddr[INET6_ADDRSTRLEN],daddr[
+INET6_ADDRSTRLEN];u16 ip_proto=(0xd2d+202-0xdf7);__be16 sequence=
+(0xd2d+202-0xdf7);u8 type=(0xd2d+202-0xdf7);struct icmp6hdr*icmp6hdr,
+DATARMNETaa41336581;memset(saddr,(0xd2d+202-0xdf7),INET6_ADDRSTRLEN);memset(
+daddr,(0xd2d+202-0xdf7),INET6_ADDRSTRLEN);icmp6hdr=DATARMNETefcaf5fbe9(skb,
+sizeof(*ip6h),sizeof(*icmp6hdr),&DATARMNETaa41336581);if(!icmp6hdr)goto 
+DATARMNETf623862dd4;if(icmp6hdr->icmp6_type!=ICMPV6_ECHO_REQUEST&&icmp6hdr->
+icmp6_type!=ICMPV6_ECHO_REPLY)goto DATARMNETf623862dd4;ip_proto=htons(ETH_P_IPV6
+);type=icmp6hdr->icmp6_type;sequence=icmp6hdr->icmp6_sequence;snprintf(saddr,
+INET6_ADDRSTRLEN,"\x25\x70\x49\x36",&ip6h->saddr);snprintf(daddr,
+INET6_ADDRSTRLEN,"\x25\x70\x49\x36",&ip6h->daddr);trace_print_icmp_rx(skb,
+ip_proto,type,sequence,saddr,daddr);}}else if(ip6h->nexthdr==NEXTHDR_ESP){skb->
+hash=DATARMNETaa0602144b;skb->sw_hash=(0xd26+209-0xdf6);DATARMNETcb9ef310a4++;}
+else if(ip6h->nexthdr==NEXTHDR_FRAGMENT){if(skb->len-sizeof(struct ipv6hdr)<(int
+)sizeof(struct ipv6_opt_hdr)){break;}DATARMNET7b34b7b5be=skb_header_pointer(skb,
+sizeof(struct ipv6hdr),sizeof(DATARMNET1688a97aa4),&DATARMNET1688a97aa4);if(
+DATARMNET7b34b7b5be&&DATARMNET7b34b7b5be->nexthdr==NEXTHDR_ESP){skb->hash=
+DATARMNETaa0602144b;skb->sw_hash=(0xd26+209-0xdf6);DATARMNETcb9ef310a4++;}}
+DATARMNETf623862dd4:break;default:break;}done:DATARMNETda96251102(
+DATARMNETcd24fca747,DATARMNET116c96c236,DATARMNETbd864aa442,(0x16e8+787-0xc0c),
+(0x16e8+787-0xc0c),(0x16e8+787-0xc0c),skb,NULL);return DATARMNETbd864aa442;}
+static void DATARMNETfa919d00dc(int cpu,int DATARMNET8a461bad56){struct 
+timespec64 DATARMNET2e47295bf1;struct timespec64*DATARMNET736ac5582e;long 
+DATARMNETb64270afc1;int DATARMNETa67155ba38=(DATARMNETa1ac2608b5<
+DATARMNET8948dc953d)?DATARMNET8948dc953d:DATARMNETa1ac2608b5;
+ktime_get_boottime_ts64(&DATARMNET2e47295bf1);DATARMNET736ac5582e=&
+DATARMNETecc0627c70.DATARMNET132b9c7dc4[cpu].DATARMNET251b97a380;
+DATARMNETb64270afc1=DATARMNETe6671dbf38(DATARMNET2e47295bf1.tv_sec-
+DATARMNET736ac5582e->tv_sec)+DATARMNET2e47295bf1.tv_nsec-DATARMNET736ac5582e->
+tv_nsec;if(DATARMNETb64270afc1>=DATARMNETa67155ba38*DATARMNET68fc0be252){if(
+DATARMNETecc0627c70.DATARMNET132b9c7dc4[cpu].DATARMNETe61d62310f>
+DATARMNETd75e474598[cpu])DATARMNETd75e474598[cpu]=DATARMNETecc0627c70.
+DATARMNET132b9c7dc4[cpu].DATARMNETe61d62310f;DATARMNETecc0627c70.
+DATARMNET132b9c7dc4[cpu].DATARMNET251b97a380.tv_sec=DATARMNET2e47295bf1.tv_sec;
+DATARMNETecc0627c70.DATARMNET132b9c7dc4[cpu].DATARMNET251b97a380.tv_nsec=
+DATARMNET2e47295bf1.tv_nsec;DATARMNETecc0627c70.DATARMNET132b9c7dc4[cpu].
+DATARMNETe61d62310f=DATARMNET8a461bad56;}else{DATARMNETecc0627c70.
+DATARMNET132b9c7dc4[cpu].DATARMNETe61d62310f+=DATARMNET8a461bad56;}}void 
+DATARMNETe767554e6e(struct sk_buff*skb){DATARMNETda96251102(DATARMNET6b317c4c73,
+DATARMNET43225b7a7c,(0x16e8+787-0xc0c),(0x16e8+787-0xc0c),(0x16e8+787-0xc0c),
+(0x16e8+787-0xc0c),skb,NULL);netif_receive_skb(skb);}void DATARMNET514ce0bf59(
+struct sk_buff*skb){DATARMNETda96251102(DATARMNET6b317c4c73,DATARMNET43225b7a7c,
+(0x16e8+787-0xc0c),(0x16e8+787-0xc0c),(0x16e8+787-0xc0c),(0x16e8+787-0xc0c),skb,
+NULL);netif_rx(skb);}static struct sk_buff*DATARMNET0e315f0262(struct sk_buff*
+skb,u16 DATARMNETf8272cfb41){struct skb_shared_info*shinfo=skb_shinfo(skb);
+struct sk_buff*DATARMNET6643e66666,*tmp;u16 gso_size=shinfo->gso_size;u16 
+gso_segs=shinfo->gso_segs;unsigned int gso_type=shinfo->gso_type;if(
+DATARMNETf8272cfb41>=gso_segs){return NULL;}shinfo->gso_segs=DIV_ROUND_UP(
+gso_segs,DATARMNETf8272cfb41);shinfo->gso_size=gso_size*DATARMNETf8272cfb41;
+DATARMNET6643e66666=__skb_gso_segment(skb,NETIF_F_SG,false);if(unlikely(
+IS_ERR_OR_NULL(DATARMNET6643e66666))){shinfo->gso_size=gso_size;shinfo->gso_segs
+=gso_segs;return NULL;}if(DATARMNETf8272cfb41<=(0xd26+209-0xdf6))return 
+DATARMNET6643e66666;for(tmp=DATARMNET6643e66666;tmp;tmp=tmp->next){struct 
+skb_shared_info*DATARMNETa7dac37e66=skb_shinfo(tmp);DATARMNETa7dac37e66->
+gso_type=gso_type;DATARMNETa7dac37e66->gso_size=gso_size;if(gso_segs>=
+DATARMNETf8272cfb41)DATARMNETa7dac37e66->gso_segs=DATARMNETf8272cfb41;else 
+DATARMNETa7dac37e66->gso_segs=gso_segs;gso_segs-=DATARMNETf8272cfb41;if(gso_segs
+<=(0xd26+209-0xdf6)){break;}}return DATARMNET6643e66666;}static void 
+DATARMNET21243b86ae(struct sk_buff*DATARMNETe08e18123e,u8 DATARMNETf345c1d909,
+u16 DATARMNET87636d0152){struct sk_buff*skb=NULL;struct sk_buff*
+DATARMNETcebafc57a4=NULL;struct sk_buff*DATARMNET39bcb0d197=NULL;int count=
+(0xd2d+202-0xdf7);DATARMNETda96251102(DATARMNET6b317c4c73,DATARMNET43225b7a7c,
+(0xd26+209-0xdf6),(0x16e8+787-0xc0c),(0x16e8+787-0xc0c),(0x16e8+787-0xc0c),
+DATARMNETe08e18123e,NULL);DATARMNET39bcb0d197=DATARMNET0e315f0262(
+DATARMNETe08e18123e,DATARMNET87636d0152);if(DATARMNET39bcb0d197==NULL){if(
+DATARMNETf345c1d909==DATARMNET0b15fd8b54)netif_receive_skb(DATARMNETe08e18123e);
+else netif_rx(DATARMNETe08e18123e);return;}for((skb=DATARMNET39bcb0d197);skb!=
+NULL;skb=DATARMNETcebafc57a4){DATARMNETcebafc57a4=skb->next;skb->hash=
+DATARMNETe08e18123e->hash;skb->dev=DATARMNETe08e18123e->dev;skb->next=NULL;if(
+DATARMNETf345c1d909==DATARMNET0b15fd8b54)netif_receive_skb(skb);else netif_rx(
+skb);count+=(0xd26+209-0xdf6);}consume_skb(DATARMNETe08e18123e);return;}int 
+DATARMNET2efb1a51c7(struct DATARMNET63d7680df2*node_p){int ret=(0xd2d+202-0xdf7)
+;int DATARMNET42c3ecbd5e=(0xd26+209-0xdf6);u16 idx=(0xd2d+202-0xdf7);for(idx=
+(0xd2d+202-0xdf7);idx<DATARMNETc6782fed88;idx++){if(node_p->DATARMNET341ea38662
+->DATARMNET1a1d89d417&DATARMNET42c3ecbd5e)ret++;DATARMNET42c3ecbd5e=
+DATARMNET42c3ecbd5e<<(0xd26+209-0xdf6);}return ret;}int DATARMNET762cfa52fe(u8 
+mask){int ret=DATARMNETb91aee91fd;int DATARMNETd416f5b047=DATARMNETb91aee91fd;u8
+ DATARMNET05e5e122cd=(0xd2d+202-0xdf7);u8 i;for(i=(0xd2d+202-0xdf7);i<
+DATARMNETc6782fed88;i++){if(!(mask&((0xd26+209-0xdf6)<<i)))continue;if(mask&(
+(0xd26+209-0xdf6)<<i))DATARMNET05e5e122cd++;if(list_empty(&DATARMNET0997c5650d[i
+].DATARMNET3dc4262f53))return i;if(DATARMNETcff375d916[i]<=DATARMNETd416f5b047||
+DATARMNETd416f5b047==DATARMNETb91aee91fd){ret=i;DATARMNETd416f5b047=
+DATARMNETcff375d916[i];}}return ret;}static int DATARMNETaef946bb68(u8 index,u8 
+mask){int ret=DATARMNETb91aee91fd;u8 DATARMNET05e5e122cd=(0xd2d+202-0xdf7);u8 i;
+for(i=(0xd2d+202-0xdf7);i<DATARMNETc6782fed88;i++){if(DATARMNET05e5e122cd==index
+&&(mask&((0xd26+209-0xdf6)<<i)))return i;if(mask&((0xd26+209-0xdf6)<<i))
+DATARMNET05e5e122cd++;}return ret;}int DATARMNET6af33ebb5b(struct 
+DATARMNET63d7680df2*DATARMNET63b1a086d5){int cpu=DATARMNETb91aee91fd;u8 
+DATARMNETd4a0b11b47;u8 DATARMNET7dc3d97229;if(DATARMNET63b1a086d5->
+DATARMNET85c698ec34)return DATARMNETecc0627c70.DATARMNET5c24e1df05;else if(
+DATARMNET0997c5650d[DATARMNET63b1a086d5->map_cpu].DATARMNETef866573e0&&
+DATARMNET362b15f941(DATARMNET63b1a086d5->map_cpu)){cpu=DATARMNET762cfa52fe(
+DATARMNETbc3c416b77&~DATARMNETecc0627c70.DATARMNETba3f7a11ef&~
+DATARMNET121c8bc82a&DATARMNET63b1a086d5->DATARMNETfbbec4c537);if(cpu<
+(0xd2d+202-0xdf7)&&DATARMNET63b1a086d5->DATARMNET341ea38662!=NULL){cpu=
+DATARMNET63b1a086d5->DATARMNET341ea38662->DATARMNET6e1a4eaf09;}}else if(
+DATARMNET63b1a086d5->DATARMNET341ea38662!=NULL){cpu=DATARMNET63b1a086d5->
+DATARMNET341ea38662->DATARMNET6e1a4eaf09;if(((0xd26+209-0xdf6)<<
+DATARMNET63b1a086d5->map_cpu)&(DATARMNETecc0627c70.DATARMNETba3f7a11ef|
+DATARMNET121c8bc82a)){DATARMNETd4a0b11b47=(DATARMNETbc3c416b77&(
+(0xd26+209-0xdf6)<<cpu))?DATARMNETbc3c416b77:DATARMNET9273f84bf1;if(!(
+DATARMNETd4a0b11b47&~DATARMNETecc0627c70.DATARMNETba3f7a11ef&~
+DATARMNET121c8bc82a&DATARMNET63b1a086d5->DATARMNETfbbec4c537))
+DATARMNETd4a0b11b47=DATARMNETbc3c416b77;cpu=DATARMNET762cfa52fe(
+DATARMNETd4a0b11b47&~DATARMNETecc0627c70.DATARMNETba3f7a11ef&~
+DATARMNET121c8bc82a&DATARMNET63b1a086d5->DATARMNETfbbec4c537);if((
+(0xd26+209-0xdf6)<<DATARMNET63b1a086d5->map_cpu)&(DATARMNETecc0627c70.
+DATARMNETba3f7a11ef))DATARMNETb7ddf3c5dd[DATARMNET7f401828b3]++;}else if((
+(0xd26+209-0xdf6)<<cpu)&DATARMNETecc0627c70.DATARMNETba3f7a11ef){
+DATARMNETd4a0b11b47=(DATARMNETbc3c416b77&((0xd26+209-0xdf6)<<cpu))?
+DATARMNETbc3c416b77:DATARMNET9273f84bf1;DATARMNET7dc3d97229=(DATARMNETbc3c416b77
+&((0xd26+209-0xdf6)<<DATARMNET63b1a086d5->map_cpu))?DATARMNETbc3c416b77:
+DATARMNET9273f84bf1;if(!(DATARMNETd4a0b11b47&~DATARMNETecc0627c70.
+DATARMNETba3f7a11ef&~DATARMNET121c8bc82a&DATARMNET63b1a086d5->
+DATARMNETfbbec4c537))DATARMNETd4a0b11b47=DATARMNETbc3c416b77;if(
+DATARMNETd4a0b11b47!=DATARMNET7dc3d97229)cpu=DATARMNET762cfa52fe(
+DATARMNETd4a0b11b47&~DATARMNETecc0627c70.DATARMNETba3f7a11ef&DATARMNET63b1a086d5
+->DATARMNETfbbec4c537);else cpu=DATARMNET63b1a086d5->map_cpu;}else if(
+DATARMNET0997c5650d[cpu].DATARMNETef866573e0){cpu=DATARMNET63b1a086d5->map_cpu;}
+}return cpu;}int DATARMNETb6bff4a724(struct DATARMNET63d7680df2*
+DATARMNET63b1a086d5){int cpu,idx=DATARMNETb91aee91fd;cpu=DATARMNET6af33ebb5b(
+DATARMNET63b1a086d5);idx=DATARMNET04e8d1b862(cpu,DATARMNET63b1a086d5->
+DATARMNETfbbec4c537);if(unlikely(idx<(0xd2d+202-0xdf7)))idx=DATARMNET04e8d1b862(
+DATARMNET63b1a086d5->map_cpu,DATARMNET63b1a086d5->DATARMNETfbbec4c537);
+DATARMNETda96251102(DATARMNETf3aaad06eb,DATARMNETf2fc7954d4,DATARMNET63b1a086d5
+->hash,cpu,idx,(0x16e8+787-0xc0c),DATARMNET63b1a086d5,NULL);return idx;}static 
+int DATARMNET2af09ccd0b(int cpu,int DATARMNET63a222ae1f,int DATARMNETea08087fc0)
+{int ret=(0xd2d+202-0xdf7);if(DATARMNETecc0627c70.DATARMNET132b9c7dc4[cpu].
+DATARMNETe61d62310f>=DATARMNET65393dea13[cpu]){ret=DATARMNET0efbbe2821;}if(
+DATARMNET63a222ae1f&&((DATARMNETeea3cef5b6(cpu)+DATARMNETea08087fc0)>=
+DATARMNETbc049ffc4c[cpu]))ret=DATARMNETa4267dfd8a;return ret;}void 
+DATARMNET349c3a0cab(u16 map_cpu,bool DATARMNETb639f6e1b1){if(map_cpu<
+DATARMNETc6782fed88)(DATARMNETb639f6e1b1)?DATARMNETcff375d916[map_cpu]++:
+DATARMNETcff375d916[map_cpu]--;else DATARMNET68d84e7b98[DATARMNETcc0ef52ccb]++;}
+void DATARMNETb1157fd5c4(u8 DATARMNET42a992465f){if(DATARMNET42a992465f>=
+DATARMNETc6782fed88)return;rcu_read_lock();DATARMNET0997c5650d[
+DATARMNET42a992465f].DATARMNETae196235f2=DATARMNET9c1c20df35(softnet_data,
+DATARMNET42a992465f);DATARMNET0997c5650d[DATARMNET42a992465f].qtail=
+DATARMNET78ec5e8746(softnet_data,DATARMNET42a992465f);rcu_read_unlock();
+DATARMNET0997c5650d[DATARMNET42a992465f].DATARMNET96571b28de=DATARMNET0997c5650d
+[DATARMNET42a992465f].qtail-DATARMNET0997c5650d[DATARMNET42a992465f].
+DATARMNETae196235f2;DATARMNETda96251102(DATARMNET75d955c408,DATARMNET5874e1ecd7,
+DATARMNET42a992465f,DATARMNET0997c5650d[DATARMNET42a992465f].DATARMNETae196235f2
+,DATARMNET0997c5650d[DATARMNET42a992465f].qtail,(0x16e8+787-0xc0c),NULL,NULL);}
+void DATARMNETe074a09496(void){u8 DATARMNET42a992465f;rcu_read_lock();for(
+DATARMNET42a992465f=(0xd2d+202-0xdf7);DATARMNET42a992465f<DATARMNETc6782fed88;
+DATARMNET42a992465f++){if(!cpu_online(DATARMNET42a992465f))continue;
+DATARMNETb1157fd5c4(DATARMNET42a992465f);DATARMNETda96251102(DATARMNET75d955c408
+,DATARMNET5874e1ecd7,DATARMNET42a992465f,DATARMNET0997c5650d[DATARMNET42a992465f
+].DATARMNETae196235f2,DATARMNET0997c5650d[DATARMNET42a992465f].qtail,
+(0x16e8+787-0xc0c),NULL,NULL);}rcu_read_unlock();}int DATARMNET765b8ecfba(struct
+ net_device*dev,u8 cpu,u8 DATARMNET5780499e9c){struct DATARMNET177911299b 
+DATARMNETecb92a9ca5;if(rmnet_is_real_dev_registered(dev)){if(DATARMNET713da9913c
+(dev->_rx,cpu,DATARMNET5780499e9c)==(0xd2d+202-0xdf7)){DATARMNETecc0627c70.
+DATARMNETba3f7a11ef=(0xd26+209-0xdf6)<<cpu;DATARMNETecc0627c70.
+DATARMNET6625085b71=DATARMNETecc0627c70.DATARMNET7d667e828e;DATARMNETecc0627c70.
+DATARMNET7d667e828e=cpu;DATARMNET1d4b1eff85(&DATARMNETecb92a9ca5,
+DATARMNETecc0627c70.DATARMNET6625085b71,cpu);DATARMNETb5d58adbe7(&
+DATARMNETecb92a9ca5);}else{return-(0xd26+209-0xdf6);}}else{DATARMNET68d84e7b98[
+DATARMNET767c76ca08]++;}return(0xd2d+202-0xdf7);}int DATARMNETe488c1c396(struct 
+DATARMNET63d7680df2*DATARMNET63b1a086d5,u8 DATARMNETd87669e323,u8 
+DATARMNET5447204733){int DATARMNET5c4a331b9c;u32 DATARMNETd3673fd5f0;u32 
+DATARMNET9bbfe49633;int ret=(0xd2d+202-0xdf7);int DATARMNET5a2e9192f9=-
+(0xd26+209-0xdf6);int DATARMNET8ceb7a8cc9;int DATARMNET42a992465f;int 
+DATARMNETcfb5dc7296;struct DATARMNETe600c5b727*DATARMNET373e474754;u8 map=
+DATARMNET63b1a086d5->DATARMNETfbbec4c537;DATARMNET5c4a331b9c=DATARMNETb6bff4a724
+(DATARMNET63b1a086d5);do{DATARMNET5a2e9192f9=DATARMNET63b1a086d5->map_cpu;if(
+DATARMNET5c4a331b9c<(0xd2d+202-0xdf7)){DATARMNET63b1a086d5->DATARMNET6250e93187=
+(0xd2d+202-0xdf7);ret=(0xd26+209-0xdf6);break;}DATARMNET63b1a086d5->
+DATARMNET6250e93187=(0xd26+209-0xdf6);if(!map){DATARMNET63b1a086d5->
+DATARMNET6250e93187=(0xd2d+202-0xdf7);ret=(0xd26+209-0xdf6);break;}if(
+DATARMNET5c4a331b9c==DATARMNET63b1a086d5->map_index){ret=(0xd26+209-0xdf6);break
+;}if(!DATARMNET63b1a086d5->DATARMNET85c698ec34)DATARMNETd3673fd5f0=
+DATARMNETadb0248bd4(DATARMNET63b1a086d5->map_cpu);else DATARMNETd3673fd5f0=
+DATARMNETadb0248bd4(DATARMNETecc0627c70.DATARMNET7d667e828e);DATARMNET9bbfe49633
+=DATARMNET63b1a086d5->queue_head;DATARMNET42a992465f=DATARMNET63b1a086d5->
+map_cpu;if((!DATARMNET63b1a086d5->DATARMNET85c698ec34&&DATARMNETd3673fd5f0>=(
+DATARMNET9bbfe49633+DATARMNET63b1a086d5->DATARMNET0371465875))||(
+DATARMNETd87669e323>=DATARMNETa7d45fb6d4||(DATARMNETd87669e323&&
+DATARMNET63b1a086d5->DATARMNET85c698ec34))||(!DATARMNET63b1a086d5->
+DATARMNET85c698ec34&&!DATARMNETeea3cef5b6(DATARMNET42a992465f)&&++
+DATARMNET14ed771dfb[DATARMNET0d07041c32])){if(likely(DATARMNETa7909611da)){
+DATARMNETcfb5dc7296=DATARMNETaef946bb68(DATARMNET5c4a331b9c,DATARMNET63b1a086d5
+->DATARMNETfbbec4c537);if(DATARMNETcfb5dc7296<(0xd2d+202-0xdf7)){ret=
+(0xd26+209-0xdf6);break;}DATARMNET0997c5650d[DATARMNETcfb5dc7296].
+DATARMNET4133fc9428+=DATARMNET63b1a086d5->DATARMNETae4b27456e.
+DATARMNET6215127f48;DATARMNET0997c5650d[DATARMNET63b1a086d5->map_cpu].
+DATARMNET4133fc9428-=DATARMNET63b1a086d5->DATARMNETae4b27456e.
+DATARMNET6215127f48;DATARMNET63b1a086d5->map_index=DATARMNET5c4a331b9c;
+DATARMNET63b1a086d5->map_cpu=DATARMNETcfb5dc7296;DATARMNET8ceb7a8cc9=
+DATARMNET63b1a086d5->map_cpu;if(DATARMNETd3673fd5f0<(DATARMNET9bbfe49633+
+DATARMNET63b1a086d5->DATARMNET0371465875)){DATARMNETb7ddf3c5dd[
+DATARMNET28bb261646]++;DATARMNETb7ddf3c5dd[DATARMNET67b67dc88f]+=(
+DATARMNET9bbfe49633-DATARMNETd3673fd5f0)+DATARMNET63b1a086d5->
+DATARMNET0371465875;DATARMNET4bde88919f(DATARMNET42a992465f,(DATARMNET9bbfe49633
+-DATARMNETd3673fd5f0)+DATARMNET63b1a086d5->DATARMNET0371465875);pr_info(
+"\x73\x68\x73\x20\x6f\x6f\x6f\x3a\x20\x70\x68\x79\x20\x25\x64\x20\x6e\x65\x77\x5f\x63\x70\x75\x20\x25\x64\x20\x6f\x6c\x64\x5f\x63\x70\x75\x20\x25\x64\x2c\x20\x6f\x66\x66\x73\x65\x74\x20\x25\x64\x20\x6e\x6f\x64\x65\x5f\x71\x68\x65\x61\x64\x20\x25\x64\x2c\x20\x63\x75\x72\x5f\x71\x68\x65\x61\x64\x20\x25\x64\x2c\x20\x66\x66\x20\x25\x64\x20\x6f\x6c\x64\x20\x63\x70\x75\x20\x71\x64\x69\x66\x66\x20\x25\x64\x20\x6e\x65\x77\x20\x71\x64\x69\x66\x66\x20\x25\x64\x20" "\n"
+,DATARMNET63b1a086d5->DATARMNET85c698ec34,DATARMNETcfb5dc7296,
+DATARMNET42a992465f,DATARMNET63b1a086d5->DATARMNET0371465875,DATARMNET9bbfe49633
+,DATARMNETd3673fd5f0,DATARMNETd87669e323,DATARMNETeea3cef5b6(DATARMNET42a992465f
+),DATARMNETeea3cef5b6(DATARMNETcfb5dc7296));}if(DATARMNET0997c5650d[
+DATARMNET42a992465f].DATARMNETef866573e0){DATARMNET0997c5650d[
+DATARMNET8ceb7a8cc9].DATARMNET1e1f197118=(0xd26+209-0xdf6);DATARMNETb7ddf3c5dd[
+DATARMNETc3bce05be2]++;}else if(((0xd26+209-0xdf6)<<DATARMNET42a992465f)&
+DATARMNET121c8bc82a){DATARMNETb7ddf3c5dd[DATARMNET6bf40b86f6]++;}else{
+DATARMNETb7ddf3c5dd[DATARMNET14067f0be4]++;}DATARMNET373e474754=&
+DATARMNET0997c5650d[DATARMNET63b1a086d5->map_cpu];DATARMNETe074a09496();
+DATARMNET63b1a086d5->queue_head=DATARMNET373e474754->DATARMNETae196235f2;
+DATARMNET63b1a086d5->queue_head+=DATARMNET63b1a086d5->DATARMNETae4b27456e.
+DATARMNET6215127f48;if(DATARMNET63b1a086d5->DATARMNET341ea38662)
+DATARMNET63b1a086d5->DATARMNET341ea38662->DATARMNET6e1a4eaf09=
+DATARMNET8ceb7a8cc9;DATARMNETe102b3a798(DATARMNET63b1a086d5,&DATARMNET373e474754
+->DATARMNET3dc4262f53,DATARMNET42a992465f);DATARMNET52de1f3dc0(
+DATARMNET4510abc30d,DATARMNET052f49b190,DATARMNET63b1a086d5->map_cpu,
+DATARMNET5a2e9192f9,(0x16e8+787-0xc0c),(0x16e8+787-0xc0c),DATARMNET63b1a086d5,
+NULL);}ret=(0xd26+209-0xdf6);}}while((0xd2d+202-0xdf7));DATARMNETda96251102(
+DATARMNET4510abc30d,DATARMNET23b8465daf,ret,DATARMNET63b1a086d5->map_cpu,
+DATARMNET5a2e9192f9,(0x16e8+787-0xc0c),DATARMNET63b1a086d5,NULL);return ret;}
+void DATARMNETfbc06e60f1(u8 DATARMNET42a992465f){struct DATARMNET63d7680df2*
+DATARMNET3f85732c70;struct list_head*DATARMNET7b34b7b5be,*next;u32 
+DATARMNET61ab18a4bd;u32 DATARMNETed7800fc72=(0xd2d+202-0xdf7);u32 
+DATARMNETa0df5de99d=(0xd2d+202-0xdf7);u32 DATARMNET8bf94cc2f7=(0xd2d+202-0xdf7);
+u32 DATARMNET76192fa639=(0xd2d+202-0xdf7);DATARMNETe074a09496();
+DATARMNET52de1f3dc0(DATARMNET4510abc30d,DATARMNETde91850c28,DATARMNETecc0627c70.
+DATARMNETa2e32cdd3a,DATARMNETecc0627c70.DATARMNETc252a1f55d,(0x16e8+787-0xc0c),
+(0x16e8+787-0xc0c),NULL,NULL);spin_lock_bh(&DATARMNET3764d083f0);
+DATARMNET61ab18a4bd=DATARMNETeb3978575d(DATARMNET42a992465f);list_for_each_safe(
+DATARMNET7b34b7b5be,next,&DATARMNET0997c5650d[DATARMNET42a992465f].
+DATARMNET3dc4262f53){DATARMNET3f85732c70=list_entry(DATARMNET7b34b7b5be,struct 
+DATARMNET63d7680df2,DATARMNET04c88b8191);if(DATARMNET3f85732c70->
+DATARMNETae4b27456e.DATARMNET6215127f48){DATARMNETed7800fc72=DATARMNET3f85732c70
+->DATARMNETae4b27456e.DATARMNET6215127f48;DATARMNETa0df5de99d=
+DATARMNET3f85732c70->DATARMNETae4b27456e.DATARMNETbaa5765693;DATARMNETe02152c351
+(DATARMNET3f85732c70,DATARMNET6aecae7be2,DATARMNET5b5927fd7e,NULL);
+DATARMNET8bf94cc2f7+=DATARMNETed7800fc72;DATARMNET76192fa639+=
+DATARMNETa0df5de99d;if(DATARMNET3f85732c70->map_cpu==DATARMNET42a992465f){
+DATARMNET61ab18a4bd+=DATARMNETed7800fc72;DATARMNET3f85732c70->queue_head=
+DATARMNET61ab18a4bd;}}}DATARMNETecc0627c70.DATARMNETc252a1f55d-=
+DATARMNET76192fa639;DATARMNETecc0627c70.DATARMNETa2e32cdd3a-=DATARMNET8bf94cc2f7
+;DATARMNET0997c5650d[DATARMNET42a992465f].DATARMNETef866573e0=(0xd2d+202-0xdf7);
+DATARMNETecc0627c70.DATARMNET132b9c7dc4[DATARMNET42a992465f].DATARMNETe61d62310f
+=(0xd2d+202-0xdf7);DATARMNET0997c5650d[DATARMNET42a992465f].DATARMNET4133fc9428=
+(0xd2d+202-0xdf7);spin_unlock_bh(&DATARMNET3764d083f0);if(DATARMNET42a992465f==
+DATARMNETecc0627c70.DATARMNET6625085b71&&rcu_dereference(rmnet_shs_switch)){
+DATARMNETa871eeb7e7();DATARMNETecc0627c70.DATARMNETfeee6933fc=(0xd2d+202-0xdf7);
+DATARMNETecc0627c70.DATARMNET6625085b71=DATARMNETecc0627c70.DATARMNET7d667e828e;
+}DATARMNET52de1f3dc0(DATARMNET4510abc30d,DATARMNET576793621a,DATARMNETecc0627c70
+.DATARMNETa2e32cdd3a,DATARMNETecc0627c70.DATARMNETc252a1f55d,DATARMNET8bf94cc2f7
+,DATARMNET76192fa639,NULL,NULL);}void DATARMNET056c939591(struct work_struct*
+DATARMNET33110a3ff5){struct DATARMNETa6f2d499b2*DATARMNET4b39dc1574=container_of
+(DATARMNET33110a3ff5,struct DATARMNETa6f2d499b2,DATARMNET33110a3ff5);
+DATARMNETfbc06e60f1(DATARMNET4b39dc1574->DATARMNET42c3ecbd5e);
+DATARMNET14ed771dfb[DATARMNETbb5757569c]++;}void DATARMNETcba2f7f7b6(struct 
+DATARMNET63d7680df2*DATARMNET63b1a086d5,u8 DATARMNETf345c1d909,struct sk_buff**
+DATARMNETc88d0a6cdd){struct sk_buff*skb=NULL;struct sk_buff*DATARMNETcebafc57a4=
+NULL;u32 DATARMNETe20a9cab2b=(0xd2d+202-0xdf7);u32 DATARMNETb481d13a78=
+(0xd2d+202-0xdf7);u32 DATARMNET1fcbf046ec=(0xd2d+202-0xdf7);u8 map=
+(0xd2d+202-0xdf7),DATARMNET0258668025=(0xd2d+202-0xdf7);u16 DATARMNET87636d0152=
+(0xd2d+202-0xdf7);u16 index;u8 DATARMNET3894230a14=(0xd2d+202-0xdf7);u8 cpu;if(!
+DATARMNET63b1a086d5->DATARMNETae4b27456e.head)return;if(!DATARMNET63b1a086d5->
+DATARMNETfbbec4c537){map=DATARMNETecc0627c70.map_mask;DATARMNET0258668025=
+DATARMNETecc0627c70.map_len;index=DATARMNET63b1a086d5->map_index;}else{map=
+DATARMNET63b1a086d5->DATARMNETfbbec4c537;DATARMNET0258668025=DATARMNET63b1a086d5
+->DATARMNETa59ce1fd2d;index=DATARMNET63b1a086d5->map_index;}cpu=
+DATARMNET63b1a086d5->map_cpu;if(DATARMNET0997c5650d[cpu].DATARMNET72067bf727){
+DATARMNET3894230a14=DATARMNET0997c5650d[cpu].DATARMNET72067bf727&&
+rmnet_shs_no_sync_off;}if(map){DATARMNET1fcbf046ec=DATARMNET8532ab3089(index,
+DATARMNET0258668025,DATARMNET63b1a086d5->DATARMNETae4b27456e.head->hash,
+DATARMNET3894230a14);}else{DATARMNET63b1a086d5->DATARMNET6250e93187=
+(0xd2d+202-0xdf7);}DATARMNET52de1f3dc0(DATARMNET4510abc30d,DATARMNETe4ee0d2636,
+DATARMNET63b1a086d5->hash,DATARMNET1fcbf046ec,DATARMNET63b1a086d5->
+DATARMNETae4b27456e.DATARMNET6215127f48,DATARMNET63b1a086d5->DATARMNETae4b27456e
+.DATARMNETbaa5765693,DATARMNET63b1a086d5,DATARMNET63b1a086d5->
+DATARMNETae4b27456e.head);DATARMNET87636d0152=(u16)DATARMNET63b1a086d5->
+DATARMNET341ea38662->DATARMNET87636d0152;for((skb=DATARMNET63b1a086d5->
+DATARMNETae4b27456e.head);skb!=NULL;skb=DATARMNETcebafc57a4){DATARMNETcebafc57a4
+=skb->next;if(DATARMNET63b1a086d5->DATARMNET6250e93187)skb->hash=
+DATARMNET1fcbf046ec;skb->next=NULL;DATARMNETe20a9cab2b+=(0xd26+209-0xdf6);
+DATARMNETb481d13a78+=skb->len;if(DATARMNET3894230a14)DATARMNET952c960091++;if(
+DATARMNET87636d0152>(0xd2d+202-0xdf7)&&!DATARMNET63b1a086d5->DATARMNET85c698ec34
+){if(DATARMNET63b1a086d5->DATARMNET1e9d25d9ff==IPPROTO_UDP)DATARMNET68d84e7b98[
+DATARMNETdd6bf3de6b]++;DATARMNET21243b86ae(skb,DATARMNETf345c1d909,
+DATARMNET87636d0152);}else{if(DATARMNETf345c1d909==DATARMNET0b15fd8b54&&(!
+DATARMNET63b1a086d5->DATARMNET85c698ec34))DATARMNETe767554e6e(skb);else if(
+DATARMNETf345c1d909==DATARMNET5b5927fd7e&&(!DATARMNET63b1a086d5->
+DATARMNET85c698ec34))DATARMNET514ce0bf59(skb);else if(DATARMNET63b1a086d5->
+DATARMNET85c698ec34&&DATARMNETf345c1d909==DATARMNET0b15fd8b54&&
+DATARMNETc88d0a6cdd){if(!*DATARMNETc88d0a6cdd){skb->prev=skb;*
+DATARMNETc88d0a6cdd=skb;}else{(*DATARMNETc88d0a6cdd)->prev->next=skb;(*
+DATARMNETc88d0a6cdd)->prev=skb;}}else{DATARMNET14ed771dfb[DATARMNET94658618fc]++
+;netif_rx(skb);}}}DATARMNET63b1a086d5->DATARMNETae4b27456e.DATARMNET6215127f48=
+(0xd2d+202-0xdf7);DATARMNET63b1a086d5->DATARMNETae4b27456e.DATARMNETbaa5765693=
+(0xd2d+202-0xdf7);DATARMNET63b1a086d5->DATARMNETae4b27456e.head=NULL;
+DATARMNET63b1a086d5->DATARMNETae4b27456e.tail=NULL;DATARMNET52de1f3dc0(
+DATARMNET4510abc30d,DATARMNETfb753e521e,DATARMNET63b1a086d5->hash,
+DATARMNET1fcbf046ec,DATARMNETe20a9cab2b,DATARMNETb481d13a78,DATARMNET63b1a086d5,
+NULL);}void DATARMNET23c7ddd780(struct DATARMNET63d7680df2*DATARMNET63b1a086d5,
+u8 DATARMNET5447204733){struct sk_buff*skb;struct sk_buff*DATARMNETcebafc57a4=
+NULL;u32 DATARMNETe20a9cab2b=(0xd2d+202-0xdf7);u32 DATARMNETb481d13a78=
+(0xd2d+202-0xdf7);u32 DATARMNET1fcbf046ec;u8 map,DATARMNET0258668025;if(!
+DATARMNET63b1a086d5->DATARMNETae4b27456e.head)return;map=DATARMNET63b1a086d5->
+DATARMNETfbbec4c537;DATARMNET0258668025=DATARMNET63b1a086d5->DATARMNETa59ce1fd2d
+;if(map){DATARMNET1fcbf046ec=DATARMNET8532ab3089(DATARMNET63b1a086d5->map_index,
+DATARMNET0258668025,DATARMNET63b1a086d5->DATARMNETae4b27456e.head->hash,
+(0xd2d+202-0xdf7));}else{DATARMNET63b1a086d5->DATARMNET6250e93187=
+(0xd2d+202-0xdf7);}for((skb=DATARMNET63b1a086d5->DATARMNETae4b27456e.head);skb!=
+NULL;skb=DATARMNETcebafc57a4){DATARMNETcebafc57a4=skb->next;if(
+DATARMNET63b1a086d5->DATARMNET6250e93187)skb->hash=DATARMNET1fcbf046ec;skb->next
+=NULL;DATARMNETe20a9cab2b+=(0xd26+209-0xdf6);DATARMNETb481d13a78+=skb->len;if(
+DATARMNET5447204733==DATARMNET0b15fd8b54&&(!DATARMNET63b1a086d5->
+DATARMNET85c698ec34))DATARMNETe767554e6e(skb);else if(DATARMNET5447204733==
+DATARMNET5b5927fd7e&&(!DATARMNET63b1a086d5->DATARMNET85c698ec34))
+DATARMNET514ce0bf59(skb);else{netif_rx(skb);}}DATARMNET68d84e7b98[
+DATARMNET72db8b9bac]++;DATARMNETecc0627c70.DATARMNETc252a1f55d-=
+DATARMNETb481d13a78;DATARMNETecc0627c70.DATARMNETa2e32cdd3a-=DATARMNETe20a9cab2b
+;DATARMNET0997c5650d[DATARMNET63b1a086d5->map_cpu].DATARMNET4133fc9428-=
+DATARMNETe20a9cab2b;}int DATARMNETe02152c351(struct DATARMNET63d7680df2*
+DATARMNET63b1a086d5,u8 DATARMNETd87669e323,u8 DATARMNET5447204733,struct sk_buff
+**DATARMNETc88d0a6cdd){int DATARMNETbd864aa442=(0xd2d+202-0xdf7);int map=
+DATARMNET63b1a086d5->DATARMNETfbbec4c537;int DATARMNET5643f7b5e9;
+DATARMNET52de1f3dc0(DATARMNET4510abc30d,DATARMNET022082b219,DATARMNETd87669e323,
+DATARMNET5447204733,(0x16e8+787-0xc0c),(0x16e8+787-0xc0c),DATARMNET63b1a086d5,
+NULL);if(DATARMNETaef946bb68(DATARMNET63b1a086d5->map_index,map)!=
+DATARMNET63b1a086d5->map_cpu){DATARMNET5643f7b5e9=DATARMNET04e8d1b862(
+DATARMNET63b1a086d5->map_cpu,map);if(DATARMNET5643f7b5e9>=(0xd2d+202-0xdf7)){
+DATARMNET63b1a086d5->map_index=DATARMNET5643f7b5e9;DATARMNET63b1a086d5->map_cpu=
+DATARMNETaef946bb68(DATARMNET5643f7b5e9,map);}else{DATARMNET63b1a086d5->
+map_index=DATARMNET2edff26954;DATARMNET63b1a086d5->map_cpu=DATARMNETaef946bb68(
+DATARMNET2edff26954,map);if(DATARMNET63b1a086d5->map_cpu<(0xd2d+202-0xdf7))
+DATARMNET63b1a086d5->map_cpu=DATARMNET2edff26954;}DATARMNETd87669e323=
+(0xd26+209-0xdf6);DATARMNET68d84e7b98[DATARMNETa1f9420686]++;DATARMNET015fb2ba0e
+(DATARMNET720469c0a9,DATARMNET998c6de143,(0x16e8+787-0xc0c),(0x16e8+787-0xc0c),
+(0x16e8+787-0xc0c),(0x16e8+787-0xc0c),NULL,NULL);}if(DATARMNETe488c1c396(
+DATARMNET63b1a086d5,DATARMNETd87669e323,DATARMNET5447204733)){
+DATARMNETcba2f7f7b6(DATARMNET63b1a086d5,DATARMNET5447204733,DATARMNETc88d0a6cdd)
+;DATARMNETbd864aa442=(0xd26+209-0xdf6);}DATARMNET52de1f3dc0(DATARMNET4510abc30d,
+DATARMNET64b02f64c6,DATARMNETbd864aa442,DATARMNETd87669e323,(0x16e8+787-0xc0c),
+(0x16e8+787-0xc0c),DATARMNET63b1a086d5,NULL);return DATARMNETbd864aa442;}static 
+void DATARMNETc54e431bbc(u8 DATARMNET42a992465f,u8 DATARMNET7845d39672,u32 
+DATARMNETea08087fc0){u32 DATARMNETba6017a3a9=(!DATARMNET227d2ff866)?
+(0xd26+209-0xdf6):DATARMNET227d2ff866;int DATARMNETd9d8392917;if((
+DATARMNETd9d8392917=DATARMNET2af09ccd0b(DATARMNET42a992465f,DATARMNET7845d39672,
+DATARMNETea08087fc0))&&DATARMNET362b15f941(DATARMNET42a992465f)&&!
+DATARMNET0997c5650d[DATARMNET42a992465f].DATARMNETef866573e0&&
+DATARMNETecc0627c70.DATARMNET6625085b71!=DATARMNET42a992465f&&
+DATARMNET42a992465f!=(0xd26+209-0xdf6)){DATARMNETba6017a3a9=(!
+DATARMNET7845d39672)?DATARMNET249a927510:DATARMNETba6017a3a9;DATARMNET0997c5650d
+[DATARMNET42a992465f].DATARMNETef866573e0=(0xd26+209-0xdf6);DATARMNETfb7007f025(
+);if(hrtimer_active(&DATARMNETba5ea4329f(DATARMNET42a992465f)))hrtimer_cancel(&
+DATARMNETba5ea4329f(DATARMNET42a992465f));hrtimer_start(&DATARMNETba5ea4329f(
+DATARMNET42a992465f),ns_to_ktime(DATARMNETba6017a3a9*DATARMNET68fc0be252),
+HRTIMER_MODE_REL);DATARMNETb7ddf3c5dd[DATARMNETd9d8392917]++;}}void 
+DATARMNETe377e0368d(u8 DATARMNETded3da1a77,u8 DATARMNET5447204733){struct 
+DATARMNET63d7680df2*DATARMNET3f85732c70=NULL;struct DATARMNET63d7680df2*
+DATARMNETbb236c7d08=NULL;struct list_head*DATARMNET7b34b7b5be=NULL,*next=NULL;
+struct sk_buff*DATARMNETc88d0a6cdd=NULL;int DATARMNET42a992465f;u32 
+DATARMNET61ab18a4bd;u32 DATARMNETed7800fc72=(0xd2d+202-0xdf7);u32 
+DATARMNETa0df5de99d=(0xd2d+202-0xdf7);u32 DATARMNETe56f4fbbe6=(0xd2d+202-0xdf7);
+u32 DATARMNET8bf94cc2f7=(0xd2d+202-0xdf7);u32 DATARMNET76192fa639=
+(0xd2d+202-0xdf7);u32 DATARMNET870611bedd=(0xd2d+202-0xdf7);u32 
+DATARMNETa6424e3c4e=(0xd2d+202-0xdf7);u8 DATARMNET77e7f4db43=(0xd2d+202-0xdf7);
+struct sk_buff*skb=NULL;struct sk_buff*DATARMNETcebafc57a4=NULL;struct 
+DATARMNETe600c5b727*DATARMNETa4055affd5=NULL;DATARMNETe074a09496();
+DATARMNET52de1f3dc0(DATARMNET4510abc30d,DATARMNETde91850c28,DATARMNETecc0627c70.
+DATARMNETa2e32cdd3a,DATARMNETecc0627c70.DATARMNETc252a1f55d,(0x16e8+787-0xc0c),
+(0x16e8+787-0xc0c),NULL,NULL);for(DATARMNET42a992465f=(0xd2d+202-0xdf7);
+DATARMNET42a992465f<DATARMNETc6782fed88;DATARMNET42a992465f++){
+DATARMNET61ab18a4bd=DATARMNETeb3978575d(DATARMNET42a992465f);DATARMNET870611bedd
+=(0xd2d+202-0xdf7);DATARMNETe56f4fbbe6=(0xd2d+202-0xdf7);list_for_each_safe(
+DATARMNET7b34b7b5be,next,&DATARMNET0997c5650d[DATARMNET42a992465f].
+DATARMNET3dc4262f53){DATARMNET3f85732c70=list_entry(DATARMNET7b34b7b5be,struct 
+DATARMNET63d7680df2,DATARMNET04c88b8191);DATARMNETe56f4fbbe6+=
+DATARMNET3f85732c70->DATARMNETae4b27456e.DATARMNET35234676d4;}if(
+DATARMNET12565c8f98){DATARMNETc54e431bbc(DATARMNET42a992465f,DATARMNET20dc6bb36b
+,DATARMNETe56f4fbbe6);}list_for_each_safe(DATARMNET7b34b7b5be,next,&
+DATARMNET0997c5650d[DATARMNET42a992465f].DATARMNET3dc4262f53){
+DATARMNET3f85732c70=list_entry(DATARMNET7b34b7b5be,struct DATARMNET63d7680df2,
+DATARMNET04c88b8191);if(DATARMNET3f85732c70->DATARMNETae4b27456e.
+DATARMNET6215127f48){if(DATARMNET3f85732c70->DATARMNET85c698ec34)
+DATARMNETbb236c7d08=DATARMNET3f85732c70;DATARMNETed7800fc72=DATARMNET3f85732c70
+->DATARMNETae4b27456e.DATARMNET6215127f48;DATARMNETa0df5de99d=
+DATARMNET3f85732c70->DATARMNETae4b27456e.DATARMNETbaa5765693;DATARMNETa6424e3c4e
+=DATARMNET3f85732c70->DATARMNETae4b27456e.DATARMNET35234676d4;
+DATARMNET77e7f4db43=DATARMNETe02152c351(DATARMNET3f85732c70,DATARMNETded3da1a77,
+DATARMNET5447204733,&DATARMNETc88d0a6cdd);if(DATARMNET77e7f4db43){
+DATARMNET870611bedd+=DATARMNETa6424e3c4e;DATARMNET8bf94cc2f7+=
+DATARMNETed7800fc72;DATARMNET76192fa639+=DATARMNETa0df5de99d;DATARMNET0997c5650d
+[DATARMNET3f85732c70->map_cpu].DATARMNET4133fc9428-=DATARMNETed7800fc72;
+DATARMNET3f85732c70->DATARMNETae4b27456e.DATARMNET35234676d4=(0xd2d+202-0xdf7);
+if(DATARMNET3f85732c70->map_cpu==DATARMNET42a992465f){DATARMNET61ab18a4bd+=
+DATARMNETed7800fc72;DATARMNET3f85732c70->queue_head=DATARMNET61ab18a4bd;}}}}if(
+DATARMNET12565c8f98){if(DATARMNET362b15f941(DATARMNET42a992465f)&&!
+DATARMNET0997c5650d[DATARMNET42a992465f].DATARMNETef866573e0)DATARMNETfa919d00dc
+(DATARMNET42a992465f,DATARMNET870611bedd);DATARMNETc54e431bbc(
+DATARMNET42a992465f,DATARMNET20dc6bb36b,(0xd2d+202-0xdf7));}if(
+DATARMNET0997c5650d[DATARMNET42a992465f].DATARMNET4133fc9428<(0xd2d+202-0xdf7))
+DATARMNET68d84e7b98[DATARMNET33a9d4759f]++;if(DATARMNETeea3cef5b6(
+DATARMNET42a992465f)>=DATARMNET84413d1257[DATARMNET42a992465f])
+DATARMNET84413d1257[DATARMNET42a992465f]=DATARMNETeea3cef5b6(DATARMNET42a992465f
+);}DATARMNETecc0627c70.DATARMNETc252a1f55d-=DATARMNET76192fa639;
+DATARMNETecc0627c70.DATARMNETa2e32cdd3a-=DATARMNET8bf94cc2f7;if(
+DATARMNETc88d0a6cdd&&DATARMNETbb236c7d08){DATARMNETa4055affd5=&
+DATARMNET0997c5650d[DATARMNETbb236c7d08->map_cpu];DATARMNETecc0627c70.
+DATARMNET75af9f3c31=(0xd26+209-0xdf6);spin_unlock_bh(&DATARMNET3764d083f0);
+DATARMNETbb236c7d08->DATARMNET0371465875=(0xd2d+202-0xdf7);for((skb=
+DATARMNETc88d0a6cdd);skb!=NULL;skb=DATARMNETcebafc57a4){DATARMNETcebafc57a4=skb
+->next;skb->next=NULL;DATARMNETde8ee16f92(DATARMNETbb236c7d08);rmnet_rx_handler(
+&skb);DATARMNET3e37ad2816(DATARMNETbb236c7d08,&DATARMNETa4055affd5->
+DATARMNET3dc4262f53);}spin_lock_bh(&DATARMNET3764d083f0);DATARMNETa871eeb7e7();
+DATARMNETecc0627c70.DATARMNET75af9f3c31=(0xd2d+202-0xdf7);DATARMNETecc0627c70.
+DATARMNETfeee6933fc=(0xd2d+202-0xdf7);DATARMNETecc0627c70.DATARMNET6625085b71=
+DATARMNETecc0627c70.DATARMNET7d667e828e;}DATARMNET52de1f3dc0(DATARMNET4510abc30d
+,DATARMNET576793621a,DATARMNETecc0627c70.DATARMNETa2e32cdd3a,DATARMNETecc0627c70
+.DATARMNETc252a1f55d,DATARMNET8bf94cc2f7,DATARMNET76192fa639,NULL,NULL);if((
+DATARMNETecc0627c70.DATARMNETc252a1f55d<=(0xd2d+202-0xdf7))||(
+DATARMNETecc0627c70.DATARMNETa2e32cdd3a<=(0xd2d+202-0xdf7))){DATARMNETecc0627c70
+.DATARMNETc252a1f55d=(0xd2d+202-0xdf7);DATARMNETecc0627c70.DATARMNETa2e32cdd3a=
+(0xd2d+202-0xdf7);DATARMNETecc0627c70.DATARMNETd9cfd2812b=(0xd2d+202-0xdf7);
+DATARMNETecc0627c70.DATARMNET34097703c8=DATARMNET8dcf06727b;}}void 
+DATARMNETa4bf9fbf64(u8 DATARMNETded3da1a77,u8 DATARMNET5447204733){spin_lock_bh(
+&DATARMNET3764d083f0);DATARMNETe377e0368d(DATARMNETded3da1a77,
+DATARMNET5447204733);spin_unlock_bh(&DATARMNET3764d083f0);if(DATARMNET5447204733
+==DATARMNET5b5927fd7e){if(DATARMNET365ddeca1c&&DATARMNETecc0627c70.
+DATARMNETc252a1f55d&&DATARMNETecc0627c70.DATARMNETa2e32cdd3a){if(hrtimer_active(
+&DATARMNETecc0627c70.DATARMNET6fd692fc7a))hrtimer_cancel(&DATARMNETecc0627c70.
+DATARMNET6fd692fc7a);hrtimer_start(&DATARMNETecc0627c70.DATARMNET6fd692fc7a,
+ns_to_ktime(DATARMNET4ac8af832c*DATARMNET68fc0be252),HRTIMER_MODE_REL);}
+DATARMNET14ed771dfb[DATARMNETd45c383019]++;}}void DATARMNET495dab3d72(struct 
+sk_buff*skb,struct DATARMNET63d7680df2*DATARMNET63b1a086d5,struct 
+rmnet_shs_clnt_s*DATARMNET0bf01e7c6f){u8 DATARMNET7d63e92341=(0xd2d+202-0xdf7);
+#ifdef DATARMNETdddae6afa8
+if(!(DATARMNET0bf01e7c6f->config&DATARMNET2a76d433b3)&&skb->cb[
+DATARMNET8fadb49f38]){DATARMNETe377e0368d((0xd2d+202-0xdf7),DATARMNET0b15fd8b54)
+;DATARMNET14ed771dfb[DATARMNETc8058e2cff]++;DATARMNET7d63e92341=
+(0xd26+209-0xdf6);}
+#endif
+if(skb_shinfo(skb)->gso_segs){DATARMNET63b1a086d5->DATARMNET11930c5df8+=
+skb_shinfo(skb)->gso_segs;DATARMNET0997c5650d[DATARMNET63b1a086d5->map_cpu].
+DATARMNET4133fc9428++;DATARMNET63b1a086d5->DATARMNETae4b27456e.
+DATARMNET35234676d4+=skb_shinfo(skb)->gso_segs;}else{DATARMNET63b1a086d5->
+DATARMNET11930c5df8+=(0xd26+209-0xdf6);DATARMNET0997c5650d[DATARMNET63b1a086d5->
+map_cpu].DATARMNET4133fc9428++;DATARMNET63b1a086d5->DATARMNETae4b27456e.
+DATARMNET35234676d4++;}DATARMNET63b1a086d5->DATARMNETa8940e4a7b+=
+(0xd26+209-0xdf6);DATARMNET63b1a086d5->DATARMNET3ecedac168+=RMNET_SKB_CB(skb)->
+coal_bytes;DATARMNET63b1a086d5->DATARMNETce5f56eab9+=RMNET_SKB_CB(skb)->
+coal_bufsize;DATARMNET63b1a086d5->bif=RMNET_SKB_CB(skb)->bif;DATARMNET63b1a086d5
+->ack_thresh=RMNET_SKB_CB(skb)->ack_thresh;DATARMNET63b1a086d5->
+DATARMNET2594c418db+=skb->len;DATARMNET63b1a086d5->DATARMNETae4b27456e.
+DATARMNETbaa5765693+=skb->len;DATARMNETecc0627c70.DATARMNETc252a1f55d+=skb->len;
+if(DATARMNET63b1a086d5->DATARMNETae4b27456e.DATARMNET6215127f48>
+(0xd2d+202-0xdf7)){DATARMNET63b1a086d5->DATARMNETae4b27456e.tail->next=skb;
+DATARMNET63b1a086d5->DATARMNETae4b27456e.tail=DATARMNET63b1a086d5->
+DATARMNETae4b27456e.tail->next;}else{DATARMNET63b1a086d5->DATARMNETae4b27456e.
+head=skb;DATARMNET63b1a086d5->DATARMNETae4b27456e.tail=skb;}DATARMNET63b1a086d5
+->DATARMNETae4b27456e.DATARMNET6215127f48+=(0xd26+209-0xdf6);DATARMNETecc0627c70
+.DATARMNETa2e32cdd3a+=(0xd26+209-0xdf6);if(unlikely(DATARMNET7d63e92341))
+DATARMNETe377e0368d((0xd2d+202-0xdf7),DATARMNET0b15fd8b54);DATARMNET52de1f3dc0(
+DATARMNET720469c0a9,DATARMNETf5c836f9ae,DATARMNET63b1a086d5->DATARMNETae4b27456e
+.DATARMNET6215127f48,DATARMNET63b1a086d5->DATARMNETae4b27456e.
+DATARMNETbaa5765693,DATARMNETecc0627c70.DATARMNETa2e32cdd3a,DATARMNETecc0627c70.
+DATARMNETc252a1f55d,skb,DATARMNET63b1a086d5);}static void DATARMNETa7afc8cdaa(
+struct work_struct*DATARMNET33110a3ff5){DATARMNET52de1f3dc0(DATARMNET4510abc30d,
+DATARMNET816bb1e327,(0xd2d+202-0xdf7),DATARMNETecc0627c70.DATARMNET34097703c8,
+(0x16e8+787-0xc0c),(0x16e8+787-0xc0c),NULL,NULL);if(DATARMNETecc0627c70.
+DATARMNETa2e32cdd3a&&DATARMNETecc0627c70.DATARMNET34097703c8==
+DATARMNETb3e3b2a799){local_bh_disable();DATARMNETa4bf9fbf64((0xd2d+202-0xdf7),
+DATARMNET5b5927fd7e);local_bh_enable();}DATARMNET52de1f3dc0(DATARMNET4510abc30d,
+DATARMNETf311f20c00,(0xd2d+202-0xdf7),(0x16e8+787-0xc0c),(0x16e8+787-0xc0c),
+(0x16e8+787-0xc0c),NULL,NULL);}enum hrtimer_restart DATARMNET0a73c53ae6(struct 
+hrtimer*DATARMNET6e4292679f){enum hrtimer_restart ret=HRTIMER_NORESTART;
+DATARMNET52de1f3dc0(DATARMNET4510abc30d,DATARMNET237e7bd5f6,DATARMNETecc0627c70.
+DATARMNET34097703c8,(0x16e8+787-0xc0c),(0x16e8+787-0xc0c),(0x16e8+787-0xc0c),
+NULL,NULL);if(DATARMNETecc0627c70.DATARMNETa2e32cdd3a>(0xd2d+202-0xdf7)){if(
+DATARMNETecc0627c70.DATARMNET34097703c8==DATARMNET7bc926fdbe){
+DATARMNETecc0627c70.DATARMNET34097703c8=DATARMNETb3e3b2a799;hrtimer_forward(
+DATARMNET6e4292679f,hrtimer_cb_get_time(DATARMNET6e4292679f),ns_to_ktime(
+DATARMNET00d5787aad));ret=HRTIMER_RESTART;DATARMNET52de1f3dc0(
+DATARMNET4510abc30d,DATARMNETf16e78412b,DATARMNETecc0627c70.DATARMNETa2e32cdd3a,
+(0x16e8+787-0xc0c),(0x16e8+787-0xc0c),(0x16e8+787-0xc0c),NULL,NULL);}else if(
+DATARMNETecc0627c70.DATARMNET34097703c8==DATARMNET8dcf06727b){
+DATARMNETecc0627c70.DATARMNET34097703c8=DATARMNET7bc926fdbe;}else if(
+DATARMNETecc0627c70.DATARMNET34097703c8==DATARMNETb3e3b2a799){
+DATARMNET52de1f3dc0(DATARMNET4510abc30d,DATARMNET83147a2e7d,DATARMNETecc0627c70.
+DATARMNET34097703c8,(0x16e8+787-0xc0c),(0x16e8+787-0xc0c),(0x16e8+787-0xc0c),
+NULL,NULL);schedule_work((struct work_struct*)&shs_rx_work);}}return ret;}enum 
+hrtimer_restart DATARMNET2ba63fbd90(struct hrtimer*DATARMNET6e4292679f){const 
+enum hrtimer_restart ret=HRTIMER_NORESTART;__pm_relax(DATARMNETecc0627c70.ws);
+DATARMNET064fbe9e3a=(0xd26+209-0xdf6);return ret;}enum hrtimer_restart 
+DATARMNETc2b0dbbb32(struct hrtimer*DATARMNET6e4292679f){const enum 
+hrtimer_restart ret=HRTIMER_NORESTART;struct DATARMNET177911299b 
+DATARMNET9f249e95ee;struct timespec64 time;DATARMNET8d0d510d45(
+DATARMNETe4a6d22824,&DATARMNET9f249e95ee);DATARMNETb5d58adbe7(&
+DATARMNET9f249e95ee);ktime_get_boottime_ts64(&time);DATARMNETecc0627c70.
+DATARMNETdd3caf9200=ktime_set(time.tv_sec,time.tv_nsec);return ret;}enum 
+hrtimer_restart DATARMNET4ce9744605(struct hrtimer*DATARMNET6e4292679f){const 
+enum hrtimer_restart ret=HRTIMER_NORESTART;struct DATARMNETa6f2d499b2*
+DATARMNET4b39dc1574=container_of(DATARMNET6e4292679f,struct DATARMNETa6f2d499b2,
+DATARMNET758a55f103);DATARMNET371703c28d();schedule_work(&DATARMNET4b39dc1574->
+DATARMNET33110a3ff5);return ret;}enum hrtimer_restart DATARMNETbfbe1f5cd0(struct
+ hrtimer*DATARMNET6e4292679f){const enum hrtimer_restart ret=HRTIMER_NORESTART;
+DATARMNETda96251102(DATARMNETb77d87790d,DATARMNET623224aa0a,(0xd2d+202-0xdf7),
+(0xd2d+202-0xdf7),(0x16e8+787-0xc0c),(0x16e8+787-0xc0c),NULL,NULL);
+DATARMNETf20806b279();return ret;}void DATARMNETe1f95274f1(void){int i;for(i=
+(0xd2d+202-0xdf7);i<DATARMNETc6782fed88;i++){DATARMNETecc0627c70.
+DATARMNET132b9c7dc4[i].DATARMNET42c3ecbd5e=i;INIT_WORK(&DATARMNETecc0627c70.
+DATARMNET132b9c7dc4[i].DATARMNET33110a3ff5,DATARMNET056c939591);hrtimer_init(&
+DATARMNETecc0627c70.DATARMNET132b9c7dc4[i].DATARMNET758a55f103,CLOCK_MONOTONIC,
+HRTIMER_MODE_REL);DATARMNETecc0627c70.DATARMNET132b9c7dc4[i].DATARMNET758a55f103
+.function=DATARMNET4ce9744605;}hrtimer_init(&DATARMNETecc0627c70.
+DATARMNET6fd692fc7a,CLOCK_MONOTONIC,HRTIMER_MODE_REL);DATARMNETecc0627c70.
+DATARMNET6fd692fc7a.function=DATARMNET0a73c53ae6;hrtimer_init(&
+DATARMNETecc0627c70.DATARMNET645fb3b468,CLOCK_MONOTONIC,HRTIMER_MODE_REL);
+DATARMNETecc0627c70.DATARMNET645fb3b468.function=DATARMNETc2b0dbbb32;
+hrtimer_init(&DATARMNETecc0627c70.hrtimer_wake,CLOCK_MONOTONIC,HRTIMER_MODE_REL)
+;DATARMNETecc0627c70.hrtimer_wake.function=DATARMNET2ba63fbd90;hrtimer_init(&
+DATARMNETecc0627c70.DATARMNET533dba0f29,CLOCK_MONOTONIC,HRTIMER_MODE_REL);
+DATARMNETecc0627c70.DATARMNET533dba0f29.function=DATARMNETbfbe1f5cd0;INIT_WORK(&
+shs_rx_work.DATARMNET33110a3ff5,DATARMNETa7afc8cdaa);}unsigned int 
+DATARMNET02cdd9b125(void){unsigned int DATARMNET9f4bc49c6f=DATARMNET12565c8f98;
+int i;DATARMNET12565c8f98=(0xd2d+202-0xdf7);for(i=(0xd2d+202-0xdf7);i<
+DATARMNETc6782fed88;i++){hrtimer_cancel(&DATARMNETba5ea4329f(i));
+cancel_work_sync(&DATARMNETecc0627c70.DATARMNET132b9c7dc4[i].DATARMNET33110a3ff5
+);}cancel_work_sync(&shs_rx_work.DATARMNET33110a3ff5);return DATARMNET9f4bc49c6f
+;}int DATARMNET82e88dbb56(struct sk_buff_head*list,int cpu){struct sk_buff*skb;
+struct softnet_data*DATARMNETe95ad852b4=&per_cpu(softnet_data,cpu);rtnl_lock();
+while((skb=skb_dequeue_tail(list))!=NULL){if(rmnet_is_real_dev_registered(skb->
+dev)){DATARMNET68d84e7b98[DATARMNETf8de7cb644]++;dev_core_stats_rx_dropped_inc(
+skb->dev);input_queue_head_incr(DATARMNETe95ad852b4);DATARMNETe95ad852b4->
+dropped++;kfree_skb(skb);}}rtnl_unlock();return(0xd2d+202-0xdf7);}static int 
+DATARMNET2aa4ef6ff9(struct notifier_block*DATARMNETea991f24f2,unsigned long 
+DATARMNET7ee7b05b93,void*DATARMNETe53e117dd2){int DATARMNETc3193054f2,
+DATARMNET25fc1e341e,cpu;int*DATARMNETc628e18b55=(int*)DATARMNETe53e117dd2;struct
+ sk_buff_head*DATARMNET49115bea94;struct sk_buff_head*DATARMNETaf21dd6000;
+for_each_possible_cpu(cpu){DATARMNET49115bea94=&DATARMNET3de2536baf(cpu);
+DATARMNETaf21dd6000=&DATARMNET832731a933(cpu);DATARMNETc3193054f2=skb_queue_len(
+DATARMNET49115bea94);DATARMNET25fc1e341e=skb_queue_len(DATARMNETaf21dd6000);if(
+DATARMNET1ad396a890&&(DATARMNETc3193054f2+DATARMNET25fc1e341e)>=
+DATARMNET1ad396a890){DATARMNET82e88dbb56(&per_cpu(softnet_data,cpu).
+input_pkt_queue,cpu);DATARMNETc3193054f2=skb_queue_len(DATARMNET49115bea94);
+DATARMNET25fc1e341e=skb_queue_len(DATARMNETaf21dd6000);if(DATARMNET25fc1e341e>=
+DATARMNET1ad396a890){DATARMNET82e88dbb56(DATARMNET49115bea94,cpu);}(*
+DATARMNETc628e18b55)++;}}return(0xd2d+202-0xdf7);}static struct notifier_block 
+DATARMNET105c85d84c={.notifier_call=DATARMNET2aa4ef6ff9,};void 
+DATARMNET4684d6c911(struct rmnet_map_pb_ind_hdr*DATARMNET4e61dda775){struct 
+hrtimer*DATARMNET9c579dacb5;DATARMNETda96251102(DATARMNETb77d87790d,
+DATARMNETae009376be,DATARMNET4e61dda775->le.seq_num,DATARMNET4e61dda775->le.
+start_end_seq_num,DATARMNET4e61dda775->le.row_bytes_pending,DATARMNET4e61dda775
+->le.fc_bytes_pending,NULL,NULL);DATARMNET202a68d7d0();DATARMNET9c579dacb5=&
+DATARMNETecc0627c70.DATARMNET533dba0f29;if(hrtimer_active(DATARMNET9c579dacb5))
+hrtimer_cancel(DATARMNET9c579dacb5);hrtimer_start(DATARMNET9c579dacb5,
+ns_to_ktime(DATARMNET2be16c76ac*DATARMNET68fc0be252),HRTIMER_MODE_REL);return;}
+void DATARMNET78bb6be330(struct rmnet_map_dl_ind_hdr*dlhdr,struct 
+rmnet_map_control_command_header*qcmd){DATARMNET7ed4cef8a3(dlhdr);}void 
+DATARMNET7ed4cef8a3(struct rmnet_map_dl_ind_hdr*dlhdr){DATARMNETda96251102(
+DATARMNET23f8730007,DATARMNET4ebbc01257,dlhdr->le.seq,dlhdr->le.pkts,
+(0x16e8+787-0xc0c),(0x16e8+787-0xc0c),NULL,NULL);if(!DATARMNET016351c9e4||
+DATARMNET016351c9e4<dlhdr->le.seq)DATARMNET016351c9e4=dlhdr->le.seq;else{if(
+DATARMNET756bdd424a)pr_info(
+"\x72\x6d\x6e\x65\x74\x5f\x73\x68\x73\x3a\x20\x4f\x46\x4f\x20\x64\x6c\x20\x73\x65\x71\x20\x25\x75\x20\x62\x65\x66\x6f\x72\x65\x20\x25\x75"
+,DATARMNET016351c9e4,dlhdr->le.seq);DATARMNET016351c9e4=dlhdr->le.seq;
+DATARMNET68d84e7b98[DATARMNETf352684b06]++;}if(!spin_is_locked(&
+DATARMNET3764d083f0)){if(DATARMNETecc0627c70.DATARMNETa2e32cdd3a>
+(0xd2d+202-0xdf7)&&DATARMNETecc0627c70.DATARMNET6fe0db3a49!=DATARMNET4ab5a31d0c)
+{DATARMNET14ed771dfb[DATARMNET01bf75e27c]++;DATARMNETa4bf9fbf64(
+(0xd2d+202-0xdf7),DATARMNET0b15fd8b54);}DATARMNETecc0627c70.DATARMNET6fe0db3a49=
+DATARMNET1c55e5fdb1;}}void DATARMNETf61cd23b90(struct rmnet_map_dl_ind_trl*dltrl
+,struct rmnet_map_control_command_header*qcmd){DATARMNET613a81eca8(dltrl);}void 
+DATARMNET613a81eca8(struct rmnet_map_dl_ind_trl*dltrl){DATARMNET52de1f3dc0(
+DATARMNET23f8730007,DATARMNET0808844559,DATARMNETecc0627c70.DATARMNETa2e32cdd3a,
+(0xd2d+202-0xdf7),dltrl->seq_le,(0x16e8+787-0xc0c),NULL,NULL);
+DATARMNETecc0627c70.DATARMNET6fe0db3a49=DATARMNET4ab5a31d0c;if(
+DATARMNETecc0627c70.DATARMNETa2e32cdd3a>(0xd2d+202-0xdf7)&&!spin_is_locked(&
+DATARMNET3764d083f0)){DATARMNET14ed771dfb[DATARMNET84a9e136b8]++;
+DATARMNETa4bf9fbf64((0xd2d+202-0xdf7),DATARMNET0b15fd8b54);}}void 
+DATARMNETaeb508acb0(void){struct DATARMNETe2f668ccb4 DATARMNET5e1b15e908[
+DATARMNETc6782fed88];int i=(0xd2d+202-0xdf7),DATARMNET42a992465f=
+(0xd2d+202-0xdf7);int DATARMNET8b7fada323=(0xd2d+202-0xdf7),DATARMNET71967642e2=
+(0xd2d+202-0xdf7),cpu=(0xd2d+202-0xdf7),DATARMNET7e100af73e=(0xd2d+202-0xdf7);
+memset(DATARMNET5e1b15e908,(0xd2d+202-0xdf7),DATARMNETc6782fed88*sizeof(struct 
+DATARMNETe2f668ccb4));for_each_cpu(cpu,cpu_possible_mask){DATARMNET7e100af73e=
+(0xd2d+202-0xdf7);DATARMNET5e1b15e908[cpu].DATARMNET42c3ecbd5e=cpu;
+DATARMNET5e1b15e908[cpu].DATARMNET24fec1b9ad=topology_cluster_id(cpu);
+for_each_cpu(DATARMNET7e100af73e,topology_cluster_cpumask(cpu)){
+DATARMNET5e1b15e908[cpu].DATARMNETf58377e952|=(0xd26+209-0xdf6)<<
+DATARMNET7e100af73e;}DATARMNET5e1b15e908[cpu].DATARMNET5c98629e14=
+arch_scale_cpu_capacity(cpu);rm_err(
+"\x53\x48\x53\x5f\x43\x50\x55\x5f\x4c\x4f\x47\x3a\x20\x63\x70\x75\x3a\x20\x25\x64\x20\x63\x69\x64\x3a\x20\x25\x64\x20\x63\x6d\x61\x73\x6b\x3a\x20\x25\x64\x20\x63\x61\x70\x61\x63\x69\x74\x79\x3a\x20\x25\x64" "\n"
+,DATARMNET5e1b15e908[cpu].DATARMNET42c3ecbd5e,DATARMNET5e1b15e908[cpu].
+DATARMNET24fec1b9ad,DATARMNET5e1b15e908[cpu].DATARMNETf58377e952,
+DATARMNET5e1b15e908[cpu].DATARMNET5c98629e14);}DATARMNET8b7fada323=
+DATARMNET5e1b15e908[(0xd2d+202-0xdf7)].DATARMNET5c98629e14;DATARMNET71967642e2=
+(0xd2d+202-0xdf7);for(i=(0xd2d+202-0xdf7);i<DATARMNETc6782fed88;i++){if(
+DATARMNET5e1b15e908[i].DATARMNET5c98629e14<DATARMNET8b7fada323){
+DATARMNET8b7fada323=DATARMNET5e1b15e908[i].DATARMNET5c98629e14;
+DATARMNET71967642e2=i;}}DATARMNETecc0627c70.DATARMNET637025ccc1=
+DATARMNET5e1b15e908[DATARMNET71967642e2].DATARMNETf58377e952;DATARMNETecc0627c70
+.DATARMNET2f954f58f8=hweight_long(DATARMNETecc0627c70.DATARMNET637025ccc1);
+DATARMNETecc0627c70.DATARMNETf510b48c29=((0xbf7+4364-0x1c04)^DATARMNETecc0627c70
+.DATARMNET637025ccc1);for(DATARMNET42a992465f=(0xd2d+202-0xdf7);
+DATARMNET42a992465f<DATARMNETc6782fed88;DATARMNET42a992465f++){if((
+(0xd26+209-0xdf6)<<DATARMNET42a992465f)&DATARMNETecc0627c70.DATARMNET637025ccc1)
+{DATARMNET4793ed48af[DATARMNET42a992465f]=DATARMNET9bc9e0cac3;
+DATARMNET713717107f[DATARMNET42a992465f]=DATARMNETb38cb72105;}else{
+DATARMNET4793ed48af[DATARMNET42a992465f]=DATARMNET22feab5726;DATARMNET713717107f
+[DATARMNET42a992465f]=DATARMNET243c638e7d;}}rm_err(
+"\x53\x48\x53\x5f\x43\x50\x55\x5f\x4c\x4f\x47\x3a\x20\x6d\x61\x78\x5f\x73\x5f\x63\x6f\x72\x65\x73\x3a\x20\x25\x64\x20\x6e\x6f\x6e\x5f\x70\x65\x72\x66\x5f\x6d\x61\x73\x6b\x3a\x20\x25\x64\x20\x70\x65\x72\x66\x5f\x6d\x61\x73\x6b\x3a\x20\x25\x64" "\n"
+,DATARMNETecc0627c70.DATARMNET2f954f58f8,DATARMNETecc0627c70.DATARMNET637025ccc1
+,DATARMNETecc0627c70.DATARMNETf510b48c29);}void DATARMNET45d8cdb224(struct 
+net_device*dev,struct net_device*vnd){struct rps_map*map;int rc;u8 
+DATARMNET0e4304d903;u8 map_mask;u8 map_len;if(DATARMNETecc0627c70.
+DATARMNETfc89d842ae)return;map=rcu_dereference(vnd->_rx->rps_map);if(!map){
+map_mask=(0xd2d+202-0xdf7);map_len=(0xd2d+202-0xdf7);}else{map_mask=
+DATARMNET928c931df9(map);map_len=DATARMNET310c3eb16e(map_mask);}
+DATARMNETecc0627c70.port=rmnet_get_port(dev);DATARMNETecc0627c70.map_mask=
+map_mask;DATARMNETecc0627c70.map_len=map_len;DATARMNETecc0627c70.
+DATARMNETba3f7a11ef=(0xd1f+216-0xdf5);DATARMNETecc0627c70.DATARMNET5c24e1df05=
+(0xd26+209-0xdf6);DATARMNETecc0627c70.DATARMNET6625085b71=(0xd26+209-0xdf6);
+DATARMNETecc0627c70.DATARMNET7d667e828e=(0xd26+209-0xdf6);DATARMNETaeb508acb0();
+for(DATARMNET0e4304d903=(0xd2d+202-0xdf7);DATARMNET0e4304d903<
+DATARMNETc6782fed88;DATARMNET0e4304d903++)INIT_LIST_HEAD(&DATARMNET0997c5650d[
+DATARMNET0e4304d903].DATARMNET3dc4262f53);DATARMNETe6e8431304();
+DATARMNET44499733f2();rc=register_oom_notifier(&DATARMNET105c85d84c);if(rc<
+(0xd2d+202-0xdf7)){pr_info(
+"\x52\x6d\x6e\x65\x74\x5f\x73\x68\x73\x5f\x6f\x6f\x6d\x20\x72\x65\x67\x69\x73\x74\x65\x72\x20\x66\x61\x69\x6c\x75\x72\x65"
+);}pr_info(
+"\x72\x6d\x6e\x65\x74\x5f\x73\x68\x73\x20\x69\x6e\x69\x74\x20\x77\x69\x74\x68\x20\x25\x78"
+,DATARMNETecc0627c70.map_mask);DATARMNETecc0627c70.ws=wakeup_source_register(
+NULL,"\x52\x4d\x4e\x45\x54\x5f\x53\x48\x53");DATARMNETecc0627c70.
+DATARMNETfc89d842ae=(0xd26+209-0xdf6);}void DATARMNETeacad8334e(void){struct 
+hlist_node*tmp;struct DATARMNET63d7680df2*DATARMNET63b1a086d5;struct sk_buff*
+DATARMNET9a788b5480;int bkt;struct sk_buff*buf;if(!DATARMNETecc0627c70.
+DATARMNETa2e32cdd3a)return;spin_lock_bh(&DATARMNET3764d083f0);hash_for_each_safe
+(DATARMNETe603c3a4b3,bkt,tmp,DATARMNET63b1a086d5,list){for((buf=
+DATARMNET63b1a086d5->DATARMNETae4b27456e.head);buf!=NULL;buf=DATARMNET9a788b5480
+){DATARMNET9a788b5480=buf->next;if(buf)consume_skb(buf);}DATARMNET63b1a086d5->
+DATARMNETae4b27456e.DATARMNET6215127f48=(0xd2d+202-0xdf7);DATARMNET63b1a086d5->
+DATARMNETae4b27456e.DATARMNETbaa5765693=(0xd2d+202-0xdf7);DATARMNET63b1a086d5->
+DATARMNETae4b27456e.head=NULL;DATARMNET63b1a086d5->DATARMNETae4b27456e.tail=NULL
+;}DATARMNETecc0627c70.DATARMNETc252a1f55d=(0xd2d+202-0xdf7);DATARMNETecc0627c70.
+DATARMNETa2e32cdd3a=(0xd2d+202-0xdf7);DATARMNETecc0627c70.DATARMNETd9cfd2812b=
+(0xd2d+202-0xdf7);DATARMNETecc0627c70.DATARMNET34097703c8=DATARMNET8dcf06727b;
+spin_unlock_bh(&DATARMNET3764d083f0);}void DATARMNET02fc8b29a0(struct 
+DATARMNET63d7680df2*node_p,struct rmnet_shs_clnt_s*DATARMNET0bf01e7c6f,struct 
+net_device*dev){u32 DATARMNET421230d879;u32 DATARMNET5eee131e74;node_p->
+DATARMNET85c698ec34=(0xd26+209-0xdf6);node_p->DATARMNETfbbec4c537=
+DATARMNET0bf01e7c6f->map_mask;node_p->DATARMNETa59ce1fd2d=DATARMNET310c3eb16e(
+node_p->DATARMNETfbbec4c537);node_p->map_cpu=DATARMNETecc0627c70.
+DATARMNET7d667e828e;node_p->map_index=node_p->map_cpu;node_p->
+DATARMNET0371465875=(0xd2d+202-0xdf7);if(DATARMNET362b15f941(node_p->map_cpu)){
+DATARMNET5e4aeef593(DATARMNETecc0627c70.DATARMNET5c24e1df05);DATARMNETfb7007f025
+();}DATARMNET765b8ecfba(dev,DATARMNETecc0627c70.DATARMNET5c24e1df05,
+(0xd26+209-0xdf6));DATARMNET421230d879=(DATARMNET3de2536baf(node_p->map_cpu).
+qlen+DATARMNET832731a933(node_p->map_cpu).qlen);if(DATARMNET421230d879>
+DATARMNET673cf85e28)DATARMNET673cf85e28=DATARMNET421230d879;node_p->queue_head=
+DATARMNETeb3978575d(DATARMNETecc0627c70.DATARMNET5c24e1df05)+DATARMNET421230d879
+;DATARMNET5eee131e74=(DATARMNET3de2536baf(DATARMNETecc0627c70.
+DATARMNET5c24e1df05).qlen+DATARMNET832731a933(DATARMNETecc0627c70.
+DATARMNET5c24e1df05).qlen);if(DATARMNET362b15f941(node_p->map_cpu)){if(!
+hrtimer_active(&DATARMNETba5ea4329f(node_p->map_cpu))){hrtimer_start(&
+DATARMNETba5ea4329f(node_p->map_cpu),ns_to_ktime((DATARMNET566e381630)*
+DATARMNET68fc0be252),HRTIMER_MODE_REL);}}else if((DATARMNET421230d879+
+DATARMNET5eee131e74)<DATARMNET0085702236){if(!hrtimer_active(&
+DATARMNETba5ea4329f(node_p->map_cpu))){hrtimer_start(&DATARMNETba5ea4329f(node_p
+->map_cpu),ns_to_ktime((DATARMNET566e381630/(0xeb7+1130-0x130d))*
+DATARMNET68fc0be252),HRTIMER_MODE_REL);}}else{if(!hrtimer_active(&
+DATARMNETba5ea4329f(node_p->map_cpu))){hrtimer_start(&DATARMNETba5ea4329f(node_p
+->map_cpu),ns_to_ktime((DATARMNET566e381630/(0xd1f+216-0xdf5))*
+DATARMNET68fc0be252),HRTIMER_MODE_REL);}}}int DATARMNET756778f14f(struct sk_buff
+*skb,struct rmnet_shs_clnt_s*DATARMNET0bf01e7c6f){struct DATARMNET63d7680df2*
+node_p;struct hlist_node*tmp;int map=DATARMNETecc0627c70.map_mask;int 
+DATARMNETcfb5dc7296;int map_cpu;u32 DATARMNET5c4a331b9c,hash;u8 is_match_found=
+(0xd2d+202-0xdf7);u8 DATARMNET935af10724=(0xd2d+202-0xdf7);u8 
+DATARMNET7c5ef97eab=(0xd2d+202-0xdf7);struct DATARMNETe600c5b727*
+DATARMNETa4055affd5;struct rmnet_priv*priv;u8 DATARMNET5b3782c91e=
+(0xd2d+202-0xdf7);struct DATARMNET177911299b DATARMNET9f249e95ee;int 
+DATARMNETd0bfb31db5=(0xd2d+202-0xdf7);u8 DATARMNETd07e717728=(0xd2d+202-0xdf7);
+if(!(DATARMNET0bf01e7c6f->config&RMNET_SHS_STMP_ALL)&&!DATARMNET9303cec796(skb,&
+DATARMNET5b3782c91e)){if(DATARMNET5b3782c91e){DATARMNETe767554e6e(skb);
+DATARMNET8d0d510d45(DATARMNETafc650134e,&DATARMNET9f249e95ee);
+DATARMNETb5d58adbe7(&DATARMNET9f249e95ee);}else{DATARMNETe767554e6e(skb);}return
+(0xd2d+202-0xdf7);}if((unlikely(!map))||!DATARMNETecc0627c70.DATARMNETfc89d842ae
+){DATARMNETe767554e6e(skb);DATARMNET015fb2ba0e(DATARMNET720469c0a9,
+DATARMNETe0fee0991a,(0x16e8+787-0xc0c),(0x16e8+787-0xc0c),(0x16e8+787-0xc0c),
+(0x16e8+787-0xc0c),NULL,NULL);DATARMNET68d84e7b98[DATARMNETe3c02ddaeb]++;return
+(0xd2d+202-0xdf7);}DATARMNET52de1f3dc0(DATARMNET720469c0a9,DATARMNET856c53293b,
+(0x16e8+787-0xc0c),(0x16e8+787-0xc0c),(0x16e8+787-0xc0c),(0x16e8+787-0xc0c),skb,
+NULL);hash=skb_get_hash(skb);if(DATARMNET0bf01e7c6f->map_mask){skb->hash=57005;
+hash=57005;if(raw_smp_processor_id()==DATARMNETecc0627c70.DATARMNET6625085b71&&
+DATARMNETecc0627c70.DATARMNET6625085b71!=DATARMNETecc0627c70.DATARMNET7d667e828e
+){netif_rx(skb);DATARMNETecc0627c70.DATARMNETfeee6933fc++;if(DATARMNETecc0627c70
+.DATARMNETfeee6933fc>DATARMNETf4cacbb5dc){DATARMNETa4bf9fbf64(
+DATARMNETf3dfa53867,DATARMNET0b15fd8b54);DATARMNETa871eeb7e7();
+DATARMNET68d84e7b98[DATARMNET43405942ed]++;DATARMNETecc0627c70.
+DATARMNETfeee6933fc=(0xd2d+202-0xdf7);}return(0xd2d+202-0xdf7);}}spin_lock_bh(&
+DATARMNET3764d083f0);do{hash_for_each_possible_safe(DATARMNETe603c3a4b3,node_p,
+tmp,list,hash){if(hash!=node_p->hash)continue;DATARMNETda96251102(
+DATARMNET720469c0a9,DATARMNET08b6defcff,(0x16e8+787-0xc0c),(0x16e8+787-0xc0c),
+(0x16e8+787-0xc0c),(0x16e8+787-0xc0c),skb,NULL);DATARMNET5c4a331b9c=node_p->
+map_index;is_match_found=(0xd26+209-0xdf6);DATARMNET935af10724=(0xd26+209-0xdf6)
+;if(node_p->DATARMNET80eb31d7b8){if(node_p->DATARMNET80eb31d7b8==
+DATARMNET64165df74d){if(DATARMNETe24386452c(skb)){node_p->DATARMNET80eb31d7b8=
+DATARMNET6a801720f2;}else{node_p->DATARMNET80eb31d7b8=DATARMNETf8fcf5a1db;}}
+spin_unlock_bh(&DATARMNET3764d083f0);node_p->DATARMNET11930c5df8+=
+(0xd26+209-0xdf6);node_p->DATARMNET2594c418db+=skb->len;DATARMNETf5821256ad(skb,
+DATARMNET0bf01e7c6f);return(0xd2d+202-0xdf7);}if(node_p->DATARMNET85c698ec34){
+DATARMNETe074a09496();if(raw_smp_processor_id()!=DATARMNETecc0627c70.
+DATARMNET7d667e828e){DATARMNET68d84e7b98[DATARMNETbb641cd339]++;}if(
+DATARMNETecc0627c70.DATARMNET5c24e1df05!=DATARMNETecc0627c70.DATARMNET7d667e828e
+){if(node_p->map_cpu!=DATARMNETecc0627c70.DATARMNET7d667e828e){
+DATARMNETa4055affd5=&DATARMNET0997c5650d[DATARMNETecc0627c70.DATARMNET7d667e828e
+];DATARMNETe102b3a798(node_p,&DATARMNETa4055affd5->DATARMNET3dc4262f53,node_p->
+map_cpu);DATARMNETb7ddf3c5dd[DATARMNETcf84373518]++;}DATARMNET02fc8b29a0(node_p,
+DATARMNET0bf01e7c6f,skb->dev);netif_rx(skb);break;}node_p->DATARMNET0371465875++
+;DATARMNET495dab3d72(skb,node_p,DATARMNET0bf01e7c6f);if(!rcu_dereference(
+rmnet_shs_switch)){DATARMNET68d84e7b98[DATARMNET2e68f4bd9f]++;
+DATARMNET7c5ef97eab=DATARMNET27fb9a225d;break;}if(DATARMNETadb0248bd4(
+DATARMNETecc0627c70.DATARMNET7d667e828e)>=(node_p->queue_head+node_p->
+DATARMNET0371465875)){DATARMNET7c5ef97eab=DATARMNETbbf8fe40aa;break;}if(
+DATARMNETaf998640fd&&node_p->DATARMNETae4b27456e.DATARMNET6215127f48>
+DATARMNETaf998640fd){DATARMNET14ed771dfb[DATARMNETcc3c294f38]++;
+DATARMNET7c5ef97eab=DATARMNET95c85e6fe1;break;}spin_unlock_bh(&
+DATARMNET3764d083f0);return(0xd2d+202-0xdf7);}else DATARMNET495dab3d72(skb,
+node_p,DATARMNET0bf01e7c6f);break;}if(is_match_found)break;DATARMNETd0bfb31db5=(
+DATARMNET9273f84bf1&~DATARMNETecc0627c70.DATARMNETba3f7a11ef&~
+DATARMNET121c8bc82a&DATARMNETecc0627c70.map_mask)?DATARMNET9273f84bf1:
+DATARMNETbc3c416b77;if(DATARMNET0bf01e7c6f->map_mask){DATARMNETcfb5dc7296=
+DATARMNET362c14e98b(DATARMNETecc0627c70.map_mask&DATARMNETd0bfb31db5&~
+DATARMNETecc0627c70.DATARMNETba3f7a11ef&~DATARMNET121c8bc82a);}else{
+DATARMNETcfb5dc7296=DATARMNET762cfa52fe(DATARMNETecc0627c70.map_mask&
+DATARMNETd0bfb31db5&~DATARMNETecc0627c70.DATARMNETba3f7a11ef&~
+DATARMNET121c8bc82a);}if(DATARMNETcfb5dc7296<(0xd2d+202-0xdf7)){
+DATARMNET68d84e7b98[DATARMNETa1f9420686]++;break;}if(atomic_long_read(&
+DATARMNETecc0627c70.DATARMNET64bb8a8f57)>DATARMNETbfe31ef643){
+DATARMNET68d84e7b98[DATARMNETe6e77f9f03]++;break;}node_p=kzalloc(sizeof(*node_p)
+,GFP_ATOMIC);if(!node_p){DATARMNET68d84e7b98[DATARMNET394acaf558]++;break;}
+atomic_long_inc(&DATARMNETecc0627c70.DATARMNET64bb8a8f57);node_p->dev=skb->dev;
+node_p->hash=skb->hash;node_p->map_cpu=DATARMNETcfb5dc7296;node_p->map_index=
+DATARMNET04e8d1b862(node_p->map_cpu,map);INIT_LIST_HEAD(&node_p->
+DATARMNET04c88b8191);DATARMNET44459105b4(skb,node_p);DATARMNET350f55bfca(node_p)
+;if(!node_p->DATARMNET341ea38662){atomic_long_dec(&DATARMNETecc0627c70.
+DATARMNET64bb8a8f57);kfree(node_p);break;}if(DATARMNET0bf01e7c6f->map_mask){
+DATARMNETe074a09496();DATARMNET02fc8b29a0(node_p,DATARMNET0bf01e7c6f,skb->dev);}
+else{node_p->DATARMNETfbbec4c537=DATARMNETecc0627c70.map_mask;node_p->
+DATARMNETa59ce1fd2d=DATARMNETecc0627c70.map_len;}map_cpu=node_p->map_cpu;
+DATARMNETa4055affd5=&DATARMNET0997c5650d[map_cpu];priv=netdev_priv(node_p->dev);
+if(!priv){rm_err(
+"\x70\x72\x69\x76\x20\x66\x6f\x72\x20\x6e\x65\x74\x64\x65\x76\x20\x69\x73\x20\x6e\x75\x6c\x6c\x20\x66\x6f\x72\x20\x68\x61\x73\x68\x20\x30\x78\x25\x78"
+,node_p->hash);DATARMNET68d84e7b98[DATARMNETf5157a9b85]++;}else{node_p->
+DATARMNET341ea38662->mux_id=priv->mux_id;rm_err(
+"\x53\x48\x53\x5f\x4d\x55\x58\x3a\x20\x6d\x75\x78\x20\x69\x64\x20\x66\x6f\x72\x20\x68\x61\x73\x68\x20\x30\x78\x25\x78\x20\x69\x73\x20\x25\x64"
+,node_p->hash,node_p->DATARMNET341ea38662->mux_id);}DATARMNET3e37ad2816(node_p,&
+DATARMNETa4055affd5->DATARMNET3dc4262f53);hash_add_rcu(DATARMNETe603c3a4b3,&
+node_p->list,skb->hash);if(DATARMNETe24386452c(skb)){node_p->DATARMNET80eb31d7b8
+=DATARMNET6a801720f2;spin_unlock_bh(&DATARMNET3764d083f0);DATARMNETf5821256ad(
+skb,DATARMNET0bf01e7c6f);return(0xd2d+202-0xdf7);}if(!node_p->
+DATARMNET85c698ec34)DATARMNET495dab3d72(skb,node_p,DATARMNET0bf01e7c6f);else{
+netif_rx(skb);spin_unlock_bh(&DATARMNET3764d083f0);return(0xd2d+202-0xdf7);}
+DATARMNET935af10724=(0xd26+209-0xdf6);break;}while((0xd2d+202-0xdf7));if(!
+DATARMNET935af10724){spin_unlock_bh(&DATARMNET3764d083f0);DATARMNET68d84e7b98[
+DATARMNET99db6e7d86]++;DATARMNETe767554e6e(skb);DATARMNET015fb2ba0e(
+DATARMNET720469c0a9,DATARMNETe0fee0991a,(0x16e8+787-0xc0c),(0x16e8+787-0xc0c),
+(0x16e8+787-0xc0c),(0x16e8+787-0xc0c),NULL,NULL);return(0xd2d+202-0xdf7);}if(!
+DATARMNETecc0627c70.DATARMNETd9cfd2812b&&DATARMNETecc0627c70.DATARMNETa2e32cdd3a
+&&DATARMNET365ddeca1c){DATARMNETecc0627c70.DATARMNETd9cfd2812b=(0xd26+209-0xdf6)
+;DATARMNETecc0627c70.DATARMNET34097703c8=DATARMNET7bc926fdbe;DATARMNETd07e717728
+=(0xd26+209-0xdf6);}spin_unlock_bh(&DATARMNET3764d083f0);if(DATARMNETd07e717728)
+{if(hrtimer_active(&DATARMNETecc0627c70.DATARMNET6fd692fc7a)){
+DATARMNETda96251102(DATARMNET720469c0a9,DATARMNETf730f80f06,DATARMNET2f67183a86,
+(0x16e8+787-0xc0c),(0x16e8+787-0xc0c),(0x16e8+787-0xc0c),skb,NULL);
+hrtimer_cancel(&DATARMNETecc0627c70.DATARMNET6fd692fc7a);}hrtimer_start(&
+DATARMNETecc0627c70.DATARMNET6fd692fc7a,ns_to_ktime(DATARMNET4ac8af832c*
+DATARMNET68fc0be252),HRTIMER_MODE_REL);DATARMNETda96251102(DATARMNET720469c0a9,
+DATARMNETdd870ee64c,DATARMNET2f67183a86,(0x16e8+787-0xc0c),(0x16e8+787-0xc0c),
+(0x16e8+787-0xc0c),skb,NULL);}if(DATARMNETecc0627c70.DATARMNETa2e32cdd3a>
+DATARMNET7d18c0bcf8){if(DATARMNET58b009b16b)DATARMNET14ed771dfb[
+DATARMNET802083239a]++;DATARMNET52de1f3dc0(DATARMNET4510abc30d,
+DATARMNET562b7d32a8,(0xd2d+202-0xdf7),(0x16e8+787-0xc0c),(0x16e8+787-0xc0c),
+(0x16e8+787-0xc0c),NULL,NULL);DATARMNETa4bf9fbf64(DATARMNET0acd775aa8,
+DATARMNET0b15fd8b54);}else if(DATARMNETecc0627c70.DATARMNETc252a1f55d>
+DATARMNETea75c7b6f6){if(DATARMNET58b009b16b)DATARMNET14ed771dfb[
+DATARMNETed69052342]++;DATARMNET52de1f3dc0(DATARMNET4510abc30d,
+DATARMNET99640d60f7,(0xd2d+202-0xdf7),(0x16e8+787-0xc0c),(0x16e8+787-0xc0c),
+(0x16e8+787-0xc0c),NULL,NULL);DATARMNETa4bf9fbf64(DATARMNET2217440c2e,
+DATARMNET0b15fd8b54);}else if(DATARMNET7c5ef97eab){DATARMNET52de1f3dc0(
+DATARMNET4510abc30d,DATARMNET562b7d32a8,(0xd26+209-0xdf6),DATARMNETecc0627c70.
+DATARMNETa2e32cdd3a,(0x16e8+787-0xc0c),(0x16e8+787-0xc0c),NULL,NULL);if(
+DATARMNET58b009b16b)DATARMNET14ed771dfb[DATARMNETdf6ecde77a]++;
+DATARMNETa4bf9fbf64(DATARMNET7c5ef97eab,DATARMNET0b15fd8b54);}else if((
+DATARMNET0bf01e7c6f->config&RMNET_SHS_NO_DLMKR)&&DATARMNETecc0627c70.
+DATARMNETa2e32cdd3a){if(DATARMNET58b009b16b)DATARMNET14ed771dfb[
+DATARMNET04dac3a62b]++;DATARMNETa4bf9fbf64((0xd2d+202-0xdf7),DATARMNET0b15fd8b54
+);}else if(DATARMNETecc0627c70.DATARMNET34097703c8==DATARMNETb3e3b2a799){
+DATARMNET14ed771dfb[DATARMNETcfb1764a91]++;DATARMNET52de1f3dc0(
+DATARMNET4510abc30d,DATARMNETa2bd301af7,(0xd26+209-0xdf6),DATARMNETecc0627c70.
+DATARMNETa2e32cdd3a,(0x16e8+787-0xc0c),(0x16e8+787-0xc0c),NULL,NULL);
+DATARMNETa4bf9fbf64((0xd2d+202-0xdf7),DATARMNET0b15fd8b54);}else if(!(
+DATARMNET0bf01e7c6f->config&RMNET_SHS_NO_DLMKR)&&DATARMNETecc0627c70.
+DATARMNETa2e32cdd3a&&DATARMNETecc0627c70.DATARMNET6fe0db3a49!=
+DATARMNET1c55e5fdb1){DATARMNET14ed771dfb[DATARMNET01bf75e27c]++;
+DATARMNETa4bf9fbf64((0xd2d+202-0xdf7),DATARMNET0b15fd8b54);}return
+(0xd2d+202-0xdf7);}static const struct rmnet_module_hook_register_info 
+DATARMNETef42b9f0b2={.hooknum=RMNET_MODULE_HOOK_SHS_SKB_ENTRY,.func=
+DATARMNET756778f14f,};void DATARMNET203752febd(void){RCU_INIT_POINTER(
+rmnet_shs_skb_entry,NULL);rmnet_module_hook_unregister_no_sync(&
+DATARMNETef42b9f0b2,(0xd26+209-0xdf6));}void DATARMNET7520667b38(void){
+RCU_INIT_POINTER(rmnet_shs_skb_entry,DATARMNET756778f14f);
+rmnet_module_hook_register(&DATARMNETef42b9f0b2,(0xd26+209-0xdf6));}static const
+ struct rmnet_module_hook_register_info DATARMNET28a9685974={.hooknum=
+RMNET_MODULE_HOOK_SHS_SWITCH,.func=DATARMNET756778f14f,};void 
+DATARMNETa871eeb7e7(void){RCU_INIT_POINTER(rmnet_shs_switch,NULL);
+rmnet_module_hook_unregister_no_sync(&DATARMNET28a9685974,(0xd26+209-0xdf6));}
+void DATARMNET8f9da46b14(void){RCU_INIT_POINTER(rmnet_shs_switch,
+DATARMNET756778f14f);rmnet_module_hook_register(&DATARMNET28a9685974,
+(0xd26+209-0xdf6));}void DATARMNET9297340f58(unsigned int DATARMNET9f4bc49c6f){
+DATARMNETdf74db7e38();DATARMNET90fe3a4b56();DATARMNETecc0627c70.
+DATARMNET9c869c1ec2=(0xd2d+202-0xdf7);unregister_oom_notifier(&
+DATARMNET105c85d84c);if(DATARMNETecc0627c70.DATARMNETf5ab31b9b0)hrtimer_cancel(&
+DATARMNETecc0627c70.DATARMNET6fd692fc7a);hrtimer_cancel(&DATARMNETecc0627c70.
+DATARMNET645fb3b468);hrtimer_cancel(&DATARMNETecc0627c70.hrtimer_wake);
+wakeup_source_unregister(DATARMNETecc0627c70.ws);memset(&DATARMNETecc0627c70,
+(0xd2d+202-0xdf7),sizeof(DATARMNETecc0627c70));DATARMNETecc0627c70.port=NULL;
+DATARMNETecc0627c70.DATARMNETfc89d842ae=(0xd2d+202-0xdf7);DATARMNET12565c8f98=
+DATARMNET9f4bc49c6f;}

+ 252 - 0
qcom/opensource/datarmnet-ext/shs/rmnet_shs_modules.c

@@ -0,0 +1,252 @@
+/* Copyright (c) 2020-2021 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 and
+ * only version 2 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ */
+
+#include "rmnet_shs.h"
+unsigned int DATARMNET1fc3ad67fd __read_mostly=DATARMNETe4c625a3a3;module_param(
+DATARMNET1fc3ad67fd,uint,(0xdb7+6665-0x261c));MODULE_PARM_DESC(
+DATARMNET1fc3ad67fd,
+"\x49\x6e\x74\x65\x72\x76\x61\x6c\x20\x62\x65\x74\x77\x65\x65\x6e\x20\x77\x71\x20\x72\x75\x6e\x73\x20\x28\x6d\x73\x29"
+);unsigned long DATARMNETa804c0b904 __read_mostly=DATARMNET4899358462;
+module_param(DATARMNETa804c0b904,ulong,(0xdb7+6665-0x261c));MODULE_PARM_DESC(
+DATARMNETa804c0b904,
+"\x4d\x61\x78\x20\x66\x6c\x6f\x77\x20\x69\x6e\x61\x63\x74\x69\x76\x65\x20\x74\x69\x6d\x65\x20\x62\x65\x66\x6f\x72\x65\x20\x63\x6c\x65\x61\x6e\x20\x75\x70"
+);unsigned int DATARMNETcab56af6d5 __read_mostly=(0xeb7+710-0x112d);module_param
+(DATARMNETcab56af6d5,uint,(0xdb7+6665-0x261c));MODULE_PARM_DESC(
+DATARMNETcab56af6d5,
+"\x6d\x6f\x76\x69\x6e\x67\x20\x61\x76\x65\x72\x61\x67\x65\x20\x77\x65\x69\x67\x68\x74\x61\x67\x65"
+);unsigned long long DATARMNET713717107f[DATARMNETc6782fed88]__read_mostly={
+DATARMNETfbee9e182e,DATARMNETb38cb72105,DATARMNET243c638e7d,DATARMNET243c638e7d,
+DATARMNET243c638e7d,DATARMNETb38cb72105,DATARMNETb38cb72105,DATARMNET243c638e7d}
+;module_param_array(DATARMNET713717107f,ullong,NULL,(0xdb7+6665-0x261c));
+MODULE_PARM_DESC(DATARMNET713717107f,
+"\x4d\x61\x78\x20\x70\x6b\x74\x73\x20\x63\x6f\x72\x65\x20\x63\x61\x6e\x20\x68\x61\x6e\x64\x6c\x65"
+);unsigned long long DATARMNET4793ed48af[DATARMNETc6782fed88]__read_mostly={
+DATARMNET9bc9e0cac3,DATARMNET9bc9e0cac3,DATARMNET22feab5726,DATARMNET22feab5726,
+DATARMNET22feab5726,DATARMNET9bc9e0cac3,DATARMNET9bc9e0cac3,DATARMNET22feab5726}
+;module_param_array(DATARMNET4793ed48af,ullong,NULL,(0xdb7+6665-0x261c));
+MODULE_PARM_DESC(DATARMNET4793ed48af,
+"\x4d\x69\x6e\x20\x70\x6b\x74\x73\x20\x63\x6f\x72\x65\x20\x63\x61\x6e\x20\x68\x61\x6e\x64\x6c\x65"
+);unsigned int DATARMNET18f2ba4444[DATARMNETc6782fed88];module_param_array(
+DATARMNET18f2ba4444,uint,NULL,(0xcb7+5769-0x221c));MODULE_PARM_DESC(
+DATARMNET18f2ba4444,
+"\x4e\x75\x6d\x20\x66\x6c\x6f\x77\x73\x20\x70\x72\x6f\x63\x65\x73\x73\x65\x64\x20\x70\x65\x72\x20\x63\x6f\x72\x65"
+);unsigned int DATARMNET2d482e7d9f[DATARMNETc6782fed88];module_param_array(
+DATARMNET2d482e7d9f,uint,NULL,(0xcb7+5769-0x221c));MODULE_PARM_DESC(
+DATARMNET2d482e7d9f,
+"\x4e\x75\x6d\x20\x66\x69\x6c\x74\x65\x72\x65\x64\x20\x66\x6c\x6f\x77\x73\x20\x70\x65\x72\x20\x63\x6f\x72\x65"
+);unsigned long long DATARMNET77240d48ee[DATARMNETc6782fed88];module_param_array
+(DATARMNET77240d48ee,ullong,NULL,(0xcb7+5769-0x221c));MODULE_PARM_DESC(
+DATARMNET77240d48ee,
+"\x53\x48\x53\x20\x73\x74\x61\x6d\x70\x20\x62\x79\x74\x65\x73\x20\x70\x65\x72\x20\x43\x50\x55"
+);unsigned long long DATARMNET77189ab85c[DATARMNETc6782fed88];module_param_array
+(DATARMNET77189ab85c,ullong,NULL,(0xcb7+5769-0x221c));MODULE_PARM_DESC(
+DATARMNET77189ab85c,
+"\x53\x48\x53\x20\x73\x74\x61\x6d\x70\x20\x74\x6f\x74\x61\x6c\x20\x70\x6b\x74\x73\x20\x70\x65\x72\x20\x43\x50\x55"
+);unsigned long long DATARMNET79263b1183[DATARMNETc6782fed88];module_param_array
+(DATARMNET79263b1183,ullong,NULL,(0xcb7+5769-0x221c));MODULE_PARM_DESC(
+DATARMNET79263b1183,
+"\x53\x48\x53\x20\x73\x74\x61\x6d\x70\x20\x65\x6e\x71\x20\x72\x61\x74\x65\x20\x70\x65\x72\x20\x43\x50\x55"
+);unsigned long long DATARMNET229d52b629[DATARMNETc6782fed88];module_param_array
+(DATARMNET229d52b629,ullong,NULL,(0xcb7+5769-0x221c));MODULE_PARM_DESC(
+DATARMNET229d52b629,
+"\x53\x48\x53\x20\x73\x74\x61\x6d\x70\x20\x70\x6b\x74\x20\x65\x6e\x71\x20\x72\x61\x74\x65\x20\x70\x65\x72\x20\x43\x50\x55"
+);unsigned long long DATARMNETd27ed7efea[DATARMNETc6782fed88];module_param_array
+(DATARMNETd27ed7efea,ullong,NULL,(0xcb7+5769-0x221c));MODULE_PARM_DESC(
+DATARMNETd27ed7efea,
+"\x53\x48\x53\x20\x6e\x77\x20\x73\x74\x61\x63\x6b\x20\x71\x75\x65\x75\x65\x20\x70\x72\x6f\x63\x65\x73\x73\x65\x64\x20\x64\x69\x66\x66"
+);unsigned long long DATARMNET377ecf13ca[DATARMNETc6782fed88];module_param_array
+(DATARMNET377ecf13ca,ullong,NULL,(0xcb7+5769-0x221c));MODULE_PARM_DESC(
+DATARMNET377ecf13ca,
+"\x53\x48\x53\x20\x6e\x77\x20\x71\x75\x65\x75\x65\x20\x70\x72\x6f\x63\x65\x73\x73\x65\x64\x20\x74\x6f\x74\x61\x6c"
+);unsigned long DATARMNETbf3b6fdfc8[DATARMNET2f9ea73326];module_param_array(
+DATARMNETbf3b6fdfc8,ulong,NULL,(0xcb7+5769-0x221c));MODULE_PARM_DESC(
+DATARMNETbf3b6fdfc8,
+"\x53\x48\x53\x20\x73\x74\x61\x6d\x70\x20\x68\x61\x73\x68\x20\x66\x6c\x6f\x77");
+unsigned long DATARMNET0fec241216[DATARMNET2f9ea73326];module_param_array(
+DATARMNET0fec241216,ulong,NULL,(0xcb7+5769-0x221c));MODULE_PARM_DESC(
+DATARMNET0fec241216,
+"\x53\x48\x53\x20\x73\x74\x61\x6d\x70\x20\x68\x61\x73\x68\x20\x74\x72\x61\x6e\x73\x70\x6f\x72\x74\x20\x70\x72\x6f\x74\x6f\x63\x6f\x6c"
+);unsigned long long DATARMNET9e5e8e4048[DATARMNET2f9ea73326];module_param_array
+(DATARMNET9e5e8e4048,ullong,NULL,(0xcb7+5769-0x221c));MODULE_PARM_DESC(
+DATARMNET9e5e8e4048,
+"\x53\x48\x53\x20\x73\x74\x61\x6d\x70\x20\x69\x6e\x61\x63\x74\x69\x76\x65\x20\x66\x6c\x6f\x77\x20\x74\x69\x6d\x65"
+);int DATARMNETdba344c809[DATARMNET2f9ea73326]={-(0xd26+209-0xdf6),-
+(0xd26+209-0xdf6),-(0xd26+209-0xdf6),-(0xd26+209-0xdf6),-(0xd26+209-0xdf6),-
+(0xd26+209-0xdf6),-(0xd26+209-0xdf6),-(0xd26+209-0xdf6),-(0xd26+209-0xdf6),-
+(0xd26+209-0xdf6),-(0xd26+209-0xdf6),-(0xd26+209-0xdf6),-(0xd26+209-0xdf6),-
+(0xd26+209-0xdf6),-(0xd26+209-0xdf6),-(0xd26+209-0xdf6)};module_param_array(
+DATARMNETdba344c809,int,NULL,(0xcb7+5769-0x221c));MODULE_PARM_DESC(
+DATARMNETdba344c809,
+"\x53\x48\x53\x20\x73\x74\x61\x6d\x70\x20\x66\x6c\x6f\x77\x20\x70\x72\x6f\x63\x65\x73\x73\x69\x6e\x67\x20\x43\x50\x55"
+);int DATARMNET99a934c43a[DATARMNET2f9ea73326]={-(0xd26+209-0xdf6),-
+(0xd26+209-0xdf6),-(0xd26+209-0xdf6),-(0xd26+209-0xdf6),-(0xd26+209-0xdf6),-
+(0xd26+209-0xdf6),-(0xd26+209-0xdf6),-(0xd26+209-0xdf6),-(0xd26+209-0xdf6),-
+(0xd26+209-0xdf6),-(0xd26+209-0xdf6),-(0xd26+209-0xdf6),-(0xd26+209-0xdf6),-
+(0xd26+209-0xdf6),-(0xd26+209-0xdf6),-(0xd26+209-0xdf6)};module_param_array(
+DATARMNET99a934c43a,int,NULL,(0xcb7+5769-0x221c));MODULE_PARM_DESC(
+DATARMNET99a934c43a,
+"\x53\x48\x53\x20\x73\x74\x61\x6d\x70\x20\x66\x6c\x6f\x77\x20\x70\x72\x6f\x63\x20\x43\x50\x55"
+);unsigned long long DATARMNET47956cbb0f[DATARMNET2f9ea73326];module_param_array
+(DATARMNET47956cbb0f,ullong,NULL,(0xcb7+5769-0x221c));MODULE_PARM_DESC(
+DATARMNET47956cbb0f,
+"\x53\x48\x53\x20\x73\x74\x61\x6d\x70\x20\x62\x79\x74\x65\x73\x20\x70\x65\x72\x20\x66\x6c\x6f\x77"
+);unsigned long long DATARMNET338c8e7a2b[DATARMNET2f9ea73326];module_param_array
+(DATARMNET338c8e7a2b,ullong,NULL,(0xcb7+5769-0x221c));MODULE_PARM_DESC(
+DATARMNET338c8e7a2b,
+"\x53\x48\x53\x20\x73\x74\x61\x6d\x70\x20\x74\x6f\x74\x61\x6c\x20\x70\x6b\x74\x73\x20\x70\x65\x72\x20\x66\x6c\x6f\x77"
+);unsigned long long DATARMNET4b1ae621cd[DATARMNET2f9ea73326];module_param_array
+(DATARMNET4b1ae621cd,ullong,NULL,(0xcb7+5769-0x221c));MODULE_PARM_DESC(
+DATARMNET4b1ae621cd,
+"\x53\x48\x53\x20\x73\x74\x61\x6d\x70\x20\x65\x6e\x71\x20\x72\x61\x74\x65\x20\x70\x65\x72\x20\x66\x6c\x6f\x77"
+);unsigned long long DATARMNETf5133a99c6[DATARMNET2f9ea73326];module_param_array
+(DATARMNETf5133a99c6,ullong,NULL,(0xcb7+5769-0x221c));MODULE_PARM_DESC(
+DATARMNETf5133a99c6,
+"\x53\x48\x53\x20\x73\x74\x61\x6d\x70\x20\x70\x6b\x74\x20\x65\x6e\x71\x20\x72\x61\x74\x65\x20\x70\x65\x72\x20\x66\x6c\x6f\x77"
+);unsigned long long DATARMNETc5d73c43e6[DATARMNET2f9ea73326];module_param_array
+(DATARMNETc5d73c43e6,ullong,NULL,(0xcb7+5769-0x221c));MODULE_PARM_DESC(
+DATARMNETc5d73c43e6,
+"\x53\x48\x53\x20\x53\x75\x67\x67\x65\x73\x74\x20\x53\x69\x6c\x76\x65\x72\x20\x74\x6f\x20\x47\x6f\x6c\x64"
+);unsigned long long DATARMNETf4aa8ec23f[DATARMNET2f9ea73326];module_param_array
+(DATARMNETf4aa8ec23f,ullong,NULL,(0xcb7+5769-0x221c));MODULE_PARM_DESC(
+DATARMNETf4aa8ec23f,
+"\x53\x48\x53\x20\x53\x75\x67\x67\x65\x73\x74\x20\x47\x6f\x6c\x64\x20\x74\x6f\x20\x53\x69\x6c\x76\x65\x72"
+);unsigned long long DATARMNET6d75219ffb[DATARMNET2f9ea73326];module_param_array
+(DATARMNET6d75219ffb,ullong,NULL,(0xcb7+5769-0x221c));MODULE_PARM_DESC(
+DATARMNET6d75219ffb,
+"\x53\x48\x53\x20\x53\x75\x67\x67\x65\x73\x74\x20\x47\x6f\x6c\x64\x20\x42\x61\x6c\x61\x6e\x63\x65"
+);unsigned long DATARMNETb7ddf3c5dd[DATARMNETeccb61ebc3];module_param_array(
+DATARMNETb7ddf3c5dd,ulong,NULL,(0xcb7+5769-0x221c));MODULE_PARM_DESC(
+DATARMNETb7ddf3c5dd,
+"\x72\x6d\x6e\x65\x74\x20\x73\x68\x73\x20\x73\x6b\x62\x20\x63\x6f\x72\x65\x20\x73\x77\x74\x69\x63\x68\x20\x74\x79\x70\x65"
+);unsigned long DATARMNET14ed771dfb[DATARMNET3cef75f6cd];module_param_array(
+DATARMNET14ed771dfb,ulong,NULL,(0xcb7+5769-0x221c));MODULE_PARM_DESC(
+DATARMNET14ed771dfb,
+"\x72\x6d\x6e\x65\x74\x20\x73\x68\x73\x20\x73\x6b\x62\x20\x66\x6c\x75\x73\x68\x20\x74\x72\x69\x67\x67\x65\x72\x20\x74\x79\x70\x65"
+);unsigned int DATARMNETea75c7b6f6 __read_mostly=30144000;module_param(
+DATARMNETea75c7b6f6,uint,(0xdb7+6665-0x261c));MODULE_PARM_DESC(
+DATARMNETea75c7b6f6,
+"\x4d\x61\x78\x69\x6d\x75\x6d\x20\x62\x79\x74\x65\x20\x6d\x6f\x64\x75\x6c\x65\x20\x77\x69\x6c\x6c\x20\x70\x61\x72\x6b"
+);unsigned int DATARMNET7d18c0bcf8 __read_mostly=24000;module_param(
+DATARMNET7d18c0bcf8,uint,(0xdb7+6665-0x261c));MODULE_PARM_DESC(
+DATARMNET7d18c0bcf8,
+"\x4d\x61\x78\x69\x6d\x75\x6d\x20\x70\x6b\x74\x73\x20\x6d\x6f\x64\x75\x6c\x65\x20\x77\x69\x6c\x6c\x20\x70\x61\x72\x6b"
+);unsigned int DATARMNET227d2ff866 __read_mostly=(0xf07+1573-0x14f5);
+module_param(DATARMNET227d2ff866,uint,(0xdb7+6665-0x261c));MODULE_PARM_DESC(
+DATARMNET227d2ff866,
+"\x4d\x61\x78\x20\x77\x61\x69\x74\x20\x6d\x6f\x64\x75\x6c\x65\x20\x77\x69\x6c\x6c\x20\x77\x61\x69\x74\x20\x64\x75\x72\x69\x6e\x67\x20\x6d\x6f\x76\x65\x20\x74\x6f\x20\x70\x65\x72\x66\x20\x63\x6f\x72\x65\x20\x69\x6e\x20\x6d\x73"
+);unsigned int DATARMNETa1ac2608b5 __read_mostly=(0xeb7+1130-0x130d);
+module_param(DATARMNETa1ac2608b5,uint,(0xdb7+6665-0x261c));MODULE_PARM_DESC(
+DATARMNETa1ac2608b5,
+"\x4d\x61\x78\x20\x69\x6e\x74\x65\x72\x76\x61\x6c\x20\x77\x65\x20\x73\x61\x6d\x70\x6c\x65\x20\x66\x6f\x72\x20\x69\x6e\x73\x74\x61\x6e\x74\x20\x62\x75\x72\x73\x74\x20\x70\x72\x69\x6f\x72\x69\x74\x69\x7a\x69\x6e\x67"
+);unsigned int DATARMNET12565c8f98 __read_mostly=(0xd26+209-0xdf6);module_param(
+DATARMNET12565c8f98,uint,(0xdb7+6665-0x261c));MODULE_PARM_DESC(
+DATARMNET12565c8f98,
+"\x43\x6f\x6e\x66\x69\x67\x75\x72\x61\x62\x6c\x65\x20\x6f\x70\x74\x69\x6f\x6e\x20\x74\x6f\x20\x65\x6e\x61\x62\x6c\x65\x20\x72\x78\x20\x72\x61\x74\x65\x20\x63\x70\x75\x20\x73\x77\x69\x74\x63\x68\x69\x6e\x67"
+);unsigned int DATARMNET365ddeca1c __read_mostly=(0xd26+209-0xdf6);module_param(
+DATARMNET365ddeca1c,uint,(0xdb7+6665-0x261c));MODULE_PARM_DESC(
+DATARMNET365ddeca1c,
+"\x4f\x70\x74\x69\x6f\x6e\x20\x74\x6f\x20\x65\x6e\x61\x62\x6c\x65\x20\x66\x61\x6c\x6c\x20\x62\x61\x63\x6b\x20\x6c\x69\x6d\x69\x74\x20\x66\x6f\x72\x20\x70\x61\x72\x6b\x69\x6e\x67"
+);unsigned int DATARMNETbc049ffc4c[DATARMNETc6782fed88]={(0xcf7+1705-0x101c),
+(0xf07+3937-0x1a1c),(0xf07+3937-0x1a1c),(0xf07+3937-0x1a1c),(0xf07+3937-0x1a1c),
+(0xf07+3937-0x1a1c),(0xf07+3937-0x1a1c),(0xf07+3937-0x1a1c)};module_param_array(
+DATARMNETbc049ffc4c,uint,NULL,(0xdb7+6665-0x261c));MODULE_PARM_DESC(
+DATARMNETbc049ffc4c,
+"\x4d\x61\x78\x20\x70\x6b\x74\x73\x20\x69\x6e\x20\x62\x61\x63\x6b\x6c\x6f\x67\x20\x70\x72\x69\x6f\x72\x69\x74\x69\x7a\x69\x6e\x67"
+);unsigned int DATARMNET65393dea13[DATARMNETc6782fed88]={(0x17b8+5768-0x2224),
+(0x17b8+5768-0x2224),(0x17b8+5768-0x2224),(0x17b8+5768-0x2224),
+(0x17b8+5768-0x2224),(0x17b8+5768-0x2224),(0x17b8+5768-0x2224),
+(0x17b8+5768-0x2224)};module_param_array(DATARMNET65393dea13,uint,NULL,
+(0xdb7+6665-0x261c));MODULE_PARM_DESC(DATARMNET65393dea13,
+"\x4d\x61\x78\x20\x70\x6b\x74\x73\x20\x69\x6e\x20\x61\x20\x62\x75\x72\x73\x74\x20\x62\x65\x66\x6f\x72\x65\x20\x70\x72\x69\x6f\x72\x69\x74\x69\x7a\x69\x6e\x67"
+);unsigned int DATARMNET4ac8af832c __read_mostly=(0xd03+244-0xdf1);module_param(
+DATARMNET4ac8af832c,uint,(0xdb7+6665-0x261c));MODULE_PARM_DESC(
+DATARMNET4ac8af832c,
+"\x4f\x70\x74\x69\x6f\x6e\x20\x74\x6f\x20\x63\x6f\x6e\x66\x69\x67\x75\x72\x65\x20\x66\x61\x6c\x6c\x20\x62\x61\x63\x6b\x20\x64\x75\x72\x61\x74\x69\x6f\x6e"
+);unsigned int DATARMNETa7909611da __read_mostly=(0xd26+209-0xdf6);module_param(
+DATARMNETa7909611da,uint,(0xdb7+6665-0x261c));MODULE_PARM_DESC(
+DATARMNETa7909611da,
+"\x53\x77\x69\x74\x63\x68\x20\x63\x6f\x72\x65\x20\x75\x70\x6f\x6e\x20\x68\x69\x74\x74\x69\x6e\x67\x20\x74\x68\x72\x65\x73\x68\x6f\x6c\x64"
+);unsigned int DATARMNET84413d1257[DATARMNETc6782fed88];module_param_array(
+DATARMNET84413d1257,uint,NULL,(0xdb7+6665-0x261c));MODULE_PARM_DESC(
+DATARMNET84413d1257,
+"\x4d\x61\x78\x20\x71\x75\x65\x75\x65\x20\x6c\x65\x6e\x67\x74\x68\x20\x73\x65\x65\x6e\x20\x6f\x66\x20\x65\x61\x63\x68\x20\x63\x6f\x72\x65"
+);unsigned int DATARMNET443cf5aaaf[DATARMNETc6782fed88];module_param_array(
+DATARMNET443cf5aaaf,uint,NULL,(0xdb7+6665-0x261c));MODULE_PARM_DESC(
+DATARMNET443cf5aaaf,
+"\x4f\x4f\x4f\x20\x63\x6f\x75\x6e\x74\x20\x66\x6f\x72\x20\x65\x61\x63\x68\x20\x63\x70\x75"
+);unsigned int DATARMNETd75e474598[DATARMNETc6782fed88];module_param_array(
+DATARMNETd75e474598,uint,NULL,(0xdb7+6665-0x261c));MODULE_PARM_DESC(
+DATARMNETd75e474598,
+"\x4d\x61\x78\x20\x63\x6f\x72\x65\x73\x75\x6d\x20\x73\x65\x65\x6e\x20\x6f\x66\x20\x65\x61\x63\x68\x20\x63\x6f\x72\x65"
+);unsigned int DATARMNET25c61a512c __read_mostly=(0xd18+223-0xdf4);module_param(
+DATARMNET25c61a512c,uint,(0xdb7+6665-0x261c));MODULE_PARM_DESC(
+DATARMNET25c61a512c,
+"\x53\x74\x61\x79\x69\x6e\x67\x20\x64\x75\x72\x61\x74\x69\x6f\x6e\x20\x66\x6f\x72\x20\x6e\x65\x74\x72\x78\x20\x73\x77\x69\x74\x63\x68"
+);unsigned int DATARMNET1ad396a890 __read_mostly=(0x25f8+1428-0x1804);
+module_param(DATARMNET1ad396a890,uint,(0xdb7+6665-0x261c));MODULE_PARM_DESC(
+DATARMNET1ad396a890,
+"\x4d\x61\x78\x20\x72\x6d\x6e\x65\x74\x20\x70\x72\x65\x2d\x62\x61\x63\x6b\x6c\x6f\x67"
+);unsigned int DATARMNET121c8bc82a __read_mostly=(0xd2d+202-0xdf7);module_param(
+DATARMNET121c8bc82a,uint,(0xdb7+6665-0x261c));MODULE_PARM_DESC(
+DATARMNET121c8bc82a,
+"\x72\x6d\x6e\x65\x74\x5f\x73\x68\x73\x5f\x72\x65\x73\x65\x72\x76\x65\x5f\x6d\x61\x73\x6b"
+);unsigned int DATARMNET756bdd424a __read_mostly;module_param(
+DATARMNET756bdd424a,uint,(0xdb7+6665-0x261c));MODULE_PARM_DESC(
+DATARMNET756bdd424a,
+"\x72\x6d\x6e\x65\x74\x5f\x73\x68\x73\x5f\x64\x65\x62\x75\x67");unsigned int 
+DATARMNET58b009b16b __read_mostly=(0xd26+209-0xdf6);module_param(
+DATARMNET58b009b16b,uint,(0xdb7+6665-0x261c));MODULE_PARM_DESC(
+DATARMNET58b009b16b,
+"\x45\x6e\x61\x62\x6c\x65\x20\x44\x69\x73\x61\x62\x6c\x65\x20\x73\x74\x61\x74\x73\x20\x63\x6f\x6c\x6c\x65\x63\x74\x69\x6f\x6e"
+);unsigned long DATARMNET930a441406[DATARMNET0d61981934];module_param_array(
+DATARMNET930a441406,ulong,NULL,(0xcb7+5769-0x221c));MODULE_PARM_DESC(
+DATARMNET930a441406,
+"\x72\x6d\x6e\x65\x74\x20\x73\x68\x73\x20\x6d\x69\x64\x20\x65\x72\x72\x6f\x72\x20\x74\x79\x70\x65"
+);unsigned long DATARMNET68d84e7b98[DATARMNETf3110711cb];module_param_array(
+DATARMNET68d84e7b98,ulong,NULL,(0xcb7+5769-0x221c));MODULE_PARM_DESC(
+DATARMNET68d84e7b98,
+"\x72\x6d\x6e\x65\x74\x20\x73\x68\x73\x20\x63\x72\x74\x69\x63\x61\x6c\x20\x65\x72\x72\x6f\x72\x20\x74\x79\x70\x65"
+);unsigned int DATARMNET3874292c18=DATARMNET2d0941aa7c;module_param(
+DATARMNET3874292c18,uint,(0xdb7+6665-0x261c));MODULE_PARM_DESC(
+DATARMNET3874292c18,
+"\x43\x75\x72\x72\x65\x6e\x74\x20\x4c\x4c\x20\x66\x6c\x6f\x77\x20\x63\x70\x75\x20"
+);unsigned int DATARMNETbb1a9dff8b=(0xd1f+216-0xdf5);module_param(
+DATARMNETbb1a9dff8b,uint,(0xdb7+6665-0x261c));MODULE_PARM_DESC(
+DATARMNETbb1a9dff8b,
+"\x43\x75\x72\x72\x65\x6e\x74\x20\x4c\x4c\x20\x70\x68\x79\x20\x63\x70\x75\x20");
+unsigned int DATARMNETd619186789=(0xd2d+202-0xdf7);module_param(
+DATARMNETd619186789,uint,(0xdb7+6665-0x261c));MODULE_PARM_DESC(
+DATARMNETd619186789,
+"\x72\x6d\x6e\x65\x74\x5f\x73\x68\x73\x5f\x57\x71\x20\x65\x78\x65\x63\x75\x74\x69\x6f\x6e\x20\x74\x69\x63\x6b\x20"
+);unsigned int DATARMNETaf95716235=(0xd2d+202-0xdf7);module_param(
+DATARMNETaf95716235,uint,(0xdb7+6665-0x261c));MODULE_PARM_DESC(
+DATARMNETaf95716235,
+"\x72\x6d\x6e\x65\x74\x20\x73\x68\x73\x20\x77\x71\x20\x70\x61\x75\x73\x65\x20\x63\x6f\x75\x6e\x74"
+);unsigned int DATARMNET7e039054c6=(0xd2d+202-0xdf7);module_param(
+DATARMNET7e039054c6,uint,(0xdb7+6665-0x261c));MODULE_PARM_DESC(
+DATARMNET7e039054c6,
+"\x72\x6d\x6e\x65\x74\x20\x73\x68\x73\x20\x77\x71\x20\x72\x65\x73\x74\x61\x72\x74\x20\x63\x6f\x75\x6e\x74"
+);unsigned int DATARMNET68dc14b50d=(0xd26+209-0xdf6);module_param(
+DATARMNET68dc14b50d,uint,(0xdb7+6665-0x261c));MODULE_PARM_DESC(
+DATARMNET68dc14b50d,
+"\x72\x65\x73\x65\x72\x76\x65\x20\x6d\x61\x73\x6b\x20\x66\x65\x61\x74\x75\x72\x65\x20\x66\x6c\x61\x67"
+);unsigned int rmnet_shs_no_sync_off=(0xd26+209-0xdf6);module_param(
+rmnet_shs_no_sync_off,uint,(0xdb7+6665-0x261c));MODULE_PARM_DESC(
+rmnet_shs_no_sync_off,
+"\x72\x6d\x6e\x65\x74\x20\x6e\x6f\x20\x73\x79\x6e\x63\x20\x66\x65\x61\x74\x75\x72\x65\x20\x74\x6f\x67\x67\x6c\x65"
+);unsigned int DATARMNET952c960091=(0xd2d+202-0xdf7);module_param(
+DATARMNET952c960091,uint,(0xdb7+6665-0x261c));MODULE_PARM_DESC(
+DATARMNET952c960091,
+"\x72\x6d\x6e\x65\x74\x20\x73\x68\x73\x20\x61\x73\x79\x6e\x63\x20\x70\x61\x63\x6b\x65\x74\x20\x63\x6f\x75\x6e\x74"
+);

+ 63 - 0
qcom/opensource/datarmnet-ext/shs/rmnet_shs_modules.h

@@ -0,0 +1,63 @@
+/* Copyright (c) 2020 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 and
+ * only version 2 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ */
+
+#include  "rmnet_shs_wq.h"
+#include  "rmnet_shs_common.h"
+#include  "rmnet_shs.h"
+#ifndef DATARMNET2883628e72
+#define DATARMNET2883628e72
+extern unsigned int DATARMNET1fc3ad67fd;extern unsigned long DATARMNETa804c0b904
+;extern unsigned int DATARMNETcab56af6d5 __read_mostly;extern unsigned long long
+ DATARMNET713717107f[DATARMNETc6782fed88];extern unsigned long long 
+DATARMNET4793ed48af[DATARMNETc6782fed88];extern unsigned int DATARMNET18f2ba4444
+[DATARMNETc6782fed88];extern unsigned int DATARMNET2d482e7d9f[
+DATARMNETc6782fed88];extern unsigned long long DATARMNET77240d48ee[
+DATARMNETc6782fed88];extern unsigned long long DATARMNET77189ab85c[
+DATARMNETc6782fed88];extern unsigned long long DATARMNET79263b1183[
+DATARMNETc6782fed88];extern unsigned long long DATARMNET229d52b629[
+DATARMNETc6782fed88];extern unsigned long long DATARMNETd27ed7efea[
+DATARMNETc6782fed88];extern unsigned long long DATARMNET377ecf13ca[
+DATARMNETc6782fed88];extern unsigned long DATARMNETbf3b6fdfc8[
+DATARMNET2f9ea73326];extern unsigned long DATARMNET0fec241216[
+DATARMNET2f9ea73326];extern unsigned long long DATARMNET9e5e8e4048[
+DATARMNET2f9ea73326];extern int DATARMNETdba344c809[DATARMNET2f9ea73326];extern 
+int DATARMNET99a934c43a[DATARMNET2f9ea73326];extern unsigned long long 
+DATARMNET47956cbb0f[DATARMNET2f9ea73326];extern unsigned long long 
+DATARMNET338c8e7a2b[DATARMNET2f9ea73326];extern unsigned long long 
+DATARMNET4b1ae621cd[DATARMNET2f9ea73326];extern unsigned long long 
+DATARMNETf5133a99c6[DATARMNET2f9ea73326];extern unsigned long long 
+DATARMNETc5d73c43e6[DATARMNET2f9ea73326];extern unsigned long long 
+DATARMNETf4aa8ec23f[DATARMNET2f9ea73326];extern unsigned long long 
+DATARMNET6d75219ffb[DATARMNET2f9ea73326];extern unsigned long 
+DATARMNETb7ddf3c5dd[DATARMNETeccb61ebc3];extern unsigned long 
+DATARMNET14ed771dfb[DATARMNET3cef75f6cd];extern unsigned int DATARMNETea75c7b6f6
+;extern unsigned int DATARMNET7d18c0bcf8;extern unsigned int DATARMNET227d2ff866
+;extern unsigned int DATARMNETa1ac2608b5;extern unsigned int DATARMNET12565c8f98
+;extern unsigned int DATARMNET365ddeca1c;extern unsigned int DATARMNETbc049ffc4c
+[DATARMNETc6782fed88];extern unsigned int DATARMNET65393dea13[
+DATARMNETc6782fed88];extern unsigned int DATARMNET4ac8af832c;extern unsigned int
+ DATARMNETa7909611da;extern unsigned int DATARMNET84413d1257[DATARMNETc6782fed88
+];extern unsigned int DATARMNET443cf5aaaf[DATARMNETc6782fed88];extern unsigned 
+int DATARMNETd75e474598[DATARMNETc6782fed88];extern unsigned int 
+DATARMNET25c61a512c;extern unsigned int DATARMNET1ad396a890;extern unsigned int 
+DATARMNET756bdd424a;extern unsigned int DATARMNET58b009b16b __read_mostly;extern
+ unsigned long DATARMNET68d84e7b98[DATARMNETf3110711cb];extern unsigned long 
+DATARMNET930a441406[DATARMNET0d61981934];extern unsigned int DATARMNET3874292c18
+;extern unsigned int DATARMNETbb1a9dff8b;extern unsigned int DATARMNET121c8bc82a
+;extern unsigned int DATARMNETd619186789;extern unsigned int DATARMNETaf95716235
+;extern unsigned int DATARMNET7e039054c6;extern unsigned int DATARMNET952c960091
+;extern unsigned int rmnet_shs_no_sync_off;extern unsigned int 
+DATARMNET68dc14b50d;
+#endif
+

+ 995 - 0
qcom/opensource/datarmnet-ext/shs/rmnet_shs_wq.c

@@ -0,0 +1,995 @@
+/* Copyright (c) 2018-2021 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2022-2024 Qualcomm Innovation Center, Inc. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 and
+ * only version 2 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ */
+
+#include "rmnet_shs.h"
+#include "rmnet_shs_wq_genl.h"
+#include "rmnet_shs_wq_mem.h"
+#include <linux/workqueue.h>
+#include <linux/list_sort.h>
+#include <net/sock.h>
+#include <linux/skbuff.h>
+#if IS_ENABLED(CONFIG_SCHED_WALT)
+#include <linux/sched/walt.h>
+#endif 
+#include "rmnet_shs_modules.h"
+#include "rmnet_shs_common.h"
+#include <linux/pm_wakeup.h>
+#include "rmnet_module.h"
+MODULE_LICENSE("\x47\x50\x4c\x20\x76\x32");
+#define DATARMNET59f7cb903f (0xc07+4861-0x1e3c)
+#define DATARMNET832dcfb5f8 (0xeb7+698-0x110d)
+#define DATARMNET53bef3c026 (0xd2d+202-0xdf7)
+#define DATARMNETc5db038c35 (0xd26+209-0xdf6)
+#define DATARMNET8853edc997 (0xd1f+216-0xdf5)
+#define DATARMNETbf1e2975c1 (0xd0a+237-0xdf2)
+#define DATARMNETea0e3bb99c (0xd03+244-0xdf1)
+#define DATARMNET81ec51f31c (0xef7+637-0x10f5)
+#define DATARMNET69be7dee16 15000
+#define DATARMNETc6f7fb02ea 34000
+#define DATARMNETbe271c415b ((!DATARMNET25c61a512c) ? (0xd1f+216-0xdf5) : \
+DATARMNET25c61a512c)
+#define DATARMNET2f8c32c8eb ((0xd1f+216-0xdf5))
+DEFINE_SPINLOCK(DATARMNETfbdbab2ef6);DEFINE_SPINLOCK(DATARMNETec2a4f5211);static
+ ktime_t DATARMNETb3a4036d6d;struct workqueue_struct*DATARMNETf141197982;static 
+struct DATARMNETa144e2bd00*DATARMNET9dc7755be5;static struct DATARMNETc8fdbf9c85
+ DATARMNET6cdd58e74c;struct list_head DATARMNET63229bfce5=LIST_HEAD_INIT(
+DATARMNET63229bfce5);struct list_head DATARMNET9825511866=LIST_HEAD_INIT(
+DATARMNET9825511866);static int DATARMNETe038d33545;struct list_head 
+DATARMNET30a3e83974=LIST_HEAD_INIT(DATARMNET30a3e83974);static int 
+DATARMNET882958a556(int cpu){
+#if IS_ENABLED(CONFIG_SCHED_WALT)
+cpumask_t DATARMNETaec9fb9581=walt_get_cpus_taken();return cpumask_test_cpu(cpu,
+&DATARMNETaec9fb9581);
+#else
+return(0xd2d+202-0xdf7);
+#endif 
+}static void DATARMNET6f7f8bf494(void){struct DATARMNET177911299b 
+DATARMNETecb92a9ca5;DATARMNET1d4b1eff85(&DATARMNETecb92a9ca5,DATARMNETecc0627c70
+.DATARMNET7d667e828e,DATARMNETecc0627c70.DATARMNET7d667e828e);
+DATARMNETb5d58adbe7(&DATARMNETecb92a9ca5);}static void DATARMNETdb368d4fbd(void)
+{
+#if IS_ENABLED(CONFIG_SCHED_WALT)
+cpumask_t DATARMNETaec9fb9581={CPU_BITS_NONE};int DATARMNETda889fd34d;unsigned 
+int DATARMNET9824ef7d49=(0xd2d+202-0xdf7);if(walt_get_cpus_in_state1(&
+DATARMNETaec9fb9581)<(0xd2d+202-0xdf7))return;for(DATARMNETda889fd34d=
+(0xd2d+202-0xdf7);DATARMNETda889fd34d<DATARMNETc6782fed88;DATARMNETda889fd34d++)
+{if(cpumask_test_cpu(DATARMNETda889fd34d,&DATARMNETaec9fb9581)){
+DATARMNET9824ef7d49|=(0xd26+209-0xdf6)<<DATARMNETda889fd34d;}}if((
+DATARMNET9824ef7d49&((0xd26+209-0xdf6)<<DATARMNETbf1e2975c1))&&(
+DATARMNET9824ef7d49&((0xd26+209-0xdf6)<<DATARMNETea0e3bb99c))){if(((
+DATARMNETecc0627c70.DATARMNETf510b48c29&((0xd26+209-0xdf6)<<DATARMNETbf1e2975c1)
+)&&(DATARMNETecc0627c70.DATARMNETf510b48c29&((0xd26+209-0xdf6)<<
+DATARMNETea0e3bb99c)))){DATARMNETecc0627c70.DATARMNET637025ccc1|=
+(0xd26+209-0xdf6)<<DATARMNETbf1e2975c1;DATARMNETecc0627c70.DATARMNET637025ccc1|=
+(0xd26+209-0xdf6)<<DATARMNETea0e3bb99c;DATARMNETecc0627c70.DATARMNETf510b48c29=(
+(0xbf7+4364-0x1c04)^DATARMNETecc0627c70.DATARMNET637025ccc1);DATARMNETecc0627c70
+.DATARMNET2f954f58f8=hweight_long(DATARMNETecc0627c70.DATARMNET637025ccc1);
+DATARMNET4793ed48af[DATARMNETbf1e2975c1]=DATARMNET9bc9e0cac3;DATARMNET4793ed48af
+[DATARMNETea0e3bb99c]=DATARMNET9bc9e0cac3;DATARMNET713717107f[
+DATARMNETbf1e2975c1]=DATARMNETb38cb72105;DATARMNET713717107f[DATARMNETea0e3bb99c
+]=DATARMNETb38cb72105;trace_rmnet_shs_wq_low(DATARMNETf783febe14,
+DATARMNET94906cea05,DATARMNETecc0627c70.DATARMNETf510b48c29,(0x16e8+787-0xc0c),
+(0x16e8+787-0xc0c),(0x16e8+787-0xc0c),NULL,NULL);DATARMNETb7ddf3c5dd[
+DATARMNET706cd2d052]++;}}else{if(((DATARMNETecc0627c70.DATARMNET637025ccc1&(
+(0xd26+209-0xdf6)<<DATARMNETbf1e2975c1))&&(DATARMNETecc0627c70.
+DATARMNET637025ccc1&((0xd26+209-0xdf6)<<DATARMNETea0e3bb99c)))){
+DATARMNETecc0627c70.DATARMNETf510b48c29|=(0xd26+209-0xdf6)<<DATARMNETbf1e2975c1;
+DATARMNETecc0627c70.DATARMNETf510b48c29|=(0xd26+209-0xdf6)<<DATARMNETea0e3bb99c;
+DATARMNETecc0627c70.DATARMNET637025ccc1=((0xbf7+4364-0x1c04)^DATARMNETecc0627c70
+.DATARMNETf510b48c29);DATARMNETecc0627c70.DATARMNET2f954f58f8=hweight_long(
+DATARMNETecc0627c70.DATARMNET637025ccc1);DATARMNET4793ed48af[DATARMNETbf1e2975c1
+]=DATARMNET22feab5726;DATARMNET4793ed48af[DATARMNETea0e3bb99c]=
+DATARMNET22feab5726;DATARMNET713717107f[DATARMNETbf1e2975c1]=DATARMNET243c638e7d
+;DATARMNET713717107f[DATARMNETea0e3bb99c]=DATARMNET243c638e7d;
+trace_rmnet_shs_wq_low(DATARMNETf783febe14,DATARMNET94906cea05,
+DATARMNETecc0627c70.DATARMNETf510b48c29,(0x16e8+787-0xc0c),(0x16e8+787-0xc0c),
+(0x16e8+787-0xc0c),NULL,NULL);DATARMNETb7ddf3c5dd[DATARMNETaac8ed4c2d]++;}}
+#endif 
+}static void DATARMNETae3b7a67f8(void){
+#if IS_ENABLED(CONFIG_SCHED_WALT)
+int DATARMNETda889fd34d=(0xd2d+202-0xdf7);int DATARMNETb9aecdfadd=
+(0xd2d+202-0xdf7);int DATARMNET054dda278c=(0xd2d+202-0xdf7);int 
+DATARMNET09cb196c21=(0xd26+209-0xdf6);int DATARMNETcfb5dc7296;cpumask_t 
+DATARMNETaec9fb9581=walt_get_cpus_taken();if(!DATARMNET68dc14b50d)return;for(
+DATARMNETda889fd34d=(0xd2d+202-0xdf7);DATARMNETda889fd34d<DATARMNET8853edc997;
+DATARMNETda889fd34d++){if(cpumask_test_cpu(DATARMNETda889fd34d,&
+DATARMNETaec9fb9581)){DATARMNETb9aecdfadd++;DATARMNET054dda278c|=
+(0xd26+209-0xdf6)<<DATARMNETda889fd34d;}if(DATARMNETb9aecdfadd>=
+DATARMNET8853edc997){DATARMNET68d84e7b98[DATARMNETdfffcec2c8]++;break;}}
+DATARMNET121c8bc82a=DATARMNET054dda278c;if(((0xd26+209-0xdf6)<<
+DATARMNETecc0627c70.DATARMNET7d667e828e)&DATARMNET121c8bc82a){
+DATARMNETcfb5dc7296=DATARMNET362c14e98b(DATARMNETecc0627c70.map_mask&
+DATARMNETbc3c416b77&~DATARMNETecc0627c70.DATARMNETba3f7a11ef&~
+DATARMNET121c8bc82a);if(DATARMNETcfb5dc7296>(0xd2d+202-0xdf7)){
+DATARMNET09cb196c21=DATARMNETcfb5dc7296;DATARMNETecc0627c70.DATARMNET5c24e1df05=
+DATARMNET09cb196c21;rcu_read_lock();RCU_INIT_POINTER(rmnet_shs_switch,
+DATARMNET756778f14f);rcu_read_unlock();}}
+#endif 
+}int DATARMNETdc7bead533(unsigned DATARMNET42a992465f,unsigned 
+DATARMNET435f2b5517){struct DATARMNET228056d4b7*DATARMNETf632b170b1;struct 
+DATARMNETc8fdbf9c85*DATARMNET7bea4a06a6=&DATARMNET6cdd58e74c;if(
+DATARMNET42a992465f>=DATARMNETc6782fed88){DATARMNET68d84e7b98[
+DATARMNET54b67b8a75]++;return(0xd2d+202-0xdf7);}DATARMNETf632b170b1=&
+DATARMNET7bea4a06a6->DATARMNET73464778dc[DATARMNET42a992465f];return 
+DATARMNETf632b170b1->DATARMNET324c1a8f98>DATARMNET435f2b5517;}void 
+DATARMNETa6e92c3315(struct DATARMNET6c78e47d24*DATARMNETd2a694d52a){
+DATARMNETd2a694d52a->DATARMNETadd51beef4=(0xd2d+202-0xdf7);DATARMNETd2a694d52a->
+DATARMNET68714ac92c=(0xd2d+202-0xdf7);DATARMNETd2a694d52a->DATARMNET63b1a086d5=
+NULL;DATARMNETd2a694d52a->DATARMNET42ceaf5cc2=(0xd2d+202-0xdf7);
+DATARMNETd2a694d52a->DATARMNET4b4a76b094=(0xd2d+202-0xdf7);DATARMNETd2a694d52a->
+DATARMNETa7352711af=(0xd2d+202-0xdf7);DATARMNETd2a694d52a->rx_bytes=
+(0xd2d+202-0xdf7);DATARMNETd2a694d52a->DATARMNET324c1a8f98=(0xd2d+202-0xdf7);
+DATARMNETd2a694d52a->DATARMNETbb80fccd97=(0xd2d+202-0xdf7);DATARMNETd2a694d52a->
+DATARMNET0d682bcb29=(0xd2d+202-0xdf7);DATARMNETd2a694d52a->DATARMNET20e8fc9db8=
+(0xd2d+202-0xdf7);DATARMNETd2a694d52a->DATARMNETd34f4b12cd=(0xd2d+202-0xdf7);
+DATARMNETd2a694d52a->DATARMNET96e0dea53e=(0xd2d+202-0xdf7);DATARMNETd2a694d52a->
+DATARMNET3ecedac168=(0xd2d+202-0xdf7);DATARMNETd2a694d52a->DATARMNETce5f56eab9=
+(0xd2d+202-0xdf7);DATARMNETd2a694d52a->DATARMNET6edbc8b649=(0xd2d+202-0xdf7);
+DATARMNETd2a694d52a->DATARMNET77b978dd84=(0xd2d+202-0xdf7);DATARMNETd2a694d52a->
+DATARMNET3b7421773f=(0xd2d+202-0xdf7);DATARMNETd2a694d52a->DATARMNET29c6349349=
+(0xd2d+202-0xdf7);DATARMNETd2a694d52a->DATARMNETde6a309f37=(0xd2d+202-0xdf7);
+DATARMNETd2a694d52a->DATARMNET9fb369ce5f=(0xd2d+202-0xdf7);DATARMNETd2a694d52a->
+DATARMNET17f2abdf03=(0xd2d+202-0xdf7);DATARMNETd2a694d52a->DATARMNET399c840115=
+(0xd2d+202-0xdf7);DATARMNETd2a694d52a->DATARMNET1a1d89d417=(0xd2d+202-0xdf7);
+DATARMNETd2a694d52a->DATARMNETb932033f50=(0xd2d+202-0xdf7);DATARMNETd2a694d52a->
+hash=(0xd2d+202-0xdf7);DATARMNETd2a694d52a->DATARMNET6e1a4eaf09=
+(0xd2d+202-0xdf7);DATARMNETd2a694d52a->DATARMNET7c894c2f8f=(0xd2d+202-0xdf7);
+DATARMNETd2a694d52a->DATARMNET87636d0152=(0xd2d+202-0xdf7);DATARMNETd2a694d52a->
+DATARMNET1e9d25d9ff=(0xd2d+202-0xdf7);DATARMNETd2a694d52a->DATARMNETb5f5519502=(
+-(0xd26+209-0xdf6));DATARMNETd2a694d52a->bif=(0xd2d+202-0xdf7);
+DATARMNETd2a694d52a->ack_thresh=(0xd2d+202-0xdf7);INIT_LIST_HEAD(&
+DATARMNETd2a694d52a->DATARMNET742867e97a);DATARMNETd2a694d52a->
+DATARMNET8a4e1d5aaa=(0xd2d+202-0xdf7);DATARMNETd2a694d52a->DATARMNET0dc393a345=
+(0xd2d+202-0xdf7);trace_rmnet_shs_wq_low(DATARMNET238d08f0df,DATARMNETb43d929c3b
+,DATARMNETd2a694d52a->DATARMNET0bfc2b2c85,(0x16e8+787-0xc0c),(0x16e8+787-0xc0c),
+(0x16e8+787-0xc0c),DATARMNETd2a694d52a,NULL);}void DATARMNETf5b8fce55d(u8 
+DATARMNETe9030b7691,u8 DATARMNET1f19f4b029){struct DATARMNET6c78e47d24*
+DATARMNETd2a694d52a=NULL;while(DATARMNETe9030b7691>(0xd2d+202-0xdf7)){
+DATARMNETd2a694d52a=kzalloc(sizeof(*DATARMNETd2a694d52a),GFP_ATOMIC);if(
+DATARMNETd2a694d52a){DATARMNETd2a694d52a->DATARMNET0bfc2b2c85=
+DATARMNET1f19f4b029;DATARMNETa6e92c3315(DATARMNETd2a694d52a);INIT_LIST_HEAD(&
+DATARMNETd2a694d52a->DATARMNET6de26f0feb);INIT_LIST_HEAD(&DATARMNETd2a694d52a->
+DATARMNET742867e97a);DATARMNET36e5e526fa(DATARMNETd2a694d52a);}else{
+DATARMNET68d84e7b98[DATARMNET1828d69e96]++;}DATARMNETd2a694d52a=NULL;
+DATARMNETe9030b7691--;}}struct DATARMNET6c78e47d24*DATARMNETb062995420(void){
+struct DATARMNET6c78e47d24*DATARMNETd2a694d52a=NULL;struct DATARMNET6c78e47d24*
+DATARMNETe70783182f=NULL;rcu_read_lock();spin_lock_bh(&DATARMNETfbdbab2ef6);
+list_for_each_entry_rcu(DATARMNETd2a694d52a,&DATARMNET9825511866,
+DATARMNET6de26f0feb){if(DATARMNETd2a694d52a->DATARMNET0dc393a345==
+(0xd2d+202-0xdf7)){DATARMNETe70783182f=DATARMNETd2a694d52a;DATARMNETe70783182f->
+DATARMNET0dc393a345=(0xd26+209-0xdf6);DATARMNETe70783182f->DATARMNET8a4e1d5aaa=
+(0xd26+209-0xdf6);break;}}spin_unlock_bh(&DATARMNETfbdbab2ef6);rcu_read_unlock()
+;if(DATARMNETe70783182f){trace_rmnet_shs_wq_low(DATARMNET238d08f0df,
+DATARMNET8d783e2a07,DATARMNETd2a694d52a->DATARMNET0bfc2b2c85,(0x16e8+787-0xc0c),
+(0x16e8+787-0xc0c),(0x16e8+787-0xc0c),DATARMNETd2a694d52a,NULL);return 
+DATARMNETe70783182f;}DATARMNETe70783182f=kzalloc(sizeof(*DATARMNETd2a694d52a),
+GFP_ATOMIC);if(!DATARMNETe70783182f){DATARMNET68d84e7b98[DATARMNET1828d69e96]++;
+return NULL;}DATARMNETa6e92c3315(DATARMNETe70783182f);DATARMNETe70783182f->
+DATARMNET0bfc2b2c85=(0xd2d+202-0xdf7);DATARMNETe70783182f->DATARMNET0dc393a345=
+(0xd26+209-0xdf6);DATARMNETe70783182f->DATARMNET8a4e1d5aaa=(0xd26+209-0xdf6);
+INIT_LIST_HEAD(&DATARMNETe70783182f->DATARMNET6de26f0feb);INIT_LIST_HEAD(&
+DATARMNETe70783182f->DATARMNET742867e97a);trace_rmnet_shs_wq_low(
+DATARMNET238d08f0df,DATARMNET4b15fcda7c,DATARMNETe70783182f->DATARMNET0bfc2b2c85
+,(0x16e8+787-0xc0c),(0x16e8+787-0xc0c),(0x16e8+787-0xc0c),DATARMNETe70783182f,
+NULL);DATARMNET36e5e526fa(DATARMNETe70783182f);return DATARMNETe70783182f;}void 
+DATARMNET350f55bfca(struct DATARMNET63d7680df2*node_p){struct timespec64 time;if
+(!node_p){DATARMNET68d84e7b98[DATARMNETac729c3d29]++;return;}node_p->
+DATARMNET341ea38662=DATARMNETb062995420();if(node_p->DATARMNET341ea38662!=NULL){
+(void)ktime_get_boottime_ts64(&time);node_p->DATARMNET341ea38662->hash=node_p->
+hash;node_p->DATARMNET341ea38662->DATARMNET1e9d25d9ff=node_p->
+DATARMNET1e9d25d9ff;node_p->DATARMNET341ea38662->DATARMNET7c894c2f8f=node_p->
+map_cpu;node_p->DATARMNET341ea38662->DATARMNET6e1a4eaf09=node_p->map_cpu;node_p
+->DATARMNET341ea38662->DATARMNET87636d0152=(0xd2d+202-0xdf7);if(
+DATARMNETc252c204a8&&node_p->DATARMNET341ea38662->DATARMNET1e9d25d9ff==
+IPPROTO_TCP)node_p->DATARMNET341ea38662->DATARMNET87636d0152=DATARMNET2f8c32c8eb
+;node_p->DATARMNET341ea38662->DATARMNET63b1a086d5=node_p;node_p->
+DATARMNET341ea38662->DATARMNETadd51beef4=DATARMNETe6671dbf38(time.tv_sec)+time.
+tv_nsec;node_p->DATARMNET341ea38662->DATARMNET68714ac92c=DATARMNETe6671dbf38(
+time.tv_sec)+time.tv_nsec;}trace_rmnet_shs_wq_high(DATARMNET238d08f0df,
+DATARMNET31d8e00b80,(0x16e8+787-0xc0c),(0x16e8+787-0xc0c),(0x16e8+787-0xc0c),
+(0x16e8+787-0xc0c),node_p,node_p->DATARMNET341ea38662);}static u64 
+DATARMNETf553c2afd2(struct DATARMNET6c78e47d24*DATARMNETd2a694d52a){u64 
+DATARMNET253a9fc708,DATARMNET950c035603;u16 DATARMNETab4cf0ad84,
+DATARMNET0c72af011b;if(!DATARMNETd2a694d52a){DATARMNET68d84e7b98[
+DATARMNETac729c3d29]++;return(0xd2d+202-0xdf7);}if(DATARMNET362b15f941(
+DATARMNETd2a694d52a->DATARMNET7c894c2f8f)){DATARMNETab4cf0ad84=
+DATARMNETcab56af6d5;DATARMNET0c72af011b=(0xeb7+698-0x110d)-DATARMNETcab56af6d5;}
+else{DATARMNET0c72af011b=DATARMNETcab56af6d5;DATARMNETab4cf0ad84=
+(0xeb7+698-0x110d)-DATARMNETcab56af6d5;}if(DATARMNETd2a694d52a->
+DATARMNET6c2816c16a==(0xd2d+202-0xdf7)){DATARMNET253a9fc708=DATARMNETd2a694d52a
+->DATARMNET324c1a8f98;}else{DATARMNET950c035603=(DATARMNETd2a694d52a->
+DATARMNET6c2816c16a+DATARMNETd2a694d52a->DATARMNET253a9fc708)/(0xd1f+216-0xdf5);
+DATARMNET253a9fc708=(((DATARMNETab4cf0ad84*DATARMNETd2a694d52a->
+DATARMNET324c1a8f98)+(DATARMNET0c72af011b*DATARMNET950c035603))/(
+DATARMNETab4cf0ad84+DATARMNET0c72af011b));}return DATARMNET253a9fc708;}static 
+u64 DATARMNET183789850d(u16 DATARMNET42a992465f){u64 DATARMNET253a9fc708,
+DATARMNET950c035603;u16 DATARMNETab4cf0ad84,DATARMNET0c72af011b;struct 
+DATARMNET228056d4b7*DATARMNETf632b170b1;struct DATARMNETc8fdbf9c85*
+DATARMNET7bea4a06a6=&DATARMNET6cdd58e74c;if(DATARMNET42a992465f>=
+DATARMNETc6782fed88){DATARMNET68d84e7b98[DATARMNET54b67b8a75]++;return
+(0xd2d+202-0xdf7);}DATARMNETf632b170b1=&DATARMNET7bea4a06a6->DATARMNET73464778dc
+[DATARMNET42a992465f];if(DATARMNET362b15f941(DATARMNET42a992465f)){
+DATARMNETab4cf0ad84=DATARMNETcab56af6d5;DATARMNET0c72af011b=(0xeb7+698-0x110d)-
+DATARMNETcab56af6d5;}else{DATARMNET0c72af011b=DATARMNETcab56af6d5;
+DATARMNETab4cf0ad84=(0xeb7+698-0x110d)-DATARMNETcab56af6d5;}if(
+DATARMNETf632b170b1->DATARMNET27c3925eff==(0xd2d+202-0xdf7)){DATARMNET253a9fc708
+=DATARMNETf632b170b1->DATARMNET253a9fc708;}else{DATARMNET950c035603=(
+DATARMNETf632b170b1->DATARMNET27c3925eff+DATARMNETf632b170b1->
+DATARMNET253a9fc708)/(0xd1f+216-0xdf5);DATARMNET253a9fc708=(((
+DATARMNETab4cf0ad84*DATARMNETf632b170b1->DATARMNET324c1a8f98)+(
+DATARMNET0c72af011b*DATARMNET950c035603))/(DATARMNETab4cf0ad84+
+DATARMNET0c72af011b));}trace_rmnet_shs_wq_high(DATARMNET39a68a0eba,
+DATARMNETde65aa00a6,DATARMNET42a992465f,DATARMNETf632b170b1->DATARMNET324c1a8f98
+,DATARMNETf632b170b1->DATARMNET27c3925eff,DATARMNET253a9fc708,NULL,NULL);return 
+DATARMNET253a9fc708;}void DATARMNET0aa47ce397(struct DATARMNET6c78e47d24*
+DATARMNET7b2c1bbf38){struct DATARMNET63d7680df2*node_p=NULL;struct 
+DATARMNET9b44b71ee9*ep=NULL;if(!DATARMNET7b2c1bbf38){DATARMNET68d84e7b98[
+DATARMNETac729c3d29]++;return;}node_p=DATARMNET7b2c1bbf38->DATARMNET63b1a086d5;
+list_for_each_entry(ep,&DATARMNET30a3e83974,DATARMNET0763436b8d){if(node_p->dev
+==ep->ep){DATARMNET7b2c1bbf38->DATARMNET9fb369ce5f=ep->DATARMNET9fb369ce5f;
+DATARMNET7b2c1bbf38->DATARMNET399c840115=ep->DATARMNET24a91635db;
+DATARMNET7b2c1bbf38->DATARMNET1a1d89d417=ep->DATARMNET1a1d89d417;if(
+DATARMNET7b2c1bbf38->DATARMNET1e9d25d9ff==IPPROTO_TCP){rm_err(
+"\x53\x48\x53\x5f\x54\x43\x50\x3a\x20\x61\x64\x64\x69\x6e\x67\x20\x54\x43\x50\x20\x62\x70\x73\x20\x25\x6c\x75\x20\x74\x6f\x20\x65\x70\x5f\x74\x6f\x74\x61\x6c\x20\x25\x6c\x75\x20\x65\x70\x20\x6e\x61\x6d\x65\x20\x25\x73"
+,DATARMNET7b2c1bbf38->DATARMNETbb80fccd97,ep->DATARMNET4eb77c78e6,node_p->dev->
+name);ep->DATARMNET4eb77c78e6+=DATARMNET7b2c1bbf38->DATARMNETbb80fccd97;}else if
+(DATARMNET7b2c1bbf38->DATARMNET1e9d25d9ff==IPPROTO_UDP){rm_err(
+"\x53\x48\x53\x5f\x55\x44\x50\x3a\x20\x61\x64\x64\x69\x6e\x67\x20\x55\x44\x50\x20\x72\x78\x5f\x62\x70\x73\x20\x25\x6c\x75\x20\x74\x6f\x20\x65\x70\x5f\x74\x6f\x74\x61\x6c\x20\x25\x6c\x75\x20\x65\x70\x20\x6e\x61\x6d\x65\x20\x25\x73"
+,DATARMNET7b2c1bbf38->DATARMNETbb80fccd97,ep->DATARMNET257fc4b2d4,node_p->dev->
+name);ep->DATARMNET257fc4b2d4+=DATARMNET7b2c1bbf38->DATARMNETbb80fccd97;}break;}
+}trace_rmnet_shs_wq_low(DATARMNET394831f22a,DATARMNET35902389b3,
+DATARMNET7b2c1bbf38->DATARMNET9fb369ce5f,DATARMNET7b2c1bbf38->
+DATARMNET399c840115,DATARMNET7b2c1bbf38->DATARMNET1a1d89d417,(0x16e8+787-0xc0c),
+DATARMNET7b2c1bbf38,node_p);}void DATARMNETc55315279b(struct DATARMNET6c78e47d24
+*DATARMNETdbe9f3dbe3,struct DATARMNET63d7680df2*node_p){int idx=
+DATARMNETe038d33545;if(!DATARMNET58b009b16b)return;if(!DATARMNETdbe9f3dbe3||!
+node_p){DATARMNET68d84e7b98[DATARMNETac729c3d29]++;return;}if(
+DATARMNETdbe9f3dbe3->DATARMNETb5f5519502<(0xd2d+202-0xdf7)){idx=idx%
+DATARMNET2f9ea73326;DATARMNETdbe9f3dbe3->DATARMNETb5f5519502=idx;
+DATARMNETe038d33545++;}DATARMNETbf3b6fdfc8[DATARMNETdbe9f3dbe3->
+DATARMNETb5f5519502]=DATARMNETdbe9f3dbe3->hash;DATARMNET0fec241216[
+DATARMNETdbe9f3dbe3->DATARMNETb5f5519502]=node_p->DATARMNET1e9d25d9ff;
+DATARMNET9e5e8e4048[DATARMNETdbe9f3dbe3->DATARMNETb5f5519502]=
+DATARMNET36cfa76181(DATARMNETdbe9f3dbe3->DATARMNET42ceaf5cc2);
+DATARMNET4b1ae621cd[DATARMNETdbe9f3dbe3->DATARMNETb5f5519502]=
+DATARMNETdbe9f3dbe3->DATARMNETbb80fccd97;DATARMNETf5133a99c6[DATARMNETdbe9f3dbe3
+->DATARMNETb5f5519502]=DATARMNETdbe9f3dbe3->DATARMNET324c1a8f98;
+DATARMNET47956cbb0f[DATARMNETdbe9f3dbe3->DATARMNETb5f5519502]=
+DATARMNETdbe9f3dbe3->rx_bytes;DATARMNET338c8e7a2b[DATARMNETdbe9f3dbe3->
+DATARMNETb5f5519502]=DATARMNETdbe9f3dbe3->DATARMNET4b4a76b094;
+DATARMNETdba344c809[DATARMNETdbe9f3dbe3->DATARMNETb5f5519502]=
+DATARMNETdbe9f3dbe3->DATARMNET7c894c2f8f;DATARMNET99a934c43a[DATARMNETdbe9f3dbe3
+->DATARMNETb5f5519502]=DATARMNETdbe9f3dbe3->DATARMNET6e1a4eaf09;
+DATARMNETc5d73c43e6[DATARMNETdbe9f3dbe3->DATARMNETb5f5519502]=
+DATARMNETdbe9f3dbe3->DATARMNET61e1ee0e95[DATARMNETed5a873a00];
+DATARMNETf4aa8ec23f[DATARMNETdbe9f3dbe3->DATARMNETb5f5519502]=
+DATARMNETdbe9f3dbe3->DATARMNET61e1ee0e95[DATARMNETd7a3f55a51];
+DATARMNET6d75219ffb[DATARMNETdbe9f3dbe3->DATARMNETb5f5519502]=
+DATARMNETdbe9f3dbe3->DATARMNET61e1ee0e95[DATARMNETefe8657028];}u8 
+DATARMNETd245b71b63(struct DATARMNET6c78e47d24*DATARMNETdbe9f3dbe3,struct 
+DATARMNET63d7680df2*node_p){if(!DATARMNETdbe9f3dbe3||!node_p){
+DATARMNET68d84e7b98[DATARMNETac729c3d29]++;return(0xd2d+202-0xdf7);}if(node_p->
+DATARMNET11930c5df8==DATARMNETdbe9f3dbe3->DATARMNET4b4a76b094)return
+(0xd2d+202-0xdf7);return(0xd26+209-0xdf6);}void DATARMNETb49b4f6385(struct 
+DATARMNET6c78e47d24*DATARMNETdbe9f3dbe3,struct DATARMNET63d7680df2*node_p){
+ktime_t DATARMNET96f21fddc1;if(!DATARMNETdbe9f3dbe3||!node_p){
+DATARMNET68d84e7b98[DATARMNETac729c3d29]++;return;}DATARMNET96f21fddc1=
+DATARMNETb3a4036d6d-DATARMNETdbe9f3dbe3->DATARMNETadd51beef4;DATARMNETdbe9f3dbe3
+->DATARMNET42ceaf5cc2=DATARMNET96f21fddc1;trace_rmnet_shs_wq_low(
+DATARMNET394831f22a,DATARMNET08cee5b48c,DATARMNETdbe9f3dbe3->hash,
+DATARMNET96f21fddc1,(0x16e8+787-0xc0c),(0x16e8+787-0xc0c),DATARMNETdbe9f3dbe3,
+NULL);}void DATARMNET9a7769cf21(struct DATARMNET6c78e47d24*DATARMNETdbe9f3dbe3){
+ktime_t DATARMNET96f21fddc1;u64 DATARMNETee9f72f13f,DATARMNET539a572f34,
+DATARMNET33b006454e;struct DATARMNET63d7680df2*node_p;if(!DATARMNETdbe9f3dbe3){
+DATARMNET68d84e7b98[DATARMNETac729c3d29]++;return;}node_p=DATARMNETdbe9f3dbe3->
+DATARMNET63b1a086d5;if(!DATARMNETd245b71b63(DATARMNETdbe9f3dbe3,node_p)){
+DATARMNETdbe9f3dbe3->DATARMNET324c1a8f98=(0xd2d+202-0xdf7);DATARMNETdbe9f3dbe3->
+DATARMNET253a9fc708=(0xd2d+202-0xdf7);DATARMNETdbe9f3dbe3->DATARMNETbb80fccd97=
+(0xd2d+202-0xdf7);DATARMNETb49b4f6385(DATARMNETdbe9f3dbe3,node_p);
+DATARMNETc55315279b(DATARMNETdbe9f3dbe3,node_p);return;}trace_rmnet_shs_wq_low(
+DATARMNET394831f22a,DATARMNET91e905574d,DATARMNETdbe9f3dbe3->hash,
+(0x16e8+787-0xc0c),DATARMNETdbe9f3dbe3->DATARMNET324c1a8f98,DATARMNETdbe9f3dbe3
+->DATARMNETbb80fccd97,DATARMNETdbe9f3dbe3,NULL);DATARMNET0aa47ce397(
+DATARMNETdbe9f3dbe3);DATARMNETdbe9f3dbe3->DATARMNET42ceaf5cc2=(0xd2d+202-0xdf7);
+DATARMNETdbe9f3dbe3->DATARMNET68714ac92c=node_p->DATARMNET341ea38662->
+DATARMNETadd51beef4;DATARMNETdbe9f3dbe3->DATARMNET6edbc8b649=node_p->
+DATARMNET341ea38662->DATARMNET4b4a76b094;DATARMNETdbe9f3dbe3->
+DATARMNET3b7421773f=node_p->DATARMNET341ea38662->DATARMNET77b978dd84;
+DATARMNETdbe9f3dbe3->DATARMNET4025a4ec90=node_p->DATARMNET341ea38662->
+DATARMNETa7352711af;DATARMNETdbe9f3dbe3->DATARMNETd34f4b12cd=node_p->
+DATARMNET341ea38662->DATARMNET3ecedac168;DATARMNETdbe9f3dbe3->
+DATARMNET96e0dea53e=node_p->DATARMNET341ea38662->DATARMNETce5f56eab9;
+DATARMNETdbe9f3dbe3->DATARMNETde6a309f37=node_p->DATARMNET341ea38662->rx_bytes;
+DATARMNETdbe9f3dbe3->DATARMNETadd51beef4=DATARMNETb3a4036d6d;DATARMNETdbe9f3dbe3
+->DATARMNET4b4a76b094=node_p->DATARMNET11930c5df8;DATARMNETdbe9f3dbe3->
+DATARMNET77b978dd84=node_p->DATARMNET1743c92e66;DATARMNETdbe9f3dbe3->
+DATARMNET29c6349349=DATARMNETdbe9f3dbe3->DATARMNET77b978dd84!=
+DATARMNETdbe9f3dbe3->DATARMNET3b7421773f;DATARMNETdbe9f3dbe3->
+DATARMNETa7352711af=node_p->DATARMNETa8940e4a7b;DATARMNETdbe9f3dbe3->
+DATARMNET3ecedac168=node_p->DATARMNET3ecedac168;DATARMNETdbe9f3dbe3->
+DATARMNETce5f56eab9=node_p->DATARMNETce5f56eab9;DATARMNETdbe9f3dbe3->rx_bytes=
+node_p->DATARMNET2594c418db;DATARMNET96f21fddc1=(DATARMNETdbe9f3dbe3->
+DATARMNETadd51beef4-DATARMNETdbe9f3dbe3->DATARMNET68714ac92c);
+DATARMNET96f21fddc1=(DATARMNET96f21fddc1>DATARMNETac617c8dce(DATARMNET1fc3ad67fd
+)&&DATARMNET1fc3ad67fd>(0xd2d+202-0xdf7))?DATARMNET96f21fddc1:
+DATARMNETac617c8dce((0xeb7+698-0x110d));DATARMNETee9f72f13f=DATARMNETdbe9f3dbe3
+->DATARMNET4b4a76b094-DATARMNETdbe9f3dbe3->DATARMNET6edbc8b649;
+DATARMNET539a572f34=DATARMNETdbe9f3dbe3->DATARMNETa7352711af-DATARMNETdbe9f3dbe3
+->DATARMNET4025a4ec90;DATARMNET33b006454e=DATARMNETdbe9f3dbe3->rx_bytes-
+DATARMNETdbe9f3dbe3->DATARMNETde6a309f37;DATARMNETd2da2e8466(
+"\x53\x48\x53\x5f\x53\x45\x47\x53\x3a\x20\x68\x61\x73\x68\x20\x30\x78\x25\x78\x20\x63\x6f\x61\x6c\x20\x73\x6b\x62\x20\x3d\x20\x25\x6c\x75\x20\x7c\x20\x6c\x61\x73\x74\x20\x63\x6f\x61\x6c\x20\x73\x6b\x62\x20\x3d\x20\x25\x6c\x75\x20\x7c\x20\x72\x78\x20\x73\x6b\x62\x20\x3d\x20\x25\x6c\x75\x20\x7c\x20\x6c\x61\x73\x74\x20\x72\x78\x20\x73\x6b\x62\x20\x25\x6c\x75"
+,DATARMNETdbe9f3dbe3->hash,DATARMNETdbe9f3dbe3->DATARMNETa7352711af,
+DATARMNETdbe9f3dbe3->DATARMNET4025a4ec90,DATARMNETdbe9f3dbe3->
+DATARMNET4b4a76b094,DATARMNETdbe9f3dbe3->DATARMNET6edbc8b649);
+DATARMNETdbe9f3dbe3->DATARMNET324c1a8f98=DATARMNET855e9d7062(DATARMNETee9f72f13f
+)/(DATARMNET96f21fddc1);DATARMNETdbe9f3dbe3->DATARMNETbb80fccd97=
+DATARMNET855e9d7062(DATARMNET33b006454e)/(DATARMNET96f21fddc1);
+DATARMNETdbe9f3dbe3->DATARMNETbb80fccd97=DATARMNET64577537b7(DATARMNETdbe9f3dbe3
+->DATARMNETbb80fccd97);DATARMNETdbe9f3dbe3->DATARMNET253a9fc708=
+DATARMNETf553c2afd2(DATARMNETdbe9f3dbe3);if(DATARMNET539a572f34>
+(0xd2d+202-0xdf7)){DATARMNETdbe9f3dbe3->DATARMNET95266642d1=DATARMNETee9f72f13f/
+DATARMNET539a572f34;DATARMNETd2da2e8466(
+"\x53\x48\x53\x5f\x53\x45\x47\x53\x3a\x20\x61\x76\x67\x20\x73\x65\x67\x73\x20\x3d\x20\x25\x6c\x75\x20\x73\x6b\x62\x5f\x64\x69\x66\x66\x20\x3d\x20\x25\x6c\x75\x20\x63\x6f\x61\x6c\x5f\x73\x6b\x62\x5f\x64\x69\x66\x66\x20\x3d\x20\x25\x6c\x75"
+,DATARMNETdbe9f3dbe3->DATARMNET95266642d1,DATARMNETee9f72f13f,
+DATARMNET539a572f34);}else{DATARMNETdbe9f3dbe3->DATARMNET95266642d1=
+(0xd2d+202-0xdf7);}DATARMNETdbe9f3dbe3->DATARMNET0d682bcb29=DATARMNETdbe9f3dbe3
+->DATARMNET3ecedac168-DATARMNETdbe9f3dbe3->DATARMNETd34f4b12cd;
+DATARMNETdbe9f3dbe3->DATARMNET20e8fc9db8=DATARMNETdbe9f3dbe3->
+DATARMNETce5f56eab9-DATARMNETdbe9f3dbe3->DATARMNET96e0dea53e;DATARMNETd2da2e8466
+(
+"\x53\x48\x53\x5f\x48\x57\x5f\x43\x4f\x41\x4c\x3a\x20\x68\x77\x20\x63\x6f\x61\x6c\x20\x62\x79\x74\x65\x73\x20\x3d\x20\x25\x6c\x75\x20\x68\x77\x20\x63\x6f\x61\x6c\x20\x62\x75\x66\x73\x69\x7a\x65\x20\x3d\x20\x25\x6c\x75"
+,node_p->DATARMNET3ecedac168,node_p->DATARMNETce5f56eab9);DATARMNETd2da2e8466(
+"\x53\x48\x53\x5f\x48\x57\x5f\x43\x4f\x41\x4c\x3a\x20\x4c\x41\x53\x54\x3a\x20\x68\x77\x20\x63\x6f\x61\x6c\x20\x62\x79\x74\x65\x73\x20\x3d\x20\x25\x6c\x75\x20\x68\x77\x20\x63\x6f\x61\x6c\x20\x62\x75\x66\x73\x69\x7a\x65\x20\x3d\x20\x25\x6c\x75"
+,DATARMNETdbe9f3dbe3->DATARMNETd34f4b12cd,DATARMNETdbe9f3dbe3->
+DATARMNET96e0dea53e);DATARMNETd2da2e8466(
+"\x53\x48\x53\x5f\x48\x57\x5f\x43\x4f\x41\x4c\x3a\x20\x68\x77\x20\x63\x6f\x61\x6c\x20\x62\x79\x74\x65\x73\x20\x64\x69\x66\x66\x20\x3d\x20\x25\x6c\x75\x20\x68\x77\x20\x63\x6f\x61\x6c\x20\x62\x75\x66\x73\x69\x7a\x65\x20\x64\x69\x66\x66\x20\x3d\x20\x25\x6c\x75"
+,DATARMNETdbe9f3dbe3->DATARMNET0d682bcb29,DATARMNETdbe9f3dbe3->
+DATARMNET20e8fc9db8);DATARMNETdbe9f3dbe3->DATARMNET6c2816c16a=
+DATARMNETdbe9f3dbe3->DATARMNET324c1a8f98;DATARMNETc55315279b(DATARMNETdbe9f3dbe3
+,node_p);trace_rmnet_shs_wq_high(DATARMNET394831f22a,DATARMNETb0ed796e8c,
+DATARMNETdbe9f3dbe3->hash,DATARMNETdbe9f3dbe3->DATARMNET324c1a8f98,
+DATARMNETdbe9f3dbe3->DATARMNETbb80fccd97,(DATARMNET96f21fddc1/1000000),
+DATARMNETdbe9f3dbe3,NULL);DATARMNETdbe9f3dbe3->bif=node_p->bif;
+DATARMNETdbe9f3dbe3->ack_thresh=node_p->ack_thresh;DATARMNETd2da2e8466(
+"\x53\x48\x53\x5f\x51\x55\x49\x43\x4b\x41\x43\x4b\x3a\x20\x62\x69\x66\x20\x3d\x20\x25\x75\x20\x61\x63\x6b\x5f\x74\x68\x72\x65\x73\x68\x20\x3d\x20\x25\x75"
+,node_p->bif,node_p->ack_thresh);}static void DATARMNET33f47350f0(u16 cpu,struct
+ DATARMNET228056d4b7*DATARMNETcf7ef40ff9){if(!DATARMNET58b009b16b)return;if(cpu
+>=DATARMNETc6782fed88){DATARMNET68d84e7b98[DATARMNET54b67b8a75]++;return;}if(!
+DATARMNETcf7ef40ff9){DATARMNET68d84e7b98[DATARMNETac729c3d29]++;return;}
+DATARMNET79263b1183[cpu]=DATARMNETcf7ef40ff9->DATARMNETbb80fccd97;
+DATARMNET229d52b629[cpu]=DATARMNETcf7ef40ff9->DATARMNET324c1a8f98;
+DATARMNET18f2ba4444[cpu]=DATARMNETcf7ef40ff9->flows;DATARMNET77240d48ee[cpu]=
+DATARMNETcf7ef40ff9->rx_bytes;DATARMNET77189ab85c[cpu]=DATARMNETcf7ef40ff9->
+DATARMNET7fc41d655d;DATARMNETd27ed7efea[cpu]=DATARMNETcf7ef40ff9->
+DATARMNET69770f8ef7;DATARMNET377ecf13ca[cpu]=DATARMNETcf7ef40ff9->
+DATARMNET17380ba0f8;}static void DATARMNET8b2fb5dc3c(void){struct 
+DATARMNETc8fdbf9c85*DATARMNET3c48cbf7e4=&DATARMNET6cdd58e74c;struct rmnet_port*
+port;u64 DATARMNETe3ed6089ca,byte_diff;ktime_t DATARMNET96f21fddc1;
+DATARMNET3c48cbf7e4->DATARMNET601156672d=DATARMNET3c48cbf7e4->
+DATARMNET4947607c52;DATARMNET3c48cbf7e4->DATARMNETbfe25a2160=DATARMNET3c48cbf7e4
+->DATARMNET903a2cea81;port=DATARMNETecc0627c70.port;if(!port){
+DATARMNET68d84e7b98[DATARMNET42b73d0f3f]++;return;}DATARMNET3c48cbf7e4->
+DATARMNET903a2cea81=port->stats.dl_hdr_total_pkts;DATARMNET3c48cbf7e4->
+DATARMNET4947607c52=port->stats.dl_hdr_total_bytes;DATARMNET96f21fddc1=
+DATARMNETb3a4036d6d-DATARMNET3c48cbf7e4->DATARMNET68714ac92c;DATARMNET96f21fddc1
+=(DATARMNET96f21fddc1>DATARMNETac617c8dce(DATARMNET1fc3ad67fd)&&
+DATARMNET1fc3ad67fd>(0xd2d+202-0xdf7))?DATARMNET96f21fddc1:DATARMNETac617c8dce(
+(0xeb7+698-0x110d));DATARMNETe3ed6089ca=DATARMNET3c48cbf7e4->DATARMNET903a2cea81
+-DATARMNET3c48cbf7e4->DATARMNETbfe25a2160;byte_diff=DATARMNET3c48cbf7e4->
+DATARMNET4947607c52-DATARMNET3c48cbf7e4->DATARMNET601156672d;DATARMNET3c48cbf7e4
+->DATARMNET3067b3dafd=DATARMNET855e9d7062(DATARMNETe3ed6089ca)/
+DATARMNET96f21fddc1;DATARMNET3c48cbf7e4->DATARMNET47334112aa=DATARMNET855e9d7062
+(byte_diff)/DATARMNET96f21fddc1;DATARMNET3c48cbf7e4->DATARMNET47334112aa=
+DATARMNET64577537b7(DATARMNET3c48cbf7e4->DATARMNET47334112aa);}static void 
+DATARMNET0ce3f33785(void){struct DATARMNETc8fdbf9c85*DATARMNET3c48cbf7e4=&
+DATARMNET6cdd58e74c;u64 DATARMNETe3ed6089ca,byte_diff,DATARMNETccb5dc8a5c,
+DATARMNET4df302dbd6;ktime_t DATARMNET96f21fddc1;DATARMNET96f21fddc1=
+DATARMNETb3a4036d6d-DATARMNET3c48cbf7e4->DATARMNET68714ac92c;DATARMNET96f21fddc1
+=(DATARMNET96f21fddc1>DATARMNETac617c8dce(DATARMNET1fc3ad67fd)&&
+DATARMNET1fc3ad67fd>(0xd2d+202-0xdf7))?DATARMNET96f21fddc1:DATARMNETac617c8dce(
+(0xeb7+698-0x110d));DATARMNETe3ed6089ca=(DATARMNET3c48cbf7e4->
+DATARMNET7fc41d655d-DATARMNET3c48cbf7e4->DATARMNET9853a006ae);byte_diff=
+DATARMNET3c48cbf7e4->rx_bytes-DATARMNET3c48cbf7e4->DATARMNETde6a309f37;
+DATARMNETccb5dc8a5c=DATARMNET855e9d7062(DATARMNETe3ed6089ca)/DATARMNET96f21fddc1
+;DATARMNET4df302dbd6=DATARMNET855e9d7062(byte_diff)/DATARMNET96f21fddc1;
+DATARMNET3c48cbf7e4->DATARMNET8233cb4988=DATARMNET3c48cbf7e4->
+DATARMNETbb80fccd97;DATARMNET3c48cbf7e4->DATARMNET27c3925eff=DATARMNET3c48cbf7e4
+->DATARMNET324c1a8f98;DATARMNET3c48cbf7e4->DATARMNETbb80fccd97=
+DATARMNET64577537b7(DATARMNET4df302dbd6);DATARMNET3c48cbf7e4->
+DATARMNET324c1a8f98=DATARMNETccb5dc8a5c;DATARMNET3c48cbf7e4->DATARMNET68714ac92c
+=DATARMNETb3a4036d6d;DATARMNET3c48cbf7e4->DATARMNETde6a309f37=
+DATARMNET3c48cbf7e4->rx_bytes;DATARMNET3c48cbf7e4->DATARMNET9853a006ae=
+DATARMNET3c48cbf7e4->DATARMNET7fc41d655d;trace_rmnet_shs_wq_high(
+DATARMNET0dd7951b5e,DATARMNET709474066f,DATARMNET3c48cbf7e4->DATARMNET324c1a8f98
+,DATARMNET3c48cbf7e4->DATARMNET3067b3dafd,DATARMNET3c48cbf7e4->
+DATARMNETbb80fccd97,DATARMNET3c48cbf7e4->DATARMNET47334112aa,NULL,NULL);}static 
+void DATARMNET73d2153565(u16 cpu){struct DATARMNET228056d4b7*DATARMNETcf7ef40ff9
+;ktime_t DATARMNET96f21fddc1;u64 DATARMNET55fffa9aa9,DATARMNETedf00aed6f;u64 
+DATARMNET8233cb4988,DATARMNET27c3925eff;u32 DATARMNET8f1cb43b32;if(cpu>=
+DATARMNETc6782fed88){DATARMNET68d84e7b98[DATARMNET54b67b8a75]++;return;}
+DATARMNETcf7ef40ff9=&DATARMNET6cdd58e74c.DATARMNET73464778dc[cpu];
+DATARMNET55fffa9aa9=DATARMNETcf7ef40ff9->DATARMNET7fc41d655d-DATARMNETcf7ef40ff9
+->DATARMNET9853a006ae;DATARMNET8f1cb43b32=DATARMNETadb0248bd4(cpu);if(
+DATARMNETcf7ef40ff9->DATARMNET14b0d18481==(0xd2d+202-0xdf7))DATARMNETcf7ef40ff9
+->DATARMNET14b0d18481=DATARMNET8f1cb43b32;DATARMNETcf7ef40ff9->
+DATARMNET8b9956a3f9=DATARMNETcf7ef40ff9->DATARMNETae196235f2;DATARMNETcf7ef40ff9
+->DATARMNETae196235f2=DATARMNET8f1cb43b32;DATARMNETcf7ef40ff9->
+DATARMNET69770f8ef7=DATARMNETcf7ef40ff9->DATARMNETae196235f2-DATARMNETcf7ef40ff9
+->DATARMNET8b9956a3f9;DATARMNETcf7ef40ff9->DATARMNET17380ba0f8=
+DATARMNETcf7ef40ff9->DATARMNETae196235f2-DATARMNETcf7ef40ff9->
+DATARMNET14b0d18481;if(DATARMNET0997c5650d[cpu].DATARMNET1e1f197118)
+DATARMNET0997c5650d[cpu].DATARMNET1e1f197118=(DATARMNET0997c5650d[cpu].
+DATARMNET1e1f197118+(0xd26+209-0xdf6))%(DATARMNETbe271c415b);if(
+DATARMNET55fffa9aa9==(0xd2d+202-0xdf7)){DATARMNETcf7ef40ff9->DATARMNET68714ac92c
+=DATARMNETb3a4036d6d;DATARMNETcf7ef40ff9->DATARMNETbb80fccd97=(0xd2d+202-0xdf7);
+DATARMNETcf7ef40ff9->DATARMNET324c1a8f98=(0xd2d+202-0xdf7);DATARMNETcf7ef40ff9->
+DATARMNET253a9fc708=(0xd2d+202-0xdf7);if(DATARMNETc252c204a8){
+DATARMNETc6439e3d71(&DATARMNET6cdd58e74c,DATARMNETcf7ef40ff9,&
+DATARMNETe46ae760db);}DATARMNET33f47350f0(cpu,DATARMNETcf7ef40ff9);
+DATARMNET0997c5650d[cpu].DATARMNET72067bf727=(0xd2d+202-0xdf7);return;}
+DATARMNET96f21fddc1=DATARMNETb3a4036d6d-DATARMNETcf7ef40ff9->DATARMNET68714ac92c
+;DATARMNETedf00aed6f=DATARMNETcf7ef40ff9->rx_bytes-DATARMNETcf7ef40ff9->
+DATARMNETde6a309f37;DATARMNET96f21fddc1=(DATARMNET96f21fddc1>DATARMNETac617c8dce
+(DATARMNET1fc3ad67fd)&&DATARMNET1fc3ad67fd>(0xd2d+202-0xdf7))?
+DATARMNET96f21fddc1:DATARMNETac617c8dce((0xeb7+698-0x110d));DATARMNET8233cb4988=
+DATARMNETcf7ef40ff9->DATARMNETbb80fccd97;DATARMNET27c3925eff=DATARMNETcf7ef40ff9
+->DATARMNET324c1a8f98;DATARMNETcf7ef40ff9->DATARMNET324c1a8f98=
+DATARMNET855e9d7062(DATARMNET55fffa9aa9)/DATARMNET96f21fddc1;DATARMNETcf7ef40ff9
+->DATARMNETbb80fccd97=DATARMNET855e9d7062(DATARMNETedf00aed6f)/
+DATARMNET96f21fddc1;DATARMNETcf7ef40ff9->DATARMNETbb80fccd97=DATARMNET64577537b7
+(DATARMNETcf7ef40ff9->DATARMNETbb80fccd97);DATARMNETcf7ef40ff9->
+DATARMNET253a9fc708=DATARMNET183789850d(cpu);DATARMNETcf7ef40ff9->
+DATARMNET8233cb4988=DATARMNET8233cb4988;DATARMNETcf7ef40ff9->DATARMNET27c3925eff
+=DATARMNET27c3925eff;DATARMNETcf7ef40ff9->DATARMNET68714ac92c=
+DATARMNETb3a4036d6d;DATARMNETcf7ef40ff9->DATARMNET9853a006ae=DATARMNETcf7ef40ff9
+->DATARMNET7fc41d655d;DATARMNETcf7ef40ff9->DATARMNETde6a309f37=
+DATARMNETcf7ef40ff9->rx_bytes;DATARMNETcf7ef40ff9->DATARMNETc0b20e240a=
+DATARMNETcf7ef40ff9->DATARMNETbb80fccd97;if(DATARMNET362b15f941(cpu)&&
+DATARMNETcf7ef40ff9->DATARMNET324c1a8f98<DATARMNETc6f7fb02ea&&
+DATARMNETcf7ef40ff9->DATARMNET324c1a8f98>DATARMNET69be7dee16){
+DATARMNET0997c5650d[cpu].DATARMNET72067bf727=(0xd26+209-0xdf6);}else{
+DATARMNET0997c5650d[cpu].DATARMNET72067bf727=(0xd2d+202-0xdf7);}if(
+DATARMNETc252c204a8){DATARMNETc6439e3d71(&DATARMNET6cdd58e74c,
+DATARMNETcf7ef40ff9,&DATARMNETe46ae760db);}trace_rmnet_shs_wq_high(
+DATARMNET39a68a0eba,DATARMNET95d1ddcb1a,cpu,DATARMNETcf7ef40ff9->flows,
+DATARMNETcf7ef40ff9->DATARMNET324c1a8f98,DATARMNETcf7ef40ff9->
+DATARMNETbb80fccd97,NULL,NULL);DATARMNET33f47350f0(cpu,DATARMNETcf7ef40ff9);}
+static void DATARMNET617b443145(void){u16 cpu;trace_rmnet_shs_wq_high(
+DATARMNET39a68a0eba,DATARMNET6bde6a5171,(0x16e8+787-0xc0c),(0x16e8+787-0xc0c),
+(0x16e8+787-0xc0c),(0x16e8+787-0xc0c),NULL,NULL);for(cpu=(0xd2d+202-0xdf7);cpu<
+DATARMNETc6782fed88;cpu++)DATARMNET73d2153565(cpu);trace_rmnet_shs_wq_high(
+DATARMNET39a68a0eba,DATARMNET5c7c474d94,(0x16e8+787-0xc0c),(0x16e8+787-0xc0c),
+(0x16e8+787-0xc0c),(0x16e8+787-0xc0c),NULL,NULL);}void DATARMNET5b2ed86112(
+struct DATARMNET6c78e47d24*DATARMNET7b2c1bbf38){struct DATARMNETc8fdbf9c85*
+DATARMNET3c48cbf7e4=&DATARMNET6cdd58e74c;struct DATARMNET63d7680df2*node_p;u64 
+DATARMNETee9f72f13f,byte_diff;u16 DATARMNET42a992465f;if(!DATARMNET7b2c1bbf38){
+DATARMNET68d84e7b98[DATARMNETac729c3d29]++;return;}node_p=DATARMNET7b2c1bbf38->
+DATARMNET63b1a086d5;if(DATARMNET7b2c1bbf38->DATARMNET42ceaf5cc2>
+(0xd2d+202-0xdf7))return;DATARMNET42a992465f=node_p->map_cpu;if(
+DATARMNET42a992465f>=DATARMNETc6782fed88){DATARMNET68d84e7b98[
+DATARMNET709b59b0e6]++;return;}DATARMNETee9f72f13f=DATARMNET7b2c1bbf38->
+DATARMNET4b4a76b094-DATARMNET7b2c1bbf38->DATARMNET6edbc8b649;byte_diff=
+DATARMNET7b2c1bbf38->rx_bytes-DATARMNET7b2c1bbf38->DATARMNETde6a309f37;if(
+DATARMNET42a992465f!=DATARMNET7b2c1bbf38->DATARMNET7c894c2f8f&&!
+DATARMNET7b2c1bbf38->DATARMNET8a4e1d5aaa){rm_err(
+"\x53\x48\x53\x5f\x46\x4c\x4f\x57\x3a\x20\x6d\x6f\x76\x69\x6e\x67\x20\x66\x6c\x6f\x77\x20\x30\x78\x25\x78\x20\x6f\x6e\x20\x63\x70\x75\x5b\x25\x64\x5d\x20\x74\x6f\x20\x63\x70\x75\x5b\x25\x64\x5d\x20"
+"\x70\x70\x73\x3a\x20\x25\x6c\x6c\x75\x20\x7c\x20\x61\x76\x67\x5f\x70\x70\x73\x20\x25\x6c\x6c\x75"
+,DATARMNET7b2c1bbf38->hash,DATARMNET7b2c1bbf38->DATARMNET7c894c2f8f,
+DATARMNET42a992465f,DATARMNET7b2c1bbf38->DATARMNET324c1a8f98,DATARMNET7b2c1bbf38
+->DATARMNET253a9fc708);trace_rmnet_shs_wq_high(DATARMNET394831f22a,
+DATARMNET29c0bc0151,DATARMNET7b2c1bbf38->hash,DATARMNET7b2c1bbf38->
+DATARMNET7c894c2f8f,DATARMNET42a992465f,(0x16e8+787-0xc0c),DATARMNET7b2c1bbf38,
+NULL);DATARMNET9914e9761e(DATARMNET7b2c1bbf38,&DATARMNET3c48cbf7e4->
+DATARMNET73464778dc[DATARMNET42a992465f].DATARMNETab5c1e9ad5);
+DATARMNET0349051465(DATARMNET42a992465f);DATARMNET3669e7b703(DATARMNET7b2c1bbf38
+->DATARMNET7c894c2f8f);DATARMNET7b2c1bbf38->DATARMNET7c894c2f8f=
+DATARMNET42a992465f;}else if(DATARMNET7b2c1bbf38->DATARMNET8a4e1d5aaa){
+DATARMNET0349051465(DATARMNET42a992465f);DATARMNETd8a6375e9c(DATARMNET7b2c1bbf38
+,&DATARMNET3c48cbf7e4->DATARMNET73464778dc[DATARMNET42a992465f].
+DATARMNETab5c1e9ad5);rm_err(
+"\x53\x48\x53\x5f\x46\x4c\x4f\x57\x3a\x20\x61\x64\x64\x69\x6e\x67\x20\x66\x6c\x6f\x77\x20\x30\x78\x25\x78\x20\x6f\x6e\x20\x63\x70\x75\x5b\x25\x64\x5d\x20"
+"\x70\x70\x73\x3a\x20\x25\x6c\x6c\x75\x20\x7c\x20\x61\x76\x67\x5f\x70\x70\x73\x20\x25\x6c\x6c\x75"
+,DATARMNET7b2c1bbf38->hash,DATARMNET7b2c1bbf38->DATARMNET7c894c2f8f,
+DATARMNET7b2c1bbf38->DATARMNET324c1a8f98,DATARMNET7b2c1bbf38->
+DATARMNET253a9fc708);DATARMNET7b2c1bbf38->DATARMNET8a4e1d5aaa=(0xd2d+202-0xdf7);
+DATARMNET7b2c1bbf38->DATARMNET7c894c2f8f=DATARMNET42a992465f;}
+DATARMNET3c48cbf7e4->DATARMNET73464778dc[DATARMNET42a992465f].
+DATARMNET7fc41d655d+=DATARMNETee9f72f13f;DATARMNET3c48cbf7e4->
+DATARMNET73464778dc[DATARMNET42a992465f].rx_bytes+=byte_diff;DATARMNET3c48cbf7e4
+->DATARMNET7fc41d655d+=DATARMNETee9f72f13f;DATARMNET3c48cbf7e4->rx_bytes+=
+byte_diff;}void DATARMNETdfb8ee742f(u16 DATARMNET035f475d5c,u16 
+DATARMNETcfb5dc7296,struct DATARMNET9b44b71ee9*ep){struct DATARMNET63d7680df2*
+node_p;struct DATARMNET6c78e47d24*DATARMNET7b2c1bbf38;struct hlist_node*tmp;u16 
+bkt;spin_lock_bh(&DATARMNET3764d083f0);hash_for_each_safe(DATARMNETe603c3a4b3,
+bkt,tmp,node_p,list){if(!node_p)continue;if(!node_p->DATARMNET341ea38662)
+continue;DATARMNET7b2c1bbf38=node_p->DATARMNET341ea38662;if((DATARMNET7b2c1bbf38
+->DATARMNET6e1a4eaf09==DATARMNET035f475d5c)&&(node_p->dev==ep->ep)){
+trace_rmnet_shs_wq_high(DATARMNET394831f22a,DATARMNET45edcec1e4,
+DATARMNET7b2c1bbf38->hash,DATARMNET7b2c1bbf38->DATARMNET6e1a4eaf09,
+DATARMNETcfb5dc7296,(0x16e8+787-0xc0c),DATARMNET7b2c1bbf38,NULL);node_p->
+DATARMNET341ea38662->DATARMNET6e1a4eaf09=DATARMNETcfb5dc7296;}}spin_unlock_bh(&
+DATARMNET3764d083f0);}static void DATARMNETc2de347e4d(u32 DATARMNETa3f89581b5,
+struct DATARMNET6c78e47d24*DATARMNET7b2c1bbf38){if(DATARMNETa3f89581b5>=
+DATARMNET3563036124||DATARMNET7b2c1bbf38==NULL)return;DATARMNET7b2c1bbf38->
+DATARMNET61e1ee0e95[DATARMNETa3f89581b5]+=(0xd26+209-0xdf6);}static int 
+DATARMNET6f56fe7597(u16 DATARMNET035f475d5c,u16 DATARMNETcfb5dc7296,struct 
+DATARMNET9b44b71ee9*ep,u32 DATARMNET4da4612f1e,u32 DATARMNETa3f89581b5){struct 
+DATARMNET63d7680df2*node_p;struct DATARMNET6c78e47d24*DATARMNET7b2c1bbf38;struct
+ hlist_node*tmp;int rc=(0xd2d+202-0xdf7);u16 bkt;if(!ep){DATARMNET68d84e7b98[
+DATARMNETb8fe2c0e64]++;return(0xd2d+202-0xdf7);}if(DATARMNET035f475d5c>=
+DATARMNETc6782fed88||DATARMNETcfb5dc7296>=DATARMNETc6782fed88){
+DATARMNET68d84e7b98[DATARMNET54b67b8a75]++;return(0xd2d+202-0xdf7);}spin_lock_bh
+(&DATARMNET3764d083f0);hash_for_each_safe(DATARMNETe603c3a4b3,bkt,tmp,node_p,
+list){if(!node_p)continue;if(!node_p->DATARMNET341ea38662)continue;
+DATARMNET7b2c1bbf38=node_p->DATARMNET341ea38662;if(DATARMNET4da4612f1e!=
+(0xd2d+202-0xdf7)){if(DATARMNET7b2c1bbf38->hash!=DATARMNET4da4612f1e)continue;}
+rm_err(
+"\x53\x48\x53\x5f\x48\x54\x3a\x20\x3e\x3e\x20\x20\x73\x75\x67\x67\x20\x63\x70\x75\x20\x25\x64\x20\x7c\x20\x6f\x6c\x64\x20\x63\x70\x75\x20\x25\x64\x20\x7c\x20\x6e\x65\x77\x5f\x63\x70\x75\x20\x25\x64\x20\x7c\x20"
+"\x6d\x61\x70\x5f\x63\x70\x75\x20\x3d\x20\x25\x64\x20\x7c\x20\x66\x6c\x6f\x77\x20\x30\x78\x25\x78"
+,DATARMNET7b2c1bbf38->DATARMNET6e1a4eaf09,DATARMNET035f475d5c,
+DATARMNETcfb5dc7296,node_p->map_cpu,DATARMNET4da4612f1e);if((DATARMNET7b2c1bbf38
+->DATARMNET6e1a4eaf09==DATARMNET035f475d5c)&&(node_p->dev==ep->ep)){
+trace_rmnet_shs_wq_high(DATARMNET394831f22a,DATARMNET45edcec1e4,
+DATARMNET7b2c1bbf38->hash,DATARMNET7b2c1bbf38->DATARMNET6e1a4eaf09,
+DATARMNETcfb5dc7296,(0x16e8+787-0xc0c),DATARMNET7b2c1bbf38,NULL);node_p->
+DATARMNET341ea38662->DATARMNET6e1a4eaf09=DATARMNETcfb5dc7296;DATARMNETc2de347e4d
+(DATARMNETa3f89581b5,DATARMNET7b2c1bbf38);if(DATARMNET4da4612f1e){rm_err(
+"\x53\x48\x53\x5f\x43\x48\x4e\x47\x3a\x20\x6d\x6f\x76\x69\x6e\x67\x20\x73\x69\x6e\x67\x6c\x65\x20\x66\x6c\x6f\x77\x3a\x20\x66\x6c\x6f\x77\x20\x30\x78\x25\x78\x20"
+"\x73\x75\x67\x67\x5f\x63\x70\x75\x20\x63\x68\x61\x6e\x67\x65\x64\x20\x66\x72\x6f\x6d\x20\x25\x64\x20\x74\x6f\x20\x25\x64"
+,DATARMNET7b2c1bbf38->hash,DATARMNET035f475d5c,node_p->DATARMNET341ea38662->
+DATARMNET6e1a4eaf09);rc=(0xd26+209-0xdf6);break;}rm_err(
+"\x53\x48\x53\x5f\x43\x48\x4e\x47\x3a\x20\x6d\x6f\x76\x69\x6e\x67\x20\x61\x6c\x6c\x20\x66\x6c\x6f\x77\x73\x3a\x20\x66\x6c\x6f\x77\x20\x30\x78\x25\x78\x20"
+"\x73\x75\x67\x67\x5f\x63\x70\x75\x20\x63\x68\x61\x6e\x67\x65\x64\x20\x66\x72\x6f\x6d\x20\x25\x64\x20\x74\x6f\x20\x25\x64"
+,DATARMNET7b2c1bbf38->hash,DATARMNET035f475d5c,node_p->DATARMNET341ea38662->
+DATARMNET6e1a4eaf09);rc|=(0xd26+209-0xdf6);}}spin_unlock_bh(&DATARMNET3764d083f0
+);return rc;}u64 DATARMNETd406e89a85(u32 DATARMNETfaedbb66a9){int 
+DATARMNET42a992465f;u64 DATARMNET5a8059a7ce=(0xd2d+202-0xdf7);struct 
+DATARMNETc8fdbf9c85*DATARMNET7bea4a06a6=&DATARMNET6cdd58e74c;for(
+DATARMNET42a992465f=(0xd2d+202-0xdf7);DATARMNET42a992465f<DATARMNETc6782fed88;
+DATARMNET42a992465f++){if((((0xd26+209-0xdf6)<<DATARMNET42a992465f)&
+DATARMNETfaedbb66a9)&&(DATARMNET7bea4a06a6->DATARMNET73464778dc[
+DATARMNET42a992465f].DATARMNET324c1a8f98>DATARMNET5a8059a7ce)){
+DATARMNET5a8059a7ce=DATARMNET7bea4a06a6->DATARMNET73464778dc[DATARMNET42a992465f
+].DATARMNET324c1a8f98;}}return DATARMNET5a8059a7ce;}int DATARMNET362c14e98b(u16 
+DATARMNETfaedbb66a9){struct DATARMNETc8fdbf9c85*DATARMNET7bea4a06a6=&
+DATARMNET6cdd58e74c;struct DATARMNET228056d4b7*DATARMNET65385af8a0;u64 
+DATARMNET609049f7b7=U64_MAX;u32 DATARMNET84d36cfd28=U32_MAX;int 
+DATARMNETbd864aa442=-(0xd26+209-0xdf6);int DATARMNETd415a9f9bd=-
+(0xd26+209-0xdf6);int DATARMNETb6773d2790=-(0xd26+209-0xdf6);int 
+DATARMNET42a992465f=(0xd2d+202-0xdf7);u16 DATARMNETdebcca6b26;for(
+DATARMNET42a992465f=DATARMNETc6782fed88-(0xd26+209-0xdf6);DATARMNET42a992465f>=
+(0xd2d+202-0xdf7);DATARMNET42a992465f--){DATARMNETdebcca6b26=(((0xd26+209-0xdf6)
+<<DATARMNET42a992465f)&DATARMNETfaedbb66a9)&&cpu_online(DATARMNET42a992465f)&&!
+DATARMNET882958a556(DATARMNET42a992465f);if(!DATARMNETdebcca6b26)continue;
+DATARMNET65385af8a0=&DATARMNET7bea4a06a6->DATARMNET73464778dc[
+DATARMNET42a992465f];trace_rmnet_shs_wq_low(DATARMNET39a68a0eba,
+DATARMNET55cd50e666,DATARMNET42a992465f,DATARMNET65385af8a0->DATARMNET324c1a8f98
+,DATARMNET609049f7b7,(0xd2d+202-0xdf7),NULL,NULL);if(DATARMNET65385af8a0->flows
+==(0xd2d+202-0xdf7)){DATARMNETb6773d2790=DATARMNET42a992465f;break;}if(
+DATARMNET65385af8a0->DATARMNET324c1a8f98==(0xd2d+202-0xdf7)&&DATARMNET65385af8a0
+->flows<DATARMNET84d36cfd28){DATARMNET84d36cfd28=DATARMNET65385af8a0->flows;
+DATARMNETd415a9f9bd=DATARMNET42a992465f;}if(DATARMNET65385af8a0->
+DATARMNET324c1a8f98<=DATARMNET609049f7b7){DATARMNET609049f7b7=
+DATARMNET65385af8a0->DATARMNET324c1a8f98;DATARMNETbd864aa442=DATARMNET42a992465f
+;}}if(DATARMNETb6773d2790>=(0xd2d+202-0xdf7))DATARMNETbd864aa442=
+DATARMNETb6773d2790;else if(DATARMNETd415a9f9bd>=(0xd2d+202-0xdf7))
+DATARMNETbd864aa442=DATARMNETd415a9f9bd;return DATARMNETbd864aa442;}u16 
+DATARMNET3c1fc10379(u16 DATARMNET7c894c2f8f,struct DATARMNET9b44b71ee9*ep){
+struct DATARMNETc8fdbf9c85*DATARMNET7bea4a06a6=&DATARMNET6cdd58e74c;struct 
+DATARMNET228056d4b7*DATARMNET373ff1422a,*DATARMNETd8755a1440;u64 
+DATARMNETf115ef7639,DATARMNET64bef917cb,DATARMNET85bfb4b2ca;u64 
+DATARMNET264b01f4d5,DATARMNET53ce143c7e=(0xd2d+202-0xdf7);u16 
+DATARMNETd668725d64=DATARMNET7c894c2f8f;u16 DATARMNET42a992465f;u8 
+DATARMNETca535905d7;u32 DATARMNETa7176e3ad8=(0xd2d+202-0xdf7);if(!ep){
+DATARMNET68d84e7b98[DATARMNETb8fe2c0e64]++;return DATARMNETd668725d64;}
+DATARMNETd8755a1440=&DATARMNET7bea4a06a6->DATARMNET73464778dc[
+DATARMNET7c894c2f8f];DATARMNET85bfb4b2ca=DATARMNETd8755a1440->
+DATARMNET324c1a8f98;DATARMNET264b01f4d5=DATARMNET713717107f[DATARMNET7c894c2f8f]
+;DATARMNET53ce143c7e=DATARMNET4793ed48af[DATARMNET7c894c2f8f];if(!
+DATARMNET362b15f941(DATARMNET7c894c2f8f)&&(DATARMNET85bfb4b2ca>
+DATARMNET53ce143c7e)){return DATARMNETd668725d64;}if(DATARMNET0997c5650d[
+DATARMNET7c894c2f8f].DATARMNET1e1f197118)return DATARMNET7c894c2f8f;for(
+DATARMNET42a992465f=(0xd2d+202-0xdf7);DATARMNET42a992465f<DATARMNETc6782fed88;
+DATARMNET42a992465f++){DATARMNETca535905d7=(((0xd26+209-0xdf6)<<
+DATARMNET42a992465f)&(ep->DATARMNET9fb369ce5f&~DATARMNETecc0627c70.
+DATARMNETba3f7a11ef)&~DATARMNET121c8bc82a);if((DATARMNET42a992465f==
+DATARMNET7c894c2f8f)||(!DATARMNETca535905d7)||!cpu_online(DATARMNET42a992465f))
+continue;DATARMNET264b01f4d5=DATARMNET713717107f[DATARMNET42a992465f];
+DATARMNET53ce143c7e=DATARMNET4793ed48af[DATARMNET42a992465f];DATARMNET373ff1422a
+=&DATARMNET7bea4a06a6->DATARMNET73464778dc[DATARMNET42a992465f];
+DATARMNETf115ef7639=DATARMNET373ff1422a->DATARMNET324c1a8f98;DATARMNET64bef917cb
+=DATARMNETf115ef7639+DATARMNET85bfb4b2ca;trace_rmnet_shs_wq_low(
+DATARMNET39a68a0eba,DATARMNETcd209744bd,DATARMNET7c894c2f8f,DATARMNET42a992465f,
+DATARMNET64bef917cb,DATARMNETf115ef7639,NULL,NULL);if((DATARMNET64bef917cb>
+DATARMNET53ce143c7e)&&(DATARMNET64bef917cb<DATARMNET264b01f4d5)&&
+DATARMNETf115ef7639<=DATARMNETa7176e3ad8){DATARMNETd668725d64=
+DATARMNET42a992465f;DATARMNETa7176e3ad8=DATARMNETf115ef7639;}}
+trace_rmnet_shs_wq_high(DATARMNET39a68a0eba,DATARMNETcd209744bd,
+DATARMNET7c894c2f8f,DATARMNETd668725d64,DATARMNET85bfb4b2ca,DATARMNET7bea4a06a6
+->DATARMNET73464778dc[DATARMNETd668725d64].DATARMNET324c1a8f98,NULL,NULL);return
+ DATARMNETd668725d64;}void DATARMNET466244e5d6(u16 DATARMNETc790ff30fc){struct 
+DATARMNET9b44b71ee9*ep=NULL;u16 DATARMNETcfb5dc7296;list_for_each_entry(ep,&
+DATARMNET30a3e83974,DATARMNET0763436b8d){if(!ep->DATARMNET4a4e6f66b5)continue;
+DATARMNETcfb5dc7296=DATARMNET3c1fc10379(DATARMNETc790ff30fc,ep);if(
+DATARMNETcfb5dc7296!=DATARMNETc790ff30fc)DATARMNETdfb8ee742f(DATARMNETc790ff30fc
+,DATARMNETcfb5dc7296,ep);}}int DATARMNET769bbe36c6(u16 DATARMNET7c894c2f8f,u16 
+DATARMNET208ea67e1d,struct DATARMNET9b44b71ee9*ep){u16 DATARMNET553df5e12a=
+(0xd2d+202-0xdf7);if(!ep){DATARMNET68d84e7b98[DATARMNETb8fe2c0e64]++;return
+(0xd2d+202-0xdf7);}if(DATARMNET7c894c2f8f>=DATARMNETc6782fed88||
+DATARMNET208ea67e1d>=DATARMNETc6782fed88){DATARMNET68d84e7b98[
+DATARMNET54b67b8a75]++;return(0xd2d+202-0xdf7);}DATARMNET553df5e12a=(
+(0xd26+209-0xdf6)<<DATARMNET208ea67e1d)&ep->DATARMNET9fb369ce5f&~
+DATARMNETecc0627c70.DATARMNETba3f7a11ef&~DATARMNET121c8bc82a;rm_err(
+"\x53\x48\x53\x5f\x4d\x41\x53\x4b\x3a\x20\x20\x63\x75\x72\x20\x63\x70\x75\x20\x5b\x25\x64\x5d\x20\x7c\x20\x64\x65\x73\x74\x5f\x63\x70\x75\x20\x5b\x25\x64\x5d\x20\x7c\x20"
+"\x65\x70\x5f\x72\x70\x73\x5f\x6d\x61\x73\x6b\x20\x3d\x20\x30\x78\x25\x78\x20\x7c\x20\x63\x70\x75\x5f\x6f\x6e\x6c\x69\x6e\x65\x28\x64\x65\x73\x74\x29\x20\x3d\x20\x25\x64"
+"\x63\x70\x75\x5f\x69\x6e\x5f\x72\x70\x73\x5f\x6d\x61\x73\x6b\x20\x3d\x20\x25\x64"
+,DATARMNET7c894c2f8f,DATARMNET208ea67e1d,ep->DATARMNET9fb369ce5f,cpu_online(
+DATARMNET208ea67e1d),DATARMNET553df5e12a);if(DATARMNET7c894c2f8f==
+DATARMNET208ea67e1d||!cpu_online(DATARMNET208ea67e1d)||!DATARMNET553df5e12a){
+return(0xd2d+202-0xdf7);}return(0xd26+209-0xdf6);}int DATARMNET5f72606f6f(u16 
+DATARMNETc790ff30fc,u16 DATARMNET208ea67e1d,u32 DATARMNET4da4612f1e,u32 
+DATARMNETa3f89581b5){struct DATARMNET9b44b71ee9*ep;if(DATARMNETc790ff30fc>=
+DATARMNETc6782fed88||DATARMNET208ea67e1d>=DATARMNETc6782fed88){
+DATARMNET68d84e7b98[DATARMNET54b67b8a75]++;return(0xd2d+202-0xdf7);}spin_lock_bh
+(&DATARMNETec2a4f5211);list_for_each_entry(ep,&DATARMNET30a3e83974,
+DATARMNET0763436b8d){if(!ep->DATARMNET4a4e6f66b5)continue;if(!
+DATARMNET769bbe36c6(DATARMNETc790ff30fc,DATARMNET208ea67e1d,ep)){rm_err(
+"\x53\x48\x53\x5f\x46\x44\x45\x53\x43\x3a\x20\x3e\x3e\x20\x43\x61\x6e\x6e\x6f\x74\x20\x6d\x6f\x76\x65\x20\x66\x6c\x6f\x77\x20\x30\x78\x25\x78\x20\x6f\x6e\x20\x65\x70"
+"\x20\x66\x72\x6f\x6d\x20\x63\x70\x75\x5b\x25\x64\x5d\x20\x74\x6f\x20\x63\x70\x75\x5b\x25\x64\x5d"
+,DATARMNET4da4612f1e,DATARMNETc790ff30fc,DATARMNET208ea67e1d);continue;}if(
+DATARMNET6f56fe7597(DATARMNETc790ff30fc,DATARMNET208ea67e1d,ep,
+DATARMNET4da4612f1e,DATARMNETa3f89581b5)){rm_err(
+"\x53\x48\x53\x5f\x46\x44\x45\x53\x43\x3a\x20\x3e\x3e\x20\x66\x6c\x6f\x77\x20\x30\x78\x25\x78\x20\x77\x61\x73\x20\x73\x75\x67\x67\x65\x73\x74\x65\x64\x20\x74\x6f"
+"\x20\x6d\x6f\x76\x65\x20\x66\x72\x6f\x6d\x20\x63\x70\x75\x5b\x25\x64\x5d\x20\x74\x6f\x20\x63\x70\x75\x5b\x25\x64\x5d\x20\x73\x75\x67\x67\x5f\x74\x79\x70\x65\x20\x5b\x25\x64\x5d"
+,DATARMNET4da4612f1e,DATARMNETc790ff30fc,DATARMNET208ea67e1d,DATARMNETa3f89581b5
+);spin_unlock_bh(&DATARMNETec2a4f5211);return(0xd26+209-0xdf6);}}spin_unlock_bh(
+&DATARMNETec2a4f5211);return(0xd2d+202-0xdf7);}int DATARMNETf85599b9d8(u32 
+DATARMNET8c11bd9466,u8 DATARMNET87636d0152){struct DATARMNET63d7680df2*node_p;
+struct DATARMNET6c78e47d24*DATARMNET7b2c1bbf38;u16 bkt;spin_lock_bh(&
+DATARMNET3764d083f0);hash_for_each(DATARMNETe603c3a4b3,bkt,node_p,list){if(!
+node_p)continue;if(!node_p->DATARMNET341ea38662)continue;DATARMNET7b2c1bbf38=
+node_p->DATARMNET341ea38662;if(DATARMNET7b2c1bbf38->hash!=DATARMNET8c11bd9466)
+continue;rm_err(
+"\x53\x48\x53\x5f\x48\x54\x3a\x20\x3e\x3e\x20\x73\x65\x67\x6d\x65\x6e\x74\x61\x74\x69\x6f\x6e\x20\x6f\x6e\x20\x68\x61\x73\x68\x20\x30\x78\x25\x78\x20\x73\x65\x67\x73\x5f\x70\x65\x72\x5f\x73\x6b\x62\x20\x25\x75"
+,DATARMNET8c11bd9466,DATARMNET87636d0152);trace_rmnet_shs_wq_high(
+DATARMNET394831f22a,DATARMNET213a62da0d,DATARMNET7b2c1bbf38->hash,
+DATARMNET87636d0152,(0x16e8+787-0xc0c),(0x16e8+787-0xc0c),DATARMNET7b2c1bbf38,
+NULL);node_p->DATARMNET341ea38662->DATARMNET87636d0152=DATARMNET87636d0152;
+spin_unlock_bh(&DATARMNET3764d083f0);return(0xd26+209-0xdf6);}spin_unlock_bh(&
+DATARMNET3764d083f0);rm_err(
+"\x53\x48\x53\x5f\x48\x54\x3a\x20\x3e\x3e\x20\x73\x65\x67\x6d\x65\x6e\x74\x61\x74\x69\x6f\x6e\x20\x6f\x6e\x20\x68\x61\x73\x68\x20\x30\x78\x25\x78\x20\x73\x65\x67\x73\x5f\x70\x65\x72\x5f\x73\x6b\x62\x20\x25\x75\x20\x6e\x6f\x74\x20\x73\x65\x74\x20\x2d\x20\x68\x61\x73\x68\x20\x6e\x6f\x74\x20\x66\x6f\x75\x6e\x64"
+,DATARMNET8c11bd9466,DATARMNET87636d0152);return(0xd2d+202-0xdf7);}int 
+DATARMNET1faf2b953f(u32 DATARMNET8c11bd9466,u32 ack_thresh){rm_err(
+"\x43\x61\x6c\x6c\x69\x6e\x67\x20\x71\x75\x69\x63\x6b\x61\x63\x6b\x20\x74\x68\x72\x65\x73\x68\x20\x68\x6f\x6f\x6b\x20\x69\x6e\x20\x72\x6d\x6e\x65\x74\x5f\x70\x65\x72\x66\x20\x77\x2f\x20\x68\x61\x73\x68\x20\x30\x78\x25\x78\x20\x61\x6e\x64\x20\x74\x68\x72\x65\x73\x68\x20\x25\x75"
+,DATARMNET8c11bd9466,ack_thresh);if(rmnet_module_hook_perf_set_thresh(
+DATARMNET8c11bd9466,ack_thresh)){rm_err(
+"\x53\x75\x63\x63\x65\x73\x73\x66\x75\x6c\x6c\x79\x20\x63\x68\x61\x6e\x67\x65\x64\x20\x61\x63\x6b\x5f\x74\x68\x72\x65\x73\x68\x20\x74\x6f\x20\x25\x75"
+,ack_thresh);return(0xd26+209-0xdf6);}rm_err(
+"\x46\x61\x69\x6c\x65\x64\x20\x74\x6f\x20\x63\x68\x61\x6e\x67\x65\x20\x61\x63\x6b\x5f\x74\x68\x72\x65\x73\x68\x20\x74\x6f\x20\x25\x75"
+,ack_thresh);return(0xd2d+202-0xdf7);}void DATARMNET5e1aaed12b(void){struct 
+DATARMNETc8fdbf9c85*DATARMNET7bea4a06a6=&DATARMNET6cdd58e74c;struct 
+DATARMNET228056d4b7*DATARMNETf632b170b1;struct DATARMNET6c78e47d24*
+DATARMNETd2a694d52a;int flows,i;u16 DATARMNET42a992465f=(0xd2d+202-0xdf7);if(!
+DATARMNETdfb4d931bc)return;for(DATARMNET42a992465f=(0xd2d+202-0xdf7);
+DATARMNET42a992465f<DATARMNETc6782fed88;DATARMNET42a992465f++){
+DATARMNETf632b170b1=&DATARMNET7bea4a06a6->DATARMNET73464778dc[
+DATARMNET42a992465f];flows=DATARMNET7bea4a06a6->DATARMNET73464778dc[
+DATARMNET42a992465f].flows;rm_err(
+"\x53\x48\x53\x5f\x43\x50\x55\x3a\x20\x63\x70\x75\x5b\x25\x64\x5d\x3a\x20\x66\x6c\x6f\x77\x73\x3d\x25\x64\x20\x70\x70\x73\x3d\x25\x6c\x6c\x75\x20\x62\x70\x73\x3d\x25\x6c\x6c\x75\x20"
+"\x71\x68\x65\x61\x64\x5f\x64\x69\x66\x66\x20\x25\x75\x20\x71\x68\x65\x61\x64\x5f\x74\x6f\x74\x61\x6c\x20\x3d\x20\x25\x75\x20\x71\x68\x65\x61\x64\x5f\x73\x74\x61\x72\x74\x20\x3d\x20\x25\x75\x20"
+"\x71\x68\x65\x61\x64\x20\x3d\x20\x25\x75\x20\x71\x68\x65\x61\x64\x5f\x6c\x61\x73\x74\x20\x3d\x20\x25\x75\x20"
+,DATARMNET42a992465f,flows,DATARMNETf632b170b1->DATARMNET324c1a8f98,
+DATARMNETf632b170b1->DATARMNETbb80fccd97,DATARMNETf632b170b1->
+DATARMNET69770f8ef7,DATARMNETf632b170b1->DATARMNET17380ba0f8,DATARMNETf632b170b1
+->DATARMNET14b0d18481,DATARMNETf632b170b1->DATARMNETae196235f2,
+DATARMNETf632b170b1->DATARMNET8b9956a3f9);rcu_read_lock();
+list_for_each_entry_rcu(DATARMNETd2a694d52a,&DATARMNET9825511866,
+DATARMNET6de26f0feb){if(DATARMNETd2a694d52a->DATARMNET0dc393a345==
+(0xd2d+202-0xdf7))continue;if(DATARMNETd2a694d52a->DATARMNET63b1a086d5){if(
+DATARMNETd2a694d52a->DATARMNET7c894c2f8f==DATARMNET42a992465f)rm_err(
+"\x53\x48\x53\x5f\x43\x50\x55\x3a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3e\x20\x66\x6c\x6f\x77\x20\x30\x78\x25\x78\x20"
+"\x77\x69\x74\x68\x20\x70\x70\x73\x20\x25\x6c\x6c\x75\x20\x61\x76\x67\x5f\x70\x70\x73\x20\x25\x6c\x6c\x75\x20\x72\x78\x5f\x62\x70\x73\x20\x25\x6c\x6c\x75\x20"
+,DATARMNETd2a694d52a->hash,DATARMNETd2a694d52a->DATARMNET324c1a8f98,
+DATARMNETd2a694d52a->DATARMNET253a9fc708,DATARMNETd2a694d52a->
+DATARMNETbb80fccd97);}}rcu_read_unlock();for(i=(0xd2d+202-0xdf7);i<
+(0xd18+223-0xdf4)-flows;i++){rm_err("\x25\x73",
+"\x53\x48\x53\x5f\x43\x50\x55\x3a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x3e\x20");
+}}}void DATARMNET468586cca6(struct list_head*DATARMNETb436c3f30b){struct 
+DATARMNET09a412b1c6*DATARMNET4238158b2a;if(!DATARMNETdfb4d931bc)return;if(!
+DATARMNETb436c3f30b){rm_err("\x25\x73",
+"\x53\x48\x53\x5f\x47\x44\x4d\x41\x3a\x20\x47\x6f\x6c\x64\x20\x46\x6c\x6f\x77\x73\x20\x4c\x69\x73\x74\x20\x69\x73\x20\x4e\x55\x4c\x4c"
+);return;}rm_err("\x25\x73",
+"\x53\x48\x53\x5f\x47\x44\x4d\x41\x3a\x20\x4c\x69\x73\x74\x20\x6f\x66\x20\x73\x6f\x72\x74\x65\x64\x20\x67\x6f\x6c\x64\x20\x66\x6c\x6f\x77\x73\x3a"
+);list_for_each_entry(DATARMNET4238158b2a,DATARMNETb436c3f30b,
+DATARMNETd502c0412a){rm_err(
+"\x53\x48\x53\x5f\x47\x44\x4d\x41\x3a\x20\x3e\x20\x66\x6c\x6f\x77\x20\x30\x78\x25\x78\x20\x77\x69\x74\x68\x20\x70\x70\x73\x20\x25\x6c\x6c\x75\x20\x6f\x6e\x20\x63\x70\x75\x5b\x25\x64\x5d"
+,DATARMNET4238158b2a->hash,DATARMNET4238158b2a->DATARMNET324c1a8f98,
+DATARMNET4238158b2a->DATARMNET42a992465f);}}void DATARMNET7792d4f4ad(struct 
+list_head*DATARMNETe46ae760db,struct list_head*DATARMNETb436c3f30b,struct 
+list_head*DATARMNETf0fb155a9c,struct list_head*DATARMNET3208cd0982,struct 
+list_head*DATARMNETf629816d3d){if(!DATARMNETe46ae760db||!DATARMNETb436c3f30b||!
+DATARMNETf0fb155a9c||!DATARMNET3208cd0982||!DATARMNETf629816d3d){
+DATARMNET68d84e7b98[DATARMNETac729c3d29]++;return;}list_sort(NULL,
+DATARMNETe46ae760db,&DATARMNET85af86a36d);list_sort(NULL,DATARMNETb436c3f30b,&
+DATARMNETd5c15f1ff3);list_sort(NULL,DATARMNET3208cd0982,&DATARMNET3c489db64a);
+list_sort(NULL,DATARMNETf629816d3d,&DATARMNET4e292977da);DATARMNET5157210c44(
+DATARMNETe46ae760db);DATARMNET0e273eab79(DATARMNETb436c3f30b);
+DATARMNETe15af8eb6d(DATARMNETf0fb155a9c);DATARMNET78f3a0ca4f(DATARMNET3208cd0982
+);DATARMNETa3d6c4072d(DATARMNETf629816d3d);DATARMNET78666f33a1();
+DATARMNET5945236cd3(DATARMNET7afb49ee3f);trace_rmnet_shs_wq_high(
+DATARMNETa0ecb9daac,DATARMNET1fc50aac59,(0x16e8+787-0xc0c),(0x16e8+787-0xc0c),
+(0x16e8+787-0xc0c),(0x16e8+787-0xc0c),NULL,NULL);}void DATARMNET95736008d9(void)
+{struct DATARMNETc8fdbf9c85*DATARMNET7bea4a06a6=&DATARMNET6cdd58e74c;struct 
+DATARMNET228056d4b7*DATARMNET373ff1422a;u64 DATARMNETc7c10881f4,
+DATARMNET4a7d30059b,DATARMNETed01f76643;u64 DATARMNET629c75e1fa,
+DATARMNET253a9fc708;u64 DATARMNET264b01f4d5,DATARMNET53ce143c7e=
+(0xd2d+202-0xdf7);u16 DATARMNET42a992465f,DATARMNETab4cf0ad84,
+DATARMNET0c72af011b;int flows;for(DATARMNET42a992465f=(0xd2d+202-0xdf7);
+DATARMNET42a992465f<DATARMNETc6782fed88;DATARMNET42a992465f++){flows=
+DATARMNET7bea4a06a6->DATARMNET73464778dc[DATARMNET42a992465f].flows;if(flows<=
+(0xd2d+202-0xdf7))continue;DATARMNET373ff1422a=&DATARMNET7bea4a06a6->
+DATARMNET73464778dc[DATARMNET42a992465f];DATARMNETc7c10881f4=DATARMNET373ff1422a
+->DATARMNET324c1a8f98;DATARMNET4a7d30059b=DATARMNET373ff1422a->
+DATARMNET27c3925eff;DATARMNETed01f76643=DATARMNET373ff1422a->DATARMNET253a9fc708
+;DATARMNET264b01f4d5=DATARMNET713717107f[DATARMNET42a992465f];
+DATARMNET53ce143c7e=DATARMNET4793ed48af[DATARMNET42a992465f];if(
+DATARMNET362b15f941(DATARMNET42a992465f)){DATARMNETab4cf0ad84=
+DATARMNETcab56af6d5;DATARMNET0c72af011b=(0xeb7+698-0x110d)-DATARMNETcab56af6d5;}
+else{DATARMNET0c72af011b=DATARMNETcab56af6d5;DATARMNETab4cf0ad84=
+(0xeb7+698-0x110d)-DATARMNETcab56af6d5;}DATARMNET629c75e1fa=(DATARMNET4a7d30059b
++DATARMNETed01f76643)/(0xd1f+216-0xdf5);DATARMNET253a9fc708=((
+DATARMNETab4cf0ad84*DATARMNETc7c10881f4)+(DATARMNET0c72af011b*
+DATARMNET629c75e1fa))/(DATARMNETab4cf0ad84+DATARMNET0c72af011b);
+DATARMNET373ff1422a->DATARMNET253a9fc708=DATARMNET253a9fc708;
+trace_rmnet_shs_wq_high(DATARMNET39a68a0eba,DATARMNETde65aa00a6,
+DATARMNET42a992465f,DATARMNETc7c10881f4,DATARMNET4a7d30059b,DATARMNET253a9fc708,
+NULL,NULL);if((DATARMNET253a9fc708>DATARMNET264b01f4d5)||(((0xd26+209-0xdf6)<<
+DATARMNET42a992465f)&(DATARMNETecc0627c70.DATARMNETba3f7a11ef|
+DATARMNET121c8bc82a))||!cpu_online(DATARMNET42a992465f)||((DATARMNET253a9fc708<
+DATARMNET53ce143c7e)&&(DATARMNETc7c10881f4<DATARMNET53ce143c7e)))
+DATARMNET466244e5d6(DATARMNET42a992465f);}}void DATARMNETe00453a3e4(struct 
+DATARMNET9b44b71ee9*ep){int DATARMNET9025861a27;int DATARMNETef87f9e251;u16 
+DATARMNETb773055ecd;u16 DATARMNETc312f6517d;u16 DATARMNETc35b40fa7b;u8 
+DATARMNETffd83bb362=(0xd2d+202-0xdf7);u8 DATARMNET24f6ce5dc0=(0xd2d+202-0xdf7);
+if(!ep){DATARMNET68d84e7b98[DATARMNETb8fe2c0e64]++;return;}DATARMNETb773055ecd=
+ep->DATARMNET9fb369ce5f;DATARMNETc312f6517d=ep->DATARMNET24a91635db;
+DATARMNETc35b40fa7b=ep->DATARMNET1a1d89d417;memset(ep->DATARMNET5af04d0405,-
+(0xd26+209-0xdf6),sizeof(*ep->DATARMNET5af04d0405)*DATARMNETc6782fed88);memset(
+ep->DATARMNET7167e10d99,-(0xd26+209-0xdf6),sizeof(*ep->DATARMNET7167e10d99)*
+DATARMNETc6782fed88);do{DATARMNET9025861a27=DATARMNET362c14e98b(
+DATARMNETc312f6517d&~DATARMNETecc0627c70.DATARMNETba3f7a11ef&~
+DATARMNET121c8bc82a);if(DATARMNET9025861a27>=(0xd2d+202-0xdf7)){ep->
+DATARMNET5af04d0405[DATARMNETffd83bb362]=DATARMNET9025861a27;DATARMNETc312f6517d
+=DATARMNETc312f6517d&~((0xd26+209-0xdf6)<<DATARMNET9025861a27);
+DATARMNETffd83bb362++;}else{break;}}while(DATARMNETc312f6517d!=(0xd2d+202-0xdf7)
+);trace_rmnet_shs_wq_low(DATARMNET39a68a0eba,DATARMNETb9205423e5,ep->
+DATARMNET5af04d0405[(0xd2d+202-0xdf7)],ep->DATARMNET5af04d0405[(0xd26+209-0xdf6)
+],ep->DATARMNET5af04d0405[(0xd1f+216-0xdf5)],ep->DATARMNETd7a83774f8,ep,NULL);do
+{DATARMNETef87f9e251=DATARMNET362c14e98b(DATARMNETc35b40fa7b&~
+DATARMNETecc0627c70.DATARMNETba3f7a11ef&~DATARMNET121c8bc82a);if(
+DATARMNETef87f9e251>=(0xd2d+202-0xdf7)){ep->DATARMNET7167e10d99[
+DATARMNET24f6ce5dc0]=DATARMNETef87f9e251;DATARMNETc35b40fa7b=DATARMNETc35b40fa7b
+&~((0xd26+209-0xdf6)<<DATARMNETef87f9e251);DATARMNET24f6ce5dc0++;}else break;}
+while(DATARMNETc35b40fa7b!=(0xd2d+202-0xdf7));ep->DATARMNETd7a83774f8=
+DATARMNETffd83bb362;ep->DATARMNET847276e5af=DATARMNET24f6ce5dc0;ep->
+DATARMNET6bda8fe27e=(0xd2d+202-0xdf7);ep->DATARMNET121a654efd=(0xd2d+202-0xdf7);
+trace_rmnet_shs_wq_low(DATARMNET39a68a0eba,DATARMNETffec99a10f,ep->
+DATARMNET7167e10d99[(0xd2d+202-0xdf7)],ep->DATARMNET7167e10d99[(0xd26+209-0xdf6)
+],ep->DATARMNET7167e10d99[(0xd1f+216-0xdf5)],ep->DATARMNET847276e5af,ep,NULL);
+return;}void DATARMNET0a6fb12cb2(void){struct DATARMNET9b44b71ee9*ep=NULL;
+list_for_each_entry(ep,&DATARMNET30a3e83974,DATARMNET0763436b8d){if(!ep->
+DATARMNET4a4e6f66b5)continue;DATARMNETe00453a3e4(ep);}}static int 
+DATARMNET1154e4fac6(ktime_t time,atomic_long_t DATARMNET64bb8a8f57){int ret=
+false;u32 flows=atomic_long_read(&DATARMNETecc0627c70.DATARMNET64bb8a8f57);if(
+time>DATARMNETa804c0b904)ret=true;else if(flows>DATARMNET1c2d76f636&&time>
+DATARMNET2922c89d50)ret=true;else if(flows>DATARMNET7a815512d3&&time>
+DATARMNET270b564b55)ret=true;return ret;}void DATARMNET39391a8bc5(u8 
+DATARMNETcd94e0d3c7){struct DATARMNET63d7680df2*node_p=NULL;ktime_t 
+DATARMNETf48008e7b6;struct DATARMNET6c78e47d24*DATARMNETd2a694d52a=NULL;struct 
+list_head*DATARMNET7b34b7b5be=NULL,*next=NULL;rcu_read_lock();spin_lock_bh(&
+DATARMNET3764d083f0);list_for_each_safe(DATARMNET7b34b7b5be,next,&
+DATARMNET9825511866){DATARMNETd2a694d52a=list_entry(DATARMNET7b34b7b5be,struct 
+DATARMNET6c78e47d24,DATARMNET6de26f0feb);if(DATARMNETd2a694d52a->
+DATARMNET63b1a086d5==NULL)continue;if(DATARMNETecc0627c70.DATARMNET75af9f3c31&&!
+DATARMNETcd94e0d3c7)continue;node_p=DATARMNETd2a694d52a->DATARMNET63b1a086d5;
+DATARMNETf48008e7b6=DATARMNET36cfa76181(DATARMNETd2a694d52a->DATARMNET42ceaf5cc2
+);if((DATARMNET1154e4fac6(DATARMNETf48008e7b6,DATARMNETecc0627c70.
+DATARMNET64bb8a8f57)&&((node_p->DATARMNET85c698ec34&&!rcu_dereference(
+rmnet_shs_switch))||!node_p->DATARMNET85c698ec34))||DATARMNETcd94e0d3c7){
+trace_rmnet_shs_wq_low(DATARMNET394831f22a,DATARMNET5e2c5adaae,node_p->hash,
+DATARMNETf48008e7b6,(0x16e8+787-0xc0c),(0x16e8+787-0xc0c),node_p,
+DATARMNETd2a694d52a);DATARMNET23c7ddd780(node_p,DATARMNET5b5927fd7e);
+DATARMNET3669e7b703(DATARMNETd2a694d52a->DATARMNET7c894c2f8f);if(node_p){if(
+node_p->DATARMNET80eb31d7b8){spin_lock_bh(&DATARMNETd83ee17944);
+DATARMNETde8ee16f92(node_p);hash_del_rcu(&node_p->list);node_p->
+DATARMNET04c88b8191.next=NULL;node_p->DATARMNET04c88b8191.prev=NULL;kfree(node_p
+);spin_unlock_bh(&DATARMNETd83ee17944);}else{DATARMNETde8ee16f92(node_p);
+hash_del_rcu(&node_p->list);node_p->DATARMNET04c88b8191.next=NULL;node_p->
+DATARMNET04c88b8191.prev=NULL;kfree(node_p);}}rm_err(
+"\x53\x48\x53\x5f\x46\x4c\x4f\x57\x3a\x20\x72\x65\x6d\x6f\x76\x69\x6e\x67\x20\x66\x6c\x6f\x77\x20\x30\x78\x25\x78\x20\x6f\x6e\x20\x63\x70\x75\x5b\x25\x64\x5d\x20"
+"\x70\x70\x73\x3a\x20\x25\x6c\x6c\x75\x20\x61\x76\x67\x5f\x70\x70\x73\x3a\x20\x25\x6c\x6c\x75"
+,DATARMNETd2a694d52a->hash,DATARMNETd2a694d52a->DATARMNET7c894c2f8f,
+DATARMNETd2a694d52a->DATARMNET324c1a8f98,DATARMNETd2a694d52a->
+DATARMNET253a9fc708);DATARMNETb4a6870b3b(DATARMNETd2a694d52a);if(
+DATARMNETd2a694d52a->DATARMNET0bfc2b2c85==(0xd2d+202-0xdf7)||DATARMNETcd94e0d3c7
+){DATARMNET2fe780019f(DATARMNETd2a694d52a);DATARMNETd2a694d52a->
+DATARMNET6de26f0feb.next=NULL;DATARMNETd2a694d52a->DATARMNET6de26f0feb.prev=NULL
+;kfree(DATARMNETd2a694d52a);}else{DATARMNETa6e92c3315(DATARMNETd2a694d52a);}
+atomic_long_dec(&DATARMNETecc0627c70.DATARMNET64bb8a8f57);}}spin_unlock_bh(&
+DATARMNET3764d083f0);rcu_read_unlock();}void DATARMNETe69c918dc8(struct 
+DATARMNET9b44b71ee9*ep){struct rps_map*map;u8 len=(0xd2d+202-0xdf7);if(!ep||!ep
+->ep){DATARMNET68d84e7b98[DATARMNETb8fe2c0e64]++;return;}rcu_read_lock();if(!ep
+->ep){pr_info(
+"\x20\x72\x6d\x6e\x65\x74\x5f\x73\x68\x73\x20\x69\x6e\x76\x61\x6c\x69\x64\x20\x73\x74\x61\x74\x65\x20\x25\x70"
+,ep->ep);DATARMNET68d84e7b98[DATARMNETb8fe2c0e64]++;return;}map=rcu_dereference(
+ep->ep->_rx->rps_map);ep->DATARMNET9fb369ce5f=(0xd2d+202-0xdf7);if(map!=NULL){
+for(len=(0xd2d+202-0xdf7);len<map->len;len++)ep->DATARMNET9fb369ce5f|=(
+(0xd26+209-0xdf6)<<map->cpus[len]);}rcu_read_unlock();ep->DATARMNET24a91635db=ep
+->DATARMNET9fb369ce5f&(0xeb7+1101-0x12f5);ep->DATARMNET1a1d89d417=ep->
+DATARMNET9fb369ce5f&(0xbf7+4405-0x1c3c);}void DATARMNETd6ee05f1b4(struct 
+net_device*dev){struct DATARMNET9b44b71ee9*ep=NULL;struct DATARMNET9b44b71ee9*
+tmp=NULL;if(!dev){DATARMNET68d84e7b98[DATARMNETf5157a9b85]++;return;}
+spin_lock_bh(&DATARMNETec2a4f5211);list_for_each_entry_safe(ep,tmp,&
+DATARMNET30a3e83974,DATARMNET0763436b8d){if(ep->ep==dev){ep->DATARMNET4a4e6f66b5
+=(0xd2d+202-0xdf7);DATARMNETf7d317ed55(ep);ep->DATARMNET0763436b8d.next=NULL;ep
+->DATARMNET0763436b8d.prev=NULL;kfree(ep);break;}}spin_unlock_bh(&
+DATARMNETec2a4f5211);}void DATARMNET7492293980(struct net_device*dev){struct 
+DATARMNET9b44b71ee9*ep=NULL;if(!dev){DATARMNET68d84e7b98[DATARMNETf5157a9b85]++;
+return;}spin_lock_bh(&DATARMNETec2a4f5211);ep=kzalloc(sizeof(*ep),GFP_ATOMIC);if
+(!ep){DATARMNET68d84e7b98[DATARMNET40ceff078e]++;spin_unlock_bh(&
+DATARMNETec2a4f5211);return;}ep->ep=dev;ep->DATARMNET4a4e6f66b5=
+(0xd26+209-0xdf6);INIT_LIST_HEAD(&ep->DATARMNET0763436b8d);DATARMNETe69c918dc8(
+ep);DATARMNET4095253347(ep);spin_unlock_bh(&DATARMNETec2a4f5211);}void 
+DATARMNET039ac6d55d(void){struct DATARMNET9b44b71ee9*ep=NULL;list_for_each_entry
+(ep,&DATARMNET30a3e83974,DATARMNET0763436b8d){if(!ep->DATARMNET4a4e6f66b5)
+continue;DATARMNETe69c918dc8(ep);ep->DATARMNET257fc4b2d4=(0xd2d+202-0xdf7);ep->
+DATARMNET4eb77c78e6=(0xd2d+202-0xdf7);}}noinline void DATARMNETedc898218c(void){
+int cpu,DATARMNETc790ff30fc;int DATARMNET421230d879;struct DATARMNET6c78e47d24*
+DATARMNETd2a694d52a=NULL;for(cpu=(0xd2d+202-0xdf7);cpu<DATARMNETc6782fed88;cpu++
+){DATARMNET2d482e7d9f[cpu]=(0xd2d+202-0xdf7);DATARMNET0997c5650d[cpu].seg=
+(0xd2d+202-0xdf7);}rcu_read_lock();list_for_each_entry_rcu(DATARMNETd2a694d52a,&
+DATARMNET9825511866,DATARMNET6de26f0feb){if(DATARMNETd2a694d52a->
+DATARMNET0dc393a345==(0xd2d+202-0xdf7))continue;if(DATARMNETd2a694d52a->
+DATARMNET253a9fc708>DATARMNET832dcfb5f8&&DATARMNETd2a694d52a->
+DATARMNET4b4a76b094>DATARMNET59f7cb903f)if(DATARMNETd2a694d52a->
+DATARMNET7c894c2f8f<DATARMNETc6782fed88){DATARMNET421230d879=DATARMNETd2a694d52a
+->DATARMNET7c894c2f8f;DATARMNET2d482e7d9f[DATARMNET421230d879]++;}
+DATARMNETc790ff30fc=DATARMNETd2a694d52a->DATARMNET7c894c2f8f;if(
+DATARMNETc790ff30fc>=DATARMNETc6782fed88||DATARMNETc790ff30fc<(0xd2d+202-0xdf7))
+{continue;}if(DATARMNETd2a694d52a->DATARMNET87636d0152>(0xd2d+202-0xdf7)){
+DATARMNET0997c5650d[DATARMNETc790ff30fc].seg++;}}rcu_read_unlock();}void 
+DATARMNETcd6e26f0ad(void){struct timespec64 time;struct DATARMNET6c78e47d24*
+DATARMNETd2a694d52a=NULL;(void)ktime_get_boottime_ts64(&time);
+DATARMNETb3a4036d6d=DATARMNETe6671dbf38(time.tv_sec)+time.tv_nsec;
+DATARMNET039ac6d55d();DATARMNETe46c480d71();DATARMNETae3b7a67f8();
+DATARMNETdb368d4fbd();if((DATARMNETd619186789&DATARMNET81ec51f31c)==
+DATARMNET81ec51f31c)DATARMNET6f7f8bf494();rcu_read_lock();
+list_for_each_entry_rcu(DATARMNETd2a694d52a,&DATARMNET9825511866,
+DATARMNET6de26f0feb){if(DATARMNETd2a694d52a->DATARMNET0dc393a345==
+(0xd2d+202-0xdf7))continue;if(DATARMNETd2a694d52a->DATARMNET63b1a086d5){
+DATARMNET9a7769cf21(DATARMNETd2a694d52a);DATARMNET5b2ed86112(DATARMNETd2a694d52a
+);if(DATARMNETc252c204a8){if(DATARMNETd2a694d52a->DATARMNET63b1a086d5->
+DATARMNET80eb31d7b8){DATARMNET312b06829d(DATARMNETd2a694d52a,&
+DATARMNET922b4752e2);}else{DATARMNET6f4b0915d3(DATARMNETd2a694d52a,&
+DATARMNET3208cd0982);}if(!DATARMNET362b15f941(DATARMNETd2a694d52a->
+DATARMNET7c894c2f8f)){DATARMNET24e4475345(DATARMNETd2a694d52a,&
+DATARMNET6c23f11e81);}if(DATARMNETd2a694d52a->DATARMNET1e9d25d9ff==IPPROTO_TCP){
+DATARMNET28a80d526e(DATARMNETd2a694d52a,&DATARMNETf91b305f4e);}}else{
+DATARMNETd2a694d52a->DATARMNET63b1a086d5->DATARMNET341ea38662->
+DATARMNET87636d0152=(0xd2d+202-0xdf7);}}}rcu_read_unlock();DATARMNET617b443145()
+;DATARMNET0ce3f33785();DATARMNET8b2fb5dc3c();if(DATARMNETc252c204a8){rm_err(
+"\x25\x73",
+"\x53\x48\x53\x5f\x55\x50\x44\x41\x54\x45\x3a\x20\x55\x73\x65\x72\x73\x70\x61\x63\x65\x20\x63\x6f\x6e\x6e\x65\x63\x74\x65\x64\x2c\x20\x72\x65\x6c\x79\x69\x6e\x67\x20\x6f\x6e\x20\x75\x73\x65\x72\x73\x70\x61\x63\x65\x20\x65\x76\x61\x6c\x75\x61\x74\x69\x6f\x6e"
+);DATARMNET7792d4f4ad(&DATARMNETe46ae760db,&DATARMNET6c23f11e81,&
+DATARMNETf91b305f4e,&DATARMNET3208cd0982,&DATARMNET922b4752e2);
+DATARMNETa1b141715b(&DATARMNET6c23f11e81);DATARMNET3af54cd726(&
+DATARMNETf91b305f4e);DATARMNETb177316a15(&DATARMNETe46ae760db);
+DATARMNETcc489fbbad(&DATARMNET3208cd0982);DATARMNETf7730d41c1(&
+DATARMNET922b4752e2);}else{rm_err("\x25\x73",
+"\x53\x48\x53\x5f\x55\x50\x44\x41\x54\x45\x3a\x20\x73\x68\x73\x20\x75\x73\x65\x72\x73\x70\x61\x63\x65\x20\x6e\x6f\x74\x20\x63\x6f\x6e\x6e\x65\x63\x74\x65\x64\x2c\x20\x75\x73\x69\x6e\x67\x20\x64\x65\x66\x61\x75\x6c\x74\x20\x6c\x6f\x67\x69\x63"
+);DATARMNET95736008d9();}DATARMNET0a6fb12cb2();DATARMNETedc898218c();}void 
+DATARMNETb4b5fc9686(struct work_struct*DATARMNET33110a3ff5){unsigned long 
+DATARMNET28085cfd14;trace_rmnet_shs_wq_high(DATARMNET4fe8e8c1a9,
+DATARMNET5a417740cb,(0x16e8+787-0xc0c),(0x16e8+787-0xc0c),(0x16e8+787-0xc0c),
+(0x16e8+787-0xc0c),NULL,NULL);DATARMNETd619186789++;spin_lock_bh(&
+DATARMNETec2a4f5211);DATARMNETcd6e26f0ad();spin_unlock_bh(&DATARMNETec2a4f5211);
+DATARMNET39391a8bc5(DATARMNET53bef3c026);DATARMNET5e1aaed12b();
+DATARMNET28085cfd14=msecs_to_jiffies(DATARMNET1fc3ad67fd);queue_delayed_work(
+DATARMNETf141197982,&DATARMNET9dc7755be5->DATARMNET1150269da2,
+DATARMNET28085cfd14);trace_rmnet_shs_wq_high(DATARMNET4fe8e8c1a9,
+DATARMNET848d2ddfa7,(0x16e8+787-0xc0c),(0x16e8+787-0xc0c),(0x16e8+787-0xc0c),
+(0x16e8+787-0xc0c),NULL,NULL);}void DATARMNET5fb4151598(void){struct 
+DATARMNET9b44b71ee9*ep=NULL;struct list_head*DATARMNET7b34b7b5be=NULL,*next=NULL
+;list_for_each_safe(DATARMNET7b34b7b5be,next,&DATARMNET30a3e83974){ep=list_entry
+(DATARMNET7b34b7b5be,struct DATARMNET9b44b71ee9,DATARMNET0763436b8d);
+trace_rmnet_shs_wq_high(DATARMNET5e796836fb,DATARMNET1ee5d0565d,
+(0x16e8+787-0xc0c),(0x16e8+787-0xc0c),(0x16e8+787-0xc0c),(0x16e8+787-0xc0c),ep,
+NULL);DATARMNETf7d317ed55(ep);ep->DATARMNET0763436b8d.next=NULL;ep->
+DATARMNET0763436b8d.prev=NULL;kfree(ep);}}void DATARMNETf7dcab9a9e(void){if(!
+DATARMNETf141197982||!DATARMNET9dc7755be5)return;DATARMNET28d33bd09f();
+DATARMNET5945236cd3(DATARMNET19092afcc2);trace_rmnet_shs_wq_high(
+DATARMNETc1e19aa345,DATARMNET7cf840e991,(0x16e8+787-0xc0c),(0x16e8+787-0xc0c),
+(0x16e8+787-0xc0c),(0x16e8+787-0xc0c),NULL,NULL);cancel_delayed_work_sync(&
+DATARMNET9dc7755be5->DATARMNET1150269da2);drain_workqueue(DATARMNETf141197982);
+destroy_workqueue(DATARMNETf141197982);kfree(DATARMNET9dc7755be5);
+DATARMNET9dc7755be5=NULL;DATARMNETf141197982=NULL;DATARMNET39391a8bc5(
+DATARMNETc5db038c35);DATARMNET5fb4151598();trace_rmnet_shs_wq_high(
+DATARMNETc1e19aa345,DATARMNETa5cdfd53b3,(0x16e8+787-0xc0c),(0x16e8+787-0xc0c),
+(0x16e8+787-0xc0c),(0x16e8+787-0xc0c),NULL,NULL);}void DATARMNETd3d1d13f44(void)
+{u8 DATARMNET42a992465f;struct DATARMNET228056d4b7*DATARMNET7bea4a06a6;for(
+DATARMNET42a992465f=(0xd2d+202-0xdf7);DATARMNET42a992465f<DATARMNETc6782fed88;
+DATARMNET42a992465f++){trace_rmnet_shs_wq_high(DATARMNET92b282b12c,
+DATARMNET57cad43bb7,DATARMNET42a992465f,(0x16e8+787-0xc0c),(0x16e8+787-0xc0c),
+(0x16e8+787-0xc0c),NULL,NULL);DATARMNET7bea4a06a6=&DATARMNET6cdd58e74c.
+DATARMNET73464778dc[DATARMNET42a992465f];INIT_LIST_HEAD(&DATARMNET7bea4a06a6->
+DATARMNETab5c1e9ad5);DATARMNET7bea4a06a6->DATARMNET42a992465f=
+DATARMNET42a992465f;}}void DATARMNET4063c95208(void){int cpu;DATARMNETaf95716235
+++;if(DATARMNETf141197982&&DATARMNET9dc7755be5)cancel_delayed_work_sync(&
+DATARMNET9dc7755be5->DATARMNET1150269da2);for(cpu=(0xd2d+202-0xdf7);cpu<
+DATARMNETc6782fed88;cpu++)DATARMNET2d482e7d9f[cpu]=(0xd2d+202-0xdf7);
+rcu_read_lock();if((((0xd26+209-0xdf6)<<DATARMNETecc0627c70.DATARMNET7d667e828e)
+&DATARMNETbc3c416b77)&&(((0xd26+209-0xdf6)<<(0xd26+209-0xdf6))&~
+DATARMNET121c8bc82a)){DATARMNETecc0627c70.DATARMNET5c24e1df05=(0xd26+209-0xdf6);
+DATARMNET8f9da46b14();DATARMNETb7ddf3c5dd[DATARMNET6ea8a58f4e]++;}
+rcu_read_unlock();}void DATARMNET7b6c061b06(void){DATARMNET7e039054c6++;if(
+DATARMNETf141197982&&DATARMNET9dc7755be5)queue_delayed_work(DATARMNETf141197982,
+&DATARMNET9dc7755be5->DATARMNET1150269da2,(0xd2d+202-0xdf7));}void 
+DATARMNET3ae0d614d6(void){if(DATARMNETf141197982)return;DATARMNETf5f83b943f();
+trace_rmnet_shs_wq_high(DATARMNET9104d544fa,DATARMNET1b421b0381,
+(0x16e8+787-0xc0c),(0x16e8+787-0xc0c),(0x16e8+787-0xc0c),(0x16e8+787-0xc0c),NULL
+,NULL);DATARMNETf141197982=alloc_workqueue(
+"\x72\x6d\x6e\x65\x74\x5f\x73\x68\x73\x5f\x77\x71",WQ_UNBOUND,(0xd26+209-0xdf6))
+;if(!DATARMNETf141197982){DATARMNET68d84e7b98[DATARMNETecdf13872c]++;return;}
+DATARMNET9dc7755be5=kmalloc(sizeof(struct DATARMNETa144e2bd00),GFP_ATOMIC);if(!
+DATARMNET9dc7755be5){DATARMNET68d84e7b98[DATARMNETd1687e0776]++;
+DATARMNETf7dcab9a9e();return;}DATARMNETf5b8fce55d(DATARMNET138a989ecb,
+(0xd26+209-0xdf6));DATARMNETd3d1d13f44();INIT_DELAYED_WORK(&DATARMNET9dc7755be5
+->DATARMNET1150269da2,DATARMNETb4b5fc9686);trace_rmnet_shs_wq_high(
+DATARMNET9104d544fa,DATARMNETb196f64ee0,(0x16e8+787-0xc0c),(0x16e8+787-0xc0c),
+(0x16e8+787-0xc0c),(0x16e8+787-0xc0c),NULL,NULL);}int DATARMNETb709a938b5(u16 
+cpu){int flows=-(0xd26+209-0xdf6);if(cpu>=DATARMNETc6782fed88){
+DATARMNET68d84e7b98[DATARMNET709b59b0e6]++;return flows;}flows=
+DATARMNET6cdd58e74c.DATARMNET73464778dc[cpu].flows;trace_rmnet_shs_wq_low(
+DATARMNET39a68a0eba,DATARMNET0e287157de,cpu,flows,(0x16e8+787-0xc0c),
+(0x16e8+787-0xc0c),NULL,NULL);return flows;}int DATARMNET392890a12b(void){u16 
+cpu;int DATARMNET59bd820724=-(0xd26+209-0xdf6);int DATARMNET847bd62811;for(cpu=
+(0xd2d+202-0xdf7);cpu<DATARMNETc6782fed88;cpu++){DATARMNET847bd62811=
+DATARMNETb709a938b5(cpu);if(DATARMNET847bd62811>DATARMNET59bd820724)
+DATARMNET59bd820724=DATARMNET847bd62811;trace_rmnet_shs_wq_low(
+DATARMNET39a68a0eba,DATARMNETc2a28b3abe,cpu,DATARMNET847bd62811,
+DATARMNET59bd820724,(0x16e8+787-0xc0c),NULL,NULL);}return DATARMNET59bd820724;}
+int DATARMNETdd3b17f0c3(u16 cpu){u32 DATARMNET1802cc4803=(0xd26+209-0xdf6)<<
+(0xd11+230-0xdf3);u32 DATARMNETb998398361=(0xd26+209-0xdf6);u16 
+DATARMNETaff7dd6611=(0xd2d+202-0xdf7);u16 DATARMNET2ab4b15bd2=(0xd11+230-0xdf3);
+int DATARMNET59bd820724=-(0xd26+209-0xdf6);int DATARMNET847bd62811;if(cpu>
+DATARMNETc6782fed88){DATARMNET68d84e7b98[DATARMNET709b59b0e6]++;return 
+DATARMNET59bd820724;}DATARMNETb998398361<<=cpu;if(DATARMNETb998398361>=
+DATARMNET1802cc4803){DATARMNETaff7dd6611=(0xd11+230-0xdf3);DATARMNET2ab4b15bd2=
+DATARMNETc6782fed88;}for(;DATARMNETaff7dd6611<DATARMNET2ab4b15bd2;
+DATARMNETaff7dd6611++){DATARMNET847bd62811=DATARMNETb709a938b5(
+DATARMNETaff7dd6611);if(DATARMNET847bd62811>DATARMNET59bd820724)
+DATARMNET59bd820724=DATARMNET847bd62811;}trace_rmnet_shs_wq_low(
+DATARMNET39a68a0eba,DATARMNET23906b61e9,DATARMNETaff7dd6611,DATARMNET2ab4b15bd2,
+cpu,DATARMNET59bd820724,NULL,NULL);return DATARMNET59bd820724;}void 
+DATARMNET0349051465(u16 cpu){if(cpu>=DATARMNETc6782fed88){DATARMNET68d84e7b98[
+DATARMNET54b67b8a75]++;return;}DATARMNET6cdd58e74c.DATARMNET73464778dc[cpu].
+flows++;trace_rmnet_shs_wq_low(DATARMNET39a68a0eba,DATARMNET0832f93bf0,cpu,
+DATARMNET6cdd58e74c.DATARMNET73464778dc[cpu].flows,(0x16e8+787-0xc0c),
+(0x16e8+787-0xc0c),NULL,NULL);}void DATARMNET3669e7b703(u16 cpu){if(cpu>=
+DATARMNETc6782fed88){DATARMNET68d84e7b98[DATARMNET54b67b8a75]++;return;}if(
+DATARMNET6cdd58e74c.DATARMNET73464778dc[cpu].flows>(0xd2d+202-0xdf7))
+DATARMNET6cdd58e74c.DATARMNET73464778dc[cpu].flows--;trace_rmnet_shs_wq_low(
+DATARMNET39a68a0eba,DATARMNETecb00bceb2,cpu,DATARMNET6cdd58e74c.
+DATARMNET73464778dc[cpu].flows,(0x16e8+787-0xc0c),(0x16e8+787-0xc0c),NULL,NULL);
+}

+ 143 - 0
qcom/opensource/datarmnet-ext/shs/rmnet_shs_wq.h

@@ -0,0 +1,143 @@
+/* Copyright (c) 2018-2021, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2022-2024 Qualcomm Innovation Center, Inc. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 and
+ * only version 2 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ */
+
+#ifndef DATARMNETa58841a91d
+#define DATARMNETa58841a91d
+#include "rmnet_shs_config.h"
+#include "rmnet_shs.h"
+#include <linux/ktime.h>
+#include <linux/arch_topology.h>
+#define DATARMNETdfb4d931bc  (0xd2d+202-0xdf7)
+#define DATARMNETf0dc5ccb6f (0xd2d+202-0xdf7)
+#define rm_err(DATARMNET6c3cf5865b, ...)  \
+	do { if (DATARMNETdfb4d931bc) pr_err(DATARMNET6c3cf5865b, __VA_ARGS__); } while\
+ ((0xd2d+202-0xdf7))
+#define DATARMNETd2da2e8466(DATARMNET6c3cf5865b, ...)  \
+	do { if (DATARMNETf0dc5ccb6f) pr_err(DATARMNET6c3cf5865b, __VA_ARGS__); } while\
+ ((0xd2d+202-0xdf7))
+#define DATARMNET2f9ea73326 (0xeb7+1174-0x132d)
+#define DATARMNET855e9d7062(DATARMNET5f1b691e95) ((DATARMNET5f1b691e95)*\
+1000000000)
+#define DATARMNETe6671dbf38(DATARMNET5f1b691e95) ((DATARMNET5f1b691e95)*\
+1000000000)
+#define DATARMNET36cfa76181(DATARMNET5f1b691e95) ((DATARMNET5f1b691e95)/\
+1000000000)
+#define DATARMNET64577537b7(DATARMNET5f1b691e95) ((DATARMNET5f1b691e95)*\
+(0xd35+210-0xdff))
+#define DATARMNETac617c8dce(DATARMNET5f1b691e95) ((DATARMNET5f1b691e95)*1000000\
+  )
+#define DATARMNET138a989ecb (0xeb7+1158-0x132d)
+#define DATARMNETe4c625a3a3  (0xeb7+698-0x110d)
+extern struct list_head DATARMNET30a3e83974;struct DATARMNET9b44b71ee9{u64 
+DATARMNET4eb77c78e6;u64 DATARMNET257fc4b2d4;struct list_head DATARMNET0763436b8d
+;struct net_device*ep;int DATARMNET5af04d0405[DATARMNETc6782fed88];int 
+DATARMNET7167e10d99[DATARMNETc6782fed88];u16 DATARMNET24a91635db;u16 
+DATARMNET1a1d89d417;u16 DATARMNET9fb369ce5f;u8 DATARMNET4a4e6f66b5;int 
+DATARMNET6bda8fe27e;int DATARMNET121a654efd;int DATARMNETd7a83774f8;int 
+DATARMNET847276e5af;};struct DATARMNET0737a3aa12{struct list_head 
+DATARMNETd0c222566b;struct DATARMNET9b44b71ee9 ep;};enum DATARMNET0780ebfa33{
+DATARMNET8866cd9e9a,DATARMNETed5a873a00,DATARMNETd7a3f55a51,DATARMNETefe8657028,
+DATARMNET37da25c8e8,DATARMNET5dccc475d4,DATARMNET5898b2a84b,DATARMNET0fec83de79,
+DATARMNET3563036124,};struct DATARMNET6c78e47d24{unsigned long int 
+DATARMNET61e1ee0e95[DATARMNET3563036124];struct list_head DATARMNET742867e97a;
+struct list_head DATARMNET6de26f0feb;struct DATARMNET63d7680df2*
+DATARMNET63b1a086d5;ktime_t DATARMNETadd51beef4;ktime_t DATARMNET68714ac92c;
+ktime_t DATARMNET42ceaf5cc2;u64 DATARMNET4b4a76b094;u64 rx_bytes;u64 
+DATARMNETa7352711af;u64 DATARMNET324c1a8f98;u64 DATARMNETbb80fccd97;u64 
+DATARMNET6c2816c16a;u64 DATARMNET253a9fc708;u64 DATARMNET95266642d1;u64 
+DATARMNET0d682bcb29;u64 DATARMNET20e8fc9db8;u64 DATARMNETd34f4b12cd;u64 
+DATARMNET96e0dea53e;u64 DATARMNET3ecedac168;u64 DATARMNETce5f56eab9;u64 
+DATARMNET6edbc8b649;u64 DATARMNET4025a4ec90;u64 DATARMNETde6a309f37;u32 
+DATARMNET3b7421773f;u32 DATARMNET77b978dd84;u32 DATARMNET9fb369ce5f;u32 
+DATARMNET17f2abdf03;u32 DATARMNET399c840115;u32 DATARMNET1a1d89d417;u32 
+DATARMNETb932033f50;u32 hash;u32 bif;u32 ack_thresh;int DATARMNETb5f5519502;u16 
+DATARMNET6e1a4eaf09;u16 DATARMNET7c894c2f8f;u16 DATARMNET1e9d25d9ff;u8 
+DATARMNET29c6349349;u8 mux_id;u8 DATARMNET0dc393a345;u8 DATARMNET0bfc2b2c85;u8 
+DATARMNET8a4e1d5aaa;u8 DATARMNET87636d0152;};struct DATARMNET228056d4b7{struct 
+list_head DATARMNETab5c1e9ad5;ktime_t DATARMNET68714ac92c;u64 
+DATARMNET9853a006ae;u64 DATARMNETde6a309f37;u64 DATARMNETc589c49a2e;u64 
+DATARMNET7fc41d655d;u64 rx_bytes;u64 DATARMNET57f040bb2c;u64 DATARMNET324c1a8f98
+;u64 DATARMNETbb80fccd97;u64 DATARMNET27c3925eff;u64 DATARMNET8233cb4988;u64 
+DATARMNET253a9fc708;u64 DATARMNETc0b20e240a;u32 DATARMNETae196235f2;u32 
+DATARMNET8b9956a3f9;u32 DATARMNET69770f8ef7;u32 DATARMNET14b0d18481;u32 
+DATARMNET17380ba0f8;int flows;u16 DATARMNET42a992465f;};struct 
+DATARMNETc8fdbf9c85{struct DATARMNET228056d4b7 DATARMNET73464778dc[
+DATARMNETc6782fed88];ktime_t DATARMNET68714ac92c;u64 DATARMNET601156672d;u64 
+DATARMNETbfe25a2160;u64 DATARMNET4947607c52;u64 DATARMNET903a2cea81;u64 
+DATARMNET3067b3dafd;u64 DATARMNET47334112aa;u64 DATARMNET9853a006ae;u64 
+DATARMNETde6a309f37;u64 DATARMNETc589c49a2e;u64 DATARMNET27c3925eff;u64 
+DATARMNET8233cb4988;u64 DATARMNET7fc41d655d;u64 rx_bytes;u64 DATARMNET57f040bb2c
+;u64 DATARMNET324c1a8f98;u64 DATARMNETbb80fccd97;u64 DATARMNET0d682bcb29;u64 
+DATARMNET20e8fc9db8;u32 DATARMNET9fb369ce5f;u32 DATARMNET399c840115;u32 
+DATARMNET1a1d89d417;u32 DATARMNETb932033f50;int DATARMNET5af04d0405[
+DATARMNETc6782fed88];int DATARMNET7167e10d99[DATARMNETc6782fed88];int 
+DATARMNET6bda8fe27e;int DATARMNET121a654efd;int DATARMNETd7a83774f8;int 
+DATARMNET847276e5af;int flows;u8 cpus;};struct DATARMNETa144e2bd00{struct 
+delayed_work DATARMNET1150269da2;};struct DATARMNET47a6995138{struct list_head 
+DATARMNET02523bfb57;u64 DATARMNET18b7a5b761;u64 DATARMNET4da6031170;u64 
+DATARMNET4df302dbd6;u16 DATARMNET42a992465f;};struct DATARMNET09a412b1c6{struct 
+list_head DATARMNETd502c0412a;u64 DATARMNET324c1a8f98;u64 DATARMNET253a9fc708;
+u32 hash;u16 DATARMNET42a992465f;};struct DATARMNETe176be7f7c{struct list_head 
+DATARMNET7287946e7b;union{struct iphdr DATARMNETac9bbaad7c;struct ipv6hdr 
+DATARMNET1688a97aa4;}ip_hdr;union{struct tcphdr tp;struct udphdr up;}
+DATARMNETe33b41dad9;u64 DATARMNET324c1a8f98;u64 DATARMNET253a9fc708;u64 
+DATARMNETbb80fccd97;u64 DATARMNET95266642d1;u64 DATARMNET0d682bcb29;u64 
+DATARMNET20e8fc9db8;u32 hash;u16 DATARMNET42a992465f;u16 trans_proto;u8 mux_id;
+u8 DATARMNETda8e8ae7ed;};struct DATARMNET13c47d154e{struct list_head 
+DATARMNETec0e3cb8f0;union{struct iphdr DATARMNETac9bbaad7c;struct ipv6hdr 
+DATARMNET1688a97aa4;}ip_hdr;union{struct tcphdr tp;struct udphdr up;}
+DATARMNETe33b41dad9;u64 DATARMNET324c1a8f98;u64 DATARMNET253a9fc708;u64 
+DATARMNETbb80fccd97;u64 DATARMNET95266642d1;u64 DATARMNET0d682bcb29;u64 
+DATARMNET20e8fc9db8;u32 hash;u16 DATARMNET42a992465f;u16 trans_proto;u8 mux_id;}
+;struct DATARMNETa52c09a590{struct list_head DATARMNET6f898987df;u64 
+DATARMNET324c1a8f98;u64 DATARMNET253a9fc708;u64 DATARMNETbb80fccd97;u32 hash;u32
+ bif;u32 ack_thresh;u16 DATARMNET42a992465f;};enum DATARMNET8487fb1a16{
+DATARMNET9104d544fa,DATARMNET4fe8e8c1a9,DATARMNETc1e19aa345,DATARMNET5e796836fb,
+DATARMNET238d08f0df,DATARMNET92b282b12c,DATARMNET394831f22a,DATARMNET39a68a0eba,
+DATARMNET0dd7951b5e,DATARMNETa0ecb9daac,};enum DATARMNETb2fa0397cc{
+DATARMNET34ace72e7e,DATARMNET7fc202c4c1,DATARMNET7643ab0f49,DATARMNET1ee5d0565d,
+DATARMNETfab7330394,DATARMNET72f22d7cf7,DATARMNETf81dcb955d,DATARMNET3f2d29c867,
+DATARMNET5a3ea29c57,DATARMNETb43d929c3b,DATARMNET31d8e00b80,DATARMNET8d783e2a07,
+DATARMNET4b15fcda7c,DATARMNET08284be63e,DATARMNET8ce5a018df,DATARMNET57cad43bb7,
+DATARMNET4b58d51c6a,DATARMNETfd4d416388,DATARMNETdb9197631d,DATARMNET067f70ac85,
+DATARMNET91e905574d,DATARMNET35902389b3,DATARMNET29c0bc0151,DATARMNET45edcec1e4,
+DATARMNET5b2500c971,DATARMNET08cee5b48c,DATARMNET5e2c5adaae,DATARMNETb0ed796e8c,
+DATARMNET6bde6a5171,DATARMNET55cd50e666,DATARMNET0832f93bf0,DATARMNETecb00bceb2,
+DATARMNET0e287157de,DATARMNETc2a28b3abe,DATARMNET23906b61e9,DATARMNET95d1ddcb1a,
+DATARMNETbdcc04c8d8,DATARMNETcd209744bd,DATARMNETde65aa00a6,DATARMNETf4dabe20e4,
+DATARMNETb9205423e5,DATARMNETffec99a10f,DATARMNET5c7c474d94,DATARMNET4af220a9f9,
+DATARMNET709474066f,DATARMNET9a286e7654,DATARMNET5a417740cb,DATARMNET848d2ddfa7,
+DATARMNET59a1cb0962,DATARMNET1b421b0381,DATARMNETb196f64ee0,DATARMNET7cf840e991,
+DATARMNETa5cdfd53b3,DATARMNETd7f7ade458,DATARMNET53e4a6b394,DATARMNETd1d3902361,
+DATARMNET1fc50aac59,DATARMNET213a62da0d,DATARMNETf814701a94,DATARMNET166a43f3aa,
+};extern struct DATARMNETe600c5b727 DATARMNET0997c5650d[DATARMNETc6782fed88];
+extern struct list_head DATARMNET9825511866;extern struct workqueue_struct*
+DATARMNETf141197982;void DATARMNET3ae0d614d6(void);void DATARMNETf7dcab9a9e(void
+);void DATARMNET7b6c061b06(void);void DATARMNET4063c95208(void);void 
+DATARMNETe46c480d71(void);void DATARMNET039ac6d55d(void);u64 DATARMNETd406e89a85
+(u32 DATARMNETfaedbb66a9);void DATARMNET350f55bfca(struct DATARMNET63d7680df2*
+node_p);int DATARMNET362c14e98b(u16 DATARMNETfaedbb66a9);int DATARMNETf181a18009
+(struct net_device*dev);int DATARMNET98b2a0ce62(struct net_device*dev);u64 
+DATARMNETfc888b4d3e(u16 cpu);void DATARMNET0349051465(u16 cpu);void 
+DATARMNET3669e7b703(u16 cpu);void DATARMNET54ebea1d15(void);void 
+DATARMNET7492293980(struct net_device*dev);void DATARMNETd6ee05f1b4(struct 
+net_device*dev);void DATARMNET0a6fb12cb2(void);int DATARMNET5f72606f6f(u16 
+DATARMNETc790ff30fc,u16 DATARMNET208ea67e1d,u32 DATARMNET4da4612f1e,u32 
+DATARMNETa3f89581b5);int DATARMNETf85599b9d8(u32 DATARMNET8c11bd9466,u8 
+DATARMNET87636d0152);int DATARMNET1faf2b953f(u32 DATARMNET8c11bd9466,u32 
+ack_thresh);void DATARMNET6bf538fa23(void);void DATARMNETaea4c85748(void);void 
+DATARMNETcd6e26f0ad(void);int DATARMNETdc7bead533(unsigned DATARMNET42a992465f,
+unsigned DATARMNET435f2b5517);
+#endif 
+

+ 353 - 0
qcom/opensource/datarmnet-ext/shs/rmnet_shs_wq_genl.c

@@ -0,0 +1,353 @@
+/* Copyright (c) 2019-2021 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2022-2024 Qualcomm Innovation Center, Inc. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 and
+ * only version 2 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ */
+
+#include "rmnet_shs_modules.h"
+#include "rmnet_shs_common.h"
+#include "rmnet_shs_ll.h"
+#include "rmnet_shs_wq_genl.h"
+#include <net/sock.h>
+#include <linux/skbuff.h>
+MODULE_LICENSE("\x47\x50\x4c\x20\x76\x32");static struct net*DATARMNETb01cbc5ec9
+;static u32 DATARMNET373156e169;static struct net*DATARMNET77097baa98;static u32
+ DATARMNET990a29d492;uint32_t DATARMNET7c4038843f;uint32_t DATARMNETf1e47cb243;
+int DATARMNETc252c204a8;
+#define DATARMNETe429c5f3dd	(0xbf7+4364-0x1c04)
+#define DATARMNET6987463c5e(DATARMNET5f1b691e95)   ((DATARMNET5f1b691e95) * \
+1000000000)
+static struct nla_policy DATARMNET23b45455b1[DATARMNETcecb35ee33+
+(0xd26+209-0xdf6)]={[DATARMNET7d289a7bfa]={.type=NLA_S32},[DATARMNET813a742587]=
+NLA_POLICY_EXACT_LEN(sizeof(struct DATARMNET6c41b886b2)),[DATARMNET50e1cd26c7]=
+NLA_POLICY_EXACT_LEN(sizeof(struct DATARMNET837c876a22)),[DATARMNET6ab4513e45]=
+NLA_POLICY_EXACT_LEN(sizeof(struct DATARMNETbf4d34b241)),[DATARMNET627787b1dd]=
+NLA_POLICY_EXACT_LEN(sizeof(struct DATARMNET1ac24ff95c)),[DATARMNETaa0fe5a855]={
+.type=NLA_NUL_STRING,.len=DATARMNETe429c5f3dd},};
+#define DATARMNETcfe22ed4d3(DATARMNET5aeb0ef9bc, DATARMNETbd9859b58e)			\
+	{						\
+		.cmd	= DATARMNET5aeb0ef9bc,				\
+		.doit	= DATARMNETbd9859b58e,			\
+		.dumpit	= NULL,				\
+		.flags	= (0xd2d+202-0xdf7),				\
+	}
+static const struct genl_ops DATARMNETf2d168ff8d[]={DATARMNETcfe22ed4d3(
+DATARMNETc574b5cfba,DATARMNET740f3b34b3),DATARMNETcfe22ed4d3(DATARMNET8e3adfc5dd
+,DATARMNET29175fb5fc),DATARMNETcfe22ed4d3(DATARMNETffb2945689,
+DATARMNETd81d2866ba),DATARMNETcfe22ed4d3(DATARMNET51b1ee5a68,DATARMNETc850634243
+),DATARMNETcfe22ed4d3(RMNET_SHS_GENL_CMD_LL_FLOW,DATARMNET283f08f439),
+DATARMNETcfe22ed4d3(DATARMNET93b3e11659,DATARMNET9bbfc822c2),};static struct 
+nla_policy DATARMNETd7cd67c4a9[DATARMNETcecb35ee33+(0xd26+209-0xdf6)]={[
+DATARMNETc08daf87d4]=NLA_POLICY_EXACT_LEN(sizeof(struct DATARMNET25187800fe)),[
+DATARMNET8070cc0bdc]=NLA_POLICY_EXACT_LEN(sizeof(struct DATARMNET177911299b)),};
+static const struct genl_ops DATARMNETffa9bcf3ed[]={DATARMNETcfe22ed4d3(
+DATARMNETafee1e9070,DATARMNETd65d1351b9),};struct genl_family 
+DATARMNETecc643c219={.hdrsize=(0xd2d+202-0xdf7),.name=DATARMNET0228d9f101,.
+version=DATARMNET0fa03ac25b,.maxattr=DATARMNETcecb35ee33,.policy=
+DATARMNET23b45455b1,.ops=DATARMNETf2d168ff8d,.n_ops=ARRAY_SIZE(
+DATARMNETf2d168ff8d),};struct genl_family rmnet_shs_genl_msg_family={.hdrsize=
+(0xd2d+202-0xdf7),.name=DATARMNETa35687f809,.version=DATARMNET0fa03ac25b,.
+maxattr=DATARMNETcecb35ee33,.policy=DATARMNETd7cd67c4a9,.ops=DATARMNETffa9bcf3ed
+,.n_ops=ARRAY_SIZE(DATARMNETffa9bcf3ed),};int DATARMNET5d4ca1da1c(struct 
+genl_info*DATARMNET54338da2ff,int val){struct sk_buff*skb;void*msg_head;int rc;
+skb=genlmsg_new(NLMSG_GOODSIZE,GFP_ATOMIC);if(skb==NULL)goto DATARMNETbf4095f79e
+;msg_head=genlmsg_put(skb,(0xd2d+202-0xdf7),DATARMNET54338da2ff->snd_seq+
+(0xd26+209-0xdf6),&DATARMNETecc643c219,(0xd2d+202-0xdf7),DATARMNETc574b5cfba);if
+(msg_head==NULL){rc=-ENOMEM;rm_err(
+"\x53\x48\x53\x5f\x47\x4e\x4c\x3a\x20\x46\x41\x49\x4c\x45\x44\x20\x74\x6f\x20\x6d\x73\x67\x5f\x68\x65\x61\x64\x20\x25\x64" "\n"
+,rc);kfree(skb);goto DATARMNETbf4095f79e;}rc=nla_put_u32(skb,DATARMNET7d289a7bfa
+,val);if(rc!=(0xd2d+202-0xdf7)){rm_err(
+"\x53\x48\x53\x5f\x47\x4e\x4c\x3a\x20\x46\x41\x49\x4c\x45\x44\x20\x6e\x6c\x61\x5f\x70\x75\x74\x20\x25\x64" "\n"
+,rc);kfree(skb);goto DATARMNETbf4095f79e;}genlmsg_end(skb,msg_head);rc=
+genlmsg_unicast(genl_info_net(DATARMNET54338da2ff),skb,DATARMNET54338da2ff->
+snd_portid);if(rc!=(0xd2d+202-0xdf7))goto DATARMNETbf4095f79e;rm_err(
+"\x53\x48\x53\x5f\x47\x4e\x4c\x3a\x20\x53\x75\x63\x63\x65\x73\x73\x66\x75\x6c\x6c\x79\x20\x73\x65\x6e\x74\x20\x69\x6e\x74\x20\x25\x64" "\n"
+,val);return(0xd2d+202-0xdf7);DATARMNETbf4095f79e:rm_err(
+"\x53\x48\x53\x5f\x47\x4e\x4c\x3a\x20\x46\x41\x49\x4c\x45\x44\x20\x74\x6f\x20\x73\x65\x6e\x64\x20\x69\x6e\x74\x20\x25\x64" "\n"
+,val);return-(0xd26+209-0xdf6);}int DATARMNET5945236cd3(int val){struct sk_buff*
+skb;void*msg_head;int rc;if(DATARMNETb01cbc5ec9==NULL){rm_err(
+"\x53\x48\x53\x5f\x47\x4e\x4c\x3a\x20\x46\x41\x49\x4c\x45\x44\x20\x74\x6f\x20\x73\x65\x6e\x64\x20\x69\x6e\x74\x20\x25\x64\x20\x2d\x20\x6c\x61\x73\x74\x5f\x6e\x65\x74\x20\x69\x73\x20\x4e\x55\x4c\x4c" "\n"
+,val);return-(0xd26+209-0xdf6);}skb=genlmsg_new(NLMSG_GOODSIZE,GFP_ATOMIC);if(
+skb==NULL)goto DATARMNETbf4095f79e;msg_head=genlmsg_put(skb,(0xd2d+202-0xdf7),
+DATARMNET7c4038843f++,&DATARMNETecc643c219,(0xd2d+202-0xdf7),DATARMNETc574b5cfba
+);if(msg_head==NULL){rc=-ENOMEM;rm_err(
+"\x53\x48\x53\x5f\x47\x4e\x4c\x3a\x20\x46\x41\x49\x4c\x45\x44\x20\x74\x6f\x20\x6d\x73\x67\x5f\x68\x65\x61\x64\x20\x25\x64" "\n"
+,rc);kfree(skb);goto DATARMNETbf4095f79e;}rc=nla_put_u32(skb,DATARMNET7d289a7bfa
+,val);if(rc!=(0xd2d+202-0xdf7)){rm_err(
+"\x53\x48\x53\x5f\x47\x4e\x4c\x3a\x20\x46\x41\x49\x4c\x45\x44\x20\x6e\x6c\x61\x5f\x70\x75\x74\x20\x25\x64" "\n"
+,rc);kfree(skb);goto DATARMNETbf4095f79e;}genlmsg_end(skb,msg_head);rc=
+genlmsg_unicast(DATARMNETb01cbc5ec9,skb,DATARMNET373156e169);if(rc!=
+(0xd2d+202-0xdf7))goto DATARMNETbf4095f79e;rm_err(
+"\x53\x48\x53\x5f\x47\x4e\x4c\x3a\x20\x53\x75\x63\x63\x65\x73\x73\x66\x75\x6c\x6c\x79\x20\x73\x65\x6e\x74\x20\x69\x6e\x74\x20\x25\x64" "\n"
+,val);return(0xd2d+202-0xdf7);DATARMNETbf4095f79e:rm_err(
+"\x53\x48\x53\x5f\x47\x4e\x4c\x3a\x20\x46\x41\x49\x4c\x45\x44\x20\x74\x6f\x20\x73\x65\x6e\x64\x20\x69\x6e\x74\x20\x25\x64" "\n"
+,val);DATARMNETc252c204a8=(0xd2d+202-0xdf7);return-(0xd26+209-0xdf6);}int 
+DATARMNETa9a7fa898c(void){struct sk_buff*skb;void*msg_head;int rc;int val=
+DATARMNET7c4038843f++;rm_err(
+"\x53\x48\x53\x5f\x47\x4e\x4c\x3a\x20\x54\x72\x79\x69\x6e\x67\x20\x74\x6f\x20\x73\x65\x6e\x64\x20\x6d\x73\x67\x20\x25\x64" "\n"
+,val);skb=genlmsg_new(NLMSG_GOODSIZE,GFP_ATOMIC);if(skb==NULL)goto 
+DATARMNETbf4095f79e;msg_head=genlmsg_put(skb,(0xd2d+202-0xdf7),
+DATARMNET7c4038843f++,&DATARMNETecc643c219,(0xd2d+202-0xdf7),DATARMNETc574b5cfba
+);if(msg_head==NULL){rc=-ENOMEM;rm_err(
+"\x53\x48\x53\x5f\x47\x4e\x4c\x3a\x20\x46\x41\x49\x4c\x45\x44\x20\x74\x6f\x20\x6d\x73\x67\x5f\x68\x65\x61\x64\x20\x25\x64" "\n"
+,rc);kfree(skb);goto DATARMNETbf4095f79e;}rc=nla_put_u32(skb,DATARMNET7d289a7bfa
+,val);if(rc!=(0xd2d+202-0xdf7)){rm_err(
+"\x53\x48\x53\x5f\x47\x4e\x4c\x3a\x20\x46\x41\x49\x4c\x45\x44\x20\x6e\x6c\x61\x5f\x70\x75\x74\x20\x25\x64" "\n"
+,rc);kfree(skb);goto DATARMNETbf4095f79e;}genlmsg_end(skb,msg_head);
+genlmsg_multicast(&DATARMNETecc643c219,skb,(0xd2d+202-0xdf7),(0xd2d+202-0xdf7),
+GFP_ATOMIC);rm_err(
+"\x53\x48\x53\x5f\x47\x4e\x4c\x3a\x20\x53\x75\x63\x63\x65\x73\x73\x66\x75\x6c\x6c\x79\x20\x73\x65\x6e\x74\x20\x69\x6e\x74\x20\x25\x64" "\n"
+,val);return(0xd2d+202-0xdf7);DATARMNETbf4095f79e:rm_err(
+"\x53\x48\x53\x5f\x47\x4e\x4c\x3a\x20\x46\x41\x49\x4c\x45\x44\x20\x74\x6f\x20\x73\x65\x6e\x64\x20\x69\x6e\x74\x20\x25\x64" "\n"
+,val);DATARMNETc252c204a8=(0xd2d+202-0xdf7);return-(0xd26+209-0xdf6);}int 
+DATARMNET740f3b34b3(struct sk_buff*DATARMNETaafc1d9519,struct genl_info*
+DATARMNET54338da2ff){rm_err("\x25\x73",
+"\x53\x48\x53\x5f\x47\x4e\x4c\x3a\x20\x72\x6d\x6e\x65\x74\x5f\x73\x68\x73\x5f\x67\x65\x6e\x6c\x5f\x64\x6d\x61\x5f\x69\x6e\x69\x74\x3a\x20\x43\x6c\x65\x61\x72\x20\x4c\x4c"
+);DATARMNET90fe3a4b56();if(DATARMNET54338da2ff==NULL){rm_err("\x25\x73",
+"\x53\x48\x53\x5f\x47\x4e\x4c\x3a\x20\x61\x6e\x20\x65\x72\x72\x6f\x72\x20\x6f\x63\x63\x75\x72\x65\x64\x20\x2d\x20\x69\x6e\x66\x6f\x20\x69\x73\x20\x6e\x75\x6c\x6c"
+);return-(0xd26+209-0xdf6);}return(0xd2d+202-0xdf7);}int DATARMNET283f08f439(
+struct sk_buff*DATARMNETaafc1d9519,struct genl_info*DATARMNET54338da2ff){struct 
+nlattr*na;struct DATARMNET0331d6732d*DATARMNETc4af21d05e;rm_err("\x25\x73",
+"\x53\x48\x53\x5f\x47\x4e\x4c\x3a\x20\x72\x6d\x6e\x65\x74\x5f\x73\x68\x73\x5f\x67\x65\x6e\x6c\x5f\x73\x65\x74\x5f\x66\x6c\x6f\x77\x5f\x6c\x6c"
+);if(DATARMNET54338da2ff==NULL){rm_err("\x25\x73",
+"\x53\x48\x53\x5f\x47\x4e\x4c\x3a\x20\x61\x6e\x20\x65\x72\x72\x6f\x72\x20\x6f\x63\x63\x75\x72\x65\x64\x20\x2d\x20\x69\x6e\x66\x6f\x20\x69\x73\x20\x6e\x75\x6c\x6c"
+);return-(0xd26+209-0xdf6);}na=DATARMNET54338da2ff->attrs[DATARMNET6ab4513e45];
+if(na){DATARMNETc4af21d05e=kzalloc(sizeof(*DATARMNETc4af21d05e),GFP_ATOMIC);if(!
+DATARMNETc4af21d05e){rm_err("\x25\x73",
+"\x53\x48\x53\x5f\x47\x4e\x4c\x3a\x20\x72\x6d\x6e\x65\x74\x5f\x73\x68\x73\x5f\x67\x65\x6e\x6c\x5f\x73\x65\x74\x5f\x66\x6c\x6f\x77\x5f\x6c\x6c\x20\x66\x6c\x6f\x77\x20\x69\x6e\x66\x6f\x20\x66\x61\x69\x6c\x75\x72\x65"
+);DATARMNET5d4ca1da1c(DATARMNET54338da2ff,DATARMNET00895c1601);return
+(0xd2d+202-0xdf7);}if(nla_memcpy(&DATARMNETc4af21d05e->DATARMNET54338da2ff,na,
+sizeof(DATARMNETc4af21d05e->DATARMNET54338da2ff))>(0xd2d+202-0xdf7)){if(
+DATARMNETc4af21d05e->DATARMNET54338da2ff.DATARMNET969cfb9094==
+DATARMNET8d88a2f3f5)DATARMNET2ac305d296(DATARMNETc4af21d05e);else if(
+DATARMNETc4af21d05e->DATARMNET54338da2ff.DATARMNET969cfb9094==
+DATARMNET9a035137c0)DATARMNETd52d50282d(DATARMNETc4af21d05e);DATARMNET5d4ca1da1c
+(DATARMNET54338da2ff,DATARMNET0cb8735618);}else{rm_err(
+"\x53\x48\x53\x5f\x47\x4e\x4c\x3a\x20\x6e\x6c\x61\x5f\x6d\x65\x6d\x63\x70\x79\x20\x66\x61\x69\x6c\x65\x64\x20\x25\x64" "\n"
+,DATARMNET6ab4513e45);DATARMNET5d4ca1da1c(DATARMNET54338da2ff,
+DATARMNET00895c1601);return(0xd2d+202-0xdf7);}}else{rm_err(
+"\x53\x48\x53\x5f\x47\x4e\x4c\x3a\x20\x6e\x6f\x20\x69\x6e\x66\x6f\x2d\x3e\x61\x74\x74\x72\x73\x20\x25\x64" "\n"
+,DATARMNET6ab4513e45);DATARMNET5d4ca1da1c(DATARMNET54338da2ff,
+DATARMNET00895c1601);return(0xd2d+202-0xdf7);}return(0xd2d+202-0xdf7);}int 
+DATARMNETd81d2866ba(struct sk_buff*DATARMNETaafc1d9519,struct genl_info*
+DATARMNET54338da2ff){struct nlattr*na;struct DATARMNET837c876a22 
+DATARMNET1317c6a4a2;int rc=(0xd2d+202-0xdf7);rm_err("\x25\x73",
+"\x53\x48\x53\x5f\x47\x4e\x4c\x3a\x20\x72\x6d\x6e\x65\x74\x5f\x73\x68\x73\x5f\x67\x65\x6e\x6c\x5f\x73\x65\x74\x5f\x66\x6c\x6f\x77\x5f\x73\x65\x67\x6d\x65\x6e\x74\x61\x74\x69\x6f\x6e"
+);if(DATARMNET54338da2ff==NULL){rm_err("\x25\x73",
+"\x53\x48\x53\x5f\x47\x4e\x4c\x3a\x20\x61\x6e\x20\x65\x72\x72\x6f\x72\x20\x6f\x63\x63\x75\x72\x65\x64\x20\x2d\x20\x69\x6e\x66\x6f\x20\x69\x73\x20\x6e\x75\x6c\x6c"
+);return-(0xd26+209-0xdf6);}na=DATARMNET54338da2ff->attrs[DATARMNET50e1cd26c7];
+if(na){if(nla_memcpy(&DATARMNET1317c6a4a2,na,sizeof(DATARMNET1317c6a4a2))>
+(0xd2d+202-0xdf7)){rm_err(
+"\x53\x48\x53\x5f\x47\x4e\x4c\x3a\x20\x72\x65\x63\x76\x20\x73\x65\x67\x6d\x65\x6e\x74\x61\x74\x69\x6f\x6e\x20\x72\x65\x71\x20"
+"\x68\x61\x73\x68\x5f\x74\x6f\x5f\x73\x65\x74\x20\x3d\x20\x30\x78\x25\x78\x20\x73\x65\x67\x73\x5f\x70\x65\x72\x5f\x73\x6b\x62\x20\x3d\x20\x25\x75"
+,DATARMNET1317c6a4a2.DATARMNET8c11bd9466,DATARMNET1317c6a4a2.DATARMNET87636d0152
+);rc=DATARMNETf85599b9d8(DATARMNET1317c6a4a2.DATARMNET8c11bd9466,
+DATARMNET1317c6a4a2.DATARMNET87636d0152);if(rc==(0xd26+209-0xdf6)){
+DATARMNET5d4ca1da1c(DATARMNET54338da2ff,DATARMNET0cb8735618);
+trace_rmnet_shs_wq_high(DATARMNETa0ecb9daac,DATARMNETf814701a94,
+DATARMNET1317c6a4a2.DATARMNET8c11bd9466,DATARMNET1317c6a4a2.DATARMNET87636d0152,
+(0x16e8+787-0xc0c),(0x16e8+787-0xc0c),NULL,NULL);}else{DATARMNET5d4ca1da1c(
+DATARMNET54338da2ff,DATARMNET00895c1601);trace_rmnet_shs_wq_high(
+DATARMNETa0ecb9daac,DATARMNET166a43f3aa,DATARMNET1317c6a4a2.DATARMNET8c11bd9466,
+DATARMNET1317c6a4a2.DATARMNET87636d0152,(0x16e8+787-0xc0c),(0x16e8+787-0xc0c),
+NULL,NULL);return(0xd2d+202-0xdf7);}}else{rm_err(
+"\x53\x48\x53\x5f\x47\x4e\x4c\x3a\x20\x6e\x6c\x61\x5f\x6d\x65\x6d\x63\x70\x79\x20\x66\x61\x69\x6c\x65\x64\x20\x25\x64" "\n"
+,DATARMNET50e1cd26c7);DATARMNET5d4ca1da1c(DATARMNET54338da2ff,
+DATARMNET00895c1601);return(0xd2d+202-0xdf7);}}else{rm_err(
+"\x53\x48\x53\x5f\x47\x4e\x4c\x3a\x20\x6e\x6f\x20\x69\x6e\x66\x6f\x2d\x3e\x61\x74\x74\x72\x73\x20\x25\x64" "\n"
+,DATARMNET50e1cd26c7);DATARMNET5d4ca1da1c(DATARMNET54338da2ff,
+DATARMNET00895c1601);return(0xd2d+202-0xdf7);}return(0xd2d+202-0xdf7);}int 
+DATARMNET9bbfc822c2(struct sk_buff*DATARMNETaafc1d9519,struct genl_info*
+DATARMNET54338da2ff){struct nlattr*na;struct DATARMNET1ac24ff95c 
+DATARMNET8641231b50;int rc=(0xd2d+202-0xdf7);rm_err("\x25\x73",
+"\x53\x48\x53\x5f\x47\x4e\x4c\x3a\x20\x72\x6d\x6e\x65\x74\x5f\x73\x68\x73\x5f\x67\x65\x6e\x6c\x5f\x73\x65\x74\x5f\x71\x75\x69\x63\x6b\x61\x63\x6b\x5f\x74\x68\x72\x65\x73\x68"
+);if(DATARMNET54338da2ff==NULL){rm_err("\x25\x73",
+"\x53\x48\x53\x5f\x47\x4e\x4c\x3a\x20\x61\x6e\x20\x65\x72\x72\x6f\x72\x20\x6f\x63\x63\x75\x72\x65\x64\x20\x2d\x20\x69\x6e\x66\x6f\x20\x69\x73\x20\x6e\x75\x6c\x6c"
+);return-(0xd26+209-0xdf6);}na=DATARMNET54338da2ff->attrs[DATARMNET627787b1dd];
+if(na){if(nla_memcpy(&DATARMNET8641231b50,na,sizeof(DATARMNET8641231b50))>
+(0xd2d+202-0xdf7)){rm_err(
+"\x53\x48\x53\x5f\x47\x4e\x4c\x3a\x20\x72\x65\x63\x76\x20\x71\x75\x69\x63\x6b\x61\x63\x6b\x20\x72\x65\x71\x20"
+"\x68\x61\x73\x68\x5f\x74\x6f\x5f\x73\x65\x74\x20\x3d\x20\x30\x78\x25\x78\x20\x74\x68\x72\x65\x73\x68\x20\x3d\x20\x25\x75"
+,DATARMNET8641231b50.DATARMNET8c11bd9466,DATARMNET8641231b50.ack_thresh);rc=
+DATARMNET1faf2b953f(DATARMNET8641231b50.DATARMNET8c11bd9466,DATARMNET8641231b50.
+ack_thresh);if(rc==(0xd26+209-0xdf6)){DATARMNET5d4ca1da1c(DATARMNET54338da2ff,
+DATARMNETc30f35c15f);}else{DATARMNET5d4ca1da1c(DATARMNET54338da2ff,
+DATARMNET6e742895e1);return(0xd2d+202-0xdf7);}}else{rm_err(
+"\x53\x48\x53\x5f\x47\x4e\x4c\x3a\x20\x6e\x6c\x61\x5f\x6d\x65\x6d\x63\x70\x79\x20\x66\x61\x69\x6c\x65\x64\x20\x25\x64" "\n"
+,DATARMNET627787b1dd);DATARMNET5d4ca1da1c(DATARMNET54338da2ff,
+DATARMNET6e742895e1);return(0xd2d+202-0xdf7);}}else{rm_err(
+"\x53\x48\x53\x5f\x47\x4e\x4c\x3a\x20\x6e\x6f\x20\x69\x6e\x66\x6f\x2d\x3e\x61\x74\x74\x72\x73\x20\x25\x64" "\n"
+,DATARMNET627787b1dd);DATARMNET5d4ca1da1c(DATARMNET54338da2ff,
+DATARMNET6e742895e1);return(0xd2d+202-0xdf7);}return(0xd2d+202-0xdf7);}int 
+DATARMNET29175fb5fc(struct sk_buff*DATARMNETaafc1d9519,struct genl_info*
+DATARMNET54338da2ff){struct nlattr*na;struct DATARMNET6c41b886b2 
+DATARMNET7f0ce2d6ad;int rc=(0xd2d+202-0xdf7);rm_err("\x25\x73",
+"\x53\x48\x53\x5f\x47\x4e\x4c\x3a\x20\x72\x6d\x6e\x65\x74\x5f\x73\x68\x73\x5f\x67\x65\x6e\x6c\x5f\x74\x72\x79\x5f\x74\x6f\x5f\x6d\x6f\x76\x65\x5f\x66\x6c\x6f\x77"
+);if(DATARMNET54338da2ff==NULL){rm_err("\x25\x73",
+"\x53\x48\x53\x5f\x47\x4e\x4c\x3a\x20\x61\x6e\x20\x65\x72\x72\x6f\x72\x20\x6f\x63\x63\x75\x72\x65\x64\x20\x2d\x20\x69\x6e\x66\x6f\x20\x69\x73\x20\x6e\x75\x6c\x6c"
+);return-(0xd26+209-0xdf6);}na=DATARMNET54338da2ff->attrs[DATARMNET813a742587];
+if(na){if(nla_memcpy(&DATARMNET7f0ce2d6ad,na,sizeof(DATARMNET7f0ce2d6ad))>
+(0xd2d+202-0xdf7)){rm_err(
+"\x53\x48\x53\x5f\x47\x4e\x4c\x3a\x20\x63\x75\x72\x5f\x63\x70\x75\x20\x3d\x25\x75\x20\x64\x65\x73\x74\x5f\x63\x70\x75\x20\x3d\x20\x25\x75\x20"
+"\x68\x61\x73\x68\x5f\x74\x6f\x5f\x6d\x6f\x76\x65\x20\x3d\x20\x30\x78\x25\x78\x20\x73\x75\x67\x67\x5f\x74\x79\x70\x65\x20\x3d\x20\x25\x75"
+,DATARMNET7f0ce2d6ad.DATARMNETc790ff30fc,DATARMNET7f0ce2d6ad.DATARMNET208ea67e1d
+,DATARMNET7f0ce2d6ad.DATARMNET4da4612f1e,DATARMNET7f0ce2d6ad.DATARMNETa3f89581b5
+);if(DATARMNET7f0ce2d6ad.DATARMNET208ea67e1d>=DATARMNETc6782fed88||
+DATARMNET7f0ce2d6ad.DATARMNETc790ff30fc>=DATARMNETc6782fed88){
+DATARMNET930a441406[DATARMNET465c0e5e6d]++;DATARMNET5d4ca1da1c(
+DATARMNET54338da2ff,DATARMNET96de786762);return-(0xd26+209-0xdf6);}if(
+DATARMNET7f0ce2d6ad.DATARMNETa3f89581b5==DATARMNET5898b2a84b){
+DATARMNET3874292c18=DATARMNET7f0ce2d6ad.DATARMNET208ea67e1d;
+trace_rmnet_shs_wq_high(DATARMNETa0ecb9daac,DATARMNETd7f7ade458,
+DATARMNET7f0ce2d6ad.DATARMNETc790ff30fc,DATARMNET7f0ce2d6ad.DATARMNET208ea67e1d,
+DATARMNET7f0ce2d6ad.DATARMNET4da4612f1e,DATARMNET7f0ce2d6ad.DATARMNETa3f89581b5,
+NULL,NULL);DATARMNET5d4ca1da1c(DATARMNET54338da2ff,DATARMNET2d19c9b1ef);return
+(0xd2d+202-0xdf7);}if(DATARMNET7f0ce2d6ad.DATARMNETa3f89581b5==
+DATARMNET0fec83de79){DATARMNETbb1a9dff8b=DATARMNET7f0ce2d6ad.DATARMNET208ea67e1d
+;trace_rmnet_shs_wq_high(DATARMNETa0ecb9daac,DATARMNETd7f7ade458,
+DATARMNET7f0ce2d6ad.DATARMNETc790ff30fc,DATARMNET7f0ce2d6ad.DATARMNET208ea67e1d,
+DATARMNET7f0ce2d6ad.DATARMNET4da4612f1e,DATARMNET7f0ce2d6ad.DATARMNETa3f89581b5,
+NULL,NULL);DATARMNET5d4ca1da1c(DATARMNET54338da2ff,DATARMNET2d19c9b1ef);return
+(0xd2d+202-0xdf7);}if(DATARMNET7f0ce2d6ad.DATARMNETa3f89581b5==
+DATARMNET5dccc475d4){DATARMNETb7ddf3c5dd[DATARMNETf13db5ace8]++;if(!((
+(0xd26+209-0xdf6)<<DATARMNET7f0ce2d6ad.DATARMNET208ea67e1d)&DATARMNET9273f84bf1)
+||(((0xd26+209-0xdf6)<<DATARMNETecc0627c70.DATARMNET5c24e1df05)&
+DATARMNET9273f84bf1)){DATARMNET5d4ca1da1c(DATARMNET54338da2ff,
+DATARMNET2d19c9b1ef);return-(0xd26+209-0xdf6);}if((((0xd26+209-0xdf6)<<
+DATARMNET7f0ce2d6ad.DATARMNET208ea67e1d)&DATARMNET121c8bc82a)){
+DATARMNETb7ddf3c5dd[DATARMNET438fb7f8f3]++;DATARMNET5d4ca1da1c(
+DATARMNET54338da2ff,DATARMNET96de786762);return-(0xd26+209-0xdf6);}
+DATARMNETecc0627c70.DATARMNET5c24e1df05=DATARMNET7f0ce2d6ad.DATARMNET208ea67e1d;
+rcu_read_lock();DATARMNET8f9da46b14();rcu_read_unlock();DATARMNET5d4ca1da1c(
+DATARMNET54338da2ff,DATARMNET2d19c9b1ef);return(0xd2d+202-0xdf7);}if(
+DATARMNET7f0ce2d6ad.DATARMNETa3f89581b5==DATARMNET37da25c8e8){
+DATARMNETb7ddf3c5dd[DATARMNETb6eae1e097]++;if(!(((0xd26+209-0xdf6)<<
+DATARMNET7f0ce2d6ad.DATARMNET208ea67e1d)&DATARMNETbc3c416b77)){
+DATARMNET5d4ca1da1c(DATARMNET54338da2ff,DATARMNET2d19c9b1ef);return-
+(0xd26+209-0xdf6);}if((((0xd26+209-0xdf6)<<DATARMNET7f0ce2d6ad.
+DATARMNET208ea67e1d)&DATARMNET121c8bc82a)){DATARMNETb7ddf3c5dd[
+DATARMNETf6458f40e6]++;DATARMNET5d4ca1da1c(DATARMNET54338da2ff,
+DATARMNET96de786762);return-(0xd26+209-0xdf6);}if((DATARMNETecc0627c70.
+DATARMNET7d667e828e)==DATARMNET7f0ce2d6ad.DATARMNET208ea67e1d&&(
+DATARMNETecc0627c70.DATARMNET5c24e1df05)==DATARMNET7f0ce2d6ad.
+DATARMNET208ea67e1d){DATARMNET5d4ca1da1c(DATARMNET54338da2ff,DATARMNET2d19c9b1ef
+);return(0xd2d+202-0xdf7);}if((((0xd26+209-0xdf6)<<DATARMNET7f0ce2d6ad.
+DATARMNET208ea67e1d)&DATARMNETbc3c416b77)&&(((0xd26+209-0xdf6)<<
+DATARMNETecc0627c70.DATARMNET7d667e828e)&DATARMNETbc3c416b77)){
+DATARMNETb7ddf3c5dd[DATARMNET6fed39da20]++;}DATARMNETecc0627c70.
+DATARMNET5c24e1df05=DATARMNET7f0ce2d6ad.DATARMNET208ea67e1d;rcu_read_lock();
+DATARMNET8f9da46b14();rcu_read_unlock();DATARMNET5d4ca1da1c(DATARMNET54338da2ff,
+DATARMNET2d19c9b1ef);return(0xd2d+202-0xdf7);}rc=DATARMNET5f72606f6f(
+DATARMNET7f0ce2d6ad.DATARMNETc790ff30fc,DATARMNET7f0ce2d6ad.DATARMNET208ea67e1d,
+DATARMNET7f0ce2d6ad.DATARMNET4da4612f1e,DATARMNET7f0ce2d6ad.DATARMNETa3f89581b5)
+;if(rc==(0xd26+209-0xdf6)){DATARMNET5d4ca1da1c(DATARMNET54338da2ff,
+DATARMNET598eb03fad);trace_rmnet_shs_wq_high(DATARMNETa0ecb9daac,
+DATARMNETd7f7ade458,DATARMNET7f0ce2d6ad.DATARMNETc790ff30fc,DATARMNET7f0ce2d6ad.
+DATARMNET208ea67e1d,DATARMNET7f0ce2d6ad.DATARMNET4da4612f1e,DATARMNET7f0ce2d6ad.
+DATARMNETa3f89581b5,NULL,NULL);}else{DATARMNET5d4ca1da1c(DATARMNET54338da2ff,
+DATARMNETe64295b6cb);trace_rmnet_shs_wq_high(DATARMNETa0ecb9daac,
+DATARMNET53e4a6b394,DATARMNET7f0ce2d6ad.DATARMNETc790ff30fc,DATARMNET7f0ce2d6ad.
+DATARMNET208ea67e1d,DATARMNET7f0ce2d6ad.DATARMNET4da4612f1e,DATARMNET7f0ce2d6ad.
+DATARMNETa3f89581b5,NULL,NULL);return(0xd2d+202-0xdf7);}}else{rm_err(
+"\x53\x48\x53\x5f\x47\x4e\x4c\x3a\x20\x6e\x6c\x61\x5f\x6d\x65\x6d\x63\x70\x79\x20\x66\x61\x69\x6c\x65\x64\x20\x25\x64" "\n"
+,DATARMNET813a742587);DATARMNET5d4ca1da1c(DATARMNET54338da2ff,
+DATARMNETe64295b6cb);return(0xd2d+202-0xdf7);}}else{rm_err(
+"\x53\x48\x53\x5f\x47\x4e\x4c\x3a\x20\x6e\x6f\x20\x69\x6e\x66\x6f\x2d\x3e\x61\x74\x74\x72\x73\x20\x25\x64" "\n"
+,DATARMNET813a742587);DATARMNET5d4ca1da1c(DATARMNET54338da2ff,
+DATARMNETe64295b6cb);return(0xd2d+202-0xdf7);}return(0xd2d+202-0xdf7);}int 
+DATARMNETc850634243(struct sk_buff*DATARMNETaafc1d9519,struct genl_info*
+DATARMNET54338da2ff){rm_err("\x25\x73",
+"\x53\x48\x53\x5f\x47\x4e\x4c\x3a\x20\x72\x6d\x6e\x65\x74\x5f\x73\x68\x73\x5f\x67\x65\x6e\x6c\x5f\x6d\x65\x6d\x5f\x73\x79\x6e\x63"
+);if(!DATARMNETc252c204a8)DATARMNETc252c204a8=(0xd26+209-0xdf6);
+trace_rmnet_shs_wq_high(DATARMNETa0ecb9daac,DATARMNETd1d3902361,
+(0x16e8+787-0xc0c),(0x16e8+787-0xc0c),(0x16e8+787-0xc0c),(0x16e8+787-0xc0c),NULL
+,NULL);if(DATARMNET54338da2ff==NULL){rm_err("\x25\x73",
+"\x53\x48\x53\x5f\x47\x4e\x4c\x3a\x20\x61\x6e\x20\x65\x72\x72\x6f\x72\x20\x6f\x63\x63\x75\x72\x65\x64\x20\x2d\x20\x69\x6e\x66\x6f\x20\x69\x73\x20\x6e\x75\x6c\x6c"
+);return-(0xd26+209-0xdf6);}DATARMNETb01cbc5ec9=genl_info_net(
+DATARMNET54338da2ff);DATARMNET373156e169=DATARMNET54338da2ff->snd_portid;rm_err(
+"\x70\x6f\x72\x74\x5f\x69\x64\x20\x3d\x20\x25\x75",DATARMNET373156e169);return
+(0xd2d+202-0xdf7);}void DATARMNET8d0d510d45(uint32_t DATARMNETaf3d356342,struct 
+DATARMNET177911299b*DATARMNET60b6e12cfd){struct DATARMNETe5f1cf1a69 
+DATARMNET7baa284dc5;struct timespec64 time;if(DATARMNET60b6e12cfd==NULL){rm_err(
+"\x25\x73",
+"\x53\x48\x53\x5f\x4d\x53\x47\x5f\x47\x4e\x4c\x20\x2d\x20\x69\x6e\x76\x61\x6c\x69\x64\x20\x69\x6e\x70\x75\x74"
+);return;}memset(DATARMNET60b6e12cfd,(0xd2d+202-0xdf7),sizeof(struct 
+DATARMNET177911299b));memset(&DATARMNET7baa284dc5,(0xd2d+202-0xdf7),sizeof(
+DATARMNET7baa284dc5));ktime_get_real_ts64(&time);DATARMNET60b6e12cfd->timestamp=
+(DATARMNET6987463c5e(time.tv_sec)+time.tv_nsec);DATARMNET7baa284dc5.
+DATARMNETaf3d356342=DATARMNETaf3d356342;DATARMNET7baa284dc5.DATARMNET43a8300dfd=
+(0xd26+209-0xdf6);memcpy(&(DATARMNET60b6e12cfd->list[(0xd2d+202-0xdf7)].
+DATARMNETdf2dbc641f),&DATARMNET7baa284dc5,sizeof(DATARMNET7baa284dc5));
+DATARMNET60b6e12cfd->list[(0xd2d+202-0xdf7)].msg_type=DATARMNETfce267cbe9;
+DATARMNET60b6e12cfd->valid=(0xd26+209-0xdf6);DATARMNET60b6e12cfd->list_len=
+(0xd26+209-0xdf6);}void DATARMNET1d4b1eff85(struct DATARMNET177911299b*
+DATARMNET60b6e12cfd,uint8_t DATARMNET907a90c6af,uint8_t DATARMNET9a4544e068){
+struct DATARMNET80e227e008 DATARMNETc909849dcb;struct timespec64 time;if(
+DATARMNET60b6e12cfd==NULL){rm_err("\x25\x73",
+"\x53\x48\x53\x5f\x4d\x53\x47\x5f\x47\x4e\x4c\x20\x2d\x20\x69\x6e\x76\x61\x6c\x69\x64\x20\x69\x6e\x70\x75\x74"
+);return;}memset(DATARMNET60b6e12cfd,(0xd2d+202-0xdf7),sizeof(struct 
+DATARMNET177911299b));memset(&DATARMNETc909849dcb,(0xd2d+202-0xdf7),sizeof(
+DATARMNETc909849dcb));ktime_get_real_ts64(&time);DATARMNET60b6e12cfd->timestamp=
+(DATARMNET6987463c5e(time.tv_sec)+time.tv_nsec);DATARMNETc909849dcb.
+DATARMNET035f475d5c=DATARMNET907a90c6af;DATARMNETc909849dcb.DATARMNETcfb5dc7296=
+DATARMNET9a4544e068;memcpy(&(DATARMNET60b6e12cfd->list[(0xd2d+202-0xdf7)].
+DATARMNETdf2dbc641f),&DATARMNETc909849dcb,sizeof(DATARMNETc909849dcb));
+DATARMNET60b6e12cfd->list[(0xd2d+202-0xdf7)].msg_type=DATARMNETf41c724abf;
+DATARMNET60b6e12cfd->valid=(0xd26+209-0xdf6);DATARMNET60b6e12cfd->list_len=
+(0xd26+209-0xdf6);}int DATARMNETb5d58adbe7(struct DATARMNET177911299b*msg_ptr){
+struct sk_buff*skb;void*msg_head;int rc;if(DATARMNET77097baa98==NULL){rm_err(
+"\x25\x73",
+"\x53\x48\x53\x5f\x47\x4e\x4c\x3a\x20\x46\x41\x49\x4c\x45\x44\x20\x74\x6f\x20\x73\x65\x6e\x64\x20\x6d\x73\x67\x5f\x6c\x61\x73\x74\x5f\x6e\x65\x74\x20\x69\x73\x20\x4e\x55\x4c\x4c" "\n"
+);return-(0xd26+209-0xdf6);}skb=genlmsg_new(NLMSG_GOODSIZE,GFP_ATOMIC);if(skb==
+NULL)goto DATARMNETbf4095f79e;msg_head=genlmsg_put(skb,(0xd2d+202-0xdf7),
+DATARMNETf1e47cb243++,&rmnet_shs_genl_msg_family,(0xd2d+202-0xdf7),
+DATARMNETafee1e9070);if(msg_head==NULL){rc=-ENOMEM;rm_err(
+"\x53\x48\x53\x5f\x47\x4e\x4c\x3a\x20\x46\x41\x49\x4c\x45\x44\x20\x74\x6f\x20\x6d\x73\x67\x5f\x68\x65\x61\x64\x20\x25\x64" "\n"
+,rc);kfree(skb);goto DATARMNETbf4095f79e;}rc=nla_put(skb,DATARMNET8070cc0bdc,
+sizeof(struct DATARMNET177911299b),msg_ptr);if(rc!=(0xd2d+202-0xdf7)){rm_err(
+"\x53\x48\x53\x5f\x47\x4e\x4c\x3a\x20\x46\x41\x49\x4c\x45\x44\x20\x6e\x6c\x61\x5f\x70\x75\x74\x20\x25\x64" "\n"
+,rc);kfree(skb);goto DATARMNETbf4095f79e;}genlmsg_end(skb,msg_head);rc=
+genlmsg_unicast(DATARMNET77097baa98,skb,DATARMNET990a29d492);if(rc!=
+(0xd2d+202-0xdf7))goto DATARMNETbf4095f79e;rm_err(
+"\x53\x48\x53\x5f\x4d\x53\x47\x5f\x47\x4e\x4c\x3a\x20\x53\x75\x63\x63\x65\x73\x73\x66\x75\x6c\x6c\x79\x20\x73\x65\x6e\x74\x20\x6d\x73\x67\x20\x25\x64" "\n"
+,DATARMNETf1e47cb243);return(0xd2d+202-0xdf7);DATARMNETbf4095f79e:rm_err(
+"\x25\x73",
+"\x53\x48\x53\x5f\x47\x4e\x4c\x3a\x20\x46\x41\x49\x4c\x45\x44\x20\x74\x6f\x20\x73\x65\x6e\x64\x20\x74\x6f\x20\x6d\x73\x67\x20\x63\x68\x61\x6e\x6e\x65\x6c" "\n"
+);return-(0xd26+209-0xdf6);}int DATARMNETd65d1351b9(struct sk_buff*
+DATARMNETaafc1d9519,struct genl_info*DATARMNET54338da2ff){rm_err("\x25\x73",
+"\x53\x48\x53\x5f\x47\x4e\x4c\x5f\x4d\x53\x47\x3a\x20\x72\x6d\x6e\x65\x74\x5f\x73\x68\x73\x5f\x67\x65\x6e\x6c\x5f\x6d\x73\x67\x5f\x72\x65\x71"
+);if(!DATARMNETc252c204a8){rm_err("\x25\x73",
+"\x53\x48\x53\x5f\x47\x4e\x4c\x5f\x4d\x53\x47\x3a\x20\x65\x72\x72\x6f\x72\x3a\x20\x75\x73\x65\x72\x73\x70\x61\x63\x65\x20\x6e\x6f\x74\x20\x63\x6f\x6e\x6e\x65\x63\x74\x65\x64"
+);return-(0xd26+209-0xdf6);}if(DATARMNET54338da2ff==NULL){rm_err("\x25\x73",
+"\x53\x48\x53\x5f\x47\x4e\x4c\x5f\x4d\x53\x47\x3a\x20\x65\x72\x72\x6f\x72\x3a\x20\x69\x6e\x66\x6f\x20\x69\x73\x20\x6e\x75\x6c\x6c"
+);return-(0xd26+209-0xdf6);}DATARMNET77097baa98=genl_info_net(
+DATARMNET54338da2ff);DATARMNET990a29d492=DATARMNET54338da2ff->snd_portid;rm_err(
+"\x6d\x73\x67\x5f\x70\x6f\x72\x74\x5f\x69\x64\x20\x3d\x20\x25\x75",
+DATARMNET990a29d492);return(0xd2d+202-0xdf7);}int DATARMNET0dbc627e8f(void){int 
+ret;DATARMNETc252c204a8=(0xd2d+202-0xdf7);ret=genl_register_family(&
+DATARMNETecc643c219);if(ret!=(0xd2d+202-0xdf7)){rm_err(
+"\x53\x48\x53\x5f\x47\x4e\x4c\x3a\x20\x72\x65\x67\x69\x73\x74\x65\x72\x20\x66\x61\x6d\x69\x6c\x79\x20\x66\x61\x69\x6c\x65\x64\x3a\x20\x25\x69"
+,ret);genl_unregister_family(&DATARMNETecc643c219);return-(0xd26+209-0xdf6);}
+rm_err(
+"\x53\x48\x53\x5f\x47\x4e\x4c\x3a\x20\x73\x75\x63\x63\x65\x73\x73\x66\x75\x6c\x6c\x79\x20\x72\x65\x67\x69\x73\x74\x65\x72\x65\x64\x20\x67\x65\x6e\x65\x72\x69\x63\x20\x6e\x65\x74\x6c\x69\x6e\x6b\x20\x66\x61\x6d\x69\x6c\x79\x3a\x20\x25\x73"
+,DATARMNET0228d9f101);ret=genl_register_family(&rmnet_shs_genl_msg_family);if(
+ret!=(0xd2d+202-0xdf7)){rm_err(
+"\x53\x48\x53\x5f\x4d\x53\x47\x5f\x47\x4e\x4c\x3a\x20\x72\x65\x67\x69\x73\x74\x65\x72\x20\x66\x61\x6d\x69\x6c\x79\x20\x66\x61\x69\x6c\x65\x64\x3a\x20\x25\x69"
+,ret);genl_unregister_family(&rmnet_shs_genl_msg_family);}else{rm_err(
+"\x53\x48\x53\x5f\x4d\x53\x47\x5f\x47\x4e\x4c\x3a\x20\x73\x75\x63\x63\x65\x73\x73\x66\x75\x6c\x6c\x79\x20\x72\x65\x67\x69\x73\x74\x65\x72\x65\x64\x20\x67\x65\x6e\x65\x72\x69\x63\x20\x6e\x65\x74\x6c\x69\x6e\x6b\x20\x66\x61\x6d\x69\x6c\x79\x3a\x20\x25\x73"
+,DATARMNETa35687f809);}return(0xd2d+202-0xdf7);}int DATARMNETeabd69d1ab(void){
+int ret;DATARMNET5945236cd3(DATARMNET19092afcc2);ret=genl_unregister_family(&
+DATARMNETecc643c219);if(ret!=(0xd2d+202-0xdf7)){rm_err(
+"\x53\x48\x53\x5f\x47\x4e\x4c\x3a\x20\x75\x6e\x72\x65\x67\x69\x73\x74\x65\x72\x20\x66\x61\x6d\x69\x6c\x79\x20\x66\x61\x69\x6c\x65\x64\x3a\x20\x25\x69" "\n"
+,ret);}DATARMNETc252c204a8=(0xd2d+202-0xdf7);ret=genl_unregister_family(&
+rmnet_shs_genl_msg_family);if(ret!=(0xd2d+202-0xdf7)){rm_err(
+"\x53\x48\x53\x5f\x47\x4e\x4c\x3a\x20\x75\x6e\x72\x65\x67\x69\x73\x74\x65\x72\x20\x66\x61\x6d\x69\x6c\x79\x20\x66\x61\x69\x6c\x65\x64\x3a\x20\x25\x69" "\n"
+,ret);}return(0xd2d+202-0xdf7);}

+ 84 - 0
qcom/opensource/datarmnet-ext/shs/rmnet_shs_wq_genl.h

@@ -0,0 +1,84 @@
+/* Copyright (c) 2019-2021 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 and
+ * only version 2 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ */
+
+#ifndef DATARMNETf34a2d1928
+#define DATARMNETf34a2d1928
+#include "rmnet_shs.h"
+#include <net/genetlink.h>
+#define DATARMNET0fa03ac25b (0xd26+209-0xdf6)
+#define DATARMNET0228d9f101 "\x52\x4d\x4e\x45\x54\x5f\x53\x48\x53"
+#define DATARMNETe64295b6cb (0xbb7+853-0xc3c)
+#define DATARMNET598eb03fad (0xbc7+788-0xc04)
+#define DATARMNET7afb49ee3f      (0xd07+2129-0x121c)
+#define DATARMNET3a69f7c4e5      (0xd07+2122-0x1214)
+#define DATARMNET2d19c9b1ef (0xcc7+5761-0x221c)
+#define DATARMNET96de786762 (0xcc7+5754-0x2214)
+#define DATARMNETb5601817b1 (0xdb7+6677-0x263c)
+#define DATARMNET00895c1601  (0xdc7+3085-0x163c)
+#define DATARMNET0cb8735618   (0xdb7+3102-0x1634)
+#define DATARMNET6e742895e1  (0xdb7+3095-0x162c)
+#define DATARMNETc30f35c15f   (0xdb7+3088-0x1624)
+#define DATARMNET19092afcc2        (0xec7+1152-0x131d)
+extern int DATARMNETc252c204a8;enum{DATARMNET9491b185b7,DATARMNETc574b5cfba,
+DATARMNET8e3adfc5dd,DATARMNETffb2945689,DATARMNET51b1ee5a68,
+RMNET_SHS_GENL_CMD_LL_FLOW,DATARMNET93b3e11659,DATARMNET5b3796e25a,};enum{
+DATARMNET603b776397,DATARMNETaa0fe5a855,DATARMNET7d289a7bfa,DATARMNET813a742587,
+DATARMNET50e1cd26c7,DATARMNET6ab4513e45,DATARMNET627787b1dd,DATARMNET0158bf4d2b,
+};
+#define DATARMNETcecb35ee33 (DATARMNET0158bf4d2b - (0xd26+209-0xdf6))
+struct DATARMNET6c41b886b2{uint32_t DATARMNET4da4612f1e;uint32_t 
+DATARMNETa3f89581b5;uint16_t DATARMNETc790ff30fc;uint16_t DATARMNET208ea67e1d;};
+struct DATARMNET837c876a22{uint32_t DATARMNET8c11bd9466;uint32_t 
+DATARMNET87636d0152;};struct DATARMNET1ac24ff95c{uint32_t DATARMNET8c11bd9466;
+uint32_t ack_thresh;};struct DATARMNET80e227e008{uint8_t DATARMNET035f475d5c;
+uint8_t DATARMNETcfb5dc7296;};
+#define DATARMNETa35687f809 "RMNET_SHS_MSG"
+enum{DATARMNETeaa13301a0,DATARMNETafee1e9070,DATARMNET943966c53e,};enum{
+DATARMNET5f0371060e,DATARMNETc08daf87d4,DATARMNET8070cc0bdc,DATARMNETc2be398ed4,
+};
+#define DATARMNET3b631aeccb ((0xeb7+712-0x111d))
+#define DATARMNET8a917ef593     ((0xd26+209-0xdf6))
+struct DATARMNETe5f1cf1a69{uint32_t DATARMNETaf3d356342;uint8_t 
+DATARMNET43a8300dfd;};enum{DATARMNET68b3f1699c=(0xd2d+202-0xdf7),
+DATARMNETfce267cbe9=(0xd26+209-0xdf6),DATARMNETf41c724abf=(0xd1f+216-0xdf5),};
+struct DATARMNET4a3b3209dd{char DATARMNETdf2dbc641f[DATARMNET3b631aeccb];
+uint16_t msg_type;};struct DATARMNET25187800fe{int valid;};struct 
+DATARMNET177911299b{struct DATARMNET4a3b3209dd list[DATARMNET8a917ef593];
+uint64_t timestamp;uint16_t list_len;uint8_t valid;};struct DATARMNETbf4d34b241{
+union{__be32 daddr;struct in6_addr v6_daddr;}DATARMNETea422561ef;union{__be32 
+saddr;struct in6_addr v6_saddr;}DATARMNET53d5f671f0;u16 src_port;u16 
+DATARMNET5a5907dd87;u16 DATARMNET1e49bc75c8;u16 DATARMNET1c959e10ca;u8 
+DATARMNET1819cae4a3;u8 DATARMNETb035edcfb9;u8 proto;u8 DATARMNET8b5ace4a98;u8 
+DATARMNET602389fe52;u8 DATARMNETc2d5c71ce1;u8 seq;u8 DATARMNET969cfb9094;};enum 
+DATARMNET4c422f5fb1{DATARMNET9a035137c0,DATARMNET8d88a2f3f5,DATARMNET755fb8f198,
+};struct DATARMNET0331d6732d{struct list_head DATARMNET32e10c59ce;struct 
+hlist_node list;struct DATARMNETbf4d34b241 DATARMNET54338da2ff;};int 
+DATARMNET740f3b34b3(struct sk_buff*DATARMNETaafc1d9519,struct genl_info*
+DATARMNET54338da2ff);int DATARMNET29175fb5fc(struct sk_buff*DATARMNETaafc1d9519,
+struct genl_info*DATARMNET54338da2ff);int DATARMNETd81d2866ba(struct sk_buff*
+DATARMNETaafc1d9519,struct genl_info*DATARMNET54338da2ff);int 
+DATARMNETc850634243(struct sk_buff*DATARMNETaafc1d9519,struct genl_info*
+DATARMNET54338da2ff);int DATARMNET283f08f439(struct sk_buff*DATARMNETaafc1d9519,
+struct genl_info*DATARMNET54338da2ff);int DATARMNET9bbfc822c2(struct sk_buff*
+DATARMNETaafc1d9519,struct genl_info*DATARMNET54338da2ff);int 
+DATARMNET5d4ca1da1c(struct genl_info*DATARMNET54338da2ff,int val);int 
+DATARMNET5945236cd3(int val);int DATARMNETa9a7fa898c(void);void 
+DATARMNET8d0d510d45(uint32_t DATARMNETaf3d356342,struct DATARMNET177911299b*
+DATARMNET60b6e12cfd);int DATARMNETb5d58adbe7(struct DATARMNET177911299b*msg_ptr)
+;int DATARMNETd65d1351b9(struct sk_buff*DATARMNETaafc1d9519,struct genl_info*
+DATARMNET54338da2ff);void DATARMNET1d4b1eff85(struct DATARMNET177911299b*
+DATARMNET60b6e12cfd,uint8_t DATARMNET907a90c6af,uint8_t DATARMNET9a4544e068);int
+ DATARMNET0dbc627e8f(void);int DATARMNETeabd69d1ab(void);
+#endif 
+

+ 677 - 0
qcom/opensource/datarmnet-ext/shs/rmnet_shs_wq_mem.c

@@ -0,0 +1,677 @@
+/* Copyright (c) 2019-2020 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 and
+ * only version 2 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ */
+
+#include "rmnet_shs_modules.h"
+#include "rmnet_shs_common.h"
+#include "rmnet_shs_wq_mem.h"
+#include <linux/proc_fs.h>
+#include <linux/refcount.h>
+MODULE_LICENSE("\x47\x50\x4c\x20\x76\x32");struct proc_dir_entry*
+DATARMNETe4c5563cdb;struct DATARMNET33582f7450 DATARMNET63c47f3c37[
+DATARMNETc6782fed88];struct DATARMNETf44cda1bf2 DATARMNET22b4032799[
+DATARMNET75c69edb82];struct DATARMNET3a84fbfeae DATARMNETb0d78d576f[
+DATARMNET75c69edb82];struct DATARMNETc13d990bf1 DATARMNET3d25ff4ef4[
+DATARMNET67578af78f];struct DATARMNET26737fb11e DATARMNET2fdef9da24[
+DATARMNET67578af78f];struct DATARMNET57ccbe14f3 DATARMNETf46265286b[
+DATARMNETe4d15b9332];struct list_head DATARMNET6c23f11e81=LIST_HEAD_INIT(
+DATARMNET6c23f11e81);struct list_head DATARMNETf91b305f4e=LIST_HEAD_INIT(
+DATARMNETf91b305f4e);struct list_head DATARMNETe46ae760db=LIST_HEAD_INIT(
+DATARMNETe46ae760db);struct list_head DATARMNET3208cd0982=LIST_HEAD_INIT(
+DATARMNET3208cd0982);struct list_head DATARMNET922b4752e2=LIST_HEAD_INIT(
+DATARMNET922b4752e2);struct DATARMNETa41d4c4a12*DATARMNET410036d5ac;struct 
+DATARMNETa41d4c4a12*DATARMNET19c47a9f3a;struct DATARMNETa41d4c4a12*
+DATARMNET22e796eff3;struct DATARMNETa41d4c4a12*DATARMNET9b8000d2a7;struct 
+DATARMNETa41d4c4a12*DATARMNET835a28686c;struct DATARMNETa41d4c4a12*
+DATARMNET67d31dc40a;static void DATARMNET6069bf201a(struct vm_area_struct*vma){
+return;}static void DATARMNET0f6b7f3f93(struct vm_area_struct*vma){return;}
+static vm_fault_t DATARMNET9efe8a3d18(struct vm_fault*DATARMNETca901b4e1f){
+struct page*page=NULL;struct DATARMNETa41d4c4a12*DATARMNET54338da2ff;
+DATARMNET6bf538fa23();if(DATARMNET410036d5ac){DATARMNET54338da2ff=(struct 
+DATARMNETa41d4c4a12*)DATARMNETca901b4e1f->vma->vm_private_data;if(
+DATARMNET54338da2ff->data){page=virt_to_page(DATARMNET54338da2ff->data);get_page
+(page);DATARMNETca901b4e1f->page=page;}else{DATARMNETaea4c85748();return 
+VM_FAULT_SIGSEGV;}}else{DATARMNETaea4c85748();return VM_FAULT_SIGSEGV;}
+DATARMNETaea4c85748();return(0xd2d+202-0xdf7);}static vm_fault_t 
+DATARMNETd005aa7157(struct vm_fault*DATARMNETca901b4e1f){struct page*page=NULL;
+struct DATARMNETa41d4c4a12*DATARMNET54338da2ff;DATARMNET6bf538fa23();if(
+DATARMNET19c47a9f3a){DATARMNET54338da2ff=(struct DATARMNETa41d4c4a12*)
+DATARMNETca901b4e1f->vma->vm_private_data;if(DATARMNET54338da2ff->data){page=
+virt_to_page(DATARMNET54338da2ff->data);get_page(page);DATARMNETca901b4e1f->page
+=page;}else{DATARMNETaea4c85748();return VM_FAULT_SIGSEGV;}}else{
+DATARMNETaea4c85748();return VM_FAULT_SIGSEGV;}DATARMNETaea4c85748();return
+(0xd2d+202-0xdf7);}static vm_fault_t DATARMNETb3a7180954(struct vm_fault*
+DATARMNETca901b4e1f){struct page*page=NULL;struct DATARMNETa41d4c4a12*
+DATARMNET54338da2ff;DATARMNET6bf538fa23();if(DATARMNET22e796eff3){
+DATARMNET54338da2ff=(struct DATARMNETa41d4c4a12*)DATARMNETca901b4e1f->vma->
+vm_private_data;if(DATARMNET54338da2ff->data){page=virt_to_page(
+DATARMNET54338da2ff->data);get_page(page);DATARMNETca901b4e1f->page=page;}else{
+DATARMNETaea4c85748();return VM_FAULT_SIGSEGV;}}else{DATARMNETaea4c85748();
+return VM_FAULT_SIGSEGV;}DATARMNETaea4c85748();return(0xd2d+202-0xdf7);}static 
+vm_fault_t DATARMNETe35719979c(struct vm_fault*DATARMNETca901b4e1f){struct page*
+page=NULL;struct DATARMNETa41d4c4a12*DATARMNET54338da2ff;DATARMNET6bf538fa23();
+if(DATARMNET9b8000d2a7){DATARMNET54338da2ff=(struct DATARMNETa41d4c4a12*)
+DATARMNETca901b4e1f->vma->vm_private_data;if(DATARMNET54338da2ff->data){page=
+virt_to_page(DATARMNET54338da2ff->data);get_page(page);DATARMNETca901b4e1f->page
+=page;}else{DATARMNETaea4c85748();return VM_FAULT_SIGSEGV;}}else{
+DATARMNETaea4c85748();return VM_FAULT_SIGSEGV;}DATARMNETaea4c85748();return
+(0xd2d+202-0xdf7);}static vm_fault_t DATARMNET1ab1f570f2(struct vm_fault*
+DATARMNETca901b4e1f){struct page*page=NULL;struct DATARMNETa41d4c4a12*
+DATARMNET54338da2ff;DATARMNET6bf538fa23();if(DATARMNET835a28686c){
+DATARMNET54338da2ff=(struct DATARMNETa41d4c4a12*)DATARMNETca901b4e1f->vma->
+vm_private_data;if(DATARMNET54338da2ff->data){page=virt_to_page(
+DATARMNET54338da2ff->data);get_page(page);DATARMNETca901b4e1f->page=page;}else{
+DATARMNETaea4c85748();return VM_FAULT_SIGSEGV;}}else{DATARMNETaea4c85748();
+return VM_FAULT_SIGSEGV;}DATARMNETaea4c85748();return(0xd2d+202-0xdf7);}static 
+vm_fault_t DATARMNETe421c4e1db(struct vm_fault*DATARMNETca901b4e1f){struct page*
+page=NULL;struct DATARMNETa41d4c4a12*DATARMNET54338da2ff;DATARMNET6bf538fa23();
+if(DATARMNET67d31dc40a){DATARMNET54338da2ff=(struct DATARMNETa41d4c4a12*)
+DATARMNETca901b4e1f->vma->vm_private_data;if(DATARMNET54338da2ff->data){page=
+virt_to_page(DATARMNET54338da2ff->data);get_page(page);DATARMNETca901b4e1f->page
+=page;}else{DATARMNETaea4c85748();return VM_FAULT_SIGSEGV;}}else{
+DATARMNETaea4c85748();return VM_FAULT_SIGSEGV;}DATARMNETaea4c85748();return
+(0xd2d+202-0xdf7);}static const struct vm_operations_struct DATARMNETfa4e968e7d=
+{.close=DATARMNET0f6b7f3f93,.open=DATARMNET6069bf201a,.fault=DATARMNET9efe8a3d18
+,};static const struct vm_operations_struct DATARMNETe9c0626068={.close=
+DATARMNET0f6b7f3f93,.open=DATARMNET6069bf201a,.fault=DATARMNETd005aa7157,};
+static const struct vm_operations_struct DATARMNET9a89317a86={.close=
+DATARMNET0f6b7f3f93,.open=DATARMNET6069bf201a,.fault=DATARMNETb3a7180954,};
+static const struct vm_operations_struct DATARMNET5462c2ce60={.close=
+DATARMNET0f6b7f3f93,.open=DATARMNET6069bf201a,.fault=DATARMNETe35719979c,};
+static const struct vm_operations_struct DATARMNET523167fa26={.close=
+DATARMNET0f6b7f3f93,.open=DATARMNET6069bf201a,.fault=DATARMNET1ab1f570f2,};
+static const struct vm_operations_struct DATARMNET41944cc550={.close=
+DATARMNET0f6b7f3f93,.open=DATARMNET6069bf201a,.fault=DATARMNETe421c4e1db,};
+static int DATARMNET54418f934d(struct file*DATARMNET3cc114dce0,struct 
+vm_area_struct*vma){vma->vm_ops=&DATARMNETfa4e968e7d;vm_flags_set(vma,
+VM_DONTEXPAND|VM_DONTDUMP);vma->vm_private_data=DATARMNET3cc114dce0->
+private_data;return(0xd2d+202-0xdf7);}static int DATARMNETc55748448d(struct file
+*DATARMNET3cc114dce0,struct vm_area_struct*vma){vma->vm_ops=&DATARMNETe9c0626068
+;vm_flags_set(vma,VM_DONTEXPAND|VM_DONTDUMP);vma->vm_private_data=
+DATARMNET3cc114dce0->private_data;return(0xd2d+202-0xdf7);}static int 
+DATARMNET43c6d751a2(struct file*DATARMNET3cc114dce0,struct vm_area_struct*vma){
+vma->vm_ops=&DATARMNET9a89317a86;vm_flags_set(vma,VM_DONTEXPAND|VM_DONTDUMP);vma
+->vm_private_data=DATARMNET3cc114dce0->private_data;return(0xd2d+202-0xdf7);}
+static int DATARMNET7cc042bdf3(struct file*DATARMNET3cc114dce0,struct 
+vm_area_struct*vma){vma->vm_ops=&DATARMNET5462c2ce60;vm_flags_set(vma,
+VM_DONTEXPAND|VM_DONTDUMP);vma->vm_private_data=DATARMNET3cc114dce0->
+private_data;return(0xd2d+202-0xdf7);}static int DATARMNET150e284e90(struct file
+*DATARMNET3cc114dce0,struct vm_area_struct*vma){vma->vm_ops=&DATARMNET523167fa26
+;vm_flags_set(vma,VM_DONTEXPAND|VM_DONTDUMP);vma->vm_private_data=
+DATARMNET3cc114dce0->private_data;return(0xd2d+202-0xdf7);}static int 
+DATARMNET444e2eb654(struct file*DATARMNET3cc114dce0,struct vm_area_struct*vma){
+vma->vm_ops=&DATARMNET41944cc550;vm_flags_set(vma,VM_DONTEXPAND|VM_DONTDUMP);vma
+->vm_private_data=DATARMNET3cc114dce0->private_data;return(0xd2d+202-0xdf7);}
+static int DATARMNET33a80d3bf7(struct inode*inode,struct file*
+DATARMNET3cc114dce0){struct DATARMNETa41d4c4a12*DATARMNET54338da2ff;rm_err(
+"\x25\x73",
+"\x53\x48\x53\x5f\x4d\x45\x4d\x3a\x20\x72\x6d\x6e\x65\x74\x5f\x73\x68\x73\x5f\x6f\x70\x65\x6e\x20\x2d\x20\x65\x6e\x74\x72\x79" "\n"
+);DATARMNET6bf538fa23();if(!DATARMNET410036d5ac){DATARMNET54338da2ff=kzalloc(
+sizeof(struct DATARMNETa41d4c4a12),GFP_ATOMIC);if(!DATARMNET54338da2ff)goto 
+DATARMNET1d7e728ddf;DATARMNET54338da2ff->data=(char*)get_zeroed_page(GFP_ATOMIC)
+;if(!DATARMNET54338da2ff->data){kfree(DATARMNET54338da2ff);goto 
+DATARMNET1d7e728ddf;}DATARMNET410036d5ac=DATARMNET54338da2ff;refcount_set(&
+DATARMNET410036d5ac->refcnt,(0xd26+209-0xdf6));rm_err(
+"\x53\x48\x53\x5f\x4d\x45\x4d\x3a\x20\x76\x69\x72\x74\x5f\x74\x6f\x5f\x70\x68\x79\x73\x20\x3d\x20\x30\x78\x25\x6c\x6c\x78\x20\x63\x61\x70\x5f\x73\x68\x61\x72\x65\x64\x20\x3d\x20\x30\x78\x25\x6c\x6c\x78" "\n"
+,(unsigned long long)virt_to_phys((void*)DATARMNET54338da2ff),(unsigned long 
+long)virt_to_phys((void*)DATARMNET410036d5ac));}else{refcount_inc(&
+DATARMNET410036d5ac->refcnt);}DATARMNET3cc114dce0->private_data=
+DATARMNET410036d5ac;DATARMNETaea4c85748();rm_err("\x25\x73",
+"\x53\x48\x53\x5f\x4d\x45\x4d\x3a\x20\x72\x6d\x6e\x65\x74\x5f\x73\x68\x73\x5f\x6f\x70\x65\x6e\x20\x2d\x20\x4f\x4b" "\n"
+);return(0xd2d+202-0xdf7);DATARMNET1d7e728ddf:DATARMNETaea4c85748();rm_err(
+"\x25\x73",
+"\x53\x48\x53\x5f\x4d\x45\x4d\x3a\x20\x72\x6d\x6e\x65\x74\x5f\x73\x68\x73\x5f\x6f\x70\x65\x6e\x20\x2d\x20\x46\x41\x49\x4c\x45\x44" "\n"
+);return-ENOMEM;}static int DATARMNET0935e3beb9(struct inode*inode,struct file*
+DATARMNET3cc114dce0){struct DATARMNETa41d4c4a12*DATARMNET54338da2ff;rm_err(
+"\x25\x73",
+"\x53\x48\x53\x5f\x4d\x45\x4d\x3a\x20\x72\x6d\x6e\x65\x74\x5f\x73\x68\x73\x5f\x6f\x70\x65\x6e\x20\x67\x5f\x66\x6c\x6f\x77\x73\x20\x2d\x20\x65\x6e\x74\x72\x79" "\n"
+);DATARMNET6bf538fa23();if(!DATARMNET19c47a9f3a){DATARMNET54338da2ff=kzalloc(
+sizeof(struct DATARMNETa41d4c4a12),GFP_ATOMIC);if(!DATARMNET54338da2ff)goto 
+DATARMNET1d7e728ddf;DATARMNET54338da2ff->data=(char*)get_zeroed_page(GFP_ATOMIC)
+;if(!DATARMNET54338da2ff->data){kfree(DATARMNET54338da2ff);goto 
+DATARMNET1d7e728ddf;}DATARMNET19c47a9f3a=DATARMNET54338da2ff;refcount_set(&
+DATARMNET19c47a9f3a->refcnt,(0xd26+209-0xdf6));rm_err(
+"\x53\x48\x53\x5f\x4d\x45\x4d\x3a\x20\x76\x69\x72\x74\x5f\x74\x6f\x5f\x70\x68\x79\x73\x20\x3d\x20\x30\x78\x25\x6c\x6c\x78\x20\x67\x66\x6c\x6f\x77\x5f\x73\x68\x61\x72\x65\x64\x20\x3d\x20\x30\x78\x25\x6c\x6c\x78" "\n"
+,(unsigned long long)virt_to_phys((void*)DATARMNET54338da2ff),(unsigned long 
+long)virt_to_phys((void*)DATARMNET19c47a9f3a));}else{refcount_inc(&
+DATARMNET19c47a9f3a->refcnt);}DATARMNET3cc114dce0->private_data=
+DATARMNET19c47a9f3a;DATARMNETaea4c85748();return(0xd2d+202-0xdf7);
+DATARMNET1d7e728ddf:DATARMNETaea4c85748();rm_err("\x25\x73",
+"\x53\x48\x53\x5f\x4d\x45\x4d\x3a\x20\x72\x6d\x6e\x65\x74\x5f\x73\x68\x73\x5f\x6f\x70\x65\x6e\x20\x2d\x20\x46\x41\x49\x4c\x45\x44" "\n"
+);return-ENOMEM;}static int DATARMNETfbd34e70a2(struct inode*inode,struct file*
+DATARMNET3cc114dce0){struct DATARMNETa41d4c4a12*DATARMNET54338da2ff;rm_err(
+"\x25\x73",
+"\x53\x48\x53\x5f\x4d\x45\x4d\x3a\x20\x72\x6d\x6e\x65\x74\x5f\x73\x68\x73\x5f\x6f\x70\x65\x6e\x20\x73\x73\x5f\x66\x6c\x6f\x77\x73\x20\x2d\x20\x65\x6e\x74\x72\x79" "\n"
+);DATARMNET6bf538fa23();if(!DATARMNET22e796eff3){DATARMNET54338da2ff=kzalloc(
+sizeof(struct DATARMNETa41d4c4a12),GFP_ATOMIC);if(!DATARMNET54338da2ff)goto 
+DATARMNET1d7e728ddf;DATARMNET54338da2ff->data=(char*)get_zeroed_page(GFP_ATOMIC)
+;if(!DATARMNET54338da2ff->data){kfree(DATARMNET54338da2ff);goto 
+DATARMNET1d7e728ddf;}DATARMNET22e796eff3=DATARMNET54338da2ff;refcount_set(&
+DATARMNET22e796eff3->refcnt,(0xd26+209-0xdf6));rm_err(
+"\x53\x48\x53\x5f\x4d\x45\x4d\x3a\x20\x76\x69\x72\x74\x5f\x74\x6f\x5f\x70\x68\x79\x73\x20\x3d\x20\x30\x78\x25\x6c\x6c\x78\x20\x73\x73\x66\x6c\x6f\x77\x5f\x73\x68\x61\x72\x65\x64\x20\x3d\x20\x30\x78\x25\x6c\x6c\x78" "\n"
+,(unsigned long long)virt_to_phys((void*)DATARMNET54338da2ff),(unsigned long 
+long)virt_to_phys((void*)DATARMNET22e796eff3));}else{refcount_inc(&
+DATARMNET22e796eff3->refcnt);}DATARMNET3cc114dce0->private_data=
+DATARMNET22e796eff3;DATARMNETaea4c85748();return(0xd2d+202-0xdf7);
+DATARMNET1d7e728ddf:DATARMNETaea4c85748();rm_err("\x25\x73",
+"\x53\x48\x53\x5f\x4d\x45\x4d\x3a\x20\x72\x6d\x6e\x65\x74\x5f\x73\x68\x73\x5f\x6f\x70\x65\x6e\x20\x2d\x20\x46\x41\x49\x4c\x45\x44" "\n"
+);return-ENOMEM;}static int DATARMNET57bcb932f3(struct inode*inode,struct file*
+DATARMNET3cc114dce0){struct DATARMNETa41d4c4a12*DATARMNET54338da2ff;rm_err(
+"\x25\x73",
+"\x53\x48\x53\x5f\x4d\x45\x4d\x3a\x20\x72\x6d\x6e\x65\x74\x5f\x73\x68\x73\x5f\x6f\x70\x65\x6e\x20\x66\x66\x6c\x6f\x77\x73\x20\x2d\x20\x65\x6e\x74\x72\x79" "\n"
+);DATARMNET6bf538fa23();if(!DATARMNET9b8000d2a7){DATARMNET54338da2ff=kzalloc(
+sizeof(struct DATARMNETa41d4c4a12),GFP_ATOMIC);if(!DATARMNET54338da2ff)goto 
+DATARMNET1d7e728ddf;DATARMNET54338da2ff->data=(char*)get_zeroed_page(GFP_ATOMIC)
+;if(!DATARMNET54338da2ff->data){kfree(DATARMNET54338da2ff);goto 
+DATARMNET1d7e728ddf;}DATARMNET9b8000d2a7=DATARMNET54338da2ff;refcount_set(&
+DATARMNET9b8000d2a7->refcnt,(0xd26+209-0xdf6));rm_err(
+"\x53\x48\x53\x5f\x4d\x45\x4d\x3a\x20\x76\x69\x72\x74\x5f\x74\x6f\x5f\x70\x68\x79\x73\x20\x3d\x20\x30\x78\x25\x6c\x6c\x78\x20\x66\x66\x6c\x6f\x77\x5f\x73\x68\x61\x72\x65\x64\x20\x3d\x20\x30\x78\x25\x6c\x6c\x78" "\n"
+,(unsigned long long)virt_to_phys((void*)DATARMNET54338da2ff),(unsigned long 
+long)virt_to_phys((void*)DATARMNET9b8000d2a7));}else{refcount_inc(&
+DATARMNET9b8000d2a7->refcnt);}DATARMNET3cc114dce0->private_data=
+DATARMNET9b8000d2a7;DATARMNETaea4c85748();return(0xd2d+202-0xdf7);
+DATARMNET1d7e728ddf:DATARMNETaea4c85748();rm_err("\x25\x73",
+"\x53\x48\x53\x5f\x4d\x45\x4d\x3a\x20\x72\x6d\x6e\x65\x74\x5f\x73\x68\x73\x5f\x6f\x70\x65\x6e\x20\x2d\x20\x46\x41\x49\x4c\x45\x44" "\n"
+);return-ENOMEM;}static int DATARMNET601894f27b(struct inode*inode,struct file*
+DATARMNET3cc114dce0){struct DATARMNETa41d4c4a12*DATARMNET54338da2ff;rm_err(
+"\x25\x73",
+"\x53\x48\x53\x5f\x4d\x45\x4d\x3a\x20\x72\x6d\x6e\x65\x74\x5f\x73\x68\x73\x5f\x6f\x70\x65\x6e\x20\x6c\x6c\x5f\x66\x6c\x6f\x77\x73\x20\x2d\x20\x65\x6e\x74\x72\x79" "\n"
+);DATARMNET6bf538fa23();if(!DATARMNET835a28686c){DATARMNET54338da2ff=kzalloc(
+sizeof(struct DATARMNETa41d4c4a12),GFP_ATOMIC);if(!DATARMNET54338da2ff)goto 
+DATARMNET1d7e728ddf;DATARMNET54338da2ff->data=(char*)get_zeroed_page(GFP_ATOMIC)
+;if(!DATARMNET54338da2ff->data){kfree(DATARMNET54338da2ff);goto 
+DATARMNET1d7e728ddf;}DATARMNET835a28686c=DATARMNET54338da2ff;refcount_set(&
+DATARMNET835a28686c->refcnt,(0xd26+209-0xdf6));rm_err(
+"\x53\x48\x53\x5f\x4d\x45\x4d\x3a\x20\x76\x69\x72\x74\x5f\x74\x6f\x5f\x70\x68\x79\x73\x20\x3d\x20\x30\x78\x25\x6c\x6c\x78\x20\x6c\x6c\x66\x6c\x6f\x77\x5f\x73\x68\x61\x72\x65\x64\x20\x3d\x20\x30\x78\x25\x6c\x6c\x78" "\n"
+,(unsigned long long)virt_to_phys((void*)DATARMNET54338da2ff),(unsigned long 
+long)virt_to_phys((void*)DATARMNET835a28686c));}else{refcount_inc(&
+DATARMNET835a28686c->refcnt);}DATARMNET3cc114dce0->private_data=
+DATARMNET835a28686c;DATARMNETaea4c85748();return(0xd2d+202-0xdf7);
+DATARMNET1d7e728ddf:DATARMNETaea4c85748();rm_err("\x25\x73",
+"\x53\x48\x53\x5f\x4d\x45\x4d\x3a\x20\x72\x6d\x6e\x65\x74\x5f\x73\x68\x73\x5f\x6f\x70\x65\x6e\x20\x2d\x20\x46\x41\x49\x4c\x45\x44" "\n"
+);return-ENOMEM;}static int DATARMNETb9d10d8cc0(struct inode*inode,struct file*
+DATARMNET3cc114dce0){struct DATARMNETa41d4c4a12*DATARMNET54338da2ff;rm_err(
+"\x25\x73",
+"\x53\x48\x53\x5f\x4d\x45\x4d\x3a\x20\x72\x6d\x6e\x65\x74\x5f\x73\x68\x73\x5f\x6f\x70\x65\x6e\x20\x6e\x65\x74\x64\x65\x76\x20\x2d\x20\x65\x6e\x74\x72\x79" "\n"
+);DATARMNET6bf538fa23();if(!DATARMNET67d31dc40a){DATARMNET54338da2ff=kzalloc(
+sizeof(struct DATARMNETa41d4c4a12),GFP_ATOMIC);if(!DATARMNET54338da2ff)goto 
+DATARMNET1d7e728ddf;DATARMNET54338da2ff->data=(char*)get_zeroed_page(GFP_ATOMIC)
+;if(!DATARMNET54338da2ff->data){kfree(DATARMNET54338da2ff);goto 
+DATARMNET1d7e728ddf;}DATARMNET67d31dc40a=DATARMNET54338da2ff;refcount_set(&
+DATARMNET67d31dc40a->refcnt,(0xd26+209-0xdf6));rm_err(
+"\x53\x48\x53\x5f\x4d\x45\x4d\x3a\x20\x76\x69\x72\x74\x5f\x74\x6f\x5f\x70\x68\x79\x73\x20\x3d\x20\x30\x78\x25\x6c\x6c\x78\x20\x6e\x65\x74\x64\x65\x76\x5f\x73\x68\x61\x72\x65\x64\x20\x3d\x20\x30\x78\x25\x6c\x6c\x78" "\n"
+,(unsigned long long)virt_to_phys((void*)DATARMNET54338da2ff),(unsigned long 
+long)virt_to_phys((void*)DATARMNET67d31dc40a));}else{refcount_inc(&
+DATARMNET67d31dc40a->refcnt);}DATARMNET3cc114dce0->private_data=
+DATARMNET67d31dc40a;DATARMNETaea4c85748();return(0xd2d+202-0xdf7);
+DATARMNET1d7e728ddf:DATARMNETaea4c85748();return-ENOMEM;}static ssize_t 
+DATARMNETaf2aa1d70f(struct file*DATARMNET3cc114dce0,char __user*buf,size_t len,
+loff_t*DATARMNET6396f657b3){return DATARMNET29d29f44cf;}static ssize_t 
+DATARMNET4761dcd3fd(struct file*DATARMNET3cc114dce0,const char __user*buf,size_t
+ len,loff_t*DATARMNET6396f657b3){return len;}static int DATARMNETcfbc4f0c39(
+struct inode*inode,struct file*DATARMNET3cc114dce0){struct DATARMNETa41d4c4a12*
+DATARMNET54338da2ff;rm_err("\x25\x73",
+"\x53\x48\x53\x5f\x4d\x45\x4d\x3a\x20\x72\x6d\x6e\x65\x74\x5f\x73\x68\x73\x5f\x72\x65\x6c\x65\x61\x73\x65\x20\x2d\x20\x65\x6e\x74\x72\x79" "\n"
+);DATARMNET6bf538fa23();if(DATARMNET410036d5ac){DATARMNET54338da2ff=
+DATARMNET3cc114dce0->private_data;if(refcount_read(&DATARMNET54338da2ff->refcnt)
+<=(0xd26+209-0xdf6)){free_page((unsigned long)DATARMNET54338da2ff->data);kfree(
+DATARMNET54338da2ff);DATARMNET410036d5ac=NULL;DATARMNET3cc114dce0->private_data=
+NULL;}else{refcount_dec(&DATARMNET54338da2ff->refcnt);}}DATARMNETaea4c85748();
+return(0xd2d+202-0xdf7);}static int DATARMNET2a9f67714f(struct inode*inode,
+struct file*DATARMNET3cc114dce0){struct DATARMNETa41d4c4a12*DATARMNET54338da2ff;
+rm_err("\x25\x73",
+"\x53\x48\x53\x5f\x4d\x45\x4d\x3a\x20\x72\x6d\x6e\x65\x74\x5f\x73\x68\x73\x5f\x72\x65\x6c\x65\x61\x73\x65\x20\x2d\x20\x65\x6e\x74\x72\x79" "\n"
+);DATARMNET6bf538fa23();if(DATARMNET19c47a9f3a){DATARMNET54338da2ff=
+DATARMNET3cc114dce0->private_data;if(refcount_read(&DATARMNET54338da2ff->refcnt)
+<=(0xd26+209-0xdf6)){free_page((unsigned long)DATARMNET54338da2ff->data);kfree(
+DATARMNET54338da2ff);DATARMNET19c47a9f3a=NULL;DATARMNET3cc114dce0->private_data=
+NULL;}else{refcount_dec(&DATARMNET54338da2ff->refcnt);}}DATARMNETaea4c85748();
+return(0xd2d+202-0xdf7);}static int DATARMNET968bc5b80d(struct inode*inode,
+struct file*DATARMNET3cc114dce0){struct DATARMNETa41d4c4a12*DATARMNET54338da2ff;
+rm_err("\x25\x73",
+"\x53\x48\x53\x5f\x4d\x45\x4d\x3a\x20\x72\x6d\x6e\x65\x74\x5f\x73\x68\x73\x5f\x72\x65\x6c\x65\x61\x73\x65\x20\x2d\x20\x65\x6e\x74\x72\x79" "\n"
+);DATARMNET6bf538fa23();if(DATARMNET22e796eff3){DATARMNET54338da2ff=
+DATARMNET3cc114dce0->private_data;if(refcount_read(&DATARMNET54338da2ff->refcnt)
+<=(0xd26+209-0xdf6)){free_page((unsigned long)DATARMNET54338da2ff->data);kfree(
+DATARMNET54338da2ff);DATARMNET22e796eff3=NULL;DATARMNET3cc114dce0->private_data=
+NULL;}else{refcount_dec(&DATARMNET54338da2ff->refcnt);}}DATARMNETaea4c85748();
+return(0xd2d+202-0xdf7);}static int DATARMNET59b415aded(struct inode*inode,
+struct file*DATARMNET3cc114dce0){struct DATARMNETa41d4c4a12*DATARMNET54338da2ff;
+rm_err("\x25\x73",
+"\x53\x48\x53\x5f\x4d\x45\x4d\x3a\x20\x72\x6d\x6e\x65\x74\x5f\x73\x68\x73\x5f\x72\x65\x6c\x65\x61\x73\x65\x20\x2d\x20\x65\x6e\x74\x72\x79" "\n"
+);DATARMNET6bf538fa23();if(DATARMNET9b8000d2a7){DATARMNET54338da2ff=
+DATARMNET3cc114dce0->private_data;if(refcount_read(&DATARMNET54338da2ff->refcnt)
+<=(0xd26+209-0xdf6)){free_page((unsigned long)DATARMNET54338da2ff->data);kfree(
+DATARMNET54338da2ff);DATARMNET9b8000d2a7=NULL;DATARMNET3cc114dce0->private_data=
+NULL;}else{refcount_dec(&DATARMNET54338da2ff->refcnt);}}DATARMNETaea4c85748();
+return(0xd2d+202-0xdf7);}static int DATARMNET794d7587bd(struct inode*inode,
+struct file*DATARMNET3cc114dce0){struct DATARMNETa41d4c4a12*DATARMNET54338da2ff;
+rm_err("\x25\x73",
+"\x53\x48\x53\x5f\x4d\x45\x4d\x3a\x20\x72\x6d\x6e\x65\x74\x5f\x73\x68\x73\x5f\x72\x65\x6c\x65\x61\x73\x65\x20\x2d\x20\x65\x6e\x74\x72\x79" "\n"
+);DATARMNET6bf538fa23();if(DATARMNET835a28686c){DATARMNET54338da2ff=
+DATARMNET3cc114dce0->private_data;if(refcount_read(&DATARMNET54338da2ff->refcnt)
+<=(0xd26+209-0xdf6)){free_page((unsigned long)DATARMNET54338da2ff->data);kfree(
+DATARMNET54338da2ff);DATARMNET835a28686c=NULL;DATARMNET3cc114dce0->private_data=
+NULL;}else{refcount_dec(&DATARMNET54338da2ff->refcnt);}}DATARMNETaea4c85748();
+return(0xd2d+202-0xdf7);}static int DATARMNET18464ea5e3(struct inode*inode,
+struct file*DATARMNET3cc114dce0){struct DATARMNETa41d4c4a12*DATARMNET54338da2ff;
+rm_err("\x25\x73",
+"\x53\x48\x53\x5f\x4d\x45\x4d\x3a\x20\x72\x6d\x6e\x65\x74\x5f\x73\x68\x73\x5f\x72\x65\x6c\x65\x61\x73\x65\x20\x6e\x65\x74\x64\x65\x76\x20\x2d\x20\x65\x6e\x74\x72\x79" "\n"
+);DATARMNET6bf538fa23();if(DATARMNET67d31dc40a){DATARMNET54338da2ff=
+DATARMNET3cc114dce0->private_data;if(refcount_read(&DATARMNET54338da2ff->refcnt)
+<=(0xd26+209-0xdf6)){free_page((unsigned long)DATARMNET54338da2ff->data);kfree(
+DATARMNET54338da2ff);DATARMNET67d31dc40a=NULL;DATARMNET3cc114dce0->private_data=
+NULL;}else{refcount_dec(&DATARMNET54338da2ff->refcnt);}}DATARMNETaea4c85748();
+return(0xd2d+202-0xdf7);}static const struct proc_ops DATARMNET668485bd14={.
+proc_mmap=DATARMNET54418f934d,.proc_open=DATARMNET33a80d3bf7,.proc_release=
+DATARMNETcfbc4f0c39,.proc_read=DATARMNETaf2aa1d70f,.proc_write=
+DATARMNET4761dcd3fd,};static const struct proc_ops DATARMNETe84fbaa6af={.
+proc_mmap=DATARMNETc55748448d,.proc_open=DATARMNET0935e3beb9,.proc_release=
+DATARMNET2a9f67714f,.proc_read=DATARMNETaf2aa1d70f,.proc_write=
+DATARMNET4761dcd3fd,};static const struct proc_ops DATARMNET8fe5f892a8={.
+proc_mmap=DATARMNET43c6d751a2,.proc_open=DATARMNETfbd34e70a2,.proc_release=
+DATARMNET968bc5b80d,.proc_read=DATARMNETaf2aa1d70f,.proc_write=
+DATARMNET4761dcd3fd,};static const struct proc_ops DATARMNET0104d40d4b={.
+proc_mmap=DATARMNET7cc042bdf3,.proc_open=DATARMNET57bcb932f3,.proc_release=
+DATARMNET59b415aded,.proc_read=DATARMNETaf2aa1d70f,.proc_write=
+DATARMNET4761dcd3fd,};static const struct proc_ops DATARMNETddcdf7bd4e={.
+proc_mmap=DATARMNET150e284e90,.proc_open=DATARMNET601894f27b,.proc_release=
+DATARMNET794d7587bd,.proc_read=DATARMNETaf2aa1d70f,.proc_write=
+DATARMNET4761dcd3fd,};static const struct proc_ops DATARMNET6eb63d9ad0={.
+proc_mmap=DATARMNET444e2eb654,.proc_open=DATARMNETb9d10d8cc0,.proc_release=
+DATARMNET18464ea5e3,.proc_read=DATARMNETaf2aa1d70f,.proc_write=
+DATARMNET4761dcd3fd,};void DATARMNET28a80d526e(struct DATARMNET6c78e47d24*
+DATARMNETd2a694d52a,struct list_head*DATARMNETf0fb155a9c){struct 
+DATARMNETa52c09a590*DATARMNET0f551e8a47;if(!DATARMNETd2a694d52a||!
+DATARMNETf0fb155a9c){DATARMNET68d84e7b98[DATARMNETac729c3d29]++;return;}
+DATARMNET0f551e8a47=kzalloc(sizeof(*DATARMNET0f551e8a47),GFP_ATOMIC);if(
+DATARMNET0f551e8a47!=NULL){DATARMNET0f551e8a47->DATARMNET253a9fc708=
+DATARMNETd2a694d52a->DATARMNET253a9fc708;DATARMNET0f551e8a47->
+DATARMNET42a992465f=DATARMNETd2a694d52a->DATARMNET7c894c2f8f;DATARMNET0f551e8a47
+->hash=DATARMNETd2a694d52a->hash;DATARMNET0f551e8a47->bif=DATARMNETd2a694d52a->
+bif;DATARMNET0f551e8a47->ack_thresh=DATARMNETd2a694d52a->ack_thresh;
+DATARMNET0f551e8a47->DATARMNET324c1a8f98=DATARMNETd2a694d52a->
+DATARMNET324c1a8f98;DATARMNET0f551e8a47->DATARMNETbb80fccd97=DATARMNETd2a694d52a
+->DATARMNETbb80fccd97;list_add(&DATARMNET0f551e8a47->DATARMNET6f898987df,
+DATARMNETf0fb155a9c);}else{DATARMNET68d84e7b98[DATARMNET6533f70c87]++;}}void 
+DATARMNET3af54cd726(struct list_head*DATARMNETf0fb155a9c){struct 
+DATARMNETa52c09a590*DATARMNET0f551e8a47;struct list_head*DATARMNET7b34b7b5be,*
+next;if(!DATARMNETf0fb155a9c){DATARMNET68d84e7b98[DATARMNETac729c3d29]++;return;
+}list_for_each_safe(DATARMNET7b34b7b5be,next,DATARMNETf0fb155a9c){
+DATARMNET0f551e8a47=list_entry(DATARMNET7b34b7b5be,struct DATARMNETa52c09a590,
+DATARMNET6f898987df);list_del_init(&DATARMNET0f551e8a47->DATARMNET6f898987df);
+kfree(DATARMNET0f551e8a47);}}void DATARMNET24e4475345(struct DATARMNET6c78e47d24
+*DATARMNETd2a694d52a,struct list_head*DATARMNETb436c3f30b){struct 
+DATARMNET09a412b1c6*DATARMNET4238158b2a;if(!DATARMNETd2a694d52a||!
+DATARMNETb436c3f30b){DATARMNET68d84e7b98[DATARMNETac729c3d29]++;return;}if(!
+DATARMNET362b15f941(DATARMNETd2a694d52a->DATARMNET7c894c2f8f)){
+DATARMNET4238158b2a=kzalloc(sizeof(*DATARMNET4238158b2a),GFP_ATOMIC);if(
+DATARMNET4238158b2a!=NULL){DATARMNET4238158b2a->DATARMNET253a9fc708=
+DATARMNETd2a694d52a->DATARMNET253a9fc708;DATARMNET4238158b2a->
+DATARMNET42a992465f=DATARMNETd2a694d52a->DATARMNET7c894c2f8f;DATARMNET4238158b2a
+->hash=DATARMNETd2a694d52a->hash;DATARMNET4238158b2a->DATARMNET324c1a8f98=
+DATARMNETd2a694d52a->DATARMNET324c1a8f98;list_add(&DATARMNET4238158b2a->
+DATARMNETd502c0412a,DATARMNETb436c3f30b);}else{DATARMNET68d84e7b98[
+DATARMNET6533f70c87]++;}}}void DATARMNETa1b141715b(struct list_head*
+DATARMNETb436c3f30b){struct DATARMNET09a412b1c6*DATARMNET4238158b2a;struct 
+list_head*DATARMNET7b34b7b5be,*next;if(!DATARMNETb436c3f30b){DATARMNET68d84e7b98
+[DATARMNETac729c3d29]++;return;}list_for_each_safe(DATARMNET7b34b7b5be,next,
+DATARMNETb436c3f30b){DATARMNET4238158b2a=list_entry(DATARMNET7b34b7b5be,struct 
+DATARMNET09a412b1c6,DATARMNETd502c0412a);list_del_init(&DATARMNET4238158b2a->
+DATARMNETd502c0412a);kfree(DATARMNET4238158b2a);}}void DATARMNETc6439e3d71(
+struct DATARMNETc8fdbf9c85*DATARMNET7bea4a06a6,struct DATARMNET228056d4b7*
+DATARMNETf632b170b1,struct list_head*DATARMNETe46ae760db){u64 
+DATARMNET264b01f4d5,DATARMNET53ce143c7e=(0xd2d+202-0xdf7);struct 
+DATARMNET47a6995138*DATARMNETace28a2c7f;int flows=(0xd2d+202-0xdf7);if(!
+DATARMNETf632b170b1||!DATARMNETe46ae760db){DATARMNET68d84e7b98[
+DATARMNETac729c3d29]++;return;}flows=DATARMNET7bea4a06a6->DATARMNET73464778dc[
+DATARMNETf632b170b1->DATARMNET42a992465f].flows;DATARMNET264b01f4d5=
+DATARMNET713717107f[DATARMNETf632b170b1->DATARMNET42a992465f];
+DATARMNET53ce143c7e=DATARMNET4793ed48af[DATARMNETf632b170b1->DATARMNET42a992465f
+];DATARMNETace28a2c7f=kzalloc(sizeof(*DATARMNETace28a2c7f),GFP_ATOMIC);if(
+DATARMNETace28a2c7f==NULL){DATARMNET68d84e7b98[DATARMNET6533f70c87]++;return;}
+DATARMNETace28a2c7f->DATARMNET42a992465f=DATARMNETf632b170b1->
+DATARMNET42a992465f;if(flows<=(0xd2d+202-0xdf7)){DATARMNETace28a2c7f->
+DATARMNET18b7a5b761=DATARMNET264b01f4d5;DATARMNETace28a2c7f->DATARMNET4da6031170
+=DATARMNET264b01f4d5;DATARMNETace28a2c7f->DATARMNET4df302dbd6=(0xd2d+202-0xdf7);
+list_add(&DATARMNETace28a2c7f->DATARMNET02523bfb57,DATARMNETe46ae760db);return;}
+if(DATARMNETf632b170b1->DATARMNET324c1a8f98<DATARMNET264b01f4d5){
+DATARMNETace28a2c7f->DATARMNET18b7a5b761=DATARMNET264b01f4d5-DATARMNETf632b170b1
+->DATARMNET324c1a8f98;}else{DATARMNETace28a2c7f->DATARMNET18b7a5b761=
+(0xd2d+202-0xdf7);}if(DATARMNETf632b170b1->DATARMNET253a9fc708<
+DATARMNET264b01f4d5){DATARMNETace28a2c7f->DATARMNET4da6031170=
+DATARMNET264b01f4d5-DATARMNETf632b170b1->DATARMNET253a9fc708;}else{
+DATARMNETace28a2c7f->DATARMNET4da6031170=(0xd2d+202-0xdf7);}DATARMNETace28a2c7f
+->DATARMNET4df302dbd6=DATARMNETf632b170b1->DATARMNETbb80fccd97;list_add(&
+DATARMNETace28a2c7f->DATARMNET02523bfb57,DATARMNETe46ae760db);}void 
+DATARMNETb177316a15(struct list_head*DATARMNETe46ae760db){struct 
+DATARMNET47a6995138*DATARMNETace28a2c7f;struct list_head*DATARMNET7b34b7b5be,*
+next;if(!DATARMNETe46ae760db){DATARMNET68d84e7b98[DATARMNETac729c3d29]++;return;
+}list_for_each_safe(DATARMNET7b34b7b5be,next,DATARMNETe46ae760db){
+DATARMNETace28a2c7f=list_entry(DATARMNET7b34b7b5be,struct DATARMNET47a6995138,
+DATARMNET02523bfb57);list_del_init(&DATARMNETace28a2c7f->DATARMNET02523bfb57);
+kfree(DATARMNETace28a2c7f);}}void DATARMNET312b06829d(struct DATARMNET6c78e47d24
+*DATARMNETd2a694d52a,struct list_head*DATARMNET922b4752e2){struct 
+DATARMNETe176be7f7c*DATARMNET4af6567922;if(!DATARMNETd2a694d52a||!
+DATARMNET922b4752e2){DATARMNET68d84e7b98[DATARMNETac729c3d29]++;return;}
+DATARMNET4af6567922=kzalloc(sizeof(*DATARMNET4af6567922),GFP_ATOMIC);if(
+DATARMNET4af6567922!=NULL&&DATARMNETd2a694d52a->DATARMNET63b1a086d5!=NULL){
+DATARMNET4af6567922->DATARMNET253a9fc708=DATARMNETd2a694d52a->
+DATARMNET253a9fc708;DATARMNET4af6567922->DATARMNET42a992465f=DATARMNETd2a694d52a
+->DATARMNET7c894c2f8f;DATARMNET4af6567922->hash=DATARMNETd2a694d52a->hash;
+DATARMNET4af6567922->DATARMNET324c1a8f98=DATARMNETd2a694d52a->
+DATARMNET324c1a8f98;DATARMNET4af6567922->DATARMNETbb80fccd97=DATARMNETd2a694d52a
+->DATARMNETbb80fccd97;DATARMNET4af6567922->trans_proto=DATARMNETd2a694d52a->
+DATARMNET1e9d25d9ff;DATARMNET4af6567922->mux_id=DATARMNETd2a694d52a->mux_id;
+DATARMNET4af6567922->DATARMNET95266642d1=DATARMNETd2a694d52a->
+DATARMNET95266642d1;DATARMNET4af6567922->DATARMNET0d682bcb29=DATARMNETd2a694d52a
+->DATARMNET0d682bcb29;DATARMNET4af6567922->DATARMNET20e8fc9db8=
+DATARMNETd2a694d52a->DATARMNET20e8fc9db8;DATARMNET4af6567922->
+DATARMNETda8e8ae7ed=DATARMNETd2a694d52a->DATARMNET29c6349349;DATARMNETd2da2e8466
+(
+"\x53\x48\x53\x5f\x48\x57\x5f\x43\x4f\x41\x4c\x5f\x4d\x45\x4d\x3a\x20\x68\x77\x20\x63\x6f\x61\x6c\x20\x62\x79\x74\x65\x73\x20\x64\x69\x66\x66\x20\x3d\x20\x25\x6c\x75\x20\x68\x77\x20\x63\x6f\x61\x6c\x20\x62\x75\x66\x73\x69\x7a\x65\x20\x64\x69\x66\x66\x20\x3d\x20\x25\x6c\x75"
+,DATARMNET4af6567922->DATARMNET0d682bcb29,DATARMNET4af6567922->
+DATARMNET20e8fc9db8);rm_err(
+"\x53\x48\x53\x5f\x46\x4d\x55\x58\x3a\x20\x6d\x75\x78\x20\x69\x64\x20\x66\x6f\x72\x20\x4c\x4c\x20\x68\x61\x73\x68\x20\x30\x78\x25\x78\x20\x69\x73\x20\x25\x64\x20\x74\x70\x20\x25\x64"
+,DATARMNET4af6567922->hash,DATARMNET4af6567922->mux_id,DATARMNET4af6567922->
+trans_proto);memcpy(&DATARMNET4af6567922->ip_hdr,&DATARMNETd2a694d52a->
+DATARMNET63b1a086d5->ip_hdr,sizeof(DATARMNET4af6567922->ip_hdr));memcpy(&
+DATARMNET4af6567922->DATARMNETe33b41dad9,&DATARMNETd2a694d52a->
+DATARMNET63b1a086d5->DATARMNETe33b41dad9,sizeof(DATARMNET4af6567922->
+DATARMNETe33b41dad9));list_add(&DATARMNET4af6567922->DATARMNET7287946e7b,
+DATARMNET922b4752e2);}else{DATARMNET68d84e7b98[DATARMNET6533f70c87]++;}}void 
+DATARMNET6f4b0915d3(struct DATARMNET6c78e47d24*DATARMNETd2a694d52a,struct 
+list_head*DATARMNET3208cd0982){struct DATARMNET13c47d154e*DATARMNETf02b2a5be7;if
+(!DATARMNETd2a694d52a||!DATARMNET3208cd0982){DATARMNET68d84e7b98[
+DATARMNETac729c3d29]++;return;}DATARMNETf02b2a5be7=kzalloc(sizeof(*
+DATARMNETf02b2a5be7),GFP_ATOMIC);if(DATARMNETf02b2a5be7!=NULL&&
+DATARMNETd2a694d52a->DATARMNET63b1a086d5!=NULL){DATARMNETf02b2a5be7->
+DATARMNET253a9fc708=DATARMNETd2a694d52a->DATARMNET253a9fc708;DATARMNETf02b2a5be7
+->DATARMNET42a992465f=DATARMNETd2a694d52a->DATARMNET7c894c2f8f;
+DATARMNETf02b2a5be7->hash=DATARMNETd2a694d52a->hash;DATARMNETf02b2a5be7->
+DATARMNET324c1a8f98=DATARMNETd2a694d52a->DATARMNET324c1a8f98;DATARMNETf02b2a5be7
+->DATARMNETbb80fccd97=DATARMNETd2a694d52a->DATARMNETbb80fccd97;
+DATARMNETf02b2a5be7->trans_proto=DATARMNETd2a694d52a->DATARMNET1e9d25d9ff;
+DATARMNETf02b2a5be7->mux_id=DATARMNETd2a694d52a->mux_id;DATARMNETf02b2a5be7->
+DATARMNET95266642d1=DATARMNETd2a694d52a->DATARMNET95266642d1;DATARMNETf02b2a5be7
+->DATARMNET0d682bcb29=DATARMNETd2a694d52a->DATARMNET0d682bcb29;
+DATARMNETf02b2a5be7->DATARMNET20e8fc9db8=DATARMNETd2a694d52a->
+DATARMNET20e8fc9db8;DATARMNETd2da2e8466(
+"\x53\x48\x53\x5f\x48\x57\x5f\x43\x4f\x41\x4c\x5f\x4d\x45\x4d\x3a\x20\x68\x77\x20\x63\x6f\x61\x6c\x20\x62\x79\x74\x65\x73\x20\x64\x69\x66\x66\x20\x3d\x20\x25\x6c\x75\x20\x68\x77\x20\x63\x6f\x61\x6c\x20\x62\x75\x66\x73\x69\x7a\x65\x20\x64\x69\x66\x66\x20\x3d\x20\x25\x6c\x75"
+,DATARMNETf02b2a5be7->DATARMNET0d682bcb29,DATARMNETf02b2a5be7->
+DATARMNET20e8fc9db8);rm_err(
+"\x53\x48\x53\x5f\x46\x4d\x55\x58\x3a\x20\x6d\x75\x78\x20\x69\x64\x20\x66\x6f\x72\x20\x66\x66\x20\x68\x61\x73\x68\x20\x30\x78\x25\x78\x20\x69\x73\x20\x25\x64\x20\x74\x70\x20\x25\x64"
+,DATARMNETf02b2a5be7->hash,DATARMNETf02b2a5be7->mux_id,DATARMNETf02b2a5be7->
+trans_proto);memcpy(&DATARMNETf02b2a5be7->ip_hdr,&DATARMNETd2a694d52a->
+DATARMNET63b1a086d5->ip_hdr,sizeof(DATARMNETf02b2a5be7->ip_hdr));memcpy(&
+DATARMNETf02b2a5be7->DATARMNETe33b41dad9,&DATARMNETd2a694d52a->
+DATARMNET63b1a086d5->DATARMNETe33b41dad9,sizeof(DATARMNETf02b2a5be7->
+DATARMNETe33b41dad9));list_add(&DATARMNETf02b2a5be7->DATARMNETec0e3cb8f0,
+DATARMNET3208cd0982);}else{DATARMNET68d84e7b98[DATARMNET6533f70c87]++;}}void 
+DATARMNETf7730d41c1(struct list_head*DATARMNET922b4752e2){struct 
+DATARMNET13c47d154e*DATARMNET4af6567922;struct list_head*DATARMNET7b34b7b5be,*
+next;if(!DATARMNET922b4752e2){DATARMNET68d84e7b98[DATARMNETac729c3d29]++;return;
+}list_for_each_safe(DATARMNET7b34b7b5be,next,DATARMNET922b4752e2){
+DATARMNET4af6567922=list_entry(DATARMNET7b34b7b5be,struct DATARMNET13c47d154e,
+DATARMNETec0e3cb8f0);list_del_init(&DATARMNET4af6567922->DATARMNETec0e3cb8f0);
+kfree(DATARMNET4af6567922);}}void DATARMNETcc489fbbad(struct list_head*
+DATARMNET3208cd0982){struct DATARMNET13c47d154e*DATARMNETf02b2a5be7;struct 
+list_head*DATARMNET7b34b7b5be,*next;if(!DATARMNET3208cd0982){DATARMNET68d84e7b98
+[DATARMNETac729c3d29]++;return;}list_for_each_safe(DATARMNET7b34b7b5be,next,
+DATARMNET3208cd0982){DATARMNETf02b2a5be7=list_entry(DATARMNET7b34b7b5be,struct 
+DATARMNET13c47d154e,DATARMNETec0e3cb8f0);list_del_init(&DATARMNETf02b2a5be7->
+DATARMNETec0e3cb8f0);kfree(DATARMNETf02b2a5be7);}}void DATARMNET5157210c44(
+struct list_head*DATARMNETe46ae760db){struct DATARMNET47a6995138*
+DATARMNETace28a2c7f;struct DATARMNET661e7a8566 DATARMNET3ef5021fcf;uint16_t idx=
+(0xd2d+202-0xdf7);if(!DATARMNETe46ae760db){rm_err("\x25\x73",
+"\x53\x48\x53\x5f\x53\x43\x41\x50\x53\x3a\x20\x43\x50\x55\x20\x43\x61\x70\x61\x63\x69\x74\x69\x65\x73\x20\x4c\x69\x73\x74\x20\x69\x73\x20\x4e\x55\x4c\x4c"
+);return;}rm_err("\x25\x73",
+"\x53\x48\x53\x5f\x53\x43\x41\x50\x53\x3a\x20\x53\x6f\x72\x74\x65\x64\x20\x43\x50\x55\x20\x43\x61\x70\x61\x63\x69\x74\x69\x65\x73\x3a"
+);list_for_each_entry(DATARMNETace28a2c7f,DATARMNETe46ae760db,
+DATARMNET02523bfb57){if(idx>=DATARMNETc6782fed88)break;rm_err(
+"\x53\x48\x53\x5f\x53\x43\x41\x50\x53\x3a\x20\x3e\x20\x63\x70\x75\x5b\x25\x64\x5d\x20\x77\x69\x74\x68\x20\x70\x70\x73\x20\x63\x61\x70\x61\x63\x69\x74\x79\x20\x3d\x20\x25\x6c\x6c\x75\x20\x7c\x20"
+"\x61\x76\x67\x20\x70\x70\x73\x20\x63\x61\x70\x20\x3d\x20\x25\x6c\x6c\x75\x20\x62\x70\x73\x20\x3d\x20\x25\x6c\x6c\x75"
+,DATARMNETace28a2c7f->DATARMNET42a992465f,DATARMNETace28a2c7f->
+DATARMNET18b7a5b761,DATARMNETace28a2c7f->DATARMNET4da6031170,DATARMNETace28a2c7f
+->DATARMNET4df302dbd6);DATARMNET63c47f3c37[idx].DATARMNET4da6031170=
+DATARMNETace28a2c7f->DATARMNET4da6031170;DATARMNET63c47f3c37[idx].
+DATARMNET18b7a5b761=DATARMNETace28a2c7f->DATARMNET18b7a5b761;DATARMNET63c47f3c37
+[idx].DATARMNET4df302dbd6=DATARMNETace28a2c7f->DATARMNET4df302dbd6;
+DATARMNET63c47f3c37[idx].DATARMNET42a992465f=DATARMNETace28a2c7f->
+DATARMNET42a992465f;DATARMNET63c47f3c37[idx].DATARMNETf510b48c29=
+DATARMNETecc0627c70.DATARMNETf510b48c29;idx+=(0xd26+209-0xdf6);}rm_err(
+"\x53\x48\x53\x5f\x4d\x45\x4d\x3a\x20\x63\x61\x70\x5f\x64\x6d\x61\x5f\x70\x74\x72\x20\x3d\x20\x30\x78\x25\x6c\x6c\x78\x20\x61\x64\x64\x72\x20\x3d\x20\x30\x78\x25\x70\x4b" "\n"
+,(unsigned long long)virt_to_phys((void*)DATARMNET410036d5ac),
+DATARMNET410036d5ac);if(!DATARMNET410036d5ac){rm_err("\x25\x73",
+"\x53\x48\x53\x5f\x57\x52\x49\x54\x45\x3a\x20\x63\x61\x70\x5f\x73\x68\x61\x72\x65\x64\x20\x69\x73\x20\x4e\x55\x4c\x4c"
+);return;}memcpy((char*)DATARMNET410036d5ac->data,(void*)&DATARMNET63c47f3c37[
+(0xd2d+202-0xdf7)],sizeof(DATARMNET63c47f3c37));rm_err(
+"\x25\x73\x28\x29\x3a\x20\x72\x6d\x65\x6d\x20\x25\x64\x20\x25\x64\x20\x25\x64\x20\x77\x6d\x65\x6d\x20\x25\x64\x20\x25\x64\x20\x25\x64" "\n"
+,__func__,init_net.ipv4.sysctl_tcp_rmem[(0xd2d+202-0xdf7)],init_net.ipv4.
+sysctl_tcp_rmem[(0xd26+209-0xdf6)],init_net.ipv4.sysctl_tcp_rmem[
+(0xd1f+216-0xdf5)],init_net.ipv4.sysctl_tcp_wmem[(0xd2d+202-0xdf7)],init_net.
+ipv4.sysctl_tcp_wmem[(0xd26+209-0xdf6)],init_net.ipv4.sysctl_tcp_wmem[
+(0xd1f+216-0xdf5)]);memset(&DATARMNET3ef5021fcf,(0xd2d+202-0xdf7),sizeof(
+DATARMNET3ef5021fcf));DATARMNET3ef5021fcf.DATARMNET68a58889b0[(0xd2d+202-0xdf7)]
+=init_net.ipv4.sysctl_tcp_rmem[(0xd2d+202-0xdf7)];DATARMNET3ef5021fcf.
+DATARMNET68a58889b0[(0xd26+209-0xdf6)]=init_net.ipv4.sysctl_tcp_rmem[
+(0xd26+209-0xdf6)];DATARMNET3ef5021fcf.DATARMNET68a58889b0[(0xd1f+216-0xdf5)]=
+init_net.ipv4.sysctl_tcp_rmem[(0xd1f+216-0xdf5)];DATARMNET3ef5021fcf.
+DATARMNET1c7c913c7b[(0xd2d+202-0xdf7)]=init_net.ipv4.sysctl_tcp_wmem[
+(0xd2d+202-0xdf7)];DATARMNET3ef5021fcf.DATARMNET1c7c913c7b[(0xd26+209-0xdf6)]=
+init_net.ipv4.sysctl_tcp_wmem[(0xd26+209-0xdf6)];DATARMNET3ef5021fcf.
+DATARMNET1c7c913c7b[(0xd1f+216-0xdf5)]=init_net.ipv4.sysctl_tcp_wmem[
+(0xd1f+216-0xdf5)];memcpy((char*)DATARMNET410036d5ac->data+sizeof(
+DATARMNET63c47f3c37),(void*)&DATARMNET3ef5021fcf,sizeof(DATARMNET3ef5021fcf));}
+void DATARMNET0e273eab79(struct list_head*DATARMNETb436c3f30b){struct 
+DATARMNET09a412b1c6*DATARMNET4238158b2a;uint16_t idx=(0xd2d+202-0xdf7);int 
+DATARMNETcde08f6e7d=(0xd2d+202-0xdf7);if(!DATARMNETb436c3f30b){rm_err("\x25\x73"
+,
+"\x53\x48\x53\x5f\x53\x47\x4f\x4c\x44\x3a\x20\x47\x6f\x6c\x64\x20\x46\x6c\x6f\x77\x73\x20\x4c\x69\x73\x74\x20\x69\x73\x20\x4e\x55\x4c\x4c"
+);return;}rm_err("\x25\x73",
+"\x53\x48\x53\x5f\x53\x47\x4f\x4c\x44\x3a\x20\x4c\x69\x73\x74\x20\x6f\x66\x20\x73\x6f\x72\x74\x65\x64\x20\x67\x6f\x6c\x64\x20\x66\x6c\x6f\x77\x73\x3a"
+);list_for_each_entry(DATARMNET4238158b2a,DATARMNETb436c3f30b,
+DATARMNETd502c0412a){if(DATARMNET4238158b2a->DATARMNET324c1a8f98==
+(0xd2d+202-0xdf7)){continue;}if(idx>=DATARMNET75c69edb82){break;}rm_err(
+"\x53\x48\x53\x5f\x53\x47\x4f\x4c\x44\x3a\x20\x3e\x20\x66\x6c\x6f\x77\x20\x30\x78\x25\x78\x20\x77\x69\x74\x68\x20\x70\x70\x73\x20\x25\x6c\x6c\x75\x20\x6f\x6e\x20\x63\x70\x75\x5b\x25\x64\x5d"
+,DATARMNET4238158b2a->hash,DATARMNET4238158b2a->DATARMNET324c1a8f98,
+DATARMNET4238158b2a->DATARMNET42a992465f);DATARMNETcde08f6e7d+=(0xd26+209-0xdf6)
+;DATARMNET22b4032799[idx].DATARMNET42a992465f=DATARMNET4238158b2a->
+DATARMNET42a992465f;DATARMNET22b4032799[idx].hash=DATARMNET4238158b2a->hash;
+DATARMNET22b4032799[idx].DATARMNET253a9fc708=DATARMNET4238158b2a->
+DATARMNET253a9fc708;DATARMNET22b4032799[idx].DATARMNET324c1a8f98=
+DATARMNET4238158b2a->DATARMNET324c1a8f98;idx+=(0xd26+209-0xdf6);}rm_err(
+"\x53\x48\x53\x5f\x4d\x45\x4d\x3a\x20\x67\x66\x6c\x6f\x77\x5f\x64\x6d\x61\x5f\x70\x74\x72\x20\x3d\x20\x30\x78\x25\x6c\x6c\x78\x20\x61\x64\x64\x72\x20\x3d\x20\x30\x78\x25\x70\x4b" "\n"
+,(unsigned long long)virt_to_phys((void*)DATARMNET19c47a9f3a),
+DATARMNET19c47a9f3a);if(!DATARMNET19c47a9f3a){rm_err("\x25\x73",
+"\x53\x48\x53\x5f\x57\x52\x49\x54\x45\x3a\x20\x67\x66\x6c\x6f\x77\x5f\x73\x68\x61\x72\x65\x64\x20\x69\x73\x20\x4e\x55\x4c\x4c"
+);return;}rm_err(
+"\x53\x48\x53\x5f\x53\x47\x4f\x4c\x44\x3a\x20\x6e\x75\x6d\x20\x67\x6f\x6c\x64\x20\x66\x6c\x6f\x77\x73\x20\x3d\x20\x25\x75" "\n"
+,idx);memcpy(((char*)DATARMNET19c47a9f3a->data),&idx,sizeof(idx));memcpy(((char*
+)DATARMNET19c47a9f3a->data+sizeof(uint16_t)),(void*)&DATARMNET22b4032799[
+(0xd2d+202-0xdf7)],sizeof(DATARMNET22b4032799));}void DATARMNETe15af8eb6d(struct
+ list_head*DATARMNETf0fb155a9c){struct DATARMNETa52c09a590*DATARMNET0f551e8a47;
+uint16_t idx=(0xd2d+202-0xdf7);int DATARMNET6d96003717=(0xd2d+202-0xdf7);if(!
+DATARMNETf0fb155a9c){rm_err("\x25\x73",
+"\x53\x48\x53\x5f\x53\x4c\x4f\x57\x3a\x20\x53\x53\x20\x46\x6c\x6f\x77\x73\x20\x4c\x69\x73\x74\x20\x69\x73\x20\x4e\x55\x4c\x4c"
+);return;}rm_err("\x25\x73",
+"\x53\x48\x53\x5f\x53\x4c\x4f\x57\x3a\x20\x4c\x69\x73\x74\x20\x6f\x66\x20\x73\x6f\x72\x74\x65\x64\x20\x73\x73\x20\x66\x6c\x6f\x77\x73\x3a"
+);list_for_each_entry(DATARMNET0f551e8a47,DATARMNETf0fb155a9c,
+DATARMNET6f898987df){if(DATARMNET0f551e8a47->DATARMNET324c1a8f98==
+(0xd2d+202-0xdf7)){continue;}if(idx>=DATARMNET75c69edb82){break;}rm_err(
+"\x53\x48\x53\x5f\x53\x4c\x4f\x57\x3a\x20\x3e\x20\x66\x6c\x6f\x77\x20\x30\x78\x25\x78\x20\x77\x69\x74\x68\x20\x70\x70\x73\x20\x25\x6c\x6c\x75\x20\x6f\x6e\x20\x63\x70\x75\x5b\x25\x64\x5d\x20\x62\x69\x66\x5b\x25\x75\x5d\x20\x61\x63\x6b\x5f\x74\x68\x72\x65\x73\x68\x5b\x25\x75\x5d"
+,DATARMNET0f551e8a47->hash,DATARMNET0f551e8a47->DATARMNET324c1a8f98,
+DATARMNET0f551e8a47->DATARMNET42a992465f,DATARMNET0f551e8a47->bif,
+DATARMNET0f551e8a47->ack_thresh);DATARMNET6d96003717+=(0xd26+209-0xdf6);
+DATARMNETb0d78d576f[idx].DATARMNET42a992465f=DATARMNET0f551e8a47->
+DATARMNET42a992465f;DATARMNETb0d78d576f[idx].hash=DATARMNET0f551e8a47->hash;
+DATARMNETb0d78d576f[idx].DATARMNET253a9fc708=DATARMNET0f551e8a47->
+DATARMNET253a9fc708;DATARMNETb0d78d576f[idx].DATARMNET324c1a8f98=
+DATARMNET0f551e8a47->DATARMNET324c1a8f98;DATARMNETb0d78d576f[idx].
+DATARMNETbb80fccd97=DATARMNET0f551e8a47->DATARMNETbb80fccd97;DATARMNETb0d78d576f
+[idx].ack_thresh=DATARMNET0f551e8a47->ack_thresh;DATARMNETb0d78d576f[idx].bif=
+DATARMNET0f551e8a47->bif;idx+=(0xd26+209-0xdf6);}rm_err(
+"\x53\x48\x53\x5f\x4d\x45\x4d\x3a\x20\x73\x73\x66\x6c\x6f\x77\x5f\x64\x6d\x61\x5f\x70\x74\x72\x20\x3d\x20\x30\x78\x25\x6c\x6c\x78\x20\x61\x64\x64\x72\x20\x3d\x20\x30\x78\x25\x70\x4b" "\n"
+,(unsigned long long)virt_to_phys((void*)DATARMNET22e796eff3),
+DATARMNET22e796eff3);if(!DATARMNET22e796eff3){rm_err("\x25\x73",
+"\x53\x48\x53\x5f\x57\x52\x49\x54\x45\x3a\x20\x73\x73\x66\x6c\x6f\x77\x5f\x73\x68\x61\x72\x65\x64\x20\x69\x73\x20\x4e\x55\x4c\x4c"
+);return;}rm_err(
+"\x53\x48\x53\x5f\x53\x4c\x4f\x57\x3a\x20\x6e\x75\x6d\x20\x73\x73\x20\x66\x6c\x6f\x77\x73\x20\x3d\x20\x25\x75" "\n"
+,idx);memcpy(((char*)DATARMNET22e796eff3->data),&idx,sizeof(idx));memcpy(((char*
+)DATARMNET22e796eff3->data+sizeof(uint16_t)),(void*)&DATARMNETb0d78d576f[
+(0xd2d+202-0xdf7)],sizeof(DATARMNETb0d78d576f));}void DATARMNET78f3a0ca4f(struct
+ list_head*DATARMNET3208cd0982){struct DATARMNET13c47d154e*DATARMNETf02b2a5be7;
+uint16_t idx=(0xd2d+202-0xdf7);int DATARMNETd31ee74d2e=(0xd2d+202-0xdf7);if(!
+DATARMNET3208cd0982){rm_err("\x25\x73",
+"\x53\x48\x53\x5f\x54\x4f\x50\x3a\x20\x46\x69\x6c\x74\x65\x72\x20\x46\x6c\x6f\x77\x73\x20\x4c\x69\x73\x74\x20\x69\x73\x20\x4e\x55\x4c\x4c"
+);return;}rm_err("\x25\x73",
+"\x53\x48\x53\x5f\x54\x4f\x50\x3a\x20\x4c\x69\x73\x74\x20\x6f\x66\x20\x54\x4f\x50\x20\x66\x69\x6c\x74\x65\x72\x20\x66\x6c\x6f\x77\x73\x3a"
+);list_for_each_entry(DATARMNETf02b2a5be7,DATARMNET3208cd0982,
+DATARMNETec0e3cb8f0){if(DATARMNETf02b2a5be7->DATARMNET324c1a8f98==
+(0xd2d+202-0xdf7)){continue;}if(idx>=DATARMNET67578af78f){break;}rm_err(
+"\x53\x48\x53\x5f\x54\x4f\x50\x3a\x20\x3e\x20\x66\x6c\x6f\x77\x20\x30\x78\x25\x78\x20\x77\x69\x74\x68\x20\x70\x70\x73\x20\x25\x6c\x6c\x75\x20\x6f\x6e\x20\x63\x70\x75\x5b\x25\x64\x5d"
+,DATARMNETf02b2a5be7->hash,DATARMNETf02b2a5be7->DATARMNET324c1a8f98,
+DATARMNETf02b2a5be7->DATARMNET42a992465f);DATARMNETd31ee74d2e+=(0xd26+209-0xdf6)
+;memcpy(&(DATARMNET3d25ff4ef4[idx].ip_hdr),&(DATARMNETf02b2a5be7->ip_hdr),sizeof
+(DATARMNET3d25ff4ef4[idx].ip_hdr));memcpy(&(DATARMNET3d25ff4ef4[idx].
+DATARMNETe33b41dad9),&(DATARMNETf02b2a5be7->DATARMNETe33b41dad9),sizeof(
+DATARMNET3d25ff4ef4[idx].DATARMNETe33b41dad9));DATARMNET3d25ff4ef4[idx].
+DATARMNET42a992465f=DATARMNETf02b2a5be7->DATARMNET42a992465f;DATARMNET3d25ff4ef4
+[idx].hash=DATARMNETf02b2a5be7->hash;DATARMNET3d25ff4ef4[idx].
+DATARMNET253a9fc708=DATARMNETf02b2a5be7->DATARMNET253a9fc708;DATARMNET3d25ff4ef4
+[idx].DATARMNET324c1a8f98=DATARMNETf02b2a5be7->DATARMNET324c1a8f98;
+DATARMNET3d25ff4ef4[idx].DATARMNETbb80fccd97=DATARMNETf02b2a5be7->
+DATARMNETbb80fccd97;DATARMNET3d25ff4ef4[idx].trans_proto=DATARMNETf02b2a5be7->
+trans_proto;DATARMNET3d25ff4ef4[idx].mux_id=DATARMNETf02b2a5be7->mux_id;
+DATARMNET3d25ff4ef4[idx].DATARMNET95266642d1=DATARMNETf02b2a5be7->
+DATARMNET95266642d1;DATARMNET3d25ff4ef4[idx].DATARMNET0d682bcb29=
+DATARMNETf02b2a5be7->DATARMNET0d682bcb29;DATARMNET3d25ff4ef4[idx].
+DATARMNET20e8fc9db8=DATARMNETf02b2a5be7->DATARMNET20e8fc9db8;idx+=
+(0xd26+209-0xdf6);}rm_err(
+"\x53\x48\x53\x5f\x4d\x45\x4d\x3a\x20\x66\x66\x6c\x6f\x77\x5f\x64\x6d\x61\x5f\x70\x74\x72\x20\x3d\x20\x30\x78\x25\x6c\x6c\x78\x20\x61\x64\x64\x72\x20\x3d\x20\x30\x78\x25\x70\x4b" "\n"
+,(unsigned long long)virt_to_phys((void*)DATARMNET9b8000d2a7),
+DATARMNET9b8000d2a7);if(!DATARMNET9b8000d2a7){rm_err("\x25\x73",
+"\x53\x48\x53\x5f\x57\x52\x49\x54\x45\x3a\x20\x66\x66\x6c\x6f\x77\x5f\x73\x68\x61\x72\x65\x64\x20\x69\x73\x20\x4e\x55\x4c\x4c"
+);return;}rm_err(
+"\x53\x48\x53\x5f\x53\x4c\x4f\x57\x3a\x20\x6e\x75\x6d\x20\x66\x66\x6c\x6f\x77\x73\x20\x3d\x20\x25\x75" "\n"
+,idx);memcpy(((char*)DATARMNET9b8000d2a7->data),&idx,sizeof(idx));memcpy(((char*
+)DATARMNET9b8000d2a7->data+sizeof(uint16_t)),(void*)&DATARMNET3d25ff4ef4[
+(0xd2d+202-0xdf7)],sizeof(DATARMNET3d25ff4ef4));}void DATARMNETa3d6c4072d(struct
+ list_head*DATARMNET922b4752e2){struct DATARMNETe176be7f7c*DATARMNET4af6567922;
+uint16_t idx=(0xd2d+202-0xdf7);int DATARMNET5c1d9cb9dd=(0xd2d+202-0xdf7);if(!
+DATARMNET922b4752e2){rm_err("\x25\x73",
+"\x53\x48\x53\x5f\x54\x4f\x50\x3a\x20\x4c\x4c\x20\x46\x6c\x6f\x77\x73\x20\x4c\x69\x73\x74\x20\x69\x73\x20\x4e\x55\x4c\x4c"
+);return;}rm_err("\x25\x73",
+"\x53\x48\x53\x5f\x54\x4f\x50\x3a\x20\x4c\x69\x73\x74\x20\x6f\x66\x20\x54\x4f\x50\x20\x4c\x4c\x20\x66\x69\x6c\x74\x65\x72\x20\x66\x6c\x6f\x77\x73\x3a"
+);list_for_each_entry(DATARMNET4af6567922,DATARMNET922b4752e2,
+DATARMNET7287946e7b){if(idx>=DATARMNETa847b6b6d0){break;}rm_err(
+"\x53\x48\x53\x5f\x54\x4f\x50\x3a\x20\x3e\x20\x66\x6c\x6f\x77\x20\x30\x78\x25\x78\x20\x77\x69\x74\x68\x20\x70\x70\x73\x20\x25\x6c\x6c\x75\x20\x6f\x6e\x20\x63\x70\x75\x5b\x25\x64\x5d"
+,DATARMNET4af6567922->hash,DATARMNET4af6567922->DATARMNET324c1a8f98,
+DATARMNET4af6567922->DATARMNET42a992465f);DATARMNET5c1d9cb9dd+=(0xd26+209-0xdf6)
+;memcpy(&(DATARMNET2fdef9da24[idx].ip_hdr),&(DATARMNET4af6567922->ip_hdr),sizeof
+(DATARMNET2fdef9da24[idx].ip_hdr));memcpy(&(DATARMNET2fdef9da24[idx].
+DATARMNETe33b41dad9),&(DATARMNET4af6567922->DATARMNETe33b41dad9),sizeof(
+DATARMNET2fdef9da24[idx].DATARMNETe33b41dad9));DATARMNET2fdef9da24[idx].
+DATARMNET42a992465f=DATARMNET4af6567922->DATARMNET42a992465f;DATARMNET2fdef9da24
+[idx].hash=DATARMNET4af6567922->hash;DATARMNET2fdef9da24[idx].
+DATARMNET253a9fc708=DATARMNET4af6567922->DATARMNET253a9fc708;DATARMNET2fdef9da24
+[idx].DATARMNET324c1a8f98=DATARMNET4af6567922->DATARMNET324c1a8f98;
+DATARMNET2fdef9da24[idx].DATARMNETda8e8ae7ed=DATARMNET4af6567922->
+DATARMNETda8e8ae7ed;DATARMNET2fdef9da24[idx].DATARMNETbb80fccd97=
+DATARMNET4af6567922->DATARMNETbb80fccd97;DATARMNET2fdef9da24[idx].trans_proto=
+DATARMNET4af6567922->trans_proto;DATARMNET2fdef9da24[idx].mux_id=
+DATARMNET4af6567922->mux_id;DATARMNET2fdef9da24[idx].DATARMNET95266642d1=
+DATARMNET4af6567922->DATARMNET95266642d1;DATARMNET2fdef9da24[idx].
+DATARMNET0d682bcb29=DATARMNET4af6567922->DATARMNET0d682bcb29;DATARMNET2fdef9da24
+[idx].DATARMNET20e8fc9db8=DATARMNET4af6567922->DATARMNET20e8fc9db8;idx+=
+(0xd26+209-0xdf6);}rm_err(
+"\x53\x48\x53\x5f\x4d\x45\x4d\x3a\x20\x6c\x6c\x5f\x66\x6c\x6f\x77\x5f\x64\x6d\x61\x5f\x70\x74\x72\x20\x3d\x20\x30\x78\x25\x6c\x6c\x78\x20\x61\x64\x64\x72\x20\x3d\x20\x30\x78\x25\x70\x4b" "\n"
+,(unsigned long long)virt_to_phys((void*)DATARMNET835a28686c),
+DATARMNET835a28686c);if(!DATARMNET835a28686c){rm_err("\x25\x73",
+"\x53\x48\x53\x5f\x57\x52\x49\x54\x45\x3a\x20\x6c\x6c\x66\x6c\x6f\x77\x5f\x73\x68\x61\x72\x65\x64\x20\x69\x73\x20\x4e\x55\x4c\x4c"
+);return;}rm_err(
+"\x53\x48\x53\x5f\x53\x4c\x4f\x57\x3a\x20\x6e\x75\x6d\x20\x6c\x6c\x66\x6c\x6f\x77\x73\x20\x3d\x20\x25\x75" "\n"
+,idx);memcpy(((char*)DATARMNET835a28686c->data),&idx,sizeof(idx));memcpy(((char*
+)DATARMNET835a28686c->data+sizeof(uint16_t)),(void*)&DATARMNET2fdef9da24[
+(0xd2d+202-0xdf7)],sizeof(DATARMNET2fdef9da24));}void DATARMNET78666f33a1(void){
+struct rmnet_priv*priv;struct rmnet_port*port;struct DATARMNET9b44b71ee9*ep=NULL
+;u16 idx=(0xd2d+202-0xdf7);u16 count=(0xd2d+202-0xdf7);port=DATARMNETecc0627c70.
+port;if(!port){DATARMNET68d84e7b98[DATARMNET42b73d0f3f]++;return;}rm_err(
+"\x53\x48\x53\x5f\x4e\x45\x54\x44\x45\x56\x3a\x20\x66\x75\x6e\x63\x74\x69\x6f\x6e\x20\x65\x6e\x74\x65\x72\x20\x25\x75" "\n"
+,idx);list_for_each_entry(ep,&DATARMNET30a3e83974,DATARMNET0763436b8d){count+=
+(0xd26+209-0xdf6);rm_err(
+"\x53\x48\x53\x5f\x4e\x45\x54\x44\x45\x56\x3a\x20\x66\x75\x6e\x63\x74\x69\x6f\x6e\x20\x65\x6e\x74\x65\x72\x20\x65\x70\x20\x25\x75" "\n"
+,count);if(!ep->DATARMNET4a4e6f66b5){rm_err(
+"\x53\x48\x53\x5f\x4e\x45\x54\x44\x45\x56\x3a\x20\x65\x70\x20\x25\x75\x20\x69\x73\x20\x4e\x4f\x54\x20\x61\x63\x74\x69\x76\x65" "\n"
+,count);continue;}rm_err(
+"\x53\x48\x53\x5f\x4e\x45\x54\x44\x45\x56\x3a\x20\x65\x70\x20\x25\x75\x20\x69\x73\x20\x61\x63\x74\x69\x76\x65\x20\x61\x6e\x64\x20\x6e\x6f\x74\x20\x6e\x75\x6c\x6c" "\n"
+,count);if(idx>=DATARMNETe4d15b9332){break;}priv=netdev_priv(ep->ep);if(!priv){
+rm_err(
+"\x53\x48\x53\x5f\x4e\x45\x54\x44\x45\x56\x3a\x20\x70\x72\x69\x76\x20\x66\x6f\x72\x20\x65\x70\x20\x25\x75\x20\x69\x73\x20\x6e\x75\x6c\x6c" "\n"
+,count);continue;}rm_err(
+"\x53\x48\x53\x5f\x4e\x45\x54\x44\x45\x56\x3a\x20\x65\x70\x20\x25\x75\x20\x68\x61\x73\x20\x6e\x61\x6d\x65\x20\x3d\x20\x25\x73\x20" "\n"
+,count,ep->ep->name);rm_err(
+"\x53\x48\x53\x5f\x4e\x45\x54\x44\x45\x56\x3a\x20\x65\x70\x20\x25\x75\x20\x68\x61\x73\x20\x6d\x75\x78\x5f\x69\x64\x20\x3d\x20\x25\x75\x20" "\n"
+,count,priv->mux_id);rm_err(
+"\x53\x48\x53\x5f\x4e\x45\x54\x44\x45\x56\x3a\x20\x65\x70\x20\x25\x75\x20\x68\x61\x73\x20\x69\x70\x5f\x6d\x69\x73\x73\x20\x3d\x20\x25\x6c\x75\x20" "\n"
+,count,priv->stats.coal.close.ip_miss);rm_err(
+"\x53\x48\x53\x5f\x4e\x45\x54\x44\x45\x56\x3a\x20\x65\x70\x20\x25\x75\x20\x68\x61\x73\x20\x63\x6f\x61\x6c\x5f\x72\x78\x5f\x70\x6b\x74\x73\x20\x3d\x20\x25\x6c\x75\x20" "\n"
+,count,priv->stats.coal.coal_pkts);rm_err(
+"\x53\x48\x53\x5f\x4e\x45\x54\x44\x45\x56\x3a\x20\x65\x70\x20\x25\x75\x20\x68\x61\x73\x20\x75\x64\x70\x5f\x72\x78\x5f\x62\x70\x73\x20\x3d\x20\x25\x6c\x75\x20" "\n"
+,count,ep->DATARMNET257fc4b2d4);rm_err(
+"\x53\x48\x53\x5f\x4e\x45\x54\x44\x45\x56\x3a\x20\x65\x70\x20\x25\x75\x20\x68\x61\x73\x20\x74\x63\x70\x5f\x72\x78\x5f\x62\x70\x73\x20\x3d\x20\x25\x6c\x75\x20" "\n"
+,count,ep->DATARMNET4eb77c78e6);DATARMNETf46265286b[idx].DATARMNET77de6e34f2=
+priv->stats.coal.close.ip_miss;DATARMNETf46265286b[idx].hw_evict=priv->stats.
+coal.close.hw_evict;DATARMNETf46265286b[idx].coal_tcp=priv->stats.coal.coal_tcp;
+DATARMNETf46265286b[idx].coal_tcp_bytes=priv->stats.coal.coal_tcp_bytes;
+DATARMNETf46265286b[idx].coal_udp=priv->stats.coal.coal_udp;DATARMNETf46265286b[
+idx].coal_udp_bytes=priv->stats.coal.coal_udp_bytes;DATARMNETf46265286b[idx].
+mux_id=priv->mux_id;DATARMNETf46265286b[idx].pb_marker_seq=port->stats.
+pb_marker_seq;strlcpy(DATARMNETf46265286b[idx].name,ep->ep->name,sizeof(
+DATARMNETf46265286b[idx].name));DATARMNETf46265286b[idx].DATARMNET870c3dafcb=
+priv->stats.coal.coal_pkts;DATARMNETf46265286b[idx].DATARMNET4eb77c78e6=ep->
+DATARMNET4eb77c78e6;DATARMNETf46265286b[idx].DATARMNET257fc4b2d4=ep->
+DATARMNET257fc4b2d4;idx+=(0xd26+209-0xdf6);}rm_err(
+"\x53\x48\x53\x5f\x4d\x45\x4d\x3a\x20\x6e\x65\x74\x64\x65\x76\x5f\x73\x68\x61\x72\x65\x64\x20\x3d\x20\x30\x78\x25\x6c\x6c\x78\x20\x61\x64\x64\x72\x20\x3d\x20\x30\x78\x25\x70\x4b" "\n"
+,(unsigned long long)virt_to_phys((void*)DATARMNET67d31dc40a),
+DATARMNET67d31dc40a);if(!DATARMNET67d31dc40a){rm_err("\x25\x73",
+"\x53\x48\x53\x5f\x57\x52\x49\x54\x45\x3a\x20\x6e\x65\x74\x64\x65\x76\x5f\x73\x68\x61\x72\x65\x64\x20\x69\x73\x20\x4e\x55\x4c\x4c"
+);return;}memcpy(((char*)DATARMNET67d31dc40a->data),&idx,sizeof(idx));memcpy(((
+char*)DATARMNET67d31dc40a->data+sizeof(uint16_t)),(void*)&DATARMNETf46265286b[
+(0xd2d+202-0xdf7)],sizeof(DATARMNETf46265286b));}void DATARMNETf5f83b943f(void){
+kuid_t DATARMNETdaca088404;kgid_t DATARMNET254aa091f2;DATARMNETe4c5563cdb=
+proc_mkdir("\x73\x68\x73",NULL);if(!DATARMNETe4c5563cdb){rm_err("\x25\x73",
+"\x53\x48\x53\x5f\x4d\x45\x4d\x5f\x49\x4e\x49\x54\x3a\x20\x46\x61\x69\x6c\x65\x64\x20\x74\x6f\x20\x63\x72\x65\x61\x74\x65\x20\x70\x72\x6f\x63\x20\x64\x69\x72"
+);return;}DATARMNETdaca088404=make_kuid(&init_user_ns,(0xdc7+2646-0x1434));
+DATARMNET254aa091f2=make_kgid(&init_user_ns,(0xdc7+2646-0x1434));if(uid_valid(
+DATARMNETdaca088404)&&gid_valid(DATARMNET254aa091f2))proc_set_user(
+DATARMNETe4c5563cdb,DATARMNETdaca088404,DATARMNET254aa091f2);proc_create(
+DATARMNET41be983a65,(0xdb7+6665-0x261c),DATARMNETe4c5563cdb,&DATARMNET668485bd14
+);proc_create(DATARMNET5ddc91451c,(0xdb7+6665-0x261c),DATARMNETe4c5563cdb,&
+DATARMNETe84fbaa6af);proc_create(DATARMNETeb2a21dd7c,(0xdb7+6665-0x261c),
+DATARMNETe4c5563cdb,&DATARMNET8fe5f892a8);proc_create(DATARMNET1c4ea23858,
+(0xdb7+6665-0x261c),DATARMNETe4c5563cdb,&DATARMNET0104d40d4b);proc_create(
+DATARMNET8b29e14112,(0xdb7+6665-0x261c),DATARMNETe4c5563cdb,&DATARMNETddcdf7bd4e
+);proc_create(DATARMNETe98d39b779,(0xdb7+6665-0x261c),DATARMNETe4c5563cdb,&
+DATARMNET6eb63d9ad0);DATARMNET6bf538fa23();DATARMNET410036d5ac=NULL;
+DATARMNET19c47a9f3a=NULL;DATARMNET22e796eff3=NULL;DATARMNET9b8000d2a7=NULL;
+DATARMNET835a28686c=NULL;DATARMNET67d31dc40a=NULL;DATARMNETaea4c85748();}void 
+DATARMNET28d33bd09f(void){remove_proc_entry(DATARMNET41be983a65,
+DATARMNETe4c5563cdb);remove_proc_entry(DATARMNET5ddc91451c,DATARMNETe4c5563cdb);
+remove_proc_entry(DATARMNETeb2a21dd7c,DATARMNETe4c5563cdb);remove_proc_entry(
+DATARMNET1c4ea23858,DATARMNETe4c5563cdb);remove_proc_entry(DATARMNET8b29e14112,
+DATARMNETe4c5563cdb);remove_proc_entry(DATARMNETe98d39b779,DATARMNETe4c5563cdb);
+remove_proc_entry(DATARMNET6517f07a36,NULL);DATARMNET6bf538fa23();
+DATARMNET410036d5ac=NULL;DATARMNET19c47a9f3a=NULL;DATARMNET22e796eff3=NULL;
+DATARMNET9b8000d2a7=NULL;DATARMNET835a28686c=NULL;DATARMNET67d31dc40a=NULL;
+DATARMNETaea4c85748();}

+ 87 - 0
qcom/opensource/datarmnet-ext/shs/rmnet_shs_wq_mem.h

@@ -0,0 +1,87 @@
+/* Copyright (c) 2019-2020 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 and
+ * only version 2 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ */
+
+#ifndef DATARMNETe10fe0b1e0
+#define DATARMNETe10fe0b1e0
+#include "rmnet_shs.h"
+#include "rmnet_shs_config.h"
+#define DATARMNET6517f07a36      "\x73\x68\x73"
+#define DATARMNET41be983a65     \
+"\x72\x6d\x6e\x65\x74\x5f\x73\x68\x73\x5f\x63\x61\x70\x73"
+#define DATARMNET5ddc91451c  \
+"\x72\x6d\x6e\x65\x74\x5f\x73\x68\x73\x5f\x66\x6c\x6f\x77\x73"
+#define DATARMNETeb2a21dd7c \
+"\x72\x6d\x6e\x65\x74\x5f\x73\x68\x73\x5f\x73\x73\x5f\x66\x6c\x6f\x77\x73"
+#define DATARMNET1c4ea23858   \
+"\x72\x6d\x6e\x65\x74\x5f\x73\x68\x73\x5f\x66\x66\x6c\x6f\x77\x73"
+#define DATARMNET8b29e14112   \
+"\x72\x6d\x6e\x65\x74\x5f\x73\x68\x73\x5f\x6c\x6c\x5f\x66\x6c\x6f\x77\x73"
+#define DATARMNETe98d39b779   \
+"\x72\x6d\x6e\x65\x74\x5f\x73\x68\x73\x5f\x6e\x65\x74\x64\x65\x76"
+#define DATARMNET67578af78f ((0xec7+1108-0x12fd))
+#define DATARMNETa847b6b6d0 (DATARMNET67578af78f)
+#define DATARMNET75c69edb82 ((0xeb7+698-0x110d))
+#define DATARMNETe4d15b9332 ((0xec7+1166-0x132d))
+#define DATARMNET9ae5f81f71 ((0xeb7+1158-0x132d))
+#define DATARMNET29d29f44cf ((0xd2d+202-0xdf7))
+struct __attribute__((__packed__))DATARMNET33582f7450{u64 DATARMNET18b7a5b761;
+u64 DATARMNET4da6031170;u64 DATARMNET4df302dbd6;u16 DATARMNET42a992465f;u8 
+DATARMNETf510b48c29;};struct __attribute__((__packed__))DATARMNET661e7a8566{int 
+DATARMNET68a58889b0[(0xd18+223-0xdf4)];int DATARMNET1c7c913c7b[(0xd18+223-0xdf4)
+];};struct __attribute__((__packed__))DATARMNETf44cda1bf2{u64 
+DATARMNET324c1a8f98;u64 DATARMNET253a9fc708;u64 DATARMNETbb80fccd97;u32 hash;u16
+ DATARMNET42a992465f;};struct __attribute__((__packed__))DATARMNET3a84fbfeae{u64
+ DATARMNET324c1a8f98;u64 DATARMNET253a9fc708;u64 DATARMNETbb80fccd97;u32 hash;
+u32 bif;u32 ack_thresh;u16 DATARMNET42a992465f;};struct __attribute__((
+__packed__))DATARMNET26737fb11e{union{struct iphdr DATARMNETac9bbaad7c;struct 
+ipv6hdr DATARMNET1688a97aa4;}ip_hdr;union{struct tcphdr tp;struct udphdr up;}
+DATARMNETe33b41dad9;u64 DATARMNET324c1a8f98;u64 DATARMNET253a9fc708;u64 
+DATARMNETbb80fccd97;u64 DATARMNET95266642d1;u64 DATARMNET0d682bcb29;u64 
+DATARMNET20e8fc9db8;u32 hash;u16 DATARMNET42a992465f;u16 trans_proto;u8 mux_id;
+u8 DATARMNETda8e8ae7ed;};struct __attribute__((__packed__))DATARMNETc13d990bf1{
+union{struct iphdr DATARMNETac9bbaad7c;struct ipv6hdr DATARMNET1688a97aa4;}
+ip_hdr;union{struct tcphdr tp;struct udphdr up;}DATARMNETe33b41dad9;u64 
+DATARMNET324c1a8f98;u64 DATARMNET253a9fc708;u64 DATARMNETbb80fccd97;u64 
+DATARMNET95266642d1;u64 DATARMNET0d682bcb29;u64 DATARMNET20e8fc9db8;u32 hash;u16
+ DATARMNET42a992465f;u16 trans_proto;u8 mux_id;};struct __attribute__((
+__packed__))DATARMNET57ccbe14f3{char name[DATARMNET9ae5f81f71];u64 
+DATARMNET77de6e34f2;u64 hw_evict;u64 DATARMNET870c3dafcb;u64 coal_tcp;u64 
+coal_tcp_bytes;u64 coal_udp;u64 coal_udp_bytes;u64 DATARMNET257fc4b2d4;u64 
+DATARMNET4eb77c78e6;u64 pb_marker_seq;u8 mux_id;};extern struct list_head 
+DATARMNET6c23f11e81;extern struct list_head DATARMNETf91b305f4e;extern struct 
+list_head DATARMNET3208cd0982;extern struct list_head DATARMNET922b4752e2;extern
+ struct list_head DATARMNETe46ae760db;enum{DATARMNETbd4083a6a4=
+(0x24f5+499-0x16e8)};struct DATARMNETa41d4c4a12{char*data;refcount_t refcnt;};
+void DATARMNET28a80d526e(struct DATARMNET6c78e47d24*DATARMNETd2a694d52a,struct 
+list_head*DATARMNETf0fb155a9c);void DATARMNET24e4475345(struct 
+DATARMNET6c78e47d24*DATARMNETd2a694d52a,struct list_head*DATARMNETb436c3f30b);
+void DATARMNET6f4b0915d3(struct DATARMNET6c78e47d24*DATARMNETd2a694d52a,struct 
+list_head*DATARMNET3208cd0982);void DATARMNET312b06829d(struct 
+DATARMNET6c78e47d24*DATARMNETd2a694d52a,struct list_head*DATARMNET922b4752e2);
+void DATARMNETa1b141715b(struct list_head*DATARMNETb436c3f30b);void 
+DATARMNET3af54cd726(struct list_head*DATARMNETf0fb155a9c);void 
+DATARMNETcc489fbbad(struct list_head*DATARMNET3208cd0982);void 
+DATARMNETf7730d41c1(struct list_head*DATARMNET922b4752e2);void 
+DATARMNETc6439e3d71(struct DATARMNETc8fdbf9c85*DATARMNET7bea4a06a6,struct 
+DATARMNET228056d4b7*DATARMNETf632b170b1,struct list_head*DATARMNETe46ae760db);
+void DATARMNETb177316a15(struct list_head*DATARMNETe46ae760db);void 
+DATARMNET5157210c44(struct list_head*DATARMNETe46ae760db);void 
+DATARMNET0e273eab79(struct list_head*DATARMNETb436c3f30b);void 
+DATARMNETe15af8eb6d(struct list_head*DATARMNETf0fb155a9c);void 
+DATARMNET78f3a0ca4f(struct list_head*DATARMNET3208cd0982);void 
+DATARMNETa3d6c4072d(struct list_head*DATARMNET922b4752e2);void 
+DATARMNET78666f33a1(void);void DATARMNETf5f83b943f(void);void 
+DATARMNET28d33bd09f(void);
+#endif 
+

+ 49 - 0
qcom/opensource/datarmnet-ext/wlan/Android.mk

@@ -0,0 +1,49 @@
+ifeq ($(TARGET_DATARMNET_EXT_ENABLE), true)
+ifneq ($(TARGET_BOARD_AUTO),true)
+ifneq ($(TARGET_BOARD_PLATFORM),qssi)
+
+RMNET_WLAN_DLKM_PLATFORMS_LIST := pineapple
+RMNET_WLAN_DLKM_PLATFORMS_LIST += blair
+RMNET_WLAN_DLKM_PLATFORMS_LIST += monaco
+RMNET_WLAN_DLKM_PLATFORMS_LIST += pitti
+RMNET_WLAN_DLKM_PLATFORMS_LIST += volcano
+
+ifeq ($(call is-board-platform-in-list, $(RMNET_WLAN_DLKM_PLATFORMS_LIST)),true)
+LOCAL_PATH := $(call my-dir)
+include $(CLEAR_VARS)
+
+#Enabling BAZEL
+LOCAL_MODULE_DDK_BUILD := true
+
+LOCAL_MODULE_PATH := $(KERNEL_MODULES_OUT)
+
+LOCAL_MODULE := rmnet_wlan.ko
+LOCAL_SRC_FILES := $(wildcard $(LOCAL_PATH)/**/*) $(wildcard $(LOCAL_PATH)/*)
+
+BOARD_OPENSOURCE_DIR ?= vendor/qcom/opensource
+BOARD_COMMON_DIR ?= device/qcom/common
+
+#path from build top to the core directory
+DATARMNET_CORE_PATH := datarmnet/core
+RMNET_CORE_PATH := $(BOARD_OPENSOURCE_DIR)/$(DATARMNET_CORE_PATH)
+DLKM_DIR := $(TOP)/$(BOARD_COMMON_DIR)/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
+
+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
+
+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
+endif #End of Check for datarmnet

+ 22 - 0
qcom/opensource/datarmnet-ext/wlan/BUILD.bazel

@@ -0,0 +1,22 @@
+load(":define_wlan.bzl", "define_wlan")
+load("//build/kernel/kleaf:kernel.bzl", "ddk_module")
+
+define_wlan("pineapple", "consolidate")
+
+define_wlan("pineapple", "gki")
+
+define_wlan("blair", "consolidate")
+
+define_wlan("blair", "gki")
+
+define_wlan("monaco", "consolidate")
+
+define_wlan("monaco", "gki")
+
+define_wlan("pitti", "consolidate")
+
+define_wlan("pitti", "gki")
+
+define_wlan("volcano", "consolidate")
+
+define_wlan("volcano", "gki")

+ 9 - 0
qcom/opensource/datarmnet-ext/wlan/Kbuild

@@ -0,0 +1,9 @@
+obj-m += rmnet_wlan.o
+ccflags-y := -I$(RMNET_CORE_INC_DIR) \
+	$(call cc-option,-Wno-misleading-indentation)
+rmnet_wlan-y := \
+	rmnet_wlan_main.o \
+	rmnet_wlan_genl.o \
+	rmnet_wlan_stats.o \
+	rmnet_wlan_fragment.o \
+	rmnet_wlan_connection.o

+ 10 - 0
qcom/opensource/datarmnet-ext/wlan/Kconfig

@@ -0,0 +1,10 @@
+#
+# RMNET_WLAN driver
+#
+
+menuconfig RMNET_WLAN
+    tristate "Rmnet WLAN support"
+    default m
+    depends on RMNET_CORE
+    ---help---
+        WLAN processing module for RmNet driver

+ 16 - 0
qcom/opensource/datarmnet-ext/wlan/Makefile

@@ -0,0 +1,16 @@
+#By default build for CLD
+RMNET_WLAN_SELECT := CONFIG_RMNET_WLAN=m
+KBUILD_OPTIONS += $(RMNET_WLAN_SELECT)
+KBUILD_OPTIONS += $(KBUILD_EXTRA) # Extra config if any
+KBUILD_EXTRA_SYMBOLS := $(M)/../../$(DATARMNET_CORE_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

+ 42 - 0
qcom/opensource/datarmnet-ext/wlan/define_wlan.bzl

@@ -0,0 +1,42 @@
+load("//build/bazel_common_rules/dist:dist.bzl", "copy_to_dist_dir")
+load("//build/kernel/kleaf:kernel.bzl", "ddk_module")
+
+def define_wlan(target, variant):
+    kernel_build_variant = "{}_{}".format(target, variant)
+    include_base = "../../../{}".format(native.package_name())
+
+    ddk_module(
+        name = "{}_wlan".format(kernel_build_variant),
+        out = "rmnet_wlan.ko",
+        srcs = [
+            "rmnet_wlan.h",
+            "rmnet_wlan_connection.c",
+            "rmnet_wlan_connection.h",
+            "rmnet_wlan_fragment.c",
+            "rmnet_wlan_fragment.h",
+            "rmnet_wlan_genl.c",
+            "rmnet_wlan_genl.h",
+            "rmnet_wlan_main.c",
+            "rmnet_wlan_stats.c",
+            "rmnet_wlan_stats.h",
+        ],
+        kernel_build = "//msm-kernel:{}".format(kernel_build_variant),
+        deps = [
+            "//msm-kernel:all_headers",
+            "//vendor/qcom/opensource/datarmnet:{}_rmnet_core".format(kernel_build_variant),
+            "//vendor/qcom/opensource/datarmnet:rmnet_core_headers",
+        ],
+        copts = ["-Wno-misleading-indentation"],
+    )
+
+    copy_to_dist_dir(
+        name = "{}_datarment-ext_dist".format(kernel_build_variant),
+        data = [
+            ":{}_wlan".format(kernel_build_variant),
+        ],
+        dist_dir = "out/target/product/{}/dlkm/lib/modules/".format(target),
+        flat = True,
+        wipe_dist_dir = False,
+        allow_duplicate_filenames = False,
+        mode_overrides = {"**/*": "644"},
+    )

+ 61 - 0
qcom/opensource/datarmnet-ext/wlan/rmnet_wlan.h

@@ -0,0 +1,61 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+/* Copyright (c) 2021, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved.
+ *
+ * RMNET WLAN handler framework
+ *
+ */
+
+#ifndef DATARMNETc7bc459123
+#define DATARMNETc7bc459123
+#include <linux/types.h>
+#include <net/genetlink.h>
+#include <linux/netdevice.h>
+#include <linux/in6.h>
+struct DATARMNETb89ecedefc{union{__be16 DATARMNETf0d9de7e2f;__be32 
+DATARMNET906b2ee561;};u8 DATARMNET0d956cc77a;u8 DATARMNET4924e79411;};struct 
+DATARMNET8d3c2559ca{struct net_device*DATARMNET57656f6f2f;union{__be32 
+DATARMNET0dc14167a1;struct in6_addr DATARMNET5700daac01;};u8 DATARMNET0d956cc77a
+;u8 DATARMNET9954a624ac;};struct DATARMNET41b426061d{struct hlist_node 
+DATARMNETe8608dd267;struct rcu_head DATARMNET28bfe9e6ad;struct notifier_block 
+DATARMNET272c159b3c;char DATARMNET852d4d00e2[IFNAMSIZ];struct 
+DATARMNET8d3c2559ca DATARMNET7ed5754a5c;};struct DATARMNETe117226f58{union{
+__be32 DATARMNETdfe430c2d6;struct in6_addr DATARMNET815cbb4bf5;};union{__be32 
+DATARMNET2cb607d686;struct in6_addr DATARMNETc3f31215b7;};__be16 
+DATARMNET08e913477e;__be16 DATARMNETda7f7fa492;u8 DATARMNET0d956cc77a;};enum{
+DATARMNET356f2a237e,DATARMNET45ee632553,DATARMNET9bfbc31cd6,DATARMNETdcafdec32a,
+};rx_handler_result_t DATARMNET37a92021f9(struct sk_buff**DATARMNET89946cec52);
+void DATARMNET7ca470d54b(struct sk_buff*DATARMNET543491eb0f,u32 
+DATARMNET1464100e7a);int DATARMNET4899053671(struct sk_buff*DATARMNET543491eb0f,
+struct DATARMNET8d3c2559ca*DATARMNET2d4b4cfc9e);bool DATARMNET4eafcdee07(struct 
+DATARMNETb89ecedefc*DATARMNET3396919a68);int DATARMNET53f12a0f7d(struct 
+DATARMNETb89ecedefc*DATARMNETcadc2ef9aa,u32 DATARMNETef77661260,struct genl_info
+*DATARMNET54338da2ff);int DATARMNET07f6485c9b(struct DATARMNETb89ecedefc*
+DATARMNETcadc2ef9aa,u32 DATARMNETef77661260,struct genl_info*DATARMNET54338da2ff
+);int DATARMNETe14c875532(struct sk_buff**DATARMNET89946cec52,struct genl_family
+*DATARMNET4a4aca7220,struct genl_info*DATARMNET54338da2ff);int 
+DATARMNET97b2388e63(char*DATARMNET852d4d00e2,struct genl_info*
+DATARMNET54338da2ff);int DATARMNETa903cd5994(char*DATARMNET852d4d00e2,struct 
+genl_info*DATARMNET54338da2ff);int DATARMNET92e5468fc5(char*DATARMNET852d4d00e2,
+struct genl_info*DATARMNET54338da2ff);int DATARMNET9d7bb9a63d(char*
+DATARMNET852d4d00e2,struct genl_info*DATARMNET54338da2ff);int 
+DATARMNET947eb110d2(struct DATARMNET8d3c2559ca*DATARMNET2d4b4cfc9e,struct 
+genl_info*DATARMNET54338da2ff);int DATARMNETb8b35fdc18(struct 
+DATARMNET8d3c2559ca*DATARMNET2d4b4cfc9e,struct genl_info*DATARMNET54338da2ff);
+int DATARMNET8d5a5a7047(__be16 DATARMNETf0d9de7e2f,struct genl_info*
+DATARMNET54338da2ff);int DATARMNETc97c6a4265(__be16 DATARMNETf0d9de7e2f,struct 
+genl_info*DATARMNET54338da2ff);bool DATARMNETa8b2566e6a(struct sk_buff*
+DATARMNET543491eb0f,struct DATARMNETb89ecedefc*DATARMNET3396919a68,int 
+DATARMNET611d08d671);int DATARMNET59b8376224(__be16 DATARMNETf0d9de7e2f,struct 
+genl_info*DATARMNET54338da2ff);int DATARMNET0b12e969c5(__be16 
+DATARMNETf0d9de7e2f,struct genl_info*DATARMNET54338da2ff);bool 
+DATARMNET0a4704e5e0(struct DATARMNETb89ecedefc*DATARMNET3396919a68);int 
+DATARMNET078f6bd384(void);void DATARMNETfae36afa03(void);char*
+DATARMNET934406764d(void);char*DATARMNETe447822105(void);struct 
+DATARMNET41b426061d*DATARMNETcc0a01df2a(struct DATARMNET8d3c2559ca*
+DATARMNET54338da2ff);int DATARMNET4c1c11d8a5(struct DATARMNETe117226f58*
+DATARMNET3396919a68);int DATARMNET56fde5181e(void);extern struct 
+DATARMNETe117226f58*DATARMNETcde6e442f5;int DATARMNETaba2beb199(const char*
+DATARMNETf6f1ac8bbf,const char*DATARMNET8faed3a82a,size_t DATARMNET1dfbbc30a5);
+#endif
+

Einige Dateien werden nicht angezeigt, da zu viele Dateien in diesem Diff geändert wurden.