diff options
| -rw-r--r-- | isisd/isis_circuit.c | 7 | ||||
| -rw-r--r-- | isisd/isis_nb_config.c | 48 | 
2 files changed, 5 insertions, 50 deletions
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);  | 
