rmnet_perf_tether_main.c 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233
  1. // SPDX-License-Identifier: GPL-2.0-only
  2. /* Copyright (c) 2021, The Linux Foundation. All rights reserved.
  3. * Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
  4. *
  5. * RMNET PERF TETHER framework
  6. *
  7. */
  8. #include <linux/module.h>
  9. #include <net/tcp.h>
  10. #include "rmnet_descriptor.h"
  11. #include "rmnet_map.h"
  12. MODULE_LICENSE("\x47\x50\x4c\x20\x76\x32");static char*verinfo[]={
  13. "\x37\x34\x31\x35\x39\x32\x31\x63","\x34\x39\x61\x66\x39\x62\x64\x34"};
  14. module_param_array(verinfo,charp,NULL,(0xcb7+5769-0x221c));MODULE_PARM_DESC(
  15. verinfo,
  16. "\x56\x65\x72\x73\x69\x6f\x6e\x20\x6f\x66\x20\x74\x68\x65\x20\x64\x72\x69\x76\x65\x72"
  17. );extern void(*rmnet_perf_tether_ingress_hook)(struct tcphdr*DATARMNET2e7cc88971
  18. ,struct rmnet_frag_descriptor*DATARMNET9d1b321642,struct iphdr*
  19. DATARMNET86f1f2cdc9);extern void(*rmnet_perf_tether_egress_hook)(struct sk_buff*
  20. DATARMNET543491eb0f);extern void(*rmnet_perf_tether_cmd_hook)(u8
  21. DATARMNET07b1a05079,u64 DATARMNETcc6099cb14);struct DATARMNETf9eee4068d{u8
  22. DATARMNETd0ef85194f;};static struct DATARMNETf9eee4068d*DATARMNET8a1e9920bf;
  23. unsigned int configure_knob1 __read_mostly=(0xd2d+202-0xdf7);module_param(
  24. configure_knob1,uint,(0xdb7+6665-0x261c));unsigned int knob1 __read_mostly=
  25. (0xd2d+202-0xdf7);module_param(knob1,uint,(0xdb7+6665-0x261c));unsigned int
  26. configure_knob2 __read_mostly=(0xd2d+202-0xdf7);module_param(configure_knob2,
  27. uint,(0xdb7+6665-0x261c));unsigned int knob2 __read_mostly=(0xd2d+202-0xdf7);
  28. module_param(knob2,uint,(0xdb7+6665-0x261c));static DEFINE_SPINLOCK(
  29. DATARMNETcf56327171);
  30. #define DATARMNETd063f2edce ((0xef7+1112-0x131d))
  31. #define DATARMNET4c845df513 \
  32. (const_ilog2(DATARMNETd063f2edce))
  33. static DEFINE_HASHTABLE(DATARMNET031f18e039,DATARMNET4c845df513);struct
  34. DATARMNETb477d446e7{struct list_head list;struct hlist_node hlist;u32 hash;
  35. __be32 DATARMNETdfd47b00ff[(0xd20+231-0xdfc)];u32 DATARMNET4b119c4ff3;};struct
  36. list_head DATARMNETc588a190d4=LIST_HEAD_INIT(DATARMNETc588a190d4);
  37. #define DATARMNETc99cb98651 ((0xd26+209-0xdf6))
  38. #define DATARMNETfc6d4bac8a ((0xd19+238-0xdfb))
  39. #define DATARMNETc152fdcc34 ((0xec7+1129-0x1315))
  40. #define DATARMNET7bd625a8c0 ((0xd26+209-0xdf6))
  41. struct DATARMNETb0eda9d28e{u8 DATARMNETba8c503d04;u8 DATARMNET4f46aa107b;u8
  42. DATARMNETc59f891d69;u8 DATARMNETecca9147fd;};static u32 DATARMNET233bccd449(
  43. struct sk_buff*DATARMNET543491eb0f,int*DATARMNET76bafbc6ce,int
  44. DATARMNET32b08042b9,int DATARMNET3a925295d9){__be32 DATARMNETdfd47b00ff[
  45. (0xd20+231-0xdfc)];u32 DATARMNET5ebf661879;if(DATARMNET543491eb0f->protocol==
  46. htons(ETH_P_IP)){if(!tcp_hdr(DATARMNET543491eb0f)->syn)goto DATARMNET1d7e728ddf;
  47. if(DATARMNET32b08042b9){if(!tcp_hdr(DATARMNET543491eb0f)->ack)goto
  48. DATARMNET1d7e728ddf;}else{if(tcp_hdr(DATARMNET543491eb0f)->ack)goto
  49. DATARMNET1d7e728ddf;}DATARMNETdfd47b00ff[(0xd2d+202-0xdf7)]=DATARMNET3a925295d9?
  50. ip_hdr(DATARMNET543491eb0f)->daddr:ip_hdr(DATARMNET543491eb0f)->saddr;
  51. DATARMNETdfd47b00ff[(0xd26+209-0xdf6)]=DATARMNET3a925295d9?ip_hdr(
  52. DATARMNET543491eb0f)->saddr:ip_hdr(DATARMNET543491eb0f)->daddr;
  53. DATARMNETdfd47b00ff[(0xd1f+216-0xdf5)]=ip_hdr(DATARMNET543491eb0f)->protocol;
  54. DATARMNETdfd47b00ff[(0xd18+223-0xdf4)]=DATARMNET3a925295d9?tcp_hdr(
  55. DATARMNET543491eb0f)->dest:tcp_hdr(DATARMNET543491eb0f)->source;
  56. DATARMNETdfd47b00ff[(0xd11+230-0xdf3)]=DATARMNET3a925295d9?tcp_hdr(
  57. DATARMNET543491eb0f)->source:tcp_hdr(DATARMNET543491eb0f)->dest;
  58. DATARMNET5ebf661879=(0xd0a+237-0xdf2);}else if(DATARMNET543491eb0f->protocol==
  59. htons(ETH_P_IPV6)){if(!tcp_hdr(DATARMNET543491eb0f)->syn)goto
  60. DATARMNET1d7e728ddf;if(DATARMNET32b08042b9){if(!tcp_hdr(DATARMNET543491eb0f)->
  61. ack)goto DATARMNET1d7e728ddf;}else{if(tcp_hdr(DATARMNET543491eb0f)->ack)goto
  62. DATARMNET1d7e728ddf;}memcpy(&DATARMNETdfd47b00ff[(0xd2d+202-0xdf7)],
  63. DATARMNET3a925295d9?ipv6_hdr(DATARMNET543491eb0f)->daddr.s6_addr:ipv6_hdr(
  64. DATARMNET543491eb0f)->saddr.s6_addr,sizeof(struct in6_addr));memcpy(&
  65. DATARMNETdfd47b00ff[(0xd0a+237-0xdf2)],DATARMNET3a925295d9?ipv6_hdr(
  66. DATARMNET543491eb0f)->saddr.s6_addr:ipv6_hdr(DATARMNET543491eb0f)->daddr.s6_addr
  67. ,sizeof(struct in6_addr));DATARMNETdfd47b00ff[(0xd35+210-0xdff)]=ipv6_hdr(
  68. DATARMNET543491eb0f)->nexthdr;DATARMNETdfd47b00ff[9]=tcp_hdr(DATARMNET543491eb0f
  69. )->dest;DATARMNETdfd47b00ff[(0xd27+224-0xdfd)]=tcp_hdr(DATARMNET543491eb0f)->
  70. source;DATARMNET5ebf661879=(0xd20+231-0xdfc);}else{goto DATARMNET1d7e728ddf;}*
  71. DATARMNET76bafbc6ce=(0xd26+209-0xdf6);return jhash2(DATARMNETdfd47b00ff,
  72. DATARMNET5ebf661879,(0xd2d+202-0xdf7));DATARMNET1d7e728ddf:*DATARMNET76bafbc6ce=
  73. (0xd2d+202-0xdf7);return(0xd2d+202-0xdf7);}static void DATARMNET9d42c8a184(
  74. struct tcphdr*DATARMNET2e7cc88971){if(DATARMNET2e7cc88971->syn&&
  75. DATARMNET2e7cc88971->ack){if(configure_knob1){if(knob1>65535)knob1=65535;
  76. DATARMNET2e7cc88971->window=cpu_to_be16(knob1);}if(configure_knob2){unsigned
  77. char*DATARMNET7b34b7b5be;u32 DATARMNET539d2ad3f2;if(knob2>TCP_MAX_WSCALE)knob2=
  78. TCP_MAX_WSCALE;DATARMNET539d2ad3f2=DATARMNET2e7cc88971->doff*(0xd11+230-0xdf3)-
  79. sizeof(struct tcphdr);DATARMNET7b34b7b5be=(unsigned char*)(DATARMNET2e7cc88971+
  80. (0xd26+209-0xdf6));while(DATARMNET539d2ad3f2>(0xd2d+202-0xdf7)){int
  81. DATARMNET969cfb9094=*DATARMNET7b34b7b5be++;int DATARMNET68a21637e9;switch(
  82. DATARMNET969cfb9094){case TCPOPT_EOL:return;case TCPOPT_NOP:DATARMNET539d2ad3f2
  83. --;continue;default:if(DATARMNET539d2ad3f2<(0xd1f+216-0xdf5))return;
  84. DATARMNET68a21637e9=*DATARMNET7b34b7b5be++;if(DATARMNET68a21637e9<
  85. (0xd1f+216-0xdf5))return;if(DATARMNET68a21637e9>DATARMNET539d2ad3f2)return;if(
  86. DATARMNET969cfb9094==TCPOPT_WINDOW)*DATARMNET7b34b7b5be=knob2;
  87. DATARMNET7b34b7b5be+=DATARMNET68a21637e9-(0xd1f+216-0xdf5);DATARMNET539d2ad3f2-=
  88. DATARMNET68a21637e9;}}}}}static int DATARMNET94d0b7e790(struct
  89. DATARMNETb477d446e7*DATARMNET63b1a086d5,struct sk_buff*DATARMNET543491eb0f){if(
  90. DATARMNET543491eb0f->protocol==htons(ETH_P_IP)){if((DATARMNET63b1a086d5->
  91. DATARMNETdfd47b00ff[(0xd2d+202-0xdf7)]==ip_hdr(DATARMNET543491eb0f)->saddr)&&(
  92. DATARMNET63b1a086d5->DATARMNETdfd47b00ff[(0xd26+209-0xdf6)]==ip_hdr(
  93. DATARMNET543491eb0f)->daddr)&&(DATARMNET63b1a086d5->DATARMNETdfd47b00ff[
  94. (0xd1f+216-0xdf5)]==ip_hdr(DATARMNET543491eb0f)->protocol)&&(DATARMNET63b1a086d5
  95. ->DATARMNETdfd47b00ff[(0xd18+223-0xdf4)]==tcp_hdr(DATARMNET543491eb0f)->source)
  96. &&(DATARMNET63b1a086d5->DATARMNETdfd47b00ff[(0xd11+230-0xdf3)]==tcp_hdr(
  97. DATARMNET543491eb0f)->dest)&&(DATARMNET63b1a086d5->DATARMNET4b119c4ff3==
  98. (0xd0a+237-0xdf2)))return(0xd2d+202-0xdf7);}else if(DATARMNET543491eb0f->
  99. protocol==htons(ETH_P_IPV6)){if((!memcmp(&DATARMNET63b1a086d5->
  100. DATARMNETdfd47b00ff[(0xd2d+202-0xdf7)],ipv6_hdr(DATARMNET543491eb0f)->saddr.
  101. s6_addr,sizeof(struct in6_addr)))&&(!memcmp(&DATARMNET63b1a086d5->
  102. DATARMNETdfd47b00ff[(0xd0a+237-0xdf2)],ipv6_hdr(DATARMNET543491eb0f)->daddr.
  103. s6_addr,sizeof(struct in6_addr)))&&(DATARMNET63b1a086d5->DATARMNETdfd47b00ff[
  104. (0xd35+210-0xdff)]==ipv6_hdr(DATARMNET543491eb0f)->nexthdr)&&(
  105. DATARMNET63b1a086d5->DATARMNETdfd47b00ff[9]==tcp_hdr(DATARMNET543491eb0f)->
  106. source)&&(DATARMNET63b1a086d5->DATARMNETdfd47b00ff[(0xd27+224-0xdfd)]==tcp_hdr(
  107. DATARMNET543491eb0f)->dest)&&(DATARMNET63b1a086d5->DATARMNET4b119c4ff3==
  108. (0xd20+231-0xdfc)))return(0xd2d+202-0xdf7);}return(0xd26+209-0xdf6);}void
  109. DATARMNETe70d5ec61a(struct tcphdr*DATARMNET2e7cc88971,struct sk_buff*
  110. DATARMNET543491eb0f){int DATARMNET76bafbc6ce=(0xd2d+202-0xdf7);u32 hash;unsigned
  111. long DATARMNETfb0677cc3c;struct DATARMNETb477d446e7*DATARMNET63b1a086d5,*
  112. DATARMNET0386f6f82a=NULL;if(!configure_knob1&&!configure_knob2)return;hash=
  113. DATARMNET233bccd449(DATARMNET543491eb0f,&DATARMNET76bafbc6ce,(0xd26+209-0xdf6),
  114. (0xd2d+202-0xdf7));if(!DATARMNET76bafbc6ce)return;spin_lock_irqsave(&
  115. DATARMNETcf56327171,DATARMNETfb0677cc3c);hash_for_each_possible(
  116. DATARMNET031f18e039,DATARMNET63b1a086d5,hlist,hash){if(!DATARMNET94d0b7e790(
  117. DATARMNET63b1a086d5,DATARMNET543491eb0f)){DATARMNET0386f6f82a=
  118. DATARMNET63b1a086d5;break;}DATARMNET0386f6f82a=NULL;}if(!DATARMNET0386f6f82a){
  119. spin_unlock_irqrestore(&DATARMNETcf56327171,DATARMNETfb0677cc3c);return;}if(
  120. DATARMNET63b1a086d5){hash_del(&DATARMNET63b1a086d5->hlist);list_add_tail(&
  121. DATARMNET63b1a086d5->list,&DATARMNETc588a190d4);}spin_unlock_irqrestore(&
  122. DATARMNETcf56327171,DATARMNETfb0677cc3c);DATARMNET9d42c8a184(DATARMNET2e7cc88971
  123. );}static void DATARMNET9eb31df630(struct DATARMNETb477d446e7*
  124. DATARMNET63b1a086d5,struct sk_buff*DATARMNET543491eb0f){if(DATARMNET543491eb0f->
  125. protocol==htons(ETH_P_IP)){DATARMNET63b1a086d5->DATARMNETdfd47b00ff[
  126. (0xd2d+202-0xdf7)]=ip_hdr(DATARMNET543491eb0f)->daddr;DATARMNET63b1a086d5->
  127. DATARMNETdfd47b00ff[(0xd26+209-0xdf6)]=ip_hdr(DATARMNET543491eb0f)->saddr;
  128. DATARMNET63b1a086d5->DATARMNETdfd47b00ff[(0xd1f+216-0xdf5)]=ip_hdr(
  129. DATARMNET543491eb0f)->protocol;DATARMNET63b1a086d5->DATARMNETdfd47b00ff[
  130. (0xd18+223-0xdf4)]=tcp_hdr(DATARMNET543491eb0f)->dest;DATARMNET63b1a086d5->
  131. DATARMNETdfd47b00ff[(0xd11+230-0xdf3)]=tcp_hdr(DATARMNET543491eb0f)->source;
  132. DATARMNET63b1a086d5->DATARMNET4b119c4ff3=(0xd0a+237-0xdf2);}else if(
  133. DATARMNET543491eb0f->protocol==htons(ETH_P_IPV6)){memcpy(&DATARMNET63b1a086d5->
  134. DATARMNETdfd47b00ff[(0xd2d+202-0xdf7)],ipv6_hdr(DATARMNET543491eb0f)->daddr.
  135. s6_addr,sizeof(struct in6_addr));memcpy(&DATARMNET63b1a086d5->
  136. DATARMNETdfd47b00ff[(0xd0a+237-0xdf2)],ipv6_hdr(DATARMNET543491eb0f)->saddr.
  137. s6_addr,sizeof(struct in6_addr));DATARMNET63b1a086d5->DATARMNETdfd47b00ff[
  138. (0xd35+210-0xdff)]=ipv6_hdr(DATARMNET543491eb0f)->nexthdr;DATARMNET63b1a086d5->
  139. DATARMNETdfd47b00ff[9]=tcp_hdr(DATARMNET543491eb0f)->dest;DATARMNET63b1a086d5->
  140. DATARMNETdfd47b00ff[(0xd27+224-0xdfd)]=tcp_hdr(DATARMNET543491eb0f)->source;
  141. DATARMNET63b1a086d5->DATARMNET4b119c4ff3=(0xd20+231-0xdfc);}}void
  142. DATARMNET6ab362e985(struct sk_buff*DATARMNET543491eb0f){int DATARMNET76bafbc6ce=
  143. (0xd2d+202-0xdf7);u32 hash;unsigned long DATARMNETfb0677cc3c;struct
  144. DATARMNETb477d446e7*DATARMNET63b1a086d5;struct hlist_node*DATARMNET0386f6f82a;
  145. int DATARMNETae0201901a;struct net_device*dev;if(!configure_knob1&&!
  146. configure_knob2)return;if(!DATARMNET543491eb0f->skb_iif)return;dev=
  147. __dev_get_by_index(&init_net,DATARMNET543491eb0f->skb_iif);if(!dev)return;hash=
  148. DATARMNET233bccd449(DATARMNET543491eb0f,&DATARMNET76bafbc6ce,(0xd2d+202-0xdf7),
  149. (0xd26+209-0xdf6));if(!DATARMNET76bafbc6ce)return;spin_lock_irqsave(&
  150. DATARMNETcf56327171,DATARMNETfb0677cc3c);DATARMNET63b1a086d5=
  151. list_first_entry_or_null(&DATARMNETc588a190d4,struct DATARMNETb477d446e7,list);
  152. if(DATARMNET63b1a086d5){list_del(&DATARMNET63b1a086d5->list);DATARMNET63b1a086d5
  153. ->hash=hash;DATARMNET9eb31df630(DATARMNET63b1a086d5,DATARMNET543491eb0f);
  154. hash_add(DATARMNET031f18e039,&DATARMNET63b1a086d5->hlist,DATARMNET63b1a086d5->
  155. hash);}else{hash_for_each_safe(DATARMNET031f18e039,DATARMNETae0201901a,
  156. DATARMNET0386f6f82a,DATARMNET63b1a086d5,hlist){hash_del(&DATARMNET63b1a086d5->
  157. hlist);DATARMNET63b1a086d5->hash=hash;DATARMNET9eb31df630(DATARMNET63b1a086d5,
  158. DATARMNET543491eb0f);hash_add(DATARMNET031f18e039,&DATARMNET63b1a086d5->hlist,
  159. DATARMNET63b1a086d5->hash);break;}}spin_unlock_irqrestore(&DATARMNETcf56327171,
  160. DATARMNETfb0677cc3c);}void DATARMNET136e008d70(u8 DATARMNET07b1a05079,u64
  161. DATARMNETcc6099cb14){struct net_device*dev=dev_get_by_name(&init_net,
  162. "rmnet_ipa0");struct sk_buff*DATARMNET543491eb0f;if(!dev)return;if(
  163. DATARMNET07b1a05079==DATARMNETc99cb98651){struct
  164. rmnet_map_control_command_header*DATARMNETb87c07b92a;struct DATARMNETb0eda9d28e*
  165. DATARMNETcd32395e82;struct rmnet_map_header*DATARMNETf937c77d8f;
  166. DATARMNET543491eb0f=alloc_skb((0xeb7+1158-0x132d),GFP_ATOMIC);if(!
  167. DATARMNET543491eb0f)goto DATARMNETaabe3a05f8;skb_put(DATARMNET543491eb0f,
  168. (0xeb7+1158-0x132d));memset(DATARMNET543491eb0f->data,(0xd2d+202-0xdf7),
  169. (0xeb7+1158-0x132d));DATARMNETf937c77d8f=(struct rmnet_map_header*)
  170. DATARMNET543491eb0f->data;DATARMNETf937c77d8f->cd_bit=(0xd26+209-0xdf6);
  171. DATARMNETf937c77d8f->pkt_len=htons(DATARMNETfc6d4bac8a);DATARMNETb87c07b92a=(
  172. struct rmnet_map_control_command_header*)(DATARMNET543491eb0f->data+sizeof(*
  173. DATARMNETf937c77d8f));DATARMNETb87c07b92a->command_name=DATARMNETc152fdcc34;
  174. DATARMNETcd32395e82=(struct DATARMNETb0eda9d28e*)(DATARMNET543491eb0f->data+
  175. sizeof(*DATARMNETf937c77d8f)+sizeof(*DATARMNETb87c07b92a));DATARMNETcd32395e82->
  176. DATARMNETba8c503d04=DATARMNET7bd625a8c0;DATARMNETcd32395e82->DATARMNETc59f891d69
  177. =!DATARMNETcc6099cb14;DATARMNET543491eb0f->dev=dev;DATARMNET543491eb0f->protocol
  178. =htons(ETH_P_MAP);dev_queue_xmit(DATARMNET543491eb0f);}DATARMNETaabe3a05f8:
  179. dev_put(dev);}void DATARMNET5fe3ffe2ab(void){rcu_assign_pointer(
  180. rmnet_perf_tether_ingress_hook,DATARMNETe70d5ec61a);rcu_assign_pointer(
  181. rmnet_perf_tether_egress_hook,DATARMNET6ab362e985);rcu_assign_pointer(
  182. rmnet_perf_tether_cmd_hook,DATARMNET136e008d70);}void DATARMNET229327cbd2(void){
  183. rcu_assign_pointer(rmnet_perf_tether_ingress_hook,NULL);rcu_assign_pointer(
  184. rmnet_perf_tether_egress_hook,NULL);rcu_assign_pointer(
  185. rmnet_perf_tether_cmd_hook,NULL);}static int DATARMNETaa549ce89a(void){int
  186. DATARMNETefc9df3df2;DATARMNET8a1e9920bf=kzalloc(sizeof(*DATARMNET8a1e9920bf),
  187. GFP_KERNEL);if(!DATARMNET8a1e9920bf){pr_err(
  188. "\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"
  189. ,__func__);return-(0xd26+209-0xdf6);}DATARMNET8a1e9920bf->DATARMNETd0ef85194f++;
  190. for(DATARMNETefc9df3df2=(0xd2d+202-0xdf7);DATARMNETefc9df3df2<
  191. DATARMNETd063f2edce;DATARMNETefc9df3df2++){struct DATARMNETb477d446e7*
  192. DATARMNET63b1a086d5;DATARMNET63b1a086d5=kzalloc(sizeof(*DATARMNET63b1a086d5),
  193. GFP_ATOMIC);if(!DATARMNET63b1a086d5)continue;INIT_LIST_HEAD(&DATARMNET63b1a086d5
  194. ->list);INIT_HLIST_NODE(&DATARMNET63b1a086d5->hlist);list_add_tail(&
  195. DATARMNET63b1a086d5->list,&DATARMNETc588a190d4);}DATARMNET5fe3ffe2ab();return
  196. (0xd2d+202-0xdf7);}static void DATARMNET2b8220b2f3(void){struct
  197. DATARMNETb477d446e7*DATARMNET63b1a086d5;struct hlist_node*DATARMNET0386f6f82a;
  198. int DATARMNETae0201901a;hash_for_each_safe(DATARMNET031f18e039,
  199. DATARMNETae0201901a,DATARMNET0386f6f82a,DATARMNET63b1a086d5,hlist){hash_del(&
  200. DATARMNET63b1a086d5->hlist);kfree(DATARMNET63b1a086d5);}}static void
  201. DATARMNET66219231cc(void){struct DATARMNETb477d446e7*DATARMNET63b1a086d5,*
  202. DATARMNET2133db01db;list_for_each_entry_safe(DATARMNET63b1a086d5,
  203. DATARMNET2133db01db,&DATARMNETc588a190d4,list){list_del(&DATARMNET63b1a086d5->
  204. list);kfree(DATARMNET63b1a086d5);}}static void DATARMNET3ece352201(void){
  205. DATARMNET229327cbd2();DATARMNET66219231cc();DATARMNET2b8220b2f3();kfree(
  206. DATARMNET8a1e9920bf);DATARMNET8a1e9920bf=NULL;}static int DATARMNET6e31e62d2e(
  207. struct notifier_block*DATARMNET272c159b3c,unsigned long DATARMNET4abd997295,void
  208. *DATARMNET3f254bae11){struct net_device*DATARMNET00dcb79bc4=
  209. netdev_notifier_info_to_dev(DATARMNET3f254bae11);int DATARMNETb14e52a504;(void)
  210. DATARMNET272c159b3c;if(!DATARMNET00dcb79bc4||strncmp(DATARMNET00dcb79bc4->name,
  211. "\x72\x6d\x6e\x65\x74\x5f\x64\x61\x74\x61",(0xd27+224-0xdfd)))goto
  212. DATARMNETaabe3a05f8;switch(DATARMNET4abd997295){case NETDEV_REGISTER:if(
  213. DATARMNET8a1e9920bf){DATARMNET8a1e9920bf->DATARMNETd0ef85194f++;goto
  214. DATARMNETaabe3a05f8;}pr_info(
  215. "\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"
  216. ,__func__,DATARMNET00dcb79bc4->name);DATARMNETb14e52a504=DATARMNETaa549ce89a();
  217. if(DATARMNETb14e52a504){pr_err(
  218. "\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"
  219. ,__func__);goto DATARMNETaabe3a05f8;}break;case NETDEV_UNREGISTER:if(!
  220. DATARMNET8a1e9920bf)goto DATARMNETaabe3a05f8;if(--DATARMNET8a1e9920bf->
  221. DATARMNETd0ef85194f)goto DATARMNETaabe3a05f8;pr_info(
  222. "\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"
  223. ,__func__,DATARMNET00dcb79bc4->name);DATARMNET3ece352201();break;}
  224. DATARMNETaabe3a05f8:return NOTIFY_DONE;}static struct notifier_block
  225. DATARMNETd9d8382fca={.notifier_call=DATARMNET6e31e62d2e,.priority=
  226. (0xd18+223-0xdf4),};static int __init DATARMNET5e4be08a32(void){pr_info(
  227. "\x25\x73\x28\x29\x3a\x20\x4c\x6f\x61\x64\x69\x6e\x67" "\n",__func__);return
  228. register_netdevice_notifier(&DATARMNETd9d8382fca);}static void __exit
  229. DATARMNET50e3d76d94(void){pr_info(
  230. "\x25\x73\x28\x29\x3a\x20\x65\x78\x69\x74\x69\x6e\x67" "\n",__func__);
  231. unregister_netdevice_notifier(&DATARMNETd9d8382fca);}module_init(
  232. DATARMNET5e4be08a32);module_exit(DATARMNET50e3d76d94);