コード例 #1
0
int eigrp_fsm_event_keep_state(struct eigrp_fsm_action_message *msg) {

	struct eigrp_prefix_entry *prefix = msg->prefix;
	struct eigrp_neighbor_entry *entry = msg->entry;

	if (prefix->state == EIGRP_FSM_STATE_PASSIVE) {
		if (!eigrp_metrics_is_same(&prefix->reported_metric,
				&((struct eigrp_neighbor_entry *) prefix->entries->head->data)->total_metric)) {
			prefix->rdistance =
					prefix->fdistance =
							prefix->distance =
									((struct eigrp_neighbor_entry *) prefix->entries->head->data)->distance;
			prefix->reported_metric =
					((struct eigrp_neighbor_entry *) prefix->entries->head->data)->total_metric;
			if (msg->packet_type == EIGRP_OPC_QUERY)
				eigrp_send_reply(msg->adv_router, msg->entry);
			prefix->req_action |= EIGRP_FSM_NEED_UPDATE;
			listnode_add((eigrp_lookup())->topology_changes_internalIPV4,prefix);
		}
		eigrp_topology_update_node_flags(prefix);
		eigrp_update_routing_table(prefix);
	}

	if (msg->packet_type == EIGRP_OPC_QUERY)
		eigrp_send_reply(msg->adv_router, prefix);

	return 1;
}
コード例 #2
0
ファイル: eigrp_zebra.c プロジェクト: Azure/sonic-bcm-lkm
int eigrp_redistribute_set(struct eigrp *eigrp, int type,
			   struct eigrp_metrics metric)
{

	if (eigrp_is_type_redistributed(type)) {
		if (eigrp_metrics_is_same(metric, eigrp->dmetric[type])) {
			eigrp->dmetric[type] = metric;
		}

		eigrp_external_routes_refresh(eigrp, type);

		//      if (IS_DEBUG_EIGRP(zebra, ZEBRA_REDISTRIBUTE))
		//        zlog_debug ("Redistribute[%s]: Refresh  Type[%d],
		//        Metric[%d]",
		//                   eigrp_redist_string(type),
		//                   metric_type (eigrp, type), metric_value
		//                   (eigrp, type));
		return CMD_SUCCESS;
	}

	eigrp->dmetric[type] = metric;

	zclient_redistribute(ZEBRA_REDISTRIBUTE_ADD, zclient, AFI_IP, type, 0,
			     VRF_DEFAULT);

	++eigrp->redistribute;

	return CMD_SUCCESS;
}