]> git.puffer.fish Git - matthieu/frr.git/commitdiff
bfdd: separate echo rx/tx timers
authorIgor Ryzhov <iryzhov@nfware.com>
Wed, 10 Mar 2021 14:31:57 +0000 (17:31 +0300)
committerIgor Ryzhov <iryzhov@nfware.com>
Tue, 16 Mar 2021 19:14:57 +0000 (22:14 +0300)
Currently there is a single interval for both RX and TX echo functions.
This commit introduces separate RX and TX timers for echo packets.

The main advantage is to be able to set the receive interval to zero
when we don't want to receive echo packets from the remote system.

Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
33 files changed:
bfdd/bfd.c
bfdd/bfd.h
bfdd/bfd_packet.c
bfdd/bfdctl.h
bfdd/bfdd_cli.c
bfdd/bfdd_nb.c
bfdd/bfdd_nb.h
bfdd/bfdd_nb_config.c
bfdd/bfdd_vty.c
bfdd/bfddp_packet.h
bfdd/config.c
bfdd/dplane.c
doc/user/bfd.rst
tests/topotests/bfd-bgp-cbit-topo3/r1/peers.json
tests/topotests/bfd-bgp-cbit-topo3/r1/peers_down.json
tests/topotests/bfd-bgp-cbit-topo3/r3/peers.json
tests/topotests/bfd-bgp-cbit-topo3/r3/peers_down.json
tests/topotests/bfd-profiles-topo1/r1/bfdd.conf
tests/topotests/bfd-profiles-topo1/r2/bfd-peers-initial.json
tests/topotests/bfd-profiles-topo1/r2/bfdd.conf
tests/topotests/bfd-profiles-topo1/r3/bfd-peers-initial.json
tests/topotests/bfd-profiles-topo1/r4/bfd-peers-initial.json
tests/topotests/bfd-topo1/r2/peers.json
tests/topotests/bfd-topo2/r1/peers.json
tests/topotests/bfd-topo2/r2/peers.json
tests/topotests/bfd-topo2/r3/peers.json
tests/topotests/bfd-topo2/r4/peers.json
tests/topotests/bfd-topo3/r1/bfd-peers.json
tests/topotests/bfd-topo3/r2/bfd-peers.json
tests/topotests/bfd-topo3/r3/bfd-peers.json
tests/topotests/bfd-topo3/r4/bfd-peers.json
tests/topotests/bfd-vrf-topo1/r2/peers.json
yang/frr-bfdd.yang

index 3cbb3691ec47f434b3d64bc653842fc3145c5421..aa30ca8ad3febf52b82784019f7ac1ec589dd546 100644 (file)
@@ -90,7 +90,8 @@ static void bfd_profile_set_default(struct bfd_profile *bp)
        bp->echo_mode = false;
        bp->passive = false;
        bp->minimum_ttl = BFD_DEF_MHOP_TTL;
-       bp->min_echo_rx = BFD_DEF_REQ_MIN_ECHO;
+       bp->min_echo_rx = BFD_DEF_REQ_MIN_ECHO_RX;
+       bp->min_echo_tx = BFD_DEF_DES_MIN_ECHO_TX;
        bp->min_rx = BFD_DEFREQUIREDMINRX;
        bp->min_tx = BFD_DEFDESIREDMINTX;
 }
@@ -179,13 +180,19 @@ void bfd_session_apply(struct bfd_session *bs)
 
        /* We can only apply echo options on single hop sessions. */
        if (!CHECK_FLAG(bs->flags, BFD_SESS_FLAG_MH)) {
-               /* Configure remote echo if it was default. */
-               if (bs->peer_profile.min_echo_rx == BFD_DEF_REQ_MIN_ECHO)
-                       bs->timers.required_min_echo = bp->min_echo_rx;
+               /* Configure echo timers if they were default. */
+               if (bs->peer_profile.min_echo_rx == BFD_DEF_REQ_MIN_ECHO_RX)
+                       bs->timers.required_min_echo_rx = bp->min_echo_rx;
                else
-                       bs->timers.required_min_echo =
+                       bs->timers.required_min_echo_rx =
                                bs->peer_profile.min_echo_rx;
 
+               if (bs->peer_profile.min_echo_tx == BFD_DEF_DES_MIN_ECHO_TX)
+                       bs->timers.desired_min_echo_tx = bp->min_echo_tx;
+               else
+                       bs->timers.desired_min_echo_tx =
+                               bs->peer_profile.min_echo_tx;
+
                /* Toggle echo if default value. */
                if (bs->peer_profile.echo_mode == false)
                        bfd_set_echo(bs, bp->echo_mode);
@@ -700,7 +707,8 @@ struct bfd_session *bfd_session_new(void)
 
        bs->timers.desired_min_tx = BFD_DEFDESIREDMINTX;
        bs->timers.required_min_rx = BFD_DEFREQUIREDMINRX;
-       bs->timers.required_min_echo = BFD_DEF_REQ_MIN_ECHO;
+       bs->timers.required_min_echo_rx = BFD_DEF_REQ_MIN_ECHO_RX;
+       bs->timers.desired_min_echo_tx = BFD_DEF_DES_MIN_ECHO_TX;
        bs->detect_mult = BFD_DEFDETECTMULT;
        bs->mh_ttl = BFD_DEF_MHOP_TTL;
        bs->ses_state = PTM_BFD_DOWN;
@@ -769,9 +777,14 @@ static void _bfd_session_update(struct bfd_session *bs,
                bs->peer_profile.detection_multiplier = bs->detect_mult;
        }
 
-       if (bpc->bpc_has_echointerval) {
-               bs->timers.required_min_echo = bpc->bpc_echointerval * 1000;
-               bs->peer_profile.min_echo_rx = bs->timers.required_min_echo;
+       if (bpc->bpc_has_echorecvinterval) {
+               bs->timers.required_min_echo_rx = bpc->bpc_echorecvinterval * 1000;
+               bs->peer_profile.min_echo_rx = bs->timers.required_min_echo_rx;
+       }
+
+       if (bpc->bpc_has_echotxinterval) {
+               bs->timers.desired_min_echo_tx = bpc->bpc_echotxinterval * 1000;
+               bs->peer_profile.min_echo_tx = bs->timers.desired_min_echo_tx;
        }
 
        if (bpc->bpc_has_label)
@@ -1189,10 +1202,10 @@ void bs_echo_timer_handler(struct bfd_session *bs)
         * RFC 5880, Section 6.8.9.
         */
        old_timer = bs->echo_xmt_TO;
-       if (bs->remote_timers.required_min_echo > bs->timers.required_min_echo)
+       if (bs->remote_timers.required_min_echo > bs->timers.desired_min_echo_tx)
                bs->echo_xmt_TO = bs->remote_timers.required_min_echo;
        else
-               bs->echo_xmt_TO = bs->timers.required_min_echo;
+               bs->echo_xmt_TO = bs->timers.desired_min_echo_tx;
 
        if (CHECK_FLAG(bs->flags, BFD_SESS_FLAG_ECHO_ACTIVE) == 0
            || old_timer != bs->echo_xmt_TO)
index 7c537b40d0467c9a27773f681a8f5316bcdb921e..503b5ca7d683e61d6a4a184abcfefcbe4b06ab21 100644 (file)
@@ -215,6 +215,8 @@ struct bfd_profile {
 
        /** Echo mode (only applies to single hop). */
        bool echo_mode;
+       /** Desired echo transmission interval (in microseconds). */
+       uint32_t min_echo_tx;
        /** Minimum required echo receive interval (in microseconds). */
        uint32_t min_echo_rx;
 
@@ -228,6 +230,13 @@ TAILQ_HEAD(bfdproflist, bfd_profile);
 /* bfd_session shortcut label forwarding. */
 struct peer_label;
 
+struct bfd_config_timers {
+       uint32_t desired_min_tx;
+       uint32_t required_min_rx;
+       uint32_t desired_min_echo_tx;
+       uint32_t required_min_echo_rx;
+};
+
 /*
  * Session state information
  */
@@ -251,7 +260,7 @@ struct bfd_session {
        struct bfd_profile peer_profile;
 
        /* Timers */
-       struct bfd_timers timers;
+       struct bfd_config_timers timers;
        struct bfd_timers cur_timers;
        uint64_t detect_TO;
        struct thread *echo_recvtimer_ev;
@@ -332,7 +341,8 @@ TAILQ_HEAD(obslist, bfd_session_observer);
 #define BFD_DEFDETECTMULT 3
 #define BFD_DEFDESIREDMINTX (300 * 1000) /* microseconds. */
 #define BFD_DEFREQUIREDMINRX (300 * 1000) /* microseconds. */
-#define BFD_DEF_REQ_MIN_ECHO (50 * 1000) /* microseconds. */
+#define BFD_DEF_DES_MIN_ECHO_TX (50 * 1000) /* microseconds. */
+#define BFD_DEF_REQ_MIN_ECHO_RX (50 * 1000) /* microseconds. */
 #define BFD_DEF_SLOWTX (1000 * 1000) /* microseconds. */
 /** Minimum multi hop TTL. */
 #define BFD_DEF_MHOP_TTL 254
index 12bb52cf67667812ea6a8cc331c48b6e899f1273..c871e2abe1e9aebcfe41dc86d0d43608afb1769a 100644 (file)
@@ -267,7 +267,7 @@ void ptm_bfd_snd(struct bfd_session *bfd, int fbit)
                cp.timers.required_min_rx =
                        htonl(bfd->cur_timers.required_min_rx);
        }
-       cp.timers.required_min_echo = htonl(bfd->timers.required_min_echo);
+       cp.timers.required_min_echo = htonl(bfd->timers.required_min_echo_rx);
 
        if (_ptm_bfd_send(bfd, NULL, &cp, BFD_PKT_LEN) != 0)
                return;
index e1cff9a31c5a2ea867f59f0e57a6f879d736f129..c4b2e803060d42d424db8f19486b7a1bf22beae7 100644 (file)
@@ -47,7 +47,8 @@ struct sockaddr_any {
 #define BPC_DEF_DETECTMULTIPLIER 3
 #define BPC_DEF_RECEIVEINTERVAL 300  /* milliseconds */
 #define BPC_DEF_TRANSMITINTERVAL 300 /* milliseconds */
-#define BPC_DEF_ECHOINTERVAL 50      /* milliseconds */
+#define BPC_DEF_ECHORECEIVEINTERVAL 50 /* milliseconds */
+#define BPC_DEF_ECHOTRANSMITINTERVAL 50 /* milliseconds */
 
 /* Peer status */
 enum bfd_peer_status {
@@ -81,8 +82,11 @@ struct bfd_peer_cfg {
        bool bpc_has_txinterval;
        uint64_t bpc_txinterval;
 
-       bool bpc_has_echointerval;
-       uint64_t bpc_echointerval;
+       bool bpc_has_echorecvinterval;
+       uint64_t bpc_echorecvinterval;
+
+       bool bpc_has_echotxinterval;
+       uint64_t bpc_echotxinterval;
 
        bool bpc_has_minimum_ttl;
        uint8_t bpc_minimum_ttl;
index 206f6c7d0c1d64eb9f7dc4ed01b6c7e004816e46..44e94eb898f1318c175737242c7f4a6a5ac39198 100644 (file)
@@ -451,8 +451,8 @@ void bfd_cli_show_echo(struct vty *vty, struct lyd_node *dnode,
 DEFPY_YANG(
        bfd_peer_echo_interval, bfd_peer_echo_interval_cmd,
        "echo-interval (10-60000)$interval",
-       "Configure peer echo interval\n"
-       "Configure peer echo interval value in milliseconds\n")
+       "Configure peer echo intervals\n"
+       "Configure peer echo rx/tx intervals value in milliseconds\n")
 {
        char value[32];
 
@@ -464,21 +464,88 @@ DEFPY_YANG(
        snprintf(value, sizeof(value), "%ld", interval * 1000);
        nb_cli_enqueue_change(vty, "./desired-echo-transmission-interval",
                              NB_OP_MODIFY, value);
+       nb_cli_enqueue_change(vty, "./required-echo-receive-interval",
+                             NB_OP_MODIFY, value);
+
+       return nb_cli_apply_changes(vty, NULL);
+}
+
+DEFPY_YANG(
+       bfd_peer_echo_transmit_interval, bfd_peer_echo_transmit_interval_cmd,
+       "echo transmit-interval (10-60000)$interval",
+       "Configure peer echo intervals\n"
+       "Configure desired transmit interval\n"
+       "Configure interval value in milliseconds\n")
+{
+       char value[32];
+
+       if (!bfd_cli_is_profile(vty) && !bfd_cli_is_single_hop(vty)) {
+               vty_out(vty, "%% Echo mode is only available for single hop sessions.\n");
+               return CMD_WARNING_CONFIG_FAILED;
+       }
+
+       snprintf(value, sizeof(value), "%ld", interval * 1000);
+       nb_cli_enqueue_change(vty, "./desired-echo-transmission-interval",
+                             NB_OP_MODIFY, value);
+
+       return nb_cli_apply_changes(vty, NULL);
+}
+
+void bfd_cli_show_desired_echo_transmission_interval(struct vty *vty,
+       struct lyd_node *dnode, bool show_defaults)
+{
+       uint32_t value;
+
+       if (show_defaults)
+               vty_out(vty, "  echo transmit-interval %d\n",
+                       BFD_DEF_DES_MIN_ECHO_TX);
+       else {
+               value = yang_dnode_get_uint32(dnode, NULL);
+               vty_out(vty, "  echo transmit-interval %u\n", value / 1000);
+       }
+}
+
+DEFPY_YANG(
+       bfd_peer_echo_receive_interval, bfd_peer_echo_receive_interval_cmd,
+       "echo receive-interval <disabled$disabled|(10-60000)$interval>",
+       "Configure peer echo intervals\n"
+       "Configure required receive interval\n"
+       "Disable echo packets receive\n"
+       "Configure interval value in milliseconds\n")
+{
+       char value[32];
+
+       if (!bfd_cli_is_profile(vty) && !bfd_cli_is_single_hop(vty)) {
+               vty_out(vty, "%% Echo mode is only available for single hop sessions.\n");
+               return CMD_WARNING_CONFIG_FAILED;
+       }
+
+       if (disabled)
+               snprintf(value, sizeof(value), "0");
+       else
+               snprintf(value, sizeof(value), "%ld", interval * 1000);
+       
+       nb_cli_enqueue_change(vty, "./required-echo-receive-interval",
+                             NB_OP_MODIFY, value);
 
        return nb_cli_apply_changes(vty, NULL);
 }
 
-void bfd_cli_show_echo_interval(struct vty *vty, struct lyd_node *dnode,
-                               bool show_defaults)
+void bfd_cli_show_required_echo_receive_interval(struct vty *vty,
+       struct lyd_node *dnode, bool show_defaults)
 {
        uint32_t value;
 
        if (show_defaults)
-               vty_out(vty, "  echo-interval %d\n",
-                       BFD_DEF_REQ_MIN_ECHO);
+               vty_out(vty, "  echo receive-interval %d\n",
+                       BFD_DEF_REQ_MIN_ECHO_RX);
        else {
                value = yang_dnode_get_uint32(dnode, NULL);
-               vty_out(vty, "  echo-interval %u\n", value / 1000);
+               if (value)
+                       vty_out(vty, "  echo receive-interval %u\n",
+                               value / 1000);
+               else
+                       vty_out(vty, "  echo receive-interval disabled\n");
        }
 }
 
@@ -575,6 +642,21 @@ ALIAS_YANG(bfd_peer_echo_interval, bfd_profile_echo_interval_cmd,
       "Configure peer echo interval\n"
       "Configure peer echo interval value in milliseconds\n")
 
+ALIAS_YANG(
+       bfd_peer_echo_transmit_interval, bfd_profile_echo_transmit_interval_cmd,
+       "echo transmit-interval (10-60000)$interval",
+       "Configure peer echo intervals\n"
+       "Configure desired transmit interval\n"
+       "Configure interval value in milliseconds\n")
+
+ALIAS_YANG(
+       bfd_peer_echo_receive_interval, bfd_profile_echo_receive_interval_cmd,
+       "echo receive-interval <disabled$disabled|(10-60000)$interval>",
+       "Configure peer echo intervals\n"
+       "Configure required receive interval\n"
+       "Disable echo packets receive\n"
+       "Configure interval value in milliseconds\n")
+
 DEFPY_YANG(bfd_peer_profile, bfd_peer_profile_cmd,
       "[no] profile BFDPROF$pname",
       NO_STR
@@ -632,6 +714,8 @@ bfdd_cli_init(void)
        install_element(BFD_PEER_NODE, &bfd_peer_tx_cmd);
        install_element(BFD_PEER_NODE, &bfd_peer_echo_cmd);
        install_element(BFD_PEER_NODE, &bfd_peer_echo_interval_cmd);
+       install_element(BFD_PEER_NODE, &bfd_peer_echo_transmit_interval_cmd);
+       install_element(BFD_PEER_NODE, &bfd_peer_echo_receive_interval_cmd);
        install_element(BFD_PEER_NODE, &bfd_peer_profile_cmd);
        install_element(BFD_PEER_NODE, &bfd_peer_passive_cmd);
        install_element(BFD_PEER_NODE, &bfd_peer_minimum_ttl_cmd);
@@ -652,6 +736,8 @@ bfdd_cli_init(void)
        install_element(BFD_PROFILE_NODE, &bfd_profile_shutdown_cmd);
        install_element(BFD_PROFILE_NODE, &bfd_profile_echo_cmd);
        install_element(BFD_PROFILE_NODE, &bfd_profile_echo_interval_cmd);
+       install_element(BFD_PROFILE_NODE, &bfd_profile_echo_transmit_interval_cmd);
+       install_element(BFD_PROFILE_NODE, &bfd_profile_echo_receive_interval_cmd);
        install_element(BFD_PROFILE_NODE, &bfd_profile_passive_cmd);
        install_element(BFD_PROFILE_NODE, &bfd_profile_minimum_ttl_cmd);
        install_element(BFD_PROFILE_NODE, &no_bfd_profile_minimum_ttl_cmd);
index 64ba3cf81199c57d90e356184d3796bc12af8634..29a9b5f2d527028c2da07fded678e49ecc2ea21f 100644 (file)
@@ -103,8 +103,15 @@ const struct frr_yang_module_info frr_bfdd_info = {
                         .xpath = "/frr-bfdd:bfdd/bfd/profile/desired-echo-transmission-interval",
                         .cbs = {
                                 .modify = bfdd_bfd_profile_desired_echo_transmission_interval_modify,
-                               .cli_show = bfd_cli_show_echo_interval,
-                       }
+                               .cli_show = bfd_cli_show_desired_echo_transmission_interval,
+                        }
+                },
+                {
+                        .xpath = "/frr-bfdd:bfdd/bfd/profile/required-echo-receive-interval",
+                        .cbs = {
+                                .modify = bfdd_bfd_profile_required_echo_receive_interval_modify,
+                               .cli_show = bfd_cli_show_required_echo_receive_interval,
+                        }
                 },
                {
                        .xpath = "/frr-bfdd:bfdd/bfd/sessions/single-hop",
@@ -179,7 +186,14 @@ const struct frr_yang_module_info frr_bfdd_info = {
                        .xpath = "/frr-bfdd:bfdd/bfd/sessions/single-hop/desired-echo-transmission-interval",
                        .cbs = {
                                .modify = bfdd_bfd_sessions_single_hop_desired_echo_transmission_interval_modify,
-                               .cli_show = bfd_cli_show_echo_interval,
+                               .cli_show = bfd_cli_show_desired_echo_transmission_interval,
+                       }
+               },
+               {
+                       .xpath = "/frr-bfdd:bfdd/bfd/sessions/single-hop/required-echo-receive-interval",
+                       .cbs = {
+                               .modify = bfdd_bfd_sessions_single_hop_required_echo_receive_interval_modify,
+                               .cli_show = bfd_cli_show_required_echo_receive_interval,
                        }
                },
                {
index fbd557b6b12e5068c6165d079d8adf3e10f3943b..874e98691fad90b5d2add75c9ce37c7074b0818a 100644 (file)
@@ -43,6 +43,8 @@ int bfdd_bfd_profile_minimum_ttl_destroy(struct nb_cb_destroy_args *args);
 int bfdd_bfd_profile_echo_mode_modify(struct nb_cb_modify_args *args);
 int bfdd_bfd_profile_desired_echo_transmission_interval_modify(
        struct nb_cb_modify_args *args);
+int bfdd_bfd_profile_required_echo_receive_interval_modify(
+       struct nb_cb_modify_args *args);
 int bfdd_bfd_sessions_single_hop_create(struct nb_cb_create_args *args);
 int bfdd_bfd_sessions_single_hop_destroy(struct nb_cb_destroy_args *args);
 const void *
@@ -71,6 +73,8 @@ int bfdd_bfd_sessions_single_hop_echo_mode_modify(
        struct nb_cb_modify_args *args);
 int bfdd_bfd_sessions_single_hop_desired_echo_transmission_interval_modify(
        struct nb_cb_modify_args *args);
+int bfdd_bfd_sessions_single_hop_required_echo_receive_interval_modify(
+       struct nb_cb_modify_args *args);
 struct yang_data *
 bfdd_bfd_sessions_single_hop_stats_local_discriminator_get_elem(
        struct nb_cb_get_elem_args *args);
@@ -209,8 +213,10 @@ void bfd_cli_show_shutdown(struct vty *vty, struct lyd_node *dnode,
                           bool show_defaults);
 void bfd_cli_show_echo(struct vty *vty, struct lyd_node *dnode,
                       bool show_defaults);
-void bfd_cli_show_echo_interval(struct vty *vty, struct lyd_node *dnode,
-                               bool show_defaults);
+void bfd_cli_show_desired_echo_transmission_interval(
+       struct vty *vty, struct lyd_node *dnode, bool show_defaults);
+void bfd_cli_show_required_echo_receive_interval(
+       struct vty *vty, struct lyd_node *dnode, bool show_defaults);
 void bfd_cli_show_profile(struct vty *vty, struct lyd_node *dnode,
                          bool show_defaults);
 void bfd_cli_peer_profile_show(struct vty *vty, struct lyd_node *dnode,
index c8dd5cc3f63653dc79b750ed42e09477e935ce08..26bce4f357f4748d21dfbeb2d5b43214d99cc110 100644 (file)
@@ -483,10 +483,48 @@ int bfdd_bfd_profile_echo_mode_modify(struct nb_cb_modify_args *args)
 }
 
 /*
- * XPath: /frr-bfdd:bfdd/bfd/profile/desired-echo-echo-transmission-interval
+ * XPath: /frr-bfdd:bfdd/bfd/profile/desired-echo-transmission-interval
  */
 int bfdd_bfd_profile_desired_echo_transmission_interval_modify(
        struct nb_cb_modify_args *args)
+{
+       struct bfd_profile *bp;
+       uint32_t min_tx;
+
+       switch (args->event) {
+       case NB_EV_VALIDATE:
+               min_tx = yang_dnode_get_uint32(args->dnode, NULL);
+               if (min_tx < 10000 || min_tx > 60000000)
+                       return NB_ERR_VALIDATION;
+               break;
+
+       case NB_EV_PREPARE:
+               /* NOTHING */
+               break;
+
+       case NB_EV_APPLY:
+               min_tx = yang_dnode_get_uint32(args->dnode, NULL);
+               bp = nb_running_get_entry(args->dnode, NULL, true);
+               if (bp->min_echo_tx == min_tx)
+                       return NB_OK;
+
+               bp->min_echo_tx = min_tx;
+               bfd_profile_update(bp);
+               break;
+
+       case NB_EV_ABORT:
+               /* NOTHING */
+               break;
+       }
+
+       return NB_OK;
+}
+
+/*
+ * XPath: /frr-bfdd:bfdd/bfd/profile/required-echo-receive-interval
+ */
+int bfdd_bfd_profile_required_echo_receive_interval_modify(
+       struct nb_cb_modify_args *args)
 {
        struct bfd_profile *bp;
        uint32_t min_rx;
@@ -494,6 +532,8 @@ int bfdd_bfd_profile_desired_echo_transmission_interval_modify(
        switch (args->event) {
        case NB_EV_VALIDATE:
                min_rx = yang_dnode_get_uint32(args->dnode, NULL);
+               if (min_rx == 0)
+                       return NB_OK;
                if (min_rx < 10000 || min_rx > 60000000)
                        return NB_ERR_VALIDATION;
                break;
@@ -789,7 +829,46 @@ int bfdd_bfd_sessions_single_hop_desired_echo_transmission_interval_modify(
 
        case NB_EV_APPLY:
                bs = nb_running_get_entry(args->dnode, NULL, true);
-               if (echo_interval == bs->timers.required_min_echo)
+               if (echo_interval == bs->timers.desired_min_echo_tx)
+                       return NB_OK;
+
+               bs->peer_profile.min_echo_tx = echo_interval;
+               bfd_session_apply(bs);
+               break;
+
+       case NB_EV_ABORT:
+               /* NOTHING */
+               break;
+       }
+
+       return NB_OK;
+}
+
+/*
+ * XPath:
+ * /frr-bfdd:bfdd/bfd/sessions/single-hop/required-echo-receive-interval
+ */
+int bfdd_bfd_sessions_single_hop_required_echo_receive_interval_modify(
+       struct nb_cb_modify_args *args)
+{
+       uint32_t echo_interval = yang_dnode_get_uint32(args->dnode, NULL);
+       struct bfd_session *bs;
+
+       switch (args->event) {
+       case NB_EV_VALIDATE:
+               if (echo_interval == 0)
+                        return NB_OK;
+               if (echo_interval < 10000 || echo_interval > 60000000)
+                       return NB_ERR_VALIDATION;
+               break;
+
+       case NB_EV_PREPARE:
+               /* NOTHING */
+               break;
+
+       case NB_EV_APPLY:
+               bs = nb_running_get_entry(args->dnode, NULL, true);
+               if (echo_interval == bs->timers.required_min_echo_rx)
                        return NB_OK;
 
                bs->peer_profile.min_echo_rx = echo_interval;
index cb140f7b1833c781c719af5dadeb35ac7dd656b1..a03fb9f216534a32d13f91cadd133fbf15b07127 100644 (file)
@@ -158,8 +158,16 @@ static void _display_peer(struct vty *vty, struct bfd_session *bs)
                bs->timers.required_min_rx / 1000);
        vty_out(vty, "\t\t\tTransmission interval: %ums\n",
                bs->timers.desired_min_tx / 1000);
-       vty_out(vty, "\t\t\tEcho transmission interval: %ums\n",
-               bs->timers.required_min_echo / 1000);
+       if (bs->timers.required_min_echo_rx != 0)
+               vty_out(vty, "\t\t\tEcho receive interval: %ums\n",
+                       bs->timers.required_min_echo_rx / 1000);
+       else
+               vty_out(vty, "\t\t\tEcho receive interval: disabled\n");
+       if (CHECK_FLAG(bs->flags, BFD_SESS_FLAG_ECHO))
+               vty_out(vty, "\t\t\tEcho transmission interval: %ums\n",
+                       bs->timers.desired_min_echo_tx / 1000);
+       else
+               vty_out(vty, "\t\t\tEcho transmission interval: disabled\n");
 
        vty_out(vty, "\t\tRemote timers:\n");
        vty_out(vty, "\t\t\tDetect-multiplier: %u\n",
@@ -168,8 +176,11 @@ static void _display_peer(struct vty *vty, struct bfd_session *bs)
                bs->remote_timers.required_min_rx / 1000);
        vty_out(vty, "\t\t\tTransmission interval: %ums\n",
                bs->remote_timers.desired_min_tx / 1000);
-       vty_out(vty, "\t\t\tEcho transmission interval: %ums\n",
-               bs->remote_timers.required_min_echo / 1000);
+       if (bs->remote_timers.required_min_echo != 0)
+               vty_out(vty, "\t\t\tEcho receive interval: %ums\n",
+                       bs->remote_timers.required_min_echo / 1000);
+       else
+               vty_out(vty, "\t\t\tEcho receive interval: disabled\n");
 
        vty_out(vty, "\n");
 }
@@ -245,11 +256,13 @@ static struct json_object *__display_peer_json(struct bfd_session *bs)
                            bs->timers.required_min_rx / 1000);
        json_object_int_add(jo, "transmit-interval",
                            bs->timers.desired_min_tx / 1000);
+       json_object_int_add(jo, "echo-receive-interval",
+                           bs->timers.required_min_echo_rx / 1000);
        if (CHECK_FLAG(bs->flags, BFD_SESS_FLAG_ECHO))
-               json_object_int_add(jo, "echo-interval",
-                                   bs->timers.required_min_echo / 1000);
+               json_object_int_add(jo, "echo-transmit-interval",
+                                   bs->timers.desired_min_echo_tx / 1000);
        else
-               json_object_int_add(jo, "echo-interval", 0);
+               json_object_int_add(jo, "echo-transmit-interval", 0);
 
        json_object_int_add(jo, "detect-multiplier", bs->detect_mult);
 
@@ -257,7 +270,7 @@ static struct json_object *__display_peer_json(struct bfd_session *bs)
                            bs->remote_timers.required_min_rx / 1000);
        json_object_int_add(jo, "remote-transmit-interval",
                            bs->remote_timers.desired_min_tx / 1000);
-       json_object_int_add(jo, "remote-echo-interval",
+       json_object_int_add(jo, "remote-echo-receive-interval",
                            bs->remote_timers.required_min_echo / 1000);
        json_object_int_add(jo, "remote-detect-multiplier",
                            bs->remote_detect_mult);
@@ -844,7 +857,8 @@ static int bfd_configure_peer(struct bfd_peer_cfg *bpc, bool mhop,
        bpc->bpc_detectmultiplier = BPC_DEF_DETECTMULTIPLIER;
        bpc->bpc_recvinterval = BPC_DEF_RECEIVEINTERVAL;
        bpc->bpc_txinterval = BPC_DEF_TRANSMITINTERVAL;
-       bpc->bpc_echointerval = BPC_DEF_ECHOINTERVAL;
+       bpc->bpc_echorecvinterval = BPC_DEF_ECHORECEIVEINTERVAL;
+       bpc->bpc_echotxinterval = BPC_DEF_ECHOTRANSMITINTERVAL;
        bpc->bpc_lastevent = monotime(NULL);
 
        /* Safety check: when no error buf is provided len must be zero. */
index 8865baef6a0f9b364866d7de4e1af296d97368c4..4ece94f577716d4aa003d5e5abc85b64705f48ea 100644 (file)
@@ -162,6 +162,11 @@ struct bfddp_session {
         * jitter.
         */
        uint32_t min_rx;
+       /**
+        * Minimum desired echo transmission interval (in microseconds)
+        * without jitter.
+        */
+       uint32_t min_echo_tx;
        /**
         * Required minimum echo receive interval rate (in microseconds)
         * without jitter.
index b71670f012f09da795a59422d486bfe5b01e6c86..a97caf137ef8406b4ee21057805b8e2524d042af 100644 (file)
@@ -135,7 +135,8 @@ static int parse_list(struct json_object *jo, enum peer_list_type plt,
                bpc.bpc_detectmultiplier = BFD_DEFDETECTMULT;
                bpc.bpc_recvinterval = BFD_DEFREQUIREDMINRX;
                bpc.bpc_txinterval = BFD_DEFDESIREDMINTX;
-               bpc.bpc_echointerval = BFD_DEF_REQ_MIN_ECHO;
+               bpc.bpc_echorecvinterval = BFD_DEF_REQ_MIN_ECHO_RX;
+               bpc.bpc_echotxinterval = BFD_DEF_DES_MIN_ECHO_TX;
 
                switch (plt) {
                case PLT_IPV4:
@@ -250,11 +251,16 @@ static int parse_peer_config(struct json_object *jo, struct bfd_peer_cfg *bpc)
                        bpc->bpc_has_txinterval = true;
                        zlog_debug("        transmit-interval: %" PRIu64,
                                   bpc->bpc_txinterval);
-               } else if (strcmp(key, "echo-interval") == 0) {
-                       bpc->bpc_echointerval = json_object_get_int64(jo_val);
-                       bpc->bpc_has_echointerval = true;
-                       zlog_debug("        echo-interval: %" PRIu64,
-                                  bpc->bpc_echointerval);
+               } else if (strcmp(key, "echo-receive-interval") == 0) {
+                       bpc->bpc_echorecvinterval = json_object_get_int64(jo_val);
+                       bpc->bpc_has_echorecvinterval = true;
+                       zlog_debug("        echo-receive-interval: %" PRIu64,
+                                  bpc->bpc_echorecvinterval);
+               } else if (strcmp(key, "echo-transmit-interval") == 0) {
+                       bpc->bpc_echotxinterval = json_object_get_int64(jo_val);
+                       bpc->bpc_has_echotxinterval = true;
+                       zlog_debug("        echo-transmit-interval: %" PRIu64,
+                                  bpc->bpc_echotxinterval);
                } else if (strcmp(key, "create-only") == 0) {
                        bpc->bpc_createonly = json_object_get_boolean(jo_val);
                        zlog_debug("        create-only: %s",
@@ -463,8 +469,10 @@ char *config_notify_config(const char *op, struct bfd_session *bs)
                            bs->timers.required_min_rx / 1000);
        json_object_int_add(resp, "transmit-interval",
                            bs->timers.desired_min_tx / 1000);
-       json_object_int_add(resp, "echo-interval",
-                           bs->timers.required_min_echo / 1000);
+       json_object_int_add(resp, "echo-receive-interval",
+                           bs->timers.required_min_echo_rx / 1000);
+       json_object_int_add(resp, "echo-transmit-interval",
+                           bs->timers.desired_min_echo_tx / 1000);
 
        json_object_int_add(resp, "remote-detect-multiplier",
                            bs->remote_detect_mult);
@@ -472,7 +480,7 @@ char *config_notify_config(const char *op, struct bfd_session *bs)
                            bs->remote_timers.required_min_rx / 1000);
        json_object_int_add(resp, "remote-transmit-interval",
                            bs->remote_timers.desired_min_tx / 1000);
-       json_object_int_add(resp, "remote-echo-interval",
+       json_object_int_add(resp, "remote-echo-receive-interval",
                            bs->remote_timers.required_min_echo / 1000);
 
        if (CHECK_FLAG(bs->flags, BFD_SESS_FLAG_ECHO))
index 66b79f3b13057640011cf949f8d7b205e9d78f82..9cb0b0ea85fe281697b886ab8b556de952b803f5 100644 (file)
@@ -765,7 +765,8 @@ static void _bfd_dplane_session_fill(const struct bfd_session *bs,
        msg->data.session.lid = htonl(bs->discrs.my_discr);
        msg->data.session.min_tx = htonl(bs->timers.desired_min_tx);
        msg->data.session.min_rx = htonl(bs->timers.required_min_rx);
-       msg->data.session.min_echo_rx = htonl(bs->timers.required_min_echo);
+       msg->data.session.min_echo_tx = htonl(bs->timers.desired_min_echo_tx);
+       msg->data.session.min_echo_rx = htonl(bs->timers.required_min_echo_rx);
 }
 
 static int _bfd_dplane_add_session(struct bfd_dplane_ctx *bdc,
index b8f749b740e7b564906c90b37e09d21bc67e266b..4ee83768281d4a3aadf906b5b522a0ab200f4c9c 100644 (file)
@@ -166,10 +166,16 @@ BFD peers and profiles share the same BFD session configuration commands.
    The minimum transmission interval (less jitter) that this system
    wants to use to send BFD control packets. Defaults to 300ms.
 
-.. clicmd:: echo-interval (10-60000)
+.. clicmd:: echo receive-interval <disabled|(10-60000)>
 
-   Configures the minimal echo receive transmission interval that this
-   system is capable of handling.
+   Configures the minimum interval that this system is capable of
+   receiving echo packets. Disabled means that this system doesn't want
+   to receive echo packets. The default value is 50 milliseconds.
+
+.. clicmd:: echo transmit-interval (10-60000)
+
+   The minimum transmission interval (less jitter) that this system
+   wants to use to send BFD echo packets. Defaults to 50ms.
 
 .. clicmd:: echo-mode
 
@@ -445,12 +451,13 @@ You can inspect the current BFD peer status with the following commands:
                            Detect-multiplier: 3
                            Receive interval: 300ms
                            Transmission interval: 300ms
+                           Echo receive interval: 50ms
                            Echo transmission interval: disabled
                    Remote timers:
                            Detect-multiplier: 3
                            Receive interval: 300ms
                            Transmission interval: 300ms
-                           Echo transmission interval: 50ms
+                           Echo receive interval: 50ms
 
            peer 192.168.1.1
                    label: router3-peer
@@ -465,12 +472,13 @@ You can inspect the current BFD peer status with the following commands:
                            Detect-multiplier: 3
                            Receive interval: 300ms
                            Transmission interval: 300ms
+                           Echo receive interval: 50ms
                            Echo transmission interval: disabled
                    Remote timers:
                            Detect-multiplier: 3
                            Receive interval: 300ms
                            Transmission interval: 300ms
-                           Echo transmission interval: 50ms
+                           Echo receive interval: 50ms
 
    frr# show bfd peer 192.168.1.1
    BFD Peer:
@@ -487,15 +495,16 @@ You can inspect the current BFD peer status with the following commands:
                            Detect-multiplier: 3
                            Receive interval: 300ms
                            Transmission interval: 300ms
+                           Echo receive interval: 50ms
                            Echo transmission interval: disabled
                    Remote timers:
                            Detect-multiplier: 3
                            Receive interval: 300ms
                            Transmission interval: 300ms
-                           Echo transmission interval: 50ms
+                           Echo receive interval: 50ms
 
    frr# show bfd peer 192.168.0.1 json
-   {"multihop":false,"peer":"192.168.0.1","id":1,"remote-id":1,"status":"up","uptime":161,"diagnostic":"ok","remote-diagnostic":"ok","receive-interval":300,"transmit-interval":300,"echo-interval":50,"detect-multiplier":3,"remote-receive-interval":300,"remote-transmit-interval":300,"remote-echo-interval":50,"remote-detect-multiplier":3,"peer-type":"dynamic"}
+   {"multihop":false,"peer":"192.168.0.1","id":1,"remote-id":1,"status":"up","uptime":161,"diagnostic":"ok","remote-diagnostic":"ok","receive-interval":300,"transmit-interval":300,"echo-receive-interval":50,"echo-transmit-interval":0,"detect-multiplier":3,"remote-receive-interval":300,"remote-transmit-interval":300,"remote-echo-receive-interval":50,"remote-detect-multiplier":3,"peer-type":"dynamic"}
 
 
 You can inspect the current BFD peer status in brief with the following commands:
index d1927ae49a1428ae40bdc70443c882f3d6b1fdb1..b436d5562e35c30f044d2f11e9774d42decce88d 100644 (file)
@@ -8,9 +8,10 @@
         "remote-diagnostic":"ok",
         "receive-interval":300,
         "transmit-interval":300,
-        "echo-interval":0,
+        "echo-receive-interval":50,
+        "echo-transmit-interval":0,
         "remote-receive-interval":300,
         "remote-transmit-interval":300,
-        "remote-echo-interval":50
+        "remote-echo-receive-interval":50
     }
 ]
index 25b47f18ecf4a2c7a0d97db337b575510999acc5..c7c7b96ee74d0fdc3ff973e79b446f284880a9b5 100644 (file)
@@ -6,9 +6,10 @@
         "status":"up",
         "receive-interval":300,
         "transmit-interval":300,
-        "echo-interval":0,
+        "echo-receive-interval":50,
+        "echo-transmit-interval":0,
         "remote-receive-interval":300,
         "remote-transmit-interval":300,
-        "remote-echo-interval":50
+        "remote-echo-receive-interval":50
     }
 ]
index 5193f2a6e25f824357033d5aa29541af6848fffa..fc9e1453401749b430db719fec6fcb1d3d467661 100644 (file)
@@ -8,9 +8,10 @@
         "remote-diagnostic":"ok",
         "receive-interval":300,
         "transmit-interval":300,
-        "echo-interval":0,
+        "echo-receive-interval":50,
+        "echo-transmit-interval":0,
         "remote-receive-interval":300,
         "remote-transmit-interval":300,
-        "remote-echo-interval":50
+        "remote-echo-receive-interval":50
     }
 ]
index 9e4bd2633f47362676aa745caa7bb8fce6108fa3..620c6ddcd47ff8d410cd37c4fafbaa487aa606c0 100644 (file)
@@ -6,9 +6,10 @@
         "status":"down",
         "receive-interval":300,
         "transmit-interval":300,
-        "echo-interval":0,
+        "echo-receive-interval":50,
+        "echo-transmit-interval":0,
         "remote-receive-interval":300,
         "remote-transmit-interval":300,
-        "remote-echo-interval":50
+        "remote-echo-receive-interval":50
     }
 ]
index 4d636ab0520b250b97aaf2bff0b1fd4b15a99cb8..688f2e839c4c785de55b6b200a1f00a8a4263573 100644 (file)
@@ -6,6 +6,7 @@ bfd
  profile slowtx
   receive-interval 800
   transmit-interval 800
+  echo receive-interval 400
  !
  peer 172.16.0.1 interface r1-eth0
   profile slowtx
index 3df9ec9c9de3d22c6d9ee1a0be80014794126bdb..503f776aec9bacdd85836fbff2d2bfe26a56d1b6 100644 (file)
@@ -12,6 +12,7 @@
         "remote-id": "*",
         "remote-receive-interval": 800,
         "remote-transmit-interval": 800,
+        "remote-echo-receive-interval": 400,
         "status": "up",
         "transmit-interval": 800,
         "uptime": "*",
@@ -27,7 +28,7 @@
         "receive-interval": 250,
         "remote-detect-multiplier": 3,
         "remote-diagnostic": "ok",
-        "remote-echo-interval": 50,
+        "remote-echo-receive-interval": 50,
         "remote-id": "*",
         "remote-receive-interval": 300,
         "remote-transmit-interval": 300,
index 23a39a6ee06623c024ed922afbbb1399b8812d17..700c46ba1e362144161f768fe24904c7dbab8b50 100644 (file)
@@ -10,6 +10,7 @@ bfd
  profile fasttx
   receive-interval 250
   transmit-interval 250
+  echo receive-interval disabled
  !
  peer 172.16.0.2 interface r2-eth0
   profile slowtx
index d2d0c601c3e47cb096e8ece1299b34b3c53dc508..d987a0ae7d087a3c6c8b8a2af2c84e0469a939ee 100644 (file)
@@ -12,6 +12,7 @@
         "remote-id": "*",
         "remote-receive-interval": 250,
         "remote-transmit-interval": 250,
+        "remote-echo-receive-interval": 0,
         "status": "up",
         "transmit-interval": 300,
         "uptime": "*",
index 2c2e136abf2783523f000c0c5c05a00451550fe7..c73296ac971b2f718800853c8eba6e34860a3f7d 100644 (file)
@@ -29,7 +29,7 @@
         "receive-interval": 300,
         "remote-detect-multiplier": 3,
         "remote-diagnostic": "ok",
-        "remote-echo-interval": 50,
+        "remote-echo-receive-interval": 50,
         "remote-id": "*",
         "remote-receive-interval": 300,
         "remote-transmit-interval": 300,
index 5035d643c5142150f781fd1782e109e6fb30856c..267459c7a87e9ad9fc4d24851e9215db78b9ef68 100644 (file)
@@ -4,7 +4,7 @@
     "status": "up"
   },
   {
-    "remote-echo-interval": 100,
+    "remote-echo-receive-interval": 100,
     "peer": "192.168.1.1",
     "status": "up"
   },
index b14351cd81cf12132ac53344609a1fc77c418a24..9bce991d0d0068a0b145b426691a90f0885b6aee 100644 (file)
@@ -8,10 +8,11 @@
         "remote-diagnostic":"ok",
         "receive-interval":300,
         "transmit-interval":300,
-        "echo-interval":0,
+        "echo-receive-interval":50,
+        "echo-transmit-interval":0,
         "remote-receive-interval":300,
         "remote-transmit-interval":300,
-        "remote-echo-interval":50
+        "remote-echo-receive-interval":50
     },
     {
         "multihop":false,
         "remote-diagnostic":"ok",
         "receive-interval":300,
         "transmit-interval":300,
-        "echo-interval":0,
+        "echo-receive-interval":50,
+        "echo-transmit-interval":0,
         "remote-receive-interval":300,
         "remote-transmit-interval":300,
-        "remote-echo-interval":50
+        "remote-echo-receive-interval":50
     }
 ]
index 29075fcc807794203149c1cdb85eefff44c78cbd..ec2135ce374489f1be5eef374ad1ffeafc624568 100644 (file)
@@ -3,39 +3,42 @@
     "status": "up",
     "transmit-interval": 300,
     "remote-receive-interval": 300,
-    "echo-interval": 0,
+    "echo-receive-interval": 50,
+    "echo-transmit-interval": 0,
     "diagnostic": "ok",
     "multihop": false,
     "interface": "r2-eth0",
     "remote-transmit-interval": 300,
     "receive-interval": 300,
-    "remote-echo-interval": 50,
+    "remote-echo-receive-interval": 50,
     "remote-diagnostic": "ok"
   },
   {
     "status": "up",
     "transmit-interval": 300,
     "remote-receive-interval": 300,
-    "echo-interval": 0,
+    "echo-receive-interval": 50,
+    "echo-transmit-interval": 0,
     "diagnostic": "ok",
     "multihop": false,
     "interface": "r2-eth2",
     "remote-transmit-interval": 300,
     "receive-interval": 300,
-    "remote-echo-interval": 50,
+    "remote-echo-receive-interval": 50,
     "remote-diagnostic": "ok"
   },
   {
     "status": "up",
     "transmit-interval": 300,
     "remote-receive-interval": 300,
-    "echo-interval": 0,
+    "echo-receive-interval": 50,
+    "echo-transmit-interval": 0,
     "diagnostic": "ok",
     "multihop": false,
     "interface": "r2-eth1",
     "remote-transmit-interval": 300,
     "receive-interval": 300,
-    "remote-echo-interval": 50,
+    "remote-echo-receive-interval": 50,
     "remote-diagnostic": "ok",
     "peer": "10.0.3.1"
   }
index 6698bff201bce326c27192bfb0990abb7b1145a3..c19c98033880ff75b11d945468df6a55c24a1e3e 100644 (file)
@@ -3,13 +3,14 @@
     "status": "up",
     "transmit-interval": 300,
     "remote-receive-interval": 300,
-    "echo-interval": 0,
+    "echo-receive-interval": 50,
+    "echo-transmit-interval": 0,
     "diagnostic": "ok",
     "multihop": false,
     "interface": "r3-eth0",
     "remote-transmit-interval": 300,
     "receive-interval": 300,
-    "remote-echo-interval": 50,
+    "remote-echo-receive-interval": 50,
     "remote-diagnostic": "ok",
     "peer": "10.0.3.2"
   }
index 83101eb47f347d1b3527b4b8562ff631f2a08176..dd26b9b580ba9af1ccd5bce7e84168e2edd864dd 100644 (file)
@@ -8,10 +8,11 @@
         "remote-diagnostic":"ok",
         "receive-interval":300,
         "transmit-interval":300,
-        "echo-interval":0,
+        "echo-receive-interval": 50,
+        "echo-transmit-interval":0,
         "remote-receive-interval":300,
         "remote-transmit-interval":300,
-        "remote-echo-interval":50
+        "remote-echo-receive-interval":50
     },
     {
         "multihop":false,
         "remote-diagnostic":"ok",
         "receive-interval":300,
         "transmit-interval":300,
-        "echo-interval":0,
+        "echo-receive-interval": 50,
+        "echo-transmit-interval":0,
         "remote-receive-interval":300,
         "remote-transmit-interval":300,
-        "remote-echo-interval":50
+        "remote-echo-receive-interval":50
     }
 ]
index 56205d538b9c389806253844d13b60c1880f0f28..f8a354fc209e5b3ca11a8dc5995dff06dd5e6e87 100644 (file)
@@ -2,7 +2,8 @@
     {
         "detect-multiplier": 3,
         "diagnostic": "ok",
-        "echo-interval": 0,
+        "echo-receive-interval": 50,
+        "echo-transmit-interval": 0,
         "id": "*",
         "local": "2001:db8:1::1",
         "minimum-ttl": 253,
@@ -12,7 +13,7 @@
         "receive-interval": 2000,
         "remote-detect-multiplier": 3,
         "remote-diagnostic": "ok",
-        "remote-echo-interval": 50,
+        "remote-echo-receive-interval": 50,
         "remote-id": "*",
         "remote-receive-interval": 2000,
         "remote-transmit-interval": 2000,
@@ -24,7 +25,8 @@
     {
         "detect-multiplier": 3,
         "diagnostic": "ok",
-        "echo-interval": 0,
+        "echo-receive-interval": 50,
+        "echo-transmit-interval": 0,
         "id": "*",
         "interface": "r1-eth0",
         "local": "2001:db8:1::1",
@@ -34,7 +36,7 @@
         "receive-interval": 600,
         "remote-detect-multiplier": 3,
         "remote-diagnostic": "ok",
-        "remote-echo-interval": 50,
+        "remote-echo-receive-interval": 50,
         "remote-id": "*",
         "remote-receive-interval": 600,
         "remote-transmit-interval": 600,
@@ -46,7 +48,8 @@
     {
         "detect-multiplier": 3,
         "diagnostic": "ok",
-        "echo-interval": 0,
+        "echo-receive-interval": 50,
+        "echo-transmit-interval": 0,
         "id": "*",
         "local": "192.168.1.1",
         "minimum-ttl": 254,
@@ -56,7 +59,7 @@
         "receive-interval": 2000,
         "remote-detect-multiplier": 3,
         "remote-diagnostic": "ok",
-        "remote-echo-interval": 50,
+        "remote-echo-receive-interval": 50,
         "remote-id": "*",
         "remote-receive-interval": 2000,
         "remote-transmit-interval": 2000,
index cb8985b13e5f5b8b09558b7c9d214e5f47ba7f53..786d66dbe3a4e0a3236a45ccac5407e70c29f721 100644 (file)
@@ -2,7 +2,8 @@
     {
         "detect-multiplier": 3,
         "diagnostic": "ok",
-        "echo-interval": 0,
+        "echo-receive-interval": 50,
+        "echo-transmit-interval": 0,
         "id": "*",
         "interface": "r2-eth0",
         "local": "2001:db8:1::2",
@@ -12,7 +13,7 @@
         "receive-interval": 600,
         "remote-detect-multiplier": 3,
         "remote-diagnostic": "ok",
-        "remote-echo-interval": 50,
+        "remote-echo-receive-interval": 50,
         "remote-id": "*",
         "remote-receive-interval": 600,
         "remote-transmit-interval": 600,
@@ -24,7 +25,8 @@
     {
         "detect-multiplier": 3,
         "diagnostic": "ok",
-        "echo-interval": 0,
+        "echo-receive-interval": 50,
+        "echo-transmit-interval": 0,
         "id": "*",
         "interface": "r2-eth1",
         "local": "2001:db8:2::2",
@@ -34,7 +36,7 @@
         "receive-interval": 2000,
         "remote-detect-multiplier": 3,
         "remote-diagnostic": "ok",
-        "remote-echo-interval": 50,
+        "remote-echo-receive-interval": 50,
         "remote-id": "*",
         "remote-receive-interval": 2000,
         "remote-transmit-interval": 2000,
index 8be35fd08427b5a8c64add32485e70381dbc1650..1f58663a4ef784bdac4ec6e834f0bd35d020c27f 100644 (file)
@@ -2,7 +2,8 @@
     {
         "detect-multiplier": 3,
         "diagnostic": "ok",
-        "echo-interval": 0,
+        "echo-receive-interval": 50,
+        "echo-transmit-interval": 0,
         "id": "*",
         "interface": "r3-eth1",
         "local": "2001:db8:3::2",
@@ -12,7 +13,7 @@
         "receive-interval": 2000,
         "remote-detect-multiplier": 3,
         "remote-diagnostic": "ok",
-        "remote-echo-interval": 50,
+        "remote-echo-receive-interval": 50,
         "remote-id": "*",
         "remote-receive-interval": 2000,
         "remote-transmit-interval": 2000,
@@ -24,7 +25,8 @@
     {
         "detect-multiplier": 3,
         "diagnostic": "ok",
-        "echo-interval": 0,
+        "echo-receive-interval": 50,
+        "echo-transmit-interval": 0,
         "id": "*",
         "interface": "r3-eth0",
         "local": "2001:db8:2::1",
@@ -34,7 +36,7 @@
         "receive-interval": 2000,
         "remote-detect-multiplier": 3,
         "remote-diagnostic": "ok",
-        "remote-echo-interval": 50,
+        "remote-echo-receive-interval": 50,
         "remote-id": "*",
         "remote-receive-interval": 2000,
         "remote-transmit-interval": 2000,
@@ -46,7 +48,8 @@
     {
         "detect-multiplier": 3,
         "diagnostic": "ok",
-        "echo-interval": 0,
+        "echo-receive-interval": 50,
+        "echo-transmit-interval": 0,
         "id": "*",
         "local": "192.168.2.1",
         "minimum-ttl": 254,
@@ -56,7 +59,7 @@
         "receive-interval": 2000,
         "remote-detect-multiplier": 3,
         "remote-diagnostic": "ok",
-        "remote-echo-interval": 50,
+        "remote-echo-receive-interval": 50,
         "remote-id": "*",
         "remote-receive-interval": 2000,
         "remote-transmit-interval": 2000,
index e2e6722ef44a7827f526b65793242819a2fe89b9..5477f39120a6bfbd9611b108f887ee01ad64aeec 100644 (file)
@@ -2,7 +2,8 @@
     {
         "detect-multiplier": 3,
         "diagnostic": "ok",
-        "echo-interval": 0,
+        "echo-receive-interval": 50,
+        "echo-transmit-interval": 0,
         "id": "*",
         "local": "2001:db8:3::1",
         "minimum-ttl": 253,
@@ -12,7 +13,7 @@
         "receive-interval": 2000,
         "remote-detect-multiplier": 3,
         "remote-diagnostic": "ok",
-        "remote-echo-interval": 50,
+        "remote-echo-receive-interval": 50,
         "remote-id": "*",
         "remote-receive-interval": 2000,
         "remote-transmit-interval": 2000,
@@ -24,7 +25,8 @@
     {
         "detect-multiplier": 3,
         "diagnostic": "ok",
-        "echo-interval": 0,
+        "echo-receive-interval": 50,
+        "echo-transmit-interval": 0,
         "id": "*",
         "interface": "r4-eth0",
         "local": "2001:db8:3::1",
@@ -34,7 +36,7 @@
         "receive-interval": 2000,
         "remote-detect-multiplier": 3,
         "remote-diagnostic": "ok",
-        "remote-echo-interval": 50,
+        "remote-echo-receive-interval": 50,
         "remote-id": "*",
         "remote-receive-interval": 2000,
         "remote-transmit-interval": 2000,
index 5035d643c5142150f781fd1782e109e6fb30856c..267459c7a87e9ad9fc4d24851e9215db78b9ef68 100644 (file)
@@ -4,7 +4,7 @@
     "status": "up"
   },
   {
-    "remote-echo-interval": 100,
+    "remote-echo-receive-interval": 100,
     "peer": "192.168.1.1",
     "status": "up"
   },
index 0f090a1b7217b39cefa7bb65720c23815d727496..d21ff5068a718385cf46e9e564cb914faf0e8652 100644 (file)
@@ -210,7 +210,14 @@ module frr-bfdd {
       type uint32;
       units microseconds;
       default 50000;
-      description "Minimum desired control packet transmission interval";
+      description "Minimum desired echo packet transmission interval";
+    }
+
+    leaf required-echo-receive-interval {
+      type uint32;
+      units microseconds;
+      default 50000;
+      description "Minimum required echo packet receive interval";
     }
   }