rmnet_aps_main.c 36 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520
  1. /* Copyright (c) 2021-2022 Qualcomm Innovation Center, Inc. All rights reserved.
  2. *
  3. * This program is free software; you can redistribute it and/or modify
  4. * it under the terms of the GNU General Public License version 2 and
  5. * only version 2 as published by the Free Software Foundation.
  6. *
  7. * This program is distributed in the hope that it will be useful,
  8. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  9. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  10. * GNU General Public License for more details.
  11. */
  12. #include <linux/timer.h>
  13. #include <linux/list_sort.h>
  14. #include <linux/workqueue.h>
  15. #include <linux/netdevice.h>
  16. #include <net/ip.h>
  17. #include <net/ipv6.h>
  18. #include "rmnet_config.h"
  19. #include "rmnet_module.h"
  20. #include "rmnet_aps.h"
  21. #include "rmnet_aps_genl.h"
  22. static char*verinfo[]={"\x65\x32\x31\x38\x66\x34\x35\x31",
  23. "\x33\x32\x61\x36\x65\x62\x61\x39","\x36\x39\x30\x35\x35\x36\x38\x65",
  24. "\x37\x34\x31\x35\x39\x32\x31\x63","\x39\x66\x36\x36\x38\x31\x62\x34"};
  25. module_param_array(verinfo,charp,NULL,(0xcb7+5769-0x221c));MODULE_PARM_DESC(
  26. verinfo,
  27. "\x56\x65\x72\x73\x69\x6f\x6e\x20\x6f\x66\x20\x74\x68\x65\x20\x64\x72\x69\x76\x65\x72"
  28. );
  29. #define DATARMNET63ff5c35c2 (0xd26+209-0xdf6)
  30. #define DATARMNETceae994093 (0xd1f+216-0xdf5)
  31. #define DATARMNET3412b803e1 (0xd18+223-0xdf4)
  32. #define DATARMNET1efd633004 (0xd11+230-0xdf3)
  33. #define DATARMNETdc217f1b29 (0xd0a+237-0xdf2)
  34. #define DATARMNETd0bce1573e (0xd03+244-0xdf1)
  35. #define DATARMNETee209ff1f9 (0xd26+209-0xdf6)
  36. #define DATARMNET24e4186a83 (0xd1f+216-0xdf5)
  37. #define DATARMNET94016043b8 (0xd18+223-0xdf4)
  38. #define DATARMNET50dac65bef (0xd2d+202-0xdf7)
  39. #define DATARMNETe1763a8705 (0xbf7+4364-0x1c04)
  40. #define DATARMNET3bc5e7094a (0xd0a+237-0xdf2)
  41. #define DATARMNET7b5bbaa047 ((0xd18+223-0xdf4))
  42. #define DATARMNETfd026b105a (DATARMNET7b5bbaa047 * HZ)
  43. #define DATARMNET65d0d735fa ((0xdf7+6169-0x241c) * (0xdf7+2629-0x143c) * \
  44. (0xdf7+2629-0x143c) / (0xd35+210-0xdff) * DATARMNET7b5bbaa047)
  45. #define DATARMNETb8ab933cae ((0xc07+4861-0x1e3c) * (0xdf7+2629-0x143c) * \
  46. (0xdf7+2629-0x143c) / (0xd35+210-0xdff) * DATARMNET7b5bbaa047)
  47. static const char*DATARMNETe5ef0e617c="\x31\x2e\x32";static u16
  48. DATARMNET2fe4661b82;static struct genl_info DATARMNET7d98961cbe;static bool
  49. DATARMNET54b95e4416;static u32 DATARMNETfef55eaf9a;static u8 DATARMNET9628311a6b
  50. [DATARMNET3bc5e7094a]={(0xd2d+202-0xdf7),(0xd03+244-0xdf1),(0xcfc+267-0xe00),
  51. (0xd35+210-0xdff),9};DEFINE_MUTEX(DATARMNETd7b5a80f84);static DEFINE_SPINLOCK(
  52. DATARMNET33bd4139f4);static LIST_HEAD(DATARMNET7520901fb5);struct
  53. DATARMNETb356c61ad6{struct rcu_head DATARMNET28bfe9e6ad;struct
  54. DATARMNETd51e57e3f4 DATARMNET54338da2ff;};struct DATARMNET6fd48c33f6{struct
  55. rcu_head DATARMNET28bfe9e6ad;struct list_head DATARMNET14c01d3877;struct
  56. list_head DATARMNETed4d7b4a3c;struct DATARMNET5d4139d9d7 DATARMNET54338da2ff;
  57. struct DATARMNETb356c61ad6 __rcu*DATARMNET8f197b20f6;u32 DATARMNET556cdfb5eb;u32
  58. DATARMNETee01ad514b;unsigned long expires;u64 DATARMNETa27e524d8a;bool
  59. DATARMNET626c626b74;bool DATARMNET40bb1d945b;};struct DATARMNETc4743b996e{struct
  60. rcu_head DATARMNET28bfe9e6ad;struct list_head DATARMNET46c1c4375f;};struct
  61. DATARMNET758277d429{char DATARMNET91119c34ed;char DATARMNETecca9147fd[
  62. (0xcfc+267-0xe00)];struct DATARMNETc4743b996e __rcu*DATARMNETac8d594fb6;};
  63. #define DATARMNET4e81d27dfb(DATARMNET413e8dcf7b) (!strncmp(DATARMNET413e8dcf7b->\
  64. name, "\x72\x6d\x6e\x65\x74\x5f\x64\x61\x74\x61", (0xd27+224-0xdfd)))
  65. #define DATARMNETe1c7654a2e(DATARMNET413e8dcf7b)\
  66. \
  67. ((struct DATARMNET758277d429 *)(((struct rmnet_priv *)netdev_priv(\
  68. DATARMNET413e8dcf7b)) \
  69. ->aps_cb))
  70. extern void(*rmnet_aps_pre_queue)(struct net_device*DATARMNET413e8dcf7b,struct
  71. sk_buff*DATARMNET543491eb0f);extern int(*rmnet_aps_post_queue)(struct net_device
  72. *DATARMNET413e8dcf7b,struct sk_buff*DATARMNET543491eb0f);extern struct
  73. genl_family DATARMNETcdba30eca9;static void DATARMNET30dd480cad(struct
  74. net_device*DATARMNET413e8dcf7b,struct sk_buff*DATARMNET543491eb0f);static void
  75. DATARMNET446f780f19(u32 DATARMNETbb588401ec,u8 DATARMNETf8bbe3b0fb);static void
  76. DATARMNETf844db79d9(struct timer_list*DATARMNET6e4292679f);static DEFINE_TIMER(
  77. DATARMNETd21629e047,DATARMNETf844db79d9);static void DATARMNETd1a02b8188(struct
  78. work_struct*DATARMNET33110a3ff5);static DECLARE_WORK(DATARMNET8e3aef0760,
  79. DATARMNETd1a02b8188);static void DATARMNET5979020f87(struct work_struct*
  80. DATARMNET33110a3ff5);static DECLARE_DELAYED_WORK(DATARMNET3481998252,
  81. DATARMNET5979020f87);static int DATARMNET998f6cbce7(struct notifier_block*
  82. DATARMNET272c159b3c,unsigned long DATARMNET9a4761f31c,void*data);static struct
  83. notifier_block DATARMNETc580548769 __read_mostly={.notifier_call=
  84. DATARMNET998f6cbce7,.priority=(0xd1f+216-0xdf5),};struct DATARMNETf21ed5deb4{
  85. __u8 DATARMNET06d2413ad2;__be32*saddr;__be32*daddr;__u16 sport;__u16 dport;__u32
  86. DATARMNETe9aad463ce;__u8 tos;};static int DATARMNET481989429b(struct sk_buff*
  87. DATARMNET543491eb0f,struct DATARMNETf21ed5deb4*DATARMNET203a7a0136){struct
  88. DATARMNET6d4c22c781{__be16 sport;__be16 dport;};int DATARMNETb65c469a15;if(
  89. DATARMNET543491eb0f->protocol==htons(ETH_P_IP)){struct iphdr*DATARMNET86f1f2cdc9
  90. ,DATARMNET8dc568fa4c;DATARMNET86f1f2cdc9=__skb_header_pointer(
  91. DATARMNET543491eb0f,(0xd2d+202-0xdf7),sizeof(*DATARMNET86f1f2cdc9),
  92. DATARMNET543491eb0f->data,skb_headlen(DATARMNET543491eb0f),&DATARMNET8dc568fa4c)
  93. ;if(unlikely(!DATARMNET86f1f2cdc9||DATARMNET86f1f2cdc9->ihl<(0xd0a+237-0xdf2)))
  94. return-EINVAL;if(unlikely(ip_is_fragment(DATARMNET86f1f2cdc9)))return-EFAULT;
  95. DATARMNETb65c469a15=DATARMNET86f1f2cdc9->ihl<<(0xd1f+216-0xdf5);
  96. DATARMNET203a7a0136->DATARMNET06d2413ad2=DATARMNET86f1f2cdc9->protocol;
  97. DATARMNET203a7a0136->saddr=&DATARMNET86f1f2cdc9->saddr;DATARMNET203a7a0136->
  98. daddr=&DATARMNET86f1f2cdc9->daddr;DATARMNET203a7a0136->tos=DATARMNET86f1f2cdc9->
  99. tos;}else if(DATARMNET543491eb0f->protocol==htons(ETH_P_IPV6)){struct ipv6hdr*
  100. DATARMNETbf55123e5b,DATARMNET9df40d3f99;DATARMNETbf55123e5b=__skb_header_pointer
  101. (DATARMNET543491eb0f,(0xd2d+202-0xdf7),sizeof(*DATARMNETbf55123e5b),
  102. DATARMNET543491eb0f->data,skb_headlen(DATARMNET543491eb0f),&DATARMNET9df40d3f99)
  103. ;if(unlikely(!DATARMNETbf55123e5b))return-EINVAL;if(unlikely(DATARMNETbf55123e5b
  104. ->nexthdr==IPPROTO_FRAGMENT))return-EFAULT;DATARMNETb65c469a15=sizeof(*
  105. DATARMNETbf55123e5b);DATARMNET203a7a0136->DATARMNET06d2413ad2=
  106. DATARMNETbf55123e5b->nexthdr;DATARMNET203a7a0136->saddr=DATARMNETbf55123e5b->
  107. saddr.in6_u.u6_addr32;DATARMNET203a7a0136->daddr=DATARMNETbf55123e5b->daddr.
  108. in6_u.u6_addr32;DATARMNET203a7a0136->tos=ip6_tclass(ip6_flowinfo(
  109. DATARMNETbf55123e5b));DATARMNET203a7a0136->DATARMNETe9aad463ce=ntohl(
  110. ip6_flowlabel(DATARMNETbf55123e5b));}else{return-EINVAL;}if(DATARMNET203a7a0136
  111. ->DATARMNET06d2413ad2==IPPROTO_TCP||DATARMNET203a7a0136->DATARMNET06d2413ad2==
  112. IPPROTO_UDP){struct DATARMNET6d4c22c781*DATARMNET975b252236,DATARMNET7121c974d6;
  113. DATARMNET975b252236=__skb_header_pointer(DATARMNET543491eb0f,DATARMNETb65c469a15
  114. ,sizeof(*DATARMNET975b252236),DATARMNET543491eb0f->data,skb_headlen(
  115. DATARMNET543491eb0f),&DATARMNET7121c974d6);if(unlikely(!DATARMNET975b252236))
  116. return-EINVAL;DATARMNET203a7a0136->sport=ntohs(DATARMNET975b252236->sport);
  117. DATARMNET203a7a0136->dport=ntohs(DATARMNET975b252236->dport);}return
  118. (0xd2d+202-0xdf7);}static bool DATARMNETdf0ec0363b(struct DATARMNETd51e57e3f4*
  119. DATARMNET8f197b20f6,struct DATARMNETf21ed5deb4*DATARMNET203a7a0136){if(
  120. DATARMNET8f197b20f6->DATARMNET06d2413ad2){if(DATARMNET8f197b20f6->
  121. DATARMNET06d2413ad2==(0xc07+4362-0x1c14)){if(DATARMNET203a7a0136->
  122. DATARMNET06d2413ad2!=IPPROTO_TCP&&DATARMNET203a7a0136->DATARMNET06d2413ad2!=
  123. IPPROTO_UDP)return false;}else if(DATARMNET8f197b20f6->DATARMNET06d2413ad2!=
  124. DATARMNET203a7a0136->DATARMNET06d2413ad2){return false;}}if(DATARMNET203a7a0136
  125. ->DATARMNET06d2413ad2==IPPROTO_TCP||DATARMNET203a7a0136->DATARMNET06d2413ad2==
  126. IPPROTO_UDP){if((DATARMNET8f197b20f6->dport&&DATARMNET8f197b20f6->dport!=
  127. DATARMNET203a7a0136->dport)||(DATARMNET8f197b20f6->sport&&DATARMNET8f197b20f6->
  128. sport!=DATARMNET203a7a0136->sport))return false;}if(DATARMNET8f197b20f6->
  129. DATARMNET61b4abcc9b==AF_INET){if(((DATARMNET8f197b20f6->DATARMNET0711bbda6c&
  130. DATARMNET3cff03c531)&&DATARMNET8f197b20f6->daddr[(0xd2d+202-0xdf7)]!=*
  131. DATARMNET203a7a0136->daddr)||((DATARMNET8f197b20f6->DATARMNET0711bbda6c&
  132. DATARMNET53f589a196)&&DATARMNET8f197b20f6->saddr[(0xd2d+202-0xdf7)]!=*
  133. DATARMNET203a7a0136->saddr))return false;if(DATARMNET8f197b20f6->tos&&
  134. DATARMNET8f197b20f6->tos!=(DATARMNET203a7a0136->tos&DATARMNET8f197b20f6->
  135. DATARMNETa400ad4f72))return false;}else if(DATARMNET8f197b20f6->
  136. DATARMNET61b4abcc9b==AF_INET6){if(((DATARMNET8f197b20f6->DATARMNET0711bbda6c&
  137. DATARMNET3cff03c531)&&memcmp(DATARMNET8f197b20f6->daddr,DATARMNET203a7a0136->
  138. daddr,(0xeb7+1158-0x132d)))||((DATARMNET8f197b20f6->DATARMNET0711bbda6c&
  139. DATARMNET53f589a196)&&memcmp(DATARMNET8f197b20f6->saddr,DATARMNET203a7a0136->
  140. saddr,(0xeb7+1158-0x132d))))return false;if(DATARMNET8f197b20f6->tos&&
  141. DATARMNET8f197b20f6->tos!=(DATARMNET203a7a0136->tos&DATARMNET8f197b20f6->
  142. DATARMNETa400ad4f72))return false;if(DATARMNET8f197b20f6->DATARMNETe9aad463ce&&
  143. DATARMNET8f197b20f6->DATARMNETe9aad463ce!=DATARMNET203a7a0136->
  144. DATARMNETe9aad463ce)return false;}else{return false;}return true;}static struct
  145. DATARMNET6fd48c33f6*DATARMNETfb13c018fc(struct list_head*DATARMNET817a8d238c,
  146. struct sk_buff*DATARMNET543491eb0f){struct DATARMNETf21ed5deb4
  147. DATARMNET203a7a0136={(0xd2d+202-0xdf7),};struct DATARMNET6fd48c33f6*
  148. DATARMNETaa568481cf;struct DATARMNETb356c61ad6*DATARMNET8f197b20f6;bool
  149. DATARMNETc9657a740d=false;list_for_each_entry_rcu(DATARMNETaa568481cf,
  150. DATARMNET817a8d238c,DATARMNET14c01d3877){DATARMNET8f197b20f6=rcu_dereference(
  151. DATARMNETaa568481cf->DATARMNET8f197b20f6);if(unlikely(!DATARMNET8f197b20f6))
  152. continue;if((DATARMNET8f197b20f6->DATARMNET54338da2ff.DATARMNET61b4abcc9b==
  153. AF_INET&&DATARMNET543491eb0f->protocol!=htons(ETH_P_IP))||(DATARMNET8f197b20f6->
  154. DATARMNET54338da2ff.DATARMNET61b4abcc9b==AF_INET6&&DATARMNET543491eb0f->protocol
  155. !=htons(ETH_P_IPV6)))continue;if(!DATARMNETc9657a740d){if(DATARMNET481989429b(
  156. DATARMNET543491eb0f,&DATARMNET203a7a0136))break;DATARMNETc9657a740d=true;}if(
  157. DATARMNETdf0ec0363b(&DATARMNET8f197b20f6->DATARMNET54338da2ff,&
  158. DATARMNET203a7a0136))return DATARMNETaa568481cf;}return NULL;}static struct
  159. DATARMNET6fd48c33f6*DATARMNET3ed11fdc8d(struct list_head*DATARMNET817a8d238c,u32
  160. DATARMNETbb588401ec){struct DATARMNET6fd48c33f6*DATARMNETaa568481cf;
  161. list_for_each_entry_rcu(DATARMNETaa568481cf,DATARMNET817a8d238c,
  162. DATARMNET14c01d3877){if(DATARMNETaa568481cf->DATARMNET54338da2ff.
  163. DATARMNETbb588401ec==DATARMNETbb588401ec)return DATARMNETaa568481cf;}return NULL
  164. ;}static void DATARMNET1e616c2160(struct list_head*DATARMNET817a8d238c,struct
  165. DATARMNET6fd48c33f6*DATARMNETaa568481cf){list_add_rcu(&DATARMNETaa568481cf->
  166. DATARMNET14c01d3877,DATARMNET817a8d238c);list_add(&DATARMNETaa568481cf->
  167. DATARMNETed4d7b4a3c,&DATARMNET7520901fb5);DATARMNETfef55eaf9a++;if(
  168. DATARMNETaa568481cf->expires){if(!timer_pending(&DATARMNETd21629e047)||
  169. time_before(DATARMNETaa568481cf->expires,DATARMNETd21629e047.expires))mod_timer(
  170. &DATARMNETd21629e047,DATARMNETaa568481cf->expires);}DATARMNET112d724eff(
  171. "aps: flow 0x%x added (%u)\n",DATARMNETaa568481cf->DATARMNET54338da2ff.
  172. DATARMNETbb588401ec,DATARMNETfef55eaf9a);}static void DATARMNET7fa3dd63cb(struct
  173. DATARMNET6fd48c33f6*DATARMNETaa568481cf){struct DATARMNETb356c61ad6*
  174. DATARMNET8f197b20f6;list_del_rcu(&DATARMNETaa568481cf->DATARMNET14c01d3877);
  175. list_del(&DATARMNETaa568481cf->DATARMNETed4d7b4a3c);if(likely(
  176. DATARMNETfef55eaf9a))DATARMNETfef55eaf9a--;if(!DATARMNETfef55eaf9a)del_timer(&
  177. DATARMNETd21629e047);DATARMNET112d724eff(
  178. "\x61\x70\x73\x3a\x20\x66\x6c\x6f\x77\x20\x30\x78\x25\x78\x20\x72\x65\x6d\x6f\x76\x69\x6e\x67\x20\x28\x25\x75\x29" "\n"
  179. ,DATARMNETaa568481cf->DATARMNET54338da2ff.DATARMNETbb588401ec,
  180. DATARMNETfef55eaf9a);DATARMNET8f197b20f6=rcu_dereference(DATARMNETaa568481cf->
  181. DATARMNET8f197b20f6);if(DATARMNET8f197b20f6){rcu_assign_pointer(
  182. DATARMNETaa568481cf->DATARMNET8f197b20f6,NULL);kfree_rcu(DATARMNETaa568481cf->
  183. DATARMNET8f197b20f6,DATARMNET28bfe9e6ad);}kfree_rcu(DATARMNETaa568481cf,
  184. DATARMNET28bfe9e6ad);}static void DATARMNET9ac8a34003(void){struct
  185. DATARMNET6fd48c33f6*DATARMNETaa568481cf,*DATARMNET0386f6f82a;
  186. list_for_each_entry_safe(DATARMNETaa568481cf,DATARMNET0386f6f82a,&
  187. DATARMNET7520901fb5,DATARMNETed4d7b4a3c){DATARMNET7fa3dd63cb(DATARMNETaa568481cf
  188. );}DATARMNET112d724eff(
  189. "\x61\x70\x73\x3a\x20\x61\x6c\x6c\x20\x66\x6c\x6f\x77\x73\x20\x72\x65\x6d\x6f\x76\x65\x64" "\n"
  190. );}static void DATARMNET250448eb06(int ifindex){struct DATARMNET6fd48c33f6*
  191. DATARMNETaa568481cf,*DATARMNET0386f6f82a;list_for_each_entry_safe(
  192. DATARMNETaa568481cf,DATARMNET0386f6f82a,&DATARMNET7520901fb5,DATARMNETed4d7b4a3c
  193. ){if(DATARMNETaa568481cf->DATARMNET54338da2ff.ifindex==ifindex){
  194. DATARMNET112d724eff(
  195. "\x61\x70\x73\x3a\x20\x66\x6c\x6f\x77\x20\x30\x78\x25\x78\x20\x64\x6f\x77\x6e" "\n"
  196. ,DATARMNETaa568481cf->DATARMNET54338da2ff.DATARMNETbb588401ec);
  197. DATARMNET446f780f19(DATARMNETaa568481cf->DATARMNET54338da2ff.DATARMNETbb588401ec
  198. ,DATARMNET24e4186a83);DATARMNET7fa3dd63cb(DATARMNETaa568481cf);}}}static void
  199. DATARMNETd1a02b8188(struct work_struct*DATARMNET33110a3ff5){struct
  200. DATARMNET6fd48c33f6*DATARMNETaa568481cf,*DATARMNET0386f6f82a;unsigned long
  201. DATARMNET02dfdbc38d=jiffies;unsigned long DATARMNET2cf3deab22;u32
  202. DATARMNETbb588401ec;DATARMNET2cf3deab22=DATARMNET02dfdbc38d;mutex_lock(&
  203. DATARMNETd7b5a80f84);if(!DATARMNET54b95e4416)goto DATARMNETbf4095f79e;
  204. spin_lock_bh(&DATARMNET33bd4139f4);list_for_each_entry_safe(DATARMNETaa568481cf,
  205. DATARMNET0386f6f82a,&DATARMNET7520901fb5,DATARMNETed4d7b4a3c){if(!
  206. DATARMNETaa568481cf->expires)continue;if(time_before_eq(DATARMNETaa568481cf->
  207. expires,DATARMNET02dfdbc38d)){DATARMNETbb588401ec=DATARMNETaa568481cf->
  208. DATARMNET54338da2ff.DATARMNETbb588401ec;DATARMNET112d724eff(
  209. "\x61\x70\x73\x3a\x20\x66\x6c\x6f\x77\x20\x30\x78\x25\x78\x20\x65\x78\x70\x69\x72\x65\x64" "\n"
  210. ,DATARMNETbb588401ec);DATARMNET7fa3dd63cb(DATARMNETaa568481cf);
  211. DATARMNET446f780f19(DATARMNETbb588401ec,DATARMNETee209ff1f9);}else if(
  212. DATARMNET2cf3deab22==DATARMNET02dfdbc38d||time_before(DATARMNETaa568481cf->
  213. expires,DATARMNET2cf3deab22)){DATARMNET2cf3deab22=DATARMNETaa568481cf->expires;}
  214. }if(DATARMNET2cf3deab22!=DATARMNET02dfdbc38d)mod_timer(&DATARMNETd21629e047,
  215. DATARMNET2cf3deab22);spin_unlock_bh(&DATARMNET33bd4139f4);DATARMNETbf4095f79e:
  216. mutex_unlock(&DATARMNETd7b5a80f84);}static void DATARMNETf844db79d9(struct
  217. timer_list*DATARMNET6e4292679f){schedule_work(&DATARMNET8e3aef0760);}static void
  218. DATARMNET3281082da4(struct DATARMNET6fd48c33f6*DATARMNETaa568481cf){u32
  219. DATARMNET556cdfb5eb;DATARMNET556cdfb5eb=RMNET_APS_MAJOR<<(0xeb7+1158-0x132d);if(
  220. DATARMNETaa568481cf->DATARMNET54338da2ff.DATARMNET6c2cba039d>=
  221. DATARMNET3bc5e7094a)DATARMNET556cdfb5eb|=DATARMNET9628311a6b[(0xd2d+202-0xdf7)];
  222. else DATARMNET556cdfb5eb|=DATARMNET9628311a6b[DATARMNETaa568481cf->
  223. DATARMNET54338da2ff.DATARMNET6c2cba039d];if(DATARMNETaa568481cf->
  224. DATARMNET626c626b74)DATARMNET556cdfb5eb|=RMNET_APS_LLC_MASK;if(
  225. DATARMNETaa568481cf->DATARMNET40bb1d945b)DATARMNET556cdfb5eb|=RMNET_APS_LLB_MASK
  226. ;DATARMNETaa568481cf->DATARMNET556cdfb5eb=DATARMNET556cdfb5eb;}static int
  227. DATARMNET772c0b87c5(void*DATARMNETe823dcf978,const struct list_head*
  228. DATARMNET9cf7d31274,const struct list_head*DATARMNET5444bd3b6f){struct
  229. DATARMNET6fd48c33f6*DATARMNET40e125212a;struct DATARMNET6fd48c33f6*
  230. DATARMNETdcaff77beb;DATARMNET40e125212a=list_entry(DATARMNET9cf7d31274,struct
  231. DATARMNET6fd48c33f6,DATARMNETed4d7b4a3c);DATARMNETdcaff77beb=list_entry(
  232. DATARMNET5444bd3b6f,struct DATARMNET6fd48c33f6,DATARMNETed4d7b4a3c);return
  233. DATARMNET40e125212a->DATARMNETa27e524d8a>DATARMNETdcaff77beb->
  234. DATARMNETa27e524d8a;}static void DATARMNET5979020f87(struct work_struct*
  235. DATARMNET33110a3ff5){struct DATARMNET6fd48c33f6*DATARMNETaa568481cf;u64
  236. DATARMNETf78537d374=(0xd2d+202-0xdf7);u64 DATARMNETd39b09fa66=(0xd2d+202-0xdf7);
  237. u64 DATARMNETedd419d6e2;bool DATARMNETd3eb49eab3=false;mutex_lock(&
  238. DATARMNETd7b5a80f84);if(!DATARMNET54b95e4416)goto DATARMNETbf4095f79e;
  239. spin_lock_bh(&DATARMNET33bd4139f4);list_sort(NULL,&DATARMNET7520901fb5,
  240. DATARMNET772c0b87c5);list_for_each_entry(DATARMNETaa568481cf,&
  241. DATARMNET7520901fb5,DATARMNETed4d7b4a3c){if(DATARMNETaa568481cf->
  242. DATARMNET54338da2ff.DATARMNET626c626b74){DATARMNETedd419d6e2=DATARMNETf78537d374
  243. +DATARMNETaa568481cf->DATARMNETa27e524d8a;if(DATARMNETedd419d6e2<
  244. DATARMNET65d0d735fa){DATARMNETaa568481cf->DATARMNET626c626b74=true;
  245. DATARMNETaa568481cf->DATARMNET556cdfb5eb|=RMNET_APS_LLC_MASK;DATARMNETf78537d374
  246. =DATARMNETedd419d6e2;}else{DATARMNETaa568481cf->DATARMNET626c626b74=false;
  247. DATARMNETaa568481cf->DATARMNET556cdfb5eb&=~RMNET_APS_LLC_MASK;}
  248. DATARMNET112d724eff(
  249. "\x61\x70\x73\x3a\x20\x66\x6c\x6f\x77\x20\x30\x78\x25\x78\x20\x74\x78\x5f\x62\x79\x74\x65\x73\x20\x25\x6c\x6c\x75\x20\x6c\x6c\x63\x20\x25\x64\x20\x6c\x6c\x63\x5f\x62\x79\x74\x65\x73\x20"
  250. "\x25\x6c\x6c\x75" "\n",DATARMNETaa568481cf->DATARMNET54338da2ff.
  251. DATARMNETbb588401ec,DATARMNETaa568481cf->DATARMNETa27e524d8a,DATARMNETaa568481cf
  252. ->DATARMNET626c626b74,DATARMNETf78537d374);}if(DATARMNETaa568481cf->
  253. DATARMNET54338da2ff.DATARMNET40bb1d945b){DATARMNETedd419d6e2=DATARMNETd39b09fa66
  254. +DATARMNETaa568481cf->DATARMNETa27e524d8a;if(DATARMNETedd419d6e2<
  255. DATARMNETb8ab933cae){DATARMNETaa568481cf->DATARMNET40bb1d945b=true;
  256. DATARMNETaa568481cf->DATARMNET556cdfb5eb|=RMNET_APS_LLB_MASK;DATARMNETd39b09fa66
  257. =DATARMNETedd419d6e2;}else{DATARMNETaa568481cf->DATARMNET40bb1d945b=false;
  258. DATARMNETaa568481cf->DATARMNET556cdfb5eb&=~RMNET_APS_LLB_MASK;}
  259. DATARMNET112d724eff(
  260. "\x61\x70\x73\x3a\x20\x66\x6c\x6f\x77\x20\x30\x78\x25\x78\x20\x74\x78\x5f\x62\x79\x74\x65\x73\x20\x25\x6c\x6c\x75\x20\x6c\x6c\x62\x20\x25\x64\x20\x6c\x6c\x62\x5f\x62\x79\x74\x65\x73\x20"
  261. "\x25\x6c\x6c\x75" "\n",DATARMNETaa568481cf->DATARMNET54338da2ff.
  262. DATARMNETbb588401ec,DATARMNETaa568481cf->DATARMNETa27e524d8a,DATARMNETaa568481cf
  263. ->DATARMNET40bb1d945b,DATARMNETd39b09fa66);}if(DATARMNETaa568481cf->
  264. DATARMNETa27e524d8a){DATARMNETd3eb49eab3=true;DATARMNETaa568481cf->
  265. DATARMNETa27e524d8a=(0xd2d+202-0xdf7);}}spin_unlock_bh(&DATARMNET33bd4139f4);
  266. DATARMNETbf4095f79e:mutex_unlock(&DATARMNETd7b5a80f84);if(DATARMNETd3eb49eab3)
  267. schedule_delayed_work(&DATARMNET3481998252,DATARMNETfd026b105a);}static int
  268. DATARMNET82d65f9ca6(struct list_head*DATARMNET817a8d238c,struct
  269. DATARMNET5d4139d9d7*DATARMNETddcafd8b91){struct DATARMNET6fd48c33f6*
  270. DATARMNETaa568481cf;DATARMNETaa568481cf=DATARMNET3ed11fdc8d(DATARMNET817a8d238c,
  271. DATARMNETddcafd8b91->DATARMNETbb588401ec);if(DATARMNETddcafd8b91->cmd==
  272. DATARMNET3412b803e1){if(DATARMNETaa568481cf)DATARMNET7fa3dd63cb(
  273. DATARMNETaa568481cf);return(0xd2d+202-0xdf7);}if(DATARMNETddcafd8b91->cmd==
  274. DATARMNETceae994093&&DATARMNETaa568481cf){DATARMNET7fa3dd63cb(
  275. DATARMNETaa568481cf);DATARMNETaa568481cf=NULL;}if(!DATARMNETaa568481cf){if(
  276. DATARMNETfef55eaf9a>=DATARMNETe1763a8705){DATARMNET112d724eff(
  277. "\x61\x70\x73\x3a\x20\x66\x6c\x6f\x77\x20\x63\x6f\x75\x6e\x74\x20\x25\x75\x20\x65\x78\x63\x65\x65\x64\x73\x20\x6d\x61\x78" "\n"
  278. ,DATARMNETfef55eaf9a);return-EINVAL;}DATARMNETaa568481cf=kzalloc(sizeof(*
  279. DATARMNETaa568481cf),GFP_KERNEL);if(!DATARMNETaa568481cf){DATARMNET112d724eff(
  280. "\x61\x70\x73\x3a\x20\x6e\x6f\x20\x6d\x65\x6d\x6f\x72\x79" "\n");return-ENOMEM;}
  281. memcpy(&DATARMNETaa568481cf->DATARMNET54338da2ff,DATARMNETddcafd8b91,sizeof(
  282. DATARMNETaa568481cf->DATARMNET54338da2ff));DATARMNETaa568481cf->
  283. DATARMNET626c626b74=DATARMNETaa568481cf->DATARMNET54338da2ff.DATARMNET626c626b74
  284. ;DATARMNETaa568481cf->DATARMNET40bb1d945b=DATARMNETaa568481cf->
  285. DATARMNET54338da2ff.DATARMNET40bb1d945b;DATARMNET3281082da4(DATARMNETaa568481cf)
  286. ;if(DATARMNETddcafd8b91->DATARMNET655f822a62){DATARMNETaa568481cf->
  287. DATARMNETee01ad514b=DATARMNETddcafd8b91->DATARMNET655f822a62*HZ;
  288. DATARMNETaa568481cf->expires=jiffies+DATARMNETaa568481cf->DATARMNETee01ad514b;}
  289. DATARMNET1e616c2160(DATARMNET817a8d238c,DATARMNETaa568481cf);}else{spin_lock_bh(
  290. &DATARMNET33bd4139f4);memcpy(&DATARMNETaa568481cf->DATARMNET54338da2ff,
  291. DATARMNETddcafd8b91,sizeof(DATARMNETaa568481cf->DATARMNET54338da2ff));
  292. DATARMNETaa568481cf->DATARMNET626c626b74=DATARMNETaa568481cf->
  293. DATARMNET54338da2ff.DATARMNET626c626b74;DATARMNETaa568481cf->DATARMNET40bb1d945b
  294. =DATARMNETaa568481cf->DATARMNET54338da2ff.DATARMNET40bb1d945b;
  295. DATARMNET3281082da4(DATARMNETaa568481cf);spin_unlock_bh(&DATARMNET33bd4139f4);
  296. DATARMNET112d724eff(
  297. "\x61\x70\x73\x3a\x20\x66\x6c\x6f\x77\x20\x30\x78\x25\x78\x20\x75\x70\x64\x61\x74\x65\x64" "\n"
  298. ,DATARMNETaa568481cf->DATARMNET54338da2ff.DATARMNETbb588401ec);}return
  299. (0xd2d+202-0xdf7);}static int DATARMNETbd1d5c8f28(struct genl_info*
  300. DATARMNET54338da2ff,u8 cmd,int DATARMNETbc8c3c13e8,int DATARMNET5d9df1c423,void*
  301. DATARMNET8dad72c67a,gfp_t flags){struct sk_buff*DATARMNET543491eb0f;void*
  302. DATARMNETd7f97e2e5a;int DATARMNETb14e52a504;if(unlikely(!DATARMNET54338da2ff))
  303. return-EINVAL;DATARMNET543491eb0f=genlmsg_new(nla_total_size(DATARMNET5d9df1c423
  304. ),flags);if(!DATARMNET543491eb0f)goto DATARMNETbf4095f79e;DATARMNETd7f97e2e5a=
  305. genlmsg_put(DATARMNET543491eb0f,(0xd2d+202-0xdf7),DATARMNET54338da2ff->snd_seq+
  306. (0xd26+209-0xdf6),&DATARMNETcdba30eca9,(0xd2d+202-0xdf7),cmd);if(!
  307. DATARMNETd7f97e2e5a)goto DATARMNETbf4095f79e;DATARMNETb14e52a504=nla_put(
  308. DATARMNET543491eb0f,DATARMNETbc8c3c13e8,DATARMNET5d9df1c423,DATARMNET8dad72c67a)
  309. ;if(DATARMNETb14e52a504!=(0xd2d+202-0xdf7))goto DATARMNETbf4095f79e;genlmsg_end(
  310. DATARMNET543491eb0f,DATARMNETd7f97e2e5a);DATARMNETb14e52a504=genlmsg_unicast(
  311. genl_info_net(DATARMNET54338da2ff),DATARMNET543491eb0f,DATARMNET54338da2ff->
  312. snd_portid);if(DATARMNETb14e52a504!=(0xd2d+202-0xdf7))goto DATARMNETbf4095f79e;
  313. return(0xd2d+202-0xdf7);DATARMNETbf4095f79e:DATARMNET112d724eff(
  314. "\x61\x70\x73\x3a\x20\x46\x41\x49\x4c\x45\x44\x20\x74\x6f\x20\x73\x65\x6e\x64\x20\x6d\x73\x67\x20\x25\x64" "\n"
  315. ,cmd);return-EFAULT;}static void DATARMNET446f780f19(u32 DATARMNETbb588401ec,u8
  316. DATARMNETf8bbe3b0fb){struct DATARMNETca79857d4a DATARMNETa13fcf9070;if(!
  317. DATARMNET7d98961cbe.snd_portid){DATARMNET112d724eff(
  318. "\x61\x70\x73\x3a\x20\x63\x6c\x69\x65\x6e\x74\x20\x6e\x6f\x74\x20\x63\x6f\x6e\x6e\x65\x63\x74\x65\x64" "\n"
  319. );return;}DATARMNETa13fcf9070.cmd=DATARMNETdc217f1b29;DATARMNETa13fcf9070.
  320. DATARMNETe65883bfce=DATARMNETf8bbe3b0fb;DATARMNETa13fcf9070.DATARMNETbb588401ec=
  321. DATARMNETbb588401ec;if(DATARMNETbd1d5c8f28(&DATARMNET7d98961cbe,
  322. DATARMNET15437be67e,DATARMNET818a0b6438,sizeof(DATARMNETa13fcf9070),&
  323. DATARMNETa13fcf9070,GFP_ATOMIC)){DATARMNET112d724eff(
  324. "\x61\x70\x73\x3a\x20\x63\x6c\x69\x65\x6e\x74\x20\x73\x65\x6e\x64\x20\x66\x61\x69\x6c\x65\x64\x2e\x20\x64\x69\x73\x61\x62\x6c\x65\x20\x63\x6c\x69\x65\x6e\x74" "\n"
  325. );DATARMNET7d98961cbe.snd_portid=(0xd2d+202-0xdf7);}}static void
  326. DATARMNET30dd480cad(struct net_device*DATARMNET413e8dcf7b,struct sk_buff*
  327. DATARMNET543491eb0f){struct DATARMNET6fd48c33f6*DATARMNETaa568481cf;struct
  328. DATARMNET758277d429*aps_cb;struct DATARMNETc4743b996e*DATARMNET81b03d6be4;if(
  329. DATARMNET2fe4661b82&&(DATARMNET543491eb0f->priority>>(0xeb7+1158-0x132d)!=
  330. DATARMNET2fe4661b82))return;aps_cb=DATARMNETe1c7654a2e(DATARMNET413e8dcf7b);
  331. DATARMNET81b03d6be4=rcu_dereference(aps_cb->DATARMNETac8d594fb6);if(!
  332. DATARMNET81b03d6be4)return;if(DATARMNET2fe4661b82)DATARMNETaa568481cf=
  333. DATARMNET3ed11fdc8d(&DATARMNET81b03d6be4->DATARMNET46c1c4375f,
  334. DATARMNET543491eb0f->priority);else DATARMNETaa568481cf=DATARMNETfb13c018fc(&
  335. DATARMNET81b03d6be4->DATARMNET46c1c4375f,DATARMNET543491eb0f);if(
  336. DATARMNETaa568481cf){spin_lock_bh(&DATARMNET33bd4139f4);DATARMNET543491eb0f->
  337. priority=DATARMNETaa568481cf->DATARMNET556cdfb5eb;DATARMNETaa568481cf->expires=
  338. jiffies+DATARMNETaa568481cf->DATARMNETee01ad514b;DATARMNETaa568481cf->
  339. DATARMNETa27e524d8a+=DATARMNET543491eb0f->len;spin_unlock_bh(&
  340. DATARMNET33bd4139f4);schedule_delayed_work(&DATARMNET3481998252,
  341. DATARMNETfd026b105a);}}static int DATARMNET998f6cbce7(struct notifier_block*
  342. DATARMNET272c159b3c,unsigned long DATARMNET9a4761f31c,void*data){struct
  343. net_device*DATARMNET413e8dcf7b;struct DATARMNET758277d429*aps_cb;struct
  344. DATARMNETc4743b996e*DATARMNET81b03d6be4;DATARMNET413e8dcf7b=
  345. netdev_notifier_info_to_dev(data);if(unlikely(!DATARMNET413e8dcf7b))return
  346. NOTIFY_DONE;if(!DATARMNET4e81d27dfb(DATARMNET413e8dcf7b))return NOTIFY_DONE;
  347. aps_cb=DATARMNETe1c7654a2e(DATARMNET413e8dcf7b);BUILD_BUG_ON(sizeof(*aps_cb)>
  348. sizeof(((struct rmnet_priv*)(0xd2d+202-0xdf7))->aps_cb));switch(
  349. DATARMNET9a4761f31c){case NETDEV_DOWN:aps_cb->DATARMNET91119c34ed=
  350. (0xd2d+202-0xdf7);mutex_lock(&DATARMNETd7b5a80f84);DATARMNET250448eb06(
  351. DATARMNET413e8dcf7b->ifindex);mutex_unlock(&DATARMNETd7b5a80f84);break;case
  352. NETDEV_UNREGISTER:mutex_lock(&DATARMNETd7b5a80f84);DATARMNET250448eb06(
  353. DATARMNET413e8dcf7b->ifindex);DATARMNET81b03d6be4=rcu_dereference(aps_cb->
  354. DATARMNETac8d594fb6);if(DATARMNET81b03d6be4){WARN_ON(!list_empty(&
  355. DATARMNET81b03d6be4->DATARMNET46c1c4375f));rcu_assign_pointer(aps_cb->
  356. DATARMNETac8d594fb6,NULL);kfree_rcu(DATARMNET81b03d6be4,DATARMNET28bfe9e6ad);}
  357. mutex_unlock(&DATARMNETd7b5a80f84);break;default:break;}return NOTIFY_DONE;}int
  358. DATARMNET37a9efbbcb(struct sk_buff*DATARMNETaafc1d9519,struct genl_info*
  359. DATARMNET54338da2ff){struct nlattr*DATARMNET9c5e00ef03;struct
  360. DATARMNET5d4139d9d7 DATARMNETddcafd8b91;struct DATARMNETca79857d4a
  361. DATARMNETa13fcf9070;struct net_device*DATARMNET413e8dcf7b=NULL;struct
  362. DATARMNET758277d429*aps_cb;struct DATARMNETc4743b996e*DATARMNET81b03d6be4;int
  363. DATARMNETb14e52a504=-EINVAL;DATARMNET112d724eff(
  364. "\x61\x70\x73\x3a\x20\x25\x73" "\n",__func__);if(!DATARMNET54338da2ff)return-
  365. EINVAL;DATARMNET9c5e00ef03=DATARMNET54338da2ff->attrs[DATARMNET98b93f2e86];if(!
  366. DATARMNET9c5e00ef03){DATARMNET112d724eff(
  367. "\x61\x70\x73\x3a\x20\x6e\x6f\x20\x61\x74\x74\x72\x73" "\n");return-EINVAL;}if(
  368. nla_memcpy(&DATARMNETddcafd8b91,DATARMNET9c5e00ef03,sizeof(DATARMNETddcafd8b91))
  369. <=(0xd2d+202-0xdf7)){DATARMNET112d724eff(
  370. "\x61\x70\x73\x3a\x20\x6e\x6c\x61\x5f\x6d\x65\x6d\x63\x70\x79\x20\x66\x61\x69\x6c\x65\x64" "\n"
  371. );return-EINVAL;}mutex_lock(&DATARMNETd7b5a80f84);if(!DATARMNET54b95e4416)goto
  372. DATARMNETbf4095f79e;switch(DATARMNETddcafd8b91.cmd){case DATARMNET63ff5c35c2:
  373. DATARMNET7d98961cbe=*DATARMNET54338da2ff;DATARMNET9ac8a34003();
  374. DATARMNET2fe4661b82=(u16)DATARMNETddcafd8b91.DATARMNETbb588401ec;
  375. DATARMNET112d724eff(
  376. "\x61\x70\x73\x3a\x20\x63\x6c\x69\x65\x6e\x74\x20\x69\x6e\x69\x74\x20\x63\x6f\x6f\x6b\x69\x65\x20\x30\x78\x25\x78" "\n"
  377. ,DATARMNET2fe4661b82);DATARMNETb14e52a504=(0xd2d+202-0xdf7);break;case
  378. DATARMNETceae994093:case DATARMNET3412b803e1:case DATARMNET1efd633004:if(
  379. DATARMNETddcafd8b91.ifindex)DATARMNET413e8dcf7b=dev_get_by_index(&init_net,
  380. DATARMNETddcafd8b91.ifindex);if(!DATARMNET413e8dcf7b){DATARMNET112d724eff(
  381. "\x61\x70\x73\x3a\x20\x6e\x6f\x20\x64\x65\x76\x20\x66\x6f\x72\x20\x69\x66\x69\x6e\x64\x65\x78\x20\x25\x75" "\n"
  382. ,DATARMNETddcafd8b91.ifindex);break;}if(DATARMNET4e81d27dfb(DATARMNET413e8dcf7b)
  383. ){aps_cb=DATARMNETe1c7654a2e(DATARMNET413e8dcf7b);DATARMNET81b03d6be4=
  384. rcu_dereference(aps_cb->DATARMNETac8d594fb6);if(!DATARMNET81b03d6be4&&
  385. DATARMNETddcafd8b91.cmd==DATARMNETceae994093){DATARMNET81b03d6be4=kzalloc(sizeof
  386. (*DATARMNET81b03d6be4),GFP_KERNEL);if(DATARMNET81b03d6be4){INIT_LIST_HEAD(&
  387. DATARMNET81b03d6be4->DATARMNET46c1c4375f);rcu_assign_pointer(aps_cb->
  388. DATARMNETac8d594fb6,DATARMNET81b03d6be4);}else{DATARMNET112d724eff(
  389. "\x61\x70\x73\x3a\x20\x6e\x6f\x20\x6d\x65\x6d\x6f\x72\x79" "\n");}}if(
  390. DATARMNET81b03d6be4)DATARMNETb14e52a504=DATARMNET82d65f9ca6(&DATARMNET81b03d6be4
  391. ->DATARMNET46c1c4375f,&DATARMNETddcafd8b91);else DATARMNET112d724eff(
  392. "\x61\x70\x73\x3a\x20\x6e\x6f\x20\x66\x6c\x6f\x77\x20\x6c\x69\x73\x74\x20\x66\x6f\x72\x20\x66\x6c\x6f\x77\x20\x72\x65\x71" "\n"
  393. );}dev_put(DATARMNET413e8dcf7b);break;default:break;}DATARMNETbf4095f79e:
  394. mutex_unlock(&DATARMNETd7b5a80f84);DATARMNETa13fcf9070.cmd=DATARMNETddcafd8b91.
  395. cmd;DATARMNETa13fcf9070.DATARMNETe65883bfce=DATARMNETb14e52a504;
  396. DATARMNETa13fcf9070.DATARMNETbb588401ec=DATARMNETddcafd8b91.DATARMNETbb588401ec;
  397. DATARMNETb14e52a504=DATARMNETbd1d5c8f28(DATARMNET54338da2ff,DATARMNET15437be67e,
  398. DATARMNET818a0b6438,sizeof(DATARMNETa13fcf9070),&DATARMNETa13fcf9070,GFP_KERNEL)
  399. ;return DATARMNETb14e52a504;}static int DATARMNET9e18f3d501(struct list_head*
  400. DATARMNET817a8d238c,struct DATARMNETd51e57e3f4*DATARMNETddcafd8b91){struct
  401. DATARMNET6fd48c33f6*DATARMNETaa568481cf;struct DATARMNETb356c61ad6*
  402. DATARMNET8f197b20f6;DATARMNETaa568481cf=DATARMNET3ed11fdc8d(DATARMNET817a8d238c,
  403. DATARMNETddcafd8b91->DATARMNETbb588401ec);if(!DATARMNETaa568481cf){
  404. DATARMNET112d724eff(
  405. "\x61\x70\x73\x3a\x20\x66\x6c\x6f\x77\x20\x30\x78\x25\x78\x20\x6e\x6f\x74\x20\x66\x6f\x75\x6e\x64" "\n"
  406. ,DATARMNETddcafd8b91->DATARMNETbb588401ec);return-EINVAL;}switch(
  407. DATARMNETddcafd8b91->cmd){case DATARMNETd0bce1573e:DATARMNET8f197b20f6=
  408. rcu_dereference(DATARMNETaa568481cf->DATARMNET8f197b20f6);if(DATARMNET8f197b20f6
  409. ){DATARMNET112d724eff(
  410. "\x61\x70\x73\x3a\x20\x66\x69\x6c\x74\x65\x72\x20\x66\x6f\x72\x20\x66\x6c\x6f\x77\x20\x30\x78\x25\x78\x20\x65\x78\x69\x73\x74\x73" "\n"
  411. ,DATARMNETddcafd8b91->DATARMNETbb588401ec);return-EINVAL;}DATARMNET8f197b20f6=
  412. kzalloc(sizeof(*DATARMNET8f197b20f6),GFP_KERNEL);if(!DATARMNET8f197b20f6){
  413. DATARMNET112d724eff(
  414. "\x61\x70\x73\x3a\x20\x6e\x6f\x20\x6d\x65\x6d\x6f\x72\x79" "\n");return-ENOMEM;}
  415. memcpy(&DATARMNET8f197b20f6->DATARMNET54338da2ff,DATARMNETddcafd8b91,sizeof(*
  416. DATARMNETddcafd8b91));if(DATARMNET8f197b20f6->DATARMNET54338da2ff.tos){if(!
  417. DATARMNET8f197b20f6->DATARMNET54338da2ff.DATARMNETa400ad4f72)DATARMNET8f197b20f6
  418. ->DATARMNET54338da2ff.DATARMNETa400ad4f72=(0xbf7+4364-0x1c04);
  419. DATARMNET8f197b20f6->DATARMNET54338da2ff.tos&=DATARMNET8f197b20f6->
  420. DATARMNET54338da2ff.DATARMNETa400ad4f72;}rcu_assign_pointer(DATARMNETaa568481cf
  421. ->DATARMNET8f197b20f6,DATARMNET8f197b20f6);break;default:return-EINVAL;}return
  422. (0xd2d+202-0xdf7);}int DATARMNETae6b282c61(struct sk_buff*DATARMNETaafc1d9519,
  423. struct genl_info*DATARMNET54338da2ff){struct nlattr*DATARMNET9c5e00ef03;struct
  424. DATARMNETd51e57e3f4 DATARMNETddcafd8b91;struct DATARMNET15bcb4844b
  425. DATARMNETa13fcf9070;struct net_device*DATARMNET413e8dcf7b=NULL;struct
  426. DATARMNET758277d429*aps_cb;struct DATARMNETc4743b996e*DATARMNET81b03d6be4;int
  427. DATARMNETb14e52a504=-EINVAL;DATARMNET112d724eff(
  428. "\x61\x70\x73\x3a\x20\x25\x73" "\n",__func__);if(!DATARMNET54338da2ff)return-
  429. EINVAL;DATARMNET9c5e00ef03=DATARMNET54338da2ff->attrs[DATARMNET7edfedec7f];if(!
  430. DATARMNET9c5e00ef03){DATARMNET112d724eff(
  431. "\x61\x70\x73\x3a\x20\x6e\x6f\x20\x61\x74\x74\x72\x73" "\n");return-EINVAL;}if(
  432. nla_memcpy(&DATARMNETddcafd8b91,DATARMNET9c5e00ef03,sizeof(DATARMNETddcafd8b91))
  433. <=(0xd2d+202-0xdf7)){DATARMNET112d724eff(
  434. "\x61\x70\x73\x3a\x20\x6e\x6c\x61\x5f\x6d\x65\x6d\x63\x70\x79\x20\x66\x61\x69\x6c\x65\x64" "\n"
  435. );return-EINVAL;}mutex_lock(&DATARMNETd7b5a80f84);if(!DATARMNET54b95e4416)goto
  436. DATARMNETbf4095f79e;if(DATARMNETddcafd8b91.ifindex)DATARMNET413e8dcf7b=
  437. dev_get_by_index(&init_net,DATARMNETddcafd8b91.ifindex);if(!DATARMNET413e8dcf7b)
  438. {DATARMNET112d724eff(
  439. "\x61\x70\x73\x3a\x20\x6e\x6f\x20\x64\x65\x76\x20\x66\x6f\x72\x20\x69\x66\x69\x6e\x64\x65\x78\x20\x25\x75" "\n"
  440. ,DATARMNETddcafd8b91.ifindex);goto DATARMNETbf4095f79e;}if(!DATARMNET4e81d27dfb(
  441. DATARMNET413e8dcf7b)){dev_put(DATARMNET413e8dcf7b);goto DATARMNETbf4095f79e;}
  442. switch(DATARMNETddcafd8b91.cmd){case DATARMNETd0bce1573e:aps_cb=
  443. DATARMNETe1c7654a2e(DATARMNET413e8dcf7b);DATARMNET81b03d6be4=rcu_dereference(
  444. aps_cb->DATARMNETac8d594fb6);if(DATARMNET81b03d6be4)DATARMNETb14e52a504=
  445. DATARMNET9e18f3d501(&DATARMNET81b03d6be4->DATARMNET46c1c4375f,&
  446. DATARMNETddcafd8b91);else DATARMNET112d724eff(
  447. "\x61\x70\x73\x3a\x20\x6e\x6f\x20\x66\x6c\x6f\x77\x20\x6c\x69\x73\x74" "\n");
  448. break;default:break;}dev_put(DATARMNET413e8dcf7b);DATARMNETbf4095f79e:
  449. mutex_unlock(&DATARMNETd7b5a80f84);DATARMNETa13fcf9070.cmd=DATARMNETddcafd8b91.
  450. cmd;DATARMNETa13fcf9070.DATARMNETe65883bfce=DATARMNETb14e52a504;
  451. DATARMNETa13fcf9070.DATARMNETbb588401ec=DATARMNETddcafd8b91.DATARMNETbb588401ec;
  452. DATARMNETb14e52a504=DATARMNETbd1d5c8f28(DATARMNET54338da2ff,DATARMNET97eefd45e3,
  453. DATARMNETd2b1517d6b,sizeof(DATARMNETa13fcf9070),&DATARMNETa13fcf9070,GFP_KERNEL)
  454. ;return DATARMNETb14e52a504;}static ktime_t DATARMNETe7a1ab1dab;int
  455. DATARMNET1998d09852(struct sk_buff*DATARMNETaafc1d9519,struct genl_info*
  456. DATARMNET54338da2ff){struct nlattr*DATARMNET9c5e00ef03;struct
  457. DATARMNET797a5b1493 DATARMNETddcafd8b91;struct DATARMNET9a727f81bc
  458. DATARMNETa13fcf9070;struct net_device*DATARMNET413e8dcf7b;struct
  459. DATARMNET758277d429*aps_cb;int DATARMNETb14e52a504;DATARMNET112d724eff(
  460. "\x61\x70\x73\x3a\x20\x25\x73" "\n",__func__);if(!DATARMNET54338da2ff)return-
  461. EINVAL;DATARMNET9c5e00ef03=DATARMNET54338da2ff->attrs[DATARMNET572e4a28eb];if(!
  462. DATARMNET9c5e00ef03){DATARMNET112d724eff(
  463. "\x61\x70\x73\x3a\x20\x6e\x6f\x20\x61\x74\x74\x72\x73" "\n");return-EINVAL;}if(
  464. nla_memcpy(&DATARMNETddcafd8b91,DATARMNET9c5e00ef03,sizeof(DATARMNETddcafd8b91))
  465. <=(0xd2d+202-0xdf7)){DATARMNET112d724eff(
  466. "\x61\x70\x73\x3a\x20\x6e\x6c\x61\x5f\x6d\x65\x6d\x63\x70\x79\x20\x66\x61\x69\x6c\x65\x64" "\n"
  467. );return-EINVAL;}DATARMNET112d724eff(
  468. "\x61\x70\x73\x3a\x20\x69\x66\x69\x6e\x64\x65\x78\x20\x25\x75\x20\x65\x78\x70\x69\x72\x65\x5f\x6d\x73\x20\x25\x75" "\n"
  469. ,DATARMNETddcafd8b91.ifindex,DATARMNETddcafd8b91.DATARMNETc277c62678);if(
  470. DATARMNETddcafd8b91.DATARMNETc277c62678){ktime_t DATARMNET35f4c14174=ms_to_ktime
  471. (DATARMNETddcafd8b91.DATARMNETc277c62678);if(DATARMNETe7a1ab1dab!=
  472. DATARMNET35f4c14174)DATARMNETe7a1ab1dab=DATARMNET35f4c14174;}DATARMNET413e8dcf7b
  473. =dev_get_by_index(&init_net,DATARMNETddcafd8b91.ifindex);if(DATARMNET413e8dcf7b)
  474. {if(DATARMNET4e81d27dfb(DATARMNET413e8dcf7b)){aps_cb=DATARMNETe1c7654a2e(
  475. DATARMNET413e8dcf7b);aps_cb->DATARMNET91119c34ed=DATARMNETddcafd8b91.
  476. DATARMNETc277c62678?(0xd26+209-0xdf6):(0xd2d+202-0xdf7);}dev_put(
  477. DATARMNET413e8dcf7b);}memset(&DATARMNETa13fcf9070,(0xd2d+202-0xdf7),sizeof(
  478. DATARMNETa13fcf9070));DATARMNETa13fcf9070.ifindex=DATARMNETddcafd8b91.ifindex;
  479. DATARMNETb14e52a504=DATARMNETbd1d5c8f28(DATARMNET54338da2ff,DATARMNET4f09ad7688,
  480. DATARMNETe54d857ffe,sizeof(DATARMNETa13fcf9070),&DATARMNETa13fcf9070,GFP_KERNEL)
  481. ;return DATARMNETb14e52a504;}static void DATARMNETe0c7b9d5a4(struct net_device*
  482. DATARMNET413e8dcf7b,struct sk_buff*DATARMNET543491eb0f){struct
  483. DATARMNET758277d429*aps_cb=DATARMNETe1c7654a2e(DATARMNET413e8dcf7b);if(aps_cb->
  484. DATARMNET91119c34ed)skb_hwtstamps(DATARMNET543491eb0f)->hwtstamp=
  485. ktime_get_boottime();else skb_hwtstamps(DATARMNET543491eb0f)->hwtstamp=
  486. (0xd2d+202-0xdf7);if(READ_ONCE(DATARMNETfef55eaf9a))DATARMNET30dd480cad(
  487. DATARMNET413e8dcf7b,DATARMNET543491eb0f);}static int DATARMNET6ab4bbdaf4(struct
  488. net_device*DATARMNET413e8dcf7b,struct sk_buff*DATARMNET543491eb0f){struct
  489. DATARMNET758277d429*aps_cb=DATARMNETe1c7654a2e(DATARMNET413e8dcf7b);ktime_t
  490. DATARMNET912d2a7edd;if(aps_cb->DATARMNET91119c34ed&&skb_hwtstamps(
  491. DATARMNET543491eb0f)->hwtstamp&&DATARMNETe7a1ab1dab){DATARMNET912d2a7edd=
  492. ktime_get_boottime();if(ktime_sub(DATARMNET912d2a7edd,skb_hwtstamps(
  493. DATARMNET543491eb0f)->hwtstamp)>DATARMNETe7a1ab1dab)return-ETIMEDOUT;}return
  494. (0xd2d+202-0xdf7);}static const struct rmnet_module_hook_register_info
  495. DATARMNET509284caa6[]={{.hooknum=RMNET_MODULE_HOOK_APS_PRE_QUEUE,.func=
  496. DATARMNETe0c7b9d5a4,},{.hooknum=RMNET_MODULE_HOOK_APS_POST_QUEUE,.func=
  497. DATARMNET6ab4bbdaf4,},};static int __init DATARMNET0718a3fa4c(void){int
  498. DATARMNETb14e52a504;pr_info(
  499. "\x61\x70\x73\x3a\x20\x69\x6e\x69\x74\x20\x28\x25\x73\x29" "\n",
  500. DATARMNETe5ef0e617c);DATARMNETb14e52a504=DATARMNETcfa8d492f8();if(
  501. DATARMNETb14e52a504){pr_err(
  502. "\x61\x70\x73\x3a\x20\x66\x61\x69\x6c\x65\x64\x20\x74\x6f\x20\x72\x65\x67\x69\x73\x74\x65\x72\x20\x67\x65\x6e\x6c\x20\x66\x61\x6d\x69\x6c\x79" "\n"
  503. );return DATARMNETb14e52a504;}register_netdevice_notifier(&DATARMNETc580548769);
  504. rcu_assign_pointer(rmnet_aps_pre_queue,DATARMNETe0c7b9d5a4);rcu_assign_pointer(
  505. rmnet_aps_post_queue,DATARMNET6ab4bbdaf4);rmnet_module_hook_register(
  506. DATARMNET509284caa6,ARRAY_SIZE(DATARMNET509284caa6));mutex_lock(&
  507. DATARMNETd7b5a80f84);DATARMNET54b95e4416=true;mutex_unlock(&DATARMNETd7b5a80f84)
  508. ;return(0xd2d+202-0xdf7);}static void __exit DATARMNETff67054ba9(void){
  509. rcu_assign_pointer(rmnet_aps_pre_queue,NULL);rcu_assign_pointer(
  510. rmnet_aps_post_queue,NULL);rmnet_module_hook_unregister(DATARMNET509284caa6,
  511. ARRAY_SIZE(DATARMNET509284caa6));mutex_lock(&DATARMNETd7b5a80f84);
  512. DATARMNET54b95e4416=false;DATARMNET9ac8a34003();mutex_unlock(&
  513. DATARMNETd7b5a80f84);DATARMNET446f780f19((0xd2d+202-0xdf7),DATARMNET94016043b8);
  514. cancel_delayed_work_sync(&DATARMNET3481998252);del_timer_sync(&
  515. DATARMNETd21629e047);cancel_work_sync(&DATARMNET8e3aef0760);
  516. unregister_netdevice_notifier(&DATARMNETc580548769);DATARMNETca7606cfd1();
  517. DATARMNET112d724eff("\x61\x70\x73\x3a\x20\x65\x78\x69\x74" "\n");}MODULE_LICENSE
  518. ("\x47\x50\x4c\x20\x76\x32");module_init(DATARMNET0718a3fa4c);module_exit(
  519. DATARMNETff67054ba9);