mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-04-30 04:31:02 +00:00
eigrpd: Remove union from FSM msg
Remove the union of passing the TLV and just pass the metric in. Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
This commit is contained in:
parent
3aea4e507b
commit
db6ec9ff6e
@ -133,7 +133,7 @@ void eigrp_query_receive(struct eigrp *eigrp, struct ip *iph,
|
|||||||
msg.eigrp = eigrp;
|
msg.eigrp = eigrp;
|
||||||
msg.data_type = EIGRP_INT;
|
msg.data_type = EIGRP_INT;
|
||||||
msg.adv_router = nbr;
|
msg.adv_router = nbr;
|
||||||
msg.data.ipv4_int_type = tlv;
|
msg.metrics = tlv->metric;
|
||||||
msg.entry = entry;
|
msg.entry = entry;
|
||||||
msg.prefix = dest;
|
msg.prefix = dest;
|
||||||
eigrp_fsm_event(&msg);
|
eigrp_fsm_event(&msg);
|
||||||
|
@ -239,7 +239,7 @@ void eigrp_reply_receive(struct eigrp *eigrp, struct ip *iph,
|
|||||||
msg.eigrp = eigrp;
|
msg.eigrp = eigrp;
|
||||||
msg.data_type = EIGRP_INT;
|
msg.data_type = EIGRP_INT;
|
||||||
msg.adv_router = nbr;
|
msg.adv_router = nbr;
|
||||||
msg.data.ipv4_int_type = tlv;
|
msg.metrics = tlv->metric;
|
||||||
msg.entry = entry;
|
msg.entry = entry;
|
||||||
msg.prefix = dest;
|
msg.prefix = dest;
|
||||||
eigrp_fsm_event(&msg);
|
eigrp_fsm_event(&msg);
|
||||||
|
@ -102,7 +102,7 @@ void eigrp_siaquery_receive(struct eigrp *eigrp, struct ip *iph,
|
|||||||
msg.eigrp = eigrp;
|
msg.eigrp = eigrp;
|
||||||
msg.data_type = EIGRP_INT;
|
msg.data_type = EIGRP_INT;
|
||||||
msg.adv_router = nbr;
|
msg.adv_router = nbr;
|
||||||
msg.data.ipv4_int_type = tlv;
|
msg.metrics = tlv->metric;
|
||||||
msg.entry = entry;
|
msg.entry = entry;
|
||||||
msg.prefix = dest;
|
msg.prefix = dest;
|
||||||
eigrp_fsm_event(&msg);
|
eigrp_fsm_event(&msg);
|
||||||
|
@ -101,7 +101,7 @@ void eigrp_siareply_receive(struct eigrp *eigrp, struct ip *iph,
|
|||||||
msg.eigrp = eigrp;
|
msg.eigrp = eigrp;
|
||||||
msg.data_type = EIGRP_INT;
|
msg.data_type = EIGRP_INT;
|
||||||
msg.adv_router = nbr;
|
msg.adv_router = nbr;
|
||||||
msg.data.ipv4_int_type = tlv;
|
msg.metrics = tlv->metric;
|
||||||
msg.entry = entry;
|
msg.entry = entry;
|
||||||
msg.prefix = dest;
|
msg.prefix = dest;
|
||||||
eigrp_fsm_event(&msg);
|
eigrp_fsm_event(&msg);
|
||||||
|
@ -514,10 +514,7 @@ struct eigrp_fsm_action_message {
|
|||||||
struct eigrp_neighbor_entry *entry;
|
struct eigrp_neighbor_entry *entry;
|
||||||
struct eigrp_prefix_entry *prefix;
|
struct eigrp_prefix_entry *prefix;
|
||||||
msg_data_t data_type; // internal or external tlv type
|
msg_data_t data_type; // internal or external tlv type
|
||||||
union {
|
struct eigrp_metrics metrics;
|
||||||
struct TLV_IPv4_External_type *ipv4_ext_data;
|
|
||||||
struct TLV_IPv4_Internal_type *ipv4_int_type;
|
|
||||||
} data;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* _ZEBRA_EIGRP_STRUCTURES_H_ */
|
#endif /* _ZEBRA_EIGRP_STRUCTURES_H_ */
|
||||||
|
@ -380,50 +380,45 @@ enum metric_change eigrp_topology_update_distance(struct eigrp_fsm_action_messag
|
|||||||
struct eigrp_prefix_entry *prefix = msg->prefix;
|
struct eigrp_prefix_entry *prefix = msg->prefix;
|
||||||
struct eigrp_neighbor_entry *entry = msg->entry;
|
struct eigrp_neighbor_entry *entry = msg->entry;
|
||||||
enum metric_change change = METRIC_SAME;
|
enum metric_change change = METRIC_SAME;
|
||||||
assert(entry);
|
|
||||||
|
|
||||||
struct TLV_IPv4_External_type *ext_data = NULL;
|
|
||||||
struct TLV_IPv4_Internal_type *int_data = NULL;
|
|
||||||
switch(msg->data_type) {
|
|
||||||
case EIGRP_CONNECTED:
|
|
||||||
break;
|
|
||||||
case EIGRP_INT:
|
|
||||||
{
|
|
||||||
u_int32_t new_reported_distance;
|
u_int32_t new_reported_distance;
|
||||||
|
|
||||||
int_data = msg->data.ipv4_int_type;
|
assert(entry);
|
||||||
if (eigrp_metrics_is_same(int_data->metric,
|
|
||||||
|
switch(msg->data_type) {
|
||||||
|
case EIGRP_CONNECTED:
|
||||||
|
if (prefix->nt == EIGRP_TOPOLOGY_TYPE_CONNECTED)
|
||||||
|
return change;
|
||||||
|
|
||||||
|
change = METRIC_DECREASE;
|
||||||
|
break;
|
||||||
|
case EIGRP_INT:
|
||||||
|
if (eigrp_metrics_is_same(msg->metrics,
|
||||||
entry->reported_metric)) {
|
entry->reported_metric)) {
|
||||||
return change; // No change
|
return change; // No change
|
||||||
}
|
}
|
||||||
|
|
||||||
new_reported_distance = eigrp_calculate_metrics(eigrp,
|
new_reported_distance = eigrp_calculate_metrics(eigrp,
|
||||||
int_data->metric);
|
msg->metrics);
|
||||||
|
|
||||||
if (entry->reported_distance < new_reported_distance)
|
if (entry->reported_distance < new_reported_distance)
|
||||||
change = METRIC_INCREASE;
|
change = METRIC_INCREASE;
|
||||||
else
|
else
|
||||||
change = METRIC_DECREASE;
|
change = METRIC_DECREASE;
|
||||||
|
|
||||||
entry->reported_metric = int_data->metric;
|
entry->reported_metric = msg->metrics;
|
||||||
entry->reported_distance = new_reported_distance;
|
entry->reported_distance = new_reported_distance;
|
||||||
eigrp_calculate_metrics(eigrp, int_data->metric);
|
eigrp_calculate_metrics(eigrp, msg->metrics);
|
||||||
entry->distance = eigrp_calculate_total_metrics(eigrp, entry);
|
entry->distance = eigrp_calculate_total_metrics(eigrp, entry);
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
case EIGRP_EXT:
|
case EIGRP_EXT:
|
||||||
{
|
|
||||||
ext_data = msg->data.ipv4_ext_data;
|
|
||||||
|
|
||||||
if (prefix->nt == EIGRP_TOPOLOGY_TYPE_REMOTE_EXTERNAL) {
|
if (prefix->nt == EIGRP_TOPOLOGY_TYPE_REMOTE_EXTERNAL) {
|
||||||
if (eigrp_metrics_is_same(ext_data->metric,
|
if (eigrp_metrics_is_same(msg->metrics,
|
||||||
entry->reported_metric))
|
entry->reported_metric))
|
||||||
return change;
|
return change;
|
||||||
} else
|
} else
|
||||||
change = METRIC_INCREASE;
|
change = METRIC_INCREASE;
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
default:
|
default:
|
||||||
zlog_err("%s: Please implement handler", __PRETTY_FUNCTION__);
|
zlog_err("%s: Please implement handler", __PRETTY_FUNCTION__);
|
||||||
break;
|
break;
|
||||||
@ -511,7 +506,7 @@ void eigrp_topology_neighbor_down(struct eigrp *eigrp,
|
|||||||
msg.eigrp = eigrp;
|
msg.eigrp = eigrp;
|
||||||
msg.data_type = EIGRP_INT;
|
msg.data_type = EIGRP_INT;
|
||||||
msg.adv_router = nbr;
|
msg.adv_router = nbr;
|
||||||
msg.data.ipv4_int_type = tlv;
|
msg.metrics = tlv->metric;
|
||||||
msg.entry = entry;
|
msg.entry = entry;
|
||||||
msg.prefix = prefix;
|
msg.prefix = prefix;
|
||||||
eigrp_fsm_event(&msg);
|
eigrp_fsm_event(&msg);
|
||||||
|
@ -141,7 +141,7 @@ static void eigrp_update_receive_GR_ask(struct eigrp *eigrp,
|
|||||||
fsm_msg.eigrp = eigrp;
|
fsm_msg.eigrp = eigrp;
|
||||||
fsm_msg.data_type = EIGRP_INT;
|
fsm_msg.data_type = EIGRP_INT;
|
||||||
fsm_msg.adv_router = nbr;
|
fsm_msg.adv_router = nbr;
|
||||||
fsm_msg.data.ipv4_int_type = tlv_max;
|
fsm_msg.metrics = tlv_max->metric;
|
||||||
fsm_msg.entry = entry;
|
fsm_msg.entry = entry;
|
||||||
fsm_msg.prefix = prefix;
|
fsm_msg.prefix = prefix;
|
||||||
|
|
||||||
@ -317,7 +317,7 @@ void eigrp_update_receive(struct eigrp *eigrp, struct ip *iph,
|
|||||||
msg.eigrp = eigrp;
|
msg.eigrp = eigrp;
|
||||||
msg.data_type = EIGRP_INT;
|
msg.data_type = EIGRP_INT;
|
||||||
msg.adv_router = nbr;
|
msg.adv_router = nbr;
|
||||||
msg.data.ipv4_int_type = tlv;
|
msg.metrics = tlv->metric;
|
||||||
msg.entry = entry;
|
msg.entry = entry;
|
||||||
msg.prefix = dest;
|
msg.prefix = dest;
|
||||||
eigrp_fsm_event(&msg);
|
eigrp_fsm_event(&msg);
|
||||||
@ -980,7 +980,7 @@ static void eigrp_update_send_GR_part(struct eigrp_neighbor *nbr)
|
|||||||
fsm_msg.eigrp = e;
|
fsm_msg.eigrp = e;
|
||||||
fsm_msg.data_type = EIGRP_INT;
|
fsm_msg.data_type = EIGRP_INT;
|
||||||
fsm_msg.adv_router = nbr;
|
fsm_msg.adv_router = nbr;
|
||||||
fsm_msg.data.ipv4_int_type = tlv_max;
|
fsm_msg.metrics = tlv_max->metric;
|
||||||
fsm_msg.entry = entry;
|
fsm_msg.entry = entry;
|
||||||
fsm_msg.prefix = pe;
|
fsm_msg.prefix = pe;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user