1 源码
rstplib.1.1.02/topoch.c,topoch.h。
2 拓扑变化规则:
a) 如果一个网桥检测到拓扑变化后,它从所有非边界活动端口传播拓扑变化消息;
b) 如果一个活动端口收到拓扑变化消息后,它从所有其它非边界活动端口传播拓扑变化消
息。另外如果它是指定端口,它还从该指定端口发回一个拓扑变化确认消息;
c) 如果一个指定端口收到一个TCN BPDU,那么它不仅要从所有其它非边界活动端口传播拓扑变化消息,还要从该指定端口传播拓扑变化确认消息;
d) 如果一个端口收到一个拓扑变化确认消息,那么它停止传播拓扑变化消息。
3 代码简析
#ifndef STRONGLY_SPEC_802_1W
/* 很多交换机芯片并不支持在端口粒度上清除学习表项,此情况下,可以将除接收端口外
* 所有非边界端口的学习表信息一次清除
*/
#else
/* 清除单个端口学习信息 */
static Bool flush (STATE_MACH_T *this, char* reason) /* 17.19.9 */
{
register PORT_T* port = this->owner.port;
if (port->operEdge) return True; // 跳过边界端口
/* 清除端口的学习信息,芯片API,具体实现依赖于硬件 */
bret = STP_OUT_flush_lt (port->port_index, port->owner->vlan_id,
LT_FLASH_ONLY_THE_PORT, reason);
}