br_private_stp.h 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. /* SPDX-License-Identifier: GPL-2.0-or-later */
  2. /*
  3. * Linux ethernet bridge
  4. *
  5. * Authors:
  6. * Lennert Buytenhek <buytenh@gnu.org>
  7. */
  8. #ifndef _BR_PRIVATE_STP_H
  9. #define _BR_PRIVATE_STP_H
  10. #define BPDU_TYPE_CONFIG 0
  11. #define BPDU_TYPE_TCN 0x80
  12. /* IEEE 802.1D-1998 timer values */
  13. #define BR_MIN_HELLO_TIME (1*HZ)
  14. #define BR_MAX_HELLO_TIME (10*HZ)
  15. #define BR_MIN_FORWARD_DELAY (2*HZ)
  16. #define BR_MAX_FORWARD_DELAY (30*HZ)
  17. #define BR_MIN_MAX_AGE (6*HZ)
  18. #define BR_MAX_MAX_AGE (40*HZ)
  19. #define BR_MIN_PATH_COST 1
  20. #define BR_MAX_PATH_COST 65535
  21. struct br_config_bpdu {
  22. unsigned int topology_change:1;
  23. unsigned int topology_change_ack:1;
  24. bridge_id root;
  25. int root_path_cost;
  26. bridge_id bridge_id;
  27. port_id port_id;
  28. int message_age;
  29. int max_age;
  30. int hello_time;
  31. int forward_delay;
  32. };
  33. /* called under bridge lock */
  34. static inline int br_is_designated_port(const struct net_bridge_port *p)
  35. {
  36. return !memcmp(&p->designated_bridge, &p->br->bridge_id, 8) &&
  37. (p->designated_port == p->port_id);
  38. }
  39. /* br_stp.c */
  40. void br_become_root_bridge(struct net_bridge *br);
  41. void br_config_bpdu_generation(struct net_bridge *);
  42. void br_configuration_update(struct net_bridge *);
  43. void br_port_state_selection(struct net_bridge *);
  44. void br_received_config_bpdu(struct net_bridge_port *p,
  45. const struct br_config_bpdu *bpdu);
  46. void br_received_tcn_bpdu(struct net_bridge_port *p);
  47. void br_transmit_config(struct net_bridge_port *p);
  48. void br_transmit_tcn(struct net_bridge *br);
  49. void br_topology_change_detection(struct net_bridge *br);
  50. void __br_set_topology_change(struct net_bridge *br, unsigned char val);
  51. /* br_stp_bpdu.c */
  52. void br_send_config_bpdu(struct net_bridge_port *, struct br_config_bpdu *);
  53. void br_send_tcn_bpdu(struct net_bridge_port *);
  54. #endif