br_private_mrp.h 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. /* SPDX-License-Identifier: GPL-2.0-or-later */
  2. #ifndef _BR_PRIVATE_MRP_H_
  3. #define _BR_PRIVATE_MRP_H_
  4. #include "br_private.h"
  5. #include <uapi/linux/mrp_bridge.h>
  6. struct br_mrp {
  7. /* list of mrp instances */
  8. struct list_head list;
  9. struct net_bridge_port __rcu *p_port;
  10. struct net_bridge_port __rcu *s_port;
  11. struct net_bridge_port __rcu *i_port;
  12. u32 ring_id;
  13. u16 in_id;
  14. u16 prio;
  15. enum br_mrp_ring_role_type ring_role;
  16. u8 ring_role_offloaded;
  17. enum br_mrp_ring_state_type ring_state;
  18. u32 ring_transitions;
  19. enum br_mrp_in_role_type in_role;
  20. u8 in_role_offloaded;
  21. enum br_mrp_in_state_type in_state;
  22. u32 in_transitions;
  23. struct delayed_work test_work;
  24. u32 test_interval;
  25. unsigned long test_end;
  26. u32 test_count_miss;
  27. u32 test_max_miss;
  28. bool test_monitor;
  29. struct delayed_work in_test_work;
  30. u32 in_test_interval;
  31. unsigned long in_test_end;
  32. u32 in_test_count_miss;
  33. u32 in_test_max_miss;
  34. u32 seq_id;
  35. struct rcu_head rcu;
  36. };
  37. /* br_mrp.c */
  38. int br_mrp_add(struct net_bridge *br, struct br_mrp_instance *instance);
  39. int br_mrp_del(struct net_bridge *br, struct br_mrp_instance *instance);
  40. int br_mrp_set_port_state(struct net_bridge_port *p,
  41. enum br_mrp_port_state_type state);
  42. int br_mrp_set_port_role(struct net_bridge_port *p,
  43. enum br_mrp_port_role_type role);
  44. int br_mrp_set_ring_state(struct net_bridge *br,
  45. struct br_mrp_ring_state *state);
  46. int br_mrp_set_ring_role(struct net_bridge *br, struct br_mrp_ring_role *role);
  47. int br_mrp_start_test(struct net_bridge *br, struct br_mrp_start_test *test);
  48. int br_mrp_set_in_state(struct net_bridge *br, struct br_mrp_in_state *state);
  49. int br_mrp_set_in_role(struct net_bridge *br, struct br_mrp_in_role *role);
  50. int br_mrp_start_in_test(struct net_bridge *br,
  51. struct br_mrp_start_in_test *test);
  52. /* br_mrp_switchdev.c */
  53. int br_mrp_switchdev_add(struct net_bridge *br, struct br_mrp *mrp);
  54. int br_mrp_switchdev_del(struct net_bridge *br, struct br_mrp *mrp);
  55. int br_mrp_switchdev_set_ring_role(struct net_bridge *br, struct br_mrp *mrp,
  56. enum br_mrp_ring_role_type role);
  57. int br_mrp_switchdev_set_ring_state(struct net_bridge *br, struct br_mrp *mrp,
  58. enum br_mrp_ring_state_type state);
  59. int br_mrp_switchdev_send_ring_test(struct net_bridge *br, struct br_mrp *mrp,
  60. u32 interval, u8 max_miss, u32 period,
  61. bool monitor);
  62. int br_mrp_port_switchdev_set_state(struct net_bridge_port *p, u32 state);
  63. int br_mrp_port_switchdev_set_role(struct net_bridge_port *p,
  64. enum br_mrp_port_role_type role);
  65. int br_mrp_switchdev_set_in_role(struct net_bridge *br, struct br_mrp *mrp,
  66. u16 in_id, u32 ring_id,
  67. enum br_mrp_in_role_type role);
  68. int br_mrp_switchdev_set_in_state(struct net_bridge *br, struct br_mrp *mrp,
  69. enum br_mrp_in_state_type state);
  70. int br_mrp_switchdev_send_in_test(struct net_bridge *br, struct br_mrp *mrp,
  71. u32 interval, u8 max_miss, u32 period);
  72. /* br_mrp_netlink.c */
  73. int br_mrp_ring_port_open(struct net_device *dev, u8 loc);
  74. int br_mrp_in_port_open(struct net_device *dev, u8 loc);
  75. #endif /* _BR_PRIVATE_MRP_H */