svn commit: r201842 - user/luigi/ipfw3-head/sbin/ipfw
Luigi Rizzo
luigi at FreeBSD.org
Fri Jan 8 22:31:43 UTC 2010
Author: luigi
Date: Fri Jan 8 22:31:42 2010
New Revision: 201842
URL: http://svn.freebsd.org/changeset/base/201842
Log:
pass parameters for profile
Modified:
user/luigi/ipfw3-head/sbin/ipfw/dummynet.c
Modified: user/luigi/ipfw3-head/sbin/ipfw/dummynet.c
==============================================================================
--- user/luigi/ipfw3-head/sbin/ipfw/dummynet.c Fri Jan 8 22:28:54 2010 (r201841)
+++ user/luigi/ipfw3-head/sbin/ipfw/dummynet.c Fri Jan 8 22:31:42 2010 (r201842)
@@ -570,10 +570,8 @@ compare_points(const void *vp1, const vo
#define ED_EFMT(s) EX_DATAERR,"error in %s at line %d: "#s,filename,lineno
-void
-load_extra_delays(const char *filename, struct dn_pipe *p);
-void
-load_extra_delays(const char *filename, struct dn_pipe *p)
+static void
+load_extra_delays(const char *filename, struct new_profile *p)
{
char line[ED_MAX_LINE_LEN];
FILE *f;
@@ -628,7 +626,8 @@ load_extra_delays(const char *filename,
ED_MAX_SAMPLES_NO);
do_points = 0;
} else if (!strcasecmp(name, ED_TOK_BW)) {
- read_bandwidth(arg, &p->bandwidth, p->if_name, sizeof(p->if_name));
+ char buf[IFNAMSIZ];
+ read_bandwidth(arg, &p->bandwidth, buf, sizeof(buf));
} else if (!strcasecmp(name, ED_TOK_LOSS)) {
if (loss != -1.0)
errx(ED_EFMT("duplicated token: %s"), name);
@@ -734,13 +733,12 @@ ipfw_config_pipe(int ac, char **av)
struct new_pipe *p = NULL;
struct new_fs *fs = NULL;
struct new_profile *pf = NULL;
+ struct new_cmd *cmd = NULL;
struct ipfw_flow_id *mask = NULL;
- int lmax = sizeof(*sch) + sizeof(*p) + sizeof(*fs) + sizeof(*pf);
+ int lmax = sizeof(*cmd); /* always present */
- base = buf = calloc(1, lmax);
- if (buf == NULL) {
- errx(1, "no memory for pipe buffer");
- }
+ /* worst case: 2 schedulers, 1 profile, 1 pipe, 1 flowset */
+ lmax += 2*sizeof(*sch) + sizeof(*p) + sizeof(*fs) + sizeof(*pf);
av++; ac--;
/* Pipe number */
@@ -749,12 +747,19 @@ ipfw_config_pipe(int ac, char **av)
}
if (i <= 0)
errx(EX_USAGE, "need a pipe/flowset/sched number");
+ base = buf = calloc(1, lmax);
+ if (buf == NULL) {
+ errx(1, "no memory for pipe buffer");
+ }
+ cmd = o_next(&buf, sizeof(*cmd), DN_CMD_CONFIGURE);
+ cmd->entries = 0; /* no explicit arguments */
+
switch (co.do_pipe) {
case 1:
sch = o_next(&buf, sizeof(*sch), DN_SCH);
p = o_next(&buf, sizeof(*p), DN_PIPE);
fs = o_next(&buf, sizeof(*fs), DN_FS);
- mask = &sch->sched_mask; // XXX or both ?
+ mask = &sch->sched_mask;
sch->pipe_nr = p->pipe_nr = i;
fs->fs_nr = i + DN_PIPEOFFSET;
fs->sched_nr = sch->sched_nr = i + DN_PIPEOFFSET;
@@ -769,7 +774,7 @@ ipfw_config_pipe(int ac, char **av)
case 3: /* scheduler */
sch = o_next(&buf, sizeof(*sch), DN_SCH);
sch->sched_nr = i;
- mask = &sch->sched_mask; // XXX or both ?
+ mask = &sch->sched_mask;
break;
}
@@ -1001,22 +1006,17 @@ end_mask:
ac--; av++;
break;
-#if 0
case TOK_PIPE_PROFILE:
NEED((!pf), "profile already set");
NEED(p, "profile");
{
- pf = o_next(&buf, sizeof(*pf));
- int samples[ED_MAX_SAMPLES_NO];
- if (co.do_pipe != 1)
- errx(EX_DATAERR, "extra delay only valid for pipes");
+ pf = o_next(&buf, sizeof(*pf), DN_PROFILE);
NEED1("extra delay needs the file name\n");
- p.samples = &samples[0];
- load_extra_delays(av[0], &p);
+ load_extra_delays(av[0], pf);
--ac; ++av;
}
break;
-#endif
+
case TOK_BURST:
NEED(p, "burst");
NEED1("burst needs argument\n");
More information about the svn-src-user
mailing list