1. 12 Dec, 2018 1 commit
    • Ondřej Zajíček's avatar
      BGP: implement Adj-RIB-In · 682d3f7d
      Ondřej Zajíček authored
      The patch implements optional internal import table to a channel and
      hooks it to BGP so it can be used as Adj-RIB-In. When enabled, all
      received (pre-filtered) routes are stored there and import filters can
      be re-evaluated without explicit route refresh. An import table can be
      examined using e.g. 'show route import table bgp1.ipv4'.
      682d3f7d
  2. 06 Dec, 2018 1 commit
    • Maria Matejka's avatar
      Custom route attributes · 265419a3
      Maria Matejka authored
      For local route marking purposes, local custom route attributes may be
      defined. These attributes are seamlessly stripped after export filter to
      every real protocol like Kernel, BGP or OSPF, they however pass through
      pipes. We currently allow at most 256 custom attributes.
      
      This should be much faster than currently used bgp communities
      for marking routes.
      265419a3
  3. 04 Dec, 2018 1 commit
    • Jan Maria Matejka's avatar
      Terminology cleanup: The import_control hook is now called preexport. · 14375237
      Jan Maria Matejka authored
      Once upon a time, far far away, there were the old Bird developers
      discussing what direction of route flow shall be called import and
      export. They decided to say "import to protocol" and "export to table"
      when speaking about a protocol. When speaking about a table, they
      spoke about "importing to table" and "exporting to protocol".
      
      The latter terminology was adopted in configuration, then also the
      bird CLI in commit ea2ae6dd started to use it (in year 2009). Now
      it's 2018 and the terminology is the latter. Import is from protocol to
      table, export is from table to protocol. Anyway, there was still an
      import_control hook which executed right before route export.
      
      One thing is funny. There are two commits in April 1999 with just two
      minutes between them. The older announces the final settlement
      on config terminology, the newer uses the other definition. Let's see
      their commit messages as the git-log tool shows them (the newer first):
      
          commit 9e0e485e
          Author: Martin Mares <mj@ucw.cz>
          Date:   Mon Apr 5 20:17:59 1999 +0000
      
      	Added some new protocol hooks (look at the comments for better explanation):
      
      		make_tmp_attrs          Convert inline attributes to ea_list
      		store_tmp_attrs         Convert ea_list to inline attributes
      		import_control          Pre-import decisions
      
          commit 5056c559
          Author: Martin Mares <mj@ucw.cz>
          Date:   Mon Apr 5 20:15:31 1999 +0000
      
      	Changed syntax of attaching filters to protocols to hopefully the final
      	version:
      
      		EXPORT <filter-spec>    for outbound routes (i.e., those announced
      					by BIRD to the rest of the world).
      		IMPORT <filter-spec>    for inbound routes (i.e., those imported
      					by BIRD from the rest of the world).
      
      	where <filter-spec> is one of:
      
      		ALL                     pass all routes
      		NONE                    drop all routes
      		FILTER <name>           use named filter
      		FILTER { <filter> }     use explicitly defined filter
      
      	For all protocols, the default is IMPORT ALL, EXPORT NONE. This includes
      	the kernel protocol, so that you need to add EXPORT ALL to get the previous
      	configuration of kernel syncer (as usually, see doc/bird.conf.example for
      	a bird.conf example :)).
      
      Let's say RIP to this almost 19-years-old inconsistency. For now, if you
      import a route, it is always from protocol to table. If you export a
      route, it is always from table to protocol.
      
      And they lived happily ever after.
      14375237
  4. 20 Nov, 2018 1 commit
    • Ondřej Zajíček's avatar
      The MRT protocol · 863ecfc7
      Ondřej Zajíček authored
      The new MRT protocol is responsible for periodic RIB table dumps in the
      MRT format (RFC 6396). Also the existing code for BGP4MP MRT dumps is
      refactored and splitted between BGP to MRT protocols, will be more
      integrated into MRT in the future.
      
      Example:
      
      protocol mrt {
              table "*";
              filename "%N_%F_%T.mrt";
              period 60;
      }
      
      It is partially based on the old MRT code from Pavel Tvrdik.
      863ecfc7
  5. 05 Nov, 2018 1 commit
  6. 31 Jul, 2018 1 commit
  7. 30 May, 2018 1 commit
    • Jan Maria Matejka's avatar
      Nest: Removing separate tmpa from route propagation · 13c0be19
      Jan Maria Matejka authored
      This is a fundamental change of an original (1999) concept of route
      processing inside BIRD. During import/export, there was a temporary
      ea_list created which was to be used instead of the another one inside
      the route itself.
      
      This led to some confusion, quirks, and strange filter code that handled
      extended route attributes. Dropping it now.
      
      The protocol interface has changed in an uniform way -- the
      `struct ea_list *attrs` argument has been removed from store_tmp_attrs(),
      import_control(), rt_notify() and get_route_info().
      13c0be19
  8. 29 May, 2018 1 commit
  9. 07 Feb, 2018 1 commit
  10. 06 Feb, 2018 1 commit
    • Ondřej Zajíček's avatar
      KRT: Fix IPv6 route learn · 28b3b551
      Ondřej Zajíček authored
      Internal table used for route learn was created with non-matching net
      type for IPv6 kernel proto.
      
      Thanks to Toke Hoiland-Jorgensen for the bugreport
      28b3b551
  11. 02 Jan, 2018 1 commit
  12. 08 Dec, 2017 1 commit
  13. 07 Dec, 2017 3 commits
    • Ondřej Zajíček's avatar
    • Ondřej Zajíček's avatar
      Babel: More changes and bugfixes · 3b3b0910
      Ondřej Zajíček authored
      Several changes and bugfixes in Babel, namely:
      
      - Exported route parameters stored directly in route table entry
      - Exported non-babel routes no longer stored in per-entry route list
      - Route update, selection and retraction simplified and fixed
      - Route feasibility is evalualated per update and stored with route
      - Unreachable route handling fixed, based on hold interval
      - Added 'show babel routes' command
      
      Overall, it fixes some issues with proper propagation of triggered
      updates, making Babel convergence after topology change almost
      instant.
      3b3b0910
    • Ondřej Zajíček's avatar
      Timers: Parse and format functions for microsecond times · f047271c
      Ondřej Zajíček authored
      Date/time output (e.g. in logs, show commands) can use %f to specify
      subsecond time. By default, millisecond precision is used in output.
      f047271c
  14. 04 Oct, 2017 1 commit
    • Michal 'vorner' Vaner's avatar
      RAdv: Support for more specific routes (RFC 4191) · 2a95e633
      Michal 'vorner' Vaner authored
      The patch implements Default Router Preferences and More-Specific Routes
      (RFC 4191) for RAdv protocol, allowing to announce router preference and
      more specific routes in router advertisements. Routes can be exported to
      RAdv like to regular routing protocols.
      
      Some cleanups, bugfixes and other changes done by Ondrej Zajicek.
      2a95e633
  15. 12 Sep, 2017 1 commit
  16. 04 Jul, 2017 1 commit
    • Ondřej Zajíček's avatar
      Implement onlink flag for nexthops · a1f5e514
      Ondřej Zajíček authored
      Add proper support for per-nexthop onlink flag in routes to handle next
      hop addresses that are not covered by interface IP ranges. Supported by
      kernel and static protocols.
      
      Thanks to Vincent Bernat for the idea.
      a1f5e514
  17. 25 Apr, 2017 1 commit
    • Ondřej Zajíček's avatar
      Nest: Update of show route cmd · b2949999
      Ondřej Zajíček authored
      Some code cleanup, multiple bugfixes, allows to specify also channel
      for 'show route export'. Interesting how such apparenty simple thing
      like show route cmd has plenty of ugly corner cases.
      b2949999
  18. 12 Apr, 2017 2 commits
  19. 22 Mar, 2017 1 commit
    • Ondřej Zajíček's avatar
      BGP: Support for MPLS labels and VPN SAFI · 1e37e35c
      Ondřej Zajíček authored
      Basic support for SAFI 4 and 128 (MPLS labeled IP and VPN) for IPv4 and
      IPv6. Should work for route reflector, but does not properly handle
      originating routes with next hop self.
      
      Based on patches from Jan Matejka.
      1e37e35c
  20. 17 Mar, 2017 1 commit
  21. 09 Mar, 2017 1 commit
  22. 24 Feb, 2017 1 commit
  23. 22 Feb, 2017 1 commit
  24. 20 Feb, 2017 1 commit
  25. 03 Jan, 2017 1 commit
  26. 22 Dec, 2016 6 commits
  27. 07 Dec, 2016 2 commits
    • Ondřej Zajíček's avatar
      BGP redesign · d15b0b0a
      Ondřej Zajíček authored
      Integrated and extensible BGP with generalized AFI handling,
      support for IPv4+IPv6 AFI and unicast+multicast SAFI.
      d15b0b0a
    • Pavel Tvrdík's avatar
      RPKI protocol with one cache server per protocol · 65d2a88d
      Pavel Tvrdík authored
      The RPKI protocol (RFC 6810) using the RTRLib
      (http://rpki.realmv6.org/) that is integrated inside
      the BIRD's code.
      
      Implemeted transports are:
       - unprotected transport over TCP
       - secure transport over SSHv2
      
      Example configuration of bird.conf:
        ...
        roa4 table r4;
        roa6 table r6;
      
        protocol rpki {
          debug all;
      
          # Import both IPv4 and IPv6 ROAs
          roa4 { table r4; };
          roa6 { table r6; };
      
          # Set cache server (validator) address,
          # overwrite default port 323
          remote "rpki-validator.realmv6.org" port 8282;
      
          # Overwrite default time intervals
          retry   10;         # Default 600 seconds
          refresh 60;         # Default 3600 seconds
          expire 600;         # Default 7200 seconds
        }
      
        protocol rpki {
          debug all;
      
          # Import only IPv4 routes
          roa4 { table r4; };
      
          # Set cache server address to localhost,
          # use default ports tcp => 323 or ssh => 22
          remote 127.0.0.1;
      
          # Use SSH transport instead of unprotected transport over TCP
          ssh encryption {
            bird private key "/home/birdgeek/.ssh/id_rsa";
            remote public key "/home/birdgeek/.ssh/known_hosts";
            user "birdgeek";
          };
        }
        ...
      65d2a88d
  28. 09 Nov, 2016 1 commit
    • Ondřej Zajíček's avatar
      Unit Testing for BIRD · 9b0a0ba9
      Ondřej Zajíček authored
       - Unit Testing Framework (BirdTest)
       - Integration of BirdTest into the BIRD build system
       - Tests for several BIRD modules
      
       Based on squashed Pavel Tvrdik's int-test branch, updated for
       current int-new branch.
      9b0a0ba9
  29. 01 Nov, 2016 1 commit
  30. 03 Oct, 2016 1 commit
    • Ondřej Zajíček's avatar
      BGP: Support for large communities · 66dbdbd9
      Ondřej Zajíček authored
      Add support for large communities (draft-ietf-idr-large-community),
      96bit alternative to RFC 1997 communities.
      
      Thanks to Matt Griswold for the original patch.
      66dbdbd9
  31. 15 Sep, 2016 1 commit
    • Pavel Tvrdik's avatar
      rt-table: Fix kernel protocol export filter memory bug · a290da25
      Pavel Tvrdik authored
      Kernel protocol calls rt_export_merged(), which used @rte_update_pool for
      temporary allocations, supposing it is called from other functions from
      rt-table.c that handles locking and flushing of the linpool. Therefore,
      linpool was not flushed properly and memory leaked.
      
      Add linpool argument to rt_export_merged() and use @krt_filter_lp when
      called from kernel protocol.
      
      Thanks to Justin Cattle and Alexander Frolkin for the bugreport.
      
      (Commit squashed and updated by Ondrej Zajicek)
      a290da25