Remove debug message.
[ipfw.git] / ipfw / dummynet.c
index fd8fc4d..6cfbff0 100644 (file)
@@ -32,6 +32,7 @@
 
 #include <ctype.h>
 #include <err.h>
+#include <errno.h>
 #include <netdb.h>
 #include <stdio.h>
 #include <stdlib.h>
@@ -70,12 +71,13 @@ static struct _s_x dummynet_params[] = {
        { "src-ipv6",           TOK_SRCIP6},
        { "src-ip6",            TOK_SRCIP6},
        { "profile",            TOK_PIPE_PROFILE},
+       { "burst",              TOK_BURST},
        { "dummynet-params",    TOK_NULL },
        { NULL, 0 }     /* terminator */
 };
 
 static int
-sort_q(const void *pa, const void *pb)
+sort_q(void *arg, const void *pa, const void *pb)
 {
        int rev = (co.do_sort < 0);
        int field = rev ? -co.do_sort : co.do_sort;
@@ -118,7 +120,7 @@ list_queues(struct dn_flow_set *fs, struct dn_flow_queue *q)
                return;
 
        if (co.do_sort != 0)
-               heapsort(q, fs->rq_elements, sizeof *q, sort_q);
+               qsort_r(q, fs->rq_elements, sizeof *q, NULL, sort_q);
 
        /* Print IPv4 flows */
        index_printed = 0;
@@ -250,7 +252,7 @@ print_flowset_parms(struct dn_flow_set *fs, char *prefix)
 }
 
 static void
-print_extra_delay_parms(struct dn_pipe *p, char *prefix)
+print_extra_delay_parms(struct dn_pipe *p)
 {
        double loss;
        if (p->samples_no <= 0)
@@ -258,8 +260,8 @@ print_extra_delay_parms(struct dn_pipe *p, char *prefix)
 
        loss = p->loss_level;
        loss /= p->samples_no;
-       printf("%s profile: name \"%s\" loss %f samples %d\n",
-               prefix, p->name, loss, p->samples_no);
+       printf("\t profile: name \"%s\" loss %f samples %d\n",
+               p->name, loss, p->samples_no);
 }
 
 void
@@ -280,6 +282,7 @@ ipfw_list_pipes(void *data, uint nbytes, int ac, char *av[])
                double b = p->bandwidth;
                char buf[30];
                char prefix[80];
+               char burst[5 + 7];
 
                if (SLIST_NEXT(p, next) != (struct dn_pipe *)DN_IS_PIPE)
                        break;  /* done with pipes, now queues */
@@ -311,10 +314,16 @@ ipfw_list_pipes(void *data, uint nbytes, int ac, char *av[])
                sprintf(prefix, "%05d: %s %4d ms ",
                    p->pipe_nr, buf, p->delay);
 
-               print_extra_delay_parms(p, prefix);
-
                print_flowset_parms(&(p->fs), prefix);
 
+               if (humanize_number(burst, sizeof(burst), p->burst,
+                   "Byte", HN_AUTOSCALE, 0) < 0 || co.verbose)
+                       printf("\t burst: %ju Byte\n", p->burst);
+               else
+                       printf("\t burst: %s\n", burst);
+
+               print_extra_delay_parms(p);
+
                q = (struct dn_flow_queue *)(p+1);
                list_queues(&(p->fs), q);
        }
@@ -446,7 +455,6 @@ ipfw_delete_pipe(int pipe_or_queue, int i)
  *
  */
 
-/* XXX move to an array definition ? */
 #define ED_MAX_LINE_LEN        256+ED_MAX_NAME_LEN
 #define ED_TOK_SAMPLES "samples"
 #define ED_TOK_LOSS    "loss-level"
@@ -477,7 +485,7 @@ is_valid_number(const char *s)
  * and return the numeric bandwidth value.
  * set clocking interface or bandwidth value
  */
-void
+static void
 read_bandwidth(char *arg, int *bandwidth, char *if_name, int namelen)
 {
        if (*bandwidth != -1)
@@ -521,7 +529,7 @@ struct point {
        double delay;
 };
 
-int
+static int
 compare_points(const void *vp1, const void *vp2)
 {
        const struct point *p1 = vp1;
@@ -641,6 +649,8 @@ load_extra_delays(const char *filename, struct dn_pipe *p)
                }
        }
 
+       fclose (f);
+
        if (samples == -1) {
            warnx("'%s' not found, assuming 100", ED_TOK_SAMPLES);
            samples = 100;
@@ -934,6 +944,21 @@ end_mask:
                        --ac; ++av;
                        break;
 
+               case TOK_BURST:
+                       if (co.do_pipe != 1)
+                               errx(EX_DATAERR, "burst only valid for pipes");
+                       NEED1("burst needs argument\n");
+                       errno = 0;
+                       if (expand_number(av[0], (int64_t *)&p.burst) < 0)
+                               if (errno != ERANGE)
+                                       errx(EX_DATAERR,
+                                               "burst: invalid argument");
+                       if (errno || p.burst > (1ULL << 48) - 1)
+                               errx(EX_DATAERR,
+                                       "burst: out of range (0..2^48-1)");
+                       ac--; av++;
+                       break;
+
                default:
                        errx(EX_DATAERR, "unrecognised option ``%s''", av[-1]);
                }