Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0-or-later */
0002 /*
0003  *  Linux ethernet bridge
0004  *
0005  *  Authors:
0006  *  Lennert Buytenhek       <buytenh@gnu.org>
0007  */
0008 
0009 #ifndef _BR_PRIVATE_STP_H
0010 #define _BR_PRIVATE_STP_H
0011 
0012 #define BPDU_TYPE_CONFIG 0
0013 #define BPDU_TYPE_TCN 0x80
0014 
0015 /* IEEE 802.1D-1998 timer values */
0016 #define BR_MIN_HELLO_TIME   (1*HZ)
0017 #define BR_MAX_HELLO_TIME   (10*HZ)
0018 
0019 #define BR_MIN_FORWARD_DELAY    (2*HZ)
0020 #define BR_MAX_FORWARD_DELAY    (30*HZ)
0021 
0022 #define BR_MIN_MAX_AGE      (6*HZ)
0023 #define BR_MAX_MAX_AGE      (40*HZ)
0024 
0025 #define BR_MIN_PATH_COST    1
0026 #define BR_MAX_PATH_COST    65535
0027 
0028 struct br_config_bpdu {
0029     unsigned int    topology_change:1;
0030     unsigned int    topology_change_ack:1;
0031     bridge_id   root;
0032     int     root_path_cost;
0033     bridge_id   bridge_id;
0034     port_id     port_id;
0035     int     message_age;
0036     int     max_age;
0037     int     hello_time;
0038     int     forward_delay;
0039 };
0040 
0041 /* called under bridge lock */
0042 static inline int br_is_designated_port(const struct net_bridge_port *p)
0043 {
0044     return !memcmp(&p->designated_bridge, &p->br->bridge_id, 8) &&
0045         (p->designated_port == p->port_id);
0046 }
0047 
0048 
0049 /* br_stp.c */
0050 void br_become_root_bridge(struct net_bridge *br);
0051 void br_config_bpdu_generation(struct net_bridge *);
0052 void br_configuration_update(struct net_bridge *);
0053 void br_port_state_selection(struct net_bridge *);
0054 void br_received_config_bpdu(struct net_bridge_port *p,
0055                  const struct br_config_bpdu *bpdu);
0056 void br_received_tcn_bpdu(struct net_bridge_port *p);
0057 void br_transmit_config(struct net_bridge_port *p);
0058 void br_transmit_tcn(struct net_bridge *br);
0059 void br_topology_change_detection(struct net_bridge *br);
0060 void __br_set_topology_change(struct net_bridge *br, unsigned char val);
0061 
0062 /* br_stp_bpdu.c */
0063 void br_send_config_bpdu(struct net_bridge_port *, struct br_config_bpdu *);
0064 void br_send_tcn_bpdu(struct net_bridge_port *);
0065 
0066 #endif