1/* 2 * Linux ethernet bridge 3 * 4 * Authors: 5 * Lennert Buytenhek <buytenh@gnu.org> 6 * 7 * This program is free software; you can redistribute it and/or 8 * modify it under the terms of the GNU General Public License 9 * as published by the Free Software Foundation; either version 10 * 2 of the License, or (at your option) any later version. 11 */ 12 13#ifndef _BR_PRIVATE_STP_H 14#define _BR_PRIVATE_STP_H 15 16#define BPDU_TYPE_CONFIG 0 17#define BPDU_TYPE_TCN 0x80 18 19/* IEEE 802.1D-1998 timer values */ 20#define BR_MIN_HELLO_TIME (1*HZ) 21#define BR_MAX_HELLO_TIME (10*HZ) 22 23#define BR_MIN_FORWARD_DELAY (2*HZ) 24#define BR_MAX_FORWARD_DELAY (30*HZ) 25 26#define BR_MIN_MAX_AGE (6*HZ) 27#define BR_MAX_MAX_AGE (40*HZ) 28 29#define BR_MIN_PATH_COST 1 30#define BR_MAX_PATH_COST 65535 31 32struct br_config_bpdu { 33 unsigned int topology_change:1; 34 unsigned int topology_change_ack:1; 35 bridge_id root; 36 int root_path_cost; 37 bridge_id bridge_id; 38 port_id port_id; 39 int message_age; 40 int max_age; 41 int hello_time; 42 int forward_delay; 43}; 44 45/* called under bridge lock */ 46static inline int br_is_designated_port(const struct net_bridge_port *p) 47{ 48 return !memcmp(&p->designated_bridge, &p->br->bridge_id, 8) && 49 (p->designated_port == p->port_id); 50} 51 52 53/* br_stp.c */ 54void br_become_root_bridge(struct net_bridge *br); 55void br_config_bpdu_generation(struct net_bridge *); 56void br_configuration_update(struct net_bridge *); 57void br_port_state_selection(struct net_bridge *); 58void br_received_config_bpdu(struct net_bridge_port *p, 59 const struct br_config_bpdu *bpdu); 60void br_received_tcn_bpdu(struct net_bridge_port *p); 61void br_transmit_config(struct net_bridge_port *p); 62void br_transmit_tcn(struct net_bridge *br); 63void br_topology_change_detection(struct net_bridge *br); 64void __br_set_topology_change(struct net_bridge *br, unsigned char val); 65 66/* br_stp_bpdu.c */ 67void br_send_config_bpdu(struct net_bridge_port *, struct br_config_bpdu *); 68void br_send_tcn_bpdu(struct net_bridge_port *); 69 70#endif 71