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 */
#endif
bool stp_topoch_check_conditions (state_mach_t* this) ;
return false; }
void stp_topoch_enter_state (state_mach_t* this)
/* 繼續向其他所有埠傳播拓撲變化訊息 */
settcpropbridge (this, "notified_tc");
break;
case propagating:
port->tcwhile = newtcwhile (this); // 啟動拓撲變化傳播定時器
flush (this, "topoch propagating");
port->tcprop = false;
break;
case acknowledged:
// 已收到拓撲變化確認訊息訊號
port->tcwhile = 0;
port->rcvdtcack = false; // 關閉拓撲變化傳播定時器,不再傳播變化資訊
break;
case notified_tcn:
port->tcwhile = newtcwhile (this); // 啟動拓撲變化傳播定時器
break; };
} static void settcpropbridge (state_mach_t* this, char* reason) /* 17.19.14 */
/* 清除除了本接收埠之外所有埠的學習資訊 */
stp_out_flush_lt (port->port_index, port->owner->vlan_id,
lt_flash_all_ports_exclude_this, reason); }
4 stp vs rstp
stp是一種集中式演算法,乙個網橋發現拓撲變化後,首先通知到根網橋,而後再由根網橋負責通知所有其它網橋;
rstp是一種洪氾式演算法,乙個網橋發現拓撲變化後,它負責通知與它相連的其它網橋,而其它網橋再負責通知與它們相連的其它網橋,直到傳播到所有網橋。
快速生成樹之通用狀態機
1 原始碼 rstplib.1.1.02 statmch.c,statmch.h 2 功能 提供了快速生成樹中所有狀態機的乙個抽象,類似於物件導向程式設計中的基類。3 簡析 3.1 資料結構 通用狀態機 typedef struct state mach t owner state mach t 3...
快速生成樹之埠狀態轉移狀態機
1 原始碼 rstplib.1.1.02 sttrans.c,sttrans.h。2 簡析 802.1w標準對應rstp,802.1d標準對應stp,針對802.1w和802.1d標準,交換機晶元硬體一般提供不同形式的api 1 802.1w 對於某個埠定義 學習 兩種狀態的使能和禁止,對於 丟棄 ...
Mina狀態機快速上手
mina狀態機是apache對狀態機模式的一種非常巧妙的實現,它本身自帶的錄音機的例子 和日常用的方式不太一樣,也不太好理解。這裡對mina狀態機的使用方式做個簡要的說明,希望能對大家有點幫助。首先要明白乙個概念 狀態機是乙個機器,它是可以生產加工一批東西的,只為了加工乙個物品而使用狀態機是不合適的...