Lines Matching +full:avg +full:- +full:samples
1 /*-
7 * Implemented by Rasool Al-Saadi <ralsaadi@swin.edu.au>
9 * Copyright (c) 2002-2003,2010 Luigi Rizzo
57 { "dst-ip", TOK_DSTIP },
58 { "src-ip", TOK_SRCIP },
59 { "dst-port", TOK_DSTPORT },
60 { "src-port", TOK_SRCPORT },
75 { "fq_codel", TOK_FQ_CODEL}, /* FQ-Codel */
77 { "fq_pie", TOK_FQ_PIE}, /* FQ-PIE */
90 { "flow-id", TOK_FLOWID},
91 { "dst-ipv6", TOK_DSTIP6},
92 { "dst-ip6", TOK_DSTIP6},
93 { "src-ipv6", TOK_SRCIP6},
94 { "src-ip6", TOK_SRCIP6},
97 { "dummynet-params", TOK_NULL },
132 oid->len = len; in oid_fill()
133 oid->type = type; in oid_fill()
134 oid->subtype = 0; in oid_fill()
135 oid->id = id; in oid_fill()
184 * returns -1 if s is not a valid time, otherwise, return time in us
194 return -1; in time_to_us()
198 return -1; in time_to_us()
204 return -1; in time_to_us()
218 return -1; in time_to_us()
237 oid_fill(&ep->oid, l, DN_CMD_GET, DN_API_VERSION); in get_extra_parms()
238 ep->oid.len = l; in get_extra_parms()
239 ep->oid.subtype = subtype; in get_extra_parms()
240 ep->nr = nr; in get_extra_parms()
242 ret = do_cmd(-IP_DUMMYNET3, ep, (uintptr_t)&l); in get_extra_parms()
250 if( !strcasecmp(ep->name, "codel")) { in get_extra_parms()
251 us_to_time(ep->par[0], strt1); in get_extra_parms()
252 us_to_time(ep->par[1], strt2); in get_extra_parms()
255 if (ep->par[2] & CODEL_ECN_ENABLED) in get_extra_parms()
259 } else if( !strcasecmp(ep->name, "pie")) { in get_extra_parms()
260 us_to_time(ep->par[0], strt1); in get_extra_parms()
261 us_to_time(ep->par[1], strt2); in get_extra_parms()
262 us_to_time(ep->par[2], strt3); in get_extra_parms()
267 ep->par[4] / (float) PIE_SCALE, in get_extra_parms()
268 ep->par[5] / (float) PIE_SCALE, in get_extra_parms()
270 ep->par[3] / (float) PIE_SCALE in get_extra_parms()
273 if (ep->par[6] & PIE_ECN_ENABLED) in get_extra_parms()
277 if (ep->par[6] & PIE_CAPDROP_ENABLED) in get_extra_parms()
281 if (ep->par[6] & PIE_ON_OFF_MODE_ENABLED) in get_extra_parms()
283 if (ep->par[6] & PIE_DEPRATEEST_ENABLED) in get_extra_parms()
287 if (ep->par[6] & PIE_DERAND_ENABLED) in get_extra_parms()
295 if (!strcasecmp(ep->name,"FQ_CODEL")) { in get_extra_parms()
296 us_to_time(ep->par[0], strt1); in get_extra_parms()
297 us_to_time(ep->par[1], strt2); in get_extra_parms()
301 (intmax_t) ep->par[3], in get_extra_parms()
302 (intmax_t) ep->par[4], in get_extra_parms()
303 (intmax_t) ep->par[5] in get_extra_parms()
305 if (ep->par[2] & CODEL_ECN_ENABLED) in get_extra_parms()
310 } else if (!strcasecmp(ep->name,"FQ_PIE")) { in get_extra_parms()
311 us_to_time(ep->par[0], strt1); in get_extra_parms()
312 us_to_time(ep->par[1], strt2); in get_extra_parms()
313 us_to_time(ep->par[2], strt3); in get_extra_parms()
319 ep->par[4] / (float) PIE_SCALE, in get_extra_parms()
320 ep->par[5] / (float) PIE_SCALE, in get_extra_parms()
322 ep->par[3] / (float) PIE_SCALE, in get_extra_parms()
323 (intmax_t) ep->par[7], in get_extra_parms()
324 (intmax_t) ep->par[8], in get_extra_parms()
325 (intmax_t) ep->par[9] in get_extra_parms()
328 if (ep->par[6] & PIE_ECN_ENABLED) in get_extra_parms()
332 if (ep->par[6] & PIE_CAPDROP_ENABLED) in get_extra_parms()
336 if (ep->par[6] & PIE_ON_OFF_MODE_ENABLED) in get_extra_parms()
338 if (ep->par[6] & PIE_DEPRATEEST_ENABLED) in get_extra_parms()
342 if (ep->par[6] & PIE_DERAND_ENABLED) in get_extra_parms()
361 int field = rev ? -co.do_sort : co.do_sort;
368 res = a->len - b->len;
371 res = a->len_bytes - b->len_bytes;
375 res = a->tot_pkts - b->tot_pkts;
379 res = a->tot_bytes - b->tot_bytes;
383 res = -1;
386 return (int)(rev ? res : -res);
396 "mask: %s 0x%02x 0x%08x/0x%04x -> 0x%08x/0x%04x\n", in print_mask()
397 id->extra ? "queue," : "", in print_mask()
398 id->proto, in print_mask()
399 id->src_ip, id->src_port, in print_mask()
400 id->dst_ip, id->dst_port); in print_mask()
404 id->extra ? "queue," : "", in print_mask()
405 id->proto, id->flow_id6); in print_mask()
406 inet_ntop(AF_INET6, &(id->src_ip6), buf, sizeof(buf)); in print_mask()
407 printf("%s/0x%04x -> ", buf, id->src_port); in print_mask()
408 inet_ntop(AF_INET6, &(id->dst_ip6), buf, sizeof(buf)); in print_mask()
409 printf("%s/0x%04x\n", buf, id->dst_port); in print_mask()
421 printf("BKT ___Prot___ _flow-id_ " in print_header()
433 struct ipfw_flow_id *id = &ni->fid; in list_flow()
435 pe = getprotobynumber(id->proto); in list_flow()
437 bprintf(bp, "%3u%c", (ni->oid.id) & 0xff, in list_flow()
438 id->extra ? '*' : ' '); in list_flow()
441 bprintf(bp, "%-4s ", pe->p_name); in list_flow()
443 bprintf(bp, "%4u ", id->proto); in list_flow()
444 ina.s_addr = htonl(id->src_ip); in list_flow()
445 bprintf(bp, "%15s/%-5d ", in list_flow()
446 inet_ntoa(ina), id->src_port); in list_flow()
447 ina.s_addr = htonl(id->dst_ip); in list_flow()
448 bprintf(bp, "%15s/%-5d ", in list_flow()
449 inet_ntoa(ina), id->dst_port); in list_flow()
453 bprintf(bp, "%9s ", pe->p_name); in list_flow()
455 bprintf(bp, "%9u ", id->proto); in list_flow()
456 bprintf(bp, "%7d %39s/%-5d ", id->flow_id6, in list_flow()
457 inet_ntop(AF_INET6, &(id->src_ip6), buff, sizeof(buff)), in list_flow()
458 id->src_port); in list_flow()
459 bprintf(bp, " %39s/%-5d ", in list_flow()
460 inet_ntop(AF_INET6, &(id->dst_ip6), buff, sizeof(buff)), in list_flow()
461 id->dst_port); in list_flow()
463 pr_u64(bp, &ni->tot_pkts, 4); in list_flow()
464 pr_u64(bp, &ni->tot_bytes, 8); in list_flow()
466 ni->length, ni->len_bytes, ni->drops); in list_flow()
477 l = fs->qsize; in print_flowset_parms()
478 if (fs->flags & DN_QSIZE_BYTES) { in print_flowset_parms()
485 if (fs->plr[0] || fs->plr[1]) { in print_flowset_parms()
486 if (fs->plr[1] == 0) in print_flowset_parms()
488 1.0 * fs->plr[0] / (double)(0x7fffffff)); in print_flowset_parms()
491 1.0 * fs->plr[0] / (double)(0x7fffffff), in print_flowset_parms()
492 1.0 * fs->plr[1] / (double)(0x7fffffff), in print_flowset_parms()
493 1.0 * fs->plr[2] / (double)(0x7fffffff), in print_flowset_parms()
494 1.0 * fs->plr[3] / (double)(0x7fffffff)); in print_flowset_parms()
498 if (fs->flags & DN_IS_RED) { /* RED parameters */ in print_flowset_parms()
501 (fs->flags & DN_IS_GENTLE_RED) ? 'G' : ' ', in print_flowset_parms()
502 1.0 * fs->w_q / (double)(1 << SCALE_RED), in print_flowset_parms()
503 fs->min_th, in print_flowset_parms()
504 fs->max_th, in print_flowset_parms()
505 1.0 * fs->max_p / (double)(1 << SCALE_RED)); in print_flowset_parms()
506 if (fs->flags & DN_IS_ECN) in print_flowset_parms()
510 } else if (fs->flags & DN_IS_AQM) { in print_flowset_parms()
511 get_extra_parms(fs->fs_nr, red, DN_AQM_PARAMS); in print_flowset_parms()
518 prefix, qs, plr, fs->oid.id, fs->buckets, red); in print_flowset_parms()
523 fs->fs_nr, qs, plr, fs->oid.id, fs->buckets, in print_flowset_parms()
524 fs->sched_nr, fs->par[0], fs->par[1], fs->par[2], red); in print_flowset_parms()
525 if (fs->flags & DN_HAVE_MASK) in print_flowset_parms()
526 print_mask(&fs->flow_mask); in print_flowset_parms()
534 if (p->samples_no <= 0) in print_extra_delay_parms()
537 loss = p->loss_level; in print_extra_delay_parms()
538 loss /= p->samples_no; in print_extra_delay_parms()
539 printf("\t profile: name \"%s\" loss %f samples %d\n", in print_extra_delay_parms()
540 p->name, loss, p->samples_no); in print_extra_delay_parms()
570 for (; oid != end; oid = O_NEXT(oid, oid->len)) { in list_pipes()
571 if (oid->len < sizeof(*oid)) in list_pipes()
572 errx(1, "invalid oid len %d\n", oid->len); in list_pipes()
574 switch (oid->type) { in list_pipes()
577 printf("unrecognized object %d size %d\n", oid->type, oid->len); in list_pipes()
586 l = (oid->len - sizeof(*oid))/sizeof(d->p[0]); in list_pipes()
591 printf("%u ", d->p[i]); in list_pipes()
597 printf("answer for cmd %d, len %d\n", oid->type, oid->id); in list_pipes()
603 s->sched_nr, in list_pipes()
604 s->name, s->flags, s->buckets, s->oid.id); in list_pipes()
607 get_extra_parms(s->sched_nr, parms, DN_SCH_PARAMS); in list_pipes()
610 if (s->flags & DN_HAVE_MASK) in list_pipes()
611 print_mask(&s->sched_mask); in list_pipes()
617 print_header(&((struct dn_flow *)oid)->fid); in list_pipes()
627 double b = p->bandwidth; in list_pipes()
645 if (humanize_number(burst, sizeof(burst), p->burst, in list_pipes()
647 sprintf(burst, "%d", (int)p->burst); in list_pipes()
649 p->link_nr % DN_MAX_ID, bwbuf, p->delay, burst); in list_pipes()
704 * L +-- loss-level x
711 * +-------*------------------->
728 * samples N
729 * the number of samples used in the internal
732 * loss-level L
751 * specified in the "samples" line. ipfw will sort and interpolate
757 samples 100
758 loss-level 0.86
768 * samples, and when it is time to transmit a packet we will
774 #define ED_TOK_SAMPLES "samples"
775 #define ED_TOK_LOSS "loss-level"
784 * returns 1 if s is a non-negative number, with at least one '.'
806 if (*bandwidth != (uint32_t)-1) in read_bandwidth()
815 namelen--; in read_bandwidth()
860 res = p1->prob - p2->prob; in compare_points()
862 res = p1->delay - p2->delay; in compare_points()
864 return -1; in compare_points()
882 int samples = -1; in load_extra_delays() local
883 double loss = -1.0; in load_extra_delays()
885 int delay_first = -1; in load_extra_delays()
891 p->link_nr = link->link_nr; in load_extra_delays()
923 if (samples > 0) in load_extra_delays()
924 errx(ED_EFMT("duplicate ``samples'' line")); in load_extra_delays()
926 errx(ED_EFMT("invalid number of samples")); in load_extra_delays()
927 samples = atoi(arg); in load_extra_delays()
928 if (samples>ED_MAX_SAMPLES_NO) in load_extra_delays()
929 errx(ED_EFMT("too many samples, maximum is %d"), in load_extra_delays()
934 read_bandwidth(arg, &link->bandwidth, buf, sizeof(buf)); in load_extra_delays()
936 if (loss != -1.0) in load_extra_delays()
979 if (samples == -1) { in load_extra_delays()
981 samples = 100; in load_extra_delays()
984 if (loss == -1.0) { in load_extra_delays()
991 errx(ED_EFMT("too few samples, need at least %d"), in load_extra_delays()
997 for (i = 0; i<points_no-1; ++i) { in load_extra_delays()
998 double y1 = points[i].prob * samples; in load_extra_delays()
1000 double y2 = points[i+1].prob * samples; in load_extra_delays()
1008 p->samples[ix] = x1; in load_extra_delays()
1010 double m = (y2-y1)/(x2-x1); in load_extra_delays()
1011 double c = y1 - m*x1; in load_extra_delays()
1013 p->samples[ix] = (ix - c)/m; in load_extra_delays()
1016 p->samples_no = samples; in load_extra_delays()
1017 p->loss_level = loss * samples; in load_extra_delays()
1018 strlcpy(p->name, profile_name, sizeof(p->name)); in load_extra_delays()
1032 ep->par[i] = -1; in process_extra_parms()
1038 * 0- target, 1- interval, 2- flags, in process_extra_parms()
1040 * 3- quantum, 4- limit, 5- flows in process_extra_parms()
1043 ep->par[2] = 0; in process_extra_parms()
1045 ep->par[2] = CODEL_ECN_ENABLED; in process_extra_parms()
1049 (*ac)--; av++; in process_extra_parms()
1055 ep->par[0] = time_to_us(av[0]); in process_extra_parms()
1056 (*ac)--; av++; in process_extra_parms()
1063 ep->par[1] = time_to_us(av[0]); in process_extra_parms()
1064 (*ac)--; av++; in process_extra_parms()
1068 ep->par[2] = CODEL_ECN_ENABLED; in process_extra_parms()
1071 ep->par[2] &= ~CODEL_ECN_ENABLED; in process_extra_parms()
1080 ep->par[3]= atoi(av[0]); in process_extra_parms()
1081 (*ac)--; av++; in process_extra_parms()
1090 ep->par[4] = atoi(av[0]); in process_extra_parms()
1091 (*ac)--; av++; in process_extra_parms()
1100 ep->par[5] = atoi(av[0]); in process_extra_parms()
1101 (*ac)--; av++; in process_extra_parms()
1105 printf("%s is Invalid parameter\n", av[-1]); in process_extra_parms()
1112 * 0- target , 1- tupdate, 2- max_burst, in process_extra_parms()
1113 * 3- max_ecnth, 4- alpha, in process_extra_parms()
1114 * 5- beta, 6- flags in process_extra_parms()
1116 * 7- quantum, 8- limit, 9- flows in process_extra_parms()
1120 ep->par[6] = PIE_CAPDROP_ENABLED | PIE_DEPRATEEST_ENABLED in process_extra_parms()
1123 /* for FQ-PIE, use TS mode */ in process_extra_parms()
1124 ep->par[6] = PIE_CAPDROP_ENABLED | PIE_DERAND_ENABLED in process_extra_parms()
1129 (*ac)--; av++; in process_extra_parms()
1135 ep->par[0] = time_to_us(av[0]); in process_extra_parms()
1136 (*ac)--; av++; in process_extra_parms()
1143 ep->par[1] = time_to_us(av[0]); in process_extra_parms()
1144 (*ac)--; av++; in process_extra_parms()
1151 ep->par[2] = time_to_us(av[0]); in process_extra_parms()
1152 (*ac)--; av++; in process_extra_parms()
1159 ep->par[3] = atof(av[0]) * PIE_SCALE; in process_extra_parms()
1160 (*ac)--; av++; in process_extra_parms()
1167 ep->par[4] = atof(av[0]) * PIE_SCALE; in process_extra_parms()
1168 (*ac)--; av++; in process_extra_parms()
1175 ep->par[5] = atof(av[0]) * PIE_SCALE; in process_extra_parms()
1176 (*ac)--; av++; in process_extra_parms()
1180 ep->par[6] |= PIE_ECN_ENABLED; in process_extra_parms()
1183 ep->par[6] &= ~PIE_ECN_ENABLED; in process_extra_parms()
1187 ep->par[6] |= PIE_CAPDROP_ENABLED; in process_extra_parms()
1190 ep->par[6] &= ~PIE_CAPDROP_ENABLED; in process_extra_parms()
1194 ep->par[6] |= PIE_ON_OFF_MODE_ENABLED; in process_extra_parms()
1198 ep->par[6] |= PIE_DEPRATEEST_ENABLED; in process_extra_parms()
1202 ep->par[6] &= ~PIE_DEPRATEEST_ENABLED; in process_extra_parms()
1206 ep->par[6] |= PIE_DERAND_ENABLED; in process_extra_parms()
1209 ep->par[6] &= ~PIE_DERAND_ENABLED; in process_extra_parms()
1219 ep->par[7]= atoi(av[0]); in process_extra_parms()
1220 (*ac)--; av++; in process_extra_parms()
1229 ep->par[8] = atoi(av[0]); in process_extra_parms()
1230 (*ac)--; av++; in process_extra_parms()
1239 ep->par[9] = atoi(av[0]); in process_extra_parms()
1240 (*ac)--; av++; in process_extra_parms()
1245 printf("%s is invalid parameter\n", av[-1]); in process_extra_parms()
1261 * do_pipe = 1 -> "pipe N config ..." only for backward compatibility
1268 * do_pipe = 2 -> flowset N config
1271 * do_pipe = 3 -> sched N config
1314 av++; ac--; in ipfw_config_pipe()
1317 i = atoi(*av); av++; ac--; in ipfw_config_pipe()
1319 i = -1; in ipfw_config_pipe()
1325 base->id = DN_API_VERSION; in ipfw_config_pipe()
1335 * If we do a 'pipe config' mask -> sched_mask. in ipfw_config_pipe()
1341 sch_extra ->oid.subtype = 0; /* don't configure scheduler */ in ipfw_config_pipe()
1347 aqm_extra ->oid.subtype = 0; /* don't configure AQM */ in ipfw_config_pipe()
1351 sch->sched_nr = i; in ipfw_config_pipe()
1352 sch->oid.subtype = 0; /* defaults to WF2Q+ */ in ipfw_config_pipe()
1353 mask = &sch->sched_mask; in ipfw_config_pipe()
1354 flags = &sch->flags; in ipfw_config_pipe()
1355 buckets = &sch->buckets; in ipfw_config_pipe()
1358 p->link_nr = i; in ipfw_config_pipe()
1361 fs->fs_nr = i + 2*DN_MAX_ID; in ipfw_config_pipe()
1362 fs->sched_nr = i + DN_MAX_ID; in ipfw_config_pipe()
1368 aqm_extra ->oid.subtype = 0; in ipfw_config_pipe()
1371 fs->fs_nr = i; in ipfw_config_pipe()
1372 mask = &fs->flow_mask; in ipfw_config_pipe()
1373 flags = &fs->flags; in ipfw_config_pipe()
1374 buckets = &fs->buckets; in ipfw_config_pipe()
1380 sch_extra ->oid.subtype = 0; in ipfw_config_pipe()
1385 aqm_extra ->oid.subtype = 0; in ipfw_config_pipe()
1388 sch->sched_nr = i; in ipfw_config_pipe()
1389 mask = &sch->sched_mask; in ipfw_config_pipe()
1390 flags = &sch->flags; in ipfw_config_pipe()
1391 buckets = &sch->buckets; in ipfw_config_pipe()
1393 fs->fs_nr = i + DN_MAX_ID; in ipfw_config_pipe()
1394 fs->sched_nr = i; in ipfw_config_pipe()
1397 /* set to -1 those fields for which we want to reuse existing in ipfw_config_pipe()
1403 p->bandwidth = -1; in ipfw_config_pipe()
1404 for (j = 0; j < nitems(fs->par); j++) in ipfw_config_pipe()
1405 fs->par[j] = -1; in ipfw_config_pipe()
1409 ac--; av++; in ipfw_config_pipe()
1414 fs->flags |= DN_NOERROR; in ipfw_config_pipe()
1423 fs->plr[0] = (int)(d*0x7fffffff); in ipfw_config_pipe()
1428 fs->plr[1] = (int)(d*0x7fffffff); in ipfw_config_pipe()
1433 fs->plr[2] = (int)(d*0x7fffffff); in ipfw_config_pipe()
1438 fs->plr[3] = (int)(d*0x7fffffff); in ipfw_config_pipe()
1440 ac--; av++; in ipfw_config_pipe()
1447 fs->qsize = strtoul(av[0], &end, 0); in ipfw_config_pipe()
1449 fs->flags |= DN_QSIZE_BYTES; in ipfw_config_pipe()
1450 fs->qsize *= 1024; in ipfw_config_pipe()
1453 fs->flags |= DN_QSIZE_BYTES; in ipfw_config_pipe()
1455 ac--; av++; in ipfw_config_pipe()
1462 ac--; av++; in ipfw_config_pipe()
1471 * per-flow queue, mask is dst_ip, dst_port, in ipfw_config_pipe()
1486 ac--; av++; in ipfw_config_pipe()
1493 mask->dst_ip = ~0; in ipfw_config_pipe()
1494 mask->src_ip = ~0; in ipfw_config_pipe()
1495 mask->dst_port = ~0; in ipfw_config_pipe()
1496 mask->src_port = ~0; in ipfw_config_pipe()
1497 mask->proto = ~0; in ipfw_config_pipe()
1498 n2mask(&mask->dst_ip6, 128); in ipfw_config_pipe()
1499 n2mask(&mask->src_ip6, 128); in ipfw_config_pipe()
1500 mask->flow_id6 = ~0; in ipfw_config_pipe()
1505 mask->extra = ~0; in ipfw_config_pipe()
1510 mask->addr_type = 4; in ipfw_config_pipe()
1511 p32 = &mask->dst_ip; in ipfw_config_pipe()
1515 mask->addr_type = 4; in ipfw_config_pipe()
1516 p32 = &mask->src_ip; in ipfw_config_pipe()
1520 mask->addr_type = 6; in ipfw_config_pipe()
1521 pa6 = &mask->dst_ip6; in ipfw_config_pipe()
1525 mask->addr_type = 6; in ipfw_config_pipe()
1526 pa6 = &mask->src_ip6; in ipfw_config_pipe()
1530 mask->addr_type = 6; in ipfw_config_pipe()
1531 p20 = &mask->flow_id6; in ipfw_config_pipe()
1535 p16 = &mask->dst_port; in ipfw_config_pipe()
1539 p16 = &mask->src_port; in ipfw_config_pipe()
1546 ac++; av--; /* backtrack */ in ipfw_config_pipe()
1554 a = (a == 32) ? ~0 : (1 << a) - 1; in ipfw_config_pipe()
1579 mask->proto = (uint8_t)a; in ipfw_config_pipe()
1583 ac--; av++; in ipfw_config_pipe()
1592 fs->flags &= ~(DN_IS_RED|DN_IS_GENTLE_RED); in ipfw_config_pipe()
1593 fs->flags |= DN_IS_AQM; in ipfw_config_pipe()
1595 strlcpy(aqm_extra->name, av[-1], in ipfw_config_pipe()
1596 sizeof(aqm_extra->name)); in ipfw_config_pipe()
1597 aqm_extra->oid.subtype = DN_AQM_PARAMS; in ipfw_config_pipe()
1604 if (!strcmp(av[-1],"type")) in ipfw_config_pipe()
1608 strlcpy(sch_extra->name, av[-1], in ipfw_config_pipe()
1609 sizeof(sch_extra->name)); in ipfw_config_pipe()
1610 sch_extra->oid.subtype = DN_SCH_PARAMS; in ipfw_config_pipe()
1617 fs->flags |= DN_IS_RED; in ipfw_config_pipe()
1619 fs->flags |= DN_IS_GENTLE_RED; in ipfw_config_pipe()
1627 fs->w_q = (int) (w_q * (1 << SCALE_RED)); in ipfw_config_pipe()
1630 fs->min_th = strtoul(end, &end, 0); in ipfw_config_pipe()
1632 fs->min_th *= 1024; in ipfw_config_pipe()
1635 fs->max_th = strtoul(end, &end, 0); in ipfw_config_pipe()
1637 fs->max_th *= 1024; in ipfw_config_pipe()
1643 fs->max_p = (int)(max_p * (1 << SCALE_RED)); in ipfw_config_pipe()
1645 ac--; av++; in ipfw_config_pipe()
1649 fs->flags |= DN_IS_ECN; in ipfw_config_pipe()
1654 fs->flags &= ~(DN_IS_RED|DN_IS_GENTLE_RED); in ipfw_config_pipe()
1660 read_bandwidth(av[0], &p->bandwidth, NULL, 0); in ipfw_config_pipe()
1661 ac--; av++; in ipfw_config_pipe()
1667 p->delay = strtoul(av[0], NULL, 0); in ipfw_config_pipe()
1668 ac--; av++; in ipfw_config_pipe()
1678 strlcpy(sch->name, av[0], sizeof(sch->name)); in ipfw_config_pipe()
1679 sch->oid.subtype = 0; /* use string */ in ipfw_config_pipe()
1685 strlcpy(sch_extra->name, av[0], in ipfw_config_pipe()
1686 sizeof(sch_extra->name)); in ipfw_config_pipe()
1687 sch_extra->oid.subtype = DN_SCH_PARAMS; in ipfw_config_pipe()
1690 ac--;av++; in ipfw_config_pipe()
1693 ac--;av++; in ipfw_config_pipe()
1701 fs->par[0] = strtol(av[0], &end, 0); in ipfw_config_pipe()
1702 ac--; av++; in ipfw_config_pipe()
1708 fs->par[1] = strtol(av[0], &end, 0); in ipfw_config_pipe()
1709 ac--; av++; in ipfw_config_pipe()
1715 fs->par[2] = strtol(av[0], &end, 0); in ipfw_config_pipe()
1716 ac--; av++; in ipfw_config_pipe()
1723 fs->sched_nr = strtoul(av[0], &end, 0); in ipfw_config_pipe()
1724 ac--; av++; in ipfw_config_pipe()
1734 --ac; ++av; in ipfw_config_pipe()
1742 if (expand_number(av[0], &p->burst) < 0) in ipfw_config_pipe()
1746 if (errno || p->burst > (1ULL << 48) - 1) in ipfw_config_pipe()
1748 "burst: out of range (0..2^48-1)"); in ipfw_config_pipe()
1749 ac--; av++; in ipfw_config_pipe()
1753 errx(EX_DATAERR, "unrecognised option ``%s''", av[-1]); in ipfw_config_pipe()
1759 if (p->delay > 10000) in ipfw_config_pipe()
1761 if (p->bandwidth == (uint32_t)-1) in ipfw_config_pipe()
1762 p->bandwidth = 0; in ipfw_config_pipe()
1766 if (fs->flags & DN_QSIZE_BYTES) { in ipfw_config_pipe()
1772 &limit, &len, NULL, 0) == -1) in ipfw_config_pipe()
1774 if (fs->qsize > limit) in ipfw_config_pipe()
1782 &limit, &len, NULL, 0) == -1) in ipfw_config_pipe()
1784 if (fs->qsize > limit) in ipfw_config_pipe()
1789 if ((fs->flags & DN_IS_ECN) && !((fs->flags & DN_IS_RED)|| in ipfw_config_pipe()
1790 (fs->flags & DN_IS_AQM))) in ipfw_config_pipe()
1794 if ((fs->flags & DN_IS_ECN) && !(fs->flags & DN_IS_RED)) in ipfw_config_pipe()
1799 if (fs->flags & DN_IS_RED) { in ipfw_config_pipe()
1803 if (!(fs->flags & DN_IS_ECN) && (fs->min_th >= fs->max_th)) in ipfw_config_pipe()
1805 fs->min_th, fs->max_th); in ipfw_config_pipe()
1806 else if ((fs->flags & DN_IS_ECN) && (fs->min_th > fs->max_th)) in ipfw_config_pipe()
1808 fs->min_th, fs->max_th); in ipfw_config_pipe()
1810 if (fs->max_th == 0) in ipfw_config_pipe()
1815 &lookup_depth, &len, NULL, 0) == -1) in ipfw_config_pipe()
1823 &avg_pkt_size, &len, NULL, 0) == -1) in ipfw_config_pipe()
1833 * Ticks needed for sending a medium-sized packet. in ipfw_config_pipe()
1846 * max idle time (in ticks) before avg queue size becomes 0. in ipfw_config_pipe()
1848 * (1-w_q)^x < 10^-3. in ipfw_config_pipe()
1850 w_q = ((double)fs->w_q) / (1 << SCALE_RED); in ipfw_config_pipe()
1852 fs->lookup_step = (int)idle / lookup_depth; in ipfw_config_pipe()
1853 if (!fs->lookup_step) in ipfw_config_pipe()
1854 fs->lookup_step = 1; in ipfw_config_pipe()
1855 weight = 1 - w_q; in ipfw_config_pipe()
1856 for (t = fs->lookup_step; t > 1; --t) in ipfw_config_pipe()
1857 weight *= 1 - w_q; in ipfw_config_pipe()
1858 fs->lookup_weight = (int)(weight * (1 << SCALE_RED)); in ipfw_config_pipe()
1863 i = do_cmd(IP_DUMMYNET3, base, (char *)buf - (char *)base); in ipfw_config_pipe()
1893 for (s = *av; s != NULL; av++, ac--) { in parse_range()
1895 v[1] = (*endptr != '-') ? v[0] : in parse_range()
1908 av--; in parse_range()
1911 v[0] >= DN_MAX_ID-1 || in parse_range()
1912 v[1] >= DN_MAX_ID-1) { in parse_range()
1930 * Format for a range can be n1-n2 or n3 n4 n5 ...
1932 * A number 'n4' is translate in a range 'n4-n4'
1933 * All number must be > 0 and < DN_MAX_ID-1
1945 ac--; in dummynet_list()
1973 oid->subtype = DN_LINK; /* list pipe */ in dummynet_list()
1976 oid->subtype = DN_FS; /* list queue */ in dummynet_list()
1979 oid->subtype = DN_SCH; /* list sched */ in dummynet_list()
1993 ret = do_cmd(-IP_DUMMYNET3, oid, (uintptr_t)&l); in dummynet_list()
1994 if (ret != 0 || oid->id <= sizeof(*oid)) in dummynet_list()
1996 buflen = oid->id + max_size; in dummynet_list()
1997 oid->len = sizeof(*oid); /* restore */ in dummynet_list()
2003 bcopy(oid, x, oid->len); in dummynet_list()
2004 ret = do_cmd(-IP_DUMMYNET3, x, (uintptr_t)&l); in dummynet_list()
2005 if (ret != 0 || x->id <= sizeof(*oid)) in dummynet_list()