1. 16 Dec, 2018 2 commits
    • Ondřej Zajíček's avatar
      BGP: Extend 'next hop keep' and 'next hop self' options · 1cab2b4a
      Ondřej Zajíček authored
      Extend 'next hop keep' and 'next hop self' options to have boolean values
      (enabled / disabled) and also values 'ibgp'/ 'ebgp' to restrict it to
      routes received from IBGP / EBGP. This allows to have it enabled by
      default in some cases, matches features of other implementations, and
      allows to handle some strange cases like EBGP border router with 'next
      hop self' also doing IBGP route reflecting.
      
      Change default of 'next hop keep' to enabled for route servers, and
      'ibgp' for route reflectors.
      
      Update documentation for these options.
      1cab2b4a
    • Ondřej Zajíček's avatar
      cb311b44
  2. 14 Dec, 2018 1 commit
  3. 12 Dec, 2018 3 commits
    • Ondřej Zajíček's avatar
      BGP: Do not prepend ASN in export from non-RS EBGP to RS EBGP · 532116e7
      Ondřej Zajíček authored
      When route is exported to regular EBGP, local ASN should be prepended to
      AS_PATH. When route is propagated by route server (between RS-marked
      EBGP peers), it should not change AS_PATH. Question is what to do in
      other cases (from non-RS EBGP, IBGP, or locally originated to RS EBGP).
      
      In 1.6.x, we did not prepend ASN in non-RS EBGP or IBGP to RS EBGP, but
      we prepended in local to RS EBGP.
      
      In 2.0.x, we changed that so only RS-EBGP to RS-EBGP is not prepended.
      We received some negative responses (thanks to heisenbug and Alexander
      Zubkov), we decided to change it back. One reason is that it is simple
      to modify the AS_PATH by filters, but not possible to un-modify
      changes done by BGP itself. Also, as 1.6.x behavior was not really
      consistent, the final behavior is that ASN is never prepended when
      exported to RS EBGP, like to IBGP.
      
      Note that i do not express an opinion about whether such configurations
      are even reasonable.
      532116e7
    • Ondřej Zajíček's avatar
      Update RFC references · 0f40405f
      Ondřej Zajíček authored
      Progdoc comments do not allow SGML tags
      0f40405f
    • 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
  4. 11 Dec, 2018 1 commit
    • Ondřej Zajíček's avatar
      Nest: Forbid adding channels during reconfiguration · d506263d
      Ondřej Zajíček authored
      When a new channel is found during reconfiguration, do force restart
      of the protocol, like with any other un-reconfigurable change.
      
      The old behavior was that the new channel was added but remained in down
      state, even if the protocol was up, so a manual protocol restart was
      often necessary.
      
      In the future this should be improved such that a reconfigurable
      channel addition (e.g. direct) is accepted and channel is started,
      while an un-reconfigurable addition forces protocol restart.
      d506263d
  5. 10 Dec, 2018 1 commit
    • Ondřej Zajíček's avatar
      OSPF: Fix reconfiguration of vlinks · baeacdcf
      Ondřej Zajíček authored
      Fix crash during reconfiguration of OSPF config with vlinks. When vlink
      is reconfigured, a generic iface-reconfiguration code is used, which in
      one place supposes that it is running on a regular iface.
      
      Thanks to Cybertinus for a bugreport.
      baeacdcf
  6. 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
  7. 28 Nov, 2018 1 commit
    • Ondřej Zajíček's avatar
      Nest: Do not hard-reset interface when preferred address is changed · e2ae0869
      Ondřej Zajíček authored
      Modify protocols to use preferred address change notification instead on
      depending on hard-reset of interfaces in that case, and remove hard-reset
      in that case. This avoids issue when e.g. IPv6 protocol restarts
      interface when IPv4 preferred address changed (as hard-reset is
      unavoidable and common for whole iface).
      
      The patch also fixes a bug when removing last address does not send
      preferred address change notification.
      e2ae0869
  8. 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
  9. 26 Oct, 2018 1 commit
  10. 25 Oct, 2018 1 commit
    • Ondřej Zajíček's avatar
      OSPF: Fix some trace messages · 0ac9cb2c
      Ondřej Zajíček authored
      Missing argument in MTU change trace message can crash bird when MTU
      change happens and trace messages are active.
      
      Thanks to Alexander Velkov for the bugreport.
      0ac9cb2c
  11. 01 Oct, 2018 2 commits
  12. 18 Sep, 2018 1 commit
    • Jan Maria Matejka's avatar
      No more warnings ... · d4cebc6b
      Jan Maria Matejka authored
      no more warnings
      No more warnings over me
      And while it is being compiled all the log is black and white
      Release BIRD now and then let it flee
      
      (use the melody of well-known Oh Freedom!)
      d4cebc6b
  13. 31 Jul, 2018 1 commit
  14. 19 Jul, 2018 2 commits
  15. 03 Jul, 2018 1 commit
  16. 01 Jul, 2018 2 commits
  17. 29 Jun, 2018 1 commit
  18. 27 Jun, 2018 1 commit
  19. 26 Jun, 2018 2 commits
  20. 13 Jun, 2018 2 commits
  21. 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
  22. 29 May, 2018 2 commits
  23. 24 May, 2018 1 commit
    • Ondřej Zajíček's avatar
      Do not initialize route metrics in import_control hook · feae132e
      Ondřej Zajíček authored
      During route export, the receiving protocol often initialized route
      metrics to default value in its import_control hook before export filter
      was executed. This is inconsistent with the expectation that an export
      filter would process the same route as one in the routing table and it
      breaks setting these metrics before (e.g. for static routes directly in
      static protocol).
      
      The patch removes the initialization of route metrics in import_control
      hook, the default values are already handled in rt_notify hook called
      after export filters.
      
      The patch also changed the behavior of OSPF to keep metrics when a route
      is reannounced between OSPF instances (to be consistent with other
      protocols) and the behavior when both ospf_metric1 and ospf_metric2
      are specified (to have more expected behavior).
      feae132e
  24. 03 May, 2018 2 commits
    • Ondřej Zajíček's avatar
      Babel: Add option to randomize router ID · 70fab178
      Ondřej Zajíček authored
      When a Babel node restarts, it loses its sequence number, which can cause
      its routes to be rejected by peers until the state is cleared out by other
      nodes in the network (which can take on the order of minutes).
      
      There are two ways to fix this: Having stable storage to keep the sequence
      number across restarts, or picking a different router ID each time.
      
      This implements the latter, by introducing a new option that will cause
      BIRD to randomize a high 32 bits of router ID every time it starts up.
      This avoids the problem at the cost of not having stable router IDs in
      the network.
      
      Thanks to Toke Hoiland-Jorgensen for the patch.
      70fab178
    • Ondřej Zajíček's avatar
      Babel: Fix type of route entry router ID · 23b07904
      Ondřej Zajíček authored
      The router ID being assigned to routes was a uint, which discards the
      upper 32 bits. This also has the nice side effect of echoing the wrong
      router ID back to other routers.
      
      Thanks to Toke Hoiland-Jorgensen for the patch.
      23b07904
  25. 25 Apr, 2018 1 commit
  26. 12 Apr, 2018 1 commit
  27. 07 Mar, 2018 1 commit
  28. 13 Feb, 2018 2 commits
    • Ondřej Zajíček's avatar
      Babel: Fix accidental bitwise or assignment · 5ce7adfc
      Ondřej Zajíček authored
      Fix an accidental bitwise or assignment that was supposed to be a
      comparison.
      
      Thanks to Toke Hoiland-Jorgensen for the patch.
      5ce7adfc
    • Ondřej Zajíček's avatar
      Babel: Add source-specific routing support · 185a0a51
      Ondřej Zajíček authored
      This patch adds support for source-specific routing to the Babel protocol.
      It changes the protocol to support both NET_IP6 and NET_IP6_SADR channels
      for IPv6 addresses. If only a NET_IP6 channel is configured,
      source-specific updates are ignored. Otherwise, non-source-specific
      routes are simply treated as source-specific routes with SADR prefix 0.
      
      Thanks to Toke Hoiland-Jorgensen for the original patch.
      Minor changes by Ondrej Santiago Zajicek.
      185a0a51
  29. 23 Jan, 2018 1 commit