dummynet log messages after recent update

Chuck Swiger cswiger at mac.com
Fri Nov 13 19:40:57 UTC 2009

Hi, Ben--

On Nov 13, 2009, at 10:43 AM, Ben Kelly wrote:
> I recently upgraded my firewall from a soekris net4501 to a  
> net5501.  As part of this process I update my freebsd sources to  
> CURRENT as of 11/13/2009 1300 GMT.  Once the new box was up and  
> running I noticed some odd output in the logs:
>  Nov 13 18:30:19 gate kernel: dummynet: OUCH! pipe should have been  
> idle!
>  Nov 13 18:30:34 gate last message repeated 15 times

The message is coming from netinet/ip_dummynet.c:

                  * Look at eligibility. A flow is not eligibile if  
S>V (when
                  * this happens, it means that there is some other  
flow already
                  * scheduled for the same pipe, so the scheduler_heap  
cannot be
                  * empty). If the flow is not eligible we just store  
it in the
                  * not_eligible_heap. Otherwise, we store in the  
                  * and possibly invoke ready_event_wfq() right now if  
there is
                  * leftover credit.
                  * Note that for all flows in scheduler_heap (SCH),  
S_i <= V,
                  * and for all flows in not_eligible_heap (NEH), S_i  
 > V.
                  * So when we need to compute max(V, min(S_i)) forall  
i in
                  * SCH+NEH, we only need to look into NEH.
                 if (DN_KEY_GT(q->S, pipe->V)) {         /* Not  
eligible. */
                         if (pipe->scheduler_heap.elements == 0)
                                 printf("dummynet: ++ ouch! not  
eligible but empty scheduler!\n");
                         heap_insert(&(pipe->not_eligible_heap), q->S,  
                 } else {
                         heap_insert(&(pipe->scheduler_heap), q->F, q);
                         if (pipe->numbytes >= 0) {       /* Pipe is  
idle. */
                                 if (pipe->scheduler_heap.elements != 1)
                                         printf("dummynet: OUCH! pipe  
should have been idle!\n");
                                 DPRINTF(("dummynet: waking up pipe %d  
at %d\n",
                                     pipe->pipe_nr, (int)(q->F >>  
                                 pipe->sched_time = curr_time;
                                 ready_event_wfq(pipe, &head, &tail);

I'm not entirely sure of logic in the /* Pipe is idle. */ test is  
right-- if pipe->numbytes == 0, I'd agree the pipe is idle, but if you  
have some bytes of traffic in the pipe, the the assumption that the  
current packet is the only traffic doesn't seem to make sense.  But,  
I'm not the author of the code....  :-)


More information about the freebsd-current mailing list