rmnet_genl.h 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. /* SPDX-License-Identifier: GPL-2.0-only */
  2. /* Copyright (c) 2019, 2021 The Linux Foundation. All rights reserved.
  3. *
  4. * RMNET Data Generic Netlink
  5. *
  6. */
  7. #ifndef _RMNET_GENL_H_
  8. #define _RMNET_GENL_H_
  9. #include <net/genetlink.h>
  10. #define RMNET_CORE_DEBUG 0
  11. #define rm_err(fmt, ...) \
  12. do { if (RMNET_CORE_DEBUG) pr_err(fmt, __VA_ARGS__); } while (0)
  13. /* Generic Netlink Definitions */
  14. #define RMNET_CORE_GENL_VERSION 1
  15. #define RMNET_CORE_GENL_FAMILY_NAME "RMNET_CORE"
  16. #define RMNET_CORE_GENL_MAX_PIDS 32
  17. #define RMNET_GENL_SUCCESS (0)
  18. #define RMNET_GENL_FAILURE (-1)
  19. extern int rmnet_core_userspace_connected;
  20. enum {
  21. RMNET_CORE_GENL_CMD_UNSPEC,
  22. RMNET_CORE_GENL_CMD_PID_BPS_REQ,
  23. RMNET_CORE_GENL_CMD_PID_BOOST_REQ,
  24. RMNET_CORE_GENL_CMD_TETHER_INFO_REQ,
  25. __RMNET_CORE_GENL_CMD_MAX,
  26. };
  27. enum {
  28. RMNET_CORE_GENL_ATTR_UNSPEC,
  29. RMNET_CORE_GENL_ATTR_STR,
  30. RMNET_CORE_GENL_ATTR_INT,
  31. RMNET_CORE_GENL_ATTR_PID_BPS,
  32. RMNET_CORE_GENL_ATTR_PID_BOOST,
  33. RMNET_CORE_GENL_ATTR_TETHER_INFO,
  34. __RMNET_CORE_GENL_ATTR_MAX,
  35. };
  36. #define RMNET_CORE_GENL_ATTR_MAX (__RMNET_CORE_GENL_ATTR_MAX - 1)
  37. struct rmnet_core_pid_bps_info {
  38. u64 tx_bps;
  39. u32 pid;
  40. u32 boost_remaining_ms;
  41. };
  42. struct rmnet_core_pid_boost_info {
  43. u32 boost_enabled;
  44. /* Boost period in ms */
  45. u32 boost_period;
  46. u32 pid;
  47. };
  48. struct rmnet_core_pid_bps_req {
  49. struct rmnet_core_pid_bps_info list[RMNET_CORE_GENL_MAX_PIDS];
  50. u64 timestamp;
  51. u16 list_len;
  52. u8 valid;
  53. };
  54. struct rmnet_core_pid_bps_resp {
  55. struct rmnet_core_pid_bps_info list[RMNET_CORE_GENL_MAX_PIDS];
  56. u64 timestamp;
  57. u16 list_len;
  58. u8 valid;
  59. };
  60. struct rmnet_core_pid_boost_req {
  61. struct rmnet_core_pid_boost_info list[RMNET_CORE_GENL_MAX_PIDS];
  62. u64 timestamp;
  63. u16 list_len;
  64. u8 valid;
  65. };
  66. /* Tether Info Request Structure */
  67. struct rmnet_core_tether_info_req {
  68. uint8_t tether_filters_en;
  69. uint8_t valid;
  70. };
  71. /* Function Prototypes */
  72. int rmnet_core_genl_pid_bps_req_hdlr(struct sk_buff *skb_2,
  73. struct genl_info *info);
  74. int rmnet_core_genl_pid_boost_req_hdlr(struct sk_buff *skb_2,
  75. struct genl_info *info);
  76. int rmnet_core_genl_tether_info_req_hdlr(struct sk_buff *skb_2,
  77. struct genl_info *info);
  78. /* Called by vnd select queue */
  79. void rmnet_update_pid_and_check_boost(pid_t pid, unsigned int len,
  80. int *boost_enable, u64 *boost_period);
  81. int rmnet_core_genl_init(void);
  82. int rmnet_core_genl_deinit(void);
  83. #endif /*_RMNET_CORE_GENL_H_*/