eigrp_fifo_free (nbr->retrans_queue);
THREAD_OFF (nbr->t_holddown);
- listnode_delete (nbr->ei->nbrs,nbr);
+ if (nbr->ei)
+ listnode_delete (nbr->ei->nbrs,nbr);
XFREE (MTYPE_EIGRP_NEIGHBOR, nbr);
}
eigrp_neighbor_entry_add(struct eigrp_prefix_entry *node,
struct eigrp_neighbor_entry *entry)
{
- if (listnode_lookup(node->entries, entry) == NULL)
+ struct list *l = list_new ();
+
+ if (listnode_lookup (node->entries, entry) == NULL)
{
- listnode_add_sort(node->entries, entry);
+ listnode_add_sort (node->entries, entry);
entry->prefix = node;
}
+
+ listnode_add (l, entry);
+ eigrp_zebra_route_add (node->destination_ipv4, l);
+ list_delete (l);
}
/*
* Emergency removal of the node from this list.
* Whatever it is.
*/
- listnode_delete(eigrp->topology_changes_internalIPV4, node);
+ listnode_delete (eigrp->topology_changes_internalIPV4, node);
- if (listnode_lookup(topology, node) != NULL)
+ if (listnode_lookup (topology, node) != NULL)
{
- list_delete_all_node(node->entries);
- list_free(node->entries);
- list_free(node->rij);
- listnode_delete(topology, node);
- XFREE(MTYPE_EIGRP_PREFIX_ENTRY,node);
+ list_delete_all_node (node->entries);
+ list_free (node->entries);
+ list_free (node->rij);
+ listnode_delete (topology, node);
+ XFREE (MTYPE_EIGRP_PREFIX_ENTRY,node);
}
+
+ eigrp_zebra_route_delete (node->destination_ipv4);
}
/*
pe->req_action |= EIGRP_FSM_NEED_UPDATE;
listnode_add(eigrp->topology_changes_internalIPV4, pe);
-
- /*
- * This code is a guess. I am not actually
- * sure that we should be doing this here.
- * But for the moment it installs routes
- * into the rib. Which is good?
- */
- struct eigrp_fsm_action_message *msg;
- msg = XCALLOC(MTYPE_EIGRP_FSM_MSG,
- sizeof(struct eigrp_fsm_action_message));
-
- msg->packet_type = EIGRP_OPC_UPDATE;
- msg->eigrp = eigrp;
- msg->data_type =EIGRP_TLV_IPv4_INT;
- msg->adv_router = nbr;
- msg->data.ipv4_int_type = tlv;
- msg->entry = ne;
- msg->prefix = pe;
- int event = eigrp_get_fsm_event(msg);
- eigrp_fsm_event(msg, event);
}
eigrp_IPv4_InternalTLV_free (tlv);
}
/* Nexthop, ifindex, distance and metric information. */
for (ALL_LIST_ELEMENTS_RO (successors, node, te))
{
- stream_putc (s, NEXTHOP_TYPE_IPV4_IFINDEX);
- stream_put_in_addr (s, &te->adv_router->src);
+ if (te->adv_router->src.s_addr)
+ {
+ stream_putc (s, NEXTHOP_TYPE_IPV4_IFINDEX);
+ stream_put_in_addr (s, &te->adv_router->src);
+ }
+ else
+ stream_putc (s, NEXTHOP_TYPE_IFINDEX);
stream_putl (s, te->ei->ifp->ifindex);
}
eigrp->topology_table = eigrp_topology_new();
eigrp->neighbor_self = eigrp_nbr_new(NULL);
- inet_aton("127.0.0.1", &eigrp->neighbor_self->src);
+ inet_aton("0.0.0.0", &eigrp->neighbor_self->src);
eigrp->variance = EIGRP_VARIANCE_DEFAULT;
eigrp->max_paths = EIGRP_MAX_PATHS_DEFAULT;