浏览代码

rmnet_perf: I6df3a0c3013de343f4e679db4d3654ff7f078f96

Updates the module to version I6df3a0c3013de343f4e679db4d3654ff7f078f96

Change-Id: I6df3a0c3013de343f4e679db4d3654ff7f078f96
Signed-off-by: Sean Tranchetti <[email protected]>
Sean Tranchetti 3 年之前
父节点
当前提交
9b37184219
共有 6 个文件被更改,包括 528 次插入53 次删除
  1. 3 1
      perf/Kbuild
  2. 80 52
      perf/rmnet_perf_main.c
  3. 238 0
      perf/rmnet_perf_tcp.c
  4. 16 0
      perf/rmnet_perf_tcp.h
  5. 176 0
      perf/rmnet_perf_udp.c
  6. 15 0
      perf/rmnet_perf_udp.h

+ 3 - 1
perf/Kbuild

@@ -2,4 +2,6 @@ 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-y := rmnet_perf_main.o \
+		rmnet_perf_tcp.o \
+		rmnet_perf_udp.o

+ 80 - 52
perf/rmnet_perf_main.c

@@ -1,26 +1,35 @@
 // SPDX-License-Identifier: GPL-2.0-only
-/* Copyright (c) 2021-2022 Qualcomm Innovation Center, Inc. All rights reserved.
+/* 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[]={
-"\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,
+"\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"
-);extern void(*rmnet_perf_egress_hook1)(struct sk_buff*DATARMNET543491eb0f);
+);static 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(
@@ -34,53 +43,72 @@ 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);}int DATARMNETee9214ce9b(struct 
-sk_buff*DATARMNET543491eb0f){if(DATARMNET543491eb0f->protocol==htons(ETH_P_IP)){
-struct iphdr*DATARMNET86f1f2cdc9,DATARMNETbf6548198e;DATARMNET86f1f2cdc9=
+(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;}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)||DATARMNET86f1f2cdc9->protocol!=IPPROTO_UDP)
-return-EINVAL;if(DATARMNET77ab42949f(DATARMNET543491eb0f,(DATARMNET86f1f2cdc9->
-ihl)*(0xd11+230-0xdf3)))goto DATARMNET606558916b;return-EINVAL;}if(
+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;u8 protocol;int DATARMNET611d08d671=
-(0xd2d+202-0xdf7);__be16 DATARMNET98fed39916=(0xd2d+202-0xdf7);
-DATARMNETbf55123e5b=skb_header_pointer(DATARMNET543491eb0f,(0xd2d+202-0xdf7),
-sizeof(*DATARMNETbf55123e5b),&DATARMNETcf1d9e2c1e);if(!DATARMNETbf55123e5b)
-return-EINVAL;protocol=DATARMNETbf55123e5b->nexthdr;DATARMNET611d08d671=
-ipv6_skip_exthdr(DATARMNET543491eb0f,sizeof(struct ipv6hdr),&protocol,&
-DATARMNET98fed39916);if(DATARMNET98fed39916||protocol!=IPPROTO_UDP||
-DATARMNET611d08d671==-(0xd26+209-0xdf6))return-EINVAL;if(DATARMNET77ab42949f(
-DATARMNET543491eb0f,DATARMNET611d08d671))goto DATARMNET606558916b;}return-EINVAL
-;DATARMNET606558916b:DATARMNET543491eb0f->hash=(0xd2d+202-0xdf7);
-DATARMNET543491eb0f->sw_hash=(0xd26+209-0xdf6);return(0xd2d+202-0xdf7);}void 
-DATARMNET05c4bf8af9(struct sk_buff*DATARMNET543491eb0f){if(DATARMNET543491eb0f->
-protocol==htons(ETH_P_IP)){struct iphdr*DATARMNET86f1f2cdc9,DATARMNETbf6548198e;
-DATARMNET86f1f2cdc9=skb_header_pointer(DATARMNET543491eb0f,(0xd2d+202-0xdf7),
-sizeof(*DATARMNET86f1f2cdc9),&DATARMNETbf6548198e);if(!DATARMNET86f1f2cdc9||
-ip_is_fragment(DATARMNET86f1f2cdc9)||DATARMNET86f1f2cdc9->protocol!=IPPROTO_UDP)
-return;if(DATARMNET77ab42949f(DATARMNET543491eb0f,(DATARMNET86f1f2cdc9->ihl)*
-(0xd11+230-0xdf3)))goto DATARMNETb261f33b7b;return;}if(DATARMNET543491eb0f->
-protocol==htons(ETH_P_IPV6)){struct ipv6hdr*DATARMNETbf55123e5b,
-DATARMNETcf1d9e2c1e;u8 protocol;int DATARMNET611d08d671=(0xd2d+202-0xdf7);__be16
- DATARMNET98fed39916=(0xd2d+202-0xdf7);DATARMNETbf55123e5b=skb_header_pointer(
-DATARMNET543491eb0f,(0xd2d+202-0xdf7),sizeof(*DATARMNETbf55123e5b),&
-DATARMNETcf1d9e2c1e);if(!DATARMNETbf55123e5b)return;protocol=DATARMNETbf55123e5b
-->nexthdr;DATARMNET611d08d671=ipv6_skip_exthdr(DATARMNET543491eb0f,sizeof(struct
- ipv6hdr),&protocol,&DATARMNET98fed39916);if(DATARMNET98fed39916||protocol!=
-IPPROTO_UDP||DATARMNET611d08d671==-(0xd26+209-0xdf6))return;if(
-DATARMNET77ab42949f(DATARMNET543491eb0f,DATARMNET611d08d671))goto 
-DATARMNETb261f33b7b;}return;DATARMNETb261f33b7b:DATARMNET543491eb0f->priority=
-14286874;}static const struct rmnet_module_hook_register_info 
-DATARMNET95a71e03c1[]={{.hooknum=RMNET_MODULE_HOOK_PERF_INGRESS,.func=
-DATARMNETee9214ce9b,},{.hooknum=RMNET_MODULE_HOOK_PERF_EGRESS,.func=
-DATARMNET05c4bf8af9,},};void DATARMNET49c17a32bc(void){rcu_assign_pointer(
-rmnet_perf_egress_hook1,DATARMNET05c4bf8af9);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){pr_info("%s(): Loading\n",
-__func__);DATARMNET49c17a32bc();return(0xd2d+202-0xdf7);}static void __exit 
-DATARMNETa343229e33(void){DATARMNET41e8cc085c();pr_info(
+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,},};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);

+ 238 - 0
perf/rmnet_perf_tcp.c

@@ -0,0 +1,238 @@
+// 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,DATARMNET7797205f58,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;struct sock*DATARMNETa3e9a18f1b;
+unsigned long DATARMNET763f2e5fac;u32 DATARMNETfef3675ce7;u32 
+DATARMNET9076d335ab;u32 DATARMNET9c389f3b86;u32 DATARMNET9a57846b4e;u32 
+DATARMNETb8fc35ed64;bool DATARMNET55056146f6;};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);if(DATARMNET63b1a086d5->
+DATARMNETa3e9a18f1b)sock_put(DATARMNET63b1a086d5->DATARMNETa3e9a18f1b);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(
+DATARMNETe78ad140cc||DATARMNETd92eab34a9(DATARMNET63b1a086d5,DATARMNET763f2e5fac
+)){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(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;}else if(DATARMNET63b1a086d5
+->DATARMNETa3e9a18f1b){sk=DATARMNET63b1a086d5->DATARMNETa3e9a18f1b;}else if((sk=
+DATARMNETc0b5d624ae(&DATARMNET63b1a086d5->DATARMNET54338da2ff,
+DATARMNET543491eb0f->dev))){DATARMNET63b1a086d5->DATARMNETa3e9a18f1b=sk;}else{
+struct rmnet_skb_cb*DATARMNET1ec4882bf7=RMNET_SKB_CB(DATARMNET543491eb0f);
+DATARMNET32b91c8ae6(DATARMNETb03f9571a3);DATARMNET63b1a086d5->
+DATARMNET55056146f6=true;DATARMNET1ec4882bf7->tethered=true;return;}if(!
+DATARMNET543491eb0f->sk){sock_hold(sk);DATARMNET543491eb0f->sk=sk;
+DATARMNET543491eb0f->destructor=sock_edemux;if(sk_fullsock(sk)){struct dst_entry
+*dst=rcu_dereference(sk->sk_rx_dst);if(dst){u32 DATARMNETc8fe0ce669=(
+DATARMNET63b1a086d5->DATARMNET54338da2ff.DATARMNET0d956cc77a==(0xd11+230-0xdf3))
+?(0xd2d+202-0xdf7):sk->sk_rx_dst_cookie;dst=dst_check(dst,DATARMNETc8fe0ce669);}
+if(dst&&sk->sk_rx_dst_ifindex==DATARMNET543491eb0f->dev->ifindex)
+skb_dst_set_noref(DATARMNET543491eb0f,dst);}}inet_csk(sk)->icsk_ack.pending|=
+ICSK_ACK_NOW;DATARMNET63b1a086d5->DATARMNETb8fc35ed64++;DATARMNET32b91c8ae6(
+DATARMNET7797205f58);}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 
+rmnet_skb_cb*DATARMNET1ec4882bf7=RMNET_SKB_CB(DATARMNET543491eb0f);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){DATARMNET1ec4882bf7->tethered=true;
+return;}if(DATARMNETd147c14c0e){if(after(DATARMNETb1b0ee1b2d,DATARMNET91c1d5c029
+)){u32 DATARMNET4e557c82d6=DATARMNETb6ff6d25f8-DATARMNETb1b0ee1b2d;if(
+DATARMNET4e557c82d6>DATARMNET9445bc443c)DATARMNET31a7673e56(DATARMNET63b1a086d5,
+DATARMNET543491eb0f);WRITE_ONCE(DATARMNET63b1a086d5->DATARMNET9076d335ab,
+DATARMNETb1b0ee1b2d);}}else{u32 DATARMNET4e557c82d6=DATARMNETb6ff6d25f8-
+DATARMNET91c1d5c029;if(after(DATARMNET26945497d8,DATARMNETb6ff6d25f8)){
+DATARMNET4e557c82d6=DATARMNET26945497d8-DATARMNET91c1d5c029;DATARMNET4e557c82d6
++=DATARMNET62fb576113(DATARMNET543491eb0f);if(DATARMNET4e557c82d6>
+DATARMNET9445bc443c)DATARMNET31a7673e56(DATARMNET63b1a086d5,DATARMNET543491eb0f)
+;WRITE_ONCE(DATARMNET63b1a086d5->DATARMNETfef3675ce7,DATARMNET26945497d8);}
+DATARMNET1ec4882bf7->bif=DATARMNET4e557c82d6;DATARMNET1ec4882bf7->ack_thresh=
+DATARMNET9445bc443c;DATARMNET1ec4882bf7->ack_forced=DATARMNET63b1a086d5->
+DATARMNETb8fc35ed64;}}void DATARMNET9250714999(struct sk_buff*
+DATARMNET543491eb0f){struct DATARMNET4b40fe9cd4 DATARMNET3396919a68={};struct 
+DATARMNETddbc1e5435*DATARMNET63b1a086d5;struct tcphdr*DATARMNET668416551c;u32 
+DATARMNETd660a1a629;if(!skb_transport_header_was_set(DATARMNET543491eb0f)||
+DATARMNET543491eb0f->ip_summed==CHECKSUM_NONE)return;DATARMNET668416551c=tcp_hdr
+(DATARMNET543491eb0f);if(DATARMNET668416551c->syn)return;DATARMNETd660a1a629=
+DATARMNET62fb576113(DATARMNET543491eb0f);if(!DATARMNETd660a1a629&&
+DATARMNET668416551c->ack)return;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);}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;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);}

+ 16 - 0
perf/rmnet_perf_tcp.h

@@ -0,0 +1,16 @@
+// 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>
+void DATARMNET9250714999(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
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
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
+