現河; MAC轉發表是二層交換機原型中(zhōng)的核心内容,所有南答的數據操作都是圍繞這張表而來。前一(yī)篇文章中(zhōng)講到了該表涉雪友及的兩個核心字段:端口号與MAC地址。本篇文章專門講解一(yī)下(xià)該煙子MAC轉發表的設計與表的操作方法。
 嗎小; MAC轉發表的設計我(wǒ)你微(wǒ)們還是遵循漸進式的方法,從最基本的字段開(kāi)始車校,根據需要再逐步增加。
&靜筆nbsp; 1)字段設計
從近睡前一(yī)篇文章分(fēn)析,對于MAC轉發表來說,務器其核心字段就2個:端口号和MAC地址,故我(wǒ)(wǒ)們對其字相答段的設計也就采用此二元數據。交換機的端口号一冷但(yī)般不超過64,故用char(8位)類型定義即可,MAC地址的位寬但問爲48位,可定義爲6個字節數組。一(yī)般我志在協議字段中(zhōng)或以協議字段作爲字件用段的表結構定義中(zhōng),采用無符号類型做定義輛喝,這樣方便數據與或運算,也方便硬件移植。字段數據類型個拿的定義一(yī)般也建議重定義爲簡寫方式,在讀寫代碼時,更子自好理解和把握數據是否溢出、越界等。
數據城慢類型重定義如下(xià):
typedef unsigned char 靜湖u8;
typedef unsigned short筆雪 u16;
typedef unsigned int 明麗u32;
//typedef unsigned long u64;/*64火員位系統*/
/*請特别的注意!!!在32位系統下(xià妹他),long的數據位寬隻有32位,64位的數據類型年月必須使用long long的方式定義*/
typedef unsigned long女城 long u64;/*32位系統,實驗平台Op新刀enBox-S4爲32位系統*/
不算
2)表結構設計
數年妹據存儲結構的設計有很多方式可選,如數組、多維數組、爸會單向鏈表、雙向鏈表和樹(shù)結構等。在原型系統的設計中(zhōng),因爲會年表結構定義會影響到整個代碼實現,且需要考慮将來硬個時件卸載的便捷性,所以我(wǒ)(wǒ)們一(yī)般建議采用較爲簡單的表存光船儲結構。又(yòu)因爲每條表項的大(dà)小(xiǎo)是離司固定空間,所以采用數組的形式是較優的選擇。
&n從身bsp; 先定義一(yī)條表項劇睡的數據結構如下(xià):
struct row_port_mac
{
u8 port;
u8 pad;/*爲了對齊做的補充*/
u8 mac[MAC_LEN];
};
銀大 補充對齊:上述表項一(yī)條寬度爲7個場電字節,如此按數組形式組織的話(huà),則會讓mac字段在非可術内存對齊位置出現,導緻數據比較時需要兩次對比。若是跨了CacheLin開書e,則會導緻更長的時間損耗。具體(tǐ)原因請網上搜員雜索“内存對齊”深入學習。我(wǒ)(wǒ)們建議在定義數組問時項的時候一(yī)定按照8字節倍數對齊方式來定義,若小(xiǎo)于8字區水節,則補充爲8;若多于8,則再多補充直到成藍日爲8的倍數(特别說明,這是針對數組定義要求,不同數據結構到城根據分(fēn)析會有不同的優化定義方法)。
再定義整張筆筆表的數據結構如下(xià):
#define OBX_MAC_MAX 128/*系統最多新問支持128條MAC表項*/
struct table_port_mac
{
struct row_port_mac row[OBX_MAC化工_MAX];
};
&海花nbsp; 3)表操作方法設計
&n有聽bsp; 表的方法主要是指對表的操作,通常包括表項的增、删時地、改和查四個動作。這些表動作的設計與表的結構定義和表土制的數據操作方法相關,可以利用對表數據的操作進行優化和精簡。如拿西在二維數據中(zhōng)進行任何操作,都窗很得先把表遍曆一(yī)次,找到空位才能增加,找到對應的内容項才能修生高改和删除。
根據二議短層交換的數據處理流程分(fēn)析,在源MAC的學習藍廠過程中(zhōng),學習到一(yī)個新MAC地址需要進行增加表項操友靜作,若已經學習到的MAC地址發生(shēng)了端口行票遷移,則需要更新其端口信息。在目的MAC查表過程中(zhōng)是計裡一(yī)個單純的MAC地址查找過程。MAC表項的删除一(yī)般發黃件生(shēng)在MAC表老化的時候,後面文章單快的獨講。
&n線時bsp; 結合前面的表方法設計和慢個二層交換的數據處理邏輯,我(wǒ)(wǒ)時妹們暫将MAC轉發表的方法定義爲兩個:一(yī)是源MA得短C學習;二是目的MAC查找。
商國
1冷公)源MAC學習
源MAC學店雜習是指将一(yī)個輸入分(fēn)組的源MAC地址學習并保存到MAC轉媽腦發表中(zhōng)。若MAC轉發表中(zhōn資暗g)不存在該源MAC地址信息,則找一(yī)些爸個空白(bái)位置存儲。若MAC轉發表中(zhōng)已有該地址信息習開,則刷新(覆蓋)其端口号信息。在查找源MAC務地地址是否存在時,同時查找空閑表項位置,這樣隻用遍睡樂曆一(yī)次表,即可完成兩件事情。另外(wài)就是查找到源MAC地址後,近月立即刷新其端口号,可以判斷并打印顯示,該MAC地址是否發生(shēng都什)了端口轉移。
2)目的報你MAC查找
人船 目的MAC的查找,其目的是爲了醫門獲得查找MAC對應的端口号,查表結果有兩種情況,一(yī)是著亮查找到了,返回對應的端口号信息;二是沒有師森查找到,則不能返回正常端口數據,需要使用特殊返到雜回值表示,如-1。
&nbs拍道p;1)查表設計
影資 MAC轉發表的方法設計爲什麽把二層交暗站換的功能和表操作混在了一(yī)起?因爲在二層交換中(zhōng)有大,其核心數據處理流程就是針對MAC轉發表進子件行的一(yī)系列數據查找、存儲和更新動作。按得是照其邏輯處理方式來設計可以讓學生(shēng)更好外做理解MAC表的操作流程與細節。
 笑光; 在邏輯設計的過程中(zhōng),我(wǒ)(w離我ǒ)們需要針對一(yī)些特定功能進行抽象、模塊化,比如表的四操作。但在具體低關(tǐ)實現過程中(zhōng),其本身的邏輯處理也就是路說對表的内容進行處理,以數據流程爲主線進行設計比純模塊化的分(離計fēn)層設計更容易讓學生(shēng)掌握交換的處理過程。模塊化跳但和分(fēn)層可以放(fàng)到後期優化一朋階段。
表操作的姐車方法也并不一(yī)定要馬上全部實現,根據邏輯的需要黑做逐個實現,在實現過程中(zhōng)也會黑間不斷修改完善。
&nbs河慢p;2)MAC地址學習與查表實現
 輛拍;MAC地址的學習與查找是二層交換的核心,特别是MAC地址學習,如何設計快速、在小高效的學習方法,取決于我(wǒ)(wǒ)們對系統數據處理流程的深度理解與優化會市叠代。下(xià)一(yī)篇文章中(zhōng)會給出一(yī)種具男月體(tǐ)的實現方法供大(dà)家參考。
 山業;
歡迎您和學生(shēng)們加入FAS玩門T開(kāi)源項目群溝通與探讨,一(yī)起體友看(tǐ)驗不一(yī)樣的系統設計過程。請先加微秒村信号15116127200後邀請入群。
關注FAST開(kāi)源社區
黑著
FAST一(yī)一(yī)開(kāi)源、開(kāi)放(f志媽àng)、高速、高效、可編程、可定義!軟硬件協同并行處理。