rmnet_sch_main.c 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  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 const char*DATARMNETf1bb41174a="\x31\x2e\x30";
  21. #define DATARMNETe632b2e0b0 (0xd11+230-0xdf3)
  22. static const u8 DATARMNET93bdeed8cb[TC_PRIO_MAX+(0xd26+209-0xdf6)]={
  23. (0xd18+223-0xdf4),(0xd18+223-0xdf4),(0xd18+223-0xdf4),(0xd18+223-0xdf4),
  24. (0xd18+223-0xdf4),(0xd18+223-0xdf4),(0xd2d+202-0xdf7),(0xd26+209-0xdf6),
  25. (0xd1f+216-0xdf5),(0xd18+223-0xdf4),(0xd18+223-0xdf4),(0xd18+223-0xdf4),
  26. (0xd18+223-0xdf4),(0xd18+223-0xdf4),(0xd18+223-0xdf4),(0xd18+223-0xdf4)};static
  27. const int DATARMNET91bbdde74c[DATARMNETe632b2e0b0]={(0xbf7+4421-0x1c3c)*
  28. (0xdf7+2629-0x143c),(0xef7+694-0x112d)*(0xdf7+2629-0x143c),(0xef7+1142-0x132d)*
  29. (0xdf7+2629-0x143c),(0xeb7+1174-0x132d)*(0xdf7+2629-0x143c)};static const int
  30. DATARMNET9dd1382d86[DATARMNETe632b2e0b0]={(0xd35+210-0xdff),(0xd03+244-0xdf1),
  31. (0xd11+230-0xdf3),(0xd1f+216-0xdf5)};struct DATARMNET74e95d25df{struct
  32. qdisc_skb_head DATARMNETb4180393e4[DATARMNETe632b2e0b0];int DATARMNET1de7b3d891[
  33. DATARMNETe632b2e0b0];int DATARMNETf9afebb887[DATARMNETe632b2e0b0];};static int
  34. DATARMNET3a797cc4e9(struct sk_buff*DATARMNET543491eb0f,struct Qdisc*
  35. DATARMNET9b0193c8c4,struct sk_buff**DATARMNET6af05df5b3){struct
  36. DATARMNET74e95d25df*DATARMNETe823dcf978=qdisc_priv(DATARMNET9b0193c8c4);unsigned
  37. int DATARMNET5affe290b8=qdisc_pkt_len(DATARMNET543491eb0f);struct
  38. qdisc_skb_head*q;if(likely(DATARMNET9b0193c8c4->q.qlen<qdisc_dev(
  39. DATARMNET9b0193c8c4)->tx_queue_len)){q=&DATARMNETe823dcf978->DATARMNETb4180393e4
  40. [DATARMNET93bdeed8cb[DATARMNET543491eb0f->priority&TC_PRIO_MAX]];
  41. __qdisc_enqueue_tail(DATARMNET543491eb0f,q);qdisc_update_stats_at_enqueue(
  42. DATARMNET9b0193c8c4,DATARMNET5affe290b8);return NET_XMIT_SUCCESS;}return
  43. qdisc_drop(DATARMNET543491eb0f,DATARMNET9b0193c8c4,DATARMNET6af05df5b3);}static
  44. u8 DATARMNETf9ac3daa83(struct DATARMNET74e95d25df*DATARMNETe823dcf978){int
  45. DATARMNET2372d14a3d,DATARMNET70fa801d65=DATARMNETe632b2e0b0;for(
  46. DATARMNET2372d14a3d=(0xd2d+202-0xdf7);DATARMNET2372d14a3d<DATARMNETe632b2e0b0;
  47. DATARMNET2372d14a3d++){if(!DATARMNETe823dcf978->DATARMNETb4180393e4[
  48. DATARMNET2372d14a3d].qlen)continue;if(DATARMNETe823dcf978->DATARMNET1de7b3d891[
  49. DATARMNET2372d14a3d]<=(0xd2d+202-0xdf7)||DATARMNETe823dcf978->
  50. DATARMNETf9afebb887[DATARMNET2372d14a3d]<=(0xd2d+202-0xdf7)){if(
  51. DATARMNET2372d14a3d<DATARMNET70fa801d65)DATARMNET70fa801d65=DATARMNET2372d14a3d;
  52. continue;}return DATARMNET2372d14a3d;}for(DATARMNET2372d14a3d=(0xd2d+202-0xdf7);
  53. DATARMNET2372d14a3d<DATARMNETe632b2e0b0;DATARMNET2372d14a3d++){
  54. DATARMNETe823dcf978->DATARMNET1de7b3d891[DATARMNET2372d14a3d]=
  55. DATARMNET9dd1382d86[DATARMNET2372d14a3d];DATARMNETe823dcf978->
  56. DATARMNETf9afebb887[DATARMNET2372d14a3d]=DATARMNET91bbdde74c[DATARMNET2372d14a3d
  57. ];}return DATARMNET70fa801d65;}static struct sk_buff*DATARMNET11bbc6360d(struct
  58. Qdisc*DATARMNET9b0193c8c4){struct DATARMNET74e95d25df*DATARMNETe823dcf978=
  59. qdisc_priv(DATARMNET9b0193c8c4);struct sk_buff*DATARMNET543491eb0f=NULL;u8
  60. DATARMNET2372d14a3d;DATARMNET2372d14a3d=DATARMNETf9ac3daa83(DATARMNETe823dcf978)
  61. ;if(DATARMNET2372d14a3d<DATARMNETe632b2e0b0){DATARMNET543491eb0f=
  62. __qdisc_dequeue_head(&DATARMNETe823dcf978->DATARMNETb4180393e4[
  63. DATARMNET2372d14a3d]);if(likely(DATARMNET543491eb0f)){DATARMNETe823dcf978->
  64. DATARMNET1de7b3d891[DATARMNET2372d14a3d]--;DATARMNETe823dcf978->
  65. DATARMNETf9afebb887[DATARMNET2372d14a3d]-=qdisc_pkt_len(DATARMNET543491eb0f);
  66. qdisc_update_stats_at_dequeue(DATARMNET9b0193c8c4,DATARMNET543491eb0f);}}return
  67. DATARMNET543491eb0f;}static struct sk_buff*DATARMNET5842e6aac7(struct Qdisc*
  68. DATARMNET9b0193c8c4){struct DATARMNET74e95d25df*DATARMNETe823dcf978=qdisc_priv(
  69. DATARMNET9b0193c8c4);struct sk_buff*DATARMNET543491eb0f=NULL;u8
  70. DATARMNET2372d14a3d;DATARMNET2372d14a3d=DATARMNETf9ac3daa83(DATARMNETe823dcf978)
  71. ;if(DATARMNET2372d14a3d<DATARMNETe632b2e0b0)DATARMNET543491eb0f=
  72. DATARMNETe823dcf978->DATARMNETb4180393e4[DATARMNET2372d14a3d].head;return
  73. DATARMNET543491eb0f;}static int DATARMNET757a7de682(struct Qdisc*
  74. DATARMNET9b0193c8c4,struct nlattr*DATARMNET8bdeb8bf5c,struct netlink_ext_ack*
  75. DATARMNET79a1f177ed){struct DATARMNET74e95d25df*DATARMNETe823dcf978=qdisc_priv(
  76. DATARMNET9b0193c8c4);int DATARMNET2372d14a3d;for(DATARMNET2372d14a3d=
  77. (0xd2d+202-0xdf7);DATARMNET2372d14a3d<DATARMNETe632b2e0b0;DATARMNET2372d14a3d++)
  78. {qdisc_skb_head_init(&DATARMNETe823dcf978->DATARMNETb4180393e4[
  79. DATARMNET2372d14a3d]);DATARMNETe823dcf978->DATARMNET1de7b3d891[
  80. DATARMNET2372d14a3d]=DATARMNET9dd1382d86[DATARMNET2372d14a3d];
  81. DATARMNETe823dcf978->DATARMNETf9afebb887[DATARMNET2372d14a3d]=
  82. DATARMNET91bbdde74c[DATARMNET2372d14a3d];}DATARMNET9b0193c8c4->flags|=
  83. TCQ_F_CAN_BYPASS;return(0xd2d+202-0xdf7);}static void DATARMNET9593ab9587(struct
  84. Qdisc*DATARMNET9b0193c8c4){struct DATARMNET74e95d25df*DATARMNETe823dcf978=
  85. qdisc_priv(DATARMNET9b0193c8c4);int DATARMNET2372d14a3d;for(DATARMNET2372d14a3d=
  86. (0xd2d+202-0xdf7);DATARMNET2372d14a3d<DATARMNETe632b2e0b0;DATARMNET2372d14a3d++)
  87. {kfree_skb_list(DATARMNETe823dcf978->DATARMNETb4180393e4[DATARMNET2372d14a3d].
  88. head);qdisc_skb_head_init(&DATARMNETe823dcf978->DATARMNETb4180393e4[
  89. DATARMNET2372d14a3d]);DATARMNETe823dcf978->DATARMNET1de7b3d891[
  90. DATARMNET2372d14a3d]=DATARMNET9dd1382d86[DATARMNET2372d14a3d];
  91. DATARMNETe823dcf978->DATARMNETf9afebb887[DATARMNET2372d14a3d]=
  92. DATARMNET91bbdde74c[DATARMNET2372d14a3d];}}static struct Qdisc_ops
  93. DATARMNET9afaec21de __read_mostly={.id="\x72\x6d\x6e\x65\x74\x5f\x73\x63\x68",.
  94. priv_size=sizeof(struct DATARMNET74e95d25df),.enqueue=DATARMNET3a797cc4e9,.
  95. dequeue=DATARMNET11bbc6360d,.peek=DATARMNET5842e6aac7,.init=DATARMNET757a7de682,
  96. .reset=DATARMNET9593ab9587,.owner=THIS_MODULE,};static int __init
  97. DATARMNETe97da0a844(void){pr_info(
  98. "\x73\x63\x68\x3a\x20\x69\x6e\x69\x74\x20\x28\x25\x73\x29" "\n",
  99. DATARMNETf1bb41174a);return register_qdisc(&DATARMNET9afaec21de);}static void
  100. __exit DATARMNET1dc9099e88(void){unregister_qdisc(&DATARMNET9afaec21de);}
  101. MODULE_LICENSE("\x47\x50\x4c\x20\x76\x32");module_init(DATARMNETe97da0a844);
  102. module_exit(DATARMNET1dc9099e88);