guagga入門-lib庫介紹

無論是zebra也好還是動態路由的進程也好其都是一個單線程的程序;都能完成以下幾個事情
1。一個tcp服務器
2。一個cli命令處理程序;
3。能夠監聽socket事件(讀/寫/關閉)
一個線程能完成如此複雜的事情,這個與guagga程序良好的框架設計有關係;
所有的庫都在lib目錄下
thread庫
其實說是thread其實這並不是真正操作系統上的thread的概念,它是事件驅動模型中的一個事件的概念。一個fd對應的事件,其實對應起來就是一個thread。也就是說zebra項目中的thread其實是fd事件的描述;有多少個fd就應該對應有多少個thread。代碼在thread.c中;有時間講詳細講解thread的具體用法;這個thread的實現與libevent的實現其實是類似的。
cli庫
cli的庫包含幾個部分,一個是cli部分的遠程回調註冊的框架程序,另外一個是cli命令對應終端程序的抽象,註冊+回調框架在command.c中。vty的抽象在vty.c代碼中;簡單講就是通過實現寫好的cli註冊命令,關聯了命令字符串與其處理回調的關係。vty處理輸入輸出的信息,代碼不用關係是telnet上來的請求,還是unix上來的請求;
zclient庫
之前說過無論是ospf 還是ripd都是zebra的client程序,client與server之間交互的常用API已經全部定義到zclient庫了,主要定義了zebra通知消息給ospf 以及ospf請求內容到server的一些常用方法。具體後續有時間詳細說明;
kernel網絡抽象庫rtnetlink
因爲guagga是路由的套件,自然少不了內核路由的一些接口在rt_netlink.c代碼中,寫好了常用的netlink消息以及其處理的回調函數,以及一些常用接口的API,例如接口up down的通知回調,例如添加刪除路由的API接口等等。所有跟內核網絡相關的接口都可以在這裏面找到;
數據結構的庫
也可以在其中可以找到例如c語言的vector list等等,都已經在裏面實現好了。









發佈了146 篇原創文章 · 獲贊 371 · 訪問量 43萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章