diff options
Diffstat (limited to 'isisd')
| -rw-r--r-- | isisd/isis_adjacency.c | 10 | ||||
| -rw-r--r-- | isisd/isis_circuit.c | 7 | ||||
| -rw-r--r-- | isisd/isis_nb_config.c | 48 |
3 files changed, 15 insertions, 50 deletions
diff --git a/isisd/isis_adjacency.c b/isisd/isis_adjacency.c index 2729dce382..11f17ec7bf 100644 --- a/isisd/isis_adjacency.c +++ b/isisd/isis_adjacency.c @@ -31,6 +31,7 @@ #include "thread.h" #include "if.h" #include "stream.h" +#include "bfd.h" #include "isisd/isis_constants.h" #include "isisd/isis_common.h" @@ -814,6 +815,15 @@ void isis_adj_print_vty(struct isis_adjacency *adj, struct vty *vty, vty_out(vty, " %s\n", buf); } } + if (adj->circuit && adj->circuit->bfd_config.enabled) { + vty_out(vty, " BFD is %s%s\n", + adj->bfd_session ? "active, status " + : "configured", + !adj->bfd_session + ? "" + : bfd_get_status_str(bfd_sess_status( + adj->bfd_session))); + } for (ALL_LIST_ELEMENTS_RO(adj->adj_sids, anode, sra)) { const char *adj_type; const char *backup; diff --git a/isisd/isis_circuit.c b/isisd/isis_circuit.c index c7bf1e2012..fedceed3bb 100644 --- a/isisd/isis_circuit.c +++ b/isisd/isis_circuit.c @@ -661,8 +661,11 @@ int isis_circuit_up(struct isis_circuit *circuit) "Interface MTU %zu on %s is too low to support area lsp mtu %u!", isis_circuit_pdu_size(circuit), circuit->interface->name, circuit->area->lsp_mtu); - isis_circuit_update_all_srmflags(circuit, 0); - return ISIS_ERROR; + + /* Allow ISIS to continue configuration. With this + * configuration failure ISIS will attempt to send lsp + * packets but will fail until the mtu is configured properly + */ } if (circuit->circ_type == CIRCUIT_T_BROADCAST) { diff --git a/isisd/isis_nb_config.c b/isisd/isis_nb_config.c index de7797813a..cf4c2aea0a 100644 --- a/isisd/isis_nb_config.c +++ b/isisd/isis_nb_config.c @@ -393,30 +393,11 @@ int isis_instance_purge_originator_modify(struct nb_cb_modify_args *args) */ int isis_instance_lsp_mtu_modify(struct nb_cb_modify_args *args) { - struct listnode *node; - struct isis_circuit *circuit; uint16_t lsp_mtu = yang_dnode_get_uint16(args->dnode, NULL); struct isis_area *area; switch (args->event) { case NB_EV_VALIDATE: - area = nb_running_get_entry(args->dnode, NULL, false); - if (!area) - break; - for (ALL_LIST_ELEMENTS_RO(area->circuit_list, node, circuit)) { - if (circuit->state != C_STATE_INIT - && circuit->state != C_STATE_UP) - continue; - if (lsp_mtu > isis_circuit_pdu_size(circuit)) { - snprintf( - args->errmsg, args->errmsg_len, - "ISIS area contains circuit %s, which has a maximum PDU size of %zu", - circuit->interface->name, - isis_circuit_pdu_size(circuit)); - return NB_ERR_VALIDATION; - } - } - break; case NB_EV_PREPARE: case NB_EV_ABORT: break; @@ -2552,43 +2533,14 @@ int isis_instance_mpls_ldp_sync_holddown_modify(struct nb_cb_modify_args *args) */ int lib_interface_isis_create(struct nb_cb_create_args *args) { - struct isis_area *area = NULL; struct interface *ifp; struct isis_circuit *circuit = NULL; const char *area_tag = yang_dnode_get_string(args->dnode, "./area-tag"); - uint32_t min_mtu, actual_mtu; switch (args->event) { case NB_EV_PREPARE: case NB_EV_ABORT: - break; case NB_EV_VALIDATE: - /* check if interface mtu is sufficient. If the area has not - * been created yet, assume default MTU for the area - */ - ifp = nb_running_get_entry(args->dnode, NULL, false); - /* zebra might not know yet about the MTU - nothing we can do */ - if (!ifp || ifp->mtu == 0) - break; - actual_mtu = - if_is_broadcast(ifp) ? ifp->mtu - LLC_LEN : ifp->mtu; - - area = isis_area_lookup(area_tag, ifp->vrf->vrf_id); - if (area) - min_mtu = area->lsp_mtu; - else -#ifndef FABRICD - min_mtu = yang_get_default_uint16( - "/frr-isisd:isis/instance/lsp/mtu"); -#else - min_mtu = DEFAULT_LSP_MTU; -#endif /* ifndef FABRICD */ - if (actual_mtu < min_mtu) { - snprintf(args->errmsg, args->errmsg_len, - "Interface %s has MTU %u, minimum MTU for the area is %u", - ifp->name, actual_mtu, min_mtu); - return NB_ERR_VALIDATION; - } break; case NB_EV_APPLY: ifp = nb_running_get_entry(args->dnode, NULL, true); |
