]> git.ipfire.org Git - thirdparty/bird.git/commitdiff
Enable ECMP and Link detection by default
authorOndrej Zajicek (work) <santiago@crfreenet.org>
Fri, 8 Dec 2017 14:59:44 +0000 (15:59 +0100)
committerOndrej Zajicek (work) <santiago@crfreenet.org>
Fri, 8 Dec 2017 15:00:33 +0000 (16:00 +0100)
ECMP is not enabled on BSD, where it is not supported by BIRD.

nest/route.h
proto/bgp/config.Y
proto/ospf/config.Y
proto/rip/config.Y
sysdep/bsd/krt-sock.c
sysdep/linux/netlink.c

index bb0cb4a475e26b5e6619a82e119352f5e9c08854..792f79dd905e0b98716fc7cfb6f892ac468879fd 100644 (file)
@@ -309,6 +309,8 @@ int rt_feed_channel(struct channel *c);
 void rt_feed_channel_abort(struct channel *c);
 struct rtable_config *rt_new_table(struct symbol *s, uint addr_type);
 
+/* Default limit for ECMP next hops, defined in sysdep code */
+extern const int rt_default_ecmp;
 
 struct rt_show_data_rtable {
   node n;
index 941ae5b6a12df7efc08fa992f958ee6e74747c13..0bd4c55431db0f3b5d3e9ba8e2fe8f3d65006704 100644 (file)
@@ -58,6 +58,7 @@ bgp_proto_start: proto_start BGP {
      BGP_CFG->gr_mode = BGP_GR_AWARE;
      BGP_CFG->gr_time = 120;
      BGP_CFG->setkey = 1;
+     BGP_CFG->check_link = 1;
    }
  ;
 
index 98ddf5d070c4c825f3a3db00d1884e2cf63df19d..04d5e2e95a34f0b39ea7255f149b10a064af8dcc 100644 (file)
@@ -219,6 +219,7 @@ ospf_proto_start: proto_start ospf_variant
 
   init_list(&OSPF_CFG->area_list);
   init_list(&OSPF_CFG->vlink_list);
+  OSPF_CFG->ecmp = rt_default_ecmp;
   OSPF_CFG->tick = OSPF_DEFAULT_TICK;
   OSPF_CFG->ospf2 = $2;
   OSPF_CFG->af_ext = !$2;
@@ -461,6 +462,7 @@ ospf_iface_start:
   OSPF_PATT->deadc = DEADC_D;
   OSPF_PATT->type = OSPF_IT_UNDEF;
   init_list(&OSPF_PATT->nbma_list);
+  OSPF_PATT->check_link = 1;
   OSPF_PATT->ptp_netmask = 2; /* not specified */
   OSPF_PATT->tx_tos = IP_PREC_INTERNET_CONTROL;
   OSPF_PATT->tx_priority = sk_priority_control;
index e3bc4ae3294217211ae1df67a74e4438b630af79..aff63f03de0f56d7a729f33d5b3d807af038fb1f 100644 (file)
@@ -56,6 +56,7 @@ rip_proto_start: proto_start rip_variant
 
   init_list(&RIP_CFG->patt_list);
   RIP_CFG->rip2 = $2;
+  RIP_CFG->ecmp = rt_default_ecmp;
   RIP_CFG->infinity = RIP_DEFAULT_INFINITY;
   RIP_CFG->min_timeout_time = 60 S_;
   RIP_CFG->max_garbage_time = 60 S_;
@@ -92,6 +93,7 @@ rip_iface_start:
   RIP_IFACE->split_horizon = 1;
   RIP_IFACE->poison_reverse = 1;
   RIP_IFACE->check_zero = 1;
+  RIP_IFACE->check_link = 1;
   RIP_IFACE->ttl_security = rip_cfg_is_v2() ? 0 : 1;
   RIP_IFACE->rx_buffer = rip_cfg_is_v2() ? RIP_MAX_PKT_LENGTH : 0;
   RIP_IFACE->tx_length = rip_cfg_is_v2() ? RIP_MAX_PKT_LENGTH : 0;
index c36ae558ab69c5570446648918e2282f5607acb8..604cd5106522cda7dff0465573ae46165da35310 100644 (file)
@@ -33,6 +33,7 @@
 #include "lib/string.h"
 #include "lib/socket.h"
 
+const int rt_default_ecmp = 0;
 
 /*
  * There are significant differences in multiple tables support between BSD variants.
@@ -145,9 +146,8 @@ krt_capable(rte *e)
 {
   rta *a = e->attrs;
 
-  /* XXXX device routes are broken */
   return
-    ((a->dest == RTD_UNICAST && ipa_nonzero(a->nh.gw) && !a->nh.next) /* No multipath support */
+    ((a->dest == RTD_UNICAST && !a->nh.next) /* No multipath support */
 #ifdef RTF_REJECT
      || a->dest == RTD_UNREACHABLE
 #endif
index 05c1fa8ca539a7393786a88465b3a80b0a4fd384..ca5c79a414539e85174e5ca3f3c581968dc7d7ee 100644 (file)
@@ -80,6 +80,8 @@ struct rtvia {
 
 #define krt_ecmp6(p) ((p)->af == AF_INET6)
 
+const int rt_default_ecmp = 16;
+
 /*
  * Structure nl_parse_state keeps state of received route processing. Ideally,
  * we could just independently parse received Netlink messages and immediately