]> git.puffer.fish Git - mirror/frr.git/commitdiff
eigrpd: Cleanup FIFO
authorDonald Sharp <sharpd@cumulusnetworks.com>
Thu, 17 Aug 2017 23:03:46 +0000 (19:03 -0400)
committerDonald Sharp <sharpd@cumulusnetworks.com>
Thu, 17 Aug 2017 23:16:53 +0000 (19:16 -0400)
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 <sharpd@cumulusnetworks.com>
eigrpd/eigrp_hello.c
eigrpd/eigrp_packet.c
eigrpd/eigrp_packet.h
eigrpd/eigrp_query.c
eigrpd/eigrp_reply.c
eigrpd/eigrp_siaquery.c
eigrpd/eigrp_siareply.c
eigrpd/eigrp_update.c

index 4654ead4340b0e73f05bc4f1fd5edf83dc150d92..67f75c536b3c839547c71779910cb473374c272b 100644 (file)
@@ -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) {
index 9f3de10141096f95f278ac3ada45a433cd812224..cd677f1ae64807862413c8e49fb5db23ca2d489e 100644 (file)
@@ -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;
 
index 890fc33c0f2003fe168121c063358a3a1e64ceab..040204a7fc6abfd6e61f4b535cad561b2ed80788 100644 (file)
@@ -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 *);
 
index 92bc792c6aa80692d55a55c877fbd9f24febca35..d6299ad923bcf2c8c58bb1ab1cf020a81cf3f4cb 100644 (file)
@@ -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) {
index c96c3008ca9677c34366831611328d891e15eee1..1a4af1590099cbae1f7d2c33dae9090a225af122 100644 (file)
@@ -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);
index a5df2381cabf929780ad66cb2a8e6242652b7397..215df7b8ee96f163d7b6d6e887bb0feed69ee6fb 100644 (file)
@@ -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);
index 0b684b498b0e8f21fb5983afa12866b4e897ea29..32f0c8be33f97f6c73dd077ef3f14400d090ed91 100644 (file)
@@ -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);
index 3c82fdfde8e997ce0018904cc93079969488be84..3af5524b8768ff3364b6e7b127d87df59579795e 100644 (file)
@@ -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);