rmnet_perf_main.c 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. // SPDX-License-Identifier: GPL-2.0-only
  2. /* Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
  3. *
  4. * RMNET PERF framework
  5. *
  6. */
  7. #include <linux/module.h>
  8. #include <linux/skbuff.h>
  9. #include <linux/in.h>
  10. #include <linux/udp.h>
  11. #include <linux/ip.h>
  12. #include <linux/ipv6.h>
  13. #include <net/ip.h>
  14. #include <net/ipv6.h>
  15. #include "rmnet_module.h"
  16. #include <net/ipv6.h>
  17. #include <net/ip.h>
  18. #include "rmnet_perf_tcp.h"
  19. #include "rmnet_perf_udp.h"
  20. MODULE_LICENSE("\x47\x50\x4c\x20\x76\x32");static char*verinfo[]={
  21. "\x38\x61\x62\x30\x61\x38\x65\x65","\x66\x32\x32\x62\x61\x63\x65\x30",
  22. "\x63\x63\x39\x38\x66\x30\x38\x61","\x63\x65\x37\x39\x33\x32\x31\x63",
  23. "\x35\x64\x63\x64\x64\x34\x63\x30","\x34\x63\x39\x62\x35\x33\x33\x37",
  24. "\x61\x33\x62\x61\x62\x64\x34\x30","\x37\x66\x30\x37\x38\x66\x39\x36",
  25. "\x65\x35\x36\x63\x62\x35\x35\x64","\x65\x32\x31\x38\x66\x34\x35\x31",
  26. "\x33\x39\x63\x62\x64\x37\x64\x35","\x37\x34\x31\x35\x39\x32\x31\x63",
  27. "\x34\x64\x65\x34\x39\x64\x62\x35","\x62\x31\x63\x34\x34\x62\x34\x63"};
  28. module_param_array(verinfo,charp,NULL,(0xcb7+5769-0x221c));MODULE_PARM_DESC(
  29. verinfo,
  30. "\x56\x65\x72\x73\x69\x6f\x6e\x20\x6f\x66\x20\x74\x68\x65\x20\x64\x72\x69\x76\x65\x72"
  31. );bool DATARMNETc03b668e4c=true;module_param_named(rmnet_perf_knob0,
  32. DATARMNETc03b668e4c,bool,(0xdb7+6665-0x261c));static bool DATARMNET21c7a3c377=
  33. true;module_param_named(rmnet_perf_knob1,DATARMNET21c7a3c377,bool,
  34. (0xdb7+6665-0x261c));extern void(*rmnet_perf_egress_hook1)(struct sk_buff*
  35. DATARMNET543491eb0f);
  36. #define DATARMNETf241a4b20f (0xe07+6616-0x2624)
  37. static inline bool DATARMNETe1ef3edea2(struct udphdr*DATARMNETa1abb4897c){return
  38. be16_to_cpu(DATARMNETa1abb4897c->source)==DATARMNETf241a4b20f||be16_to_cpu(
  39. DATARMNETa1abb4897c->dest)==DATARMNETf241a4b20f;}static bool DATARMNET77ab42949f
  40. (struct sk_buff*DATARMNET543491eb0f,int DATARMNET611d08d671){u8*
  41. DATARMNET352416e828,DATARMNETd9bda61912;struct udphdr*DATARMNETa1abb4897c,
  42. DATARMNET7b1af10647;DATARMNETa1abb4897c=skb_header_pointer(DATARMNET543491eb0f,
  43. DATARMNET611d08d671,sizeof(*DATARMNETa1abb4897c),&DATARMNET7b1af10647);if(!
  44. DATARMNETa1abb4897c||!DATARMNETe1ef3edea2(DATARMNETa1abb4897c))return false;if(
  45. be16_to_cpu(DATARMNETa1abb4897c->len)<sizeof(struct udphdr)+(0xd26+209-0xdf6))
  46. return false;DATARMNET352416e828=skb_header_pointer(DATARMNET543491eb0f,
  47. DATARMNET611d08d671+sizeof(struct udphdr),(0xd26+209-0xdf6),&DATARMNETd9bda61912
  48. );if(!DATARMNET352416e828)return false;return((*DATARMNET352416e828)&
  49. (0xbf7+4869-0x1e3c))==(0xbf7+4869-0x1e3c);}static int DATARMNETee9214ce9b(struct
  50. sk_buff*DATARMNET543491eb0f,int DATARMNET611d08d671){if(DATARMNET77ab42949f(
  51. DATARMNET543491eb0f,DATARMNET611d08d671)){DATARMNET543491eb0f->hash=
  52. (0xd2d+202-0xdf7);DATARMNET543491eb0f->sw_hash=(0xd26+209-0xdf6);return
  53. (0xd2d+202-0xdf7);}return-EINVAL;}int DATARMNETf2958615b1(struct sk_buff*
  54. DATARMNET543491eb0f){if(DATARMNET543491eb0f->protocol==htons(ETH_P_IP)){struct
  55. iphdr*DATARMNET86f1f2cdc9,DATARMNETbf6548198e;DATARMNET86f1f2cdc9=
  56. skb_header_pointer(DATARMNET543491eb0f,(0xd2d+202-0xdf7),sizeof(*
  57. DATARMNET86f1f2cdc9),&DATARMNETbf6548198e);if(!DATARMNET86f1f2cdc9||
  58. ip_is_fragment(DATARMNET86f1f2cdc9))return-EINVAL;if(DATARMNET86f1f2cdc9->
  59. protocol==IPPROTO_UDP){if(DATARMNET21c7a3c377)DATARMNET2a6d02a6a5(
  60. DATARMNET543491eb0f);return DATARMNETee9214ce9b(DATARMNET543491eb0f,
  61. DATARMNET86f1f2cdc9->ihl*(0xd11+230-0xdf3));}if(DATARMNET86f1f2cdc9->protocol==
  62. IPPROTO_TCP){if(DATARMNETc03b668e4c)DATARMNET9250714999(DATARMNET543491eb0f);
  63. return-EINVAL;}}else if(DATARMNET543491eb0f->protocol==htons(ETH_P_IPV6)){struct
  64. ipv6hdr*DATARMNETbf55123e5b,DATARMNETcf1d9e2c1e;int DATARMNET611d08d671;__be16
  65. DATARMNET98fed39916;u8 DATARMNET65293f17c4;DATARMNETbf55123e5b=
  66. skb_header_pointer(DATARMNET543491eb0f,(0xd2d+202-0xdf7),sizeof(*
  67. DATARMNETbf55123e5b),&DATARMNETcf1d9e2c1e);if(!DATARMNETbf55123e5b)return-EINVAL
  68. ;DATARMNET65293f17c4=DATARMNETbf55123e5b->nexthdr;DATARMNET611d08d671=
  69. ipv6_skip_exthdr(DATARMNET543491eb0f,sizeof(*DATARMNETbf55123e5b),&
  70. DATARMNET65293f17c4,&DATARMNET98fed39916);if(DATARMNET611d08d671<
  71. (0xd2d+202-0xdf7)||DATARMNET98fed39916)return-EINVAL;if(DATARMNET65293f17c4==
  72. IPPROTO_UDP){if(DATARMNET21c7a3c377)DATARMNET2a6d02a6a5(DATARMNET543491eb0f);
  73. return DATARMNETee9214ce9b(DATARMNET543491eb0f,DATARMNET611d08d671);}if(
  74. DATARMNET65293f17c4==IPPROTO_TCP){if(DATARMNETc03b668e4c)DATARMNET9250714999(
  75. DATARMNET543491eb0f);return-EINVAL;}}return-EINVAL;}void DATARMNET7b0253229f(
  76. struct sk_buff*DATARMNET543491eb0f){if(DATARMNET543491eb0f->protocol==htons(
  77. ETH_P_IP)){struct iphdr*DATARMNET86f1f2cdc9,DATARMNETbf6548198e;
  78. DATARMNET86f1f2cdc9=skb_header_pointer(DATARMNET543491eb0f,(0xd2d+202-0xdf7),
  79. sizeof(*DATARMNET86f1f2cdc9),&DATARMNETbf6548198e);if(!DATARMNET86f1f2cdc9||
  80. ip_is_fragment(DATARMNET86f1f2cdc9))return;if(DATARMNET86f1f2cdc9->protocol==
  81. IPPROTO_TCP){if(DATARMNETc03b668e4c)DATARMNETd8fdde8978(DATARMNET543491eb0f);}}
  82. else if(DATARMNET543491eb0f->protocol==htons(ETH_P_IPV6)){struct ipv6hdr*
  83. DATARMNETbf55123e5b,DATARMNETcf1d9e2c1e;int DATARMNET611d08d671;__be16
  84. DATARMNET98fed39916;u8 DATARMNET65293f17c4;DATARMNETbf55123e5b=
  85. skb_header_pointer(DATARMNET543491eb0f,(0xd2d+202-0xdf7),sizeof(*
  86. DATARMNETbf55123e5b),&DATARMNETcf1d9e2c1e);if(!DATARMNETbf55123e5b)return;
  87. DATARMNET65293f17c4=DATARMNETbf55123e5b->nexthdr;DATARMNET611d08d671=
  88. ipv6_skip_exthdr(DATARMNET543491eb0f,sizeof(*DATARMNETbf55123e5b),&
  89. DATARMNET65293f17c4,&DATARMNET98fed39916);if(DATARMNET611d08d671<
  90. (0xd2d+202-0xdf7)||DATARMNET98fed39916)return;if(DATARMNET65293f17c4==
  91. IPPROTO_TCP){if(DATARMNETc03b668e4c)DATARMNETd8fdde8978(DATARMNET543491eb0f);}}}
  92. static void DATARMNET05c4bf8af9(struct sk_buff*DATARMNET543491eb0f,int
  93. DATARMNET611d08d671){if(DATARMNET77ab42949f(DATARMNET543491eb0f,
  94. DATARMNET611d08d671))DATARMNET543491eb0f->priority=14286874;}void
  95. DATARMNET324fe25dad(struct sk_buff*DATARMNET543491eb0f){if(DATARMNET543491eb0f->
  96. protocol==htons(ETH_P_IP)){struct iphdr*DATARMNET86f1f2cdc9,DATARMNETbf6548198e;
  97. DATARMNET86f1f2cdc9=skb_header_pointer(DATARMNET543491eb0f,(0xd2d+202-0xdf7),
  98. sizeof(*DATARMNET86f1f2cdc9),&DATARMNETbf6548198e);if(!DATARMNET86f1f2cdc9||
  99. ip_is_fragment(DATARMNET86f1f2cdc9))return;if(DATARMNET86f1f2cdc9->protocol==
  100. IPPROTO_UDP){if(DATARMNET21c7a3c377)DATARMNET5ecc30669c(DATARMNET543491eb0f);
  101. DATARMNET05c4bf8af9(DATARMNET543491eb0f,DATARMNET86f1f2cdc9->ihl*
  102. (0xd11+230-0xdf3));return;}if(DATARMNET86f1f2cdc9->protocol==IPPROTO_TCP){if(
  103. DATARMNETc03b668e4c)DATARMNET9d574e64b1(DATARMNET543491eb0f);return;}}else if(
  104. DATARMNET543491eb0f->protocol==htons(ETH_P_IPV6)){struct ipv6hdr*
  105. DATARMNETbf55123e5b,DATARMNETcf1d9e2c1e;int DATARMNET611d08d671;__be16
  106. DATARMNET98fed39916;u8 DATARMNET65293f17c4;DATARMNETbf55123e5b=
  107. skb_header_pointer(DATARMNET543491eb0f,(0xd2d+202-0xdf7),sizeof(*
  108. DATARMNETbf55123e5b),&DATARMNETcf1d9e2c1e);if(!DATARMNETbf55123e5b)return;
  109. DATARMNET65293f17c4=DATARMNETbf55123e5b->nexthdr;DATARMNET611d08d671=
  110. ipv6_skip_exthdr(DATARMNET543491eb0f,sizeof(*DATARMNETbf55123e5b),&
  111. DATARMNET65293f17c4,&DATARMNET98fed39916);if(DATARMNET611d08d671<
  112. (0xd2d+202-0xdf7)||DATARMNET98fed39916)return;if(DATARMNET65293f17c4==
  113. IPPROTO_UDP){if(DATARMNET21c7a3c377)DATARMNET5ecc30669c(DATARMNET543491eb0f);
  114. DATARMNET05c4bf8af9(DATARMNET543491eb0f,DATARMNET611d08d671);return;}if(
  115. DATARMNET65293f17c4==IPPROTO_TCP){if(DATARMNETc03b668e4c)DATARMNET9d574e64b1(
  116. DATARMNET543491eb0f);return;}}}static const struct
  117. rmnet_module_hook_register_info DATARMNET95a71e03c1[]={{.hooknum=
  118. RMNET_MODULE_HOOK_PERF_INGRESS,.func=DATARMNETf2958615b1,},{.hooknum=
  119. RMNET_MODULE_HOOK_PERF_EGRESS,.func=DATARMNET324fe25dad,},{.hooknum=
  120. RMNET_MODULE_HOOK_PERF_SET_THRESH,.func=DATARMNET7fa1835595,},{.hooknum=
  121. RMNET_MODULE_HOOK_PERF_INGRESS_RX_HANDLER,.func=DATARMNET7b0253229f,},};void
  122. DATARMNET49c17a32bc(void){rcu_assign_pointer(rmnet_perf_egress_hook1,
  123. DATARMNET324fe25dad);rmnet_module_hook_register(DATARMNET95a71e03c1,ARRAY_SIZE(
  124. DATARMNET95a71e03c1));}void DATARMNET41e8cc085c(void){rcu_assign_pointer(
  125. rmnet_perf_egress_hook1,NULL);rmnet_module_hook_unregister(DATARMNET95a71e03c1,
  126. ARRAY_SIZE(DATARMNET95a71e03c1));}static int __init DATARMNET63abbdc3d3(void){
  127. int DATARMNETb14e52a504;pr_info("%s(): Loading\n",__func__);DATARMNETb14e52a504=
  128. DATARMNET7e9995246e();if(DATARMNETb14e52a504)return DATARMNETb14e52a504;
  129. DATARMNETb14e52a504=DATARMNETe80a33d544();if(DATARMNETb14e52a504){
  130. DATARMNET38bb6f2b7a();return DATARMNETb14e52a504;}DATARMNET49c17a32bc();return
  131. (0xd2d+202-0xdf7);}static void __exit DATARMNETa343229e33(void){
  132. DATARMNET41e8cc085c();DATARMNET4b5170a1ef();DATARMNET38bb6f2b7a();pr_info(
  133. "\x25\x73\x28\x29\x3a\x20\x65\x78\x69\x74\x69\x6e\x67" "\n",__func__);}
  134. module_init(DATARMNET63abbdc3d3);module_exit(DATARMNETa343229e33);