/* * This is an example configuration file. */ # Yes, even shell-like comments work... # Configure logging #log syslog { debug, trace, info, remote, warning, error, auth, fatal, bug }; #log stderr all; #log "tmp" all; # Override router ID #router id 198.51.100.1; # You can define your own symbols... #define xyzzy = (120+10); #define '1a-a1' = (30+40); # Define a route filter... #filter test_filter { # if net ~ 10.0.0.0/16 then accept; # else reject; #} #filter sink { reject; } #filter okay { accept; } #include "filters.conf"; # Define another routing table #table testable; # Turn on global debugging of all protocols #debug protocols all; # Turn on internal watchdog #watchdog warning 5 s; #watchdog timeout 30 s; # The direct protocol automatically generates device routes to # all network interfaces. Can exist in as many instances as you wish # if you want to populate multiple routing tables with device routes. #protocol direct { # interface "-eth*", "*"; # Restrict network interfaces it works with #} # This pseudo-protocol performs synchronization between BIRD's routing # tables and the kernel. If your kernel supports multiple routing tables # (as Linux 2.2.x does), you can run multiple instances of the kernel # protocol and synchronize different kernel tables with different BIRD tables. protocol kernel { # learn; # Learn all alien routes from the kernel persist; # Don't remove routes on bird shutdown scan time 20; # Scan kernel routing table every 20 seconds # import none; # Default is import all export all; # Default is export none # kernel table 5; # Kernel table to synchronize with (default: main) } # This pseudo-protocol watches all interface up/down events. protocol device { scan time 10; # Scan interfaces every 10 seconds } # Static routes (again, there can be multiple instances, so that you # can disable/enable various groups of static routes on the fly). protocol static { # disabled; # Disable by default # table testable; # Connect to a non-default table # preference 1000; # Default preference of routes # debug { states, routes, filters, interfaces, events, packets }; # debug all; # route 0.0.0.0/0 via 198.51.100.13; # route 198.51.100.0/25 unreachable; # route 10.0.0.0/8 unreachable; # route 10.1.1.0:255.255.255.0 via 198.51.100.3; # route 10.1.2.0:255.255.255.0 via 198.51.100.3; # route 10.1.3.0:255.255.255.0 via 198.51.100.4; # route 10.2.0.0/24 via "arc0"; } # Pipe protocol connects two routing tables... Beware of loops. #protocol pipe { # peer table testable; # Define what routes do we export to this protocol / import from it. # import all; # default is all # export all; # default is none # import none; # If you wish to disable imports # import filter test_filter; # Use named filter # import where source = RTS_DEVICE; # Use explicit filter #} # RIP aka Rest In Pieces... #protocol rip MyRIP { # You can also use an explicit name # preference xyzzy; # debug all; # port 1520; # period 7; # infinity 16; # garbage time 60; # interface "*" { mode broadcast; }; # honor neighbor; # To whom do we agree to send the routing table # honor always; # honor never; # passwords { # password "nazdar"; # }; # authentication none; # import filter { print "importing"; accept; }; # export filter { print "exporting"; accept; }; #} #protocol ospf MyOSPF { # tick 2; # rfc1583compat yes; # area 0.0.0.0 { # stub no; # interface "eth*" { # hello 9; # retransmit 6; # cost 10; # transmit delay 5; # dead count 5; # wait 50; # type broadcast; # authentication simple; # password "pass"; # }; # interface "arc0" { # rx buffer large; # type nonbroadcast; # poll 14; # dead 75; # neighbors { # 10.1.1.2 eligible; # 10.1.1.4; # }; # strict nonbroadcast yes; # }; # interface "xxx0" { # passwords { # password "abc" { # id 1; # generate to "22-04-2003 11:00:06"; # accept to "17-01-2004 12:01:05"; # }; # password "def" { # id 2; # generate from "22-04-2003 11:00:07"; # accept from "17-01-2003 12:01:05"; # }; # }; # authentication cryptographic; # }; # }; # area 20 { # stub 1; # interface "ppp1" { # hello 8; # authentication none; # }; # interface "fr*"; # virtual link 192.168.0.1 { # password "sdsdffsdfg"; # authentication cryptographic; # }; # }; #} #protocol bgp { # disabled; # description "My BGP uplink"; # local as 65000; # neighbor 198.51.100.130 as 64496; # multihop; # hold time 240; # startup hold time 240; # connect retry time 120; # keepalive time 80; # defaults to hold time / 3 # start delay time 5; # How long do we wait before initial connect # error wait time 60, 300;# Minimum and maximum time we wait after an error (when consecutive # # errors occur, we increase the delay exponentially ... # error forget time 300; # ... until this timeout expires) # disable after error; # Disable the protocol automatically when an error occurs # next hop self; # Disable next hop processing and always advertise our local address as nexthop # path metric 1; # Prefer routes with shorter paths (like Cisco does) # default bgp_med 0; # MED value we use for comparison when none is defined # default bgp_local_pref 0; # The same for local preference # source address 198.51.100.14; # What local address we use for the TCP connection # password "secret"; # Password used for MD5 authentication # rr client; # I am a route reflector and the neighor is my client # rr cluster id 1.0.0.1; # Use this value for cluster id instead of my router id # export where source=RTS_STATIC; # export filter { # if source = RTS_STATIC then { # bgp_community = -empty-; bgp_community = add(bgp_community,(65000,5678)); # bgp_origin = 0; # bgp_community = -empty-; bgp_community.add((65000,5678)); # if (65000,64501) ~ bgp_community then # bgp_community.add((0, 1)); # if bgp_path ~ [= 65000 =] then # bgp_path.prepend(65000); # accept; # } # reject; # }; #} # # Template usage example #template bgp rr_client { # disabled; # local as 65000; # multihop; # rr client; # rr cluster id 1.0.0.1; #} # #protocol bgp rr_abcd from rr_client { # neighbor 10.1.4.7 as 65000; #}