From d286e5f565665c78761681f3b106ce5e9e564551 Mon Sep 17 00:00:00 2001 From: Donald Sharp Date: Thu, 13 Jul 2017 18:12:07 -0400 Subject: [PATCH 1/3] eigrpd: Fixed wrong type used Recent additions to prefix_copy to check afi type exposed an issue with eigrp setting the wrong afi type for a `struct prefix`. Signed-off-by: Donald Sharp --- eigrpd/eigrp_query.c | 2 +- eigrpd/eigrp_reply.c | 2 +- eigrpd/eigrp_update.c | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/eigrpd/eigrp_query.c b/eigrpd/eigrp_query.c index 3ef8f9a975..1d308d2bee 100644 --- a/eigrpd/eigrp_query.c +++ b/eigrpd/eigrp_query.c @@ -119,7 +119,7 @@ eigrp_query_receive (struct eigrp *eigrp, struct ip *iph, struct eigrp_header *e tlv = eigrp_read_ipv4_tlv(s); - dest_addr.family = AFI_IP; + dest_addr.family = AF_INET; dest_addr.prefix = tlv->destination; dest_addr.prefixlen = tlv->prefix_length; struct eigrp_prefix_entry *dest = diff --git a/eigrpd/eigrp_reply.c b/eigrpd/eigrp_reply.c index e64a3d022f..4e3ed66a02 100644 --- a/eigrpd/eigrp_reply.c +++ b/eigrpd/eigrp_reply.c @@ -187,7 +187,7 @@ eigrp_reply_receive (struct eigrp *eigrp, struct ip *iph, struct eigrp_header *e tlv = eigrp_read_ipv4_tlv(s); - dest_addr.family = AFI_IP; + dest_addr.family = AF_INET; dest_addr.prefix = tlv->destination; dest_addr.prefixlen = tlv->prefix_length; struct eigrp_prefix_entry *dest = diff --git a/eigrpd/eigrp_update.c b/eigrpd/eigrp_update.c index 24fd7074fa..bdebc21e1f 100644 --- a/eigrpd/eigrp_update.c +++ b/eigrpd/eigrp_update.c @@ -297,7 +297,7 @@ eigrp_update_receive (struct eigrp *eigrp, struct ip *iph, struct eigrp_header * tlv = eigrp_read_ipv4_tlv(s); /*searching if destination exists */ - dest_addr.family = AFI_IP; + dest_addr.family = AF_INET; dest_addr.prefix = tlv->destination; dest_addr.prefixlen = tlv->prefix_length; struct eigrp_prefix_entry *dest = From 9e9012d7c1c724f3b15845bea3d3ba1ca100e532 Mon Sep 17 00:00:00 2001 From: Donald Sharp Date: Thu, 13 Jul 2017 18:45:20 -0400 Subject: [PATCH 2/3] eigrpd: Let eigrp setup it's router-id in some situations If the router-id is passed up to eigrp before we have started the instance, allow it to set it up properly as we start the instance. Signed-off-by: Donald Sharp --- eigrpd/eigrp_network.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/eigrpd/eigrp_network.c b/eigrpd/eigrp_network.c index c4e0b8435c..74cb6de188 100644 --- a/eigrpd/eigrp_network.c +++ b/eigrpd/eigrp_network.c @@ -243,8 +243,8 @@ eigrp_network_set(struct eigrp *eigrp, struct prefix_ipv4 *p) rn->info = (void *) pref; /* Schedule Router ID Update. */ - // if (eigrp->router_id == 0) - // eigrp_router_id_update(eigrp); + if (eigrp->router_id == 0) + eigrp_router_id_update(eigrp); /* Run network config now. */ /* Get target interface. */ for (ALL_LIST_ELEMENTS_RO(vrf_iflist(VRF_DEFAULT), node, ifp)) From 07ccdc88adc3abc0217ca7c9c2c6de3d3a8e9334 Mon Sep 17 00:00:00 2001 From: Donald Sharp Date: Thu, 13 Jul 2017 18:58:31 -0400 Subject: [PATCH 3/3] eigrpd: Fix up some redistribution issues Get EIGRP to start attempting to redistribute routes as well as to display the fact it thinks it is redistributed. Signed-off-by: Donald Sharp --- eigrpd/eigrp_vty.c | 6 ++++++ eigrpd/eigrp_zebra.c | 17 ++++------------- eigrpd/eigrp_zebra.h | 2 +- 3 files changed, 11 insertions(+), 14 deletions(-) diff --git a/eigrpd/eigrp_vty.c b/eigrpd/eigrp_vty.c index e283c73653..7745e9abbd 100644 --- a/eigrpd/eigrp_vty.c +++ b/eigrpd/eigrp_vty.c @@ -59,6 +59,7 @@ static int config_write_network (struct vty *vty, struct eigrp *eigrp) { struct route_node *rn; + int i; /* `network area' print. */ for (rn = route_top (eigrp->networks); rn; rn = route_next (rn)) @@ -75,6 +76,11 @@ config_write_network (struct vty *vty, struct eigrp *eigrp) if (eigrp->variance != EIGRP_VARIANCE_DEFAULT) vty_outln (vty, " variance %d", eigrp->variance); + for (i = 0; i < ZEBRA_ROUTE_MAX; i++) + if (i != zclient->redist_default && + vrf_bitmap_check (zclient->redist[AFI_IP][i], VRF_DEFAULT)) + vty_outln (vty, " redistribute %s", zebra_route_string(i)); + /*Separate EIGRP configuration from the rest of the config*/ vty_outln (vty, "!"); diff --git a/eigrpd/eigrp_zebra.c b/eigrpd/eigrp_zebra.c index 2baad75265..38ce757cd0 100644 --- a/eigrpd/eigrp_zebra.c +++ b/eigrpd/eigrp_zebra.c @@ -496,11 +496,12 @@ eigrp_zebra_route_delete (struct prefix_ipv4 *p) return; } -vrf_bitmap_t +int eigrp_is_type_redistributed (int type) { - return (DEFAULT_ROUTE_TYPE (type)) ? - zclient->default_information : zclient->redist[AFI_IP][type]; + return ((DEFAULT_ROUTE_TYPE (type)) ? + vrf_bitmap_check (zclient->default_information, VRF_DEFAULT) : + vrf_bitmap_check (zclient->redist[AFI_IP][type], VRF_DEFAULT)); } int @@ -528,11 +529,6 @@ eigrp_redistribute_set (struct eigrp *eigrp, int type, struct eigrp_metrics metr zclient_redistribute (ZEBRA_REDISTRIBUTE_ADD, zclient, AFI_IP, type, 0, VRF_DEFAULT); - // if (IS_DEBUG_EIGRP (zebra, ZEBRA_REDISTRIBUTE)) - // zlog_debug ("Redistribute[%s]: Start Type[%d], Metric[%d]", - // ospf_redist_string(type), - // metric_type (ospf, type), metric_value (ospf, type)); - ++eigrp->redistribute; return CMD_SUCCESS; @@ -550,11 +546,6 @@ eigrp_redistribute_unset (struct eigrp *eigrp, int type) --eigrp->redistribute; } - // if (IS_DEBUG_EIGRP (zebra, ZEBRA_REDISTRIBUTE)) - // zlog_debug ("Redistribute[%s]: Start Type[%d], Metric[%d]", - // ospf_redist_string(type), - // metric_type (ospf, type), metric_value (ospf, type)); - return CMD_SUCCESS; } diff --git a/eigrpd/eigrp_zebra.h b/eigrpd/eigrp_zebra.h index 0991d35aba..6151e32724 100644 --- a/eigrpd/eigrp_zebra.h +++ b/eigrpd/eigrp_zebra.h @@ -37,6 +37,6 @@ extern void eigrp_zebra_route_add (struct prefix_ipv4 *, struct list *); extern void eigrp_zebra_route_delete (struct prefix_ipv4 *); extern int eigrp_redistribute_set (struct eigrp *, int, struct eigrp_metrics); extern int eigrp_redistribute_unset (struct eigrp *, int); -extern vrf_bitmap_t eigrp_is_type_redistributed (int); +extern int eigrp_is_type_redistributed (int); #endif /* _ZEBRA_EIGRP_ZEBRA_H_ */