快速生成樹之拓撲變化狀態機

2021-05-22 03:26:07 字數 1634 閱讀 8695

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狀態機的使用方式做個簡要的說明,希望能對大家有點幫助。首先要明白乙個概念 狀態機是乙個機器,它是可以生產加工一批東西的,只為了加工乙個物品而使用狀態機是不合適的...