\contentsline {chapter}{\numberline {1}BIRD Design}{4}{chapter.1} \contentsline {section}{\numberline {1.1}Introduction}{4}{section.1.1} \contentsline {section}{\numberline {1.2}Design goals}{4}{section.1.2} \contentsline {section}{\numberline {1.3}Architecture}{5}{section.1.3} \contentsline {section}{\numberline {1.4}Implementation}{5}{section.1.4} \contentsline {chapter}{\numberline {2}Core}{7}{chapter.2} \contentsline {section}{\numberline {2.1}Forwarding Information Base}{7}{section.2.1} \contentsline {section}{\numberline {2.2}Routing tables}{9}{section.2.2} \contentsline {section}{\numberline {2.3}Route attribute cache}{15}{section.2.3} \contentsline {section}{\numberline {2.4}Routing protocols}{20}{section.2.4} \contentsline {subsection}{\numberline {2.4.1}Introduction}{20}{subsection.2.4.1} \contentsline {subsection}{\numberline {2.4.2}Protocol states}{21}{subsection.2.4.2} \contentsline {subsection}{\numberline {2.4.3}Functions of the protocol module}{21}{subsection.2.4.3} \contentsline {section}{\numberline {2.5}Graceful restart recovery}{24}{section.2.5} \contentsline {section}{\numberline {2.6}Protocol hooks}{27}{section.2.6} \contentsline {section}{\numberline {2.7}Interfaces}{34}{section.2.7} \contentsline {section}{\numberline {2.8}Neighbor cache}{36}{section.2.8} \contentsline {section}{\numberline {2.9}Command line interface}{38}{section.2.9} \contentsline {section}{\numberline {2.10}Object locks}{40}{section.2.10} \contentsline {chapter}{\numberline {3}Configuration}{41}{chapter.3} \contentsline {section}{\numberline {3.1}Configuration manager}{41}{section.3.1} \contentsline {section}{\numberline {3.2}Lexical analyzer}{44}{section.3.2} \contentsline {section}{\numberline {3.3}Parser}{46}{section.3.3} \contentsline {chapter}{\numberline {4}Filters}{47}{chapter.4} \contentsline {section}{\numberline {4.1}Filters}{47}{section.4.1} \contentsline {section}{\numberline {4.2}Trie for prefix sets}{49}{section.4.2} \contentsline {chapter}{\numberline {5}Protocols}{52}{chapter.5} \contentsline {section}{\numberline {5.1}The Babel protocol}{52}{section.5.1} \contentsline {section}{\numberline {5.2}Bidirectional Forwarding Detection}{55}{section.5.2} \contentsline {section}{\numberline {5.3}Border Gateway Protocol}{56}{section.5.3} \contentsline {section}{\numberline {5.4}Multi-Threaded Routing Toolkit (MRT) protocol}{63}{section.5.4} \contentsline {section}{\numberline {5.5}Open Shortest Path First (OSPF)}{63}{section.5.5} \contentsline {section}{\numberline {5.6}Pipe}{70}{section.5.6} \contentsline {section}{\numberline {5.7}Routing Information Protocol (RIP)}{70}{section.5.7} \contentsline {section}{\numberline {5.8}Router Advertisements}{73}{section.5.8} \contentsline {section}{\numberline {5.9}Static}{73}{section.5.9} \contentsline {section}{\numberline {5.10}Direct}{74}{section.5.10} \contentsline {chapter}{\numberline {6}System dependent parts}{75}{chapter.6} \contentsline {section}{\numberline {6.1}Introduction}{75}{section.6.1} \contentsline {section}{\numberline {6.2}Logging}{75}{section.6.2} \contentsline {section}{\numberline {6.3}Kernel synchronization}{76}{section.6.3} \contentsline {chapter}{\numberline {7}Library functions}{78}{chapter.7} \contentsline {section}{\numberline {7.1}IP addresses}{78}{section.7.1} \contentsline {section}{\numberline {7.2}Linked lists}{82}{section.7.2} \contentsline {section}{\numberline {7.3}Miscellaneous functions.}{84}{section.7.3} \contentsline {section}{\numberline {7.4}Message authentication codes}{88}{section.7.4} \contentsline {chapter}{\numberline {8}Resources}{91}{chapter.8} \contentsline {section}{\numberline {8.1}Introduction}{91}{section.8.1} \contentsline {section}{\numberline {8.2}Resource pools}{91}{section.8.2} \contentsline {section}{\numberline {8.3}Memory blocks}{93}{section.8.3} \contentsline {section}{\numberline {8.4}Linear memory pools}{94}{section.8.4} \contentsline {section}{\numberline {8.5}Slabs}{95}{section.8.5} \contentsline {section}{\numberline {8.6}Events}{96}{section.8.6} \contentsline {section}{\numberline {8.7}Timers}{97}{section.8.7} \contentsline {section}{\numberline {8.8}Sockets}{99}{section.8.8}