]> git.puffer.fish Git - matthieu/frr.git/commitdiff
ospfd: Increase packets sent at one time in ospf_write
authorDonald Sharp <sharpd@nvidia.com>
Wed, 10 Aug 2022 20:15:29 +0000 (16:15 -0400)
committerDonald Sharp <sharpd@nvidia.com>
Thu, 11 Aug 2022 17:30:32 +0000 (13:30 -0400)
ospf_write pulls an interface off the ospf->oi_write_q
then writes one packet and places it back on the queue,
keeping track of the first one sent.  Then it will
stop sending packets even if we get back to the first
interface written too but before we have sent the full
pkt_count.  I do not believe this makes a whole bunch
of sense and is very restrictive of how much data can
be sent especially if you have a limited number of peers
but large amounts of data.  Why be so restrictive?

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
ospfd/ospf_packet.c

index 4b3f30a3f19d0212de65d7c706db1786a9670b98..907cb15ed5bc649dee8b97b95cff66ebbfc822d5 100644 (file)
@@ -623,7 +623,6 @@ static void ospf_write(struct thread *thread)
 {
        struct ospf *ospf = THREAD_ARG(thread);
        struct ospf_interface *oi;
-       struct ospf_interface *last_serviced_oi = NULL;
        struct ospf_packet *op;
        struct sockaddr_in sa_dst;
        struct ip iph;
@@ -664,13 +663,7 @@ static void ospf_write(struct thread *thread)
                ipid = (time(NULL) & 0xffff);
 #endif /* WANT_OSPF_WRITE_FRAGMENT */
 
-       while ((pkt_count < ospf->write_oi_count) && oi
-              && (last_serviced_oi != oi)) {
-               /* If there is only packet in the queue, the oi is removed from
-                  write-q, so fix up the last interface that was serviced */
-               if (last_serviced_oi == NULL) {
-                       last_serviced_oi = oi;
-               }
+       while ((pkt_count < ospf->write_oi_count) && oi) {
                pkt_count++;
 #ifdef WANT_OSPF_WRITE_FRAGMENT
                /* convenience - max OSPF data per packet */
@@ -853,11 +846,9 @@ static void ospf_write(struct thread *thread)
                list_delete_node(ospf->oi_write_q, node);
                if (ospf_fifo_head(oi->obuf) == NULL) {
                        oi->on_write_q = 0;
-                       last_serviced_oi = NULL;
                        oi = NULL;
-               } else {
+               } else
                        listnode_add(ospf->oi_write_q, oi);
-               }
 
                /* Setup to service from the head of the queue again */
                if (!list_isempty(ospf->oi_write_q)) {