summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorradhika <radhika@cumulusnetworks.com>2016-04-22 00:39:38 +0200
committerradhika <radhika@cumulusnetworks.com>2016-04-22 00:39:38 +0200
commit986aa00f94cdfcecbb806d13e9594017d0a02b82 (patch)
tree7bb78d09759d99a0677a7f0452158e13efc4f798 /lib
parentquagga-reload broken for 'neighbor swpX interface peer-group FOO' (diff)
downloadfrr-986aa00f94cdfcecbb806d13e9594017d0a02b82.tar.xz
frr-986aa00f94cdfcecbb806d13e9594017d0a02b82.zip
Addition on hidden command "bfd multihop/singlehop" and "ptm-enable" per interface command
CM-10435 Issue: IBGP BFD sessions are created as multi-hop even though peer is single-hop away. This is causing an interop issue with ICOS. Root Cause: By design all IBGP peers are registered with BFD as multi-hop. Fix: • Changed the default behavior of always treating IBGP BFD sessions as mult-hop. shared_network variable is used to determine whether the IBGP peer is single hop or multi-hop away. The logic for determining whether EBGP peer is single hop or multi-hop has not been changed. • Since the default behavior has been changed, it will cause interop issues between 2.5 and 3.0 IBGP BFD sessions. A new hidden command “bfd multihop/singlehop” has been introduced to overcome the interop issues. dell-s6000-10(config-router)# neighbor 30.0.2.6 bfd <2-255> Detect Multiplier <cr> dell-s6000-10(config-router)# neighbor 30.0.2.6 bfd multihop dell-s6000-10(config-router)# no neighbor 30.0.2.6 bfd multihop dell-s6000-10(config-router)# dell-s6000-10(config-router)# neighbor 30.0.2.6 bfd multihop dell-s6000-10(config-router)# do show running-config ! router bgp 100 neighbor igroup peer-group neighbor igroup bfd 5 500 500 neighbor igroup bfd multihop neighbor 30.0.2.2 remote-as 100 neighbor 30.0.2.2 peer-group igroup neighbor 3101:abc:bcad::2 remote-as 100 neighbor 3101:abc:bcad::2 peer-group igroup neighbor 30.0.2.6 remote-as 200 neighbor 30.0.2.6 bfd multihop neighbor 3102:abc:bcad::6 remote-as 200 neighbor 3102:abc:bcad::6 bfd neighbor 3102:abc:bcad::6 ebgp-multihop 255 ! CM-10260 Issue: “Unable to connect to socket” message keeps getting logged when ptmd process doesn’t exist. Root Cause: BFD clients (bgpd, ospfd and ospf6d) during initialization try to register with BFD/PTM by default. This results in continuous logging If PTM does not exist since there is no max on number of retries. Fix: • Stop the retries to connect to PTM after max reconnect timer of 5 mins is reached. • Added zebra debug event wrapper to message logging to prevent it from showing by default. CM-4541 Issue: Addition of a new command "ptm-enable" or "no ptm-enable" per interface to enable/disable PTM link status checks for an interface. Fix: Currently there is only one ptm-enable global command that enables/disables PTM status updates for all interfaces. This new command will give the handle to individually stop interface from reacting on the PTM status updates. • by default interface uses the ptm-enable global configuration • "no ptm-enable" on an interface will disable PTM status updates from taking affect for that interface. This can bring the interface up if it was brought down due to PTM status update. • "ptm-enable" on an interface will cause the interface to fallback to the global ptm-enable configuration value and will bring the interface up or down based on the last stored PTM status update if global ptm is enabled. Ticket: CM-10435, CM-10260 and CM-4541 Signed-off-by: Radhika Mahankali Reviewed-by: Donald Sharp, Kanna Rajagopal
Diffstat (limited to 'lib')
-rw-r--r--lib/bfd.c1
-rw-r--r--lib/bfd.h21
2 files changed, 16 insertions, 6 deletions
diff --git a/lib/bfd.c b/lib/bfd.c
index 4a29b3267..ddf03d4f1 100644
--- a/lib/bfd.c
+++ b/lib/bfd.c
@@ -45,6 +45,7 @@ bfd_info_create(void)
assert(bfd_info);
bfd_info->status = BFD_STATUS_UNKNOWN;
+ bfd_info->type = BFD_TYPE_NOT_CONFIGURED;
bfd_info->last_update = 0;
return bfd_info;
}
diff --git a/lib/bfd.h b/lib/bfd.h
index b001ae967..31e542d8b 100644
--- a/lib/bfd.h
+++ b/lib/bfd.h
@@ -29,6 +29,7 @@
#define BFD_CMD_DETECT_MULT_RANGE "<2-255> "
#define BFD_CMD_MIN_RX_RANGE "<50-60000> "
#define BFD_CMD_MIN_TX_RANGE "<50-60000>"
+#define BFD_CMD_TYPE "(multihop|singlehop)"
#define BFD_DEF_MIN_RX 300
#define BFD_MIN_MIN_RX 50
@@ -42,19 +43,27 @@
#define BFD_FLAG_PARAM_CFG (1 << 0) /* parameters have been configured */
#define BFD_FLAG_BFD_REG (1 << 1) /* Peer registered with BFD */
+#define BFD_FLAG_BFD_TYPE_MULTIHOP (1 << 2) /* Peer registered with BFD as multihop */
#define BFD_STATUS_UNKNOWN (1 << 0) /* BFD session status never received */
#define BFD_STATUS_DOWN (1 << 1) /* BFD session status is down */
#define BFD_STATUS_UP (1 << 2) /* BFD session status is up */
+enum bfd_sess_type {
+ BFD_TYPE_NOT_CONFIGURED,
+ BFD_TYPE_SINGLEHOP,
+ BFD_TYPE_MULTIHOP
+};
+
struct bfd_info
{
- u_int16_t flags;
- u_int8_t detect_mult;
- u_int32_t desired_min_tx;
- u_int32_t required_min_rx;
- time_t last_update;
- u_int8_t status;
+ u_int16_t flags;
+ u_int8_t detect_mult;
+ u_int32_t desired_min_tx;
+ u_int32_t required_min_rx;
+ time_t last_update;
+ u_int8_t status;
+ enum bfd_sess_type type;
};
extern struct bfd_info *