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:
Donnie Savage 2020-12-11 16:09:47 -05:00 committed by Donald Sharp
parent fb532db3f0
commit dc4accdd53
24 changed files with 253 additions and 226 deletions

View File

@ -122,10 +122,10 @@ enum metric_change { METRIC_DECREASE, METRIC_SAME, METRIC_INCREASE };
#define EIGRP_TOPOLOGY_TYPE_REMOTE_EXTERNAL 2 // Remote external network #define EIGRP_TOPOLOGY_TYPE_REMOTE_EXTERNAL 2 // Remote external network
/*EIGRP TT entry flags*/ /*EIGRP TT entry flags*/
#define EIGRP_NEXTHOP_ENTRY_SUCCESSOR_FLAG (1 << 0) #define EIGRP_ROUTE_DESCRIPTOR_SUCCESSOR_FLAG (1 << 0)
#define EIGRP_NEXTHOP_ENTRY_FSUCCESSOR_FLAG (1 << 1) #define EIGRP_ROUTE_DESCRIPTOR_FSUCCESSOR_FLAG (1 << 1)
#define EIGRP_NEXTHOP_ENTRY_INTABLE_FLAG (1 << 2) #define EIGRP_ROUTE_DESCRIPTOR_INTABLE_FLAG (1 << 2)
#define EIGRP_NEXTHOP_ENTRY_EXTERNAL_FLAG (1 << 3) #define EIGRP_ROUTE_DESCRIPTOR_EXTERNAL_FLAG (1 << 3)
/*EIGRP FSM state count, event count*/ /*EIGRP FSM state count, event count*/
#define EIGRP_FSM_STATE_MAX 5 #define EIGRP_FSM_STATE_MAX 5

View File

@ -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"); "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); 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); list_delete(&successors);
} }
void show_ip_eigrp_nexthop_entry(struct vty *vty, struct eigrp *eigrp, void show_ip_eigrp_route_descriptor(struct vty *vty, struct eigrp *eigrp,
struct eigrp_nexthop_entry *te, bool *first) struct eigrp_route_descriptor *te,
bool *first)
{ {
if (te->reported_distance == EIGRP_MAX_METRIC) if (te->reported_distance == EIGRP_MAX_METRIC)
return; return;
if (*first) { if (*first) {
show_ip_eigrp_prefix_entry(vty, te->prefix); show_ip_eigrp_prefix_descriptor(vty, te->prefix);
*first = false; *first = false;
} }

View File

@ -151,11 +151,11 @@ extern void show_ip_eigrp_interface_sub(struct vty *, struct eigrp *,
struct eigrp_interface *); struct eigrp_interface *);
extern void show_ip_eigrp_neighbor_sub(struct vty *, struct eigrp_neighbor *, extern void show_ip_eigrp_neighbor_sub(struct vty *, struct eigrp_neighbor *,
int); int);
extern void show_ip_eigrp_prefix_entry(struct vty *, extern void show_ip_eigrp_prefix_descriptor(struct vty *vty,
struct eigrp_prefix_entry *); struct eigrp_prefix_descriptor *tn);
extern void show_ip_eigrp_nexthop_entry(struct vty *vty, struct eigrp *eigrp, extern void show_ip_eigrp_route_descriptor(struct vty *vty, struct eigrp *eigrp,
struct eigrp_nexthop_entry *ne, struct eigrp_route_descriptor *ne,
bool *first); bool *first);
extern void eigrp_debug_init(void); extern void eigrp_debug_init(void);

View File

@ -262,13 +262,13 @@ eigrp_get_fsm_event(struct eigrp_fsm_action_message *msg)
{ {
// Loading base information from message // Loading base information from message
// struct eigrp *eigrp = msg->eigrp; // struct eigrp *eigrp = msg->eigrp;
struct eigrp_prefix_entry *prefix = msg->prefix; struct eigrp_prefix_descriptor *prefix = msg->prefix;
struct eigrp_nexthop_entry *entry = msg->entry; struct eigrp_route_descriptor *entry = msg->entry;
uint8_t actual_state = prefix->state; uint8_t actual_state = prefix->state;
enum metric_change change; enum metric_change change;
if (entry == NULL) { if (entry == NULL) {
entry = eigrp_nexthop_entry_new(); entry = eigrp_route_descriptor_new();
entry->adv_router = msg->adv_router; entry->adv_router = msg->adv_router;
entry->ei = msg->adv_router->ei; entry->ei = msg->adv_router->ei;
entry->prefix = prefix; entry->prefix = prefix;
@ -286,7 +286,7 @@ eigrp_get_fsm_event(struct eigrp_fsm_action_message *msg)
switch (actual_state) { switch (actual_state) {
case EIGRP_FSM_STATE_PASSIVE: { case EIGRP_FSM_STATE_PASSIVE: {
struct eigrp_nexthop_entry *head = struct eigrp_route_descriptor *head =
listnode_head(prefix->entries); listnode_head(prefix->entries);
if (head->reported_distance < prefix->fdistance) { 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: { case EIGRP_FSM_STATE_ACTIVE_0: {
if (msg->packet_type == EIGRP_OPC_REPLY) { if (msg->packet_type == EIGRP_OPC_REPLY) {
struct eigrp_nexthop_entry *head = struct eigrp_route_descriptor *head =
listnode_head(prefix->entries); listnode_head(prefix->entries);
listnode_delete(prefix->rij, entry->adv_router); 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; return EIGRP_FSM_EVENT_LR_FCN;
} else if (msg->packet_type == EIGRP_OPC_QUERY } else if (msg->packet_type == EIGRP_OPC_QUERY
&& (entry->flags && (entry->flags
& EIGRP_NEXTHOP_ENTRY_SUCCESSOR_FLAG)) { & EIGRP_ROUTE_DESCRIPTOR_SUCCESSOR_FLAG)) {
return EIGRP_FSM_EVENT_QACT; 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: { case EIGRP_FSM_STATE_ACTIVE_1: {
if (msg->packet_type == EIGRP_OPC_QUERY 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; return EIGRP_FSM_EVENT_QACT;
} else if (msg->packet_type == EIGRP_OPC_REPLY) { } else if (msg->packet_type == EIGRP_OPC_REPLY) {
listnode_delete(prefix->rij, entry->adv_router); listnode_delete(prefix->rij, entry->adv_router);
if (change == METRIC_INCREASE if (change == METRIC_INCREASE
&& (entry->flags && (entry->flags
& EIGRP_NEXTHOP_ENTRY_SUCCESSOR_FLAG)) { & EIGRP_ROUTE_DESCRIPTOR_SUCCESSOR_FLAG)) {
return EIGRP_FSM_EVENT_DINC; return EIGRP_FSM_EVENT_DINC;
} else if (prefix->rij->count) { } else if (prefix->rij->count) {
return EIGRP_FSM_KEEP_STATE; 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 } else if (msg->packet_type == EIGRP_OPC_UPDATE
&& change == METRIC_INCREASE && change == METRIC_INCREASE
&& (entry->flags && (entry->flags
& EIGRP_NEXTHOP_ENTRY_SUCCESSOR_FLAG)) { & EIGRP_ROUTE_DESCRIPTOR_SUCCESSOR_FLAG)) {
return EIGRP_FSM_EVENT_DINC; return EIGRP_FSM_EVENT_DINC;
} }
return EIGRP_FSM_KEEP_STATE; 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: { case EIGRP_FSM_STATE_ACTIVE_2: {
if (msg->packet_type == EIGRP_OPC_REPLY) { if (msg->packet_type == EIGRP_OPC_REPLY) {
struct eigrp_nexthop_entry *head = struct eigrp_route_descriptor *head =
listnode_head(prefix->entries); listnode_head(prefix->entries);
listnode_delete(prefix->rij, entry->adv_router); 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 if (change == METRIC_INCREASE
&& (entry->flags && (entry->flags
& EIGRP_NEXTHOP_ENTRY_SUCCESSOR_FLAG)) { & EIGRP_ROUTE_DESCRIPTOR_SUCCESSOR_FLAG)) {
return EIGRP_FSM_EVENT_DINC; return EIGRP_FSM_EVENT_DINC;
} else if (prefix->rij->count) { } else if (prefix->rij->count) {
return EIGRP_FSM_KEEP_STATE; 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 } else if (msg->packet_type == EIGRP_OPC_UPDATE
&& change == METRIC_INCREASE && change == METRIC_INCREASE
&& (entry->flags && (entry->flags
& EIGRP_NEXTHOP_ENTRY_SUCCESSOR_FLAG)) { & EIGRP_ROUTE_DESCRIPTOR_SUCCESSOR_FLAG)) {
return EIGRP_FSM_EVENT_DINC; return EIGRP_FSM_EVENT_DINC;
} }
return EIGRP_FSM_KEEP_STATE; 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) int eigrp_fsm_event_nq_fcn(struct eigrp_fsm_action_message *msg)
{ {
struct eigrp *eigrp = msg->eigrp; 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 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? 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) int eigrp_fsm_event_q_fcn(struct eigrp_fsm_action_message *msg)
{ {
struct eigrp *eigrp = msg->eigrp; 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 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. 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) int eigrp_fsm_event_keep_state(struct eigrp_fsm_action_message *msg)
{ {
struct eigrp *eigrp = msg->eigrp; struct eigrp *eigrp = msg->eigrp;
struct eigrp_prefix_entry *prefix = msg->prefix; struct eigrp_prefix_descriptor *prefix = msg->prefix;
struct eigrp_nexthop_entry *ne = listnode_head(prefix->entries); struct eigrp_route_descriptor *ne = listnode_head(prefix->entries);
if (prefix->state == EIGRP_FSM_STATE_PASSIVE) { if (prefix->state == EIGRP_FSM_STATE_PASSIVE) {
if (!eigrp_metrics_is_same(prefix->reported_metric, 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) int eigrp_fsm_event_lr(struct eigrp_fsm_action_message *msg)
{ {
struct eigrp *eigrp = msg->eigrp; struct eigrp *eigrp = msg->eigrp;
struct eigrp_prefix_entry *prefix = msg->prefix; struct eigrp_prefix_descriptor *prefix = msg->prefix;
struct eigrp_nexthop_entry *ne = listnode_head(prefix->entries); struct eigrp_route_descriptor *ne = listnode_head(prefix->entries);
prefix->fdistance = prefix->distance = prefix->rdistance = ne->distance; prefix->fdistance = prefix->distance = prefix->rdistance = ne->distance;
prefix->reported_metric = ne->total_metric; 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) int eigrp_fsm_event_dinc(struct eigrp_fsm_action_message *msg)
{ {
struct list *successors = eigrp_topology_get_successor(msg->prefix); 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 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) int eigrp_fsm_event_lr_fcs(struct eigrp_fsm_action_message *msg)
{ {
struct eigrp *eigrp = msg->eigrp; struct eigrp *eigrp = msg->eigrp;
struct eigrp_prefix_entry *prefix = msg->prefix; struct eigrp_prefix_descriptor *prefix = msg->prefix;
struct eigrp_nexthop_entry *ne = listnode_head(prefix->entries); struct eigrp_route_descriptor *ne = listnode_head(prefix->entries);
prefix->state = EIGRP_FSM_STATE_PASSIVE; prefix->state = EIGRP_FSM_STATE_PASSIVE;
prefix->distance = prefix->rdistance = ne->distance; 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) int eigrp_fsm_event_lr_fcn(struct eigrp_fsm_action_message *msg)
{ {
struct eigrp *eigrp = msg->eigrp; struct eigrp *eigrp = msg->eigrp;
struct eigrp_prefix_entry *prefix = msg->prefix; struct eigrp_prefix_descriptor *prefix = msg->prefix;
struct eigrp_nexthop_entry *best_successor; struct eigrp_route_descriptor *best_successor;
struct list *successors = eigrp_topology_get_successor(prefix); struct list *successors = eigrp_topology_get_successor(prefix);
assert(successors); // Routing without a stack 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) int eigrp_fsm_event_qact(struct eigrp_fsm_action_message *msg)
{ {
struct list *successors = eigrp_topology_get_successor(msg->prefix); 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 assert(successors); // Cats and no Dogs

View File

@ -229,8 +229,8 @@ void eigrp_del_if_params(struct eigrp_if_params *eip)
int eigrp_if_up(struct eigrp_interface *ei) int eigrp_if_up(struct eigrp_interface *ei)
{ {
struct eigrp_prefix_entry *pe; struct eigrp_prefix_descriptor *pe;
struct eigrp_nexthop_entry *ne; struct eigrp_route_descriptor *ne;
struct eigrp_metrics metric; struct eigrp_metrics metric;
struct eigrp_interface *ei2; struct eigrp_interface *ei2;
struct listnode *node, *nnode; struct listnode *node, *nnode;
@ -263,14 +263,14 @@ int eigrp_if_up(struct eigrp_interface *ei)
/*Add connected entry to topology table*/ /*Add connected entry to topology table*/
ne = eigrp_nexthop_entry_new(); ne = eigrp_route_descriptor_new();
ne->ei = ei; ne->ei = ei;
ne->reported_metric = metric; ne->reported_metric = metric;
ne->total_metric = metric; ne->total_metric = metric;
ne->distance = eigrp_calculate_metrics(eigrp, metric); ne->distance = eigrp_calculate_metrics(eigrp, metric);
ne->reported_distance = 0; ne->reported_distance = 0;
ne->adv_router = eigrp->neighbor_self; ne->adv_router = eigrp->neighbor_self;
ne->flags = EIGRP_NEXTHOP_ENTRY_SUCCESSOR_FLAG; ne->flags = EIGRP_ROUTE_DESCRIPTOR_SUCCESSOR_FLAG;
struct prefix dest_addr; struct prefix dest_addr;
@ -280,7 +280,7 @@ int eigrp_if_up(struct eigrp_interface *ei)
&dest_addr); &dest_addr);
if (pe == NULL) { if (pe == NULL) {
pe = eigrp_prefix_entry_new(); pe = eigrp_prefix_descriptor_new();
pe->serno = eigrp->serno; pe->serno = eigrp->serno;
pe->destination = (struct prefix *)prefix_ipv4_new(); pe->destination = (struct prefix *)prefix_ipv4_new();
prefix_copy(pe->destination, &dest_addr); 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->state = EIGRP_FSM_STATE_PASSIVE;
pe->fdistance = eigrp_calculate_metrics(eigrp, metric); pe->fdistance = eigrp_calculate_metrics(eigrp, metric);
pe->req_action |= EIGRP_FSM_NEED_UPDATE; 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); 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)) { for (ALL_LIST_ELEMENTS(eigrp->eiflist, node, nnode, ei2)) {
eigrp_update_send(ei2); eigrp_update_send(ei2);
@ -307,7 +307,7 @@ int eigrp_if_up(struct eigrp_interface *ei)
struct eigrp_fsm_action_message msg; struct eigrp_fsm_action_message msg;
ne->prefix = pe; ne->prefix = pe;
eigrp_nexthop_entry_add(eigrp, pe, ne); eigrp_route_descriptor_add(eigrp, pe, ne);
msg.packet_type = EIGRP_OPC_UPDATE; msg.packet_type = EIGRP_OPC_UPDATE;
msg.eigrp = eigrp; 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) void eigrp_if_free(struct eigrp_interface *ei, int source)
{ {
struct prefix dest_addr; struct prefix dest_addr;
struct eigrp_prefix_entry *pe; struct eigrp_prefix_descriptor *pe;
struct eigrp *eigrp = ei->eigrp; struct eigrp *eigrp = ei->eigrp;
if (source == INTERFACE_DOWN_BY_VTY) { 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, pe = eigrp_topology_table_lookup_ipv4(eigrp->topology_table,
&dest_addr); &dest_addr);
if (pe) if (pe)
eigrp_prefix_entry_delete(eigrp, eigrp->topology_table, pe); eigrp_prefix_descriptor_delete(eigrp, eigrp->topology_table,
pe);
eigrp_if_down(ei); eigrp_if_down(ei);

View File

@ -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_SEQ_TLV, "EIGRP SEQ TLV")
DEFINE_MTYPE(EIGRPD, EIGRP_AUTH_TLV, "EIGRP AUTH TLV") DEFINE_MTYPE(EIGRPD, EIGRP_AUTH_TLV, "EIGRP AUTH TLV")
DEFINE_MTYPE(EIGRPD, EIGRP_AUTH_SHA256_TLV, "EIGRP SHA TLV") DEFINE_MTYPE(EIGRPD, EIGRP_AUTH_SHA256_TLV, "EIGRP SHA TLV")
DEFINE_MTYPE(EIGRPD, EIGRP_PREFIX_ENTRY, "EIGRP Prefix") DEFINE_MTYPE(EIGRPD, EIGRP_PREFIX_DESCRIPTOR, "EIGRP Prefix")
DEFINE_MTYPE(EIGRPD, EIGRP_NEXTHOP_ENTRY, "EIGRP Nexthop Entry") DEFINE_MTYPE(EIGRPD, EIGRP_ROUTE_DESCRIPTOR, "EIGRP Nexthop Entry")
DEFINE_MTYPE(EIGRPD, EIGRP_FSM_MSG, "EIGRP FSM Message") DEFINE_MTYPE(EIGRPD, EIGRP_FSM_MSG, "EIGRP FSM Message")

View File

@ -36,8 +36,8 @@ DECLARE_MTYPE(EIGRP_IPV4_INT_TLV)
DECLARE_MTYPE(EIGRP_SEQ_TLV) DECLARE_MTYPE(EIGRP_SEQ_TLV)
DECLARE_MTYPE(EIGRP_AUTH_TLV) DECLARE_MTYPE(EIGRP_AUTH_TLV)
DECLARE_MTYPE(EIGRP_AUTH_SHA256_TLV) DECLARE_MTYPE(EIGRP_AUTH_SHA256_TLV)
DECLARE_MTYPE(EIGRP_PREFIX_ENTRY) DECLARE_MTYPE(EIGRP_PREFIX_DESCRIPTOR)
DECLARE_MTYPE(EIGRP_NEXTHOP_ENTRY) DECLARE_MTYPE(EIGRP_ROUTE_DESCRIPTOR)
DECLARE_MTYPE(EIGRP_FSM_MSG) DECLARE_MTYPE(EIGRP_FSM_MSG)
#endif /* _FRR_EIGRP_MEMORY_H */ #endif /* _FRR_EIGRP_MEMORY_H */

View File

@ -343,7 +343,7 @@ void eigrp_nbr_hard_restart(struct eigrp_neighbor *nbr, struct vty *vty)
eigrp_nbr_delete(nbr); 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) struct eigrp_interface *ei)
{ {
if (ne->distance == EIGRP_MAX_METRIC) if (ne->distance == EIGRP_MAX_METRIC)

View File

@ -54,6 +54,6 @@ extern struct eigrp_neighbor *
eigrp_nbr_lookup_by_addr_process(struct eigrp *eigrp, struct in_addr addr); 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 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); struct eigrp_interface *ei);
#endif /* _ZEBRA_EIGRP_NEIGHBOR_H */ #endif /* _ZEBRA_EIGRP_NEIGHBOR_H */

View File

@ -380,7 +380,7 @@ uint32_t eigrp_calculate_metrics(struct eigrp *eigrp,
} }
uint32_t eigrp_calculate_total_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; struct eigrp_interface *ei = entry->ei;

View File

@ -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_metrics(struct eigrp *, struct eigrp_metrics);
extern uint32_t eigrp_calculate_total_metrics(struct eigrp *, 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, extern uint8_t eigrp_metrics_is_same(struct eigrp_metrics,
struct eigrp_metrics); struct eigrp_metrics);
extern void eigrp_external_routes_refresh(struct eigrp *, int); extern void eigrp_external_routes_refresh(struct eigrp *, int);

View File

@ -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, uint16_t eigrp_add_internalTLV_to_stream(struct stream *s,
struct eigrp_prefix_entry *pe) struct eigrp_prefix_descriptor *pe)
{ {
uint16_t length; uint16_t length;

View File

@ -56,8 +56,9 @@ extern void eigrp_fifo_reset(struct eigrp_fifo *);
extern void eigrp_send_packet_reliably(struct eigrp_neighbor *); extern void eigrp_send_packet_reliably(struct eigrp_neighbor *);
extern struct TLV_IPv4_Internal_type *eigrp_read_ipv4_tlv(struct stream *); extern struct TLV_IPv4_Internal_type *eigrp_read_ipv4_tlv(struct stream *);
extern uint16_t eigrp_add_internalTLV_to_stream(struct stream *, extern uint16_t
struct eigrp_prefix_entry *); eigrp_add_internalTLV_to_stream(struct stream *s,
struct eigrp_prefix_descriptor *pe);
extern uint16_t eigrp_add_authTLV_MD5_to_stream(struct stream *, extern uint16_t eigrp_add_authTLV_MD5_to_stream(struct stream *,
struct eigrp_interface *); struct eigrp_interface *);
extern uint16_t eigrp_add_authTLV_SHA256_to_stream(struct stream *, 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 * These externs are found in eigrp_reply.c
*/ */
extern void eigrp_send_reply(struct eigrp_neighbor *, extern void eigrp_send_reply(struct eigrp_neighbor *neigh,
struct eigrp_prefix_entry *); struct eigrp_prefix_descriptor *pe);
extern void eigrp_reply_receive(struct eigrp *, struct ip *, extern void eigrp_reply_receive(struct eigrp *, struct ip *,
struct eigrp_header *, struct stream *, struct eigrp_header *, struct stream *,
struct eigrp_interface *, int); 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 * These externs are found in eigrp_siaquery.c
*/ */
extern void eigrp_send_siaquery(struct eigrp_neighbor *, extern void eigrp_send_siaquery(struct eigrp_neighbor *neigh,
struct eigrp_prefix_entry *); struct eigrp_prefix_descriptor *pe);
extern void eigrp_siaquery_receive(struct eigrp *, struct ip *, extern void eigrp_siaquery_receive(struct eigrp *, struct ip *,
struct eigrp_header *, struct stream *, struct eigrp_header *, struct stream *,
struct eigrp_interface *, int); 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 * These externs are found in eigrp_siareply.c
*/ */
extern void eigrp_send_siareply(struct eigrp_neighbor *, extern void eigrp_send_siareply(struct eigrp_neighbor *neigh,
struct eigrp_prefix_entry *); struct eigrp_prefix_descriptor *pe);
extern void eigrp_siareply_receive(struct eigrp *, struct ip *, extern void eigrp_siareply_receive(struct eigrp *, struct ip *,
struct eigrp_header *, struct stream *, struct eigrp_header *, struct stream *,
struct eigrp_interface *, int); struct eigrp_interface *, int);

View File

@ -58,7 +58,7 @@ uint32_t eigrp_query_send_all(struct eigrp *eigrp)
{ {
struct eigrp_interface *iface; struct eigrp_interface *iface;
struct listnode *node, *node2, *nnode2; struct listnode *node, *node2, *nnode2;
struct eigrp_prefix_entry *pe; struct eigrp_prefix_descriptor *pe;
uint32_t counter; uint32_t counter;
if (eigrp == NULL) { if (eigrp == NULL) {
@ -118,7 +118,7 @@ void eigrp_query_receive(struct eigrp *eigrp, struct ip *iph,
dest_addr.family = AF_INET; dest_addr.family = AF_INET;
dest_addr.u.prefix4 = tlv->destination; dest_addr.u.prefix4 = tlv->destination;
dest_addr.prefixlen = tlv->prefix_length; dest_addr.prefixlen = tlv->prefix_length;
struct eigrp_prefix_entry *dest = struct eigrp_prefix_descriptor *dest =
eigrp_topology_table_lookup_ipv4( eigrp_topology_table_lookup_ipv4(
eigrp->topology_table, &dest_addr); eigrp->topology_table, &dest_addr);
@ -126,9 +126,9 @@ void eigrp_query_receive(struct eigrp *eigrp, struct ip *iph,
* know)*/ * know)*/
if (dest != NULL) { if (dest != NULL) {
struct eigrp_fsm_action_message msg; struct eigrp_fsm_action_message msg;
struct eigrp_nexthop_entry *entry = struct eigrp_route_descriptor *entry =
eigrp_prefix_entry_lookup(dest->entries, eigrp_route_descriptor_lookup(
nbr); dest->entries, nbr);
msg.packet_type = EIGRP_OPC_QUERY; msg.packet_type = EIGRP_OPC_QUERY;
msg.eigrp = eigrp; msg.eigrp = eigrp;
msg.data_type = EIGRP_INT; msg.data_type = EIGRP_INT;
@ -164,7 +164,7 @@ void eigrp_send_query(struct eigrp_interface *ei)
uint16_t length = EIGRP_HEADER_LEN; uint16_t length = EIGRP_HEADER_LEN;
struct listnode *node, *nnode, *node2, *nnode2; struct listnode *node, *nnode, *node2, *nnode2;
struct eigrp_neighbor *nbr; struct eigrp_neighbor *nbr;
struct eigrp_prefix_entry *pe; struct eigrp_prefix_descriptor *pe;
bool has_tlv = false; bool has_tlv = false;
bool new_packet = true; bool new_packet = true;
uint16_t eigrp_mtu = EIGRP_PACKET_MTU(ei->ifp->mtu); uint16_t eigrp_mtu = EIGRP_PACKET_MTU(ei->ifp->mtu);

View File

@ -61,20 +61,21 @@
#include "eigrpd/eigrp_memory.h" #include "eigrpd/eigrp_memory.h"
#include "eigrpd/eigrp_errors.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; struct eigrp_packet *ep;
uint16_t length = EIGRP_HEADER_LEN; uint16_t length = EIGRP_HEADER_LEN;
struct eigrp_interface *ei = nbr->ei; struct eigrp_interface *ei = nbr->ei;
struct eigrp *eigrp = ei->eigrp; struct eigrp *eigrp = ei->eigrp;
struct eigrp_prefix_entry *pe2; struct eigrp_prefix_descriptor *pe2;
// TODO: Work in progress // TODO: Work in progress
/* Filtering */ /* Filtering */
/* get list from eigrp process */ /* get list from eigrp process */
pe2 = XCALLOC(MTYPE_EIGRP_PREFIX_ENTRY, pe2 = XCALLOC(MTYPE_EIGRP_PREFIX_DESCRIPTOR,
sizeof(struct eigrp_prefix_entry)); sizeof(struct eigrp_prefix_descriptor));
memcpy(pe2, pe, sizeof(struct eigrp_prefix_entry)); memcpy(pe2, pe, sizeof(struct eigrp_prefix_descriptor));
if (eigrp_update_prefix_apply(eigrp, ei, EIGRP_FILTER_OUT, if (eigrp_update_prefix_apply(eigrp, ei, EIGRP_FILTER_OUT,
pe2->destination)) { pe2->destination)) {
@ -122,7 +123,7 @@ void eigrp_send_reply(struct eigrp_neighbor *nbr, struct eigrp_prefix_entry *pe)
eigrp_send_packet_reliably(nbr); eigrp_send_packet_reliably(nbr);
} }
XFREE(MTYPE_EIGRP_PREFIX_ENTRY, pe2); XFREE(MTYPE_EIGRP_PREFIX_DESCRIPTOR, pe2);
} }
/*EIGRP REPLY read function*/ /*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.family = AF_INET;
dest_addr.u.prefix4 = tlv->destination; dest_addr.u.prefix4 = tlv->destination;
dest_addr.prefixlen = tlv->prefix_length; dest_addr.prefixlen = tlv->prefix_length;
struct eigrp_prefix_entry *dest = struct eigrp_prefix_descriptor *dest =
eigrp_topology_table_lookup_ipv4(eigrp->topology_table, eigrp_topology_table_lookup_ipv4(eigrp->topology_table,
&dest_addr); &dest_addr);
/* /*
@ -177,8 +178,8 @@ void eigrp_reply_receive(struct eigrp *eigrp, struct ip *iph,
} }
struct eigrp_fsm_action_message msg; struct eigrp_fsm_action_message msg;
struct eigrp_nexthop_entry *entry = struct eigrp_route_descriptor *entry =
eigrp_prefix_entry_lookup(dest->entries, nbr); eigrp_route_descriptor_lookup(dest->entries, nbr);
if (eigrp_update_prefix_apply(eigrp, ei, EIGRP_FILTER_IN, if (eigrp_update_prefix_apply(eigrp, ei, EIGRP_FILTER_IN,
&dest_addr)) { &dest_addr)) {

View File

@ -265,8 +265,8 @@ route_match_metric(void *rule, struct prefix *prefix, route_map_object_t type,
// uint32_t *metric; // uint32_t *metric;
// uint32_t check; // uint32_t check;
// struct rip_info *rinfo; // struct rip_info *rinfo;
// struct eigrp_nexthop_entry *te; // struct eigrp_route_descriptor *te;
// struct eigrp_prefix_entry *pe; // struct eigrp_prefix_descriptor *pe;
// struct listnode *node, *node2, *nnode, *nnode2; // struct listnode *node, *node2, *nnode, *nnode2;
// struct eigrp *e; // struct eigrp *e;
// //

View File

@ -87,7 +87,7 @@ void eigrp_siaquery_receive(struct eigrp *eigrp, struct ip *iph,
dest_addr.family = AFI_IP; dest_addr.family = AFI_IP;
dest_addr.u.prefix4 = tlv->destination; dest_addr.u.prefix4 = tlv->destination;
dest_addr.prefixlen = tlv->prefix_length; dest_addr.prefixlen = tlv->prefix_length;
struct eigrp_prefix_entry *dest = struct eigrp_prefix_descriptor *dest =
eigrp_topology_table_lookup_ipv4( eigrp_topology_table_lookup_ipv4(
eigrp->topology_table, &dest_addr); eigrp->topology_table, &dest_addr);
@ -95,9 +95,9 @@ void eigrp_siaquery_receive(struct eigrp *eigrp, struct ip *iph,
* know)*/ * know)*/
if (dest != NULL) { if (dest != NULL) {
struct eigrp_fsm_action_message msg; struct eigrp_fsm_action_message msg;
struct eigrp_nexthop_entry *entry = struct eigrp_route_descriptor *entry =
eigrp_prefix_entry_lookup(dest->entries, eigrp_route_descriptor_lookup(
nbr); dest->entries, nbr);
msg.packet_type = EIGRP_OPC_SIAQUERY; msg.packet_type = EIGRP_OPC_SIAQUERY;
msg.eigrp = eigrp; msg.eigrp = eigrp;
msg.data_type = EIGRP_INT; 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, void eigrp_send_siaquery(struct eigrp_neighbor *nbr,
struct eigrp_prefix_entry *pe) struct eigrp_prefix_descriptor *pe)
{ {
struct eigrp_packet *ep; struct eigrp_packet *ep;
uint16_t length = EIGRP_HEADER_LEN; uint16_t length = EIGRP_HEADER_LEN;

View File

@ -86,7 +86,7 @@ void eigrp_siareply_receive(struct eigrp *eigrp, struct ip *iph,
dest_addr.family = AFI_IP; dest_addr.family = AFI_IP;
dest_addr.u.prefix4 = tlv->destination; dest_addr.u.prefix4 = tlv->destination;
dest_addr.prefixlen = tlv->prefix_length; dest_addr.prefixlen = tlv->prefix_length;
struct eigrp_prefix_entry *dest = struct eigrp_prefix_descriptor *dest =
eigrp_topology_table_lookup_ipv4( eigrp_topology_table_lookup_ipv4(
eigrp->topology_table, &dest_addr); eigrp->topology_table, &dest_addr);
@ -94,9 +94,9 @@ void eigrp_siareply_receive(struct eigrp *eigrp, struct ip *iph,
* know)*/ * know)*/
if (dest != NULL) { if (dest != NULL) {
struct eigrp_fsm_action_message msg; struct eigrp_fsm_action_message msg;
struct eigrp_nexthop_entry *entry = struct eigrp_route_descriptor *entry =
eigrp_prefix_entry_lookup(dest->entries, eigrp_route_descriptor_lookup(
nbr); dest->entries, nbr);
msg.packet_type = EIGRP_OPC_SIAQUERY; msg.packet_type = EIGRP_OPC_SIAQUERY;
msg.eigrp = eigrp; msg.eigrp = eigrp;
msg.data_type = EIGRP_INT; 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, void eigrp_send_siareply(struct eigrp_neighbor *nbr,
struct eigrp_prefix_entry *pe) struct eigrp_prefix_descriptor *pe)
{ {
struct eigrp_packet *ep; struct eigrp_packet *ep;
uint16_t length = EIGRP_HEADER_LEN; uint16_t length = EIGRP_HEADER_LEN;

View File

@ -48,6 +48,16 @@ struct eigrp_metrics {
uint8_t flags; 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 { struct eigrp {
vrf_id_t vrf_id; vrf_id_t vrf_id;
@ -430,7 +440,7 @@ enum GR_type { EIGRP_GR_MANUAL, EIGRP_GR_FILTER };
//--------------------------------------------------------------------------------------------------------------------------------------------- //---------------------------------------------------------------------------------------------------------------------------------------------
/* EIGRP Topology table node structure */ /* EIGRP Topology table node structure */
struct eigrp_prefix_entry { struct eigrp_prefix_descriptor {
struct list *entries, *rij; struct list *entries, *rij;
uint32_t fdistance; // FD uint32_t fdistance; // FD
uint32_t rdistance; // RD uint32_t rdistance; // RD
@ -453,8 +463,14 @@ struct eigrp_prefix_entry {
}; };
/* EIGRP Topology table record structure */ /* EIGRP Topology table record structure */
struct eigrp_nexthop_entry { struct eigrp_route_descriptor {
struct eigrp_prefix_entry *prefix; 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 reported_distance; // distance reported by neighbor
uint32_t distance; // sum of reported distance and link cost to uint32_t distance; // sum of reported distance and link cost to
// advertised neighbor // advertised neighbor
@ -462,7 +478,9 @@ struct eigrp_nexthop_entry {
struct eigrp_metrics reported_metric; struct eigrp_metrics reported_metric;
struct eigrp_metrics total_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 uint8_t flags; // used for marking successor and FS
struct eigrp_interface *ei; // pointer for case of connected entry 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 uint8_t packet_type; // UPDATE, QUERY, SIAQUERY, SIAREPLY
struct eigrp *eigrp; // which thread sent mesg struct eigrp *eigrp; // which thread sent mesg
struct eigrp_neighbor *adv_router; // advertising neighbor struct eigrp_neighbor *adv_router; // advertising neighbor
struct eigrp_nexthop_entry *entry; struct eigrp_route_descriptor *entry;
struct eigrp_prefix_entry *prefix; struct eigrp_prefix_descriptor *prefix;
msg_data_t data_type; // internal or external tlv type msg_data_t data_type; // internal or external tlv type
struct eigrp_metrics metrics; struct eigrp_metrics metrics;
enum metric_change change; enum metric_change change;

View File

@ -52,8 +52,8 @@
#include "eigrpd/eigrp_fsm.h" #include "eigrpd/eigrp_fsm.h"
#include "eigrpd/eigrp_memory.h" #include "eigrpd/eigrp_memory.h"
static int eigrp_nexthop_entry_cmp(struct eigrp_nexthop_entry *, static int eigrp_route_descriptor_cmp(struct eigrp_route_descriptor *rd1,
struct eigrp_nexthop_entry *); struct eigrp_route_descriptor *rd2);
/* /*
* Returns linkedlist used as topology table * Returns linkedlist used as topology table
@ -70,14 +70,14 @@ struct route_table *eigrp_topology_new(void)
* Returns new created toplogy node * Returns new created toplogy node
* cmp - assigned function for comparing topology entry * 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; struct eigrp_prefix_descriptor *new;
new = XCALLOC(MTYPE_EIGRP_PREFIX_ENTRY, new = XCALLOC(MTYPE_EIGRP_PREFIX_DESCRIPTOR,
sizeof(struct eigrp_prefix_entry)); sizeof(struct eigrp_prefix_descriptor));
new->entries = list_new(); new->entries = list_new();
new->rij = 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->distance = new->fdistance = new->rdistance = EIGRP_MAX_METRIC;
new->destination = NULL; new->destination = NULL;
@ -87,8 +87,8 @@ struct eigrp_prefix_entry *eigrp_prefix_entry_new(void)
/* /*
* Topology entry comparison * Topology entry comparison
*/ */
static int eigrp_nexthop_entry_cmp(struct eigrp_nexthop_entry *entry1, static int eigrp_route_descriptor_cmp(struct eigrp_route_descriptor *entry1,
struct eigrp_nexthop_entry *entry2) struct eigrp_route_descriptor *entry2)
{ {
if (entry1->distance < entry2->distance) if (entry1->distance < entry2->distance)
return -1; return -1;
@ -102,12 +102,12 @@ static int eigrp_nexthop_entry_cmp(struct eigrp_nexthop_entry *entry1,
* Returns new topology entry * 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, new = XCALLOC(MTYPE_EIGRP_ROUTE_DESCRIPTOR,
sizeof(struct eigrp_nexthop_entry)); sizeof(struct eigrp_route_descriptor));
new->reported_distance = EIGRP_MAX_METRIC; new->reported_distance = EIGRP_MAX_METRIC;
new->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 * Adding topology node to topology table
*/ */
void eigrp_prefix_entry_add(struct route_table *topology, void eigrp_prefix_descriptor_add(struct route_table *topology,
struct eigrp_prefix_entry *pe) struct eigrp_prefix_descriptor *pe)
{ {
struct route_node *rn; struct route_node *rn;
@ -146,9 +146,9 @@ void eigrp_prefix_entry_add(struct route_table *topology,
/* /*
* Adding topology entry to topology node * Adding topology entry to topology node
*/ */
void eigrp_nexthop_entry_add(struct eigrp *eigrp, void eigrp_route_descriptor_add(struct eigrp *eigrp,
struct eigrp_prefix_entry *node, struct eigrp_prefix_descriptor *node,
struct eigrp_nexthop_entry *entry) struct eigrp_route_descriptor *entry)
{ {
struct list *l = list_new(); struct list *l = list_new();
@ -168,10 +168,11 @@ void eigrp_nexthop_entry_add(struct eigrp *eigrp,
/* /*
* Deleting topology node from topology table * Deleting topology node from topology table
*/ */
void eigrp_prefix_entry_delete(struct eigrp *eigrp, struct route_table *table, void eigrp_prefix_descriptor_delete(struct eigrp *eigrp,
struct eigrp_prefix_entry *pe) struct route_table *table,
struct eigrp_prefix_descriptor *pe)
{ {
struct eigrp_nexthop_entry *ne; struct eigrp_route_descriptor *ne;
struct listnode *node, *nnode; struct listnode *node, *nnode;
struct route_node *rn; 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); listnode_delete(eigrp->topology_changes_internalIPV4, pe);
for (ALL_LIST_ELEMENTS(pe->entries, node, nnode, ne)) 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->entries);
list_delete(&pe->rij); list_delete(&pe->rij);
eigrp_zebra_route_delete(eigrp, pe->destination); 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; rn->info = NULL;
route_unlock_node(rn); // Lookup above route_unlock_node(rn); // Lookup above
route_unlock_node(rn); // Initial creation route_unlock_node(rn); // Initial creation
XFREE(MTYPE_EIGRP_PREFIX_ENTRY, pe); XFREE(MTYPE_EIGRP_PREFIX_DESCRIPTOR, pe);
} }
/* /*
* Deleting topology entry from topology node * Deleting topology entry from topology node
*/ */
void eigrp_nexthop_entry_delete(struct eigrp *eigrp, void eigrp_route_descriptor_delete(struct eigrp *eigrp,
struct eigrp_prefix_entry *node, struct eigrp_prefix_descriptor *node,
struct eigrp_nexthop_entry *entry) struct eigrp_route_descriptor *entry)
{ {
if (listnode_lookup(node->entries, entry) != NULL) { if (listnode_lookup(node->entries, entry) != NULL) {
listnode_delete(node->entries, entry); listnode_delete(node->entries, entry);
eigrp_zebra_route_delete(eigrp, node->destination); 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_table *topology)
{ {
struct route_node *rn; struct route_node *rn;
struct eigrp_prefix_entry *pe; struct eigrp_prefix_descriptor *pe;
for (rn = route_top(topology); rn; rn = route_next(rn)) { for (rn = route_top(topology); rn; rn = route_next(rn)) {
pe = rn->info; pe = rn->info;
@ -230,15 +231,15 @@ void eigrp_topology_delete_all(struct eigrp *eigrp,
if (!pe) if (!pe)
continue; 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, eigrp_topology_table_lookup_ipv4(struct route_table *table,
struct prefix *address) struct prefix *address)
{ {
struct eigrp_prefix_entry *pe; struct eigrp_prefix_descriptor *pe;
struct route_node *rn; struct route_node *rn;
rn = route_node_lookup(table, address); 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 way we can clean up all the list_new and list_delete's
* that we are doing. DBS * 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 list *successors = list_new();
struct eigrp_nexthop_entry *data; struct eigrp_route_descriptor *data;
struct listnode *node1, *node2; struct listnode *node1, *node2;
for (ALL_LIST_ELEMENTS(table_node->entries, node1, node2, data)) { 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); listnode_add(successors, data);
} }
} }
@ -283,7 +285,7 @@ struct list *eigrp_topology_get_successor(struct eigrp_prefix_entry *table_node)
} }
struct list * 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) unsigned int maxpaths)
{ {
struct list *successors = eigrp_topology_get_successor(table_node); 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; return successors;
} }
struct eigrp_nexthop_entry * struct eigrp_route_descriptor *
eigrp_prefix_entry_lookup(struct list *entries, struct eigrp_neighbor *nbr) 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; struct listnode *node, *nnode;
for (ALL_LIST_ELEMENTS(entries, node, nnode, data)) { for (ALL_LIST_ELEMENTS(entries, node, nnode, data)) {
if (data->adv_router == nbr) { if (data->adv_router == nbr) {
@ -319,8 +321,8 @@ struct list *eigrp_neighbor_prefixes_lookup(struct eigrp *eigrp,
struct eigrp_neighbor *nbr) struct eigrp_neighbor *nbr)
{ {
struct listnode *node2, *node22; struct listnode *node2, *node22;
struct eigrp_nexthop_entry *entry; struct eigrp_route_descriptor *entry;
struct eigrp_prefix_entry *pe; struct eigrp_prefix_descriptor *pe;
struct route_node *rn; struct route_node *rn;
/* create new empty list for prefixes storage */ /* create new empty list for prefixes storage */
@ -348,8 +350,8 @@ enum metric_change
eigrp_topology_update_distance(struct eigrp_fsm_action_message *msg) eigrp_topology_update_distance(struct eigrp_fsm_action_message *msg)
{ {
struct eigrp *eigrp = msg->eigrp; struct eigrp *eigrp = msg->eigrp;
struct eigrp_prefix_entry *prefix = msg->prefix; struct eigrp_prefix_descriptor *prefix = msg->prefix;
struct eigrp_nexthop_entry *entry = msg->entry; struct eigrp_route_descriptor *entry = msg->entry;
enum metric_change change = METRIC_SAME; enum metric_change change = METRIC_SAME;
uint32_t new_reported_distance; uint32_t new_reported_distance;
@ -413,7 +415,7 @@ distance_done:
void eigrp_topology_update_all_node_flags(struct eigrp *eigrp) void eigrp_topology_update_all_node_flags(struct eigrp *eigrp)
{ {
struct eigrp_prefix_entry *pe; struct eigrp_prefix_descriptor *pe;
struct route_node *rn; struct route_node *rn;
if (!eigrp) 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, void eigrp_topology_update_node_flags(struct eigrp *eigrp,
struct eigrp_prefix_entry *dest) struct eigrp_prefix_descriptor *dest)
{ {
struct listnode *node; struct listnode *node;
struct eigrp_nexthop_entry *entry; struct eigrp_route_descriptor *entry;
for (ALL_LIST_ELEMENTS_RO(dest->entries, node, entry)) { for (ALL_LIST_ELEMENTS_RO(dest->entries, node, entry)) {
if (entry->reported_distance < dest->fdistance) { if (entry->reported_distance < dest->fdistance) {
@ -444,29 +446,29 @@ void eigrp_topology_update_node_flags(struct eigrp *eigrp,
&& entry->distance != EIGRP_MAX_METRIC) { && entry->distance != EIGRP_MAX_METRIC) {
// is successor // is successor
entry->flags |= entry->flags |=
EIGRP_NEXTHOP_ENTRY_SUCCESSOR_FLAG; EIGRP_ROUTE_DESCRIPTOR_SUCCESSOR_FLAG;
entry->flags &= entry->flags &=
~EIGRP_NEXTHOP_ENTRY_FSUCCESSOR_FLAG; ~EIGRP_ROUTE_DESCRIPTOR_FSUCCESSOR_FLAG;
} else { } else {
// is feasible successor only // is feasible successor only
entry->flags |= entry->flags |=
EIGRP_NEXTHOP_ENTRY_FSUCCESSOR_FLAG; EIGRP_ROUTE_DESCRIPTOR_FSUCCESSOR_FLAG;
entry->flags &= entry->flags &=
~EIGRP_NEXTHOP_ENTRY_SUCCESSOR_FLAG; ~EIGRP_ROUTE_DESCRIPTOR_SUCCESSOR_FLAG;
} }
} else { } else {
entry->flags &= ~EIGRP_NEXTHOP_ENTRY_FSUCCESSOR_FLAG; entry->flags &= ~EIGRP_ROUTE_DESCRIPTOR_FSUCCESSOR_FLAG;
entry->flags &= ~EIGRP_NEXTHOP_ENTRY_SUCCESSOR_FLAG; entry->flags &= ~EIGRP_ROUTE_DESCRIPTOR_SUCCESSOR_FLAG;
} }
} }
} }
void eigrp_update_routing_table(struct eigrp *eigrp, void eigrp_update_routing_table(struct eigrp *eigrp,
struct eigrp_prefix_entry *prefix) struct eigrp_prefix_descriptor *prefix)
{ {
struct list *successors; struct list *successors;
struct listnode *node; struct listnode *node;
struct eigrp_nexthop_entry *entry; struct eigrp_route_descriptor *entry;
successors = eigrp_topology_get_successor_max(prefix, eigrp->max_paths); 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, eigrp_zebra_route_add(eigrp, prefix->destination, successors,
prefix->fdistance); prefix->fdistance);
for (ALL_LIST_ELEMENTS_RO(successors, node, entry)) 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); list_delete(&successors);
} else { } else {
eigrp_zebra_route_delete(eigrp, prefix->destination); eigrp_zebra_route_delete(eigrp, prefix->destination);
for (ALL_LIST_ELEMENTS_RO(prefix->entries, node, entry)) 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 eigrp_neighbor *nbr)
{ {
struct listnode *node2, *node22; struct listnode *node2, *node22;
struct eigrp_prefix_entry *pe; struct eigrp_prefix_descriptor *pe;
struct eigrp_nexthop_entry *entry; struct eigrp_route_descriptor *entry;
struct route_node *rn; struct route_node *rn;
for (rn = route_top(eigrp->topology_table); rn; rn = route_next(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, void eigrp_update_topology_table_prefix(struct eigrp *eigrp,
struct route_table *table, struct route_table *table,
struct eigrp_prefix_entry *prefix) struct eigrp_prefix_descriptor *prefix)
{ {
struct listnode *node1, *node2; struct listnode *node1, *node2;
struct eigrp_nexthop_entry *entry; struct eigrp_route_descriptor *entry;
for (ALL_LIST_ELEMENTS(prefix->entries, node1, node2, entry)) { for (ALL_LIST_ELEMENTS(prefix->entries, node1, node2, entry)) {
if (entry->distance == EIGRP_MAX_METRIC) { 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 if (prefix->distance == EIGRP_MAX_METRIC
&& prefix->nt != EIGRP_TOPOLOGY_TYPE_CONNECTED) { && prefix->nt != EIGRP_TOPOLOGY_TYPE_CONNECTED) {
eigrp_prefix_entry_delete(eigrp, table, prefix); eigrp_prefix_descriptor_delete(eigrp, table, prefix);
} }
} }

View File

@ -35,43 +35,47 @@
/* EIGRP Topology table related functions. */ /* EIGRP Topology table related functions. */
extern struct route_table *eigrp_topology_new(void); extern struct route_table *eigrp_topology_new(void);
extern void eigrp_topology_init(struct route_table *table); extern void eigrp_topology_init(struct route_table *table);
extern struct eigrp_prefix_entry *eigrp_prefix_entry_new(void); extern struct eigrp_prefix_descriptor *eigrp_prefix_descriptor_new(void);
extern struct eigrp_nexthop_entry *eigrp_nexthop_entry_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_topology_free(struct eigrp *eigrp, struct route_table *table);
extern void eigrp_prefix_entry_add(struct route_table *table, extern void eigrp_prefix_descriptor_add(struct route_table *table,
struct eigrp_prefix_entry *pe); struct eigrp_prefix_descriptor *pe);
extern void eigrp_nexthop_entry_add(struct eigrp *eigrp, extern void eigrp_route_descriptor_add(struct eigrp *eigrp,
struct eigrp_prefix_entry *pe, struct eigrp_prefix_descriptor *pe,
struct eigrp_nexthop_entry *ne); struct eigrp_route_descriptor *ne);
extern void eigrp_prefix_entry_delete(struct eigrp *eigrp, extern void eigrp_prefix_descriptor_delete(struct eigrp *eigrp,
struct route_table *table, struct route_table *table,
struct eigrp_prefix_entry *pe); struct eigrp_prefix_descriptor *pe);
extern void eigrp_nexthop_entry_delete(struct eigrp *eigrp, extern void eigrp_route_descriptor_delete(struct eigrp *eigrp,
struct eigrp_prefix_entry *pe, struct eigrp_prefix_descriptor *pe,
struct eigrp_nexthop_entry *ne); struct eigrp_route_descriptor *ne);
extern void eigrp_topology_delete_all(struct eigrp *eigrp, extern void eigrp_topology_delete_all(struct eigrp *eigrp,
struct route_table *table); 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); 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 * 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); unsigned int maxpaths);
extern struct eigrp_nexthop_entry * extern struct eigrp_route_descriptor *
eigrp_prefix_entry_lookup(struct list *entries, struct eigrp_neighbor *neigh); eigrp_route_descriptor_lookup(struct list *entries,
struct eigrp_neighbor *neigh);
extern struct list *eigrp_neighbor_prefixes_lookup(struct eigrp *eigrp, extern struct list *eigrp_neighbor_prefixes_lookup(struct eigrp *eigrp,
struct eigrp_neighbor *n); struct eigrp_neighbor *n);
extern void eigrp_topology_update_all_node_flags(struct eigrp *eigrp); extern void eigrp_topology_update_all_node_flags(struct eigrp *eigrp);
extern void eigrp_topology_update_node_flags(struct eigrp *eigrp, extern void
struct eigrp_prefix_entry *pe); eigrp_topology_update_node_flags(struct eigrp *eigrp,
struct eigrp_prefix_descriptor *pe);
extern enum metric_change extern enum metric_change
eigrp_topology_update_distance(struct eigrp_fsm_action_message *msg); eigrp_topology_update_distance(struct eigrp_fsm_action_message *msg);
extern void eigrp_update_routing_table(struct eigrp *eigrp, 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, extern void eigrp_topology_neighbor_down(struct eigrp *eigrp,
struct eigrp_neighbor *neigh); struct eigrp_neighbor *neigh);
extern void eigrp_update_topology_table_prefix(struct eigrp *eigrp, extern void
struct route_table *table, eigrp_update_topology_table_prefix(struct eigrp *eigrp,
struct eigrp_prefix_entry *pe); struct route_table *table,
struct eigrp_prefix_descriptor *pe);
#endif #endif

View File

@ -101,11 +101,12 @@ bool eigrp_update_prefix_apply(struct eigrp *eigrp, struct eigrp_interface *ei,
* Function is used for removing received prefix * Function is used for removing received prefix
* from list of neighbor prefixes * from list of neighbor prefixes
*/ */
static void remove_received_prefix_gr(struct list *nbr_prefixes, static void
struct eigrp_prefix_entry *recv_prefix) remove_received_prefix_gr(struct list *nbr_prefixes,
struct eigrp_prefix_descriptor *recv_prefix)
{ {
struct listnode *node1, *node11; struct listnode *node1, *node11;
struct eigrp_prefix_entry *prefix = NULL; struct eigrp_prefix_descriptor *prefix = NULL;
/* iterate over all prefixes in list */ /* iterate over all prefixes in list */
for (ALL_LIST_ELEMENTS(nbr_prefixes, node1, node11, prefix)) { 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 list *nbr_prefixes)
{ {
struct listnode *node1; struct listnode *node1;
struct eigrp_prefix_entry *prefix; struct eigrp_prefix_descriptor *prefix;
struct eigrp_fsm_action_message fsm_msg; struct eigrp_fsm_action_message fsm_msg;
/* iterate over all prefixes which weren't advertised by neighbor */ /* 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 */ /* set delay to MAX */
fsm_msg.metrics.delay = EIGRP_MAX_METRIC; fsm_msg.metrics.delay = EIGRP_MAX_METRIC;
struct eigrp_nexthop_entry *entry = struct eigrp_route_descriptor *entry =
eigrp_prefix_entry_lookup(prefix->entries, nbr); eigrp_route_descriptor_lookup(prefix->entries, nbr);
fsm_msg.packet_type = EIGRP_OPC_UPDATE; fsm_msg.packet_type = EIGRP_OPC_UPDATE;
fsm_msg.eigrp = eigrp; fsm_msg.eigrp = eigrp;
@ -172,8 +173,8 @@ void eigrp_update_receive(struct eigrp *eigrp, struct ip *iph,
{ {
struct eigrp_neighbor *nbr; struct eigrp_neighbor *nbr;
struct TLV_IPv4_Internal_type *tlv; struct TLV_IPv4_Internal_type *tlv;
struct eigrp_prefix_entry *pe; struct eigrp_prefix_descriptor *pe;
struct eigrp_nexthop_entry *ne; struct eigrp_route_descriptor *ne;
uint32_t flags; uint32_t flags;
uint16_t type; uint16_t type;
uint16_t length; uint16_t length;
@ -304,7 +305,7 @@ void eigrp_update_receive(struct eigrp *eigrp, struct ip *iph,
dest_addr.family = AF_INET; dest_addr.family = AF_INET;
dest_addr.u.prefix4 = tlv->destination; dest_addr.u.prefix4 = tlv->destination;
dest_addr.prefixlen = tlv->prefix_length; dest_addr.prefixlen = tlv->prefix_length;
struct eigrp_prefix_entry *dest = struct eigrp_prefix_descriptor *dest =
eigrp_topology_table_lookup_ipv4( eigrp_topology_table_lookup_ipv4(
eigrp->topology_table, &dest_addr); eigrp->topology_table, &dest_addr);
@ -317,9 +318,9 @@ void eigrp_update_receive(struct eigrp *eigrp, struct ip *iph,
dest); dest);
struct eigrp_fsm_action_message msg; struct eigrp_fsm_action_message msg;
struct eigrp_nexthop_entry *entry = struct eigrp_route_descriptor *entry =
eigrp_prefix_entry_lookup(dest->entries, eigrp_route_descriptor_lookup(
nbr); dest->entries, nbr);
msg.packet_type = EIGRP_OPC_UPDATE; msg.packet_type = EIGRP_OPC_UPDATE;
msg.eigrp = eigrp; msg.eigrp = eigrp;
@ -331,7 +332,7 @@ void eigrp_update_receive(struct eigrp *eigrp, struct ip *iph,
eigrp_fsm_event(&msg); eigrp_fsm_event(&msg);
} else { } else {
/*Here comes topology information save*/ /*Here comes topology information save*/
pe = eigrp_prefix_entry_new(); pe = eigrp_prefix_descriptor_new();
pe->serno = eigrp->serno; pe->serno = eigrp->serno;
pe->destination = pe->destination =
(struct prefix *)prefix_ipv4_new(); (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->state = EIGRP_FSM_STATE_PASSIVE;
pe->nt = EIGRP_TOPOLOGY_TYPE_REMOTE; pe->nt = EIGRP_TOPOLOGY_TYPE_REMOTE;
ne = eigrp_nexthop_entry_new(); ne = eigrp_route_descriptor_new();
ne->ei = ei; ne->ei = ei;
ne->adv_router = nbr; ne->adv_router = nbr;
ne->reported_metric = tlv->metric; 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 = pe->fdistance = pe->distance = pe->rdistance =
ne->distance; ne->distance;
ne->prefix = pe; ne->prefix = pe;
ne->flags = EIGRP_NEXTHOP_ENTRY_SUCCESSOR_FLAG; ne->flags =
EIGRP_ROUTE_DESCRIPTOR_SUCCESSOR_FLAG;
eigrp_prefix_entry_add(eigrp->topology_table, eigrp_prefix_descriptor_add(
pe); eigrp->topology_table, pe);
eigrp_nexthop_entry_add(eigrp, pe, ne); eigrp_route_descriptor_add(eigrp, pe, ne);
pe->distance = pe->fdistance = pe->rdistance = pe->distance = pe->fdistance = pe->rdistance =
ne->distance; ne->distance;
pe->reported_metric = ne->total_metric; pe->reported_metric = ne->total_metric;
@ -527,8 +529,8 @@ void eigrp_update_send_EOT(struct eigrp_neighbor *nbr)
{ {
struct eigrp_packet *ep; struct eigrp_packet *ep;
uint16_t length = EIGRP_HEADER_LEN; uint16_t length = EIGRP_HEADER_LEN;
struct eigrp_nexthop_entry *te; struct eigrp_route_descriptor *te;
struct eigrp_prefix_entry *pe; struct eigrp_prefix_descriptor *pe;
struct listnode *node2, *nnode2; struct listnode *node2, *nnode2;
struct eigrp_interface *ei = nbr->ei; struct eigrp_interface *ei = nbr->ei;
struct eigrp *eigrp = ei->eigrp; struct eigrp *eigrp = ei->eigrp;
@ -600,7 +602,7 @@ void eigrp_update_send(struct eigrp_interface *ei)
{ {
struct eigrp_packet *ep; struct eigrp_packet *ep;
struct listnode *node, *nnode; struct listnode *node, *nnode;
struct eigrp_prefix_entry *pe; struct eigrp_prefix_descriptor *pe;
uint8_t has_tlv; uint8_t has_tlv;
struct eigrp *eigrp = ei->eigrp; struct eigrp *eigrp = ei->eigrp;
struct prefix *dest_addr; struct prefix *dest_addr;
@ -626,7 +628,7 @@ void eigrp_update_send(struct eigrp_interface *ei)
has_tlv = 0; has_tlv = 0;
for (ALL_LIST_ELEMENTS(ei->eigrp->topology_changes_internalIPV4, node, for (ALL_LIST_ELEMENTS(ei->eigrp->topology_changes_internalIPV4, node,
nnode, pe)) { nnode, pe)) {
struct eigrp_nexthop_entry *ne; struct eigrp_route_descriptor *ne;
if (!(pe->req_action & EIGRP_FSM_NEED_UPDATE)) if (!(pe->req_action & EIGRP_FSM_NEED_UPDATE))
continue; continue;
@ -707,7 +709,7 @@ void eigrp_update_send_all(struct eigrp *eigrp,
{ {
struct eigrp_interface *iface; struct eigrp_interface *iface;
struct listnode *node, *node2, *nnode2; struct listnode *node, *node2, *nnode2;
struct eigrp_prefix_entry *pe; struct eigrp_prefix_descriptor *pe;
for (ALL_LIST_ELEMENTS_RO(eigrp->eiflist, node, iface)) { for (ALL_LIST_ELEMENTS_RO(eigrp->eiflist, node, iface)) {
if (iface != exception) { if (iface != exception) {
@ -745,7 +747,7 @@ static void eigrp_update_send_GR_part(struct eigrp_neighbor *nbr)
{ {
struct eigrp_packet *ep; struct eigrp_packet *ep;
uint16_t length = EIGRP_HEADER_LEN; uint16_t length = EIGRP_HEADER_LEN;
struct eigrp_prefix_entry *pe; struct eigrp_prefix_descriptor *pe;
struct prefix *dest_addr; struct prefix *dest_addr;
struct eigrp_interface *ei = nbr->ei; struct eigrp_interface *ei = nbr->ei;
struct eigrp *eigrp = ei->eigrp; struct eigrp *eigrp = ei->eigrp;
@ -837,8 +839,8 @@ static void eigrp_update_send_GR_part(struct eigrp_neighbor *nbr)
/* prepare message for FSM */ /* prepare message for FSM */
struct eigrp_fsm_action_message fsm_msg; struct eigrp_fsm_action_message fsm_msg;
struct eigrp_nexthop_entry *entry = struct eigrp_route_descriptor *entry =
eigrp_prefix_entry_lookup(pe->entries, nbr); eigrp_route_descriptor_lookup(pe->entries, nbr);
fsm_msg.packet_type = EIGRP_OPC_UPDATE; fsm_msg.packet_type = EIGRP_OPC_UPDATE;
fsm_msg.eigrp = eigrp; 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, void eigrp_update_send_GR(struct eigrp_neighbor *nbr, enum GR_type gr_type,
struct vty *vty) struct vty *vty)
{ {
struct eigrp_prefix_entry *pe2; struct eigrp_prefix_descriptor *pe2;
struct list *prefixes; struct list *prefixes;
struct route_node *rn; struct route_node *rn;
struct eigrp_interface *ei = nbr->ei; struct eigrp_interface *ei = nbr->ei;

View File

@ -59,25 +59,21 @@
#include "eigrpd/eigrp_vty_clippy.c" #include "eigrpd/eigrp_vty_clippy.c"
#endif #endif
static void eigrp_vty_display_prefix_entry(struct vty *vty, static void eigrp_vty_display_prefix_entry(struct vty *vty, struct eigrp *eigrp,
struct eigrp *eigrp, struct eigrp_prefix_descriptor *pe,
struct eigrp_prefix_entry *pe,
bool all) bool all)
{ {
bool first = true; bool first = true;
struct eigrp_nexthop_entry *te; struct eigrp_route_descriptor *te;
struct listnode *node; struct listnode *node;
for (ALL_LIST_ELEMENTS_RO(pe->entries, node, te)) { for (ALL_LIST_ELEMENTS_RO(pe->entries, node, te)) {
if (all if (all
|| (((te->flags || (((te->flags & EIGRP_ROUTE_DESCRIPTOR_SUCCESSOR_FLAG)
& EIGRP_NEXTHOP_ENTRY_SUCCESSOR_FLAG) == EIGRP_ROUTE_DESCRIPTOR_SUCCESSOR_FLAG)
== EIGRP_NEXTHOP_ENTRY_SUCCESSOR_FLAG) || ((te->flags & EIGRP_ROUTE_DESCRIPTOR_FSUCCESSOR_FLAG)
|| ((te->flags == EIGRP_ROUTE_DESCRIPTOR_FSUCCESSOR_FLAG))) {
& EIGRP_NEXTHOP_ENTRY_FSUCCESSOR_FLAG) show_ip_eigrp_route_descriptor(vty, eigrp, te, &first);
== EIGRP_NEXTHOP_ENTRY_FSUCCESSOR_FLAG))) {
show_ip_eigrp_nexthop_entry(vty, eigrp, te,
&first);
first = false; 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, static void eigrp_topology_helper(struct vty *vty, struct eigrp *eigrp,
const char *all) const char *all)
{ {
struct eigrp_prefix_entry *tn; struct eigrp_prefix_descriptor *tn;
struct route_node *rn; struct route_node *rn;
show_ip_eigrp_topology_header(vty, eigrp); show_ip_eigrp_topology_header(vty, eigrp);
@ -168,7 +164,7 @@ DEFPY (show_ip_eigrp_topology,
"For a specific prefix\n") "For a specific prefix\n")
{ {
struct eigrp *eigrp; struct eigrp *eigrp;
struct eigrp_prefix_entry *tn; struct eigrp_prefix_descriptor *tn;
struct route_node *rn; struct route_node *rn;
struct prefix cmp; struct prefix cmp;

View File

@ -194,7 +194,7 @@ void eigrp_zebra_route_add(struct eigrp *eigrp, struct prefix *p,
{ {
struct zapi_route api; struct zapi_route api;
struct zapi_nexthop *api_nh; struct zapi_nexthop *api_nh;
struct eigrp_nexthop_entry *te; struct eigrp_route_descriptor *te;
struct listnode *node; struct listnode *node;
int count = 0; int count = 0;