/*
 * Ed Pendzik
 * 12/10/2014
 * 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;

router id 192.168.1.1;

# You can define your own symbols...
#define xyzzy = (120+10);

# Define a route filter...
#filter test_filter {
#  if net ~ 10.0.0.0/16 then accept;
#  else reject;
#}

#filter sink { reject; }
#filter okay { accept; }

# Turn on global debugging of all protocols
debug protocols all;

# 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 "-en0", "*"; # Restrict network interfaces it works with
#  interface "en0", "wip0";
  interface "en0";
}


# 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 {
#   disabled;
   learn;            # Learn all alien routes from the kernel
   persist;          # Don't remove routes on bird shutdown
   scan time 5;      # Scan kernel routing table every X 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 {
#   disabled;
#   interface "eth*", "ppp*", "wip*";
#   interface "en0", "wip0";
# error?#   interface "en0";
# error?#   interface en0;
   scan time 5;   # Scan interfaces every X 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 {
       # XXX what is tick?
       tick 2;
  rfc1583compat yes;
  area 0.0.0.0 {
     stub no;
     interface "en0" {
        cost 10;
        retransmit 5;
        transmit delay 1;
        hello 10;
        dead count 40;
        # XXX what is wait?
        wait 5;
        type broadcast;
        authentication none;
        #authentication simple;
        #password "x";
     };
     #interface "wip0" {
     #   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;

