From 3bbde7327a20efe80a58574a784290206c8efc93 Mon Sep 17 00:00:00 2001 From: Donald Sharp Date: Thu, 17 Aug 2017 09:48:21 -0400 Subject: [PATCH 1/6] eigrpd: Remove extra newline in debug Signed-off-by: Donald Sharp --- eigrpd/eigrp_fsm.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eigrpd/eigrp_fsm.c b/eigrpd/eigrp_fsm.c index 8e2a26447e..ba2d1f7e8d 100644 --- a/eigrpd/eigrp_fsm.c +++ b/eigrpd/eigrp_fsm.c @@ -333,7 +333,7 @@ int eigrp_get_fsm_event(struct eigrp_fsm_action_message *msg) */ int eigrp_fsm_event(struct eigrp_fsm_action_message *msg, int event) { - zlog_info("EIGRP AS: %d State: %d Event: %d Network: %s\n", + zlog_info("EIGRP AS: %d State: %d Event: %d Network: %s", msg->eigrp->AS, msg->prefix->state, event, eigrp_topology_ip_string(msg->prefix)); (*(NSM[msg->prefix->state][event].func))(msg); From 907b430346b16f670a497e357ba48b01a3240144 Mon Sep 17 00:00:00 2001 From: Donald Sharp Date: Thu, 17 Aug 2017 09:53:51 -0400 Subject: [PATCH 2/6] eigrpd: Store nbr in packet data Store the neighbor information( if available ) in the packet data that we are sending. This will allow in a future commit the ability to fixup the outgoing ack we are sending. Signed-off-by: Donald Sharp --- eigrpd/eigrp_hello.c | 2 +- eigrpd/eigrp_packet.c | 5 +++-- eigrpd/eigrp_packet.h | 2 +- eigrpd/eigrp_query.c | 2 +- eigrpd/eigrp_reply.c | 2 +- eigrpd/eigrp_siaquery.c | 2 +- eigrpd/eigrp_siareply.c | 2 +- eigrpd/eigrp_structs.h | 2 ++ eigrpd/eigrp_update.c | 10 +++++----- 9 files changed, 16 insertions(+), 13 deletions(-) diff --git a/eigrpd/eigrp_hello.c b/eigrpd/eigrp_hello.c index b7c2f7f18d..4654ead434 100644 --- a/eigrpd/eigrp_hello.c +++ b/eigrpd/eigrp_hello.c @@ -614,7 +614,7 @@ static struct eigrp_packet *eigrp_hello_encode(struct eigrp_interface *ei, u_int16_t length = EIGRP_HEADER_LEN; // allocate a new packet to be sent - ep = eigrp_packet_new(ei->ifp->mtu); + ep = eigrp_packet_new(ei->ifp->mtu, NULL); if (ep) { // encode common header feilds diff --git a/eigrpd/eigrp_packet.c b/eigrpd/eigrp_packet.c index dfc7463025..84c1b1c590 100644 --- a/eigrpd/eigrp_packet.c +++ b/eigrpd/eigrp_packet.c @@ -826,13 +826,14 @@ void eigrp_fifo_reset(struct eigrp_fifo *fifo) fifo->count = 0; } -struct eigrp_packet *eigrp_packet_new(size_t size) +struct eigrp_packet *eigrp_packet_new(size_t size, struct eigrp_neighbor *nbr) { struct eigrp_packet *new; new = XCALLOC(MTYPE_EIGRP_PACKET, sizeof(struct eigrp_packet)); new->s = stream_new(size); new->retrans_counter = 0; + new->nbr = nbr; return new; } @@ -1121,7 +1122,7 @@ struct eigrp_packet *eigrp_packet_duplicate(struct eigrp_packet *old, { struct eigrp_packet *new; - new = eigrp_packet_new(nbr->ei->ifp->mtu); + new = eigrp_packet_new(nbr->ei->ifp->mtu, nbr); new->length = old->length; new->retrans_counter = old->retrans_counter; new->dst = old->dst; diff --git a/eigrpd/eigrp_packet.h b/eigrpd/eigrp_packet.h index 2f607e5cab..890fc33c0f 100644 --- a/eigrpd/eigrp_packet.h +++ b/eigrpd/eigrp_packet.h @@ -36,7 +36,7 @@ extern int eigrp_read(struct thread *); extern int eigrp_write(struct thread *); -extern struct eigrp_packet *eigrp_packet_new(size_t); +extern struct eigrp_packet *eigrp_packet_new(size_t, struct eigrp_neighbor *); extern struct eigrp_packet *eigrp_packet_duplicate(struct eigrp_packet *, struct eigrp_neighbor *); extern void eigrp_packet_free(struct eigrp_packet *); diff --git a/eigrpd/eigrp_query.c b/eigrpd/eigrp_query.c index 653eae258f..92bc792c6a 100644 --- a/eigrpd/eigrp_query.c +++ b/eigrpd/eigrp_query.c @@ -159,7 +159,7 @@ void eigrp_send_query(struct eigrp_interface *ei) char has_tlv; bool ep_saved = false; - ep = eigrp_packet_new(ei->ifp->mtu); + ep = eigrp_packet_new(ei->ifp->mtu, NULL); /* Prepare EIGRP INIT UPDATE header */ eigrp_packet_header_init(EIGRP_OPC_QUERY, ei, ep->s, 0, diff --git a/eigrpd/eigrp_reply.c b/eigrpd/eigrp_reply.c index 4eb08c60d0..c96c3008ca 100644 --- a/eigrpd/eigrp_reply.c +++ b/eigrpd/eigrp_reply.c @@ -114,7 +114,7 @@ void eigrp_send_reply(struct eigrp_neighbor *nbr, struct eigrp_prefix_entry *pe) * End of filtering */ - ep = eigrp_packet_new(nbr->ei->ifp->mtu); + ep = eigrp_packet_new(nbr->ei->ifp->mtu, nbr); /* Prepare EIGRP INIT UPDATE header */ eigrp_packet_header_init(EIGRP_OPC_REPLY, nbr->ei, ep->s, 0, diff --git a/eigrpd/eigrp_siaquery.c b/eigrpd/eigrp_siaquery.c index f16f49a330..a5df2381ca 100644 --- a/eigrpd/eigrp_siaquery.c +++ b/eigrpd/eigrp_siaquery.c @@ -123,7 +123,7 @@ void eigrp_send_siaquery(struct eigrp_neighbor *nbr, struct eigrp_packet *ep; u_int16_t length = EIGRP_HEADER_LEN; - ep = eigrp_packet_new(nbr->ei->ifp->mtu); + ep = eigrp_packet_new(nbr->ei->ifp->mtu, nbr); /* Prepare EIGRP INIT UPDATE header */ eigrp_packet_header_init(EIGRP_OPC_SIAQUERY, nbr->ei, ep->s, 0, diff --git a/eigrpd/eigrp_siareply.c b/eigrpd/eigrp_siareply.c index 9a768566d3..0b684b498b 100644 --- a/eigrpd/eigrp_siareply.c +++ b/eigrpd/eigrp_siareply.c @@ -122,7 +122,7 @@ void eigrp_send_siareply(struct eigrp_neighbor *nbr, struct eigrp_packet *ep; u_int16_t length = EIGRP_HEADER_LEN; - ep = eigrp_packet_new(nbr->ei->ifp->mtu); + ep = eigrp_packet_new(nbr->ei->ifp->mtu, nbr); /* Prepare EIGRP INIT UPDATE header */ eigrp_packet_header_init(EIGRP_OPC_SIAREPLY, nbr->ei, ep->s, 0, diff --git a/eigrpd/eigrp_structs.h b/eigrpd/eigrp_structs.h index fd3e4b2014..0c15436d4f 100644 --- a/eigrpd/eigrp_structs.h +++ b/eigrpd/eigrp_structs.h @@ -311,6 +311,8 @@ struct eigrp_packet { /* EIGRP packet length. */ u_int16_t length; + + struct eigrp_neighbor *nbr; }; struct eigrp_fifo { diff --git a/eigrpd/eigrp_update.c b/eigrpd/eigrp_update.c index e0169c514b..3c82fdfde8 100644 --- a/eigrpd/eigrp_update.c +++ b/eigrpd/eigrp_update.c @@ -463,7 +463,7 @@ void eigrp_update_send_init(struct eigrp_neighbor *nbr) struct eigrp_packet *ep; u_int16_t length = EIGRP_HEADER_LEN; - ep = eigrp_packet_new(nbr->ei->ifp->mtu); + ep = eigrp_packet_new(nbr->ei->ifp->mtu, nbr); /* Prepare EIGRP INIT UPDATE header */ if (IS_DEBUG_EIGRP_PACKET(0, RECV)) @@ -546,7 +546,7 @@ void eigrp_update_send_EOT(struct eigrp_neighbor *nbr) struct prefix_ipv4 *dest_addr; u_int32_t seq_no = nbr->ei->eigrp->sequence_number; - ep = eigrp_packet_new(nbr->ei->ifp->mtu); + ep = eigrp_packet_new(nbr->ei->ifp->mtu, nbr); /* Prepare EIGRP EOT UPDATE header */ eigrp_packet_header_init(EIGRP_OPC_UPDATE, nbr->ei, ep->s, EIGRP_EOT_FLAG, @@ -571,7 +571,7 @@ void eigrp_update_send_EOT(struct eigrp_neighbor *nbr) seq_no++; length = EIGRP_HEADER_LEN; - ep = eigrp_packet_new(nbr->ei->ifp->mtu); + ep = eigrp_packet_new(nbr->ei->ifp->mtu, nbr); eigrp_packet_header_init(EIGRP_OPC_UPDATE, nbr->ei, ep->s, EIGRP_EOT_FLAG, seq_no, nbr->recv_sequence_number); @@ -635,7 +635,7 @@ void eigrp_update_send(struct eigrp_interface *ei) u_int16_t length = EIGRP_HEADER_LEN; - ep = eigrp_packet_new(ei->ifp->mtu); + ep = eigrp_packet_new(ei->ifp->mtu, NULL); /* Prepare EIGRP INIT UPDATE header */ eigrp_packet_header_init(EIGRP_OPC_UPDATE, ei, ep->s, 0, @@ -835,7 +835,7 @@ static void eigrp_update_send_GR_part(struct eigrp_neighbor *nbr) } } - ep = eigrp_packet_new(nbr->ei->ifp->mtu); + ep = eigrp_packet_new(nbr->ei->ifp->mtu, nbr); /* Prepare EIGRP Graceful restart UPDATE header */ eigrp_packet_header_init(EIGRP_OPC_UPDATE, nbr->ei, ep->s, flags, From 9c273c6d28345cb6c3d88aef2ab69a0eec264be3 Mon Sep 17 00:00:00 2001 From: Donald Sharp Date: Thu, 17 Aug 2017 10:02:54 -0400 Subject: [PATCH 3/6] eigrpd: Rework ack sent to neighbor EIGRP schedules and builds packets to send in the future. Before those packets are being sent, we are receiving update information from our peer. At that time we need to reach into the built packet and reset the outgoing ack to a better value. Signed-off-by: Donald Sharp --- eigrpd/eigrp_packet.c | 63 ++++++++++++++++++++++--------------------- 1 file changed, 32 insertions(+), 31 deletions(-) diff --git a/eigrpd/eigrp_packet.c b/eigrpd/eigrp_packet.c index 84c1b1c590..9f3de10141 100644 --- a/eigrpd/eigrp_packet.c +++ b/eigrpd/eigrp_packet.c @@ -299,18 +299,6 @@ int eigrp_check_sha256_digest(struct stream *s, return 1; } -/* - * eigrp_packet_dump - * - * This routing dumps the contents of the IP packet either received or - * built by EIGRP. - */ -static void eigrp_packet_dump(struct stream *s) -{ - // not yet... - return; -} - int eigrp_write(struct thread *thread) { struct eigrp *eigrp = THREAD_ARG(thread); @@ -322,6 +310,7 @@ int eigrp_write(struct thread *thread) struct msghdr msg; struct iovec iov[2]; u_int16_t opcode = 0; + u_int32_t seqno, ack; int ret; int flags = 0; @@ -357,6 +346,25 @@ int eigrp_write(struct thread *thread) memset(&iph, 0, sizeof(struct ip)); memset(&sa_dst, 0, sizeof(sa_dst)); + /* + * We build and schedule packets to go out + * in the future. In the mean time we may + * process some update packets from the + * neighbor, thus making it necessary + * to update the ack we are using for + * this outgoing packet. + */ + eigrph = (struct eigrp_header *)STREAM_DATA(ep->s); + opcode = eigrph->opcode; + seqno = ntohl(eigrph->sequence); + ack = ntohl(eigrph->ack); + if (ep->nbr && (ack != ep->nbr->recv_sequence_number)) { + eigrph->ack = htonl(ep->nbr->recv_sequence_number); + ack = ep->nbr->recv_sequence_number; + eigrph->checksum = 0; + eigrp_packet_checksum(ei, ep->s, ep->length); + } + sa_dst.sin_family = AF_INET; #ifdef HAVE_STRUCT_SOCKADDR_IN_SIN_LEN sa_dst.sin_len = sizeof(sa_dst); @@ -412,8 +420,9 @@ int eigrp_write(struct thread *thread) if (IS_DEBUG_EIGRP_TRANSMIT(0, SEND)) { eigrph = (struct eigrp_header *)STREAM_DATA(ep->s); opcode = eigrph->opcode; - zlog_debug("Sending [%s] to [%s] via [%s] ret [%d].", + zlog_debug("Sending [%s][%d/%d] to [%s] via [%s] ret [%d].", lookup_msg(eigrp_packet_type_str, opcode, NULL), + seqno, ack, inet_ntoa(ep->dst), IF_NAME(ei), ret); } @@ -425,18 +434,6 @@ int eigrp_write(struct thread *thread) iph.ip_len, ei->ifp->name, ei->ifp->mtu, safe_strerror(errno)); - /* Show debug sending packet. */ - if (IS_DEBUG_EIGRP_TRANSMIT(0, SEND) - && (IS_DEBUG_EIGRP_TRANSMIT(0, PACKET_DETAIL))) { - zlog_debug( - "-----------------------------------------------------"); - eigrp_ip_header_dump(&iph); - stream_set_getp(ep->s, 0); - eigrp_packet_dump(ep->s); - zlog_debug( - "-----------------------------------------------------"); - } - /* Now delete packet from queue. */ eigrp_packet_delete(ei); @@ -615,12 +612,16 @@ int eigrp_read(struct thread *thread) start of the eigrp TLVs */ opcode = eigrph->opcode; - if (IS_DEBUG_EIGRP_TRANSMIT(0, RECV)) - zlog_debug( - "Received [%s] length [%u] via [%s] src [%s] dst [%s]", - lookup_msg(eigrp_packet_type_str, opcode, NULL), length, - IF_NAME(ei), inet_ntoa(iph->ip_src), - inet_ntoa(iph->ip_dst)); + if (IS_DEBUG_EIGRP_TRANSMIT(0, RECV)) { + char src[100], dst[100]; + + strcpy(src, inet_ntoa(iph->ip_src)); + strcpy(dst, inet_ntoa(iph->ip_dst)); + zlog_debug("Received [%s][%d/%d] length [%u] via [%s] src [%s] dst [%s]", + lookup_msg(eigrp_packet_type_str, opcode, NULL), + ntohl(eigrph->sequence), ntohl(eigrph->ack), length, + IF_NAME(ei), src, dst); + } /* Read rest of the packet and call each sort of packet routine. */ stream_forward_getp(ibuf, EIGRP_HEADER_LEN); From f90f65a242e18ad2ae1229853f904227cc36900a Mon Sep 17 00:00:00 2001 From: Donald Sharp Date: Thu, 17 Aug 2017 19:03:46 -0400 Subject: [PATCH 4/6] eigrpd: Cleanup FIFO The FIFO really was a LIFO for some reason. Push new packets onto the top, always pull from the bottom. This allows eigrp neighbors to come up. Topotests eigrp-topo1( in a topotest PR ) now form neighbors with itself. With this commit. Signed-off-by: Donald Sharp --- eigrpd/eigrp_hello.c | 4 +-- eigrpd/eigrp_packet.c | 57 +++++++++++------------------------------ eigrpd/eigrp_packet.h | 6 ++--- eigrpd/eigrp_query.c | 2 +- eigrpd/eigrp_reply.c | 2 +- eigrpd/eigrp_siaquery.c | 2 +- eigrpd/eigrp_siareply.c | 2 +- eigrpd/eigrp_update.c | 8 +++--- 8 files changed, 27 insertions(+), 56 deletions(-) diff --git a/eigrpd/eigrp_hello.c b/eigrpd/eigrp_hello.c index 4654ead434..67f75c536b 100644 --- a/eigrpd/eigrp_hello.c +++ b/eigrpd/eigrp_hello.c @@ -707,7 +707,7 @@ void eigrp_hello_send_ack(struct eigrp_neighbor *nbr) inet_ntoa(nbr->src)); /* Add packet to the top of the interface output queue*/ - eigrp_fifo_push_head(nbr->ei->obuf, ep); + eigrp_fifo_push(nbr->ei->obuf, ep); /* Hook thread to write packet. */ if (nbr->ei->on_write_q == 0) { @@ -755,7 +755,7 @@ void eigrp_hello_send(struct eigrp_interface *ei, u_char flags, if (ep) { // Add packet to the top of the interface output queue - eigrp_fifo_push_head(ei->obuf, ep); + eigrp_fifo_push(ei->obuf, ep); /* Hook thread to write packet. */ if (ei->on_write_q == 0) { diff --git a/eigrpd/eigrp_packet.c b/eigrpd/eigrp_packet.c index 9f3de10141..cd677f1ae6 100644 --- a/eigrpd/eigrp_packet.c +++ b/eigrpd/eigrp_packet.c @@ -336,7 +336,7 @@ int eigrp_write(struct thread *thread) #endif /* WANT_EIGRP_WRITE_FRAGMENT */ /* Get one packet from queue. */ - ep = eigrp_fifo_head(ei->obuf); + ep = eigrp_fifo_next(ei->obuf); assert(ep); assert(ep->length >= EIGRP_HEADER_LEN); @@ -437,7 +437,7 @@ int eigrp_write(struct thread *thread) /* Now delete packet from queue. */ eigrp_packet_delete(ei); - if (eigrp_fifo_head(ei->obuf) == NULL) { + if (eigrp_fifo_next(ei->obuf) == NULL) { ei->on_write_q = 0; list_delete_node(eigrp->oi_write_q, node); } @@ -636,7 +636,7 @@ int eigrp_read(struct thread *thread) struct eigrp_packet *ep; - ep = eigrp_fifo_tail(nbr->retrans_queue); + ep = eigrp_fifo_next(nbr->retrans_queue); if (ep) { if (ntohl(eigrph->ack) == ep->sequence_number) { if ((nbr->state == EIGRP_NEIGHBOR_PENDING) @@ -651,17 +651,17 @@ int eigrp_read(struct thread *thread) ntohl(eigrph->sequence); eigrp_update_send_EOT(nbr); } - ep = eigrp_fifo_pop_tail(nbr->retrans_queue); + ep = eigrp_fifo_pop(nbr->retrans_queue); eigrp_packet_free(ep); if (nbr->retrans_queue->count > 0) { eigrp_send_packet_reliably(nbr); } } } - ep = eigrp_fifo_tail(nbr->multicast_queue); + ep = eigrp_fifo_next(nbr->multicast_queue); if (ep) { if (ntohl(eigrph->ack) == ep->sequence_number) { - ep = eigrp_fifo_pop_tail(nbr->multicast_queue); + ep = eigrp_fifo_pop(nbr->multicast_queue); eigrp_packet_free(ep); if (nbr->multicast_queue->count > 0) { eigrp_send_packet_reliably(nbr); @@ -843,13 +843,13 @@ void eigrp_send_packet_reliably(struct eigrp_neighbor *nbr) { struct eigrp_packet *ep; - ep = eigrp_fifo_tail(nbr->retrans_queue); + ep = eigrp_fifo_next(nbr->retrans_queue); if (ep) { struct eigrp_packet *duplicate; duplicate = eigrp_packet_duplicate(ep, nbr); /* Add packet to the top of the interface output queue*/ - eigrp_fifo_push_head(nbr->ei->obuf, duplicate); + eigrp_fifo_push(nbr->ei->obuf, duplicate); /*Start retransmission timer*/ thread_add_timer(master, eigrp_unack_packet_retrans, nbr, @@ -911,7 +911,7 @@ void eigrp_packet_header_init(int type, struct eigrp_interface *ei, } /* Add new packet to head of fifo. */ -void eigrp_fifo_push_head(struct eigrp_fifo *fifo, struct eigrp_packet *ep) +void eigrp_fifo_push(struct eigrp_fifo *fifo, struct eigrp_packet *ep) { ep->next = fifo->head; ep->previous = NULL; @@ -927,14 +927,8 @@ void eigrp_fifo_push_head(struct eigrp_fifo *fifo, struct eigrp_packet *ep) fifo->count++; } -/* Return first fifo entry. */ -struct eigrp_packet *eigrp_fifo_head(struct eigrp_fifo *fifo) -{ - return fifo->head; -} - /* Return last fifo entry. */ -struct eigrp_packet *eigrp_fifo_tail(struct eigrp_fifo *fifo) +struct eigrp_packet *eigrp_fifo_next(struct eigrp_fifo *fifo) { return fifo->tail; } @@ -949,27 +943,6 @@ void eigrp_packet_delete(struct eigrp_interface *ei) eigrp_packet_free(ep); } -/* Delete first packet from fifo. */ -struct eigrp_packet *eigrp_fifo_pop(struct eigrp_fifo *fifo) -{ - struct eigrp_packet *ep; - - ep = fifo->head; - - if (ep) { - fifo->head = ep->next; - - if (fifo->head == NULL) - fifo->tail = NULL; - else - fifo->head->previous = NULL; - - fifo->count--; - } - - return ep; -} - void eigrp_packet_free(struct eigrp_packet *ep) { if (ep->s) @@ -1030,14 +1003,14 @@ int eigrp_unack_packet_retrans(struct thread *thread) nbr = (struct eigrp_neighbor *)THREAD_ARG(thread); struct eigrp_packet *ep; - ep = eigrp_fifo_tail(nbr->retrans_queue); + ep = eigrp_fifo_next(nbr->retrans_queue); if (ep) { struct eigrp_packet *duplicate; duplicate = eigrp_packet_duplicate(ep, nbr); /* Add packet to the top of the interface output queue*/ - eigrp_fifo_push_head(nbr->ei->obuf, duplicate); + eigrp_fifo_push(nbr->ei->obuf, duplicate); ep->retrans_counter++; if (ep->retrans_counter == EIGRP_PACKET_RETRANS_MAX) @@ -1067,13 +1040,13 @@ int eigrp_unack_multicast_packet_retrans(struct thread *thread) nbr = (struct eigrp_neighbor *)THREAD_ARG(thread); struct eigrp_packet *ep; - ep = eigrp_fifo_tail(nbr->multicast_queue); + ep = eigrp_fifo_next(nbr->multicast_queue); if (ep) { struct eigrp_packet *duplicate; duplicate = eigrp_packet_duplicate(ep, nbr); /* Add packet to the top of the interface output queue*/ - eigrp_fifo_push_head(nbr->ei->obuf, duplicate); + eigrp_fifo_push(nbr->ei->obuf, duplicate); ep->retrans_counter++; if (ep->retrans_counter == EIGRP_PACKET_RETRANS_MAX) @@ -1098,7 +1071,7 @@ int eigrp_unack_multicast_packet_retrans(struct thread *thread) } /* Get packet from tail of fifo. */ -struct eigrp_packet *eigrp_fifo_pop_tail(struct eigrp_fifo *fifo) +struct eigrp_packet *eigrp_fifo_pop(struct eigrp_fifo *fifo) { struct eigrp_packet *ep; diff --git a/eigrpd/eigrp_packet.h b/eigrpd/eigrp_packet.h index 890fc33c0f..040204a7fc 100644 --- a/eigrpd/eigrp_packet.h +++ b/eigrpd/eigrp_packet.h @@ -48,11 +48,9 @@ extern void eigrp_packet_checksum(struct eigrp_interface *, struct stream *, u_int16_t); extern struct eigrp_fifo *eigrp_fifo_new(void); -extern struct eigrp_packet *eigrp_fifo_head(struct eigrp_fifo *); -extern struct eigrp_packet *eigrp_fifo_tail(struct eigrp_fifo *); +extern struct eigrp_packet *eigrp_fifo_next(struct eigrp_fifo *); extern struct eigrp_packet *eigrp_fifo_pop(struct eigrp_fifo *); -extern struct eigrp_packet *eigrp_fifo_pop_tail(struct eigrp_fifo *); -extern void eigrp_fifo_push_head(struct eigrp_fifo *, struct eigrp_packet *); +extern void eigrp_fifo_push(struct eigrp_fifo *, struct eigrp_packet *); extern void eigrp_fifo_free(struct eigrp_fifo *); extern void eigrp_fifo_reset(struct eigrp_fifo *); diff --git a/eigrpd/eigrp_query.c b/eigrpd/eigrp_query.c index 92bc792c6a..d6299ad923 100644 --- a/eigrpd/eigrp_query.c +++ b/eigrpd/eigrp_query.c @@ -207,7 +207,7 @@ void eigrp_send_query(struct eigrp_interface *ei) for (ALL_LIST_ELEMENTS(ei->nbrs, node2, nnode2, nbr)) { if (nbr->state == EIGRP_NEIGHBOR_UP) { /*Put packet to retransmission queue*/ - eigrp_fifo_push_head(nbr->retrans_queue, ep); + eigrp_fifo_push(nbr->retrans_queue, ep); ep_saved = true; if (nbr->retrans_queue->count == 1) { diff --git a/eigrpd/eigrp_reply.c b/eigrpd/eigrp_reply.c index c96c3008ca..1a4af15900 100644 --- a/eigrpd/eigrp_reply.c +++ b/eigrpd/eigrp_reply.c @@ -144,7 +144,7 @@ void eigrp_send_reply(struct eigrp_neighbor *nbr, struct eigrp_prefix_entry *pe) ep->sequence_number = nbr->ei->eigrp->sequence_number; /*Put packet to retransmission queue*/ - eigrp_fifo_push_head(nbr->retrans_queue, ep); + eigrp_fifo_push(nbr->retrans_queue, ep); if (nbr->retrans_queue->count == 1) { eigrp_send_packet_reliably(nbr); diff --git a/eigrpd/eigrp_siaquery.c b/eigrpd/eigrp_siaquery.c index a5df2381ca..215df7b8ee 100644 --- a/eigrpd/eigrp_siaquery.c +++ b/eigrpd/eigrp_siaquery.c @@ -153,7 +153,7 @@ void eigrp_send_siaquery(struct eigrp_neighbor *nbr, if (nbr->state == EIGRP_NEIGHBOR_UP) { /*Put packet to retransmission queue*/ - eigrp_fifo_push_head(nbr->retrans_queue, ep); + eigrp_fifo_push(nbr->retrans_queue, ep); if (nbr->retrans_queue->count == 1) { eigrp_send_packet_reliably(nbr); diff --git a/eigrpd/eigrp_siareply.c b/eigrpd/eigrp_siareply.c index 0b684b498b..32f0c8be33 100644 --- a/eigrpd/eigrp_siareply.c +++ b/eigrpd/eigrp_siareply.c @@ -152,7 +152,7 @@ void eigrp_send_siareply(struct eigrp_neighbor *nbr, if (nbr->state == EIGRP_NEIGHBOR_UP) { /*Put packet to retransmission queue*/ - eigrp_fifo_push_head(nbr->retrans_queue, ep); + eigrp_fifo_push(nbr->retrans_queue, ep); if (nbr->retrans_queue->count == 1) { eigrp_send_packet_reliably(nbr); diff --git a/eigrpd/eigrp_update.c b/eigrpd/eigrp_update.c index 3c82fdfde8..3af5524b87 100644 --- a/eigrpd/eigrp_update.c +++ b/eigrpd/eigrp_update.c @@ -497,7 +497,7 @@ void eigrp_update_send_init(struct eigrp_neighbor *nbr) ep->length, ep->sequence_number, inet_ntoa(ep->dst)); /*Put packet to retransmission queue*/ - eigrp_fifo_push_head(nbr->retrans_queue, ep); + eigrp_fifo_push(nbr->retrans_queue, ep); if (nbr->retrans_queue->count == 1) { eigrp_send_packet_reliably(nbr); @@ -528,7 +528,7 @@ static void eigrp_update_place_on_nbr_queue(struct eigrp_neighbor *nbr, ep->length, ep->sequence_number, inet_ntoa(ep->dst)); /*Put packet to retransmission queue*/ - eigrp_fifo_push_head(nbr->retrans_queue, ep); + eigrp_fifo_push(nbr->retrans_queue, ep); } void eigrp_update_send_EOT(struct eigrp_neighbor *nbr) @@ -731,7 +731,7 @@ void eigrp_update_send(struct eigrp_interface *ei) if (nbr->state == EIGRP_NEIGHBOR_UP) { packet_sent = true; /*Put packet to retransmission queue*/ - eigrp_fifo_push_head(nbr->retrans_queue, ep); + eigrp_fifo_push(nbr->retrans_queue, ep); if (nbr->retrans_queue->count == 1) { eigrp_send_packet_reliably(nbr); @@ -980,7 +980,7 @@ static void eigrp_update_send_GR_part(struct eigrp_neighbor *nbr) ep->length, ep->sequence_number, inet_ntoa(ep->dst)); /*Put packet to retransmission queue*/ - eigrp_fifo_push_head(nbr->retrans_queue, ep); + eigrp_fifo_push(nbr->retrans_queue, ep); if (nbr->retrans_queue->count == 1) { eigrp_send_packet_reliably(nbr); From 0f6c16fbe66c84b38263c1c0e29b1db429f614de Mon Sep 17 00:00:00 2001 From: Donald Sharp Date: Thu, 17 Aug 2017 19:20:45 -0400 Subject: [PATCH 5/6] eigrpd: Cleanup some more debugs Properly place a few more debugs. Signed-off-by: Donald Sharp --- eigrpd/eigrp_packet.c | 2 +- eigrpd/eigrp_update.c | 2 -- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/eigrpd/eigrp_packet.c b/eigrpd/eigrp_packet.c index cd677f1ae6..adea165f48 100644 --- a/eigrpd/eigrp_packet.c +++ b/eigrpd/eigrp_packet.c @@ -903,7 +903,7 @@ void eigrp_packet_header_init(int type, struct eigrp_interface *ei, // eigrph->sequence = htonl(3); eigrph->flags = htonl(flags); - if (IS_DEBUG_EIGRP_TRANSMIT(0, RECV)) + if (IS_DEBUG_EIGRP_TRANSMIT(0, PACKET_DETAIL)) zlog_debug("Packet Header Init Seq [%u] Ack [%u]", htonl(eigrph->sequence), htonl(eigrph->ack)); diff --git a/eigrpd/eigrp_update.c b/eigrpd/eigrp_update.c index 3af5524b87..846b016c6a 100644 --- a/eigrpd/eigrp_update.c +++ b/eigrpd/eigrp_update.c @@ -762,8 +762,6 @@ void eigrp_update_send_all(struct eigrp *eigrp, pe->req_action &= ~EIGRP_FSM_NEED_UPDATE; listnode_delete(eigrp->topology_changes_internalIPV4, pe); - zlog_debug("UPDATE COUNT: %d", - eigrp->topology_changes_internalIPV4->count); } } } From 29e48d5859ebc091fb42510b76a5aa9df8aee967 Mon Sep 17 00:00:00 2001 From: Donald Sharp Date: Thu, 17 Aug 2017 19:40:44 -0400 Subject: [PATCH 6/6] eigrpd: and More Debugging Cleanup Signed-off-by: Donald Sharp --- eigrpd/eigrp_packet.c | 4 ++-- eigrpd/eigrp_reply.c | 4 ---- eigrpd/eigrp_update.c | 4 ---- 3 files changed, 2 insertions(+), 10 deletions(-) diff --git a/eigrpd/eigrp_packet.c b/eigrpd/eigrp_packet.c index adea165f48..f38b759e9f 100644 --- a/eigrpd/eigrp_packet.c +++ b/eigrpd/eigrp_packet.c @@ -644,8 +644,8 @@ int eigrp_read(struct thread *thread) == nbr->init_sequence_number)) { eigrp_nbr_state_set(nbr, EIGRP_NEIGHBOR_UP); - zlog_info( - "Neighbor adjacency became full"); + zlog_info("Neighbor(%s) adjacency became full", + inet_ntoa(nbr->src)); nbr->init_sequence_number = 0; nbr->recv_sequence_number = ntohl(eigrph->sequence); diff --git a/eigrpd/eigrp_reply.c b/eigrpd/eigrp_reply.c index 1a4af15900..60390ad8a3 100644 --- a/eigrpd/eigrp_reply.c +++ b/eigrpd/eigrp_reply.c @@ -84,9 +84,7 @@ void eigrp_send_reply(struct eigrp_neighbor *nbr, struct eigrp_prefix_entry *pe) plist = e->prefix[EIGRP_FILTER_OUT]; alist_i = nbr->ei->list[EIGRP_FILTER_OUT]; plist_i = nbr->ei->prefix[EIGRP_FILTER_OUT]; - zlog_info("REPLY Send: Filtering"); - 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) @@ -106,8 +104,6 @@ void 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 { - zlog_info("REPLY SEND: Not setting metric"); } /* diff --git a/eigrpd/eigrp_update.c b/eigrpd/eigrp_update.c index 846b016c6a..68c0b92fd8 100644 --- a/eigrpd/eigrp_update.c +++ b/eigrpd/eigrp_update.c @@ -684,13 +684,9 @@ void eigrp_update_send(struct eigrp_interface *ei) && prefix_list_apply(plist_i, (struct prefix *)dest_addr) == PREFIX_DENY)) { - zlog_info("PROC OUT: Skipping"); // pe->reported_metric.delay = EIGRP_MAX_METRIC; - zlog_info("PROC OUT Prefix: %s", - inet_ntoa(dest_addr->prefix)); continue; } else { - zlog_info("PROC OUT: NENastavujem metriku "); length += eigrp_add_internalTLV_to_stream(ep->s, pe); has_tlv = 1;