mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-13 14:42:06 +00:00
eigrpd: Rename nexthop_entry and prefix_entry to better names
Rename struct eigrp_nexthop_entry to struct eigrp_route_descriptor Rename struct eigrp_prefix_entry to struct eigrp_prefix_descriptor Fix all the associated function names as well. Signed-off-by: Donald Sharp <sharpd@nvidia.com> Signed-off-by: Donnie SAvage <diivious@hotmail.com>
This commit is contained in:
parent
fb532db3f0
commit
dc4accdd53
@ -122,10 +122,10 @@ enum metric_change { METRIC_DECREASE, METRIC_SAME, METRIC_INCREASE };
|
||||
#define EIGRP_TOPOLOGY_TYPE_REMOTE_EXTERNAL 2 // Remote external network
|
||||
|
||||
/*EIGRP TT entry flags*/
|
||||
#define EIGRP_NEXTHOP_ENTRY_SUCCESSOR_FLAG (1 << 0)
|
||||
#define EIGRP_NEXTHOP_ENTRY_FSUCCESSOR_FLAG (1 << 1)
|
||||
#define EIGRP_NEXTHOP_ENTRY_INTABLE_FLAG (1 << 2)
|
||||
#define EIGRP_NEXTHOP_ENTRY_EXTERNAL_FLAG (1 << 3)
|
||||
#define EIGRP_ROUTE_DESCRIPTOR_SUCCESSOR_FLAG (1 << 0)
|
||||
#define EIGRP_ROUTE_DESCRIPTOR_FSUCCESSOR_FLAG (1 << 1)
|
||||
#define EIGRP_ROUTE_DESCRIPTOR_INTABLE_FLAG (1 << 2)
|
||||
#define EIGRP_ROUTE_DESCRIPTOR_EXTERNAL_FLAG (1 << 3)
|
||||
|
||||
/*EIGRP FSM state count, event count*/
|
||||
#define EIGRP_FSM_STATE_MAX 5
|
||||
|
@ -236,7 +236,8 @@ void show_ip_eigrp_topology_header(struct vty *vty, struct eigrp *eigrp)
|
||||
"Codes: P - Passive, A - Active, U - Update, Q - Query, R - Reply\n r - reply Status, s - sia Status\n\n");
|
||||
}
|
||||
|
||||
void show_ip_eigrp_prefix_entry(struct vty *vty, struct eigrp_prefix_entry *tn)
|
||||
void show_ip_eigrp_prefix_descriptor(struct vty *vty,
|
||||
struct eigrp_prefix_descriptor *tn)
|
||||
{
|
||||
struct list *successors = eigrp_topology_get_successor(tn);
|
||||
|
||||
@ -251,14 +252,15 @@ void show_ip_eigrp_prefix_entry(struct vty *vty, struct eigrp_prefix_entry *tn)
|
||||
list_delete(&successors);
|
||||
}
|
||||
|
||||
void show_ip_eigrp_nexthop_entry(struct vty *vty, struct eigrp *eigrp,
|
||||
struct eigrp_nexthop_entry *te, bool *first)
|
||||
void show_ip_eigrp_route_descriptor(struct vty *vty, struct eigrp *eigrp,
|
||||
struct eigrp_route_descriptor *te,
|
||||
bool *first)
|
||||
{
|
||||
if (te->reported_distance == EIGRP_MAX_METRIC)
|
||||
return;
|
||||
|
||||
if (*first) {
|
||||
show_ip_eigrp_prefix_entry(vty, te->prefix);
|
||||
show_ip_eigrp_prefix_descriptor(vty, te->prefix);
|
||||
*first = false;
|
||||
}
|
||||
|
||||
|
@ -151,11 +151,11 @@ extern void show_ip_eigrp_interface_sub(struct vty *, struct eigrp *,
|
||||
struct eigrp_interface *);
|
||||
extern void show_ip_eigrp_neighbor_sub(struct vty *, struct eigrp_neighbor *,
|
||||
int);
|
||||
extern void show_ip_eigrp_prefix_entry(struct vty *,
|
||||
struct eigrp_prefix_entry *);
|
||||
extern void show_ip_eigrp_nexthop_entry(struct vty *vty, struct eigrp *eigrp,
|
||||
struct eigrp_nexthop_entry *ne,
|
||||
bool *first);
|
||||
extern void show_ip_eigrp_prefix_descriptor(struct vty *vty,
|
||||
struct eigrp_prefix_descriptor *tn);
|
||||
extern void show_ip_eigrp_route_descriptor(struct vty *vty, struct eigrp *eigrp,
|
||||
struct eigrp_route_descriptor *ne,
|
||||
bool *first);
|
||||
|
||||
extern void eigrp_debug_init(void);
|
||||
|
||||
|
@ -262,13 +262,13 @@ eigrp_get_fsm_event(struct eigrp_fsm_action_message *msg)
|
||||
{
|
||||
// Loading base information from message
|
||||
// struct eigrp *eigrp = msg->eigrp;
|
||||
struct eigrp_prefix_entry *prefix = msg->prefix;
|
||||
struct eigrp_nexthop_entry *entry = msg->entry;
|
||||
struct eigrp_prefix_descriptor *prefix = msg->prefix;
|
||||
struct eigrp_route_descriptor *entry = msg->entry;
|
||||
uint8_t actual_state = prefix->state;
|
||||
enum metric_change change;
|
||||
|
||||
if (entry == NULL) {
|
||||
entry = eigrp_nexthop_entry_new();
|
||||
entry = eigrp_route_descriptor_new();
|
||||
entry->adv_router = msg->adv_router;
|
||||
entry->ei = msg->adv_router->ei;
|
||||
entry->prefix = prefix;
|
||||
@ -286,7 +286,7 @@ eigrp_get_fsm_event(struct eigrp_fsm_action_message *msg)
|
||||
|
||||
switch (actual_state) {
|
||||
case EIGRP_FSM_STATE_PASSIVE: {
|
||||
struct eigrp_nexthop_entry *head =
|
||||
struct eigrp_route_descriptor *head =
|
||||
listnode_head(prefix->entries);
|
||||
|
||||
if (head->reported_distance < prefix->fdistance) {
|
||||
@ -307,7 +307,7 @@ eigrp_get_fsm_event(struct eigrp_fsm_action_message *msg)
|
||||
}
|
||||
case EIGRP_FSM_STATE_ACTIVE_0: {
|
||||
if (msg->packet_type == EIGRP_OPC_REPLY) {
|
||||
struct eigrp_nexthop_entry *head =
|
||||
struct eigrp_route_descriptor *head =
|
||||
listnode_head(prefix->entries);
|
||||
|
||||
listnode_delete(prefix->rij, entry->adv_router);
|
||||
@ -322,7 +322,7 @@ eigrp_get_fsm_event(struct eigrp_fsm_action_message *msg)
|
||||
return EIGRP_FSM_EVENT_LR_FCN;
|
||||
} else if (msg->packet_type == EIGRP_OPC_QUERY
|
||||
&& (entry->flags
|
||||
& EIGRP_NEXTHOP_ENTRY_SUCCESSOR_FLAG)) {
|
||||
& EIGRP_ROUTE_DESCRIPTOR_SUCCESSOR_FLAG)) {
|
||||
return EIGRP_FSM_EVENT_QACT;
|
||||
}
|
||||
|
||||
@ -332,14 +332,14 @@ eigrp_get_fsm_event(struct eigrp_fsm_action_message *msg)
|
||||
}
|
||||
case EIGRP_FSM_STATE_ACTIVE_1: {
|
||||
if (msg->packet_type == EIGRP_OPC_QUERY
|
||||
&& (entry->flags & EIGRP_NEXTHOP_ENTRY_SUCCESSOR_FLAG)) {
|
||||
&& (entry->flags & EIGRP_ROUTE_DESCRIPTOR_SUCCESSOR_FLAG)) {
|
||||
return EIGRP_FSM_EVENT_QACT;
|
||||
} else if (msg->packet_type == EIGRP_OPC_REPLY) {
|
||||
listnode_delete(prefix->rij, entry->adv_router);
|
||||
|
||||
if (change == METRIC_INCREASE
|
||||
&& (entry->flags
|
||||
& EIGRP_NEXTHOP_ENTRY_SUCCESSOR_FLAG)) {
|
||||
& EIGRP_ROUTE_DESCRIPTOR_SUCCESSOR_FLAG)) {
|
||||
return EIGRP_FSM_EVENT_DINC;
|
||||
} else if (prefix->rij->count) {
|
||||
return EIGRP_FSM_KEEP_STATE;
|
||||
@ -350,7 +350,7 @@ eigrp_get_fsm_event(struct eigrp_fsm_action_message *msg)
|
||||
} else if (msg->packet_type == EIGRP_OPC_UPDATE
|
||||
&& change == METRIC_INCREASE
|
||||
&& (entry->flags
|
||||
& EIGRP_NEXTHOP_ENTRY_SUCCESSOR_FLAG)) {
|
||||
& EIGRP_ROUTE_DESCRIPTOR_SUCCESSOR_FLAG)) {
|
||||
return EIGRP_FSM_EVENT_DINC;
|
||||
}
|
||||
return EIGRP_FSM_KEEP_STATE;
|
||||
@ -359,7 +359,7 @@ eigrp_get_fsm_event(struct eigrp_fsm_action_message *msg)
|
||||
}
|
||||
case EIGRP_FSM_STATE_ACTIVE_2: {
|
||||
if (msg->packet_type == EIGRP_OPC_REPLY) {
|
||||
struct eigrp_nexthop_entry *head =
|
||||
struct eigrp_route_descriptor *head =
|
||||
listnode_head(prefix->entries);
|
||||
|
||||
listnode_delete(prefix->rij, entry->adv_router);
|
||||
@ -385,7 +385,7 @@ eigrp_get_fsm_event(struct eigrp_fsm_action_message *msg)
|
||||
|
||||
if (change == METRIC_INCREASE
|
||||
&& (entry->flags
|
||||
& EIGRP_NEXTHOP_ENTRY_SUCCESSOR_FLAG)) {
|
||||
& EIGRP_ROUTE_DESCRIPTOR_SUCCESSOR_FLAG)) {
|
||||
return EIGRP_FSM_EVENT_DINC;
|
||||
} else if (prefix->rij->count) {
|
||||
return EIGRP_FSM_KEEP_STATE;
|
||||
@ -396,7 +396,7 @@ eigrp_get_fsm_event(struct eigrp_fsm_action_message *msg)
|
||||
} else if (msg->packet_type == EIGRP_OPC_UPDATE
|
||||
&& change == METRIC_INCREASE
|
||||
&& (entry->flags
|
||||
& EIGRP_NEXTHOP_ENTRY_SUCCESSOR_FLAG)) {
|
||||
& EIGRP_ROUTE_DESCRIPTOR_SUCCESSOR_FLAG)) {
|
||||
return EIGRP_FSM_EVENT_DINC;
|
||||
}
|
||||
return EIGRP_FSM_KEEP_STATE;
|
||||
@ -434,9 +434,9 @@ int eigrp_fsm_event(struct eigrp_fsm_action_message *msg)
|
||||
int eigrp_fsm_event_nq_fcn(struct eigrp_fsm_action_message *msg)
|
||||
{
|
||||
struct eigrp *eigrp = msg->eigrp;
|
||||
struct eigrp_prefix_entry *prefix = msg->prefix;
|
||||
struct eigrp_prefix_descriptor *prefix = msg->prefix;
|
||||
struct list *successors = eigrp_topology_get_successor(prefix);
|
||||
struct eigrp_nexthop_entry *ne;
|
||||
struct eigrp_route_descriptor *ne;
|
||||
|
||||
assert(successors); // If this is NULL we have shit the bed, fun huh?
|
||||
|
||||
@ -461,9 +461,9 @@ int eigrp_fsm_event_nq_fcn(struct eigrp_fsm_action_message *msg)
|
||||
int eigrp_fsm_event_q_fcn(struct eigrp_fsm_action_message *msg)
|
||||
{
|
||||
struct eigrp *eigrp = msg->eigrp;
|
||||
struct eigrp_prefix_entry *prefix = msg->prefix;
|
||||
struct eigrp_prefix_descriptor *prefix = msg->prefix;
|
||||
struct list *successors = eigrp_topology_get_successor(prefix);
|
||||
struct eigrp_nexthop_entry *ne;
|
||||
struct eigrp_route_descriptor *ne;
|
||||
|
||||
assert(successors); // If this is NULL somebody poked us in the eye.
|
||||
|
||||
@ -487,8 +487,8 @@ int eigrp_fsm_event_q_fcn(struct eigrp_fsm_action_message *msg)
|
||||
int eigrp_fsm_event_keep_state(struct eigrp_fsm_action_message *msg)
|
||||
{
|
||||
struct eigrp *eigrp = msg->eigrp;
|
||||
struct eigrp_prefix_entry *prefix = msg->prefix;
|
||||
struct eigrp_nexthop_entry *ne = listnode_head(prefix->entries);
|
||||
struct eigrp_prefix_descriptor *prefix = msg->prefix;
|
||||
struct eigrp_route_descriptor *ne = listnode_head(prefix->entries);
|
||||
|
||||
if (prefix->state == EIGRP_FSM_STATE_PASSIVE) {
|
||||
if (!eigrp_metrics_is_same(prefix->reported_metric,
|
||||
@ -515,8 +515,8 @@ int eigrp_fsm_event_keep_state(struct eigrp_fsm_action_message *msg)
|
||||
int eigrp_fsm_event_lr(struct eigrp_fsm_action_message *msg)
|
||||
{
|
||||
struct eigrp *eigrp = msg->eigrp;
|
||||
struct eigrp_prefix_entry *prefix = msg->prefix;
|
||||
struct eigrp_nexthop_entry *ne = listnode_head(prefix->entries);
|
||||
struct eigrp_prefix_descriptor *prefix = msg->prefix;
|
||||
struct eigrp_route_descriptor *ne = listnode_head(prefix->entries);
|
||||
|
||||
prefix->fdistance = prefix->distance = prefix->rdistance = ne->distance;
|
||||
prefix->reported_metric = ne->total_metric;
|
||||
@ -545,7 +545,7 @@ int eigrp_fsm_event_lr(struct eigrp_fsm_action_message *msg)
|
||||
int eigrp_fsm_event_dinc(struct eigrp_fsm_action_message *msg)
|
||||
{
|
||||
struct list *successors = eigrp_topology_get_successor(msg->prefix);
|
||||
struct eigrp_nexthop_entry *ne;
|
||||
struct eigrp_route_descriptor *ne;
|
||||
|
||||
assert(successors); // Trump and his big hands
|
||||
|
||||
@ -566,8 +566,8 @@ int eigrp_fsm_event_dinc(struct eigrp_fsm_action_message *msg)
|
||||
int eigrp_fsm_event_lr_fcs(struct eigrp_fsm_action_message *msg)
|
||||
{
|
||||
struct eigrp *eigrp = msg->eigrp;
|
||||
struct eigrp_prefix_entry *prefix = msg->prefix;
|
||||
struct eigrp_nexthop_entry *ne = listnode_head(prefix->entries);
|
||||
struct eigrp_prefix_descriptor *prefix = msg->prefix;
|
||||
struct eigrp_route_descriptor *ne = listnode_head(prefix->entries);
|
||||
|
||||
prefix->state = EIGRP_FSM_STATE_PASSIVE;
|
||||
prefix->distance = prefix->rdistance = ne->distance;
|
||||
@ -598,8 +598,8 @@ int eigrp_fsm_event_lr_fcs(struct eigrp_fsm_action_message *msg)
|
||||
int eigrp_fsm_event_lr_fcn(struct eigrp_fsm_action_message *msg)
|
||||
{
|
||||
struct eigrp *eigrp = msg->eigrp;
|
||||
struct eigrp_prefix_entry *prefix = msg->prefix;
|
||||
struct eigrp_nexthop_entry *best_successor;
|
||||
struct eigrp_prefix_descriptor *prefix = msg->prefix;
|
||||
struct eigrp_route_descriptor *best_successor;
|
||||
struct list *successors = eigrp_topology_get_successor(prefix);
|
||||
|
||||
assert(successors); // Routing without a stack
|
||||
@ -628,7 +628,7 @@ int eigrp_fsm_event_lr_fcn(struct eigrp_fsm_action_message *msg)
|
||||
int eigrp_fsm_event_qact(struct eigrp_fsm_action_message *msg)
|
||||
{
|
||||
struct list *successors = eigrp_topology_get_successor(msg->prefix);
|
||||
struct eigrp_nexthop_entry *ne;
|
||||
struct eigrp_route_descriptor *ne;
|
||||
|
||||
assert(successors); // Cats and no Dogs
|
||||
|
||||
|
@ -229,8 +229,8 @@ void eigrp_del_if_params(struct eigrp_if_params *eip)
|
||||
|
||||
int eigrp_if_up(struct eigrp_interface *ei)
|
||||
{
|
||||
struct eigrp_prefix_entry *pe;
|
||||
struct eigrp_nexthop_entry *ne;
|
||||
struct eigrp_prefix_descriptor *pe;
|
||||
struct eigrp_route_descriptor *ne;
|
||||
struct eigrp_metrics metric;
|
||||
struct eigrp_interface *ei2;
|
||||
struct listnode *node, *nnode;
|
||||
@ -263,14 +263,14 @@ int eigrp_if_up(struct eigrp_interface *ei)
|
||||
|
||||
/*Add connected entry to topology table*/
|
||||
|
||||
ne = eigrp_nexthop_entry_new();
|
||||
ne = eigrp_route_descriptor_new();
|
||||
ne->ei = ei;
|
||||
ne->reported_metric = metric;
|
||||
ne->total_metric = metric;
|
||||
ne->distance = eigrp_calculate_metrics(eigrp, metric);
|
||||
ne->reported_distance = 0;
|
||||
ne->adv_router = eigrp->neighbor_self;
|
||||
ne->flags = EIGRP_NEXTHOP_ENTRY_SUCCESSOR_FLAG;
|
||||
ne->flags = EIGRP_ROUTE_DESCRIPTOR_SUCCESSOR_FLAG;
|
||||
|
||||
struct prefix dest_addr;
|
||||
|
||||
@ -280,7 +280,7 @@ int eigrp_if_up(struct eigrp_interface *ei)
|
||||
&dest_addr);
|
||||
|
||||
if (pe == NULL) {
|
||||
pe = eigrp_prefix_entry_new();
|
||||
pe = eigrp_prefix_descriptor_new();
|
||||
pe->serno = eigrp->serno;
|
||||
pe->destination = (struct prefix *)prefix_ipv4_new();
|
||||
prefix_copy(pe->destination, &dest_addr);
|
||||
@ -292,10 +292,10 @@ int eigrp_if_up(struct eigrp_interface *ei)
|
||||
pe->state = EIGRP_FSM_STATE_PASSIVE;
|
||||
pe->fdistance = eigrp_calculate_metrics(eigrp, metric);
|
||||
pe->req_action |= EIGRP_FSM_NEED_UPDATE;
|
||||
eigrp_prefix_entry_add(eigrp->topology_table, pe);
|
||||
eigrp_prefix_descriptor_add(eigrp->topology_table, pe);
|
||||
listnode_add(eigrp->topology_changes_internalIPV4, pe);
|
||||
|
||||
eigrp_nexthop_entry_add(eigrp, pe, ne);
|
||||
eigrp_route_descriptor_add(eigrp, pe, ne);
|
||||
|
||||
for (ALL_LIST_ELEMENTS(eigrp->eiflist, node, nnode, ei2)) {
|
||||
eigrp_update_send(ei2);
|
||||
@ -307,7 +307,7 @@ int eigrp_if_up(struct eigrp_interface *ei)
|
||||
struct eigrp_fsm_action_message msg;
|
||||
|
||||
ne->prefix = pe;
|
||||
eigrp_nexthop_entry_add(eigrp, pe, ne);
|
||||
eigrp_route_descriptor_add(eigrp, pe, ne);
|
||||
|
||||
msg.packet_type = EIGRP_OPC_UPDATE;
|
||||
msg.eigrp = eigrp;
|
||||
@ -416,7 +416,7 @@ uint8_t eigrp_default_iftype(struct interface *ifp)
|
||||
void eigrp_if_free(struct eigrp_interface *ei, int source)
|
||||
{
|
||||
struct prefix dest_addr;
|
||||
struct eigrp_prefix_entry *pe;
|
||||
struct eigrp_prefix_descriptor *pe;
|
||||
struct eigrp *eigrp = ei->eigrp;
|
||||
|
||||
if (source == INTERFACE_DOWN_BY_VTY) {
|
||||
@ -429,7 +429,8 @@ void eigrp_if_free(struct eigrp_interface *ei, int source)
|
||||
pe = eigrp_topology_table_lookup_ipv4(eigrp->topology_table,
|
||||
&dest_addr);
|
||||
if (pe)
|
||||
eigrp_prefix_entry_delete(eigrp, eigrp->topology_table, pe);
|
||||
eigrp_prefix_descriptor_delete(eigrp, eigrp->topology_table,
|
||||
pe);
|
||||
|
||||
eigrp_if_down(ei);
|
||||
|
||||
|
@ -37,6 +37,6 @@ DEFINE_MTYPE(EIGRPD, EIGRP_IPV4_INT_TLV, "EIGRP IPv4 TLV")
|
||||
DEFINE_MTYPE(EIGRPD, EIGRP_SEQ_TLV, "EIGRP SEQ TLV")
|
||||
DEFINE_MTYPE(EIGRPD, EIGRP_AUTH_TLV, "EIGRP AUTH TLV")
|
||||
DEFINE_MTYPE(EIGRPD, EIGRP_AUTH_SHA256_TLV, "EIGRP SHA TLV")
|
||||
DEFINE_MTYPE(EIGRPD, EIGRP_PREFIX_ENTRY, "EIGRP Prefix")
|
||||
DEFINE_MTYPE(EIGRPD, EIGRP_NEXTHOP_ENTRY, "EIGRP Nexthop Entry")
|
||||
DEFINE_MTYPE(EIGRPD, EIGRP_PREFIX_DESCRIPTOR, "EIGRP Prefix")
|
||||
DEFINE_MTYPE(EIGRPD, EIGRP_ROUTE_DESCRIPTOR, "EIGRP Nexthop Entry")
|
||||
DEFINE_MTYPE(EIGRPD, EIGRP_FSM_MSG, "EIGRP FSM Message")
|
||||
|
@ -36,8 +36,8 @@ DECLARE_MTYPE(EIGRP_IPV4_INT_TLV)
|
||||
DECLARE_MTYPE(EIGRP_SEQ_TLV)
|
||||
DECLARE_MTYPE(EIGRP_AUTH_TLV)
|
||||
DECLARE_MTYPE(EIGRP_AUTH_SHA256_TLV)
|
||||
DECLARE_MTYPE(EIGRP_PREFIX_ENTRY)
|
||||
DECLARE_MTYPE(EIGRP_NEXTHOP_ENTRY)
|
||||
DECLARE_MTYPE(EIGRP_PREFIX_DESCRIPTOR)
|
||||
DECLARE_MTYPE(EIGRP_ROUTE_DESCRIPTOR)
|
||||
DECLARE_MTYPE(EIGRP_FSM_MSG)
|
||||
|
||||
#endif /* _FRR_EIGRP_MEMORY_H */
|
||||
|
@ -343,7 +343,7 @@ void eigrp_nbr_hard_restart(struct eigrp_neighbor *nbr, struct vty *vty)
|
||||
eigrp_nbr_delete(nbr);
|
||||
}
|
||||
|
||||
int eigrp_nbr_split_horizon_check(struct eigrp_nexthop_entry *ne,
|
||||
int eigrp_nbr_split_horizon_check(struct eigrp_route_descriptor *ne,
|
||||
struct eigrp_interface *ei)
|
||||
{
|
||||
if (ne->distance == EIGRP_MAX_METRIC)
|
||||
|
@ -54,6 +54,6 @@ extern struct eigrp_neighbor *
|
||||
eigrp_nbr_lookup_by_addr_process(struct eigrp *eigrp, struct in_addr addr);
|
||||
extern void eigrp_nbr_hard_restart(struct eigrp_neighbor *nbr, struct vty *vty);
|
||||
|
||||
extern int eigrp_nbr_split_horizon_check(struct eigrp_nexthop_entry *ne,
|
||||
extern int eigrp_nbr_split_horizon_check(struct eigrp_route_descriptor *ne,
|
||||
struct eigrp_interface *ei);
|
||||
#endif /* _ZEBRA_EIGRP_NEIGHBOR_H */
|
||||
|
@ -380,7 +380,7 @@ uint32_t eigrp_calculate_metrics(struct eigrp *eigrp,
|
||||
}
|
||||
|
||||
uint32_t eigrp_calculate_total_metrics(struct eigrp *eigrp,
|
||||
struct eigrp_nexthop_entry *entry)
|
||||
struct eigrp_route_descriptor *entry)
|
||||
{
|
||||
struct eigrp_interface *ei = entry->ei;
|
||||
|
||||
|
@ -45,7 +45,7 @@ extern void eigrp_adjust_sndbuflen(struct eigrp *, unsigned int);
|
||||
|
||||
extern uint32_t eigrp_calculate_metrics(struct eigrp *, struct eigrp_metrics);
|
||||
extern uint32_t eigrp_calculate_total_metrics(struct eigrp *,
|
||||
struct eigrp_nexthop_entry *);
|
||||
struct eigrp_route_descriptor *);
|
||||
extern uint8_t eigrp_metrics_is_same(struct eigrp_metrics,
|
||||
struct eigrp_metrics);
|
||||
extern void eigrp_external_routes_refresh(struct eigrp *, int);
|
||||
|
@ -1144,7 +1144,7 @@ struct TLV_IPv4_Internal_type *eigrp_read_ipv4_tlv(struct stream *s)
|
||||
}
|
||||
|
||||
uint16_t eigrp_add_internalTLV_to_stream(struct stream *s,
|
||||
struct eigrp_prefix_entry *pe)
|
||||
struct eigrp_prefix_descriptor *pe)
|
||||
{
|
||||
uint16_t length;
|
||||
|
||||
|
@ -56,8 +56,9 @@ extern void eigrp_fifo_reset(struct eigrp_fifo *);
|
||||
extern void eigrp_send_packet_reliably(struct eigrp_neighbor *);
|
||||
|
||||
extern struct TLV_IPv4_Internal_type *eigrp_read_ipv4_tlv(struct stream *);
|
||||
extern uint16_t eigrp_add_internalTLV_to_stream(struct stream *,
|
||||
struct eigrp_prefix_entry *);
|
||||
extern uint16_t
|
||||
eigrp_add_internalTLV_to_stream(struct stream *s,
|
||||
struct eigrp_prefix_descriptor *pe);
|
||||
extern uint16_t eigrp_add_authTLV_MD5_to_stream(struct stream *,
|
||||
struct eigrp_interface *);
|
||||
extern uint16_t eigrp_add_authTLV_SHA256_to_stream(struct stream *,
|
||||
@ -113,8 +114,8 @@ extern uint32_t eigrp_query_send_all(struct eigrp *);
|
||||
/*
|
||||
* These externs are found in eigrp_reply.c
|
||||
*/
|
||||
extern void eigrp_send_reply(struct eigrp_neighbor *,
|
||||
struct eigrp_prefix_entry *);
|
||||
extern void eigrp_send_reply(struct eigrp_neighbor *neigh,
|
||||
struct eigrp_prefix_descriptor *pe);
|
||||
extern void eigrp_reply_receive(struct eigrp *, struct ip *,
|
||||
struct eigrp_header *, struct stream *,
|
||||
struct eigrp_interface *, int);
|
||||
@ -122,8 +123,8 @@ extern void eigrp_reply_receive(struct eigrp *, struct ip *,
|
||||
/*
|
||||
* These externs are found in eigrp_siaquery.c
|
||||
*/
|
||||
extern void eigrp_send_siaquery(struct eigrp_neighbor *,
|
||||
struct eigrp_prefix_entry *);
|
||||
extern void eigrp_send_siaquery(struct eigrp_neighbor *neigh,
|
||||
struct eigrp_prefix_descriptor *pe);
|
||||
extern void eigrp_siaquery_receive(struct eigrp *, struct ip *,
|
||||
struct eigrp_header *, struct stream *,
|
||||
struct eigrp_interface *, int);
|
||||
@ -131,8 +132,8 @@ extern void eigrp_siaquery_receive(struct eigrp *, struct ip *,
|
||||
/*
|
||||
* These externs are found in eigrp_siareply.c
|
||||
*/
|
||||
extern void eigrp_send_siareply(struct eigrp_neighbor *,
|
||||
struct eigrp_prefix_entry *);
|
||||
extern void eigrp_send_siareply(struct eigrp_neighbor *neigh,
|
||||
struct eigrp_prefix_descriptor *pe);
|
||||
extern void eigrp_siareply_receive(struct eigrp *, struct ip *,
|
||||
struct eigrp_header *, struct stream *,
|
||||
struct eigrp_interface *, int);
|
||||
|
@ -58,7 +58,7 @@ uint32_t eigrp_query_send_all(struct eigrp *eigrp)
|
||||
{
|
||||
struct eigrp_interface *iface;
|
||||
struct listnode *node, *node2, *nnode2;
|
||||
struct eigrp_prefix_entry *pe;
|
||||
struct eigrp_prefix_descriptor *pe;
|
||||
uint32_t counter;
|
||||
|
||||
if (eigrp == NULL) {
|
||||
@ -118,7 +118,7 @@ void eigrp_query_receive(struct eigrp *eigrp, struct ip *iph,
|
||||
dest_addr.family = AF_INET;
|
||||
dest_addr.u.prefix4 = tlv->destination;
|
||||
dest_addr.prefixlen = tlv->prefix_length;
|
||||
struct eigrp_prefix_entry *dest =
|
||||
struct eigrp_prefix_descriptor *dest =
|
||||
eigrp_topology_table_lookup_ipv4(
|
||||
eigrp->topology_table, &dest_addr);
|
||||
|
||||
@ -126,9 +126,9 @@ void eigrp_query_receive(struct eigrp *eigrp, struct ip *iph,
|
||||
* know)*/
|
||||
if (dest != NULL) {
|
||||
struct eigrp_fsm_action_message msg;
|
||||
struct eigrp_nexthop_entry *entry =
|
||||
eigrp_prefix_entry_lookup(dest->entries,
|
||||
nbr);
|
||||
struct eigrp_route_descriptor *entry =
|
||||
eigrp_route_descriptor_lookup(
|
||||
dest->entries, nbr);
|
||||
msg.packet_type = EIGRP_OPC_QUERY;
|
||||
msg.eigrp = eigrp;
|
||||
msg.data_type = EIGRP_INT;
|
||||
@ -164,7 +164,7 @@ void eigrp_send_query(struct eigrp_interface *ei)
|
||||
uint16_t length = EIGRP_HEADER_LEN;
|
||||
struct listnode *node, *nnode, *node2, *nnode2;
|
||||
struct eigrp_neighbor *nbr;
|
||||
struct eigrp_prefix_entry *pe;
|
||||
struct eigrp_prefix_descriptor *pe;
|
||||
bool has_tlv = false;
|
||||
bool new_packet = true;
|
||||
uint16_t eigrp_mtu = EIGRP_PACKET_MTU(ei->ifp->mtu);
|
||||
|
@ -61,20 +61,21 @@
|
||||
#include "eigrpd/eigrp_memory.h"
|
||||
#include "eigrpd/eigrp_errors.h"
|
||||
|
||||
void eigrp_send_reply(struct eigrp_neighbor *nbr, struct eigrp_prefix_entry *pe)
|
||||
void eigrp_send_reply(struct eigrp_neighbor *nbr,
|
||||
struct eigrp_prefix_descriptor *pe)
|
||||
{
|
||||
struct eigrp_packet *ep;
|
||||
uint16_t length = EIGRP_HEADER_LEN;
|
||||
struct eigrp_interface *ei = nbr->ei;
|
||||
struct eigrp *eigrp = ei->eigrp;
|
||||
struct eigrp_prefix_entry *pe2;
|
||||
struct eigrp_prefix_descriptor *pe2;
|
||||
|
||||
// TODO: Work in progress
|
||||
/* Filtering */
|
||||
/* get list from eigrp process */
|
||||
pe2 = XCALLOC(MTYPE_EIGRP_PREFIX_ENTRY,
|
||||
sizeof(struct eigrp_prefix_entry));
|
||||
memcpy(pe2, pe, sizeof(struct eigrp_prefix_entry));
|
||||
pe2 = XCALLOC(MTYPE_EIGRP_PREFIX_DESCRIPTOR,
|
||||
sizeof(struct eigrp_prefix_descriptor));
|
||||
memcpy(pe2, pe, sizeof(struct eigrp_prefix_descriptor));
|
||||
|
||||
if (eigrp_update_prefix_apply(eigrp, ei, EIGRP_FILTER_OUT,
|
||||
pe2->destination)) {
|
||||
@ -122,7 +123,7 @@ void eigrp_send_reply(struct eigrp_neighbor *nbr, struct eigrp_prefix_entry *pe)
|
||||
eigrp_send_packet_reliably(nbr);
|
||||
}
|
||||
|
||||
XFREE(MTYPE_EIGRP_PREFIX_ENTRY, pe2);
|
||||
XFREE(MTYPE_EIGRP_PREFIX_DESCRIPTOR, pe2);
|
||||
}
|
||||
|
||||
/*EIGRP REPLY read function*/
|
||||
@ -161,7 +162,7 @@ void eigrp_reply_receive(struct eigrp *eigrp, struct ip *iph,
|
||||
dest_addr.family = AF_INET;
|
||||
dest_addr.u.prefix4 = tlv->destination;
|
||||
dest_addr.prefixlen = tlv->prefix_length;
|
||||
struct eigrp_prefix_entry *dest =
|
||||
struct eigrp_prefix_descriptor *dest =
|
||||
eigrp_topology_table_lookup_ipv4(eigrp->topology_table,
|
||||
&dest_addr);
|
||||
/*
|
||||
@ -177,8 +178,8 @@ void eigrp_reply_receive(struct eigrp *eigrp, struct ip *iph,
|
||||
}
|
||||
|
||||
struct eigrp_fsm_action_message msg;
|
||||
struct eigrp_nexthop_entry *entry =
|
||||
eigrp_prefix_entry_lookup(dest->entries, nbr);
|
||||
struct eigrp_route_descriptor *entry =
|
||||
eigrp_route_descriptor_lookup(dest->entries, nbr);
|
||||
|
||||
if (eigrp_update_prefix_apply(eigrp, ei, EIGRP_FILTER_IN,
|
||||
&dest_addr)) {
|
||||
|
@ -265,8 +265,8 @@ route_match_metric(void *rule, struct prefix *prefix, route_map_object_t type,
|
||||
// uint32_t *metric;
|
||||
// uint32_t check;
|
||||
// struct rip_info *rinfo;
|
||||
// struct eigrp_nexthop_entry *te;
|
||||
// struct eigrp_prefix_entry *pe;
|
||||
// struct eigrp_route_descriptor *te;
|
||||
// struct eigrp_prefix_descriptor *pe;
|
||||
// struct listnode *node, *node2, *nnode, *nnode2;
|
||||
// struct eigrp *e;
|
||||
//
|
||||
|
@ -87,7 +87,7 @@ void eigrp_siaquery_receive(struct eigrp *eigrp, struct ip *iph,
|
||||
dest_addr.family = AFI_IP;
|
||||
dest_addr.u.prefix4 = tlv->destination;
|
||||
dest_addr.prefixlen = tlv->prefix_length;
|
||||
struct eigrp_prefix_entry *dest =
|
||||
struct eigrp_prefix_descriptor *dest =
|
||||
eigrp_topology_table_lookup_ipv4(
|
||||
eigrp->topology_table, &dest_addr);
|
||||
|
||||
@ -95,9 +95,9 @@ void eigrp_siaquery_receive(struct eigrp *eigrp, struct ip *iph,
|
||||
* know)*/
|
||||
if (dest != NULL) {
|
||||
struct eigrp_fsm_action_message msg;
|
||||
struct eigrp_nexthop_entry *entry =
|
||||
eigrp_prefix_entry_lookup(dest->entries,
|
||||
nbr);
|
||||
struct eigrp_route_descriptor *entry =
|
||||
eigrp_route_descriptor_lookup(
|
||||
dest->entries, nbr);
|
||||
msg.packet_type = EIGRP_OPC_SIAQUERY;
|
||||
msg.eigrp = eigrp;
|
||||
msg.data_type = EIGRP_INT;
|
||||
@ -114,7 +114,7 @@ void eigrp_siaquery_receive(struct eigrp *eigrp, struct ip *iph,
|
||||
}
|
||||
|
||||
void eigrp_send_siaquery(struct eigrp_neighbor *nbr,
|
||||
struct eigrp_prefix_entry *pe)
|
||||
struct eigrp_prefix_descriptor *pe)
|
||||
{
|
||||
struct eigrp_packet *ep;
|
||||
uint16_t length = EIGRP_HEADER_LEN;
|
||||
|
@ -86,7 +86,7 @@ void eigrp_siareply_receive(struct eigrp *eigrp, struct ip *iph,
|
||||
dest_addr.family = AFI_IP;
|
||||
dest_addr.u.prefix4 = tlv->destination;
|
||||
dest_addr.prefixlen = tlv->prefix_length;
|
||||
struct eigrp_prefix_entry *dest =
|
||||
struct eigrp_prefix_descriptor *dest =
|
||||
eigrp_topology_table_lookup_ipv4(
|
||||
eigrp->topology_table, &dest_addr);
|
||||
|
||||
@ -94,9 +94,9 @@ void eigrp_siareply_receive(struct eigrp *eigrp, struct ip *iph,
|
||||
* know)*/
|
||||
if (dest != NULL) {
|
||||
struct eigrp_fsm_action_message msg;
|
||||
struct eigrp_nexthop_entry *entry =
|
||||
eigrp_prefix_entry_lookup(dest->entries,
|
||||
nbr);
|
||||
struct eigrp_route_descriptor *entry =
|
||||
eigrp_route_descriptor_lookup(
|
||||
dest->entries, nbr);
|
||||
msg.packet_type = EIGRP_OPC_SIAQUERY;
|
||||
msg.eigrp = eigrp;
|
||||
msg.data_type = EIGRP_INT;
|
||||
@ -113,7 +113,7 @@ void eigrp_siareply_receive(struct eigrp *eigrp, struct ip *iph,
|
||||
}
|
||||
|
||||
void eigrp_send_siareply(struct eigrp_neighbor *nbr,
|
||||
struct eigrp_prefix_entry *pe)
|
||||
struct eigrp_prefix_descriptor *pe)
|
||||
{
|
||||
struct eigrp_packet *ep;
|
||||
uint16_t length = EIGRP_HEADER_LEN;
|
||||
|
@ -48,6 +48,16 @@ struct eigrp_metrics {
|
||||
uint8_t flags;
|
||||
};
|
||||
|
||||
struct eigrp_extdata {
|
||||
uint32_t orig;
|
||||
uint32_t as;
|
||||
uint32_t tag;
|
||||
uint32_t metric;
|
||||
uint16_t reserved;
|
||||
uint8_t protocol;
|
||||
uint8_t flags;
|
||||
};
|
||||
|
||||
struct eigrp {
|
||||
vrf_id_t vrf_id;
|
||||
|
||||
@ -430,7 +440,7 @@ enum GR_type { EIGRP_GR_MANUAL, EIGRP_GR_FILTER };
|
||||
//---------------------------------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
/* EIGRP Topology table node structure */
|
||||
struct eigrp_prefix_entry {
|
||||
struct eigrp_prefix_descriptor {
|
||||
struct list *entries, *rij;
|
||||
uint32_t fdistance; // FD
|
||||
uint32_t rdistance; // RD
|
||||
@ -453,8 +463,14 @@ struct eigrp_prefix_entry {
|
||||
};
|
||||
|
||||
/* EIGRP Topology table record structure */
|
||||
struct eigrp_nexthop_entry {
|
||||
struct eigrp_prefix_entry *prefix;
|
||||
struct eigrp_route_descriptor {
|
||||
uint16_t type;
|
||||
uint16_t afi;
|
||||
|
||||
struct eigrp_prefix_descriptor *prefix;
|
||||
struct eigrp_neighbor *adv_router;
|
||||
struct in_addr nexthop;
|
||||
|
||||
uint32_t reported_distance; // distance reported by neighbor
|
||||
uint32_t distance; // sum of reported distance and link cost to
|
||||
// advertised neighbor
|
||||
@ -462,7 +478,9 @@ struct eigrp_nexthop_entry {
|
||||
struct eigrp_metrics reported_metric;
|
||||
struct eigrp_metrics total_metric;
|
||||
|
||||
struct eigrp_neighbor *adv_router; // ip address of advertising neighbor
|
||||
struct eigrp_metrics metric;
|
||||
struct eigrp_extdata extdata;
|
||||
|
||||
uint8_t flags; // used for marking successor and FS
|
||||
|
||||
struct eigrp_interface *ei; // pointer for case of connected entry
|
||||
@ -481,8 +499,8 @@ struct eigrp_fsm_action_message {
|
||||
uint8_t packet_type; // UPDATE, QUERY, SIAQUERY, SIAREPLY
|
||||
struct eigrp *eigrp; // which thread sent mesg
|
||||
struct eigrp_neighbor *adv_router; // advertising neighbor
|
||||
struct eigrp_nexthop_entry *entry;
|
||||
struct eigrp_prefix_entry *prefix;
|
||||
struct eigrp_route_descriptor *entry;
|
||||
struct eigrp_prefix_descriptor *prefix;
|
||||
msg_data_t data_type; // internal or external tlv type
|
||||
struct eigrp_metrics metrics;
|
||||
enum metric_change change;
|
||||
|
@ -52,8 +52,8 @@
|
||||
#include "eigrpd/eigrp_fsm.h"
|
||||
#include "eigrpd/eigrp_memory.h"
|
||||
|
||||
static int eigrp_nexthop_entry_cmp(struct eigrp_nexthop_entry *,
|
||||
struct eigrp_nexthop_entry *);
|
||||
static int eigrp_route_descriptor_cmp(struct eigrp_route_descriptor *rd1,
|
||||
struct eigrp_route_descriptor *rd2);
|
||||
|
||||
/*
|
||||
* Returns linkedlist used as topology table
|
||||
@ -70,14 +70,14 @@ struct route_table *eigrp_topology_new(void)
|
||||
* Returns new created toplogy node
|
||||
* cmp - assigned function for comparing topology entry
|
||||
*/
|
||||
struct eigrp_prefix_entry *eigrp_prefix_entry_new(void)
|
||||
struct eigrp_prefix_descriptor *eigrp_prefix_descriptor_new(void)
|
||||
{
|
||||
struct eigrp_prefix_entry *new;
|
||||
new = XCALLOC(MTYPE_EIGRP_PREFIX_ENTRY,
|
||||
sizeof(struct eigrp_prefix_entry));
|
||||
struct eigrp_prefix_descriptor *new;
|
||||
new = XCALLOC(MTYPE_EIGRP_PREFIX_DESCRIPTOR,
|
||||
sizeof(struct eigrp_prefix_descriptor));
|
||||
new->entries = list_new();
|
||||
new->rij = list_new();
|
||||
new->entries->cmp = (int (*)(void *, void *))eigrp_nexthop_entry_cmp;
|
||||
new->entries->cmp = (int (*)(void *, void *))eigrp_route_descriptor_cmp;
|
||||
new->distance = new->fdistance = new->rdistance = EIGRP_MAX_METRIC;
|
||||
new->destination = NULL;
|
||||
|
||||
@ -87,8 +87,8 @@ struct eigrp_prefix_entry *eigrp_prefix_entry_new(void)
|
||||
/*
|
||||
* Topology entry comparison
|
||||
*/
|
||||
static int eigrp_nexthop_entry_cmp(struct eigrp_nexthop_entry *entry1,
|
||||
struct eigrp_nexthop_entry *entry2)
|
||||
static int eigrp_route_descriptor_cmp(struct eigrp_route_descriptor *entry1,
|
||||
struct eigrp_route_descriptor *entry2)
|
||||
{
|
||||
if (entry1->distance < entry2->distance)
|
||||
return -1;
|
||||
@ -102,12 +102,12 @@ static int eigrp_nexthop_entry_cmp(struct eigrp_nexthop_entry *entry1,
|
||||
* Returns new topology entry
|
||||
*/
|
||||
|
||||
struct eigrp_nexthop_entry *eigrp_nexthop_entry_new(void)
|
||||
struct eigrp_route_descriptor *eigrp_route_descriptor_new(void)
|
||||
{
|
||||
struct eigrp_nexthop_entry *new;
|
||||
struct eigrp_route_descriptor *new;
|
||||
|
||||
new = XCALLOC(MTYPE_EIGRP_NEXTHOP_ENTRY,
|
||||
sizeof(struct eigrp_nexthop_entry));
|
||||
new = XCALLOC(MTYPE_EIGRP_ROUTE_DESCRIPTOR,
|
||||
sizeof(struct eigrp_route_descriptor));
|
||||
new->reported_distance = EIGRP_MAX_METRIC;
|
||||
new->distance = EIGRP_MAX_METRIC;
|
||||
|
||||
@ -126,8 +126,8 @@ void eigrp_topology_free(struct eigrp *eigrp, struct route_table *table)
|
||||
/*
|
||||
* Adding topology node to topology table
|
||||
*/
|
||||
void eigrp_prefix_entry_add(struct route_table *topology,
|
||||
struct eigrp_prefix_entry *pe)
|
||||
void eigrp_prefix_descriptor_add(struct route_table *topology,
|
||||
struct eigrp_prefix_descriptor *pe)
|
||||
{
|
||||
struct route_node *rn;
|
||||
|
||||
@ -146,9 +146,9 @@ void eigrp_prefix_entry_add(struct route_table *topology,
|
||||
/*
|
||||
* Adding topology entry to topology node
|
||||
*/
|
||||
void eigrp_nexthop_entry_add(struct eigrp *eigrp,
|
||||
struct eigrp_prefix_entry *node,
|
||||
struct eigrp_nexthop_entry *entry)
|
||||
void eigrp_route_descriptor_add(struct eigrp *eigrp,
|
||||
struct eigrp_prefix_descriptor *node,
|
||||
struct eigrp_route_descriptor *entry)
|
||||
{
|
||||
struct list *l = list_new();
|
||||
|
||||
@ -168,10 +168,11 @@ void eigrp_nexthop_entry_add(struct eigrp *eigrp,
|
||||
/*
|
||||
* Deleting topology node from topology table
|
||||
*/
|
||||
void eigrp_prefix_entry_delete(struct eigrp *eigrp, struct route_table *table,
|
||||
struct eigrp_prefix_entry *pe)
|
||||
void eigrp_prefix_descriptor_delete(struct eigrp *eigrp,
|
||||
struct route_table *table,
|
||||
struct eigrp_prefix_descriptor *pe)
|
||||
{
|
||||
struct eigrp_nexthop_entry *ne;
|
||||
struct eigrp_route_descriptor *ne;
|
||||
struct listnode *node, *nnode;
|
||||
struct route_node *rn;
|
||||
|
||||
@ -189,7 +190,7 @@ void eigrp_prefix_entry_delete(struct eigrp *eigrp, struct route_table *table,
|
||||
listnode_delete(eigrp->topology_changes_internalIPV4, pe);
|
||||
|
||||
for (ALL_LIST_ELEMENTS(pe->entries, node, nnode, ne))
|
||||
eigrp_nexthop_entry_delete(eigrp, pe, ne);
|
||||
eigrp_route_descriptor_delete(eigrp, pe, ne);
|
||||
list_delete(&pe->entries);
|
||||
list_delete(&pe->rij);
|
||||
eigrp_zebra_route_delete(eigrp, pe->destination);
|
||||
@ -198,20 +199,20 @@ void eigrp_prefix_entry_delete(struct eigrp *eigrp, struct route_table *table,
|
||||
rn->info = NULL;
|
||||
route_unlock_node(rn); // Lookup above
|
||||
route_unlock_node(rn); // Initial creation
|
||||
XFREE(MTYPE_EIGRP_PREFIX_ENTRY, pe);
|
||||
XFREE(MTYPE_EIGRP_PREFIX_DESCRIPTOR, pe);
|
||||
}
|
||||
|
||||
/*
|
||||
* Deleting topology entry from topology node
|
||||
*/
|
||||
void eigrp_nexthop_entry_delete(struct eigrp *eigrp,
|
||||
struct eigrp_prefix_entry *node,
|
||||
struct eigrp_nexthop_entry *entry)
|
||||
void eigrp_route_descriptor_delete(struct eigrp *eigrp,
|
||||
struct eigrp_prefix_descriptor *node,
|
||||
struct eigrp_route_descriptor *entry)
|
||||
{
|
||||
if (listnode_lookup(node->entries, entry) != NULL) {
|
||||
listnode_delete(node->entries, entry);
|
||||
eigrp_zebra_route_delete(eigrp, node->destination);
|
||||
XFREE(MTYPE_EIGRP_NEXTHOP_ENTRY, entry);
|
||||
XFREE(MTYPE_EIGRP_ROUTE_DESCRIPTOR, entry);
|
||||
}
|
||||
}
|
||||
|
||||
@ -222,7 +223,7 @@ void eigrp_topology_delete_all(struct eigrp *eigrp,
|
||||
struct route_table *topology)
|
||||
{
|
||||
struct route_node *rn;
|
||||
struct eigrp_prefix_entry *pe;
|
||||
struct eigrp_prefix_descriptor *pe;
|
||||
|
||||
for (rn = route_top(topology); rn; rn = route_next(rn)) {
|
||||
pe = rn->info;
|
||||
@ -230,15 +231,15 @@ void eigrp_topology_delete_all(struct eigrp *eigrp,
|
||||
if (!pe)
|
||||
continue;
|
||||
|
||||
eigrp_prefix_entry_delete(eigrp, topology, pe);
|
||||
eigrp_prefix_descriptor_delete(eigrp, topology, pe);
|
||||
}
|
||||
}
|
||||
|
||||
struct eigrp_prefix_entry *
|
||||
struct eigrp_prefix_descriptor *
|
||||
eigrp_topology_table_lookup_ipv4(struct route_table *table,
|
||||
struct prefix *address)
|
||||
{
|
||||
struct eigrp_prefix_entry *pe;
|
||||
struct eigrp_prefix_descriptor *pe;
|
||||
struct route_node *rn;
|
||||
|
||||
rn = route_node_lookup(table, address);
|
||||
@ -259,14 +260,15 @@ eigrp_topology_table_lookup_ipv4(struct route_table *table,
|
||||
* That way we can clean up all the list_new and list_delete's
|
||||
* that we are doing. DBS
|
||||
*/
|
||||
struct list *eigrp_topology_get_successor(struct eigrp_prefix_entry *table_node)
|
||||
struct list *
|
||||
eigrp_topology_get_successor(struct eigrp_prefix_descriptor *table_node)
|
||||
{
|
||||
struct list *successors = list_new();
|
||||
struct eigrp_nexthop_entry *data;
|
||||
struct eigrp_route_descriptor *data;
|
||||
struct listnode *node1, *node2;
|
||||
|
||||
for (ALL_LIST_ELEMENTS(table_node->entries, node1, node2, data)) {
|
||||
if (data->flags & EIGRP_NEXTHOP_ENTRY_SUCCESSOR_FLAG) {
|
||||
if (data->flags & EIGRP_ROUTE_DESCRIPTOR_SUCCESSOR_FLAG) {
|
||||
listnode_add(successors, data);
|
||||
}
|
||||
}
|
||||
@ -283,7 +285,7 @@ struct list *eigrp_topology_get_successor(struct eigrp_prefix_entry *table_node)
|
||||
}
|
||||
|
||||
struct list *
|
||||
eigrp_topology_get_successor_max(struct eigrp_prefix_entry *table_node,
|
||||
eigrp_topology_get_successor_max(struct eigrp_prefix_descriptor *table_node,
|
||||
unsigned int maxpaths)
|
||||
{
|
||||
struct list *successors = eigrp_topology_get_successor(table_node);
|
||||
@ -300,10 +302,10 @@ eigrp_topology_get_successor_max(struct eigrp_prefix_entry *table_node,
|
||||
return successors;
|
||||
}
|
||||
|
||||
struct eigrp_nexthop_entry *
|
||||
eigrp_prefix_entry_lookup(struct list *entries, struct eigrp_neighbor *nbr)
|
||||
struct eigrp_route_descriptor *
|
||||
eigrp_route_descriptor_lookup(struct list *entries, struct eigrp_neighbor *nbr)
|
||||
{
|
||||
struct eigrp_nexthop_entry *data;
|
||||
struct eigrp_route_descriptor *data;
|
||||
struct listnode *node, *nnode;
|
||||
for (ALL_LIST_ELEMENTS(entries, node, nnode, data)) {
|
||||
if (data->adv_router == nbr) {
|
||||
@ -319,8 +321,8 @@ struct list *eigrp_neighbor_prefixes_lookup(struct eigrp *eigrp,
|
||||
struct eigrp_neighbor *nbr)
|
||||
{
|
||||
struct listnode *node2, *node22;
|
||||
struct eigrp_nexthop_entry *entry;
|
||||
struct eigrp_prefix_entry *pe;
|
||||
struct eigrp_route_descriptor *entry;
|
||||
struct eigrp_prefix_descriptor *pe;
|
||||
struct route_node *rn;
|
||||
|
||||
/* create new empty list for prefixes storage */
|
||||
@ -348,8 +350,8 @@ enum metric_change
|
||||
eigrp_topology_update_distance(struct eigrp_fsm_action_message *msg)
|
||||
{
|
||||
struct eigrp *eigrp = msg->eigrp;
|
||||
struct eigrp_prefix_entry *prefix = msg->prefix;
|
||||
struct eigrp_nexthop_entry *entry = msg->entry;
|
||||
struct eigrp_prefix_descriptor *prefix = msg->prefix;
|
||||
struct eigrp_route_descriptor *entry = msg->entry;
|
||||
enum metric_change change = METRIC_SAME;
|
||||
uint32_t new_reported_distance;
|
||||
|
||||
@ -413,7 +415,7 @@ distance_done:
|
||||
|
||||
void eigrp_topology_update_all_node_flags(struct eigrp *eigrp)
|
||||
{
|
||||
struct eigrp_prefix_entry *pe;
|
||||
struct eigrp_prefix_descriptor *pe;
|
||||
struct route_node *rn;
|
||||
|
||||
if (!eigrp)
|
||||
@ -430,10 +432,10 @@ void eigrp_topology_update_all_node_flags(struct eigrp *eigrp)
|
||||
}
|
||||
|
||||
void eigrp_topology_update_node_flags(struct eigrp *eigrp,
|
||||
struct eigrp_prefix_entry *dest)
|
||||
struct eigrp_prefix_descriptor *dest)
|
||||
{
|
||||
struct listnode *node;
|
||||
struct eigrp_nexthop_entry *entry;
|
||||
struct eigrp_route_descriptor *entry;
|
||||
|
||||
for (ALL_LIST_ELEMENTS_RO(dest->entries, node, entry)) {
|
||||
if (entry->reported_distance < dest->fdistance) {
|
||||
@ -444,29 +446,29 @@ void eigrp_topology_update_node_flags(struct eigrp *eigrp,
|
||||
&& entry->distance != EIGRP_MAX_METRIC) {
|
||||
// is successor
|
||||
entry->flags |=
|
||||
EIGRP_NEXTHOP_ENTRY_SUCCESSOR_FLAG;
|
||||
EIGRP_ROUTE_DESCRIPTOR_SUCCESSOR_FLAG;
|
||||
entry->flags &=
|
||||
~EIGRP_NEXTHOP_ENTRY_FSUCCESSOR_FLAG;
|
||||
~EIGRP_ROUTE_DESCRIPTOR_FSUCCESSOR_FLAG;
|
||||
} else {
|
||||
// is feasible successor only
|
||||
entry->flags |=
|
||||
EIGRP_NEXTHOP_ENTRY_FSUCCESSOR_FLAG;
|
||||
EIGRP_ROUTE_DESCRIPTOR_FSUCCESSOR_FLAG;
|
||||
entry->flags &=
|
||||
~EIGRP_NEXTHOP_ENTRY_SUCCESSOR_FLAG;
|
||||
~EIGRP_ROUTE_DESCRIPTOR_SUCCESSOR_FLAG;
|
||||
}
|
||||
} else {
|
||||
entry->flags &= ~EIGRP_NEXTHOP_ENTRY_FSUCCESSOR_FLAG;
|
||||
entry->flags &= ~EIGRP_NEXTHOP_ENTRY_SUCCESSOR_FLAG;
|
||||
entry->flags &= ~EIGRP_ROUTE_DESCRIPTOR_FSUCCESSOR_FLAG;
|
||||
entry->flags &= ~EIGRP_ROUTE_DESCRIPTOR_SUCCESSOR_FLAG;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void eigrp_update_routing_table(struct eigrp *eigrp,
|
||||
struct eigrp_prefix_entry *prefix)
|
||||
struct eigrp_prefix_descriptor *prefix)
|
||||
{
|
||||
struct list *successors;
|
||||
struct listnode *node;
|
||||
struct eigrp_nexthop_entry *entry;
|
||||
struct eigrp_route_descriptor *entry;
|
||||
|
||||
successors = eigrp_topology_get_successor_max(prefix, eigrp->max_paths);
|
||||
|
||||
@ -474,13 +476,13 @@ void eigrp_update_routing_table(struct eigrp *eigrp,
|
||||
eigrp_zebra_route_add(eigrp, prefix->destination, successors,
|
||||
prefix->fdistance);
|
||||
for (ALL_LIST_ELEMENTS_RO(successors, node, entry))
|
||||
entry->flags |= EIGRP_NEXTHOP_ENTRY_INTABLE_FLAG;
|
||||
entry->flags |= EIGRP_ROUTE_DESCRIPTOR_INTABLE_FLAG;
|
||||
|
||||
list_delete(&successors);
|
||||
} else {
|
||||
eigrp_zebra_route_delete(eigrp, prefix->destination);
|
||||
for (ALL_LIST_ELEMENTS_RO(prefix->entries, node, entry))
|
||||
entry->flags &= ~EIGRP_NEXTHOP_ENTRY_INTABLE_FLAG;
|
||||
entry->flags &= ~EIGRP_ROUTE_DESCRIPTOR_INTABLE_FLAG;
|
||||
}
|
||||
}
|
||||
|
||||
@ -488,8 +490,8 @@ void eigrp_topology_neighbor_down(struct eigrp *eigrp,
|
||||
struct eigrp_neighbor *nbr)
|
||||
{
|
||||
struct listnode *node2, *node22;
|
||||
struct eigrp_prefix_entry *pe;
|
||||
struct eigrp_nexthop_entry *entry;
|
||||
struct eigrp_prefix_descriptor *pe;
|
||||
struct eigrp_route_descriptor *entry;
|
||||
struct route_node *rn;
|
||||
|
||||
for (rn = route_top(eigrp->topology_table); rn; rn = route_next(rn)) {
|
||||
@ -521,18 +523,18 @@ void eigrp_topology_neighbor_down(struct eigrp *eigrp,
|
||||
|
||||
void eigrp_update_topology_table_prefix(struct eigrp *eigrp,
|
||||
struct route_table *table,
|
||||
struct eigrp_prefix_entry *prefix)
|
||||
struct eigrp_prefix_descriptor *prefix)
|
||||
{
|
||||
struct listnode *node1, *node2;
|
||||
|
||||
struct eigrp_nexthop_entry *entry;
|
||||
struct eigrp_route_descriptor *entry;
|
||||
for (ALL_LIST_ELEMENTS(prefix->entries, node1, node2, entry)) {
|
||||
if (entry->distance == EIGRP_MAX_METRIC) {
|
||||
eigrp_nexthop_entry_delete(eigrp, prefix, entry);
|
||||
eigrp_route_descriptor_delete(eigrp, prefix, entry);
|
||||
}
|
||||
}
|
||||
if (prefix->distance == EIGRP_MAX_METRIC
|
||||
&& prefix->nt != EIGRP_TOPOLOGY_TYPE_CONNECTED) {
|
||||
eigrp_prefix_entry_delete(eigrp, table, prefix);
|
||||
eigrp_prefix_descriptor_delete(eigrp, table, prefix);
|
||||
}
|
||||
}
|
||||
|
@ -35,43 +35,47 @@
|
||||
/* EIGRP Topology table related functions. */
|
||||
extern struct route_table *eigrp_topology_new(void);
|
||||
extern void eigrp_topology_init(struct route_table *table);
|
||||
extern struct eigrp_prefix_entry *eigrp_prefix_entry_new(void);
|
||||
extern struct eigrp_nexthop_entry *eigrp_nexthop_entry_new(void);
|
||||
extern struct eigrp_prefix_descriptor *eigrp_prefix_descriptor_new(void);
|
||||
extern struct eigrp_route_descriptor *eigrp_route_descriptor_new(void);
|
||||
extern void eigrp_topology_free(struct eigrp *eigrp, struct route_table *table);
|
||||
extern void eigrp_prefix_entry_add(struct route_table *table,
|
||||
struct eigrp_prefix_entry *pe);
|
||||
extern void eigrp_nexthop_entry_add(struct eigrp *eigrp,
|
||||
struct eigrp_prefix_entry *pe,
|
||||
struct eigrp_nexthop_entry *ne);
|
||||
extern void eigrp_prefix_entry_delete(struct eigrp *eigrp,
|
||||
struct route_table *table,
|
||||
struct eigrp_prefix_entry *pe);
|
||||
extern void eigrp_nexthop_entry_delete(struct eigrp *eigrp,
|
||||
struct eigrp_prefix_entry *pe,
|
||||
struct eigrp_nexthop_entry *ne);
|
||||
extern void eigrp_prefix_descriptor_add(struct route_table *table,
|
||||
struct eigrp_prefix_descriptor *pe);
|
||||
extern void eigrp_route_descriptor_add(struct eigrp *eigrp,
|
||||
struct eigrp_prefix_descriptor *pe,
|
||||
struct eigrp_route_descriptor *ne);
|
||||
extern void eigrp_prefix_descriptor_delete(struct eigrp *eigrp,
|
||||
struct route_table *table,
|
||||
struct eigrp_prefix_descriptor *pe);
|
||||
extern void eigrp_route_descriptor_delete(struct eigrp *eigrp,
|
||||
struct eigrp_prefix_descriptor *pe,
|
||||
struct eigrp_route_descriptor *ne);
|
||||
extern void eigrp_topology_delete_all(struct eigrp *eigrp,
|
||||
struct route_table *table);
|
||||
extern struct eigrp_prefix_entry *
|
||||
extern struct eigrp_prefix_descriptor *
|
||||
eigrp_topology_table_lookup_ipv4(struct route_table *table, struct prefix *p);
|
||||
extern struct list *eigrp_topology_get_successor(struct eigrp_prefix_entry *pe);
|
||||
extern struct list *
|
||||
eigrp_topology_get_successor_max(struct eigrp_prefix_entry *pe,
|
||||
eigrp_topology_get_successor(struct eigrp_prefix_descriptor *pe);
|
||||
extern struct list *
|
||||
eigrp_topology_get_successor_max(struct eigrp_prefix_descriptor *pe,
|
||||
unsigned int maxpaths);
|
||||
extern struct eigrp_nexthop_entry *
|
||||
eigrp_prefix_entry_lookup(struct list *entries, struct eigrp_neighbor *neigh);
|
||||
extern struct eigrp_route_descriptor *
|
||||
eigrp_route_descriptor_lookup(struct list *entries,
|
||||
struct eigrp_neighbor *neigh);
|
||||
extern struct list *eigrp_neighbor_prefixes_lookup(struct eigrp *eigrp,
|
||||
struct eigrp_neighbor *n);
|
||||
extern void eigrp_topology_update_all_node_flags(struct eigrp *eigrp);
|
||||
extern void eigrp_topology_update_node_flags(struct eigrp *eigrp,
|
||||
struct eigrp_prefix_entry *pe);
|
||||
extern void
|
||||
eigrp_topology_update_node_flags(struct eigrp *eigrp,
|
||||
struct eigrp_prefix_descriptor *pe);
|
||||
extern enum metric_change
|
||||
eigrp_topology_update_distance(struct eigrp_fsm_action_message *msg);
|
||||
extern void eigrp_update_routing_table(struct eigrp *eigrp,
|
||||
struct eigrp_prefix_entry *pe);
|
||||
struct eigrp_prefix_descriptor *pe);
|
||||
extern void eigrp_topology_neighbor_down(struct eigrp *eigrp,
|
||||
struct eigrp_neighbor *neigh);
|
||||
extern void eigrp_update_topology_table_prefix(struct eigrp *eigrp,
|
||||
struct route_table *table,
|
||||
struct eigrp_prefix_entry *pe);
|
||||
extern void
|
||||
eigrp_update_topology_table_prefix(struct eigrp *eigrp,
|
||||
struct route_table *table,
|
||||
struct eigrp_prefix_descriptor *pe);
|
||||
|
||||
#endif
|
||||
|
@ -101,11 +101,12 @@ bool eigrp_update_prefix_apply(struct eigrp *eigrp, struct eigrp_interface *ei,
|
||||
* Function is used for removing received prefix
|
||||
* from list of neighbor prefixes
|
||||
*/
|
||||
static void remove_received_prefix_gr(struct list *nbr_prefixes,
|
||||
struct eigrp_prefix_entry *recv_prefix)
|
||||
static void
|
||||
remove_received_prefix_gr(struct list *nbr_prefixes,
|
||||
struct eigrp_prefix_descriptor *recv_prefix)
|
||||
{
|
||||
struct listnode *node1, *node11;
|
||||
struct eigrp_prefix_entry *prefix = NULL;
|
||||
struct eigrp_prefix_descriptor *prefix = NULL;
|
||||
|
||||
/* iterate over all prefixes in list */
|
||||
for (ALL_LIST_ELEMENTS(nbr_prefixes, node1, node11, prefix)) {
|
||||
@ -136,7 +137,7 @@ static void eigrp_update_receive_GR_ask(struct eigrp *eigrp,
|
||||
struct list *nbr_prefixes)
|
||||
{
|
||||
struct listnode *node1;
|
||||
struct eigrp_prefix_entry *prefix;
|
||||
struct eigrp_prefix_descriptor *prefix;
|
||||
struct eigrp_fsm_action_message fsm_msg;
|
||||
|
||||
/* iterate over all prefixes which weren't advertised by neighbor */
|
||||
@ -148,8 +149,8 @@ static void eigrp_update_receive_GR_ask(struct eigrp *eigrp,
|
||||
/* set delay to MAX */
|
||||
fsm_msg.metrics.delay = EIGRP_MAX_METRIC;
|
||||
|
||||
struct eigrp_nexthop_entry *entry =
|
||||
eigrp_prefix_entry_lookup(prefix->entries, nbr);
|
||||
struct eigrp_route_descriptor *entry =
|
||||
eigrp_route_descriptor_lookup(prefix->entries, nbr);
|
||||
|
||||
fsm_msg.packet_type = EIGRP_OPC_UPDATE;
|
||||
fsm_msg.eigrp = eigrp;
|
||||
@ -172,8 +173,8 @@ void eigrp_update_receive(struct eigrp *eigrp, struct ip *iph,
|
||||
{
|
||||
struct eigrp_neighbor *nbr;
|
||||
struct TLV_IPv4_Internal_type *tlv;
|
||||
struct eigrp_prefix_entry *pe;
|
||||
struct eigrp_nexthop_entry *ne;
|
||||
struct eigrp_prefix_descriptor *pe;
|
||||
struct eigrp_route_descriptor *ne;
|
||||
uint32_t flags;
|
||||
uint16_t type;
|
||||
uint16_t length;
|
||||
@ -304,7 +305,7 @@ void eigrp_update_receive(struct eigrp *eigrp, struct ip *iph,
|
||||
dest_addr.family = AF_INET;
|
||||
dest_addr.u.prefix4 = tlv->destination;
|
||||
dest_addr.prefixlen = tlv->prefix_length;
|
||||
struct eigrp_prefix_entry *dest =
|
||||
struct eigrp_prefix_descriptor *dest =
|
||||
eigrp_topology_table_lookup_ipv4(
|
||||
eigrp->topology_table, &dest_addr);
|
||||
|
||||
@ -317,9 +318,9 @@ void eigrp_update_receive(struct eigrp *eigrp, struct ip *iph,
|
||||
dest);
|
||||
|
||||
struct eigrp_fsm_action_message msg;
|
||||
struct eigrp_nexthop_entry *entry =
|
||||
eigrp_prefix_entry_lookup(dest->entries,
|
||||
nbr);
|
||||
struct eigrp_route_descriptor *entry =
|
||||
eigrp_route_descriptor_lookup(
|
||||
dest->entries, nbr);
|
||||
|
||||
msg.packet_type = EIGRP_OPC_UPDATE;
|
||||
msg.eigrp = eigrp;
|
||||
@ -331,7 +332,7 @@ void eigrp_update_receive(struct eigrp *eigrp, struct ip *iph,
|
||||
eigrp_fsm_event(&msg);
|
||||
} else {
|
||||
/*Here comes topology information save*/
|
||||
pe = eigrp_prefix_entry_new();
|
||||
pe = eigrp_prefix_descriptor_new();
|
||||
pe->serno = eigrp->serno;
|
||||
pe->destination =
|
||||
(struct prefix *)prefix_ipv4_new();
|
||||
@ -340,7 +341,7 @@ void eigrp_update_receive(struct eigrp *eigrp, struct ip *iph,
|
||||
pe->state = EIGRP_FSM_STATE_PASSIVE;
|
||||
pe->nt = EIGRP_TOPOLOGY_TYPE_REMOTE;
|
||||
|
||||
ne = eigrp_nexthop_entry_new();
|
||||
ne = eigrp_route_descriptor_new();
|
||||
ne->ei = ei;
|
||||
ne->adv_router = nbr;
|
||||
ne->reported_metric = tlv->metric;
|
||||
@ -361,11 +362,12 @@ void eigrp_update_receive(struct eigrp *eigrp, struct ip *iph,
|
||||
pe->fdistance = pe->distance = pe->rdistance =
|
||||
ne->distance;
|
||||
ne->prefix = pe;
|
||||
ne->flags = EIGRP_NEXTHOP_ENTRY_SUCCESSOR_FLAG;
|
||||
ne->flags =
|
||||
EIGRP_ROUTE_DESCRIPTOR_SUCCESSOR_FLAG;
|
||||
|
||||
eigrp_prefix_entry_add(eigrp->topology_table,
|
||||
pe);
|
||||
eigrp_nexthop_entry_add(eigrp, pe, ne);
|
||||
eigrp_prefix_descriptor_add(
|
||||
eigrp->topology_table, pe);
|
||||
eigrp_route_descriptor_add(eigrp, pe, ne);
|
||||
pe->distance = pe->fdistance = pe->rdistance =
|
||||
ne->distance;
|
||||
pe->reported_metric = ne->total_metric;
|
||||
@ -527,8 +529,8 @@ void eigrp_update_send_EOT(struct eigrp_neighbor *nbr)
|
||||
{
|
||||
struct eigrp_packet *ep;
|
||||
uint16_t length = EIGRP_HEADER_LEN;
|
||||
struct eigrp_nexthop_entry *te;
|
||||
struct eigrp_prefix_entry *pe;
|
||||
struct eigrp_route_descriptor *te;
|
||||
struct eigrp_prefix_descriptor *pe;
|
||||
struct listnode *node2, *nnode2;
|
||||
struct eigrp_interface *ei = nbr->ei;
|
||||
struct eigrp *eigrp = ei->eigrp;
|
||||
@ -600,7 +602,7 @@ void eigrp_update_send(struct eigrp_interface *ei)
|
||||
{
|
||||
struct eigrp_packet *ep;
|
||||
struct listnode *node, *nnode;
|
||||
struct eigrp_prefix_entry *pe;
|
||||
struct eigrp_prefix_descriptor *pe;
|
||||
uint8_t has_tlv;
|
||||
struct eigrp *eigrp = ei->eigrp;
|
||||
struct prefix *dest_addr;
|
||||
@ -626,7 +628,7 @@ void eigrp_update_send(struct eigrp_interface *ei)
|
||||
has_tlv = 0;
|
||||
for (ALL_LIST_ELEMENTS(ei->eigrp->topology_changes_internalIPV4, node,
|
||||
nnode, pe)) {
|
||||
struct eigrp_nexthop_entry *ne;
|
||||
struct eigrp_route_descriptor *ne;
|
||||
|
||||
if (!(pe->req_action & EIGRP_FSM_NEED_UPDATE))
|
||||
continue;
|
||||
@ -707,7 +709,7 @@ void eigrp_update_send_all(struct eigrp *eigrp,
|
||||
{
|
||||
struct eigrp_interface *iface;
|
||||
struct listnode *node, *node2, *nnode2;
|
||||
struct eigrp_prefix_entry *pe;
|
||||
struct eigrp_prefix_descriptor *pe;
|
||||
|
||||
for (ALL_LIST_ELEMENTS_RO(eigrp->eiflist, node, iface)) {
|
||||
if (iface != exception) {
|
||||
@ -745,7 +747,7 @@ static void eigrp_update_send_GR_part(struct eigrp_neighbor *nbr)
|
||||
{
|
||||
struct eigrp_packet *ep;
|
||||
uint16_t length = EIGRP_HEADER_LEN;
|
||||
struct eigrp_prefix_entry *pe;
|
||||
struct eigrp_prefix_descriptor *pe;
|
||||
struct prefix *dest_addr;
|
||||
struct eigrp_interface *ei = nbr->ei;
|
||||
struct eigrp *eigrp = ei->eigrp;
|
||||
@ -837,8 +839,8 @@ static void eigrp_update_send_GR_part(struct eigrp_neighbor *nbr)
|
||||
/* prepare message for FSM */
|
||||
struct eigrp_fsm_action_message fsm_msg;
|
||||
|
||||
struct eigrp_nexthop_entry *entry =
|
||||
eigrp_prefix_entry_lookup(pe->entries, nbr);
|
||||
struct eigrp_route_descriptor *entry =
|
||||
eigrp_route_descriptor_lookup(pe->entries, nbr);
|
||||
|
||||
fsm_msg.packet_type = EIGRP_OPC_UPDATE;
|
||||
fsm_msg.eigrp = eigrp;
|
||||
@ -956,7 +958,7 @@ int eigrp_update_send_GR_thread(struct thread *thread)
|
||||
void eigrp_update_send_GR(struct eigrp_neighbor *nbr, enum GR_type gr_type,
|
||||
struct vty *vty)
|
||||
{
|
||||
struct eigrp_prefix_entry *pe2;
|
||||
struct eigrp_prefix_descriptor *pe2;
|
||||
struct list *prefixes;
|
||||
struct route_node *rn;
|
||||
struct eigrp_interface *ei = nbr->ei;
|
||||
|
@ -59,25 +59,21 @@
|
||||
#include "eigrpd/eigrp_vty_clippy.c"
|
||||
#endif
|
||||
|
||||
static void eigrp_vty_display_prefix_entry(struct vty *vty,
|
||||
struct eigrp *eigrp,
|
||||
struct eigrp_prefix_entry *pe,
|
||||
static void eigrp_vty_display_prefix_entry(struct vty *vty, struct eigrp *eigrp,
|
||||
struct eigrp_prefix_descriptor *pe,
|
||||
bool all)
|
||||
{
|
||||
bool first = true;
|
||||
struct eigrp_nexthop_entry *te;
|
||||
struct eigrp_route_descriptor *te;
|
||||
struct listnode *node;
|
||||
|
||||
for (ALL_LIST_ELEMENTS_RO(pe->entries, node, te)) {
|
||||
if (all
|
||||
|| (((te->flags
|
||||
& EIGRP_NEXTHOP_ENTRY_SUCCESSOR_FLAG)
|
||||
== EIGRP_NEXTHOP_ENTRY_SUCCESSOR_FLAG)
|
||||
|| ((te->flags
|
||||
& EIGRP_NEXTHOP_ENTRY_FSUCCESSOR_FLAG)
|
||||
== EIGRP_NEXTHOP_ENTRY_FSUCCESSOR_FLAG))) {
|
||||
show_ip_eigrp_nexthop_entry(vty, eigrp, te,
|
||||
&first);
|
||||
|| (((te->flags & EIGRP_ROUTE_DESCRIPTOR_SUCCESSOR_FLAG)
|
||||
== EIGRP_ROUTE_DESCRIPTOR_SUCCESSOR_FLAG)
|
||||
|| ((te->flags & EIGRP_ROUTE_DESCRIPTOR_FSUCCESSOR_FLAG)
|
||||
== EIGRP_ROUTE_DESCRIPTOR_FSUCCESSOR_FLAG))) {
|
||||
show_ip_eigrp_route_descriptor(vty, eigrp, te, &first);
|
||||
first = false;
|
||||
}
|
||||
}
|
||||
@ -104,7 +100,7 @@ static struct eigrp *eigrp_vty_get_eigrp(struct vty *vty, const char *vrf_name)
|
||||
static void eigrp_topology_helper(struct vty *vty, struct eigrp *eigrp,
|
||||
const char *all)
|
||||
{
|
||||
struct eigrp_prefix_entry *tn;
|
||||
struct eigrp_prefix_descriptor *tn;
|
||||
struct route_node *rn;
|
||||
|
||||
show_ip_eigrp_topology_header(vty, eigrp);
|
||||
@ -168,7 +164,7 @@ DEFPY (show_ip_eigrp_topology,
|
||||
"For a specific prefix\n")
|
||||
{
|
||||
struct eigrp *eigrp;
|
||||
struct eigrp_prefix_entry *tn;
|
||||
struct eigrp_prefix_descriptor *tn;
|
||||
struct route_node *rn;
|
||||
struct prefix cmp;
|
||||
|
||||
|
@ -194,7 +194,7 @@ void eigrp_zebra_route_add(struct eigrp *eigrp, struct prefix *p,
|
||||
{
|
||||
struct zapi_route api;
|
||||
struct zapi_nexthop *api_nh;
|
||||
struct eigrp_nexthop_entry *te;
|
||||
struct eigrp_route_descriptor *te;
|
||||
struct listnode *node;
|
||||
int count = 0;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user