diff options
| author | Donald Sharp <sharpd@cumulusnetworks.com> | 2017-08-24 07:34:21 -0400 | 
|---|---|---|
| committer | Donald Sharp <sharpd@cumulusnetworks.com> | 2017-08-24 08:09:04 -0400 | 
| commit | 532e75e6ee1484d1940d9a918548227e920de9b5 (patch) | |
| tree | e02352cbcf5af255cb8178696a6c79364d793a09 /eigrpd/eigrp_topology.c | |
| parent | 4a64eed5773e6472985a7d42599853af553e4f05 (diff) | |
eigrpd: Fix distance comparison
The distance comparison for when we received an
internal and we already had an internal was
overriding the metrics of the connected.
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
Diffstat (limited to 'eigrpd/eigrp_topology.c')
| -rw-r--r-- | eigrpd/eigrp_topology.c | 11 | 
1 files changed, 9 insertions, 2 deletions
diff --git a/eigrpd/eigrp_topology.c b/eigrpd/eigrp_topology.c index 2e8128f474..64e65b694c 100644 --- a/eigrpd/eigrp_topology.c +++ b/eigrpd/eigrp_topology.c @@ -379,6 +379,10 @@ enum metric_change eigrp_topology_update_distance(struct eigrp_fsm_action_messag  		change = METRIC_DECREASE;  		break;  	case EIGRP_INT: +		if (prefix->nt == EIGRP_TOPOLOGY_TYPE_CONNECTED) { +			change = METRIC_INCREASE; +			goto distance_done; +		}  		if (eigrp_metrics_is_same(msg->metrics,  					  entry->reported_metric)) {  			return change; // No change @@ -387,9 +391,10 @@ enum metric_change eigrp_topology_update_distance(struct eigrp_fsm_action_messag  		new_reported_distance = eigrp_calculate_metrics(eigrp,  								msg->metrics); -		if (entry->reported_distance  < new_reported_distance) +		if (entry->reported_distance < new_reported_distance) {  			change = METRIC_INCREASE; -		else +			goto distance_done; +		} else  			change = METRIC_DECREASE;  		entry->reported_metric = msg->metrics; @@ -404,12 +409,14 @@ enum metric_change eigrp_topology_update_distance(struct eigrp_fsm_action_messag  				return change;  		} else {  			change = METRIC_INCREASE; +			goto distance_done;  		}  		break;  	default:  		zlog_err("%s: Please implement handler", __PRETTY_FUNCTION__);  		break;  	} + distance_done:  	/*  	 * Move to correct position in list according to new distance  	 */  | 
