rmnet_offload_tcp.c 5.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. /* Copyright (c) 2018-2021, The Linux Foundation. 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/list.h>
  13. #include "rmnet_descriptor.h"
  14. #include "rmnet_offload_main.h"
  15. #include "rmnet_offload_engine.h"
  16. #include "rmnet_offload_stats.h"
  17. #include "rmnet_offload_knob.h"
  18. union DATARMNETe0a7777e12{struct DATARMNETd2991e8952 DATARMNETe31a04a369;u8
  19. DATARMNET021aa8e68d[(0xf07+1090-0x130d)];};static bool DATARMNET2818ea93ec(
  20. struct DATARMNETd812bcdbb5*DATARMNET5fe4c722a8){struct DATARMNETd2991e8952*
  21. DATARMNET2e7cc88971,DATARMNETd1ff6cd568;__be32 DATARMNETa8eeab014d;u8
  22. DATARMNETfb0677cc3c;DATARMNET2e7cc88971=rmnet_frag_header_ptr(
  23. DATARMNET5fe4c722a8->DATARMNET719f68fb88,DATARMNET5fe4c722a8->
  24. DATARMNET144d119066.DATARMNET4ca5ac9de1,sizeof(*DATARMNET2e7cc88971),&
  25. DATARMNETd1ff6cd568);if(!DATARMNET2e7cc88971)return true;DATARMNETa8eeab014d=
  26. (0xbf7+4796-0x1e04);DATARMNETfb0677cc3c=DATARMNET2e7cc88971->DATARMNETd570802f3d
  27. ;if(DATARMNET5fe4c722a8->DATARMNET719f68fb88->tcp_flags_set)DATARMNETfb0677cc3c=
  28. (u8)ntohs(DATARMNET5fe4c722a8->DATARMNET719f68fb88->tcp_flags);if((!
  29. DATARMNET5fe4c722a8->DATARMNET1ef22e4c76&&(DATARMNETfb0677cc3c&
  30. (0xeb7+1158-0x132d)))||(DATARMNETfb0677cc3c&DATARMNETa8eeab014d))return true;
  31. return false;}static bool DATARMNET829fcf5939(struct DATARMNETd7c9631acd*
  32. DATARMNETaa568481cf,struct DATARMNETd812bcdbb5*DATARMNET5fe4c722a8){union
  33. DATARMNETe0a7777e12*DATARMNET699c2c62cd,DATARMNETee66845de4;union
  34. DATARMNETe0a7777e12*DATARMNET8814564ab9,DATARMNETa27d4d22be;struct
  35. rmnet_frag_descriptor*DATARMNET48cfce4de4;u32 DATARMNET3c3abe9e2c,
  36. DATARMNETefc9df3df2;DATARMNET48cfce4de4=list_first_entry(&DATARMNETaa568481cf->
  37. DATARMNETb76b79d0d5,struct rmnet_frag_descriptor,list);DATARMNET699c2c62cd=
  38. rmnet_frag_header_ptr(DATARMNET48cfce4de4,DATARMNETaa568481cf->
  39. DATARMNET78fd20ce0e.DATARMNET4ca5ac9de1,DATARMNETaa568481cf->DATARMNET78fd20ce0e
  40. .DATARMNET0aeee57ceb,&DATARMNETee66845de4);if(!DATARMNET699c2c62cd)return true;
  41. DATARMNET8814564ab9=rmnet_frag_header_ptr(DATARMNET5fe4c722a8->
  42. DATARMNET719f68fb88,DATARMNET5fe4c722a8->DATARMNET144d119066.DATARMNET4ca5ac9de1
  43. ,DATARMNET5fe4c722a8->DATARMNET144d119066.DATARMNET0aeee57ceb,&
  44. DATARMNETa27d4d22be);if(!DATARMNET8814564ab9)return true;DATARMNET3c3abe9e2c=
  45. DATARMNET699c2c62cd->DATARMNETe31a04a369.DATARMNETcf2e43ad69*(0xd11+230-0xdf3);
  46. if(DATARMNET8814564ab9->DATARMNETe31a04a369.DATARMNETcf2e43ad69*
  47. (0xd11+230-0xdf3)!=DATARMNET3c3abe9e2c)return true;for(DATARMNETefc9df3df2=
  48. sizeof(DATARMNET699c2c62cd->DATARMNETe31a04a369);DATARMNETefc9df3df2<
  49. DATARMNET3c3abe9e2c;DATARMNETefc9df3df2+=(0xd11+230-0xdf3)){if(*(u32*)(
  50. DATARMNET699c2c62cd->DATARMNET021aa8e68d+DATARMNETefc9df3df2)^*(u32*)(
  51. DATARMNET8814564ab9->DATARMNET021aa8e68d+DATARMNETefc9df3df2))return true;}
  52. return false;}static int DATARMNET9a13d70865(struct DATARMNETd7c9631acd*
  53. DATARMNETaa568481cf,struct DATARMNETd812bcdbb5*DATARMNET5fe4c722a8){u64
  54. DATARMNET7457d496cb;u32 DATARMNET95acece3fc;if(DATARMNET2818ea93ec(
  55. DATARMNET5fe4c722a8)){DATARMNETa00cda79d0(DATARMNETb322de38be);return
  56. DATARMNET7af645849a;}if(!DATARMNETaa568481cf->DATARMNET1db11fa85e)return
  57. DATARMNET0413b43080;if(DATARMNET829fcf5939(DATARMNETaa568481cf,
  58. DATARMNET5fe4c722a8)){DATARMNETa00cda79d0(DATARMNET38317c7efd);return
  59. DATARMNETb0bd5db24d;}if(DATARMNET5fe4c722a8->DATARMNET144d119066.
  60. DATARMNETbc28a5970f^DATARMNETaa568481cf->DATARMNET78fd20ce0e.DATARMNETbc28a5970f
  61. ){DATARMNETa00cda79d0(DATARMNET31c0e41f5a);return DATARMNET7af645849a;}
  62. DATARMNET95acece3fc=(DATARMNET5fe4c722a8->DATARMNET719f68fb88->gso_size)?:
  63. DATARMNET5fe4c722a8->DATARMNET1ef22e4c76;if(DATARMNET95acece3fc!=
  64. DATARMNETaa568481cf->DATARMNET1978d5d8de){DATARMNETa00cda79d0(
  65. DATARMNET0cd1fa0d98);return DATARMNETb0bd5db24d;}DATARMNET7457d496cb=
  66. DATARMNETf1d1b8287f(DATARMNETdf66588a73);if(DATARMNET5fe4c722a8->
  67. DATARMNET1ef22e4c76+DATARMNETaa568481cf->DATARMNETcf28ae376b>=
  68. DATARMNET7457d496cb){DATARMNETa00cda79d0(DATARMNET1c0d243816);return
  69. DATARMNETb0bd5db24d;}DATARMNET5fe4c722a8->DATARMNETf1b6b0a6cc=false;return
  70. DATARMNET0413b43080;}bool DATARMNET4c7cdc25b7(struct DATARMNETd7c9631acd*
  71. DATARMNETaa568481cf,struct DATARMNETd812bcdbb5*DATARMNET5fe4c722a8,bool
  72. DATARMNETd87669e323,struct list_head*DATARMNET6f9bfa17e6){int
  73. DATARMNETb14e52a504;if(DATARMNETd87669e323){DATARMNETa00cda79d0(
  74. DATARMNET47a963957c);DATARMNETa3055c21f2(DATARMNETaa568481cf,DATARMNET6f9bfa17e6
  75. );DATARMNET19d190f2bd(DATARMNET5fe4c722a8,DATARMNET6f9bfa17e6);return true;}
  76. DATARMNETb14e52a504=DATARMNET9a13d70865(DATARMNETaa568481cf,DATARMNET5fe4c722a8)
  77. ;if(DATARMNETb14e52a504==DATARMNET0413b43080){DATARMNET33aa5df9ef(
  78. DATARMNETaa568481cf,DATARMNET5fe4c722a8);}else if(DATARMNETb14e52a504==
  79. DATARMNETb0bd5db24d){DATARMNETa3055c21f2(DATARMNETaa568481cf,DATARMNET6f9bfa17e6
  80. );DATARMNET33aa5df9ef(DATARMNETaa568481cf,DATARMNET5fe4c722a8);}else{
  81. DATARMNETa3055c21f2(DATARMNETaa568481cf,DATARMNET6f9bfa17e6);DATARMNET19d190f2bd
  82. (DATARMNET5fe4c722a8,DATARMNET6f9bfa17e6);}return true;}