mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-07 06:03:10 +00:00
eigrpd: Cleanup tab/spacing of the *.c files
Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
This commit is contained in:
parent
962251aeff
commit
f9e5c9ca06
@ -70,43 +70,14 @@ config_write_debug (struct vty *vty)
|
||||
int write = 0;
|
||||
int i;
|
||||
|
||||
const char *type_str[] = {"update", "request", "query", "reply", "hello", "", "probe", "ack", "",
|
||||
const char *type_str[] = {"update", "request", "query", "reply",
|
||||
"hello", "", "probe", "ack", "",
|
||||
"SIA query", "SIA reply", "stub", "all"};
|
||||
const char *detail_str[] = {"", " send", " recv", "", " detail",
|
||||
" send detail", " recv detail", " detail"};
|
||||
|
||||
|
||||
/* debug eigrp event. */
|
||||
// if (IS_CONF_DEBUG_EIGRP (event, EVENT) == EIGRP_DEBUG_EVENT)
|
||||
// {
|
||||
// vty_out (vty, "debug eigrp event%s", VTY_NEWLINE);
|
||||
// write = 1;
|
||||
// }
|
||||
|
||||
/* debug eigrp packet all detail. */
|
||||
// r = EIGRP_DEBUG_SEND_RECV|EIGRP_DEBUG_DETAIL;
|
||||
// for (i = 0; i < 11; i++)
|
||||
// r &= conf_debug_eigrp_packet[i] & (EIGRP_DEBUG_SEND_RECV|EIGRP_DEBUG_DETAIL);
|
||||
// if (r == (EIGRP_DEBUG_SEND_RECV|EIGRP_DEBUG_DETAIL))
|
||||
// {
|
||||
// vty_out (vty, "debug eigrp packet all detail%s", VTY_NEWLINE);
|
||||
//// return 1;
|
||||
// }
|
||||
//
|
||||
// /* debug eigrp packet all. */
|
||||
// r = EIGRP_DEBUG_SEND_RECV;
|
||||
// for (i = 0; i < 11; i++)
|
||||
// r &= conf_debug_eigrp_packet[i] & EIGRP_DEBUG_SEND_RECV;
|
||||
// if (r == EIGRP_DEBUG_SEND_RECV)
|
||||
// {
|
||||
// vty_out (vty, "debug eigrp packet all%s", VTY_NEWLINE);
|
||||
// for (i = 0; i < 11; i++)
|
||||
// if (conf_debug_eigrp_packet[i] & EIGRP_DEBUG_DETAIL)
|
||||
// vty_out (vty, "debug eigrp packet %s detail%s",
|
||||
// type_str[i],
|
||||
// VTY_NEWLINE);
|
||||
//// return 1;
|
||||
// }
|
||||
|
||||
/* debug eigrp packet */
|
||||
for (i = 0; i < 10; i++)
|
||||
@ -120,125 +91,9 @@ config_write_debug (struct vty *vty)
|
||||
write = 1;
|
||||
}
|
||||
|
||||
// int write = 0;
|
||||
// int i, r;
|
||||
//
|
||||
// const char *type_str[] = {"hello", "dd", "ls-request", "ls-update", "ls-ack"};
|
||||
// const char *detail_str[] = {"", " send", " recv", "", " detail",
|
||||
// " send detail", " recv detail", " detail"};
|
||||
//
|
||||
// /* debug ospf ism (status|events|timers). */
|
||||
// if (IS_CONF_DEBUG_OSPF (ism, ISM) == OSPF_DEBUG_ISM)
|
||||
// vty_out (vty, "debug ospf ism%s", VTY_NEWLINE);
|
||||
// else
|
||||
// {
|
||||
// if (IS_CONF_DEBUG_OSPF (ism, ISM_STATUS))
|
||||
// vty_out (vty, "debug ospf ism status%s", VTY_NEWLINE);
|
||||
// if (IS_CONF_DEBUG_OSPF (ism, ISM_EVENTS))
|
||||
// vty_out (vty, "debug ospf ism event%s", VTY_NEWLINE);
|
||||
// if (IS_CONF_DEBUG_OSPF (ism, ISM_TIMERS))
|
||||
// vty_out (vty, "debug ospf ism timer%s", VTY_NEWLINE);
|
||||
// }
|
||||
//
|
||||
// /* debug ospf nsm (status|events|timers). */
|
||||
// if (IS_CONF_DEBUG_OSPF (nsm, NSM) == OSPF_DEBUG_NSM)
|
||||
// vty_out (vty, "debug ospf nsm%s", VTY_NEWLINE);
|
||||
// else
|
||||
// {
|
||||
// if (IS_CONF_DEBUG_OSPF (nsm, NSM_STATUS))
|
||||
// vty_out (vty, "debug ospf nsm status%s", VTY_NEWLINE);
|
||||
// if (IS_CONF_DEBUG_OSPF (nsm, NSM_EVENTS))
|
||||
// vty_out (vty, "debug ospf nsm event%s", VTY_NEWLINE);
|
||||
// if (IS_CONF_DEBUG_OSPF (nsm, NSM_TIMERS))
|
||||
// vty_out (vty, "debug ospf nsm timer%s", VTY_NEWLINE);
|
||||
// }
|
||||
//
|
||||
// /* debug ospf lsa (generate|flooding|install|refresh). */
|
||||
// if (IS_CONF_DEBUG_OSPF (lsa, LSA) == OSPF_DEBUG_LSA)
|
||||
// vty_out (vty, "debug ospf lsa%s", VTY_NEWLINE);
|
||||
// else
|
||||
// {
|
||||
// if (IS_CONF_DEBUG_OSPF (lsa, LSA_GENERATE))
|
||||
// vty_out (vty, "debug ospf lsa generate%s", VTY_NEWLINE);
|
||||
// if (IS_CONF_DEBUG_OSPF (lsa, LSA_FLOODING))
|
||||
// vty_out (vty, "debug ospf lsa flooding%s", VTY_NEWLINE);
|
||||
// if (IS_CONF_DEBUG_OSPF (lsa, LSA_INSTALL))
|
||||
// vty_out (vty, "debug ospf lsa install%s", VTY_NEWLINE);
|
||||
// if (IS_CONF_DEBUG_OSPF (lsa, LSA_REFRESH))
|
||||
// vty_out (vty, "debug ospf lsa refresh%s", VTY_NEWLINE);
|
||||
//
|
||||
// write = 1;
|
||||
// }
|
||||
//
|
||||
// /* debug ospf zebra (interface|redistribute). */
|
||||
// if (IS_CONF_DEBUG_OSPF (zebra, ZEBRA) == OSPF_DEBUG_ZEBRA)
|
||||
// vty_out (vty, "debug ospf zebra%s", VTY_NEWLINE);
|
||||
// else
|
||||
// {
|
||||
// if (IS_CONF_DEBUG_OSPF (zebra, ZEBRA_INTERFACE))
|
||||
// vty_out (vty, "debug ospf zebra interface%s", VTY_NEWLINE);
|
||||
// if (IS_CONF_DEBUG_OSPF (zebra, ZEBRA_REDISTRIBUTE))
|
||||
// vty_out (vty, "debug ospf zebra redistribute%s", VTY_NEWLINE);
|
||||
//
|
||||
// write = 1;
|
||||
// }
|
||||
//
|
||||
// /* debug ospf event. */
|
||||
// if (IS_CONF_DEBUG_OSPF (event, EVENT) == OSPF_DEBUG_EVENT)
|
||||
// {
|
||||
// vty_out (vty, "debug ospf event%s", VTY_NEWLINE);
|
||||
// write = 1;
|
||||
// }
|
||||
//
|
||||
// /* debug ospf nssa. */
|
||||
// if (IS_CONF_DEBUG_OSPF (nssa, NSSA) == OSPF_DEBUG_NSSA)
|
||||
// {
|
||||
// vty_out (vty, "debug ospf nssa%s", VTY_NEWLINE);
|
||||
// write = 1;
|
||||
// }
|
||||
//
|
||||
// /* debug ospf packet all detail. */
|
||||
// r = OSPF_DEBUG_SEND_RECV|OSPF_DEBUG_DETAIL;
|
||||
// for (i = 0; i < 5; i++)
|
||||
// r &= conf_debug_ospf_packet[i] & (OSPF_DEBUG_SEND_RECV|OSPF_DEBUG_DETAIL);
|
||||
// if (r == (OSPF_DEBUG_SEND_RECV|OSPF_DEBUG_DETAIL))
|
||||
// {
|
||||
// vty_out (vty, "debug ospf packet all detail%s", VTY_NEWLINE);
|
||||
// return 1;
|
||||
// }
|
||||
//
|
||||
// /* debug ospf packet all. */
|
||||
// r = OSPF_DEBUG_SEND_RECV;
|
||||
// for (i = 0; i < 5; i++)
|
||||
// r &= conf_debug_ospf_packet[i] & OSPF_DEBUG_SEND_RECV;
|
||||
// if (r == OSPF_DEBUG_SEND_RECV)
|
||||
// {
|
||||
// vty_out (vty, "debug ospf packet all%s", VTY_NEWLINE);
|
||||
// for (i = 0; i < 5; i++)
|
||||
// if (conf_debug_ospf_packet[i] & OSPF_DEBUG_DETAIL)
|
||||
// vty_out (vty, "debug ospf packet %s detail%s",
|
||||
// type_str[i],
|
||||
// VTY_NEWLINE);
|
||||
// return 1;
|
||||
// }
|
||||
//
|
||||
// /* debug ospf packet (hello|dd|ls-request|ls-update|ls-ack)
|
||||
// (send|recv) (detail). */
|
||||
// for (i = 0; i < 5; i++)
|
||||
// {
|
||||
// if (conf_debug_ospf_packet[i] == 0)
|
||||
// continue;
|
||||
//
|
||||
// vty_out (vty, "debug ospf packet %s%s%s",
|
||||
// type_str[i], detail_str[conf_debug_ospf_packet[i]],
|
||||
// VTY_NEWLINE);
|
||||
// write = 1;
|
||||
// }
|
||||
|
||||
return write;
|
||||
}
|
||||
|
||||
|
||||
static int
|
||||
eigrp_neighbor_packet_queue_sum (struct eigrp_interface *ei)
|
||||
{
|
||||
@ -288,7 +143,7 @@ eigrp_header_dump (struct eigrp_header *eigrph)
|
||||
zlog_debug ("eigrp_flags 0x%x", ntohl(eigrph->flags));
|
||||
zlog_debug ("eigrp_sequence %u", ntohl(eigrph->sequence));
|
||||
zlog_debug ("eigrp_ack %u", ntohl(eigrph->ack));
|
||||
zlog_debug ("eigrp_vrid %u" , ntohs(eigrph->vrid));
|
||||
zlog_debug ("eigrp_vrid %u", ntohs(eigrph->vrid));
|
||||
zlog_debug ("eigrp_AS %u", ntohs(eigrph->ASNumber));
|
||||
}
|
||||
|
||||
@ -371,25 +226,34 @@ show_ip_eigrp_interface_sub (struct vty *vty, struct eigrp *eigrp,
|
||||
struct eigrp_interface *ei)
|
||||
{
|
||||
vty_out (vty, "%-11s ", eigrp_if_name_string (ei));
|
||||
vty_out (vty, "%-11u",IF_DEF_PARAMS (ei->ifp)->bandwidth);
|
||||
vty_out (vty, "%-11u",IF_DEF_PARAMS (ei->ifp)->delay);
|
||||
vty_out (vty, "%-11u", IF_DEF_PARAMS (ei->ifp)->bandwidth);
|
||||
vty_out (vty, "%-11u", IF_DEF_PARAMS (ei->ifp)->delay);
|
||||
vty_out (vty, "%-7u", ei->nbrs->count);
|
||||
vty_out (vty, "%u %c %-10u",0,'/',eigrp_neighbor_packet_queue_sum (ei));
|
||||
vty_out (vty, "%-7u %-14u %-12u %-8u",0,0,0,0);
|
||||
vty_out (vty, "%-8u %-8u %s",IF_DEF_PARAMS (ei->ifp)->v_hello,IF_DEF_PARAMS (ei->ifp)->v_wait,VTY_NEWLINE);
|
||||
vty_out (vty, "%u %c %-10u",0,'/', eigrp_neighbor_packet_queue_sum (ei));
|
||||
vty_out (vty, "%-7u %-14u %-12u %-8u", 0, 0, 0, 0);
|
||||
vty_out (vty, "%-8u %-8u %s",
|
||||
IF_DEF_PARAMS (ei->ifp)->v_hello,
|
||||
IF_DEF_PARAMS (ei->ifp)->v_wait,VTY_NEWLINE);
|
||||
}
|
||||
|
||||
void
|
||||
show_ip_eigrp_interface_detail (struct vty *vty, struct eigrp *eigrp,
|
||||
struct eigrp_interface *ei)
|
||||
{
|
||||
vty_out (vty, "%-2s %s %d %-3s %s","","Hello interval is ",0," sec",VTY_NEWLINE);
|
||||
vty_out (vty, "%-2s %s %s %s","","Next xmit serial","<none>",VTY_NEWLINE);
|
||||
vty_out (vty, "%-2s %s %d %s %d %s %d %s %d %s","","Un/reliable mcasts: ",0,"/",0,"Un/reliable ucasts: ",0,"/",0,VTY_NEWLINE);
|
||||
vty_out (vty, "%-2s %s %d %s %d %s %d %s","","Mcast exceptions: ",0," CR packets: ",0," ACKs supressed: ",0,VTY_NEWLINE);
|
||||
vty_out (vty, "%-2s %s %d %s %d %s","","Retransmissions sent: ",0,"Out-of-sequence rcvd: ",0,VTY_NEWLINE);
|
||||
vty_out (vty, "%-2s %s %s %s %s","","Authentication mode is ","not","set",VTY_NEWLINE);
|
||||
vty_out (vty, "%-2s %s %s","","Use multicast",VTY_NEWLINE);
|
||||
vty_out (vty, "%-2s %s %d %-3s %s","","Hello interval is ", 0, " sec", VTY_NEWLINE);
|
||||
vty_out (vty, "%-2s %s %s %s","", "Next xmit serial","<none>", VTY_NEWLINE);
|
||||
vty_out (vty, "%-2s %s %d %s %d %s %d %s %d %s",
|
||||
"", "Un/reliable mcasts: ", 0, "/", 0, "Un/reliable ucasts: ",
|
||||
0, "/", 0, VTY_NEWLINE);
|
||||
vty_out (vty, "%-2s %s %d %s %d %s %d %s",
|
||||
"", "Mcast exceptions: ", 0, " CR packets: ",
|
||||
0, " ACKs supressed: ", 0, VTY_NEWLINE);
|
||||
vty_out (vty, "%-2s %s %d %s %d %s",
|
||||
"", "Retransmissions sent: ", 0, "Out-of-sequence rcvd: ",
|
||||
0 ,VTY_NEWLINE);
|
||||
vty_out (vty, "%-2s %s %s %s %s",
|
||||
"", "Authentication mode is ", "not","set", VTY_NEWLINE);
|
||||
vty_out (vty, "%-2s %s %s", "", "Use multicast", VTY_NEWLINE);
|
||||
}
|
||||
|
||||
void
|
||||
@ -408,11 +272,12 @@ show_ip_eigrp_neighbor_sub (struct vty *vty, struct eigrp_neighbor *nbr,
|
||||
int detail)
|
||||
{
|
||||
|
||||
vty_out (vty, "%-3u %-17s %-21s",0,eigrp_neigh_ip_string (nbr),eigrp_if_name_string (nbr->ei));
|
||||
vty_out (vty,"%-7lu",thread_timer_remain_second (nbr->t_holddown));
|
||||
vty_out (vty,"%-8u %-6u %-5u",0,0,EIGRP_PACKET_RETRANS_TIME);
|
||||
vty_out (vty,"%-7lu",nbr->retrans_queue->count);
|
||||
vty_out (vty,"%u%s",nbr->recv_sequence_number,VTY_NEWLINE);
|
||||
vty_out (vty, "%-3u %-17s %-21s", 0,
|
||||
eigrp_neigh_ip_string (nbr), eigrp_if_name_string (nbr->ei));
|
||||
vty_out (vty,"%-7lu", thread_timer_remain_second (nbr->t_holddown));
|
||||
vty_out (vty,"%-8u %-6u %-5u", 0, 0, EIGRP_PACKET_RETRANS_TIME);
|
||||
vty_out (vty,"%-7lu", nbr->retrans_queue->count);
|
||||
vty_out (vty,"%u%s", nbr->recv_sequence_number, VTY_NEWLINE);
|
||||
|
||||
|
||||
if (detail)
|
||||
@ -449,17 +314,20 @@ show_ip_eigrp_prefix_entry (struct vty *vty, struct eigrp_prefix_entry *tn)
|
||||
vty_out (vty, "%s/%u, ",inet_ntoa (tn->destination_ipv4->prefix),tn->destination_ipv4->prefixlen);
|
||||
vty_out (vty, "%u successors, ",eigrp_topology_get_successor(tn)->count);
|
||||
vty_out (vty, "FD is %u, serno: %lu %s",tn->fdistance, tn->serno, VTY_NEWLINE);
|
||||
|
||||
}
|
||||
|
||||
void
|
||||
show_ip_eigrp_neighbor_entry (struct vty *vty, struct eigrp *eigrp, struct eigrp_neighbor_entry *te)
|
||||
{
|
||||
if (te->adv_router == eigrp->neighbor_self)
|
||||
vty_out (vty, "%-7s%s, %s%s"," ","via Connected",eigrp_if_name_string (te->ei), VTY_NEWLINE);
|
||||
vty_out (vty, "%-7s%s, %s%s", " ", "via Connected",
|
||||
eigrp_if_name_string (te->ei), VTY_NEWLINE);
|
||||
else
|
||||
{
|
||||
vty_out (vty, "%-7s%s%s (%u/%u), %s%s"," ","via ",inet_ntoa (te->adv_router->src),te->distance, te->reported_distance, eigrp_if_name_string (te->ei), VTY_NEWLINE);
|
||||
vty_out (vty, "%-7s%s%s (%u/%u), %s%s",
|
||||
" ", "via ", inet_ntoa (te->adv_router->src),
|
||||
te->distance, te->reported_distance,
|
||||
eigrp_if_name_string (te->ei), VTY_NEWLINE);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -305,8 +305,7 @@ eigrp_distribute_update (struct distribute *dist)
|
||||
thread_cancel(ei->t_distribute);
|
||||
}
|
||||
/* schedule Graceful restart for interface in 10sec */
|
||||
e->t_distribute = thread_add_timer(master, eigrp_distribute_timer_interface, ei,(10));
|
||||
|
||||
e->t_distribute = thread_add_timer(master, eigrp_distribute_timer_interface, ei, 10);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -93,22 +93,14 @@
|
||||
/*
|
||||
* Prototypes
|
||||
*/
|
||||
int
|
||||
eigrp_fsm_event_keep_state(struct eigrp_fsm_action_message *);
|
||||
int
|
||||
eigrp_fsm_event_nq_fcn(struct eigrp_fsm_action_message *);
|
||||
int
|
||||
eigrp_fsm_event_q_fcn(struct eigrp_fsm_action_message *);
|
||||
int
|
||||
eigrp_fsm_event_lr(struct eigrp_fsm_action_message *);
|
||||
int
|
||||
eigrp_fsm_event_dinc(struct eigrp_fsm_action_message *);
|
||||
int
|
||||
eigrp_fsm_event_lr_fcs(struct eigrp_fsm_action_message *);
|
||||
int
|
||||
eigrp_fsm_event_lr_fcn(struct eigrp_fsm_action_message *);
|
||||
int
|
||||
eigrp_fsm_event_qact(struct eigrp_fsm_action_message *);
|
||||
int eigrp_fsm_event_keep_state(struct eigrp_fsm_action_message *);
|
||||
int eigrp_fsm_event_nq_fcn(struct eigrp_fsm_action_message *);
|
||||
int eigrp_fsm_event_q_fcn(struct eigrp_fsm_action_message *);
|
||||
int eigrp_fsm_event_lr(struct eigrp_fsm_action_message *);
|
||||
int eigrp_fsm_event_dinc(struct eigrp_fsm_action_message *);
|
||||
int eigrp_fsm_event_lr_fcs(struct eigrp_fsm_action_message *);
|
||||
int eigrp_fsm_event_lr_fcn(struct eigrp_fsm_action_message *);
|
||||
int eigrp_fsm_event_qact(struct eigrp_fsm_action_message *);
|
||||
|
||||
//---------------------------------------------------------------------
|
||||
|
||||
@ -123,7 +115,7 @@ struct {
|
||||
int
|
||||
(*func)(struct eigrp_fsm_action_message *);
|
||||
} NSM[EIGRP_FSM_STATE_MAX][EIGRP_FSM_EVENT_MAX] = { {
|
||||
//PASSIVE STATE
|
||||
//PASSIVE STATE
|
||||
{ eigrp_fsm_event_nq_fcn }, /* Event 0 */
|
||||
{ eigrp_fsm_event_keep_state }, /* Event 1 */
|
||||
{ eigrp_fsm_event_q_fcn }, /* Event 2 */
|
||||
@ -132,8 +124,8 @@ struct {
|
||||
{ eigrp_fsm_event_keep_state }, /* Event 5 */
|
||||
{ eigrp_fsm_event_keep_state }, /* Event 6 */
|
||||
{ eigrp_fsm_event_keep_state }, /* Event 7 */
|
||||
}, {
|
||||
//Active 0 state
|
||||
}, {
|
||||
//Active 0 state
|
||||
{ eigrp_fsm_event_keep_state }, /* Event 0 */
|
||||
{ eigrp_fsm_event_keep_state }, /* Event 1 */
|
||||
{ eigrp_fsm_event_keep_state }, /* Event 2 */
|
||||
@ -142,9 +134,8 @@ struct {
|
||||
{ eigrp_fsm_event_qact }, /* Event 5 */
|
||||
{ eigrp_fsm_event_lr_fcn }, /* Event 6 */
|
||||
{ eigrp_fsm_event_keep_state }, /* Event 7 */
|
||||
|
||||
}, {
|
||||
//Active 1 state
|
||||
}, {
|
||||
//Active 1 state
|
||||
{ eigrp_fsm_event_keep_state }, /* Event 0 */
|
||||
{ eigrp_fsm_event_lr }, /* Event 1 */
|
||||
{ eigrp_fsm_event_keep_state }, /* Event 2 */
|
||||
@ -153,8 +144,8 @@ struct {
|
||||
{ eigrp_fsm_event_qact }, /* Event 5 */
|
||||
{ eigrp_fsm_event_keep_state }, /* Event 6 */
|
||||
{ eigrp_fsm_event_keep_state }, /* Event 7 */
|
||||
}, {
|
||||
//Active 2 state
|
||||
}, {
|
||||
//Active 2 state
|
||||
{ eigrp_fsm_event_keep_state }, /* Event 0 */
|
||||
{ eigrp_fsm_event_keep_state }, /* Event 1 */
|
||||
{ eigrp_fsm_event_keep_state }, /* Event 2 */
|
||||
@ -163,8 +154,8 @@ struct {
|
||||
{ eigrp_fsm_event_keep_state }, /* Event 5 */
|
||||
{ eigrp_fsm_event_lr_fcn }, /* Event 6 */
|
||||
{ eigrp_fsm_event_keep_state }, /* Event 7 */
|
||||
}, {
|
||||
//Active 3 state
|
||||
}, {
|
||||
//Active 3 state
|
||||
{ eigrp_fsm_event_keep_state }, /* Event 0 */
|
||||
{ eigrp_fsm_event_lr }, /* Event 1 */
|
||||
{ eigrp_fsm_event_keep_state }, /* Event 2 */
|
||||
@ -183,14 +174,16 @@ struct {
|
||||
* Return number of occurred event (arrow in diagram).
|
||||
*
|
||||
*/
|
||||
int eigrp_get_fsm_event(struct eigrp_fsm_action_message *msg) {
|
||||
int 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_neighbor_entry *entry = msg->entry;
|
||||
u_char actual_state = prefix->state;
|
||||
|
||||
if (entry == NULL) {
|
||||
if (entry == NULL)
|
||||
{
|
||||
entry = eigrp_neighbor_entry_new();
|
||||
entry->adv_router = msg->adv_router;
|
||||
entry->ei = msg->adv_router->ei;
|
||||
@ -199,49 +192,63 @@ int eigrp_get_fsm_event(struct eigrp_fsm_action_message *msg) {
|
||||
}
|
||||
|
||||
// Dividing by actual state of prefix's FSM
|
||||
switch (actual_state) {
|
||||
case EIGRP_FSM_STATE_PASSIVE: {
|
||||
switch (actual_state)
|
||||
{
|
||||
case EIGRP_FSM_STATE_PASSIVE:
|
||||
{
|
||||
//Calculate resultant metrics and insert to correct position in entries list
|
||||
eigrp_topology_update_distance(msg);
|
||||
|
||||
struct eigrp_neighbor_entry * head =
|
||||
(struct eigrp_neighbor_entry *) entry->prefix->entries->head->data;
|
||||
//zlog_info ("flag: %d rdist: %u dist: %u pfdist: %u pdist: %u", head->flags, head->reported_distance, head->distance, prefix->fdistance, prefix->distance);
|
||||
if (head->reported_distance < prefix->fdistance) {
|
||||
if (head->reported_distance < prefix->fdistance)
|
||||
{
|
||||
return EIGRP_FSM_KEEP_STATE;
|
||||
}
|
||||
/*
|
||||
* if best entry doesn't satisfy feasibility condition it means move to active state
|
||||
* dependently if it was query from successor
|
||||
*/
|
||||
else {
|
||||
if (msg->packet_type == EIGRP_OPC_QUERY) {
|
||||
else
|
||||
{
|
||||
if (msg->packet_type == EIGRP_OPC_QUERY)
|
||||
{
|
||||
return EIGRP_FSM_EVENT_Q_FCN;
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
return EIGRP_FSM_EVENT_NQ_FCN;
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
case EIGRP_FSM_STATE_ACTIVE_0: {
|
||||
case EIGRP_FSM_STATE_ACTIVE_0:
|
||||
{
|
||||
eigrp_topology_update_distance(msg);
|
||||
|
||||
if (msg->packet_type == EIGRP_OPC_REPLY) {
|
||||
listnode_delete(prefix->rij, entry->adv_router);
|
||||
if (prefix->rij->count) {
|
||||
if (prefix->rij->count)
|
||||
{
|
||||
return EIGRP_FSM_KEEP_STATE;
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
zlog_info("All reply received\n");
|
||||
if (((struct eigrp_neighbor_entry *) prefix->entries->head->data)->reported_distance
|
||||
< prefix->fdistance) {
|
||||
< prefix->fdistance)
|
||||
{
|
||||
return EIGRP_FSM_EVENT_LR_FCS;
|
||||
}
|
||||
|
||||
return EIGRP_FSM_EVENT_LR_FCN;
|
||||
}
|
||||
} else if (msg->packet_type == EIGRP_OPC_QUERY
|
||||
&& (entry->flags & EIGRP_NEIGHBOR_ENTRY_SUCCESSOR_FLAG)) {
|
||||
}
|
||||
else if (msg->packet_type == EIGRP_OPC_QUERY
|
||||
&& (entry->flags & EIGRP_NEIGHBOR_ENTRY_SUCCESSOR_FLAG))
|
||||
{
|
||||
return EIGRP_FSM_EVENT_QACT;
|
||||
}
|
||||
|
||||
@ -249,44 +256,60 @@ int eigrp_get_fsm_event(struct eigrp_fsm_action_message *msg) {
|
||||
|
||||
break;
|
||||
}
|
||||
case EIGRP_FSM_STATE_ACTIVE_1: {
|
||||
case EIGRP_FSM_STATE_ACTIVE_1:
|
||||
{
|
||||
int change = eigrp_topology_update_distance(msg);
|
||||
|
||||
if (msg->packet_type == EIGRP_OPC_QUERY
|
||||
&& (entry->flags & EIGRP_NEIGHBOR_ENTRY_SUCCESSOR_FLAG)) {
|
||||
&& (entry->flags & EIGRP_NEIGHBOR_ENTRY_SUCCESSOR_FLAG))
|
||||
{
|
||||
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);
|
||||
|
||||
if (change == 1
|
||||
&& (entry->flags & EIGRP_NEIGHBOR_ENTRY_SUCCESSOR_FLAG)) {
|
||||
&& (entry->flags & EIGRP_NEIGHBOR_ENTRY_SUCCESSOR_FLAG))
|
||||
{
|
||||
return EIGRP_FSM_EVENT_DINC;
|
||||
} else if (prefix->rij->count) {
|
||||
}
|
||||
else if (prefix->rij->count)
|
||||
{
|
||||
return EIGRP_FSM_KEEP_STATE;
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
zlog_info("All reply received\n");
|
||||
return EIGRP_FSM_EVENT_LR;
|
||||
}
|
||||
} else if (msg->packet_type == EIGRP_OPC_UPDATE && change == 1
|
||||
&& (entry->flags & EIGRP_NEIGHBOR_ENTRY_SUCCESSOR_FLAG)) {
|
||||
}
|
||||
else if (msg->packet_type == EIGRP_OPC_UPDATE && change == 1
|
||||
&& (entry->flags & EIGRP_NEIGHBOR_ENTRY_SUCCESSOR_FLAG))
|
||||
{
|
||||
return EIGRP_FSM_EVENT_DINC;
|
||||
}
|
||||
return EIGRP_FSM_KEEP_STATE;
|
||||
|
||||
break;
|
||||
}
|
||||
case EIGRP_FSM_STATE_ACTIVE_2: {
|
||||
|
||||
case EIGRP_FSM_STATE_ACTIVE_2:
|
||||
{
|
||||
eigrp_topology_update_distance(msg);
|
||||
|
||||
if (msg->packet_type == EIGRP_OPC_REPLY) {
|
||||
if (msg->packet_type == EIGRP_OPC_REPLY)
|
||||
{
|
||||
listnode_delete(prefix->rij, entry->adv_router);
|
||||
if (prefix->rij->count) {
|
||||
if (prefix->rij->count)
|
||||
{
|
||||
return EIGRP_FSM_KEEP_STATE;
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
zlog_info("All reply received\n");
|
||||
if (((struct eigrp_neighbor_entry *) prefix->entries->head->data)->reported_distance
|
||||
< prefix->fdistance) {
|
||||
< prefix->fdistance)
|
||||
{
|
||||
return EIGRP_FSM_EVENT_LR_FCS;
|
||||
}
|
||||
|
||||
@ -297,24 +320,32 @@ int eigrp_get_fsm_event(struct eigrp_fsm_action_message *msg) {
|
||||
|
||||
break;
|
||||
}
|
||||
case EIGRP_FSM_STATE_ACTIVE_3: {
|
||||
|
||||
case EIGRP_FSM_STATE_ACTIVE_3:
|
||||
{
|
||||
int change = eigrp_topology_update_distance(msg);
|
||||
|
||||
if (msg->packet_type == EIGRP_OPC_REPLY) {
|
||||
if (msg->packet_type == EIGRP_OPC_REPLY)
|
||||
{
|
||||
listnode_delete(prefix->rij, entry->adv_router);
|
||||
|
||||
if (change == 1
|
||||
&& (entry->flags & EIGRP_NEIGHBOR_ENTRY_SUCCESSOR_FLAG)) {
|
||||
&& (entry->flags & EIGRP_NEIGHBOR_ENTRY_SUCCESSOR_FLAG))
|
||||
{
|
||||
return EIGRP_FSM_EVENT_DINC;
|
||||
} else if (prefix->rij->count) {
|
||||
}
|
||||
else if (prefix->rij->count)
|
||||
{
|
||||
return EIGRP_FSM_KEEP_STATE;
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
zlog_info("All reply received\n");
|
||||
return EIGRP_FSM_EVENT_LR;
|
||||
}
|
||||
} else if (msg->packet_type == EIGRP_OPC_UPDATE && change == 1
|
||||
&& (entry->flags & EIGRP_NEIGHBOR_ENTRY_SUCCESSOR_FLAG)) {
|
||||
}
|
||||
else if (msg->packet_type == EIGRP_OPC_UPDATE && change == 1
|
||||
&& (entry->flags & EIGRP_NEIGHBOR_ENTRY_SUCCESSOR_FLAG))
|
||||
{
|
||||
return EIGRP_FSM_EVENT_DINC;
|
||||
}
|
||||
return EIGRP_FSM_KEEP_STATE;
|
||||
@ -330,19 +361,21 @@ int eigrp_get_fsm_event(struct eigrp_fsm_action_message *msg) {
|
||||
* Function made to execute in separate thread.
|
||||
* Load argument from thread and execute proper NSM function
|
||||
*/
|
||||
int eigrp_fsm_event(struct eigrp_fsm_action_message *msg, int event) {
|
||||
|
||||
int eigrp_fsm_event(struct eigrp_fsm_action_message *msg, int event)
|
||||
{
|
||||
zlog_info("EIGRP AS: %d State: %d Event: %d Network: %s\n", msg->eigrp->AS,
|
||||
msg->prefix->state, event, eigrp_topology_ip_string(msg->prefix));
|
||||
(*(NSM[msg->prefix->state][event].func))(msg);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
/*
|
||||
* Function of event 0.
|
||||
*
|
||||
*/
|
||||
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_prefix_entry *prefix = msg->prefix;
|
||||
struct list *successors = eigrp_topology_get_successor(prefix);
|
||||
@ -355,10 +388,13 @@ int eigrp_fsm_event_nq_fcn(struct eigrp_fsm_action_message *msg) {
|
||||
prefix->reported_metric =
|
||||
((struct eigrp_neighbor_entry *) successors->head->data)->total_metric;
|
||||
|
||||
if (eigrp_nbr_count_get()) {
|
||||
if (eigrp_nbr_count_get())
|
||||
{
|
||||
prefix->req_action |= EIGRP_FSM_NEED_QUERY;
|
||||
listnode_add(eigrp->topology_changes_internalIPV4,prefix);
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
eigrp_fsm_event_lr(msg); //in the case that there are no more neighbors left
|
||||
}
|
||||
|
||||
@ -367,7 +403,8 @@ int eigrp_fsm_event_nq_fcn(struct eigrp_fsm_action_message *msg) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
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_prefix_entry *prefix = msg->prefix;
|
||||
struct list *successors = eigrp_topology_get_successor(prefix);
|
||||
@ -379,10 +416,13 @@ int eigrp_fsm_event_q_fcn(struct eigrp_fsm_action_message *msg) {
|
||||
((struct eigrp_neighbor_entry *) successors->head->data)->distance;
|
||||
prefix->reported_metric =
|
||||
((struct eigrp_neighbor_entry *) successors->head->data)->total_metric;
|
||||
if (eigrp_nbr_count_get()) {
|
||||
if (eigrp_nbr_count_get())
|
||||
{
|
||||
prefix->req_action |= EIGRP_FSM_NEED_QUERY;
|
||||
listnode_add(eigrp->topology_changes_internalIPV4,prefix);
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
eigrp_fsm_event_lr(msg); //in the case that there are no more neighbors left
|
||||
}
|
||||
|
||||
@ -391,13 +431,15 @@ int eigrp_fsm_event_q_fcn(struct eigrp_fsm_action_message *msg) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
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_prefix_entry *prefix = msg->prefix;
|
||||
|
||||
if (prefix->state == EIGRP_FSM_STATE_PASSIVE) {
|
||||
if (prefix->state == EIGRP_FSM_STATE_PASSIVE)
|
||||
{
|
||||
if (!eigrp_metrics_is_same(&prefix->reported_metric,
|
||||
&((struct eigrp_neighbor_entry *) prefix->entries->head->data)->total_metric)) {
|
||||
&((struct eigrp_neighbor_entry *) prefix->entries->head->data)->total_metric))
|
||||
{
|
||||
prefix->rdistance =
|
||||
prefix->fdistance =
|
||||
prefix->distance =
|
||||
@ -419,7 +461,8 @@ int eigrp_fsm_event_keep_state(struct eigrp_fsm_action_message *msg) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
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_prefix_entry *prefix = msg->prefix;
|
||||
prefix->fdistance =
|
||||
@ -429,7 +472,8 @@ int eigrp_fsm_event_lr(struct eigrp_fsm_action_message *msg) {
|
||||
prefix->reported_metric =
|
||||
((struct eigrp_neighbor_entry *) (prefix->entries->head->data))->total_metric;
|
||||
|
||||
if (prefix->state == EIGRP_FSM_STATE_ACTIVE_3) {
|
||||
if (prefix->state == EIGRP_FSM_STATE_ACTIVE_3)
|
||||
{
|
||||
struct list *successors = eigrp_topology_get_successor(prefix);
|
||||
|
||||
assert(successors); // It's like Napolean and Waterloo
|
||||
@ -448,7 +492,8 @@ int eigrp_fsm_event_lr(struct eigrp_fsm_action_message *msg) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
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);
|
||||
|
||||
assert(successors); // Trump and his big hands
|
||||
@ -456,16 +501,18 @@ int eigrp_fsm_event_dinc(struct eigrp_fsm_action_message *msg) {
|
||||
msg->prefix->state =
|
||||
msg->prefix->state == EIGRP_FSM_STATE_ACTIVE_1 ?
|
||||
EIGRP_FSM_STATE_ACTIVE_0 : EIGRP_FSM_STATE_ACTIVE_2;
|
||||
msg->prefix->distance = ((struct eigrp_neighbor_entry *)successors->head->data)->distance;
|
||||
if (!msg->prefix->rij->count) {
|
||||
msg->prefix->distance =
|
||||
((struct eigrp_neighbor_entry *)successors->head->data)->distance;
|
||||
if (!msg->prefix->rij->count)
|
||||
(*(NSM[msg->prefix->state][eigrp_get_fsm_event(msg)].func))(msg);
|
||||
}
|
||||
|
||||
|
||||
list_delete(successors);
|
||||
return 1;
|
||||
}
|
||||
|
||||
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_prefix_entry *prefix = msg->prefix;
|
||||
prefix->state = EIGRP_FSM_STATE_PASSIVE;
|
||||
@ -477,7 +524,8 @@ int eigrp_fsm_event_lr_fcs(struct eigrp_fsm_action_message *msg) {
|
||||
prefix->fdistance =
|
||||
prefix->fdistance > prefix->distance ?
|
||||
prefix->distance : prefix->fdistance;
|
||||
if (prefix->state == EIGRP_FSM_STATE_ACTIVE_2) {
|
||||
if (prefix->state == EIGRP_FSM_STATE_ACTIVE_2)
|
||||
{
|
||||
struct list *successors = eigrp_topology_get_successor(prefix);
|
||||
|
||||
assert(successors); // Having a spoon and all you need is a knife
|
||||
@ -495,7 +543,8 @@ int eigrp_fsm_event_lr_fcs(struct eigrp_fsm_action_message *msg) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
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_prefix_entry *prefix = msg->prefix;
|
||||
struct list *successors = eigrp_topology_get_successor(prefix);
|
||||
@ -509,10 +558,14 @@ int eigrp_fsm_event_lr_fcn(struct eigrp_fsm_action_message *msg) {
|
||||
((struct eigrp_neighbor_entry *) (successors->head->data));
|
||||
prefix->rdistance = prefix->distance = best_successor->distance;
|
||||
prefix->reported_metric = best_successor->total_metric;
|
||||
if (eigrp_nbr_count_get()) {
|
||||
|
||||
if (eigrp_nbr_count_get())
|
||||
{
|
||||
prefix->req_action |= EIGRP_FSM_NEED_QUERY;
|
||||
listnode_add(eigrp->topology_changes_internalIPV4,prefix);
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
eigrp_fsm_event_lr(msg); //in the case that there are no more neighbors left
|
||||
}
|
||||
|
||||
@ -521,7 +574,8 @@ int eigrp_fsm_event_lr_fcn(struct eigrp_fsm_action_message *msg) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
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);
|
||||
|
||||
assert(successors); // Cats and no Dogs
|
||||
|
@ -157,7 +157,7 @@ eigrp_hello_parameter_decode (struct eigrp_neighbor *nbr,
|
||||
/* Expedited hello sent */
|
||||
eigrp_hello_send(nbr->ei, EIGRP_HELLO_NORMAL, NULL);
|
||||
|
||||
// if(ntohl(nbr->ei->address->u.prefix4.s_addr) > ntohl(nbr->src.s_addr))
|
||||
// if(ntohl(nbr->ei->address->u.prefix4.s_addr) > ntohl(nbr->src.s_addr))
|
||||
eigrp_update_send_init(nbr);
|
||||
|
||||
eigrp_nbr_state_set(nbr, EIGRP_NEIGHBOR_PENDING);
|
||||
@ -184,9 +184,9 @@ eigrp_hello_parameter_decode (struct eigrp_neighbor *nbr,
|
||||
}
|
||||
|
||||
static u_char
|
||||
eigrp_hello_authentication_decode(struct stream *s, struct eigrp_tlv_hdr_type *tlv_header, struct eigrp_neighbor *nbr)
|
||||
eigrp_hello_authentication_decode(struct stream *s, struct eigrp_tlv_hdr_type *tlv_header,
|
||||
struct eigrp_neighbor *nbr)
|
||||
{
|
||||
|
||||
struct TLV_MD5_Authentication_Type *md5;
|
||||
|
||||
md5 = (struct TLV_MD5_Authentication_Type *) tlv_header;
|
||||
@ -194,7 +194,8 @@ eigrp_hello_authentication_decode(struct stream *s, struct eigrp_tlv_hdr_type *t
|
||||
if(md5->auth_type == EIGRP_AUTH_TYPE_MD5)
|
||||
return eigrp_check_md5_digest(s, md5, nbr, EIGRP_AUTH_BASIC_HELLO_FLAG);
|
||||
else if (md5->auth_type == EIGRP_AUTH_TYPE_SHA256)
|
||||
return eigrp_check_sha256_digest(s, (struct TLV_SHA256_Authentication_Type *) tlv_header, nbr, EIGRP_AUTH_BASIC_HELLO_FLAG);
|
||||
return eigrp_check_sha256_digest(s, (struct TLV_SHA256_Authentication_Type *)tlv_header,
|
||||
nbr, EIGRP_AUTH_BASIC_HELLO_FLAG);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -392,7 +393,6 @@ eigrp_hello_receive (struct eigrp *eigrp, struct ip *iph, struct eigrp_header *e
|
||||
|
||||
if (IS_DEBUG_EIGRP_PACKET(0, RECV))
|
||||
zlog_debug("Hello Packet received from %s", inet_ntoa(nbr->src));
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
@ -605,7 +605,8 @@ eigrp_hello_parameter_encode (struct eigrp_interface *ei, struct stream *s, u_ch
|
||||
*
|
||||
*/
|
||||
static struct eigrp_packet *
|
||||
eigrp_hello_encode (struct eigrp_interface *ei, in_addr_t addr, u_int32_t ack, u_char flags, struct in_addr *nbr_addr)
|
||||
eigrp_hello_encode (struct eigrp_interface *ei, in_addr_t addr, u_int32_t ack,
|
||||
u_char flags, struct in_addr *nbr_addr)
|
||||
{
|
||||
struct eigrp_packet *ep;
|
||||
u_int16_t length = EIGRP_HEADER_LEN;
|
||||
@ -619,11 +620,13 @@ eigrp_hello_encode (struct eigrp_interface *ei, in_addr_t addr, u_int32_t ack, u
|
||||
eigrp_packet_header_init(EIGRP_OPC_HELLO, ei, ep->s, 0, 0, ack);
|
||||
|
||||
// encode Authentication TLV
|
||||
if((IF_DEF_PARAMS (ei->ifp)->auth_type == EIGRP_AUTH_TYPE_MD5) && (IF_DEF_PARAMS (ei->ifp)->auth_keychain != NULL))
|
||||
if((IF_DEF_PARAMS (ei->ifp)->auth_type == EIGRP_AUTH_TYPE_MD5) &&
|
||||
(IF_DEF_PARAMS (ei->ifp)->auth_keychain != NULL))
|
||||
{
|
||||
length += eigrp_add_authTLV_MD5_to_stream(ep->s,ei);
|
||||
}
|
||||
else if((IF_DEF_PARAMS (ei->ifp)->auth_type == EIGRP_AUTH_TYPE_SHA256) && (IF_DEF_PARAMS (ei->ifp)->auth_keychain != NULL))
|
||||
else if((IF_DEF_PARAMS (ei->ifp)->auth_type == EIGRP_AUTH_TYPE_SHA256) &&
|
||||
(IF_DEF_PARAMS (ei->ifp)->auth_keychain != NULL))
|
||||
{
|
||||
length += eigrp_add_authTLV_SHA256_to_stream(ep->s,ei);
|
||||
}
|
||||
@ -656,11 +659,13 @@ eigrp_hello_encode (struct eigrp_interface *ei, in_addr_t addr, u_int32_t ack, u
|
||||
// set soruce address for the hello packet
|
||||
ep->dst.s_addr = addr;
|
||||
|
||||
if((IF_DEF_PARAMS (ei->ifp)->auth_type == EIGRP_AUTH_TYPE_MD5) && (IF_DEF_PARAMS (ei->ifp)->auth_keychain != NULL))
|
||||
if((IF_DEF_PARAMS (ei->ifp)->auth_type == EIGRP_AUTH_TYPE_MD5) &&
|
||||
(IF_DEF_PARAMS (ei->ifp)->auth_keychain != NULL))
|
||||
{
|
||||
eigrp_make_md5_digest(ei,ep->s, EIGRP_AUTH_BASIC_HELLO_FLAG);
|
||||
}
|
||||
else if((IF_DEF_PARAMS (ei->ifp)->auth_type == EIGRP_AUTH_TYPE_SHA256) && (IF_DEF_PARAMS (ei->ifp)->auth_keychain != NULL))
|
||||
else if((IF_DEF_PARAMS (ei->ifp)->auth_type == EIGRP_AUTH_TYPE_SHA256) &&
|
||||
(IF_DEF_PARAMS (ei->ifp)->auth_keychain != NULL))
|
||||
{
|
||||
eigrp_make_sha256_digest(ei,ep->s, EIGRP_AUTH_BASIC_HELLO_FLAG);
|
||||
}
|
||||
|
@ -138,7 +138,6 @@ eigrp_if_table_lookup (struct interface *ifp, struct prefix *prefix)
|
||||
int
|
||||
eigrp_if_delete_hook (struct interface *ifp)
|
||||
{
|
||||
|
||||
struct route_node *rn;
|
||||
|
||||
route_table_finish (IF_OIFS (ifp));
|
||||
@ -222,7 +221,6 @@ eigrp_new_if_params (void)
|
||||
UNSET_IF_PARAM (eip, auth_keychain);
|
||||
UNSET_IF_PARAM (eip, auth_type);
|
||||
|
||||
|
||||
return eip;
|
||||
}
|
||||
|
||||
@ -597,7 +595,6 @@ eigrp_bandwidth_to_scaled (u_int32_t bandwidth)
|
||||
temp_bandwidth < EIGRP_MAX_METRIC ? temp_bandwidth : EIGRP_MAX_METRIC;
|
||||
|
||||
return (u_int32_t) temp_bandwidth;
|
||||
|
||||
}
|
||||
|
||||
u_int32_t
|
||||
|
@ -91,9 +91,9 @@ struct zebra_privs_t eigrpd_privs =
|
||||
|
||||
/* EIGRPd options. */
|
||||
struct option longopts[] =
|
||||
{
|
||||
{
|
||||
{ 0 }
|
||||
};
|
||||
};
|
||||
|
||||
/* Master of threads. */
|
||||
struct thread_master *master;
|
||||
|
@ -67,7 +67,6 @@ eigrp_nbr_new (struct eigrp_interface *ei)
|
||||
nbr->ei = ei;
|
||||
|
||||
/* Set default values. */
|
||||
|
||||
eigrp_nbr_state_set (nbr, EIGRP_NEIGHBOR_DOWN);
|
||||
|
||||
return nbr;
|
||||
@ -89,9 +88,9 @@ eigrp_nbr_add (struct eigrp_interface *ei, struct eigrp_header *eigrph,
|
||||
nbr = eigrp_nbr_new (ei);
|
||||
nbr->src = iph->ip_src;
|
||||
|
||||
// if (IS_DEBUG_EIGRP_EVENT)
|
||||
// zlog_debug("NSM[%s:%s]: start", IF_NAME (nbr->oi),
|
||||
// inet_ntoa (nbr->router_id));
|
||||
// if (IS_DEBUG_EIGRP_EVENT)
|
||||
// zlog_debug("NSM[%s:%s]: start", IF_NAME (nbr->oi),
|
||||
// inet_ntoa (nbr->router_id));
|
||||
|
||||
return nbr;
|
||||
}
|
||||
@ -187,7 +186,6 @@ eigrp_nbr_lookup_by_addr_process (struct eigrp *eigrp, struct in_addr nbr_addr)
|
||||
void
|
||||
eigrp_nbr_delete (struct eigrp_neighbor *nbr)
|
||||
{
|
||||
|
||||
eigrp_nbr_state_set(nbr, EIGRP_NEIGHBOR_DOWN);
|
||||
eigrp_topology_neighbor_down(nbr->ei->eigrp, nbr);
|
||||
|
||||
@ -225,7 +223,6 @@ eigrp_nbr_state_get (struct eigrp_neighbor *nbr)
|
||||
void
|
||||
eigrp_nbr_state_set (struct eigrp_neighbor *nbr, u_char state)
|
||||
{
|
||||
|
||||
nbr->state = state;
|
||||
|
||||
if (eigrp_nbr_state_get(nbr) == EIGRP_NEIGHBOR_DOWN)
|
||||
@ -292,9 +289,9 @@ eigrp_nbr_state_update (struct eigrp_neighbor *nbr)
|
||||
case EIGRP_NEIGHBOR_DOWN:
|
||||
{
|
||||
/*Start Hold Down Timer for neighbor*/
|
||||
// THREAD_OFF(nbr->t_holddown);
|
||||
// THREAD_TIMER_ON(master, nbr->t_holddown, holddown_timer_expired,
|
||||
// nbr, nbr->v_holddown);
|
||||
// THREAD_OFF(nbr->t_holddown);
|
||||
// THREAD_TIMER_ON(master, nbr->t_holddown, holddown_timer_expired,
|
||||
// nbr, nbr->v_holddown);
|
||||
break;
|
||||
}
|
||||
case EIGRP_NEIGHBOR_PENDING:
|
||||
@ -317,7 +314,6 @@ eigrp_nbr_state_update (struct eigrp_neighbor *nbr)
|
||||
}
|
||||
|
||||
int eigrp_nbr_count_get(void){
|
||||
|
||||
struct eigrp_interface *iface;
|
||||
struct listnode *node, *node2, *nnode2;
|
||||
struct eigrp_neighbor *nbr;
|
||||
|
@ -132,6 +132,7 @@ eigrp_adjust_sndbuflen(struct eigrp * eigrp, unsigned int buflen)
|
||||
return;
|
||||
if (eigrpd_privs.change(ZPRIVS_RAISE))
|
||||
zlog_err("%s: could not raise privs, %s", __func__, safe_strerror(errno));
|
||||
|
||||
/* Now we try to set SO_SNDBUF to what our caller has requested
|
||||
* (the MTU of a newly added interface). However, if the OS has
|
||||
* truncated the actual buffer size to somewhat less size, try
|
||||
@ -230,7 +231,6 @@ eigrp_network_set(struct eigrp *eigrp, struct prefix_ipv4 *p)
|
||||
struct interface *ifp;
|
||||
struct listnode *node;
|
||||
|
||||
zlog_debug ("A");
|
||||
rn = route_node_get(eigrp->networks, (struct prefix *) p);
|
||||
if (rn->info)
|
||||
{
|
||||
@ -243,10 +243,9 @@ eigrp_network_set(struct eigrp *eigrp, struct prefix_ipv4 *p)
|
||||
PREFIX_COPY_IPV4(pref,p);
|
||||
rn->info = (void *) pref;
|
||||
|
||||
zlog_debug ("B");
|
||||
/* Schedule Router ID Update. */
|
||||
// if (eigrp->router_id == 0)
|
||||
// eigrp_router_id_update(eigrp);
|
||||
// if (eigrp->router_id == 0)
|
||||
// eigrp_router_id_update(eigrp);
|
||||
/* Run network config now. */
|
||||
/* Get target interface. */
|
||||
for (ALL_LIST_ELEMENTS_RO(vrf_iflist(VRF_DEFAULT), node, ifp))
|
||||
@ -373,7 +372,6 @@ eigrp_network_unset(struct eigrp *eigrp, struct prefix_ipv4 *p)
|
||||
|
||||
if (eigrp_network_match_iface(co, &rn->p))
|
||||
{
|
||||
zlog_debug("eigrp_network_unset()2");
|
||||
found = 1;
|
||||
route_unlock_node(rn);
|
||||
break;
|
||||
@ -454,10 +452,10 @@ eigrp_metrics_is_same(struct eigrp_metrics *metric1,
|
||||
|
||||
return 0; // if different
|
||||
}
|
||||
|
||||
void
|
||||
eigrp_external_routes_refresh (struct eigrp *eigrp, int type)
|
||||
{
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
@ -59,18 +59,19 @@
|
||||
|
||||
/* Packet Type String. */
|
||||
const struct message eigrp_packet_type_str[] =
|
||||
{
|
||||
{ EIGRP_OPC_UPDATE, "Update" },
|
||||
{ EIGRP_OPC_REQUEST, "Request" },
|
||||
{ EIGRP_OPC_QUERY, "Query" },
|
||||
{ EIGRP_OPC_REPLY, "Reply" },
|
||||
{ EIGRP_OPC_HELLO, "Hello" },
|
||||
{ EIGRP_OPC_IPXSAP, "IPX-SAP" },
|
||||
{ EIGRP_OPC_PROBE, "Probe" },
|
||||
{ EIGRP_OPC_ACK, "Ack" },
|
||||
{ EIGRP_OPC_SIAQUERY, "SIAQuery" },
|
||||
{ EIGRP_OPC_SIAREPLY, "SIAReply" },
|
||||
{
|
||||
{ EIGRP_OPC_UPDATE, "Update"},
|
||||
{ EIGRP_OPC_REQUEST, "Request"},
|
||||
{ EIGRP_OPC_QUERY, "Query"},
|
||||
{ EIGRP_OPC_REPLY, "Reply"},
|
||||
{ EIGRP_OPC_HELLO, "Hello"},
|
||||
{ EIGRP_OPC_IPXSAP, "IPX-SAP"},
|
||||
{ EIGRP_OPC_PROBE, "Probe"},
|
||||
{ EIGRP_OPC_ACK, "Ack"},
|
||||
{ EIGRP_OPC_SIAQUERY, "SIAQuery"},
|
||||
{ EIGRP_OPC_SIAREPLY, "SIAReply"},
|
||||
};
|
||||
|
||||
const size_t eigrp_packet_type_str_max = sizeof(eigrp_packet_type_str) /
|
||||
sizeof(eigrp_packet_type_str[0]);
|
||||
|
||||
@ -82,7 +83,6 @@ static int eigrp_verify_header (struct stream *, struct eigrp_interface *, struc
|
||||
struct eigrp_header *);
|
||||
static int eigrp_check_network_mask (struct eigrp_interface *, struct in_addr);
|
||||
|
||||
|
||||
static int eigrp_retrans_count_exceeded(struct eigrp_packet *ep, struct eigrp_neighbor *nbr)
|
||||
{
|
||||
return 1;
|
||||
@ -146,7 +146,6 @@ eigrp_make_md5_digest (struct eigrp_interface *ei, struct stream *s, u_char flag
|
||||
|
||||
MD5Final(digest, &ctx);
|
||||
|
||||
|
||||
/* Append md5 digest to the end of the stream. */
|
||||
memcpy(auth_TLV->digest,digest,EIGRP_AUTH_TYPE_MD5_LEN);
|
||||
|
||||
@ -159,7 +158,8 @@ eigrp_make_md5_digest (struct eigrp_interface *ei, struct stream *s, u_char flag
|
||||
}
|
||||
|
||||
int
|
||||
eigrp_check_md5_digest (struct stream *s, struct TLV_MD5_Authentication_Type *authTLV,struct eigrp_neighbor *nbr, u_char flags)
|
||||
eigrp_check_md5_digest (struct stream *s,
|
||||
struct TLV_MD5_Authentication_Type *authTLV,struct eigrp_neighbor *nbr, u_char flags)
|
||||
{
|
||||
MD5_CTX ctx;
|
||||
unsigned char digest[EIGRP_AUTH_TYPE_MD5_LEN];
|
||||
@ -170,7 +170,6 @@ eigrp_check_md5_digest (struct stream *s, struct TLV_MD5_Authentication_Type *au
|
||||
struct TLV_MD5_Authentication_Type *auth_TLV;
|
||||
struct eigrp_header *eigrph;
|
||||
|
||||
|
||||
if (nbr && ntohl(nbr->crypt_seqnum) > ntohl(authTLV->key_sequence))
|
||||
{
|
||||
zlog_warn ("interface %s: eigrp_check_md5 bad sequence %d (expect %d)",
|
||||
@ -270,8 +269,8 @@ eigrp_make_sha256_digest (struct eigrp_interface *ei, struct stream *s, u_char f
|
||||
if(keychain)
|
||||
key = key_lookup_for_send(keychain);
|
||||
|
||||
// saved_len[index] = strnzcpyn(saved_key[index], key,
|
||||
// PLAINTEXT_LENGTH + 1);
|
||||
// saved_len[index] = strnzcpyn(saved_key[index], key,
|
||||
// PLAINTEXT_LENGTH + 1);
|
||||
|
||||
source_ip = calloc(16, sizeof(char));
|
||||
inet_ntop(AF_INET, &ei->address->u.prefix4, source_ip, 16);
|
||||
@ -299,11 +298,13 @@ eigrp_make_sha256_digest (struct eigrp_interface *ei, struct stream *s, u_char f
|
||||
}
|
||||
|
||||
int
|
||||
eigrp_check_sha256_digest (struct stream *s, struct TLV_SHA256_Authentication_Type *authTLV,struct eigrp_neighbor *nbr, u_char flags)
|
||||
eigrp_check_sha256_digest (struct stream *s,
|
||||
struct TLV_SHA256_Authentication_Type *authTLV,
|
||||
struct eigrp_neighbor *nbr, u_char flags)
|
||||
{
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
/*
|
||||
* eigrp_packet_dump
|
||||
*
|
||||
@ -317,27 +318,6 @@ eigrp_packet_dump (struct stream *s)
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
* Converts a 24-bit integer represented as an unsigned char[3] *value
|
||||
* in network byte order into uint32_t in host byte order
|
||||
*/
|
||||
//static uint32_t u24_32 (const unsigned char *value)
|
||||
//{
|
||||
// return (value[0] << 16) + (value[1] << 8) + value[2];
|
||||
//}
|
||||
//
|
||||
///*
|
||||
// * Converts an uint32_t value in host byte order into a 24-bit integer
|
||||
// * in network byte order represented by unsigned char[3] *result
|
||||
// */
|
||||
//static unsigned char * u32_24 (uint32_t value, unsigned char *result)
|
||||
//{
|
||||
// value = htonl(value & 0x00FFFFFF);
|
||||
// memcpy (result, (unsigned char *) &value + 1, 3);
|
||||
//
|
||||
// return result;
|
||||
//}
|
||||
|
||||
int
|
||||
eigrp_write (struct thread *thread)
|
||||
{
|
||||
@ -561,8 +541,8 @@ eigrp_read (struct thread *thread)
|
||||
if (IS_DEBUG_EIGRP_TRANSMIT(0, RECV) && IS_DEBUG_EIGRP_TRANSMIT(0, PACKET_DETAIL))
|
||||
eigrp_header_dump(eigrph);
|
||||
|
||||
// if (MSG_OK != eigrp_packet_examin(eigrph, stream_get_endp(ibuf) - stream_get_getp(ibuf)))
|
||||
// return -1;
|
||||
// if (MSG_OK != eigrp_packet_examin(eigrph, stream_get_endp(ibuf) - stream_get_getp(ibuf)))
|
||||
// return -1;
|
||||
|
||||
/* Now it is safe to access all fields of EIGRP packet header. */
|
||||
/* associate packet with eigrp interface */
|
||||
@ -634,7 +614,6 @@ eigrp_read (struct thread *thread)
|
||||
/* Read rest of the packet and call each sort of packet routine. */
|
||||
stream_forward_getp(ibuf, EIGRP_HEADER_LEN);
|
||||
|
||||
|
||||
/* New testing block of code for handling Acks */
|
||||
if (ntohl(eigrph->ack) != 0)
|
||||
{
|
||||
@ -650,7 +629,8 @@ eigrp_read (struct thread *thread)
|
||||
{
|
||||
if (ntohl(eigrph->ack) == ep->sequence_number)
|
||||
{
|
||||
if((nbr->state == EIGRP_NEIGHBOR_PENDING) && (ntohl(eigrph->ack) == nbr->init_sequence_number))
|
||||
if((nbr->state == EIGRP_NEIGHBOR_PENDING) &&
|
||||
(ntohl(eigrph->ack) == nbr->init_sequence_number))
|
||||
{
|
||||
eigrp_nbr_state_set(nbr, EIGRP_NEIGHBOR_UP);
|
||||
zlog_info("Neighbor adjacency became full");
|
||||
@ -914,8 +894,8 @@ eigrp_packet_header_init (int type, struct eigrp_interface *ei, struct stream *s
|
||||
eigrph->ASNumber = htons(ei->eigrp->AS);
|
||||
eigrph->ack = htonl(ack);
|
||||
eigrph->sequence = htonl(sequence);
|
||||
// if(flags == EIGRP_INIT_FLAG)
|
||||
// eigrph->sequence = htonl(3);
|
||||
// if(flags == EIGRP_INIT_FLAG)
|
||||
// eigrph->sequence = htonl(3);
|
||||
eigrph->flags = htonl(flags);
|
||||
|
||||
if (IS_DEBUG_EIGRP_TRANSMIT(0, RECV))
|
||||
@ -1009,7 +989,6 @@ static int
|
||||
eigrp_verify_header (struct stream *ibuf, struct eigrp_interface *ei,
|
||||
struct ip *iph, struct eigrp_header *eigrph)
|
||||
{
|
||||
|
||||
/* Check network mask, Silently discarded. */
|
||||
if (!eigrp_check_network_mask(ei, iph->ip_src))
|
||||
{
|
||||
@ -1017,10 +996,10 @@ eigrp_verify_header (struct stream *ibuf, struct eigrp_interface *ei,
|
||||
IF_NAME(ei), inet_ntoa(iph->ip_src));
|
||||
return -1;
|
||||
}
|
||||
//
|
||||
// /* Check authentication. The function handles logging actions, where required. */
|
||||
// if (! eigrp_check_auth(ei, eigrph))
|
||||
// return -1;
|
||||
//
|
||||
// /* Check authentication. The function handles logging actions, where required. */
|
||||
// if (! eigrp_check_auth(ei, eigrph))
|
||||
// return -1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -1189,7 +1168,6 @@ eigrp_read_ipv4_tlv (struct stream *s)
|
||||
{
|
||||
tlv->destination_part[0] = stream_getc(s);
|
||||
tlv->destination.s_addr = (tlv->destination_part[0]);
|
||||
|
||||
}
|
||||
else if (tlv->prefix_length > 8 && tlv->prefix_length <= 16)
|
||||
{
|
||||
@ -1203,8 +1181,9 @@ eigrp_read_ipv4_tlv (struct stream *s)
|
||||
tlv->destination_part[0] = stream_getc(s);
|
||||
tlv->destination_part[1] = stream_getc(s);
|
||||
tlv->destination_part[2] = stream_getc(s);
|
||||
tlv->destination.s_addr = ((tlv->destination_part[2] << 16)
|
||||
+ (tlv->destination_part[1] << 8) + tlv->destination_part[0]);
|
||||
tlv->destination.s_addr = ((tlv->destination_part[2] << 16) +
|
||||
(tlv->destination_part[1] << 8) +
|
||||
tlv->destination_part[0]);
|
||||
}
|
||||
else if (tlv->prefix_length > 24 && tlv->prefix_length <= 32)
|
||||
{
|
||||
@ -1212,9 +1191,10 @@ eigrp_read_ipv4_tlv (struct stream *s)
|
||||
tlv->destination_part[1] = stream_getc(s);
|
||||
tlv->destination_part[2] = stream_getc(s);
|
||||
tlv->destination_part[3] = stream_getc(s);
|
||||
tlv->destination.s_addr = ((tlv->destination_part[3] << 24)
|
||||
+ (tlv->destination_part[2] << 16) + (tlv->destination_part[1] << 8)
|
||||
+ tlv->destination_part[0]);
|
||||
tlv->destination.s_addr = ((tlv->destination_part[3] << 24) +
|
||||
(tlv->destination_part[2] << 16) +
|
||||
(tlv->destination_part[1] << 8) +
|
||||
tlv->destination_part[0]);
|
||||
}
|
||||
return tlv;
|
||||
}
|
||||
@ -1310,7 +1290,6 @@ eigrp_add_authTLV_MD5_to_stream (struct stream *s,
|
||||
authTLV->key_sequence = 0;
|
||||
memset(authTLV->Nullpad,0,sizeof(authTLV->Nullpad));
|
||||
|
||||
|
||||
keychain = keychain_lookup(IF_DEF_PARAMS (ei->ifp)->auth_keychain);
|
||||
if(keychain)
|
||||
key = key_lookup_for_send(keychain);
|
||||
@ -1353,7 +1332,6 @@ eigrp_add_authTLV_SHA256_to_stream (struct stream *s,
|
||||
authTLV->key_sequence = 0;
|
||||
memset(authTLV->Nullpad,0,sizeof(authTLV->Nullpad));
|
||||
|
||||
|
||||
keychain = keychain_lookup(IF_DEF_PARAMS (ei->ifp)->auth_keychain);
|
||||
if(keychain)
|
||||
key = key_lookup_for_send(keychain);
|
||||
@ -1377,7 +1355,6 @@ eigrp_add_authTLV_SHA256_to_stream (struct stream *s,
|
||||
eigrp_authTLV_SHA256_free(authTLV);
|
||||
|
||||
return 0;
|
||||
|
||||
}
|
||||
|
||||
struct TLV_MD5_Authentication_Type *
|
||||
@ -1393,7 +1370,6 @@ eigrp_authTLV_MD5_new ()
|
||||
void
|
||||
eigrp_authTLV_MD5_free (struct TLV_MD5_Authentication_Type *authTLV)
|
||||
{
|
||||
|
||||
XFREE(MTYPE_EIGRP_AUTH_TLV, authTLV);
|
||||
}
|
||||
|
||||
@ -1410,11 +1386,9 @@ eigrp_authTLV_SHA256_new ()
|
||||
void
|
||||
eigrp_authTLV_SHA256_free (struct TLV_SHA256_Authentication_Type *authTLV)
|
||||
{
|
||||
|
||||
XFREE(MTYPE_EIGRP_AUTH_SHA256_TLV, authTLV);
|
||||
}
|
||||
|
||||
|
||||
struct TLV_IPv4_Internal_type *
|
||||
eigrp_IPv4_InternalTLV_new ()
|
||||
{
|
||||
@ -1428,7 +1402,6 @@ eigrp_IPv4_InternalTLV_new ()
|
||||
void
|
||||
eigrp_IPv4_InternalTLV_free (struct TLV_IPv4_Internal_type *IPv4_InternalTLV)
|
||||
{
|
||||
|
||||
XFREE(MTYPE_EIGRP_IPV4_INT_TLV, IPv4_InternalTLV);
|
||||
}
|
||||
|
||||
|
@ -122,8 +122,8 @@ eigrp_query_receive (struct eigrp *eigrp, struct ip *iph, struct eigrp_header *e
|
||||
dest_addr = prefix_ipv4_new();
|
||||
dest_addr->prefix = tlv->destination;
|
||||
dest_addr->prefixlen = tlv->prefix_length;
|
||||
struct eigrp_prefix_entry *dest = eigrp_topology_table_lookup_ipv4(
|
||||
eigrp->topology_table, dest_addr);
|
||||
struct eigrp_prefix_entry *dest =
|
||||
eigrp_topology_table_lookup_ipv4(eigrp->topology_table, dest_addr);
|
||||
|
||||
/* If the destination exists (it should, but one never know)*/
|
||||
if (dest != NULL)
|
||||
@ -131,8 +131,8 @@ eigrp_query_receive (struct eigrp *eigrp, struct ip *iph, struct eigrp_header *e
|
||||
struct eigrp_fsm_action_message *msg;
|
||||
msg = XCALLOC(MTYPE_EIGRP_FSM_MSG,
|
||||
sizeof(struct eigrp_fsm_action_message));
|
||||
struct eigrp_neighbor_entry *entry = eigrp_prefix_entry_lookup(
|
||||
dest->entries, nbr);
|
||||
struct eigrp_neighbor_entry *entry =
|
||||
eigrp_prefix_entry_lookup(dest->entries, nbr);
|
||||
msg->packet_type = EIGRP_OPC_QUERY;
|
||||
msg->eigrp = eigrp;
|
||||
msg->data_type = EIGRP_TLV_IPv4_INT;
|
||||
@ -168,7 +168,8 @@ eigrp_send_query (struct eigrp_interface *ei)
|
||||
ei->eigrp->sequence_number, 0);
|
||||
|
||||
// encode Authentication TLV, if needed
|
||||
if((IF_DEF_PARAMS (ei->ifp)->auth_type == EIGRP_AUTH_TYPE_MD5) && (IF_DEF_PARAMS (ei->ifp)->auth_keychain != NULL))
|
||||
if((IF_DEF_PARAMS (ei->ifp)->auth_type == EIGRP_AUTH_TYPE_MD5) &&
|
||||
(IF_DEF_PARAMS (ei->ifp)->auth_keychain != NULL))
|
||||
{
|
||||
length += eigrp_add_authTLV_MD5_to_stream(ep->s,ei);
|
||||
}
|
||||
@ -196,7 +197,8 @@ eigrp_send_query (struct eigrp_interface *ei)
|
||||
return;
|
||||
}
|
||||
|
||||
if((IF_DEF_PARAMS (ei->ifp)->auth_type == EIGRP_AUTH_TYPE_MD5) && (IF_DEF_PARAMS (ei->ifp)->auth_keychain != NULL))
|
||||
if((IF_DEF_PARAMS (ei->ifp)->auth_type == EIGRP_AUTH_TYPE_MD5) &&
|
||||
(IF_DEF_PARAMS (ei->ifp)->auth_keychain != NULL))
|
||||
{
|
||||
eigrp_make_md5_digest(ei,ep->s, EIGRP_AUTH_UPDATE_FLAG);
|
||||
}
|
||||
|
@ -89,7 +89,8 @@ eigrp_send_reply (struct eigrp_neighbor *nbr, struct eigrp_prefix_entry *pe)
|
||||
|
||||
zlog_info("REPLY SEND Prefix: %s", inet_ntoa(nbr->src));
|
||||
/* Check if any list fits */
|
||||
if ((alist && access_list_apply (alist, (struct prefix *) pe2->destination_ipv4) == FILTER_DENY)||
|
||||
if ((alist &&
|
||||
access_list_apply (alist, (struct prefix *) pe2->destination_ipv4) == FILTER_DENY) ||
|
||||
(plist && prefix_list_apply (plist, (struct prefix *) pe2->destination_ipv4) == PREFIX_DENY)||
|
||||
(alist_i && access_list_apply (alist_i, (struct prefix *) pe2->destination_ipv4) == FILTER_DENY)||
|
||||
(plist_i && prefix_list_apply (plist_i, (struct prefix *) pe2->destination_ipv4) == PREFIX_DENY))
|
||||
@ -97,11 +98,12 @@ eigrp_send_reply (struct eigrp_neighbor *nbr, struct eigrp_prefix_entry *pe)
|
||||
zlog_info("REPLY SEND: Setting Metric to max");
|
||||
pe2->reported_metric.delay = EIGRP_MAX_METRIC;
|
||||
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
zlog_info("REPLY SEND: Not setting metric");
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* End of filtering
|
||||
*/
|
||||
@ -113,7 +115,8 @@ eigrp_send_reply (struct eigrp_neighbor *nbr, struct eigrp_prefix_entry *pe)
|
||||
nbr->ei->eigrp->sequence_number, 0);
|
||||
|
||||
// encode Authentication TLV, if needed
|
||||
if((IF_DEF_PARAMS (nbr->ei->ifp)->auth_type == EIGRP_AUTH_TYPE_MD5) && (IF_DEF_PARAMS (nbr->ei->ifp)->auth_keychain != NULL))
|
||||
if((IF_DEF_PARAMS (nbr->ei->ifp)->auth_type == EIGRP_AUTH_TYPE_MD5) &&
|
||||
(IF_DEF_PARAMS (nbr->ei->ifp)->auth_keychain != NULL))
|
||||
{
|
||||
length += eigrp_add_authTLV_MD5_to_stream(ep->s,nbr->ei);
|
||||
}
|
||||
@ -121,7 +124,8 @@ eigrp_send_reply (struct eigrp_neighbor *nbr, struct eigrp_prefix_entry *pe)
|
||||
|
||||
length += eigrp_add_internalTLV_to_stream(ep->s, pe2);
|
||||
|
||||
if((IF_DEF_PARAMS (nbr->ei->ifp)->auth_type == EIGRP_AUTH_TYPE_MD5) && (IF_DEF_PARAMS (nbr->ei->ifp)->auth_keychain != NULL))
|
||||
if((IF_DEF_PARAMS (nbr->ei->ifp)->auth_type == EIGRP_AUTH_TYPE_MD5) &&
|
||||
(IF_DEF_PARAMS (nbr->ei->ifp)->auth_keychain != NULL))
|
||||
{
|
||||
eigrp_make_md5_digest(nbr->ei,ep->s, EIGRP_AUTH_UPDATE_FLAG);
|
||||
}
|
||||
@ -184,8 +188,8 @@ eigrp_reply_receive (struct eigrp *eigrp, struct ip *iph, struct eigrp_header *e
|
||||
dest_addr = prefix_ipv4_new();
|
||||
dest_addr->prefix = tlv->destination;
|
||||
dest_addr->prefixlen = tlv->prefix_length;
|
||||
struct eigrp_prefix_entry *dest = eigrp_topology_table_lookup_ipv4(
|
||||
eigrp->topology_table, dest_addr);
|
||||
struct eigrp_prefix_entry *dest =
|
||||
eigrp_topology_table_lookup_ipv4 (eigrp->topology_table, dest_addr);
|
||||
/*
|
||||
* Destination must exists
|
||||
*/
|
||||
@ -194,8 +198,8 @@ eigrp_reply_receive (struct eigrp *eigrp, struct ip *iph, struct eigrp_header *e
|
||||
struct eigrp_fsm_action_message *msg;
|
||||
msg = XCALLOC(MTYPE_EIGRP_FSM_MSG,
|
||||
sizeof(struct eigrp_fsm_action_message));
|
||||
struct eigrp_neighbor_entry *entry = eigrp_prefix_entry_lookup(
|
||||
dest->entries, nbr);
|
||||
struct eigrp_neighbor_entry *entry =
|
||||
eigrp_prefix_entry_lookup(dest->entries, nbr);
|
||||
|
||||
/*
|
||||
* Filtering
|
||||
|
@ -68,7 +68,7 @@ eigrp_if_rmap_update (struct if_rmap *if_rmap)
|
||||
if (ifp == NULL)
|
||||
return;
|
||||
|
||||
ei=NULL;
|
||||
ei = NULL;
|
||||
e = eigrp_lookup();
|
||||
for (ALL_LIST_ELEMENTS (e->eiflist, node, nnode, ei2))
|
||||
{
|
||||
@ -267,31 +267,31 @@ static route_map_result_t
|
||||
route_match_metric (void *rule, struct prefix *prefix,
|
||||
route_map_object_t type, void *object)
|
||||
{
|
||||
// u_int32_t *metric;
|
||||
// u_int32_t check;
|
||||
// struct rip_info *rinfo;
|
||||
// struct eigrp_neighbor_entry *te;
|
||||
// struct eigrp_prefix_entry *pe;
|
||||
// struct listnode *node, *node2, *nnode, *nnode2;
|
||||
// struct eigrp *e;
|
||||
//
|
||||
// e = eigrp_lookup();
|
||||
//
|
||||
// if (type == RMAP_EIGRP)
|
||||
// {
|
||||
// metric = rule;
|
||||
// rinfo = object;
|
||||
//
|
||||
// /* If external metric is available, the route-map should
|
||||
// work on this one (for redistribute purpose) */
|
||||
// /*check = (rinfo->external_metric) ? rinfo->external_metric :
|
||||
// rinfo->metric;*/
|
||||
//
|
||||
// if (check == *metric)
|
||||
// return RMAP_MATCH;
|
||||
// else
|
||||
// return RMAP_NOMATCH;
|
||||
// }
|
||||
// u_int32_t *metric;
|
||||
// u_int32_t check;
|
||||
// struct rip_info *rinfo;
|
||||
// struct eigrp_neighbor_entry *te;
|
||||
// struct eigrp_prefix_entry *pe;
|
||||
// struct listnode *node, *node2, *nnode, *nnode2;
|
||||
// struct eigrp *e;
|
||||
//
|
||||
// e = eigrp_lookup();
|
||||
//
|
||||
// if (type == RMAP_EIGRP)
|
||||
// {
|
||||
// metric = rule;
|
||||
// rinfo = object;
|
||||
//
|
||||
// /* If external metric is available, the route-map should
|
||||
// work on this one (for redistribute purpose) */
|
||||
// /*check = (rinfo->external_metric) ? rinfo->external_metric :
|
||||
// rinfo->metric;*/
|
||||
//
|
||||
// if (check == *metric)
|
||||
// return RMAP_MATCH;
|
||||
// else
|
||||
// return RMAP_NOMATCH;
|
||||
// }
|
||||
return RMAP_NOMATCH;
|
||||
}
|
||||
|
||||
@ -299,15 +299,15 @@ route_match_metric (void *rule, struct prefix *prefix,
|
||||
static void *
|
||||
route_match_metric_compile (const char *arg)
|
||||
{
|
||||
// u_int32_t *metric;
|
||||
//
|
||||
// metric = XMALLOC (MTYPE_ROUTE_MAP_COMPILED, sizeof (u_int32_t));
|
||||
// *metric = atoi (arg);
|
||||
//
|
||||
// if(*metric > 0)
|
||||
// return metric;
|
||||
//
|
||||
// XFREE (MTYPE_ROUTE_MAP_COMPILED, metric);
|
||||
// u_int32_t *metric;
|
||||
//
|
||||
// metric = XMALLOC (MTYPE_ROUTE_MAP_COMPILED, sizeof (u_int32_t));
|
||||
// *metric = atoi (arg);
|
||||
//
|
||||
// if(*metric > 0)
|
||||
// return metric;
|
||||
//
|
||||
// XFREE (MTYPE_ROUTE_MAP_COMPILED, metric);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@ -333,25 +333,25 @@ static route_map_result_t
|
||||
route_match_interface (void *rule, struct prefix *prefix,
|
||||
route_map_object_t type, void *object)
|
||||
{
|
||||
// struct rip_info *rinfo;
|
||||
// struct interface *ifp;
|
||||
// char *ifname;
|
||||
//
|
||||
// if (type == RMAP_EIGRP)
|
||||
// {
|
||||
// ifname = rule;
|
||||
// ifp = if_lookup_by_name(ifname);
|
||||
//
|
||||
// if (!ifp)
|
||||
// return RMAP_NOMATCH;
|
||||
//
|
||||
// rinfo = object;
|
||||
//
|
||||
// /*if (rinfo->ifindex_out == ifp->ifindex || rinfo->ifindex == ifp->ifindex)
|
||||
// return RMAP_MATCH;
|
||||
// else
|
||||
// return RMAP_NOMATCH;*/
|
||||
// }
|
||||
// struct rip_info *rinfo;
|
||||
// struct interface *ifp;
|
||||
// char *ifname;
|
||||
//
|
||||
// if (type == RMAP_EIGRP)
|
||||
// {
|
||||
// ifname = rule;
|
||||
// ifp = if_lookup_by_name(ifname);
|
||||
//
|
||||
// if (!ifp)
|
||||
// return RMAP_NOMATCH;
|
||||
//
|
||||
// rinfo = object;
|
||||
//
|
||||
// /*if (rinfo->ifindex_out == ifp->ifindex || rinfo->ifindex == ifp->ifindex)
|
||||
// return RMAP_MATCH;
|
||||
// else
|
||||
// return RMAP_NOMATCH;*/
|
||||
// }
|
||||
return RMAP_NOMATCH;
|
||||
}
|
||||
|
||||
@ -386,24 +386,24 @@ static route_map_result_t
|
||||
route_match_ip_next_hop (void *rule, struct prefix *prefix,
|
||||
route_map_object_t type, void *object)
|
||||
{
|
||||
// struct access_list *alist;
|
||||
// struct rip_info *rinfo;
|
||||
// struct prefix_ipv4 p;
|
||||
//
|
||||
// if (type == RMAP_EIGRP)
|
||||
// {
|
||||
// rinfo = object;
|
||||
// p.family = AF_INET;
|
||||
// /*p.prefix = (rinfo->nexthop.s_addr) ? rinfo->nexthop : rinfo->from;*/
|
||||
// p.prefixlen = IPV4_MAX_BITLEN;
|
||||
//
|
||||
// alist = access_list_lookup (AFI_IP, (char *) rule);
|
||||
// if (alist == NULL)
|
||||
// return RMAP_NOMATCH;
|
||||
//
|
||||
// return (access_list_apply (alist, &p) == FILTER_DENY ?
|
||||
// RMAP_NOMATCH : RMAP_MATCH);
|
||||
// }
|
||||
// struct access_list *alist;
|
||||
// struct rip_info *rinfo;
|
||||
// struct prefix_ipv4 p;
|
||||
//
|
||||
// if (type == RMAP_EIGRP)
|
||||
// {
|
||||
// rinfo = object;
|
||||
// p.family = AF_INET;
|
||||
// /*p.prefix = (rinfo->nexthop.s_addr) ? rinfo->nexthop : rinfo->from;*/
|
||||
// p.prefixlen = IPV4_MAX_BITLEN;
|
||||
//
|
||||
// alist = access_list_lookup (AFI_IP, (char *) rule);
|
||||
// if (alist == NULL)
|
||||
// return RMAP_NOMATCH;
|
||||
//
|
||||
// return (access_list_apply (alist, &p) == FILTER_DENY ?
|
||||
// RMAP_NOMATCH : RMAP_MATCH);
|
||||
// }
|
||||
return RMAP_NOMATCH;
|
||||
}
|
||||
|
||||
@ -424,12 +424,12 @@ route_match_ip_next_hop_free (void *rule)
|
||||
|
||||
/* Route map commands for ip next-hop matching. */
|
||||
static struct route_map_rule_cmd route_match_ip_next_hop_cmd =
|
||||
{
|
||||
{
|
||||
"ip next-hop",
|
||||
route_match_ip_next_hop,
|
||||
route_match_ip_next_hop_compile,
|
||||
route_match_ip_next_hop_free
|
||||
};
|
||||
};
|
||||
|
||||
/* `match ip next-hop prefix-list PREFIX_LIST' */
|
||||
|
||||
@ -437,24 +437,24 @@ static route_map_result_t
|
||||
route_match_ip_next_hop_prefix_list (void *rule, struct prefix *prefix,
|
||||
route_map_object_t type, void *object)
|
||||
{
|
||||
// struct prefix_list *plist;
|
||||
// struct rip_info *rinfo;
|
||||
// struct prefix_ipv4 p;
|
||||
//
|
||||
// if (type == RMAP_EIGRP)
|
||||
// {
|
||||
// rinfo = object;
|
||||
// p.family = AF_INET;
|
||||
// /*p.prefix = (rinfo->nexthop.s_addr) ? rinfo->nexthop : rinfo->from;*/
|
||||
// p.prefixlen = IPV4_MAX_BITLEN;
|
||||
//
|
||||
// plist = prefix_list_lookup (AFI_IP, (char *) rule);
|
||||
// if (plist == NULL)
|
||||
// return RMAP_NOMATCH;
|
||||
//
|
||||
// return (prefix_list_apply (plist, &p) == PREFIX_DENY ?
|
||||
// RMAP_NOMATCH : RMAP_MATCH);
|
||||
// }
|
||||
// struct prefix_list *plist;
|
||||
// struct rip_info *rinfo;
|
||||
// struct prefix_ipv4 p;
|
||||
//
|
||||
// if (type == RMAP_EIGRP)
|
||||
// {
|
||||
// rinfo = object;
|
||||
// p.family = AF_INET;
|
||||
// /*p.prefix = (rinfo->nexthop.s_addr) ? rinfo->nexthop : rinfo->from;*/
|
||||
// p.prefixlen = IPV4_MAX_BITLEN;
|
||||
//
|
||||
// plist = prefix_list_lookup (AFI_IP, (char *) rule);
|
||||
// if (plist == NULL)
|
||||
// return RMAP_NOMATCH;
|
||||
//
|
||||
// return (prefix_list_apply (plist, &p) == PREFIX_DENY ?
|
||||
// RMAP_NOMATCH : RMAP_MATCH);
|
||||
// }
|
||||
return RMAP_NOMATCH;
|
||||
}
|
||||
|
||||
@ -517,12 +517,12 @@ route_match_ip_address_free (void *rule)
|
||||
|
||||
/* Route map commands for ip address matching. */
|
||||
static struct route_map_rule_cmd route_match_ip_address_cmd =
|
||||
{
|
||||
{
|
||||
"ip address",
|
||||
route_match_ip_address,
|
||||
route_match_ip_address_compile,
|
||||
route_match_ip_address_free
|
||||
};
|
||||
};
|
||||
|
||||
/* `match ip address prefix-list PREFIX_LIST' */
|
||||
|
||||
@ -557,12 +557,12 @@ route_match_ip_address_prefix_list_free (void *rule)
|
||||
}
|
||||
|
||||
static struct route_map_rule_cmd route_match_ip_address_prefix_list_cmd =
|
||||
{
|
||||
{
|
||||
"ip address prefix-list",
|
||||
route_match_ip_address_prefix_list,
|
||||
route_match_ip_address_prefix_list_compile,
|
||||
route_match_ip_address_prefix_list_free
|
||||
};
|
||||
};
|
||||
|
||||
/* `match tag TAG' */
|
||||
/* Match function return 1 if match is success else return zero. */
|
||||
@ -570,20 +570,20 @@ static route_map_result_t
|
||||
route_match_tag (void *rule, struct prefix *prefix,
|
||||
route_map_object_t type, void *object)
|
||||
{
|
||||
// u_short *tag;
|
||||
// struct rip_info *rinfo;
|
||||
//
|
||||
// if (type == RMAP_EIGRP)
|
||||
// {
|
||||
// tag = rule;
|
||||
// rinfo = object;
|
||||
//
|
||||
// /* The information stored by rinfo is host ordered. */
|
||||
// /*if (rinfo->tag == *tag)
|
||||
// return RMAP_MATCH;
|
||||
// else
|
||||
// return RMAP_NOMATCH;*/
|
||||
// }
|
||||
// u_short *tag;
|
||||
// struct rip_info *rinfo;
|
||||
//
|
||||
// if (type == RMAP_EIGRP)
|
||||
// {
|
||||
// tag = rule;
|
||||
// rinfo = object;
|
||||
//
|
||||
// /* The information stored by rinfo is host ordered. */
|
||||
// /*if (rinfo->tag == *tag)
|
||||
// return RMAP_MATCH;
|
||||
// else
|
||||
// return RMAP_NOMATCH;*/
|
||||
// }
|
||||
return RMAP_NOMATCH;
|
||||
}
|
||||
|
||||
@ -591,12 +591,12 @@ route_match_tag (void *rule, struct prefix *prefix,
|
||||
static void *
|
||||
route_match_tag_compile (const char *arg)
|
||||
{
|
||||
// u_short *tag;
|
||||
//
|
||||
// tag = XMALLOC (MTYPE_ROUTE_MAP_COMPILED, sizeof (u_short));
|
||||
// *tag = atoi (arg);
|
||||
//
|
||||
// return tag;
|
||||
// u_short *tag;
|
||||
//
|
||||
// tag = XMALLOC (MTYPE_ROUTE_MAP_COMPILED, sizeof (u_short));
|
||||
// *tag = atoi (arg);
|
||||
//
|
||||
// return tag;
|
||||
}
|
||||
|
||||
/* Free route map's compiled `match tag' value. */
|
||||
@ -608,40 +608,40 @@ route_match_tag_free (void *rule)
|
||||
|
||||
/* Route map commands for tag matching. */
|
||||
struct route_map_rule_cmd route_match_tag_cmd =
|
||||
{
|
||||
{
|
||||
"tag",
|
||||
route_match_tag,
|
||||
route_match_tag_compile,
|
||||
route_match_tag_free
|
||||
};
|
||||
};
|
||||
|
||||
/* Set metric to attribute. */
|
||||
static route_map_result_t
|
||||
route_set_metric (void *rule, struct prefix *prefix,
|
||||
route_map_object_t type, void *object)
|
||||
{
|
||||
// if (type == RMAP_RIP)
|
||||
// {
|
||||
// struct rip_metric_modifier *mod;
|
||||
// struct rip_info *rinfo;
|
||||
//
|
||||
// mod = rule;
|
||||
// rinfo = object;
|
||||
//
|
||||
// /*if (mod->type == metric_increment)
|
||||
// rinfo->metric_out += mod->metric;
|
||||
// else if (mod->type == metric_decrement)
|
||||
// rinfo->metric_out -= mod->metric;
|
||||
// else if (mod->type == metric_absolute)
|
||||
// rinfo->metric_out = mod->metric;
|
||||
//
|
||||
// if ((signed int)rinfo->metric_out < 1)
|
||||
// rinfo->metric_out = 1;
|
||||
// if (rinfo->metric_out > RIP_METRIC_INFINITY)
|
||||
// rinfo->metric_out = RIP_METRIC_INFINITY;*/
|
||||
//
|
||||
// rinfo->metric_set = 1;
|
||||
// }
|
||||
// if (type == RMAP_RIP)
|
||||
// {
|
||||
// struct rip_metric_modifier *mod;
|
||||
// struct rip_info *rinfo;
|
||||
//
|
||||
// mod = rule;
|
||||
// rinfo = object;
|
||||
//
|
||||
// /*if (mod->type == metric_increment)
|
||||
// rinfo->metric_out += mod->metric;
|
||||
// else if (mod->type == metric_decrement)
|
||||
// rinfo->metric_out -= mod->metric;
|
||||
// else if (mod->type == metric_absolute)
|
||||
// rinfo->metric_out = mod->metric;
|
||||
//
|
||||
// if ((signed int)rinfo->metric_out < 1)
|
||||
// rinfo->metric_out = 1;
|
||||
// if (rinfo->metric_out > RIP_METRIC_INFINITY)
|
||||
// rinfo->metric_out = RIP_METRIC_INFINITY;*/
|
||||
//
|
||||
// rinfo->metric_set = 1;
|
||||
// }
|
||||
return RMAP_OKAY;
|
||||
}
|
||||
|
||||
@ -649,51 +649,51 @@ route_set_metric (void *rule, struct prefix *prefix,
|
||||
static void *
|
||||
route_set_metric_compile (const char *arg)
|
||||
{
|
||||
// int len;
|
||||
// const char *pnt;
|
||||
// int type;
|
||||
// long metric;
|
||||
// char *endptr = NULL;
|
||||
// struct rip_metric_modifier *mod;
|
||||
//
|
||||
// len = strlen (arg);
|
||||
// pnt = arg;
|
||||
//
|
||||
// if (len == 0)
|
||||
// return NULL;
|
||||
//
|
||||
// /* Examine first character. */
|
||||
// if (arg[0] == '+')
|
||||
// {
|
||||
// //type = metric_increment;
|
||||
// pnt++;
|
||||
// }
|
||||
// else if (arg[0] == '-')
|
||||
// {
|
||||
// //type = metric_decrement;
|
||||
// pnt++;
|
||||
// }
|
||||
// /*else
|
||||
// type = metric_absolute;*/
|
||||
//
|
||||
// /* Check beginning with digit string. */
|
||||
// if (*pnt < '0' || *pnt > '9')
|
||||
// return NULL;
|
||||
//
|
||||
// /* Convert string to integer. */
|
||||
// metric = strtol (pnt, &endptr, 10);
|
||||
//
|
||||
// if (metric == LONG_MAX || *endptr != '\0')
|
||||
// return NULL;
|
||||
// /*if (metric < 0 || metric > RIP_METRIC_INFINITY)
|
||||
// return NULL;*/
|
||||
//
|
||||
// mod = XMALLOC (MTYPE_ROUTE_MAP_COMPILED,
|
||||
// sizeof (struct rip_metric_modifier));
|
||||
// mod->type = type;
|
||||
// mod->metric = metric;
|
||||
// int len;
|
||||
// const char *pnt;
|
||||
// int type;
|
||||
// long metric;
|
||||
// char *endptr = NULL;
|
||||
// struct rip_metric_modifier *mod;
|
||||
//
|
||||
// len = strlen (arg);
|
||||
// pnt = arg;
|
||||
//
|
||||
// if (len == 0)
|
||||
// return NULL;
|
||||
//
|
||||
// /* Examine first character. */
|
||||
// if (arg[0] == '+')
|
||||
// {
|
||||
// //type = metric_increment;
|
||||
// pnt++;
|
||||
// }
|
||||
// else if (arg[0] == '-')
|
||||
// {
|
||||
// //type = metric_decrement;
|
||||
// pnt++;
|
||||
// }
|
||||
// /*else
|
||||
// type = metric_absolute;*/
|
||||
//
|
||||
// /* Check beginning with digit string. */
|
||||
// if (*pnt < '0' || *pnt > '9')
|
||||
// return NULL;
|
||||
//
|
||||
// /* Convert string to integer. */
|
||||
// metric = strtol (pnt, &endptr, 10);
|
||||
//
|
||||
// if (metric == LONG_MAX || *endptr != '\0')
|
||||
// return NULL;
|
||||
// /*if (metric < 0 || metric > RIP_METRIC_INFINITY)
|
||||
// return NULL;*/
|
||||
//
|
||||
// mod = XMALLOC (MTYPE_ROUTE_MAP_COMPILED,
|
||||
// sizeof (struct rip_metric_modifier));
|
||||
// mod->type = type;
|
||||
// mod->metric = metric;
|
||||
|
||||
// return mod;
|
||||
// return mod;
|
||||
}
|
||||
|
||||
/* Free route map's compiled `set metric' value. */
|
||||
@ -705,12 +705,12 @@ route_set_metric_free (void *rule)
|
||||
|
||||
/* Set metric rule structure. */
|
||||
static struct route_map_rule_cmd route_set_metric_cmd =
|
||||
{
|
||||
{
|
||||
"metric",
|
||||
route_set_metric,
|
||||
route_set_metric_compile,
|
||||
route_set_metric_free,
|
||||
};
|
||||
};
|
||||
|
||||
/* `set ip next-hop IP_ADDRESS' */
|
||||
|
||||
@ -719,18 +719,18 @@ static route_map_result_t
|
||||
route_set_ip_nexthop (void *rule, struct prefix *prefix,
|
||||
route_map_object_t type, void *object)
|
||||
{
|
||||
// struct in_addr *address;
|
||||
// struct rip_info *rinfo;
|
||||
//
|
||||
// if(type == RMAP_RIP)
|
||||
// {
|
||||
// /* Fetch routemap's rule information. */
|
||||
// address = rule;
|
||||
// rinfo = object;
|
||||
//
|
||||
// /* Set next hop value. */
|
||||
// rinfo->nexthop_out = *address;
|
||||
// }
|
||||
// struct in_addr *address;
|
||||
// struct rip_info *rinfo;
|
||||
//
|
||||
// if(type == RMAP_RIP)
|
||||
// {
|
||||
// /* Fetch routemap's rule information. */
|
||||
// address = rule;
|
||||
// rinfo = object;
|
||||
//
|
||||
// /* Set next hop value. */
|
||||
// rinfo->nexthop_out = *address;
|
||||
// }
|
||||
|
||||
return RMAP_OKAY;
|
||||
}
|
||||
@ -740,20 +740,20 @@ route_set_ip_nexthop (void *rule, struct prefix *prefix,
|
||||
static void *
|
||||
route_set_ip_nexthop_compile (const char *arg)
|
||||
{
|
||||
// int ret;
|
||||
// struct in_addr *address;
|
||||
//
|
||||
// address = XMALLOC (MTYPE_ROUTE_MAP_COMPILED, sizeof (struct in_addr));
|
||||
//
|
||||
// ret = inet_aton (arg, address);
|
||||
//
|
||||
// if (ret == 0)
|
||||
// {
|
||||
// XFREE (MTYPE_ROUTE_MAP_COMPILED, address);
|
||||
// return NULL;
|
||||
// }
|
||||
//
|
||||
// return address;
|
||||
// int ret;
|
||||
// struct in_addr *address;
|
||||
//
|
||||
// address = XMALLOC (MTYPE_ROUTE_MAP_COMPILED, sizeof (struct in_addr));
|
||||
//
|
||||
// ret = inet_aton (arg, address);
|
||||
//
|
||||
// if (ret == 0)
|
||||
// {
|
||||
// XFREE (MTYPE_ROUTE_MAP_COMPILED, address);
|
||||
// return NULL;
|
||||
// }
|
||||
//
|
||||
// return address;
|
||||
}
|
||||
|
||||
/* Free route map's compiled `ip nexthop' value. */
|
||||
@ -765,12 +765,12 @@ route_set_ip_nexthop_free (void *rule)
|
||||
|
||||
/* Route map commands for ip nexthop set. */
|
||||
static struct route_map_rule_cmd route_set_ip_nexthop_cmd =
|
||||
{
|
||||
{
|
||||
"ip next-hop",
|
||||
route_set_ip_nexthop,
|
||||
route_set_ip_nexthop_compile,
|
||||
route_set_ip_nexthop_free
|
||||
};
|
||||
};
|
||||
|
||||
/* `set tag TAG' */
|
||||
|
||||
@ -779,18 +779,18 @@ static route_map_result_t
|
||||
route_set_tag (void *rule, struct prefix *prefix,
|
||||
route_map_object_t type, void *object)
|
||||
{
|
||||
// u_short *tag;
|
||||
// struct rip_info *rinfo;
|
||||
//
|
||||
// if(type == RMAP_RIP)
|
||||
// {
|
||||
// /* Fetch routemap's rule information. */
|
||||
// tag = rule;
|
||||
// rinfo = object;
|
||||
//
|
||||
// /* Set next hop value. */
|
||||
// rinfo->tag_out = *tag;
|
||||
// }
|
||||
// u_short *tag;
|
||||
// struct rip_info *rinfo;
|
||||
//
|
||||
// if(type == RMAP_RIP)
|
||||
// {
|
||||
// /* Fetch routemap's rule information. */
|
||||
// tag = rule;
|
||||
// rinfo = object;
|
||||
//
|
||||
// /* Set next hop value. */
|
||||
// rinfo->tag_out = *tag;
|
||||
// }
|
||||
|
||||
return RMAP_OKAY;
|
||||
}
|
||||
@ -800,12 +800,12 @@ route_set_tag (void *rule, struct prefix *prefix,
|
||||
static void *
|
||||
route_set_tag_compile (const char *arg)
|
||||
{
|
||||
// u_short *tag;
|
||||
//
|
||||
// tag = XMALLOC (MTYPE_ROUTE_MAP_COMPILED, sizeof (u_short));
|
||||
// *tag = atoi (arg);
|
||||
//
|
||||
// return tag;
|
||||
// u_short *tag;
|
||||
//
|
||||
// tag = XMALLOC (MTYPE_ROUTE_MAP_COMPILED, sizeof (u_short));
|
||||
// *tag = atoi (arg);
|
||||
//
|
||||
// return tag;
|
||||
}
|
||||
|
||||
/* Free route map's compiled `ip nexthop' value. */
|
||||
@ -817,12 +817,12 @@ route_set_tag_free (void *rule)
|
||||
|
||||
/* Route map commands for tag set. */
|
||||
static struct route_map_rule_cmd route_set_tag_cmd =
|
||||
{
|
||||
{
|
||||
"tag",
|
||||
route_set_tag,
|
||||
route_set_tag_compile,
|
||||
route_set_tag_free
|
||||
};
|
||||
};
|
||||
|
||||
#define MATCH_STR "Match values from routing table\n"
|
||||
#define SET_STR "Set values in destination routing protocol\n"
|
||||
@ -973,7 +973,6 @@ DEFUN (match_ip_address,
|
||||
"IP access-list number\n"
|
||||
"IP access-list number (expanded range)\n"
|
||||
"IP Access-list name\n")
|
||||
|
||||
{
|
||||
return eigrp_route_match_add (vty, vty->index, "ip address", argv[0]);
|
||||
}
|
||||
|
@ -89,8 +89,8 @@ eigrp_siaquery_receive (struct eigrp *eigrp, struct ip *iph, struct eigrp_header
|
||||
dest_addr = prefix_ipv4_new();
|
||||
dest_addr->prefix = tlv->destination;
|
||||
dest_addr->prefixlen = tlv->prefix_length;
|
||||
struct eigrp_prefix_entry *dest = eigrp_topology_table_lookup_ipv4(
|
||||
eigrp->topology_table, dest_addr);
|
||||
struct eigrp_prefix_entry *dest =
|
||||
eigrp_topology_table_lookup_ipv4(eigrp->topology_table, dest_addr);
|
||||
|
||||
/* If the destination exists (it should, but one never know)*/
|
||||
if (dest != NULL)
|
||||
@ -98,8 +98,8 @@ eigrp_siaquery_receive (struct eigrp *eigrp, struct ip *iph, struct eigrp_header
|
||||
struct eigrp_fsm_action_message *msg;
|
||||
msg = XCALLOC(MTYPE_EIGRP_FSM_MSG,
|
||||
sizeof(struct eigrp_fsm_action_message));
|
||||
struct eigrp_neighbor_entry *entry = eigrp_prefix_entry_lookup(
|
||||
dest->entries, nbr);
|
||||
struct eigrp_neighbor_entry *entry =
|
||||
eigrp_prefix_entry_lookup(dest->entries, nbr);
|
||||
msg->packet_type = EIGRP_OPC_SIAQUERY;
|
||||
msg->eigrp = eigrp;
|
||||
msg->data_type = EIGRP_TLV_IPv4_INT;
|
||||
@ -116,7 +116,6 @@ eigrp_siaquery_receive (struct eigrp *eigrp, struct ip *iph, struct eigrp_header
|
||||
eigrp_hello_send_ack(nbr);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
eigrp_send_siaquery (struct eigrp_neighbor *nbr, struct eigrp_prefix_entry *pe)
|
||||
{
|
||||
@ -130,14 +129,16 @@ eigrp_send_siaquery (struct eigrp_neighbor *nbr, struct eigrp_prefix_entry *pe)
|
||||
nbr->ei->eigrp->sequence_number, 0);
|
||||
|
||||
// encode Authentication TLV, if needed
|
||||
if((IF_DEF_PARAMS (nbr->ei->ifp)->auth_type == EIGRP_AUTH_TYPE_MD5) && (IF_DEF_PARAMS (nbr->ei->ifp)->auth_keychain != NULL))
|
||||
if((IF_DEF_PARAMS (nbr->ei->ifp)->auth_type == EIGRP_AUTH_TYPE_MD5) &&
|
||||
(IF_DEF_PARAMS (nbr->ei->ifp)->auth_keychain != NULL))
|
||||
{
|
||||
length += eigrp_add_authTLV_MD5_to_stream(ep->s,nbr->ei);
|
||||
}
|
||||
|
||||
length += eigrp_add_internalTLV_to_stream(ep->s, pe);
|
||||
|
||||
if((IF_DEF_PARAMS (nbr->ei->ifp)->auth_type == EIGRP_AUTH_TYPE_MD5) && (IF_DEF_PARAMS (nbr->ei->ifp)->auth_keychain != NULL))
|
||||
if((IF_DEF_PARAMS (nbr->ei->ifp)->auth_type == EIGRP_AUTH_TYPE_MD5) &&
|
||||
(IF_DEF_PARAMS (nbr->ei->ifp)->auth_keychain != NULL))
|
||||
{
|
||||
eigrp_make_md5_digest(nbr->ei,ep->s, EIGRP_AUTH_UPDATE_FLAG);
|
||||
}
|
||||
|
@ -25,7 +25,6 @@
|
||||
* Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
||||
* 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#include <zebra.h>
|
||||
|
||||
#include "thread.h"
|
||||
@ -89,8 +88,8 @@ eigrp_siareply_receive (struct eigrp *eigrp, struct ip *iph, struct eigrp_header
|
||||
dest_addr = prefix_ipv4_new();
|
||||
dest_addr->prefix = tlv->destination;
|
||||
dest_addr->prefixlen = tlv->prefix_length;
|
||||
struct eigrp_prefix_entry *dest = eigrp_topology_table_lookup_ipv4(
|
||||
eigrp->topology_table, dest_addr);
|
||||
struct eigrp_prefix_entry *dest =
|
||||
eigrp_topology_table_lookup_ipv4(eigrp->topology_table, dest_addr);
|
||||
|
||||
/* If the destination exists (it should, but one never know)*/
|
||||
if (dest != NULL)
|
||||
@ -98,8 +97,8 @@ eigrp_siareply_receive (struct eigrp *eigrp, struct ip *iph, struct eigrp_header
|
||||
struct eigrp_fsm_action_message *msg;
|
||||
msg = XCALLOC(MTYPE_EIGRP_FSM_MSG,
|
||||
sizeof(struct eigrp_fsm_action_message));
|
||||
struct eigrp_neighbor_entry *entry = eigrp_prefix_entry_lookup(
|
||||
dest->entries, nbr);
|
||||
struct eigrp_neighbor_entry *entry =
|
||||
eigrp_prefix_entry_lookup(dest->entries, nbr);
|
||||
msg->packet_type = EIGRP_OPC_SIAQUERY;
|
||||
msg->eigrp = eigrp;
|
||||
msg->data_type = EIGRP_TLV_IPv4_INT;
|
||||
@ -129,14 +128,16 @@ eigrp_send_siareply (struct eigrp_neighbor *nbr, struct eigrp_prefix_entry *pe)
|
||||
nbr->ei->eigrp->sequence_number, 0);
|
||||
|
||||
// encode Authentication TLV, if needed
|
||||
if((IF_DEF_PARAMS (nbr->ei->ifp)->auth_type == EIGRP_AUTH_TYPE_MD5) && (IF_DEF_PARAMS (nbr->ei->ifp)->auth_keychain != NULL))
|
||||
if((IF_DEF_PARAMS (nbr->ei->ifp)->auth_type == EIGRP_AUTH_TYPE_MD5) &&
|
||||
(IF_DEF_PARAMS (nbr->ei->ifp)->auth_keychain != NULL))
|
||||
{
|
||||
length += eigrp_add_authTLV_MD5_to_stream(ep->s,nbr->ei);
|
||||
}
|
||||
|
||||
length += eigrp_add_internalTLV_to_stream(ep->s, pe);
|
||||
|
||||
if((IF_DEF_PARAMS (nbr->ei->ifp)->auth_type == EIGRP_AUTH_TYPE_MD5) && (IF_DEF_PARAMS (nbr->ei->ifp)->auth_keychain != NULL))
|
||||
if((IF_DEF_PARAMS (nbr->ei->ifp)->auth_type == EIGRP_AUTH_TYPE_MD5) &&
|
||||
(IF_DEF_PARAMS (nbr->ei->ifp)->auth_keychain != NULL))
|
||||
{
|
||||
eigrp_make_md5_digest(nbr->ei,ep->s, EIGRP_AUTH_UPDATE_FLAG);
|
||||
}
|
||||
|
@ -60,7 +60,6 @@
|
||||
#include "eigrpd/eigrp_fsm.h"
|
||||
#include "eigrpd/eigrp_snmp.h"
|
||||
|
||||
|
||||
struct list *eigrp_snmp_iflist;
|
||||
|
||||
/* Declare static local variables for convenience. */
|
||||
@ -185,7 +184,7 @@ static u_char *eigrpInterfaceEntry (struct variable *, oid *, size_t *, int,
|
||||
|
||||
|
||||
struct variable eigrp_variables[] =
|
||||
{
|
||||
{
|
||||
/* EIGRP vpn variables */
|
||||
{EIGRPVPNID, INTEGER, NOACCESS, eigrpVpnEntry,
|
||||
4, {1, 1, 1, 1}},
|
||||
@ -463,13 +462,12 @@ eigrpNbrLookup (struct variable *v, oid *name, size_t *length,
|
||||
}
|
||||
|
||||
|
||||
static u_char *
|
||||
eigrpVpnEntry (struct variable *v, oid *name, size_t *length,
|
||||
static u_char *
|
||||
eigrpVpnEntry (struct variable *v, oid *name, size_t *length,
|
||||
int exact, size_t *var_len, WriteMethod **write_method)
|
||||
{
|
||||
{
|
||||
struct eigrp *eigrp;
|
||||
|
||||
|
||||
eigrp = eigrp_lookup ();
|
||||
|
||||
/* Check whether the instance identifier is valid */
|
||||
@ -502,11 +500,11 @@ eigrpNbrLookup (struct variable *v, oid *name, size_t *length,
|
||||
return NULL;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
static uint32_t
|
||||
eigrp_neighbor_count(struct eigrp *eigrp)
|
||||
{
|
||||
static uint32_t
|
||||
eigrp_neighbor_count(struct eigrp *eigrp)
|
||||
{
|
||||
uint32_t count;
|
||||
struct eigrp_interface *ei;
|
||||
struct listnode *node, *node2, *nnode2;
|
||||
@ -528,19 +526,18 @@ eigrpNbrLookup (struct variable *v, oid *name, size_t *length,
|
||||
}
|
||||
|
||||
return count;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static u_char *
|
||||
eigrpTraffStatsEntry (struct variable *v, oid *name, size_t *length,
|
||||
static u_char *
|
||||
eigrpTraffStatsEntry (struct variable *v, oid *name, size_t *length,
|
||||
int exact, size_t *var_len, WriteMethod **write_method)
|
||||
{
|
||||
{
|
||||
struct eigrp *eigrp;
|
||||
struct eigrp_interface *ei;
|
||||
struct listnode *node, *nnode;
|
||||
int counter;
|
||||
|
||||
|
||||
eigrp = eigrp_lookup ();
|
||||
|
||||
/* Check whether the instance identifier is valid */
|
||||
@ -824,16 +821,16 @@ eigrpNbrLookup (struct variable *v, oid *name, size_t *length,
|
||||
return NULL;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
static u_char *
|
||||
eigrpTopologyEntry (struct variable *v, oid *name, size_t *length,
|
||||
}
|
||||
|
||||
static u_char *
|
||||
eigrpTopologyEntry (struct variable *v, oid *name, size_t *length,
|
||||
int exact, size_t *var_len, WriteMethod **write_method)
|
||||
{
|
||||
{
|
||||
struct eigrp *eigrp;
|
||||
struct eigrp_interface *ei;
|
||||
struct listnode *node, *nnode;
|
||||
|
||||
|
||||
eigrp = eigrp_lookup ();
|
||||
|
||||
/* Check whether the instance identifier is valid */
|
||||
@ -990,12 +987,12 @@ eigrpNbrLookup (struct variable *v, oid *name, size_t *length,
|
||||
return NULL;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
static u_char *
|
||||
eigrpPeerEntry (struct variable *v, oid *name, size_t *length,
|
||||
static u_char *
|
||||
eigrpPeerEntry (struct variable *v, oid *name, size_t *length,
|
||||
int exact, size_t *var_len, WriteMethod **write_method)
|
||||
{
|
||||
{
|
||||
struct eigrp *eigrp;
|
||||
struct eigrp_interface *ei;
|
||||
struct listnode *node, *nnode;
|
||||
@ -1145,11 +1142,12 @@ eigrpNbrLookup (struct variable *v, oid *name, size_t *length,
|
||||
return NULL;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
static u_char *
|
||||
eigrpInterfaceEntry (struct variable *v, oid *name, size_t *length,
|
||||
}
|
||||
|
||||
static u_char *
|
||||
eigrpInterfaceEntry (struct variable *v, oid *name, size_t *length,
|
||||
int exact, size_t *var_len, WriteMethod **write_method)
|
||||
{
|
||||
{
|
||||
struct eigrp *eigrp;
|
||||
struct eigrp_interface *ei;
|
||||
struct listnode *node, *nnode;
|
||||
@ -1157,7 +1155,6 @@ eigrpNbrLookup (struct variable *v, oid *name, size_t *length,
|
||||
struct list *keylist;
|
||||
int counter;
|
||||
|
||||
|
||||
eigrp = eigrp_lookup ();
|
||||
|
||||
/* Check whether the instance identifier is valid */
|
||||
@ -1379,17 +1376,14 @@ eigrpNbrLookup (struct variable *v, oid *name, size_t *length,
|
||||
return NULL;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* Register EIGRP-MIB. */
|
||||
void
|
||||
eigrp_snmp_init ()
|
||||
{
|
||||
/* Register EIGRP-MIB. */
|
||||
void
|
||||
eigrp_snmp_init ()
|
||||
{
|
||||
eigrp_snmp_iflist = list_new ();
|
||||
smux_init (eigrp_om->master);
|
||||
REGISTER_MIB("ciscoEigrpMIB", eigrp_variables, variable, eigrp_oid);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
#endif
|
||||
|
@ -52,17 +52,12 @@
|
||||
#include "eigrpd/eigrp_fsm.h"
|
||||
#include "eigrpd/eigrp_memory.h"
|
||||
|
||||
static int
|
||||
eigrp_prefix_entry_cmp(struct eigrp_prefix_entry *, struct eigrp_prefix_entry *);
|
||||
static void
|
||||
eigrp_prefix_entry_del(struct eigrp_prefix_entry *);
|
||||
static int
|
||||
eigrp_neighbor_entry_cmp(struct eigrp_neighbor_entry *,
|
||||
static int eigrp_prefix_entry_cmp(struct eigrp_prefix_entry *, struct eigrp_prefix_entry *);
|
||||
static void eigrp_prefix_entry_del(struct eigrp_prefix_entry *);
|
||||
static int eigrp_neighbor_entry_cmp(struct eigrp_neighbor_entry *,
|
||||
struct eigrp_neighbor_entry *);
|
||||
|
||||
/*
|
||||
* asdf;laksdjf;lajsdf;kasdjf;asdjf;
|
||||
* asdfaskdjfa;sdkjf;adlskj
|
||||
* Returns linkedlist used as topology table
|
||||
* cmp - assigned function for comparing topology nodes
|
||||
* del - assigned function executed before deleting topology node by list function
|
||||
@ -135,7 +130,6 @@ eigrp_prefix_entry_del(struct eigrp_prefix_entry *node)
|
||||
* Returns new created toplogy node
|
||||
* cmp - assigned function for comparing topology entry
|
||||
*/
|
||||
|
||||
struct eigrp_prefix_entry *
|
||||
eigrp_prefix_entry_new()
|
||||
{
|
||||
@ -154,7 +148,6 @@ eigrp_prefix_entry_new()
|
||||
/*
|
||||
* Topology entry comparison
|
||||
*/
|
||||
|
||||
static int
|
||||
eigrp_neighbor_entry_cmp(struct eigrp_neighbor_entry *entry1,
|
||||
struct eigrp_neighbor_entry *entry2)
|
||||
@ -187,7 +180,6 @@ eigrp_neighbor_entry_new()
|
||||
/*
|
||||
* Freeing topology table list
|
||||
*/
|
||||
|
||||
void
|
||||
eigrp_topology_free(struct list *list)
|
||||
{
|
||||
@ -197,7 +189,6 @@ eigrp_topology_free(struct list *list)
|
||||
/*
|
||||
* Deleting all topology nodes in table
|
||||
*/
|
||||
|
||||
void
|
||||
eigrp_topology_cleanup(struct list *topology)
|
||||
{
|
||||
@ -209,7 +200,6 @@ eigrp_topology_cleanup(struct list *topology)
|
||||
/*
|
||||
* Adding topology node to topology table
|
||||
*/
|
||||
|
||||
void
|
||||
eigrp_prefix_entry_add(struct list *topology, struct eigrp_prefix_entry *node)
|
||||
{
|
||||
@ -222,7 +212,6 @@ eigrp_prefix_entry_add(struct list *topology, struct eigrp_prefix_entry *node)
|
||||
/*
|
||||
* Adding topology entry to topology node
|
||||
*/
|
||||
|
||||
void
|
||||
eigrp_neighbor_entry_add(struct eigrp_prefix_entry *node,
|
||||
struct eigrp_neighbor_entry *entry)
|
||||
@ -237,7 +226,6 @@ eigrp_neighbor_entry_add(struct eigrp_prefix_entry *node,
|
||||
/*
|
||||
* Deleting topology node from topology table
|
||||
*/
|
||||
|
||||
void
|
||||
eigrp_prefix_entry_delete(struct list *topology,
|
||||
struct eigrp_prefix_entry *node)
|
||||
@ -263,7 +251,6 @@ eigrp_prefix_entry_delete(struct list *topology,
|
||||
/*
|
||||
* Deleting topology entry from topology node
|
||||
*/
|
||||
|
||||
void
|
||||
eigrp_neighbor_entry_delete(struct eigrp_prefix_entry *node,
|
||||
struct eigrp_neighbor_entry *entry)
|
||||
@ -278,7 +265,6 @@ eigrp_neighbor_entry_delete(struct eigrp_prefix_entry *node,
|
||||
/*
|
||||
* Deleting all nodes from topology table
|
||||
*/
|
||||
|
||||
void
|
||||
eigrp_topology_delete_all(struct list *topology)
|
||||
{
|
||||
@ -289,7 +275,6 @@ eigrp_topology_delete_all(struct list *topology)
|
||||
* Return 0 if topology is not empty
|
||||
* otherwise return 1
|
||||
*/
|
||||
|
||||
unsigned int
|
||||
eigrp_topology_table_isempty(struct list *topology)
|
||||
{
|
||||
@ -307,7 +292,6 @@ eigrp_topology_table_lookup_ipv4(struct list *topology_table,
|
||||
struct listnode *node;
|
||||
for (ALL_LIST_ELEMENTS_RO(topology_table, node, data))
|
||||
{
|
||||
|
||||
if ((data->af == AF_INET)
|
||||
&& (data->destination_ipv4->prefix.s_addr == address->prefix.s_addr)
|
||||
&& (data->destination_ipv4->prefixlen == address->prefixlen))
|
||||
@ -440,8 +424,8 @@ eigrp_topology_update_distance(struct eigrp_fsm_action_message *msg)
|
||||
entry->reported_distance
|
||||
> eigrp_calculate_metrics(eigrp, &int_data->metric) ? 2 : 3; // Increase : Decrease : No change
|
||||
entry->reported_metric = int_data->metric;
|
||||
entry->reported_distance = eigrp_calculate_metrics(eigrp,
|
||||
&int_data->metric);
|
||||
entry->reported_distance =
|
||||
eigrp_calculate_metrics(eigrp, &int_data->metric);
|
||||
entry->distance = eigrp_calculate_total_metrics(eigrp, entry);
|
||||
}
|
||||
else
|
||||
|
@ -300,8 +300,8 @@ eigrp_update_receive (struct eigrp *eigrp, struct ip *iph, struct eigrp_header *
|
||||
dest_addr = prefix_ipv4_new();
|
||||
dest_addr->prefix = tlv->destination;
|
||||
dest_addr->prefixlen = tlv->prefix_length;
|
||||
struct eigrp_prefix_entry *dest = eigrp_topology_table_lookup_ipv4(
|
||||
eigrp->topology_table, dest_addr);
|
||||
struct eigrp_prefix_entry *dest =
|
||||
eigrp_topology_table_lookup_ipv4(eigrp->topology_table, dest_addr);
|
||||
|
||||
/*if exists it comes to DUAL*/
|
||||
if (dest != NULL)
|
||||
@ -518,7 +518,8 @@ eigrp_update_send_init (struct eigrp_neighbor *nbr)
|
||||
nbr->recv_sequence_number);
|
||||
|
||||
// encode Authentication TLV, if needed
|
||||
if((IF_DEF_PARAMS (nbr->ei->ifp)->auth_type == EIGRP_AUTH_TYPE_MD5) && (IF_DEF_PARAMS (nbr->ei->ifp)->auth_keychain != NULL))
|
||||
if((IF_DEF_PARAMS (nbr->ei->ifp)->auth_type == EIGRP_AUTH_TYPE_MD5) &&
|
||||
(IF_DEF_PARAMS (nbr->ei->ifp)->auth_keychain != NULL))
|
||||
{
|
||||
length += eigrp_add_authTLV_MD5_to_stream(ep->s,nbr->ei);
|
||||
eigrp_make_md5_digest(nbr->ei,ep->s, EIGRP_AUTH_UPDATE_INIT_FLAG);
|
||||
@ -550,7 +551,7 @@ void
|
||||
eigrp_update_send_EOT (struct eigrp_neighbor *nbr)
|
||||
{
|
||||
struct eigrp_packet *ep;
|
||||
// struct eigrp_packet *ep_multicast;
|
||||
// struct eigrp_packet *ep_multicast;
|
||||
u_int16_t length = EIGRP_HEADER_LEN;
|
||||
struct eigrp_neighbor_entry *te;
|
||||
struct eigrp_prefix_entry *pe;
|
||||
@ -626,7 +627,8 @@ eigrp_update_send_EOT (struct eigrp_neighbor *nbr)
|
||||
}
|
||||
}
|
||||
|
||||
if((IF_DEF_PARAMS (nbr->ei->ifp)->auth_type == EIGRP_AUTH_TYPE_MD5) && (IF_DEF_PARAMS (nbr->ei->ifp)->auth_keychain != NULL))
|
||||
if((IF_DEF_PARAMS (nbr->ei->ifp)->auth_type == EIGRP_AUTH_TYPE_MD5) &&
|
||||
(IF_DEF_PARAMS (nbr->ei->ifp)->auth_keychain != NULL))
|
||||
{
|
||||
eigrp_make_md5_digest(nbr->ei,ep->s, EIGRP_AUTH_UPDATE_FLAG);
|
||||
}
|
||||
@ -651,7 +653,6 @@ eigrp_update_send_EOT (struct eigrp_neighbor *nbr)
|
||||
{
|
||||
eigrp_send_packet_reliably(nbr);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void
|
||||
@ -678,7 +679,8 @@ eigrp_update_send (struct eigrp_interface *ei)
|
||||
ei->eigrp->sequence_number, 0);
|
||||
|
||||
// encode Authentication TLV, if needed
|
||||
if((IF_DEF_PARAMS (ei->ifp)->auth_type == EIGRP_AUTH_TYPE_MD5) && (IF_DEF_PARAMS (ei->ifp)->auth_keychain != NULL))
|
||||
if((IF_DEF_PARAMS (ei->ifp)->auth_type == EIGRP_AUTH_TYPE_MD5) &&
|
||||
(IF_DEF_PARAMS (ei->ifp)->auth_keychain != NULL))
|
||||
{
|
||||
length += eigrp_add_authTLV_MD5_to_stream(ep->s,ei);
|
||||
}
|
||||
@ -774,7 +776,6 @@ eigrp_update_send (struct eigrp_interface *ei)
|
||||
void
|
||||
eigrp_update_send_all (struct eigrp *eigrp, struct eigrp_interface *exception)
|
||||
{
|
||||
|
||||
struct eigrp_interface *iface;
|
||||
struct listnode *node, *node2, *nnode2;
|
||||
struct eigrp_prefix_entry *pe;
|
||||
@ -882,14 +883,14 @@ eigrp_update_send_GR_part(struct eigrp_neighbor *nbr)
|
||||
nbr->recv_sequence_number);
|
||||
|
||||
// encode Authentication TLV, if needed
|
||||
if((IF_DEF_PARAMS (nbr->ei->ifp)->auth_type == EIGRP_AUTH_TYPE_MD5) && (IF_DEF_PARAMS (nbr->ei->ifp)->auth_keychain != NULL))
|
||||
if((IF_DEF_PARAMS (nbr->ei->ifp)->auth_type == EIGRP_AUTH_TYPE_MD5) &&
|
||||
(IF_DEF_PARAMS (nbr->ei->ifp)->auth_keychain != NULL))
|
||||
{
|
||||
length += eigrp_add_authTLV_MD5_to_stream(ep->s,nbr->ei);
|
||||
}
|
||||
|
||||
for (ALL_LIST_ELEMENTS(nbr->ei->eigrp->topology_table, node, nnode, pe))
|
||||
{
|
||||
|
||||
/*
|
||||
* Filtering
|
||||
*/
|
||||
@ -902,7 +903,6 @@ eigrp_update_send_GR_part(struct eigrp_neighbor *nbr)
|
||||
alist_i = nbr->ei->list[EIGRP_FILTER_OUT];
|
||||
plist_i = nbr->ei->prefix[EIGRP_FILTER_OUT];
|
||||
|
||||
|
||||
/* Check if any list fits */
|
||||
if ((alist && access_list_apply (alist,
|
||||
(struct prefix *) dest_addr) == FILTER_DENY)||
|
||||
@ -924,14 +924,11 @@ eigrp_update_send_GR_part(struct eigrp_neighbor *nbr)
|
||||
send_prefixes++;
|
||||
}
|
||||
|
||||
|
||||
|
||||
alist = e->list[EIGRP_FILTER_IN];
|
||||
plist = e->prefix[EIGRP_FILTER_IN];
|
||||
alist_i = nbr->ei->list[EIGRP_FILTER_IN];
|
||||
plist_i = nbr->ei->prefix[EIGRP_FILTER_IN];
|
||||
|
||||
|
||||
/* Check if any list fits */
|
||||
if ((alist && access_list_apply (alist,
|
||||
(struct prefix *) dest_addr) == FILTER_DENY)||
|
||||
@ -955,7 +952,6 @@ eigrp_update_send_GR_part(struct eigrp_neighbor *nbr)
|
||||
tlv_max->destination = pe->destination_ipv4->prefix;
|
||||
tlv_max->prefix_length = pe->destination_ipv4->prefixlen;
|
||||
|
||||
|
||||
/* prepare message for FSM */
|
||||
struct eigrp_fsm_action_message *fsm_msg;
|
||||
fsm_msg = XCALLOC(MTYPE_EIGRP_FSM_MSG,
|
||||
@ -995,7 +991,8 @@ eigrp_update_send_GR_part(struct eigrp_neighbor *nbr)
|
||||
}
|
||||
|
||||
/* compute Auth digest */
|
||||
if((IF_DEF_PARAMS (nbr->ei->ifp)->auth_type == EIGRP_AUTH_TYPE_MD5) && (IF_DEF_PARAMS (nbr->ei->ifp)->auth_keychain != NULL))
|
||||
if((IF_DEF_PARAMS (nbr->ei->ifp)->auth_type == EIGRP_AUTH_TYPE_MD5) &&
|
||||
(IF_DEF_PARAMS (nbr->ei->ifp)->auth_keychain != NULL))
|
||||
{
|
||||
eigrp_make_md5_digest(nbr->ei,ep->s, EIGRP_AUTH_UPDATE_FLAG);
|
||||
}
|
||||
@ -1013,7 +1010,6 @@ eigrp_update_send_GR_part(struct eigrp_neighbor *nbr)
|
||||
zlog_debug("Enqueuing Update Init Len [%u] Seq [%u] Dest [%s]",
|
||||
ep->length, ep->sequence_number, inet_ntoa(ep->dst));
|
||||
|
||||
|
||||
/*Put packet to retransmission queue*/
|
||||
eigrp_fifo_push_head(nbr->retrans_queue, ep);
|
||||
|
||||
@ -1175,5 +1171,3 @@ eigrp_update_send_process_GR (struct eigrp *eigrp, enum GR_type gr_type, struct
|
||||
eigrp_update_send_interface_GR(ei, gr_type, vty);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
@ -56,7 +56,6 @@
|
||||
#include "eigrpd/eigrp_dump.h"
|
||||
#include "eigrpd/eigrp_const.h"
|
||||
|
||||
|
||||
static int
|
||||
config_write_network (struct vty *vty, struct eigrp *eigrp)
|
||||
{
|
||||
@ -197,7 +196,6 @@ DEFUN_NOSH (router_eigrp,
|
||||
return CMD_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
DEFUN (no_router_eigrp,
|
||||
no_router_eigrp_cmd,
|
||||
"no router eigrp (1-65535)",
|
||||
@ -337,7 +335,7 @@ DEFUN (eigrp_network,
|
||||
"Enable routing on an IP network\n"
|
||||
"EIGRP network prefix\n")
|
||||
{
|
||||
VTY_DECLVAR_CONTEXT(eigrp, eigrp)
|
||||
VTY_DECLVAR_CONTEXT(eigrp, eigrp);
|
||||
struct prefix_ipv4 p;
|
||||
int ret;
|
||||
|
||||
@ -750,8 +748,6 @@ DEFUN (no_eigrp_if_ip_hellointerval,
|
||||
return CMD_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
|
||||
DEFUN (eigrp_if_ip_holdinterval,
|
||||
eigrp_if_ip_holdinterval_cmd,
|
||||
"ip hold-time eigrp (1-65535)",
|
||||
@ -878,7 +874,6 @@ str2auth_type (const char *str, struct interface *ifp)
|
||||
}
|
||||
|
||||
return CMD_WARNING;
|
||||
|
||||
}
|
||||
|
||||
DEFUN (eigrp_authentication_mode,
|
||||
@ -902,10 +897,10 @@ DEFUN (eigrp_authentication_mode,
|
||||
return CMD_SUCCESS;
|
||||
}
|
||||
|
||||
// if(strncmp(argv[2], "md5",3))
|
||||
// IF_DEF_PARAMS (ifp)->auth_type = EIGRP_AUTH_TYPE_MD5;
|
||||
// else if(strncmp(argv[2], "hmac-sha-256",12))
|
||||
// IF_DEF_PARAMS (ifp)->auth_type = EIGRP_AUTH_TYPE_SHA256;
|
||||
// if(strncmp(argv[2], "md5",3))
|
||||
// IF_DEF_PARAMS (ifp)->auth_type = EIGRP_AUTH_TYPE_MD5;
|
||||
// else if(strncmp(argv[2], "hmac-sha-256",12))
|
||||
// IF_DEF_PARAMS (ifp)->auth_type = EIGRP_AUTH_TYPE_SHA256;
|
||||
|
||||
return str2auth_type(argv[5]->arg, ifp);
|
||||
}
|
||||
@ -996,7 +991,8 @@ DEFUN (no_eigrp_authentication_keychain,
|
||||
return CMD_SUCCESS;
|
||||
}
|
||||
|
||||
if((IF_DEF_PARAMS (ifp)->auth_keychain != NULL) && (strcmp(IF_DEF_PARAMS (ifp)->auth_keychain,argv[5]->arg)==0))
|
||||
if((IF_DEF_PARAMS (ifp)->auth_keychain != NULL) &&
|
||||
(strcmp(IF_DEF_PARAMS (ifp)->auth_keychain,argv[5]->arg)==0))
|
||||
{
|
||||
free (IF_DEF_PARAMS (ifp)->auth_keychain);
|
||||
IF_DEF_PARAMS (ifp)->auth_keychain = NULL;
|
||||
@ -1007,7 +1003,6 @@ DEFUN (no_eigrp_authentication_keychain,
|
||||
return CMD_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
DEFUN (eigrp_redistribute_source_metric,
|
||||
eigrp_redistribute_source_metric_cmd,
|
||||
"redistribute " FRR_REDIST_STR_EIGRPD
|
||||
@ -1037,7 +1032,6 @@ DEFUN (eigrp_redistribute_source_metric,
|
||||
return eigrp_redistribute_set (eigrp, source, metrics_from_command);
|
||||
}
|
||||
|
||||
|
||||
DEFUN (no_eigrp_redistribute_source_metric,
|
||||
no_eigrp_redistribute_source_metric_cmd,
|
||||
"no redistribute " FRR_REDIST_STR_EIGRPD
|
||||
@ -1091,7 +1085,6 @@ DEFUN (eigrp_variance,
|
||||
return CMD_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
DEFUN (no_eigrp_variance,
|
||||
no_eigrp_variance_cmd,
|
||||
"no variance (1-128)",
|
||||
@ -1139,7 +1132,6 @@ DEFUN (eigrp_maximum_paths,
|
||||
return CMD_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
DEFUN (no_eigrp_maximum_paths,
|
||||
no_eigrp_maximum_paths_cmd,
|
||||
"no maximum-paths <1-32>",
|
||||
@ -1527,8 +1519,6 @@ eigrp_vty_if_init (void)
|
||||
/*EIGRP Summarization commands*/
|
||||
install_element (INTERFACE_NODE, &eigrp_ip_summary_address_cmd);
|
||||
install_element (INTERFACE_NODE, &no_eigrp_ip_summary_address_cmd);
|
||||
|
||||
|
||||
}
|
||||
|
||||
static void
|
||||
@ -1536,7 +1526,6 @@ eigrp_vty_zebra_init (void)
|
||||
{
|
||||
install_element (EIGRP_NODE, &eigrp_redistribute_source_metric_cmd);
|
||||
install_element (EIGRP_NODE, &no_eigrp_redistribute_source_metric_cmd);
|
||||
|
||||
}
|
||||
|
||||
/* Install EIGRP related vty commands. */
|
||||
|
@ -332,7 +332,7 @@ eigrp_interface_state_up (int command, struct zclient *zclient,
|
||||
zlog_debug ("Zebra: Interface[%s] bandwidth change %d -> %d.",
|
||||
ifp->name, if_tmp.bandwidth, ifp->bandwidth);
|
||||
|
||||
// eigrp_if_recalculate_output_cost (ifp);
|
||||
// eigrp_if_recalculate_output_cost (ifp);
|
||||
}
|
||||
|
||||
if (if_tmp.mtu != ifp->mtu)
|
||||
@ -512,10 +512,10 @@ eigrp_redistribute_set (struct eigrp *eigrp, int type, struct eigrp_metrics metr
|
||||
|
||||
eigrp_external_routes_refresh (eigrp, type);
|
||||
|
||||
// if (IS_DEBUG_EIGRP(zebra, ZEBRA_REDISTRIBUTE))
|
||||
// zlog_debug ("Redistribute[%s]: Refresh Type[%d], Metric[%d]",
|
||||
// eigrp_redist_string(type),
|
||||
// metric_type (eigrp, type), metric_value (eigrp, type));
|
||||
// if (IS_DEBUG_EIGRP(zebra, ZEBRA_REDISTRIBUTE))
|
||||
// zlog_debug ("Redistribute[%s]: Refresh Type[%d], Metric[%d]",
|
||||
// eigrp_redist_string(type),
|
||||
// metric_type (eigrp, type), metric_value (eigrp, type));
|
||||
return CMD_SUCCESS;
|
||||
}
|
||||
|
||||
@ -524,10 +524,10 @@ eigrp_redistribute_set (struct eigrp *eigrp, int type, struct eigrp_metrics metr
|
||||
zclient_redistribute (ZEBRA_REDISTRIBUTE_ADD, zclient,
|
||||
AFI_IP, type, 0, VRF_DEFAULT);
|
||||
|
||||
// if (IS_DEBUG_EIGRP (zebra, ZEBRA_REDISTRIBUTE))
|
||||
// zlog_debug ("Redistribute[%s]: Start Type[%d], Metric[%d]",
|
||||
// ospf_redist_string(type),
|
||||
// metric_type (ospf, type), metric_value (ospf, type));
|
||||
// if (IS_DEBUG_EIGRP (zebra, ZEBRA_REDISTRIBUTE))
|
||||
// zlog_debug ("Redistribute[%s]: Start Type[%d], Metric[%d]",
|
||||
// ospf_redist_string(type),
|
||||
// metric_type (ospf, type), metric_value (ospf, type));
|
||||
|
||||
++eigrp->redistribute;
|
||||
|
||||
@ -546,10 +546,10 @@ eigrp_redistribute_unset (struct eigrp *eigrp, int type)
|
||||
--eigrp->redistribute;
|
||||
}
|
||||
|
||||
// if (IS_DEBUG_EIGRP (zebra, ZEBRA_REDISTRIBUTE))
|
||||
// zlog_debug ("Redistribute[%s]: Start Type[%d], Metric[%d]",
|
||||
// ospf_redist_string(type),
|
||||
// metric_type (ospf, type), metric_value (ospf, type));
|
||||
// if (IS_DEBUG_EIGRP (zebra, ZEBRA_REDISTRIBUTE))
|
||||
// zlog_debug ("Redistribute[%s]: Start Type[%d], Metric[%d]",
|
||||
// ospf_redist_string(type),
|
||||
// metric_type (ospf, type), metric_value (ospf, type));
|
||||
|
||||
return CMD_SUCCESS;
|
||||
}
|
||||
|
@ -114,8 +114,8 @@ eigrp_router_id_update (struct eigrp *eigrp)
|
||||
eigrp->router_id = router_id;
|
||||
if (router_id_old != router_id)
|
||||
{
|
||||
// if (IS_DEBUG_EIGRP_EVENT)
|
||||
// zlog_debug("Router-ID[NEW:%s]: Update", inet_ntoa(eigrp->router_id));
|
||||
// if (IS_DEBUG_EIGRP_EVENT)
|
||||
// zlog_debug("Router-ID[NEW:%s]: Update", inet_ntoa(eigrp->router_id));
|
||||
|
||||
/* update eigrp_interface's */
|
||||
for (ALL_LIST_ELEMENTS_RO(vrf_iflist(VRF_DEFAULT), node, ifp))
|
||||
@ -137,7 +137,6 @@ eigrp_master_init ()
|
||||
eigrp_om->start_time = tv.tv_sec;
|
||||
}
|
||||
|
||||
|
||||
/* Allocate new eigrp structure. */
|
||||
static struct eigrp *
|
||||
eigrp_new (const char *AS)
|
||||
@ -296,7 +295,6 @@ eigrp_finish_final (struct eigrp *eigrp)
|
||||
eigrp_delete(eigrp);
|
||||
|
||||
XFREE(MTYPE_EIGRP_TOP,eigrp);
|
||||
|
||||
}
|
||||
|
||||
/*Look for existing eigrp process*/
|
||||
|
Loading…
Reference in New Issue
Block a user