From 476a146963c960a28c044d89840d9f0cbb41c62e Mon Sep 17 00:00:00 2001 From: Donald Sharp Date: Wed, 23 Aug 2017 15:31:02 -0400 Subject: [PATCH] eigrpd: Refactor eigrp_topoloy_table_lookup_ipv4 Allow eigrp_topology_table_lookup_ipv4 to use 'struct prefix' Signed-off-by: Donald Sharp --- eigrpd/eigrp_interface.c | 10 ++++------ eigrpd/eigrp_query.c | 4 ++-- eigrpd/eigrp_reply.c | 4 ++-- eigrpd/eigrp_siaquery.c | 4 ++-- eigrpd/eigrp_siareply.c | 4 ++-- eigrpd/eigrp_topology.c | 5 ++--- eigrpd/eigrp_topology.h | 2 +- eigrpd/eigrp_update.c | 42 ++++++++++++++++++---------------------- 8 files changed, 34 insertions(+), 41 deletions(-) diff --git a/eigrpd/eigrp_interface.c b/eigrpd/eigrp_interface.c index bc9172dee6..9f54b62353 100644 --- a/eigrpd/eigrp_interface.c +++ b/eigrpd/eigrp_interface.c @@ -296,7 +296,7 @@ int eigrp_if_up(struct eigrp_interface *ei) dest_addr.prefixlen = ei->connected->address->prefixlen; apply_mask(&dest_addr); pe = eigrp_topology_table_lookup_ipv4(eigrp->topology_table, - (struct prefix_ipv4 *)&dest_addr); + &dest_addr); if (pe == NULL) { pe = eigrp_prefix_entry_new(); @@ -430,7 +430,7 @@ u_char eigrp_default_iftype(struct interface *ifp) void eigrp_if_free(struct eigrp_interface *ei, int source) { - struct prefix_ipv4 dest_addr; + struct prefix dest_addr; struct eigrp_prefix_entry *pe; struct eigrp *eigrp = eigrp_lookup(); @@ -439,10 +439,8 @@ void eigrp_if_free(struct eigrp_interface *ei, int source) eigrp_hello_send(ei, EIGRP_HELLO_GRACEFUL_SHUTDOWN, NULL); } - dest_addr.family = AF_INET; - dest_addr.prefix = ei->connected->address->u.prefix4; - dest_addr.prefixlen = ei->connected->address->prefixlen; - apply_mask_ipv4(&dest_addr); + dest_addr = *ei->connected->address; + apply_mask(&dest_addr); pe = eigrp_topology_table_lookup_ipv4(eigrp->topology_table, &dest_addr); if (pe) diff --git a/eigrpd/eigrp_query.c b/eigrpd/eigrp_query.c index 4757097315..0167c8b3c2 100644 --- a/eigrpd/eigrp_query.c +++ b/eigrpd/eigrp_query.c @@ -91,7 +91,7 @@ void eigrp_query_receive(struct eigrp *eigrp, struct ip *iph, { struct eigrp_neighbor *nbr; struct TLV_IPv4_Internal_type *tlv; - struct prefix_ipv4 dest_addr; + struct prefix dest_addr; u_int16_t type; u_int16_t length; @@ -116,7 +116,7 @@ void eigrp_query_receive(struct eigrp *eigrp, struct ip *iph, tlv = eigrp_read_ipv4_tlv(s); dest_addr.family = AF_INET; - dest_addr.prefix = tlv->destination; + dest_addr.u.prefix4 = tlv->destination; dest_addr.prefixlen = tlv->prefix_length; struct eigrp_prefix_entry *dest = eigrp_topology_table_lookup_ipv4( diff --git a/eigrpd/eigrp_reply.c b/eigrpd/eigrp_reply.c index cc70d1cfee..2b5b0aa44b 100644 --- a/eigrpd/eigrp_reply.c +++ b/eigrpd/eigrp_reply.c @@ -179,14 +179,14 @@ void eigrp_reply_receive(struct eigrp *eigrp, struct ip *iph, while (s->endp > s->getp) { type = stream_getw(s); if (type == EIGRP_TLV_IPv4_INT) { - struct prefix_ipv4 dest_addr; + struct prefix dest_addr; stream_set_getp(s, s->getp - sizeof(u_int16_t)); tlv = eigrp_read_ipv4_tlv(s); dest_addr.family = AF_INET; - dest_addr.prefix = tlv->destination; + dest_addr.u.prefix4 = tlv->destination; dest_addr.prefixlen = tlv->prefix_length; struct eigrp_prefix_entry *dest = eigrp_topology_table_lookup_ipv4( diff --git a/eigrpd/eigrp_siaquery.c b/eigrpd/eigrp_siaquery.c index cd04f88595..7264e53b6b 100644 --- a/eigrpd/eigrp_siaquery.c +++ b/eigrpd/eigrp_siaquery.c @@ -78,14 +78,14 @@ void eigrp_siaquery_receive(struct eigrp *eigrp, struct ip *iph, while (s->endp > s->getp) { type = stream_getw(s); if (type == EIGRP_TLV_IPv4_INT) { - struct prefix_ipv4 dest_addr; + struct prefix dest_addr; stream_set_getp(s, s->getp - sizeof(u_int16_t)); tlv = eigrp_read_ipv4_tlv(s); dest_addr.family = AFI_IP; - dest_addr.prefix = tlv->destination; + dest_addr.u.prefix4 = tlv->destination; dest_addr.prefixlen = tlv->prefix_length; struct eigrp_prefix_entry *dest = eigrp_topology_table_lookup_ipv4( diff --git a/eigrpd/eigrp_siareply.c b/eigrpd/eigrp_siareply.c index 5e83549488..8496c05675 100644 --- a/eigrpd/eigrp_siareply.c +++ b/eigrpd/eigrp_siareply.c @@ -77,14 +77,14 @@ void eigrp_siareply_receive(struct eigrp *eigrp, struct ip *iph, while (s->endp > s->getp) { type = stream_getw(s); if (type == EIGRP_TLV_IPv4_INT) { - struct prefix_ipv4 dest_addr; + struct prefix dest_addr; stream_set_getp(s, s->getp - sizeof(u_int16_t)); tlv = eigrp_read_ipv4_tlv(s); dest_addr.family = AFI_IP; - dest_addr.prefix = tlv->destination; + dest_addr.u.prefix4 = tlv->destination; dest_addr.prefixlen = tlv->prefix_length; struct eigrp_prefix_entry *dest = eigrp_topology_table_lookup_ipv4( diff --git a/eigrpd/eigrp_topology.c b/eigrpd/eigrp_topology.c index 0ae4788fd0..6bc0987daa 100644 --- a/eigrpd/eigrp_topology.c +++ b/eigrpd/eigrp_topology.c @@ -261,13 +261,12 @@ unsigned int eigrp_topology_table_isempty(struct list *topology) struct eigrp_prefix_entry * eigrp_topology_table_lookup_ipv4(struct list *topology_table, - struct prefix_ipv4 *address) + struct prefix *address) { struct eigrp_prefix_entry *data; struct listnode *node; for (ALL_LIST_ELEMENTS_RO(topology_table, node, data)) { - if (prefix_same(data->destination, - (struct prefix *)address)) + if (prefix_same(data->destination, address)) return data; } diff --git a/eigrpd/eigrp_topology.h b/eigrpd/eigrp_topology.h index 0c9b5c60c6..8bff08b75a 100644 --- a/eigrpd/eigrp_topology.h +++ b/eigrpd/eigrp_topology.h @@ -49,7 +49,7 @@ extern void eigrp_neighbor_entry_delete(struct eigrp_prefix_entry *, extern void eigrp_topology_delete_all(struct list *); extern unsigned int eigrp_topology_table_isempty(struct list *); extern struct eigrp_prefix_entry * -eigrp_topology_table_lookup_ipv4(struct list *, struct prefix_ipv4 *); +eigrp_topology_table_lookup_ipv4(struct list *, struct prefix *); extern struct list *eigrp_topology_get_successor(struct eigrp_prefix_entry *); extern struct list * eigrp_topology_get_successor_max(struct eigrp_prefix_entry *pe, diff --git a/eigrpd/eigrp_update.c b/eigrpd/eigrp_update.c index c59a010087..d6a1134124 100644 --- a/eigrpd/eigrp_update.c +++ b/eigrpd/eigrp_update.c @@ -157,7 +157,7 @@ void eigrp_update_receive(struct eigrp *eigrp, struct ip *iph, u_char same; struct access_list *alist; struct prefix_list *plist; - struct prefix_ipv4 dest_addr; + struct prefix dest_addr; struct eigrp *e; u_char graceful_restart; u_char graceful_restart_final; @@ -281,7 +281,7 @@ void eigrp_update_receive(struct eigrp *eigrp, struct ip *iph, /*searching if destination exists */ dest_addr.family = AF_INET; - dest_addr.prefix = tlv->destination; + dest_addr.u.prefix4 = tlv->destination; dest_addr.prefixlen = tlv->prefix_length; struct eigrp_prefix_entry *dest = eigrp_topology_table_lookup_ipv4( @@ -314,7 +314,7 @@ void eigrp_update_receive(struct eigrp *eigrp, struct ip *iph, pe->serno = eigrp->serno; pe->destination = (struct prefix *)prefix_ipv4_new(); prefix_copy(pe->destination, - (struct prefix *)&dest_addr); + &dest_addr); pe->af = AF_INET; pe->state = EIGRP_FSM_STATE_PASSIVE; pe->nt = EIGRP_TOPOLOGY_TYPE_REMOTE; @@ -338,9 +338,8 @@ void eigrp_update_receive(struct eigrp *eigrp, struct ip *iph, /* Check if access-list fits */ if (alist - && access_list_apply( - alist, - (struct prefix *)&dest_addr) + && access_list_apply(alist, + &dest_addr) == FILTER_DENY) { /* If yes, set reported metric to Max */ ne->reported_metric.delay = @@ -355,9 +354,8 @@ void eigrp_update_receive(struct eigrp *eigrp, struct ip *iph, /* Check if prefix-list fits */ if (plist - && prefix_list_apply( - plist, - (struct prefix *)&dest_addr) + && prefix_list_apply(plist, + &dest_addr) == PREFIX_DENY) { /* If yes, set reported metric to Max */ ne->reported_metric.delay = @@ -369,9 +367,8 @@ void eigrp_update_receive(struct eigrp *eigrp, struct ip *iph, /* Check if access-list fits */ if (alist - && access_list_apply( - alist, - (struct prefix *)&dest_addr) + && access_list_apply(alist, + &dest_addr) == FILTER_DENY) { /* If yes, set reported metric to Max */ ne->reported_metric.delay = @@ -382,9 +379,8 @@ void eigrp_update_receive(struct eigrp *eigrp, struct ip *iph, /* Check if prefix-list fits */ if (plist - && prefix_list_apply( - plist, - (struct prefix *)&dest_addr) + && prefix_list_apply(plist, + &dest_addr) == PREFIX_DENY) { /* If yes, set reported metric to Max */ ne->reported_metric.delay = @@ -626,13 +622,13 @@ void eigrp_update_send_EOT(struct eigrp_neighbor *nbr) /* Check if any list fits */ if ((alist && access_list_apply (alist, - (struct prefix *) dest_addr) == FILTER_DENY)|| + dest_addr) == FILTER_DENY)|| (plist && prefix_list_apply (plist, - (struct prefix *) dest_addr) == PREFIX_DENY)|| + dest_addr) == PREFIX_DENY)|| (alist_i && access_list_apply (alist_i, - (struct prefix *) dest_addr) == FILTER_DENY)|| + dest_addr) == FILTER_DENY)|| (plist_i && prefix_list_apply (plist_i, - (struct prefix *) dest_addr) == PREFIX_DENY)) { + dest_addr) == PREFIX_DENY)) { //pe->reported_metric.delay = EIGRP_MAX_METRIC; continue; } else { @@ -730,19 +726,19 @@ void eigrp_update_send(struct eigrp_interface *ei) /* Check if any list fits */ if ((alist && access_list_apply(alist, - (struct prefix *)dest_addr) + dest_addr) == FILTER_DENY) || (plist && prefix_list_apply(plist, - (struct prefix *)dest_addr) + dest_addr) == PREFIX_DENY) || (alist_i && access_list_apply(alist_i, - (struct prefix *)dest_addr) + dest_addr) == FILTER_DENY) || (plist_i && prefix_list_apply(plist_i, - (struct prefix *)dest_addr) + dest_addr) == PREFIX_DENY)) { // pe->reported_metric.delay = EIGRP_MAX_METRIC; continue; -- 2.39.5