diff --git a/perf/Kbuild b/perf/Kbuild index 096f66f286..cee8e16fec 100644 --- a/perf/Kbuild +++ b/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 diff --git a/perf/rmnet_perf_main.c b/perf/rmnet_perf_main.c index 08e56f334a..4969bd6420 100644 --- a/perf/rmnet_perf_main.c +++ b/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 #include #include #include #include #include +#include +#include #include "rmnet_module.h" #include #include +#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)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)||DATARMNET86f1f2cdc9->protocol!=IPPROTO_UDP) -return-EINVAL;if(DATARMNET77ab42949f(DATARMNET543491eb0f,(DATARMNET86f1f2cdc9-> -ihl)*(0xd11+230-0xdf3)))goto DATARMNET606558916b;return-EINVAL;}if( +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))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); diff --git a/perf/rmnet_perf_tcp.c b/perf/rmnet_perf_tcp.c new file mode 100644 index 0000000000..abdd11669e --- /dev/null +++ b/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 +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#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 +(DATARMNET248f120dd5DATARMNET763f2e5fac> +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);} diff --git a/perf/rmnet_perf_tcp.h b/perf/rmnet_perf_tcp.h new file mode 100644 index 0000000000..e037e99c92 --- /dev/null +++ b/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 +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 + diff --git a/perf/rmnet_perf_udp.c b/perf/rmnet_perf_udp.c new file mode 100644 index 0000000000..ab4d96ee08 --- /dev/null +++ b/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 +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#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);} diff --git a/perf/rmnet_perf_udp.h b/perf/rmnet_perf_udp.h new file mode 100644 index 0000000000..0962acdfd4 --- /dev/null +++ b/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 +void DATARMNET2a6d02a6a5(struct sk_buff*DATARMNET543491eb0f);void +DATARMNET5ecc30669c(struct sk_buff*DATARMNET543491eb0f);int DATARMNETe80a33d544( +void);void DATARMNET4b5170a1ef(void); +#endif +