rmnet_offload_tcp.c 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. /* Copyright (c) 2018-2020, 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. static bool DATARMNET2818ea93ec(struct DATARMNETd812bcdbb5*DATARMNET5fe4c722a8){
  19. struct DATARMNETd2991e8952*DATARMNET2e7cc88971,DATARMNETd1ff6cd568;__be32
  20. DATARMNETa8eeab014d;u8 DATARMNET1464100e7a;DATARMNET2e7cc88971=
  21. rmnet_frag_header_ptr(DATARMNET5fe4c722a8->DATARMNET719f68fb88,
  22. DATARMNET5fe4c722a8->DATARMNET144d119066.DATARMNET4ca5ac9de1,sizeof(*
  23. DATARMNET2e7cc88971),&DATARMNETd1ff6cd568);if(!DATARMNET2e7cc88971)return true;
  24. DATARMNETa8eeab014d=(0xbf7+4796-0x1e04);DATARMNET1464100e7a=DATARMNET2e7cc88971
  25. ->DATARMNETd570802f3d;if((!DATARMNET5fe4c722a8->DATARMNET1ef22e4c76&&(
  26. DATARMNET1464100e7a&(0xeb7+1158-0x132d)))||(DATARMNET1464100e7a&
  27. DATARMNETa8eeab014d))return true;return false;}static bool DATARMNET829fcf5939(
  28. struct DATARMNETd7c9631acd*DATARMNETaa568481cf,struct DATARMNETd812bcdbb5*
  29. DATARMNET5fe4c722a8){struct DATARMNETd2991e8952*DATARMNET699c2c62cd,
  30. DATARMNETee66845de4;struct DATARMNETd2991e8952*DATARMNET8814564ab9,
  31. DATARMNETa27d4d22be;struct rmnet_frag_descriptor*DATARMNET48cfce4de4;u32
  32. DATARMNET3c3abe9e2c,DATARMNETefc9df3df2;DATARMNET48cfce4de4=list_first_entry(&
  33. DATARMNETaa568481cf->DATARMNETb76b79d0d5,struct rmnet_frag_descriptor,list);
  34. DATARMNET699c2c62cd=rmnet_frag_header_ptr(DATARMNET48cfce4de4,
  35. DATARMNETaa568481cf->DATARMNET78fd20ce0e.DATARMNET4ca5ac9de1,sizeof(*
  36. DATARMNET699c2c62cd),&DATARMNETee66845de4);if(!DATARMNET699c2c62cd)return true;
  37. DATARMNET8814564ab9=rmnet_frag_header_ptr(DATARMNET5fe4c722a8->
  38. DATARMNET719f68fb88,DATARMNET5fe4c722a8->DATARMNET144d119066.DATARMNET4ca5ac9de1
  39. ,sizeof(*DATARMNET8814564ab9),&DATARMNETa27d4d22be);if(!DATARMNET8814564ab9)
  40. return true;DATARMNET3c3abe9e2c=DATARMNET699c2c62cd->DATARMNETcf2e43ad69*
  41. (0xd11+230-0xdf3);if(DATARMNET8814564ab9->DATARMNETcf2e43ad69*(0xd11+230-0xdf3)
  42. !=DATARMNET3c3abe9e2c)return true;for(DATARMNETefc9df3df2=sizeof(*
  43. DATARMNET699c2c62cd);DATARMNETefc9df3df2<DATARMNET3c3abe9e2c;DATARMNETefc9df3df2
  44. +=(0xd11+230-0xdf3)){if(*(u32*)((u8*)DATARMNET699c2c62cd+DATARMNETefc9df3df2)^*(
  45. u32*)((u8*)DATARMNET8814564ab9+DATARMNETefc9df3df2))return true;}return false;}
  46. static int DATARMNET9a13d70865(struct DATARMNETd7c9631acd*DATARMNETaa568481cf,
  47. struct DATARMNETd812bcdbb5*DATARMNET5fe4c722a8){u64 DATARMNET7457d496cb;u32
  48. DATARMNET95acece3fc;if(DATARMNET2818ea93ec(DATARMNET5fe4c722a8)){
  49. DATARMNETa00cda79d0(DATARMNETb322de38be);return DATARMNET7af645849a;}if(!
  50. DATARMNETaa568481cf->DATARMNET1db11fa85e)return DATARMNET0413b43080;if(
  51. DATARMNET829fcf5939(DATARMNETaa568481cf,DATARMNET5fe4c722a8)){
  52. DATARMNETa00cda79d0(DATARMNET38317c7efd);return DATARMNETb0bd5db24d;}if(
  53. DATARMNET5fe4c722a8->DATARMNET144d119066.DATARMNETbc28a5970f^DATARMNETaa568481cf
  54. ->DATARMNET78fd20ce0e.DATARMNETbc28a5970f){DATARMNETa00cda79d0(
  55. DATARMNET31c0e41f5a);return DATARMNET7af645849a;}DATARMNET95acece3fc=(
  56. DATARMNET5fe4c722a8->DATARMNET719f68fb88->gso_size)?:DATARMNET5fe4c722a8->
  57. DATARMNET1ef22e4c76;if(DATARMNET95acece3fc!=DATARMNETaa568481cf->
  58. DATARMNET1978d5d8de){DATARMNETa00cda79d0(DATARMNET0cd1fa0d98);return
  59. DATARMNETb0bd5db24d;}DATARMNET7457d496cb=DATARMNETf1d1b8287f(DATARMNETdf66588a73
  60. );if(DATARMNET5fe4c722a8->DATARMNET1ef22e4c76+DATARMNETaa568481cf->
  61. DATARMNETcf28ae376b>=DATARMNET7457d496cb){DATARMNETa00cda79d0(
  62. DATARMNET1c0d243816);return DATARMNETb0bd5db24d;}DATARMNET5fe4c722a8->
  63. DATARMNETf1b6b0a6cc=false;return DATARMNET0413b43080;}bool DATARMNET4c7cdc25b7(
  64. struct DATARMNETd7c9631acd*DATARMNETaa568481cf,struct DATARMNETd812bcdbb5*
  65. DATARMNET5fe4c722a8,bool DATARMNETd87669e323){int DATARMNETb14e52a504;if(
  66. DATARMNETd87669e323){DATARMNETa00cda79d0(DATARMNET47a963957c);
  67. DATARMNETa3055c21f2(DATARMNETaa568481cf);DATARMNET19d190f2bd(DATARMNET5fe4c722a8
  68. );return true;}DATARMNETb14e52a504=DATARMNET9a13d70865(DATARMNETaa568481cf,
  69. DATARMNET5fe4c722a8);if(DATARMNETb14e52a504==DATARMNET0413b43080){
  70. DATARMNET33aa5df9ef(DATARMNETaa568481cf,DATARMNET5fe4c722a8);}else if(
  71. DATARMNETb14e52a504==DATARMNETb0bd5db24d){DATARMNETa3055c21f2(
  72. DATARMNETaa568481cf);DATARMNET33aa5df9ef(DATARMNETaa568481cf,DATARMNET5fe4c722a8
  73. );}else{DATARMNETa3055c21f2(DATARMNETaa568481cf);DATARMNET19d190f2bd(
  74. DATARMNET5fe4c722a8);}return true;}