現有的路由協議都是通過分布式協議逐個配置協商執行的,協議協議,乙個就不需要協議咯,至少2個才能夠協議著做事情嘛,不過呢,這樣就出現網元過多配置困難的問題,對網管軟體要求也越來越高,
sdn或許可能改變這個局面,但不管軟體如何定義,報文還是在乙個乙個網路節點傳輸的,所以我們看到quagga這樣多的傳統網路配置命令不要覺得繁瑣,不配置的話,協議不會工作哦。
嗯,這章的主題是建立對等體,就是通過配置命令來完成的。
「neighbor peer remote-as asn」router bgp
1neighbor
10.0.0.1 remote-as 2
neighbor peer remote-as 命令就是配置乙個對等體,peer是指對等體的位址(ipv4,ipv6位址)。
接下來我們看**是如何建立對等體的,入口函式:
1defun(neighbor_remote_as,
2neighbor_remote_as_cmd,
3 neighbor_cmd2 "
remote-as
"cmd_as_range,
4neighbor_str
5neighbor_addr_str26"
specify a bgp neighbor\n"7
as_str)
可以看到,bgp對等體之間是單播通訊。
1/*if peer does not exist, create new one. if peer already exists,
2set as number to the peer. */3
int4 peer_remote_as(struct bgp *bgp, union sockunion *su, as_t *as
,5 afi_t afi, safi_t safi)
peer_remote_as函式來完成建立新對等體或者為對等體設定新的as號。
為避免一些書籍的作者或者網路作者的一貫的懶惰做法(只授人以魚),我得補充一下,為什麼要建立對等體。
對於路由協議,不管是基於3層的還是2層的,都需要建立自己的尋路資料庫,也就是通過鄰居找到下一跳,你要走的遠,你就得認識更多鄰居,以及鄰居的鄰居,好比一句老話,在家靠父母,出門靠朋友,朋友多路好走,就這麼乙個道理。
那麼話又說回來了,建立對等體呢,就是給自己找鄰居,找朋友,不過呢,bgp這個人呢,更像乙個幹中介的,比如賣房的中介,他自己不建房子,只把建好的**介紹給要買房的人,同時還維護這個**資訊庫,及時更新已經賣掉的房子。
話有點多,我們還是接著看**吧:
1/*"router bgp" commands. */2
defun(router_bgp,
3router_bgp_cmd,4"
router bgp
"cmd_as_range,
5router_str
6bgp_str
7as_str)
router bgp 1
這條命令就是去查詢乙個as為1的bgp物件(struct bgp),如果沒有找到就建立了乙個struct bgp的指標,並儲存在vty->index裡,vty是每個defun巨集函式宣告裡都帶的乙個引數,在command裡是極其重要的角色。
如果傳給peer的值不是乙個合法的位址,那麼會被當做是乙個peer group名稱來處理
1/*if peer is peer group, call proper function.
*/2 ret = str2sockunion(peer_str, &su);
3if (ret < 0) 9
return
cmd_success;
10 }
然後呢,是國際慣例,查詢一下是不是已經為這個peer位址建立了peer,如果peer位址相同,as值不一樣,就修改一下peer的as值。
嗯,如果這個peer已經是某個group的成員,那麼就不能成功建立對等體關係了。
如果上面的事情都沒有發生,那麼就可以建立乙個新的對等體了。
1static
struct peer*
2 peer_new(struct bgp *bgp)
1/*get service port number.
*/2 sp = getservbyname("
bgp", "
tcp"
);3 peer->port = (sp == null) ? bgp_port_default : ntohs(sp->s_port);
peer_new函式裡設定預設的埠號 bgp_port_default = 179,並將peer->status = idle.
接下來會指定是ibgp peer還是ebgp peer。
最後,將這個peer加入到定時器任務中:
1/*set up peer's events and timers. */2
if (!active && peer_active(peer)) bgp_timer_set(peer);
然後我們就要進入對等體的狀態機模式了,嗨,下一章,設計模式了喔!
quagga原始碼學習 BGP協議建立對等體
現有的路由協議都是通過分布式協議逐個配置協商執行的,協議協議,乙個就不需要協議咯,至少2個才能夠協議著做事情嘛,不過呢,這樣就出現網元過多配置困難的問題,對網管軟體要求也越來越高,sdn或許可能改變這個局面,但不管軟體如何定義,報文還是在乙個乙個網路節點傳輸的,所以我們看到quagga這樣多的傳統網...
原始碼學習 ArrayList的擴容原始碼分析
原始碼如下 下面是arraylist的擴容機制 arraylist的擴容機制提高了效能,如果每次只擴充乙個,那麼頻繁的插入會導致頻繁的拷貝,降低效能,而arraylist的擴容機制避免了這種情況。如有必要,增加此arraylist例項的容量,以確保它至少能容納元素的數量 param mincapac...
PicoContainer原始碼學習
介紹下自己,我叫stef wu,是個菜鳥,現在在easyjf團隊學習,得到了大峽等人的熱情幫助。本序列文章是以前在學習研究picocontainer時所記錄下來的,希望借本文,能和正在學習pico新手或者研究pico的高手一起交流學習。由於我水平不好,而且是真實的從頭到尾的記錄,所以其中,特別是前面...