rmnet_sch_main.c 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  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/module.h>
  13. #include <linux/types.h>
  14. #include <linux/kernel.h>
  15. #include <linux/string.h>
  16. #include <linux/errno.h>
  17. #include <linux/skbuff.h>
  18. #include <linux/rtnetlink.h>
  19. #include <net/pkt_sched.h>
  20. static char*verinfo[]={"\x62\x31\x30\x66\x32\x65\x61\x32",
  21. "\x65\x36\x33\x37\x31\x64\x34\x30","\x37\x34\x31\x35\x39\x32\x31\x63",
  22. "\x61\x65\x32\x34\x34\x61\x39\x64"};module_param_array(verinfo,charp,NULL,
  23. (0xcb7+5769-0x221c));MODULE_PARM_DESC(verinfo,
  24. "\x56\x65\x72\x73\x69\x6f\x6e\x20\x6f\x66\x20\x74\x68\x65\x20\x64\x72\x69\x76\x65\x72"
  25. );static const char*DATARMNETf1bb41174a="\x31\x2e\x32";
  26. #define DATARMNETe632b2e0b0 (0xd11+230-0xdf3)
  27. static const u8 DATARMNET93bdeed8cb[TC_PRIO_MAX+(0xd26+209-0xdf6)]={
  28. (0xd18+223-0xdf4),(0xd18+223-0xdf4),(0xd18+223-0xdf4),(0xd18+223-0xdf4),
  29. (0xd18+223-0xdf4),(0xd18+223-0xdf4),(0xd2d+202-0xdf7),(0xd26+209-0xdf6),
  30. (0xd1f+216-0xdf5),(0xd18+223-0xdf4),(0xd18+223-0xdf4),(0xd18+223-0xdf4),
  31. (0xd18+223-0xdf4),(0xd18+223-0xdf4),(0xd18+223-0xdf4),(0xd18+223-0xdf4)};static
  32. const int DATARMNET91bbdde74c[DATARMNETe632b2e0b0]={(0xbf7+4421-0x1c3c)*
  33. (0xdf7+2629-0x143c),(0xef7+694-0x112d)*(0xdf7+2629-0x143c),(0xef7+1142-0x132d)*
  34. (0xdf7+2629-0x143c),(0xeb7+1174-0x132d)*(0xdf7+2629-0x143c)};static const int
  35. DATARMNET9dd1382d86[DATARMNETe632b2e0b0]={(0xd35+210-0xdff),(0xd03+244-0xdf1),
  36. (0xd11+230-0xdf3),(0xd1f+216-0xdf5)};static const int DATARMNET14ed95ab67[
  37. DATARMNETe632b2e0b0]={(0xd11+230-0xdf3),(0xd18+223-0xdf4),(0xd1f+216-0xdf5),
  38. (0xd26+209-0xdf6)};struct DATARMNET93da852cc2{struct qdisc_skb_head q;int
  39. DATARMNET1de7b3d891;int DATARMNETf9afebb887;unsigned int DATARMNETb93c9b44d9;
  40. unsigned int DATARMNET04fa439380;};struct DATARMNET74e95d25df{struct
  41. DATARMNET93da852cc2 DATARMNETb4180393e4[DATARMNETe632b2e0b0];};static int
  42. DATARMNETdaae0b9ea8(struct DATARMNET74e95d25df*DATARMNETe823dcf978){int
  43. DATARMNET70fa801d65=DATARMNETe632b2e0b0;int DATARMNET3c5d4329d8=
  44. DATARMNETe632b2e0b0;int DATARMNET2372d14a3d,DATARMNET713b43476b,
  45. DATARMNETdc41089b89=-(0xd26+209-0xdf6);for(DATARMNET2372d14a3d=(0xd2d+202-0xdf7)
  46. ;DATARMNET2372d14a3d<DATARMNETe632b2e0b0;DATARMNET2372d14a3d++){if(
  47. DATARMNETe823dcf978->DATARMNETb4180393e4[DATARMNET2372d14a3d].q.qlen>
  48. DATARMNETe823dcf978->DATARMNETb4180393e4[DATARMNET2372d14a3d].
  49. DATARMNET04fa439380){DATARMNET713b43476b=DATARMNETe823dcf978->
  50. DATARMNETb4180393e4[DATARMNET2372d14a3d].q.qlen-DATARMNETe823dcf978->
  51. DATARMNETb4180393e4[DATARMNET2372d14a3d].DATARMNET04fa439380;if(
  52. DATARMNET713b43476b>=DATARMNETdc41089b89){DATARMNETdc41089b89=
  53. DATARMNET713b43476b;DATARMNET70fa801d65=DATARMNET2372d14a3d;}}if(
  54. DATARMNETe823dcf978->DATARMNETb4180393e4[DATARMNET2372d14a3d].q.qlen>
  55. DATARMNETe823dcf978->DATARMNETb4180393e4[DATARMNET2372d14a3d].
  56. DATARMNETb93c9b44d9)DATARMNET3c5d4329d8=DATARMNET2372d14a3d;}if(
  57. DATARMNET70fa801d65<DATARMNETe632b2e0b0)return DATARMNET70fa801d65;return
  58. DATARMNET3c5d4329d8;}static inline void DATARMNET8c1d8c9f65(struct
  59. DATARMNET74e95d25df*DATARMNETe823dcf978,int DATARMNET2372d14a3d){
  60. DATARMNETe823dcf978->DATARMNETb4180393e4[DATARMNET2372d14a3d].
  61. DATARMNET1de7b3d891=DATARMNET9dd1382d86[DATARMNET2372d14a3d];DATARMNETe823dcf978
  62. ->DATARMNETb4180393e4[DATARMNET2372d14a3d].DATARMNETf9afebb887=
  63. DATARMNET91bbdde74c[DATARMNET2372d14a3d];}static inline void DATARMNET60cff0042c
  64. (struct DATARMNET74e95d25df*DATARMNETe823dcf978,int DATARMNET2372d14a3d,unsigned
  65. int DATARMNETf9d25d31ff){DATARMNETe823dcf978->DATARMNETb4180393e4[
  66. DATARMNET2372d14a3d].DATARMNETb93c9b44d9=DATARMNETf9d25d31ff/(0xd27+224-0xdfd)*
  67. DATARMNET14ed95ab67[DATARMNET2372d14a3d];DATARMNETe823dcf978->
  68. DATARMNETb4180393e4[DATARMNET2372d14a3d].DATARMNET04fa439380=DATARMNETe823dcf978
  69. ->DATARMNETb4180393e4[DATARMNET2372d14a3d].DATARMNETb93c9b44d9<<
  70. (0xd26+209-0xdf6);}static int DATARMNET3a797cc4e9(struct sk_buff*
  71. DATARMNET543491eb0f,struct Qdisc*DATARMNET9b0193c8c4,struct sk_buff**
  72. DATARMNET6af05df5b3){struct DATARMNET74e95d25df*DATARMNETe823dcf978=qdisc_priv(
  73. DATARMNET9b0193c8c4);unsigned int DATARMNET5affe290b8=qdisc_pkt_len(
  74. DATARMNET543491eb0f);int DATARMNETba251b7c9f;int DATARMNETa9b7aedc43;struct
  75. sk_buff*DATARMNET7495e55ca2;DATARMNETba251b7c9f=DATARMNET93bdeed8cb[
  76. DATARMNET543491eb0f->priority&TC_PRIO_MAX];if(unlikely(DATARMNET9b0193c8c4->q.
  77. qlen>=qdisc_dev(DATARMNET9b0193c8c4)->tx_queue_len)){DATARMNETa9b7aedc43=
  78. DATARMNETdaae0b9ea8(DATARMNETe823dcf978);if(DATARMNETa9b7aedc43<
  79. DATARMNETe632b2e0b0&&DATARMNETa9b7aedc43!=DATARMNETba251b7c9f){
  80. DATARMNET7495e55ca2=__qdisc_dequeue_head(&DATARMNETe823dcf978->
  81. DATARMNETb4180393e4[DATARMNETa9b7aedc43].q);if(likely(DATARMNET7495e55ca2)){
  82. DATARMNET9b0193c8c4->qstats.backlog-=qdisc_pkt_len(DATARMNET7495e55ca2);
  83. DATARMNET9b0193c8c4->q.qlen--;qdisc_drop(DATARMNET7495e55ca2,DATARMNET9b0193c8c4
  84. ,DATARMNET6af05df5b3);}}else{return qdisc_drop(DATARMNET543491eb0f,
  85. DATARMNET9b0193c8c4,DATARMNET6af05df5b3);}}__qdisc_enqueue_tail(
  86. DATARMNET543491eb0f,&DATARMNETe823dcf978->DATARMNETb4180393e4[
  87. DATARMNETba251b7c9f].q);qdisc_update_stats_at_enqueue(DATARMNET9b0193c8c4,
  88. DATARMNET5affe290b8);return NET_XMIT_SUCCESS;}static u8 DATARMNETf9ac3daa83(
  89. struct DATARMNET74e95d25df*DATARMNETe823dcf978){int DATARMNET2372d14a3d,
  90. DATARMNET70fa801d65=DATARMNETe632b2e0b0;for(DATARMNET2372d14a3d=
  91. (0xd2d+202-0xdf7);DATARMNET2372d14a3d<DATARMNETe632b2e0b0;DATARMNET2372d14a3d++)
  92. {if(!DATARMNETe823dcf978->DATARMNETb4180393e4[DATARMNET2372d14a3d].q.qlen)
  93. continue;if(DATARMNETe823dcf978->DATARMNETb4180393e4[DATARMNET2372d14a3d].
  94. DATARMNET1de7b3d891<=(0xd2d+202-0xdf7)||DATARMNETe823dcf978->DATARMNETb4180393e4
  95. [DATARMNET2372d14a3d].DATARMNETf9afebb887<=(0xd2d+202-0xdf7)){if(
  96. DATARMNET2372d14a3d<DATARMNET70fa801d65)DATARMNET70fa801d65=DATARMNET2372d14a3d;
  97. continue;}return DATARMNET2372d14a3d;}for(DATARMNET2372d14a3d=(0xd2d+202-0xdf7);
  98. DATARMNET2372d14a3d<DATARMNETe632b2e0b0;DATARMNET2372d14a3d++)
  99. DATARMNET8c1d8c9f65(DATARMNETe823dcf978,DATARMNET2372d14a3d);return
  100. DATARMNET70fa801d65;}static struct sk_buff*DATARMNET11bbc6360d(struct Qdisc*
  101. DATARMNET9b0193c8c4){struct DATARMNET74e95d25df*DATARMNETe823dcf978=qdisc_priv(
  102. DATARMNET9b0193c8c4);struct sk_buff*DATARMNET543491eb0f=NULL;u8
  103. DATARMNET2372d14a3d;DATARMNET2372d14a3d=DATARMNETf9ac3daa83(DATARMNETe823dcf978)
  104. ;if(DATARMNET2372d14a3d<DATARMNETe632b2e0b0){DATARMNET543491eb0f=
  105. __qdisc_dequeue_head(&DATARMNETe823dcf978->DATARMNETb4180393e4[
  106. DATARMNET2372d14a3d].q);if(likely(DATARMNET543491eb0f)){DATARMNETe823dcf978->
  107. DATARMNETb4180393e4[DATARMNET2372d14a3d].DATARMNET1de7b3d891--;
  108. DATARMNETe823dcf978->DATARMNETb4180393e4[DATARMNET2372d14a3d].
  109. DATARMNETf9afebb887-=qdisc_pkt_len(DATARMNET543491eb0f);
  110. qdisc_update_stats_at_dequeue(DATARMNET9b0193c8c4,DATARMNET543491eb0f);}}return
  111. DATARMNET543491eb0f;}static struct sk_buff*DATARMNET5842e6aac7(struct Qdisc*
  112. DATARMNET9b0193c8c4){struct DATARMNET74e95d25df*DATARMNETe823dcf978=qdisc_priv(
  113. DATARMNET9b0193c8c4);struct sk_buff*DATARMNET543491eb0f=NULL;u8
  114. DATARMNET2372d14a3d;DATARMNET2372d14a3d=DATARMNETf9ac3daa83(DATARMNETe823dcf978)
  115. ;if(DATARMNET2372d14a3d<DATARMNETe632b2e0b0)DATARMNET543491eb0f=
  116. DATARMNETe823dcf978->DATARMNETb4180393e4[DATARMNET2372d14a3d].q.head;return
  117. DATARMNET543491eb0f;}static int DATARMNET757a7de682(struct Qdisc*
  118. DATARMNET9b0193c8c4,struct nlattr*DATARMNET8bdeb8bf5c,struct netlink_ext_ack*
  119. DATARMNET79a1f177ed){struct DATARMNET74e95d25df*DATARMNETe823dcf978=qdisc_priv(
  120. DATARMNET9b0193c8c4);int DATARMNET2372d14a3d;for(DATARMNET2372d14a3d=
  121. (0xd2d+202-0xdf7);DATARMNET2372d14a3d<DATARMNETe632b2e0b0;DATARMNET2372d14a3d++)
  122. {DATARMNET8c1d8c9f65(DATARMNETe823dcf978,DATARMNET2372d14a3d);
  123. DATARMNET60cff0042c(DATARMNETe823dcf978,DATARMNET2372d14a3d,qdisc_dev(
  124. DATARMNET9b0193c8c4)->tx_queue_len);}DATARMNET9b0193c8c4->flags|=
  125. TCQ_F_CAN_BYPASS;return(0xd2d+202-0xdf7);}static void DATARMNET9593ab9587(struct
  126. Qdisc*DATARMNET9b0193c8c4){struct DATARMNET74e95d25df*DATARMNETe823dcf978=
  127. qdisc_priv(DATARMNET9b0193c8c4);int DATARMNET2372d14a3d;for(DATARMNET2372d14a3d=
  128. (0xd2d+202-0xdf7);DATARMNET2372d14a3d<DATARMNETe632b2e0b0;DATARMNET2372d14a3d++)
  129. {kfree_skb_list(DATARMNETe823dcf978->DATARMNETb4180393e4[DATARMNET2372d14a3d].q.
  130. head);DATARMNETe823dcf978->DATARMNETb4180393e4[DATARMNET2372d14a3d].q.head=NULL;
  131. DATARMNETe823dcf978->DATARMNETb4180393e4[DATARMNET2372d14a3d].q.tail=NULL;
  132. DATARMNETe823dcf978->DATARMNETb4180393e4[DATARMNET2372d14a3d].q.qlen=
  133. (0xd2d+202-0xdf7);DATARMNET8c1d8c9f65(DATARMNETe823dcf978,DATARMNET2372d14a3d);
  134. DATARMNET60cff0042c(DATARMNETe823dcf978,DATARMNET2372d14a3d,qdisc_dev(
  135. DATARMNET9b0193c8c4)->tx_queue_len);}}static int DATARMNET6647342968(struct
  136. Qdisc*DATARMNET9b0193c8c4,unsigned int qlen){struct DATARMNET74e95d25df*
  137. DATARMNETe823dcf978=qdisc_priv(DATARMNET9b0193c8c4);int DATARMNET2372d14a3d;for(
  138. DATARMNET2372d14a3d=(0xd2d+202-0xdf7);DATARMNET2372d14a3d<DATARMNETe632b2e0b0;
  139. DATARMNET2372d14a3d++)DATARMNET60cff0042c(DATARMNETe823dcf978,
  140. DATARMNET2372d14a3d,qlen);return(0xd2d+202-0xdf7);}static struct Qdisc_ops
  141. DATARMNET9afaec21de __read_mostly={.id="\x72\x6d\x6e\x65\x74\x5f\x73\x63\x68",.
  142. priv_size=sizeof(struct DATARMNET74e95d25df),.enqueue=DATARMNET3a797cc4e9,.
  143. dequeue=DATARMNET11bbc6360d,.peek=DATARMNET5842e6aac7,.init=DATARMNET757a7de682,
  144. .reset=DATARMNET9593ab9587,.change_tx_queue_len=DATARMNET6647342968,.owner=
  145. THIS_MODULE,};static int __init DATARMNETe97da0a844(void){pr_info(
  146. "\x73\x63\x68\x3a\x20\x69\x6e\x69\x74\x20\x28\x25\x73\x29" "\n",
  147. DATARMNETf1bb41174a);return register_qdisc(&DATARMNET9afaec21de);}static void
  148. __exit DATARMNET1dc9099e88(void){unregister_qdisc(&DATARMNET9afaec21de);}
  149. MODULE_LICENSE("\x47\x50\x4c\x20\x76\x32");module_init(DATARMNETe97da0a844);
  150. module_exit(DATARMNET1dc9099e88);