rmnet_perf_tcp.c 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240
  1. // SPDX-License-Identifier: GPL-2.0-only
  2. /* Copyright (c) 2023,Qualcomm Innovation Center, Inc. All rights reserved.
  3. *
  4. * RMNET PERF TCP framework
  5. *
  6. */
  7. #include <linux/types.h>
  8. #include <linux/module.h>
  9. #include <linux/moduleparam.h>
  10. #include <linux/skbuff.h>
  11. #include <linux/spinlock.h>
  12. #include <linux/rcupdate.h>
  13. #include <linux/hashtable.h>
  14. #include <linux/log2.h>
  15. #include <linux/workqueue.h>
  16. #include <net/ip.h>
  17. #include <net/inet_hashtables.h>
  18. #include <net/ipv6.h>
  19. #include <net/inet6_hashtables.h>
  20. #include <net/tcp.h>
  21. #include <net/sock.h>
  22. #include "rmnet_private.h"
  23. #include "rmnet_perf_tcp.h"
  24. #define DATARMNET3dad3dfdc0 ((0x16a8+1565-0x14f5))
  25. #define DATARMNETe6309522cf ((0xdf7+6169-0x241c))
  26. #define DATARMNET99a2e6e390 (192000)
  27. #define DATARMNET714c9c3081 ((0xeb7+1158-0x132d))
  28. #define DATARMNET347bd5eb15 \
  29. (const_ilog2(DATARMNET714c9c3081))
  30. enum{DATARMNETe0e37fef7a,DATARMNETf354672897,DATARMNET9cc765a89e,
  31. DATARMNETb03f9571a3,DATARMNET7797205f58,DATARMNETaa18c75b61,};struct
  32. DATARMNET4b40fe9cd4{union{__be32 DATARMNETdfe430c2d6;struct in6_addr
  33. DATARMNET815cbb4bf5;};union{__be32 DATARMNET2cb607d686;struct in6_addr
  34. DATARMNETc3f31215b7;};union{struct{__be16 DATARMNET08e913477e;__be16
  35. DATARMNETda7f7fa492;};u32 DATARMNET556bcfcf8f;};u8 DATARMNET0d956cc77a;};struct
  36. DATARMNETddbc1e5435{struct hlist_node hash;struct rcu_head DATARMNET28bfe9e6ad;
  37. struct DATARMNET4b40fe9cd4 DATARMNET54338da2ff;struct sock*DATARMNETa3e9a18f1b;
  38. unsigned long DATARMNET763f2e5fac;u32 DATARMNETfef3675ce7;u32
  39. DATARMNET9076d335ab;u32 DATARMNET9c389f3b86;u32 DATARMNET9a57846b4e;u32
  40. DATARMNETb8fc35ed64;bool DATARMNET55056146f6;u8 DATARMNET1717afebc7;};struct
  41. DATARMNET74cfea3d20{struct delayed_work DATARMNET190b4452e8;bool
  42. DATARMNETcd94e0d3c7;};static DEFINE_SPINLOCK(DATARMNET8e3721c47d);static
  43. DEFINE_HASHTABLE(DATARMNET1fd012f255,DATARMNET347bd5eb15);static u32
  44. DATARMNET1c62a8e2c9;static struct DATARMNET74cfea3d20 DATARMNETac6535da80;static
  45. u32 DATARMNET84337b8855=(0xeb7+698-0x110d);module_param_named(
  46. rmnet_perf_tcp_knob0,DATARMNET84337b8855,uint,(0xdb7+6665-0x261c));static u64
  47. DATARMNETeb09e391b5[DATARMNETaa18c75b61];module_param_array_named(
  48. rmnet_perf_tcp_stat,DATARMNETeb09e391b5,ullong,NULL,(0xcb7+5769-0x221c));static
  49. void DATARMNET32b91c8ae6(u32 DATARMNET248f120dd5){if(DATARMNET248f120dd5<
  50. DATARMNETaa18c75b61)DATARMNETeb09e391b5[DATARMNET248f120dd5]+=(0xd26+209-0xdf6);
  51. }static bool DATARMNETd92eab34a9(struct DATARMNETddbc1e5435*DATARMNET63b1a086d5,
  52. unsigned long DATARMNET763f2e5fac){unsigned long DATARMNETc2d5c71ce1;
  53. DATARMNETc2d5c71ce1=msecs_to_jiffies(DATARMNET3dad3dfdc0);if(DATARMNET763f2e5fac
  54. -DATARMNET63b1a086d5->DATARMNET763f2e5fac>DATARMNETc2d5c71ce1)return true;return
  55. false;}static void DATARMNET776e08992c(struct rcu_head*DATARMNET5d432e897f){
  56. struct DATARMNETddbc1e5435*DATARMNET63b1a086d5;DATARMNET63b1a086d5=container_of(
  57. DATARMNET5d432e897f,struct DATARMNETddbc1e5435,DATARMNET28bfe9e6ad);if(!
  58. IS_ERR_OR_NULL(DATARMNET63b1a086d5->DATARMNETa3e9a18f1b))sock_put(
  59. DATARMNET63b1a086d5->DATARMNETa3e9a18f1b);kfree(DATARMNET63b1a086d5);}static
  60. bool DATARMNETb8167597bc(bool DATARMNETe78ad140cc){struct DATARMNETddbc1e5435*
  61. DATARMNET63b1a086d5;struct hlist_node*DATARMNET0386f6f82a;unsigned long
  62. DATARMNET763f2e5fac;int DATARMNET5c2fd31d7b;DATARMNET763f2e5fac=jiffies;
  63. hash_for_each_safe(DATARMNET1fd012f255,DATARMNET5c2fd31d7b,DATARMNET0386f6f82a,
  64. DATARMNET63b1a086d5,hash){if(DATARMNET63b1a086d5->DATARMNET1717afebc7)continue;
  65. if(DATARMNETe78ad140cc||DATARMNETd92eab34a9(DATARMNET63b1a086d5,
  66. DATARMNET763f2e5fac)){DATARMNET63b1a086d5->DATARMNET1717afebc7=true;hash_del_rcu
  67. (&DATARMNET63b1a086d5->hash);call_rcu(&DATARMNET63b1a086d5->DATARMNET28bfe9e6ad,
  68. DATARMNET776e08992c);DATARMNET32b91c8ae6(DATARMNET9cc765a89e);
  69. DATARMNET1c62a8e2c9--;}}return!!DATARMNET1c62a8e2c9;}static void
  70. DATARMNETfec9085d8e(struct work_struct*DATARMNET190b4452e8){struct
  71. DATARMNET74cfea3d20*DATARMNET9dd153bdf2;unsigned long DATARMNETfb0677cc3c;bool
  72. DATARMNET6e1c466378;DATARMNET9dd153bdf2=container_of(to_delayed_work(
  73. DATARMNET190b4452e8),struct DATARMNET74cfea3d20,DATARMNET190b4452e8);
  74. spin_lock_irqsave(&DATARMNET8e3721c47d,DATARMNETfb0677cc3c);DATARMNET6e1c466378=
  75. DATARMNETb8167597bc(DATARMNET9dd153bdf2->DATARMNETcd94e0d3c7);if(
  76. DATARMNET6e1c466378){unsigned long DATARMNETf71ef1b8da;DATARMNETf71ef1b8da=
  77. msecs_to_jiffies(DATARMNETe6309522cf);schedule_delayed_work(&DATARMNET9dd153bdf2
  78. ->DATARMNET190b4452e8,DATARMNETf71ef1b8da);}spin_unlock_irqrestore(&
  79. DATARMNET8e3721c47d,DATARMNETfb0677cc3c);}static bool DATARMNET2f1039220d(struct
  80. DATARMNET4b40fe9cd4*DATARMNETae0905b0b3,struct DATARMNET4b40fe9cd4*
  81. DATARMNETdb49f21565){if(DATARMNETae0905b0b3->DATARMNET0d956cc77a!=
  82. DATARMNETdb49f21565->DATARMNET0d956cc77a||DATARMNETae0905b0b3->
  83. DATARMNET08e913477e!=DATARMNETdb49f21565->DATARMNET08e913477e||
  84. DATARMNETae0905b0b3->DATARMNETda7f7fa492!=DATARMNETdb49f21565->
  85. DATARMNETda7f7fa492)return false;if(DATARMNETae0905b0b3->DATARMNET0d956cc77a==
  86. (0xd11+230-0xdf3))return DATARMNETae0905b0b3->DATARMNETdfe430c2d6==
  87. DATARMNETdb49f21565->DATARMNETdfe430c2d6&&DATARMNETae0905b0b3->
  88. DATARMNET2cb607d686==DATARMNETdb49f21565->DATARMNET2cb607d686;return!
  89. ipv6_addr_cmp(&DATARMNETae0905b0b3->DATARMNET815cbb4bf5,&DATARMNETdb49f21565->
  90. DATARMNET815cbb4bf5)&&!ipv6_addr_cmp(&DATARMNETae0905b0b3->DATARMNETc3f31215b7,&
  91. DATARMNETdb49f21565->DATARMNETc3f31215b7);}static struct DATARMNETddbc1e5435*
  92. DATARMNETba919c78e5(struct DATARMNET4b40fe9cd4*DATARMNET3396919a68)__must_hold(&
  93. DATARMNET8e3721c47d){struct DATARMNETddbc1e5435*DATARMNET63b1a086d5;if(
  94. DATARMNET1c62a8e2c9>=DATARMNET84337b8855)return NULL;DATARMNET63b1a086d5=kzalloc
  95. (sizeof(*DATARMNET63b1a086d5),GFP_ATOMIC);if(!DATARMNET63b1a086d5){
  96. DATARMNET32b91c8ae6(DATARMNETf354672897);return NULL;}INIT_HLIST_NODE(&
  97. DATARMNET63b1a086d5->hash);memcpy(&DATARMNET63b1a086d5->DATARMNET54338da2ff,
  98. DATARMNET3396919a68,sizeof(*DATARMNET3396919a68));DATARMNET63b1a086d5->
  99. DATARMNET9a57846b4e=DATARMNET99a2e6e390;DATARMNET63b1a086d5->DATARMNET763f2e5fac
  100. =jiffies;hash_add_rcu(DATARMNET1fd012f255,&DATARMNET63b1a086d5->hash,
  101. DATARMNET3396919a68->DATARMNET556bcfcf8f);DATARMNET32b91c8ae6(
  102. DATARMNETe0e37fef7a);if(!DATARMNET1c62a8e2c9){unsigned long DATARMNETf71ef1b8da;
  103. DATARMNETf71ef1b8da=msecs_to_jiffies(DATARMNETe6309522cf);schedule_delayed_work(
  104. &DATARMNETac6535da80.DATARMNET190b4452e8,DATARMNETf71ef1b8da);}
  105. DATARMNET1c62a8e2c9++;return DATARMNET63b1a086d5;}static void
  106. DATARMNET11a5f0fd38(struct DATARMNETddbc1e5435*DATARMNET63b1a086d5,struct
  107. sk_buff*DATARMNET543491eb0f,bool DATARMNETd147c14c0e)__must_hold(RCU){struct
  108. tcphdr*DATARMNET668416551c=tcp_hdr(DATARMNET543491eb0f);struct rmnet_skb_cb*
  109. DATARMNET1ec4882bf7=RMNET_SKB_CB(DATARMNET543491eb0f);DATARMNET63b1a086d5->
  110. DATARMNET9c389f3b86=DATARMNET543491eb0f->hash;if(DATARMNETd147c14c0e){u32
  111. DATARMNET9076d335ab=ntohl(DATARMNET668416551c->ack_seq);WRITE_ONCE(
  112. DATARMNET63b1a086d5->DATARMNET9076d335ab,DATARMNET9076d335ab);WRITE_ONCE(
  113. DATARMNET63b1a086d5->DATARMNETfef3675ce7,DATARMNET9076d335ab);}else{u32
  114. DATARMNETfef3675ce7=ntohl(DATARMNET668416551c->seq);WRITE_ONCE(
  115. DATARMNET63b1a086d5->DATARMNETfef3675ce7,DATARMNETfef3675ce7);WRITE_ONCE(
  116. DATARMNET63b1a086d5->DATARMNET9076d335ab,DATARMNETfef3675ce7-(0xd26+209-0xdf6));
  117. DATARMNET1ec4882bf7->bif=(0xd2d+202-0xdf7);DATARMNET1ec4882bf7->ack_thresh=
  118. READ_ONCE(DATARMNET63b1a086d5->DATARMNET9a57846b4e);}}static struct
  119. DATARMNETddbc1e5435*DATARMNET9f0aaf07cc(struct DATARMNET4b40fe9cd4*
  120. DATARMNET3396919a68,struct sk_buff*DATARMNET543491eb0f,bool DATARMNETd147c14c0e)
  121. __must_hold(RCU){struct DATARMNETddbc1e5435*DATARMNET63b1a086d5;unsigned long
  122. DATARMNETfb0677cc3c;spin_lock_irqsave(&DATARMNET8e3721c47d,DATARMNETfb0677cc3c);
  123. hash_for_each_possible_rcu(DATARMNET1fd012f255,DATARMNET63b1a086d5,hash,
  124. DATARMNET3396919a68->DATARMNET556bcfcf8f){if(DATARMNET63b1a086d5->
  125. DATARMNET1717afebc7)continue;if(DATARMNET2f1039220d(&DATARMNET63b1a086d5->
  126. DATARMNET54338da2ff,DATARMNET3396919a68)){spin_unlock_irqrestore(&
  127. DATARMNET8e3721c47d,DATARMNETfb0677cc3c);return DATARMNET63b1a086d5;}}
  128. DATARMNET63b1a086d5=DATARMNETba919c78e5(DATARMNET3396919a68);
  129. spin_unlock_irqrestore(&DATARMNET8e3721c47d,DATARMNETfb0677cc3c);if(
  130. DATARMNET63b1a086d5)DATARMNET11a5f0fd38(DATARMNET63b1a086d5,DATARMNET543491eb0f,
  131. DATARMNETd147c14c0e);return DATARMNET63b1a086d5;}static struct sock*
  132. DATARMNETc0b5d624ae(struct DATARMNET4b40fe9cd4*DATARMNET3396919a68,struct
  133. net_device*DATARMNETc96400be1e){struct net*net=dev_net(DATARMNETc96400be1e);if(
  134. DATARMNET3396919a68->DATARMNET0d956cc77a==(0xd11+230-0xdf3))return
  135. inet_lookup_established(net,&tcp_hashinfo,DATARMNET3396919a68->
  136. DATARMNETdfe430c2d6,DATARMNET3396919a68->DATARMNET08e913477e,DATARMNET3396919a68
  137. ->DATARMNET2cb607d686,DATARMNET3396919a68->DATARMNETda7f7fa492,
  138. DATARMNETc96400be1e->ifindex);return __inet6_lookup_established(net,&
  139. tcp_hashinfo,&DATARMNET3396919a68->DATARMNET815cbb4bf5,DATARMNET3396919a68->
  140. DATARMNET08e913477e,&DATARMNET3396919a68->DATARMNETc3f31215b7,ntohs(
  141. DATARMNET3396919a68->DATARMNETda7f7fa492),DATARMNETc96400be1e->ifindex,
  142. (0xd2d+202-0xdf7));}static void DATARMNET31a7673e56(struct DATARMNETddbc1e5435*
  143. DATARMNET63b1a086d5,struct sk_buff*DATARMNET543491eb0f)__must_hold(RCU){struct
  144. sock*sk;if(DATARMNET543491eb0f->sk){sk=DATARMNET543491eb0f->sk;}else if(
  145. DATARMNET63b1a086d5->DATARMNETa3e9a18f1b){sk=DATARMNET63b1a086d5->
  146. DATARMNETa3e9a18f1b;}else if((sk=DATARMNETc0b5d624ae(&DATARMNET63b1a086d5->
  147. DATARMNET54338da2ff,DATARMNET543491eb0f->dev))){DATARMNET63b1a086d5->
  148. DATARMNETa3e9a18f1b=sk;}else{struct rmnet_skb_cb*DATARMNET1ec4882bf7=
  149. RMNET_SKB_CB(DATARMNET543491eb0f);DATARMNET32b91c8ae6(DATARMNETb03f9571a3);
  150. DATARMNET63b1a086d5->DATARMNET55056146f6=true;DATARMNET1ec4882bf7->tethered=true
  151. ;return;}if(!DATARMNET543491eb0f->sk){sock_hold(sk);DATARMNET543491eb0f->sk=sk;
  152. DATARMNET543491eb0f->destructor=sock_edemux;if(sk_fullsock(sk)){struct dst_entry
  153. *dst=rcu_dereference(sk->sk_rx_dst);if(dst){u32 DATARMNETc8fe0ce669=(
  154. DATARMNET63b1a086d5->DATARMNET54338da2ff.DATARMNET0d956cc77a==(0xd11+230-0xdf3))
  155. ?(0xd2d+202-0xdf7):sk->sk_rx_dst_cookie;dst=dst_check(dst,DATARMNETc8fe0ce669);}
  156. if(dst&&sk->sk_rx_dst_ifindex==DATARMNET543491eb0f->dev->ifindex)
  157. skb_dst_set_noref(DATARMNET543491eb0f,dst);}}inet_csk(sk)->icsk_ack.pending|=
  158. ICSK_ACK_NOW;DATARMNET63b1a086d5->DATARMNETb8fc35ed64++;DATARMNET32b91c8ae6(
  159. DATARMNET7797205f58);}static u32 DATARMNET62fb576113(struct sk_buff*
  160. DATARMNET543491eb0f){struct tcphdr*DATARMNET668416551c=tcp_hdr(
  161. DATARMNET543491eb0f);return DATARMNET543491eb0f->len-((u8*)DATARMNET668416551c-
  162. DATARMNET543491eb0f->data)-DATARMNET668416551c->doff*(0xd11+230-0xdf3);}static
  163. void DATARMNET55fda9e01e(struct DATARMNETddbc1e5435*DATARMNET63b1a086d5,struct
  164. sk_buff*DATARMNET543491eb0f,bool DATARMNETd147c14c0e)__must_hold(RCU){struct
  165. rmnet_skb_cb*DATARMNET1ec4882bf7=RMNET_SKB_CB(DATARMNET543491eb0f);struct tcphdr
  166. *DATARMNET668416551c=tcp_hdr(DATARMNET543491eb0f);u32 DATARMNET26945497d8=ntohl(
  167. DATARMNET668416551c->seq);u32 DATARMNETb1b0ee1b2d=ntohl(DATARMNET668416551c->
  168. ack_seq);u32 DATARMNETb6ff6d25f8=READ_ONCE(DATARMNET63b1a086d5->
  169. DATARMNETfef3675ce7);u32 DATARMNET91c1d5c029=READ_ONCE(DATARMNET63b1a086d5->
  170. DATARMNET9076d335ab);u32 DATARMNET9445bc443c=READ_ONCE(DATARMNET63b1a086d5->
  171. DATARMNET9a57846b4e);DATARMNET63b1a086d5->DATARMNET763f2e5fac=jiffies;if(
  172. DATARMNET63b1a086d5->DATARMNET55056146f6){DATARMNET1ec4882bf7->tethered=true;
  173. return;}if(DATARMNETd147c14c0e){if(after(DATARMNETb1b0ee1b2d,DATARMNET91c1d5c029
  174. )){u32 DATARMNET4e557c82d6=DATARMNETb6ff6d25f8-DATARMNETb1b0ee1b2d;if(
  175. DATARMNET4e557c82d6>DATARMNET9445bc443c)DATARMNET31a7673e56(DATARMNET63b1a086d5,
  176. DATARMNET543491eb0f);WRITE_ONCE(DATARMNET63b1a086d5->DATARMNET9076d335ab,
  177. DATARMNETb1b0ee1b2d);}}else{u32 DATARMNET4e557c82d6=DATARMNETb6ff6d25f8-
  178. DATARMNET91c1d5c029;if(after(DATARMNET26945497d8,DATARMNETb6ff6d25f8)){
  179. DATARMNET4e557c82d6=DATARMNET26945497d8-DATARMNET91c1d5c029;DATARMNET4e557c82d6
  180. +=DATARMNET62fb576113(DATARMNET543491eb0f);if(DATARMNET4e557c82d6>
  181. DATARMNET9445bc443c)DATARMNET31a7673e56(DATARMNET63b1a086d5,DATARMNET543491eb0f)
  182. ;WRITE_ONCE(DATARMNET63b1a086d5->DATARMNETfef3675ce7,DATARMNET26945497d8);}
  183. DATARMNET1ec4882bf7->bif=DATARMNET4e557c82d6;DATARMNET1ec4882bf7->ack_thresh=
  184. DATARMNET9445bc443c;DATARMNET1ec4882bf7->ack_forced=DATARMNET63b1a086d5->
  185. DATARMNETb8fc35ed64;}}void DATARMNET9250714999(struct sk_buff*
  186. DATARMNET543491eb0f){struct DATARMNET4b40fe9cd4 DATARMNET3396919a68={};struct
  187. DATARMNETddbc1e5435*DATARMNET63b1a086d5;struct tcphdr*DATARMNET668416551c;u32
  188. DATARMNETd660a1a629;if(!skb_transport_header_was_set(DATARMNET543491eb0f)||
  189. DATARMNET543491eb0f->ip_summed==CHECKSUM_NONE)return;DATARMNET668416551c=tcp_hdr
  190. (DATARMNET543491eb0f);if(DATARMNET668416551c->syn)return;DATARMNETd660a1a629=
  191. DATARMNET62fb576113(DATARMNET543491eb0f);if(!DATARMNETd660a1a629&&
  192. DATARMNET668416551c->ack)return;DATARMNET3396919a68.DATARMNET08e913477e=
  193. DATARMNET668416551c->source;DATARMNET3396919a68.DATARMNETda7f7fa492=
  194. DATARMNET668416551c->dest;if(DATARMNET543491eb0f->protocol==htons(ETH_P_IP)){
  195. struct iphdr*DATARMNET86f1f2cdc9=ip_hdr(DATARMNET543491eb0f);DATARMNET3396919a68
  196. .DATARMNETdfe430c2d6=DATARMNET86f1f2cdc9->saddr;DATARMNET3396919a68.
  197. DATARMNET2cb607d686=DATARMNET86f1f2cdc9->daddr;DATARMNET3396919a68.
  198. DATARMNET0d956cc77a=(0xd11+230-0xdf3);}else{struct ipv6hdr*DATARMNETbf55123e5b=
  199. ipv6_hdr(DATARMNET543491eb0f);memcpy(&DATARMNET3396919a68.DATARMNET815cbb4bf5,&
  200. DATARMNETbf55123e5b->saddr,sizeof(DATARMNETbf55123e5b->saddr));memcpy(&
  201. DATARMNET3396919a68.DATARMNETc3f31215b7,&DATARMNETbf55123e5b->daddr,sizeof(
  202. DATARMNETbf55123e5b->daddr));DATARMNET3396919a68.DATARMNET0d956cc77a=
  203. (0xd03+244-0xdf1);}rcu_read_lock();DATARMNET63b1a086d5=DATARMNET9f0aaf07cc(&
  204. DATARMNET3396919a68,DATARMNET543491eb0f,false);if(DATARMNET63b1a086d5){if(likely
  205. (!DATARMNETd92eab34a9(DATARMNET63b1a086d5,jiffies)))DATARMNET55fda9e01e(
  206. DATARMNET63b1a086d5,DATARMNET543491eb0f,false);}rcu_read_unlock();}void
  207. DATARMNET9d574e64b1(struct sk_buff*DATARMNET543491eb0f){struct
  208. DATARMNET4b40fe9cd4 DATARMNET3396919a68={};struct DATARMNETddbc1e5435*
  209. DATARMNET63b1a086d5;struct tcphdr*DATARMNET668416551c;u32 DATARMNETd660a1a629;if
  210. (!skb_transport_header_was_set(DATARMNET543491eb0f))return;DATARMNET668416551c=
  211. tcp_hdr(DATARMNET543491eb0f);if(DATARMNET668416551c->syn)return;
  212. DATARMNETd660a1a629=DATARMNET62fb576113(DATARMNET543491eb0f);if(
  213. DATARMNETd660a1a629||!DATARMNET668416551c->ack)return;DATARMNET3396919a68.
  214. DATARMNET08e913477e=DATARMNET668416551c->dest;DATARMNET3396919a68.
  215. DATARMNETda7f7fa492=DATARMNET668416551c->source;if(DATARMNET543491eb0f->protocol
  216. ==htons(ETH_P_IP)){struct iphdr*DATARMNET86f1f2cdc9=ip_hdr(DATARMNET543491eb0f);
  217. DATARMNET3396919a68.DATARMNETdfe430c2d6=DATARMNET86f1f2cdc9->daddr;
  218. DATARMNET3396919a68.DATARMNET2cb607d686=DATARMNET86f1f2cdc9->saddr;
  219. DATARMNET3396919a68.DATARMNET0d956cc77a=(0xd11+230-0xdf3);}else{struct ipv6hdr*
  220. DATARMNETbf55123e5b=ipv6_hdr(DATARMNET543491eb0f);memcpy(&DATARMNET3396919a68.
  221. DATARMNET815cbb4bf5,&DATARMNETbf55123e5b->daddr,sizeof(DATARMNETbf55123e5b->
  222. daddr));memcpy(&DATARMNET3396919a68.DATARMNETc3f31215b7,&DATARMNETbf55123e5b->
  223. saddr,sizeof(DATARMNETbf55123e5b->saddr));DATARMNET3396919a68.
  224. DATARMNET0d956cc77a=(0xd03+244-0xdf1);}rcu_read_lock();DATARMNET63b1a086d5=
  225. DATARMNET9f0aaf07cc(&DATARMNET3396919a68,DATARMNET543491eb0f,true);if(
  226. DATARMNET63b1a086d5){if(likely(!DATARMNETd92eab34a9(DATARMNET63b1a086d5,jiffies)
  227. ))DATARMNET55fda9e01e(DATARMNET63b1a086d5,DATARMNET543491eb0f,true);}
  228. rcu_read_unlock();}void DATARMNET7fa1835595(u32 DATARMNET556bcfcf8f,u32
  229. DATARMNET9445bc443c){struct DATARMNETddbc1e5435*DATARMNET63b1a086d5;int
  230. DATARMNET5c2fd31d7b;rcu_read_lock();hash_for_each_rcu(DATARMNET1fd012f255,
  231. DATARMNET5c2fd31d7b,DATARMNET63b1a086d5,hash){if(DATARMNET63b1a086d5->
  232. DATARMNET9c389f3b86==DATARMNET556bcfcf8f)WRITE_ONCE(DATARMNET63b1a086d5->
  233. DATARMNET9a57846b4e,DATARMNET9445bc443c);}rcu_read_unlock();}int
  234. DATARMNET7e9995246e(void){INIT_DELAYED_WORK(&DATARMNETac6535da80.
  235. DATARMNET190b4452e8,DATARMNETfec9085d8e);return(0xd2d+202-0xdf7);}void
  236. DATARMNET38bb6f2b7a(void){cancel_delayed_work_sync(&DATARMNETac6535da80.
  237. DATARMNET190b4452e8);DATARMNETac6535da80.DATARMNETcd94e0d3c7=true;
  238. schedule_delayed_work(&DATARMNETac6535da80.DATARMNET190b4452e8,(0xd2d+202-0xdf7)
  239. );cancel_delayed_work_sync(&DATARMNETac6535da80.DATARMNET190b4452e8);}