svn commit: r203321 - in user/luigi/ipfw3-head: sbin/ipfw
sys/netinet sys/netinet/ipfw
Luigi Rizzo
luigi at FreeBSD.org
Sun Jan 31 21:39:25 UTC 2010
Author: luigi
Date: Sun Jan 31 21:39:25 2010
New Revision: 203321
URL: http://svn.freebsd.org/changeset/base/203321
Log:
mega rename of new_* to dn_* for all data structures.
Modified:
user/luigi/ipfw3-head/sbin/ipfw/dummynet.c
user/luigi/ipfw3-head/sys/netinet/ip_dummynet.h
user/luigi/ipfw3-head/sys/netinet/ipfw/dn_sched.h
user/luigi/ipfw3-head/sys/netinet/ipfw/dn_sched_fifo.c
user/luigi/ipfw3-head/sys/netinet/ipfw/dn_sched_qfq.c
user/luigi/ipfw3-head/sys/netinet/ipfw/dn_sched_rr.c
user/luigi/ipfw3-head/sys/netinet/ipfw/dn_sched_wf2q.c
user/luigi/ipfw3-head/sys/netinet/ipfw/dn_test.h
user/luigi/ipfw3-head/sys/netinet/ipfw/dummynet.txt
user/luigi/ipfw3-head/sys/netinet/ipfw/ip_dn_io.c
user/luigi/ipfw3-head/sys/netinet/ipfw/ip_dn_private.h
user/luigi/ipfw3-head/sys/netinet/ipfw/ip_dummynet.c
user/luigi/ipfw3-head/sys/netinet/ipfw/test_dn_sched.c
Modified: user/luigi/ipfw3-head/sbin/ipfw/dummynet.c
==============================================================================
--- user/luigi/ipfw3-head/sbin/ipfw/dummynet.c Sun Jan 31 21:22:45 2010 (r203320)
+++ user/luigi/ipfw3-head/sbin/ipfw/dummynet.c Sun Jan 31 21:39:25 2010 (r203321)
@@ -208,7 +208,7 @@ list_flow(struct dn_flow *ni)
}
static void
-print_flowset_parms(struct new_fs *fs, char *prefix)
+print_flowset_parms(struct dn_fs *fs, char *prefix)
{
int l;
char qs[30];
@@ -255,7 +255,7 @@ print_flowset_parms(struct new_fs *fs, c
}
static void
-print_extra_delay_parms(struct new_profile *p)
+print_extra_delay_parms(struct dn_profile *p)
{
double loss;
if (p->samples_no <= 0)
@@ -321,7 +321,7 @@ list_pipes(struct dn_id *oid, struct dn_
printf("answer for cmd %d, len %d\n", oid->type, oid->id);
break;
case DN_SCH: {
- struct new_sch *s = (struct new_sch *)oid;
+ struct dn_sch *s = (struct dn_sch *)oid;
flush_buf(buf);
printf(" sched %d type %s flags 0x%x %d buckets\n",
s->sched_nr,
@@ -362,11 +362,11 @@ list_pipes(struct dn_id *oid, struct dn_
break;
case DN_FS:
- print_flowset_parms((struct new_fs *)oid, buf);
+ print_flowset_parms((struct dn_fs *)oid, buf);
break;
case DN_PROFILE:
flush_buf(buf);
- print_extra_delay_parms((struct new_profile *)oid);
+ print_extra_delay_parms((struct dn_profile *)oid);
}
}
flush_buf(buf);
@@ -604,7 +604,7 @@ compare_points(const void *vp1, const vo
#define ED_EFMT(s) EX_DATAERR,"error in %s at line %d: "#s,filename,lineno
static void
-load_extra_delays(const char *filename, struct new_profile *p)
+load_extra_delays(const char *filename, struct dn_profile *p)
{
char line[ED_MAX_LINE_LEN];
FILE *f;
@@ -774,10 +774,10 @@ ipfw_config_pipe(int ac, char **av)
char *end;
void *par = NULL;
struct dn_id *buf, *base;
- struct new_sch *sch = NULL;
+ struct dn_sch *sch = NULL;
struct dn_link *p = NULL;
- struct new_fs *fs = NULL;
- struct new_profile *pf = NULL;
+ struct dn_fs *fs = NULL;
+ struct dn_profile *pf = NULL;
struct ipfw_flow_id *mask = NULL;
int lmax;
int _foo = 0, *flags = &_foo;
@@ -787,8 +787,8 @@ ipfw_config_pipe(int ac, char **av)
* 1 scheduler, 1 link, 1 flowset, 1 profile
*/
lmax = sizeof(struct dn_id); /* command header */
- lmax += sizeof(struct new_sch) + sizeof(struct dn_link) +
- sizeof(struct new_fs) + sizeof(struct new_profile);
+ lmax += sizeof(struct dn_sch) + sizeof(struct dn_link) +
+ sizeof(struct dn_fs) + sizeof(struct dn_profile);
av++; ac--;
/* Pipe number */
@@ -1251,7 +1251,7 @@ end_mask:
p.fs.lookup_weight = (int)(weight * (1 << SCALE_RED));
}
if (p.samples_no <= 0) {
- struct new_profile *prof;
+ struct dn_profile *prof;
prof = o_next(&o, sizeof(*prof), DN_PROFILE);
i = do_cmd(IP_DUMMYNET_CONFIGURE, prof, sizeof *prof);
} else
Modified: user/luigi/ipfw3-head/sys/netinet/ip_dummynet.h
==============================================================================
--- user/luigi/ipfw3-head/sys/netinet/ip_dummynet.h Sun Jan 31 21:22:45 2010 (r203320)
+++ user/luigi/ipfw3-head/sys/netinet/ip_dummynet.h Sun Jan 31 21:39:25 2010 (r203321)
@@ -53,7 +53,7 @@ struct dn_id {
uint16_t len; /* total obj len including this header */
uint8_t type;
uint8_t subtype;
- uintptr_t id; /* generic id or pointer */
+ uint32_t id; /* generic id */
};
/*
@@ -119,7 +119,7 @@ struct dn_link {
* flow masks, buckets for the flow hash, and possibly scheduler-
* specific parameters (weight, quantum and so on).
*/
-struct new_fs {
+struct dn_fs {
struct dn_id oid;
uint32_t fs_nr; /* the flowset number */
int flags; /* userland flags */
@@ -129,7 +129,9 @@ struct new_fs {
struct ipfw_flow_id flow_mask;
uint32_t sched_nr; /* the scheduler we attach to */
- /* generic scheduler parameters. Leave them at -1 if unset */
+ /* generic scheduler parameters. Leave them at -1 if unset.
+ * Now we use 0: weight, 1: lmax, 2: priority
+ */
int par[4];
};
@@ -140,13 +142,13 @@ struct new_fs {
* of the parent object.
*/
struct dn_flow {
- struct dn_id oid;
- struct ipfw_flow_id fid;
+ struct dn_id oid;
+ struct ipfw_flow_id fid;
+ uint64_t tot_pkts; /* statistics counters */
+ uint64_t tot_bytes;
uint32_t length; /* Queue lenght, in packets */
uint32_t len_bytes; /* Queue lenght, in bytes */
uint32_t drops;
- uint64_t tot_pkts; /* statistics counters */
- uint64_t tot_bytes;
};
@@ -154,11 +156,11 @@ struct dn_flow {
* Scheduler template, mostly indicating the name, number,
* sched_mask and buckets.
*/
-struct new_sch {
- struct dn_id oid;
- int sched_nr; /* N, scheduler number */
- int buckets; /* number of buckets for the instances */
- int flags; /* have_mask, ... */
+struct dn_sch {
+ struct dn_id oid;
+ uint32_t sched_nr; /* N, scheduler number */
+ uint32_t buckets; /* number of buckets for the instances */
+ uint32_t flags; /* have_mask, ... */
char name[16]; /* null terminated */
/* mask to select the appropriate scheduler instance */
@@ -168,15 +170,15 @@ struct new_sch {
/* A delay profile is attached to a link */
#define ED_MAX_SAMPLES_NO 1024
-struct new_profile {
- struct dn_id oid;
+struct dn_profile {
+ struct dn_id oid;
/* fields to simulate a delay profile */
#define ED_MAX_NAME_LEN 32
- char name[ED_MAX_NAME_LEN];
- int link_nr;
- int loss_level;
- int bandwidth;
- int samples_no; /* actual length of samples[] */
+ char name[ED_MAX_NAME_LEN];
+ int link_nr;
+ int loss_level;
+ int bandwidth;
+ int samples_no; /* actual length of samples[] */
int samples[ED_MAX_SAMPLES_NO]; /* may be shorter */
};
@@ -225,8 +227,8 @@ the objects used by dummynet:
+ dn_profile describes a delay profile;
+ dn_flow describes the flow status (flow id, statistics)
- + new_sch describes a scheduler
- + new_fs describes a flowset (msk, weight, queue parameters)
+ + dn_sch describes a scheduler
+ + dn_fs describes a flowset (msk, weight, queue parameters)
*
*/
Modified: user/luigi/ipfw3-head/sys/netinet/ipfw/dn_sched.h
==============================================================================
--- user/luigi/ipfw3-head/sys/netinet/ipfw/dn_sched.h Sun Jan 31 21:22:45 2010 (r203320)
+++ user/luigi/ipfw3-head/sys/netinet/ipfw/dn_sched.h Sun Jan 31 21:39:25 2010 (r203321)
@@ -102,18 +102,18 @@ struct dn_alg {
* all the above. If the queue has data in it, also remove
* from the scheduler. This can e.g. happen during a reconfigure.
*/
- int (*enqueue)(struct new_sch_inst *, struct new_queue *,
+ int (*enqueue)(struct dn_sch_inst *, struct dn_queue *,
struct mbuf *);
- struct mbuf * (*dequeue)(struct new_sch_inst *);
+ struct mbuf * (*dequeue)(struct dn_sch_inst *);
- int (*config)(struct new_schk *);
- int (*destroy)(struct new_schk*);
- int (*new_sched)(struct new_sch_inst *);
- int (*free_sched)(struct new_sch_inst *);
- int (*new_fsk)(struct new_fsk *f);
- int (*free_fsk)(struct new_fsk *f);
- int (*new_queue)(struct new_queue *q);
- int (*free_queue)(struct new_queue *q);
+ int (*config)(struct dn_schk *);
+ int (*destroy)(struct dn_schk*);
+ int (*new_sched)(struct dn_sch_inst *);
+ int (*free_sched)(struct dn_sch_inst *);
+ int (*new_fsk)(struct dn_fsk *f);
+ int (*free_fsk)(struct dn_fsk *f);
+ int (*new_queue)(struct dn_queue *q);
+ int (*free_queue)(struct dn_queue *q);
};
/*
@@ -121,7 +121,7 @@ struct dn_alg {
* to be used by schedulers:
*/
void dn_free_pkts(struct mbuf *mnext);
-int dn_enqueue(struct new_queue *q, struct mbuf* m, int drop);
+int dn_enqueue(struct dn_queue *q, struct mbuf* m, int drop);
/* bound a variable between min and max */
int ipdn_bound_var(int *v, int dflt, int lo, int hi, const char *msg);
@@ -130,7 +130,7 @@ int ipdn_bound_var(int *v, int dflt, int
* thing done on a dequeue as the queue itself may go away.
*/
static __inline struct mbuf*
-dn_dequeue(struct new_queue *q)
+dn_dequeue(struct dn_queue *q)
{
struct mbuf *m = q->mq.head;
if (m == NULL)
Modified: user/luigi/ipfw3-head/sys/netinet/ipfw/dn_sched_fifo.c
==============================================================================
--- user/luigi/ipfw3-head/sys/netinet/ipfw/dn_sched_fifo.c Sun Jan 31 21:22:45 2010 (r203320)
+++ user/luigi/ipfw3-head/sys/netinet/ipfw/dn_sched_fifo.c Sun Jan 31 21:39:25 2010 (r203321)
@@ -51,26 +51,26 @@
* Enqueue and dequeue use the default library functions.
*/
static int
-fifo_enqueue(struct new_sch_inst *si, struct new_queue *q, struct mbuf *m)
+fifo_enqueue(struct dn_sch_inst *si, struct dn_queue *q, struct mbuf *m)
{
/* XXX if called with q != NULL and m=NULL, this is a
* re-enqueue from an existing scheduler, which we should
* handle.
*/
- return dn_enqueue((struct new_queue *)(si+1), m, 0);
+ return dn_enqueue((struct dn_queue *)(si+1), m, 0);
}
static struct mbuf *
-fifo_dequeue(struct new_sch_inst *si)
+fifo_dequeue(struct dn_sch_inst *si)
{
- return dn_dequeue((struct new_queue *)(si + 1));
+ return dn_dequeue((struct dn_queue *)(si + 1));
}
static int
-fifo_new_sched(struct new_sch_inst *si)
+fifo_new_sched(struct dn_sch_inst *si)
{
/* This scheduler instance contains the queue */
- struct new_queue *q = (struct new_queue *)(si + 1);
+ struct dn_queue *q = (struct dn_queue *)(si + 1);
set_oid(&q->ni.oid, DN_QUEUE, sizeof(*q));
q->_si = si;
@@ -79,9 +79,9 @@ fifo_new_sched(struct new_sch_inst *si)
}
static int
-fifo_free_sched(struct new_sch_inst *si)
+fifo_free_sched(struct dn_sch_inst *si)
{
- struct new_queue *q = (struct new_queue *)(si + 1);
+ struct dn_queue *q = (struct dn_queue *)(si + 1);
dn_free_pkts(q->mq.head);
bzero(q, sizeof(*q));
return 0;
@@ -96,7 +96,7 @@ static struct dn_alg fifo_desc = {
.type = DN_SCHED_FIFO,
.name = "FIFO",
- .si_datalen = sizeof(struct new_queue),
+ .si_datalen = sizeof(struct dn_queue),
.enqueue = fifo_enqueue,
.dequeue = fifo_dequeue,
Modified: user/luigi/ipfw3-head/sys/netinet/ipfw/dn_sched_qfq.c
==============================================================================
--- user/luigi/ipfw3-head/sys/netinet/ipfw/dn_sched_qfq.c Sun Jan 31 21:22:45 2010 (r203320)
+++ user/luigi/ipfw3-head/sys/netinet/ipfw/dn_sched_qfq.c Sun Jan 31 21:39:25 2010 (r203321)
@@ -175,10 +175,10 @@ struct qfq_group;
/*
* additional queue info. Some of this info should come from
* the flowset, we copy them here for faster processing.
- * This is an overlay of the struct new_queue
+ * This is an overlay of the struct dn_queue
*/
struct qfq_class {
- struct new_queue _q;
+ struct dn_queue _q;
uint64_t S, F; /* flow timestamps (exact) */
struct qfq_class *next; /* Link for the slot list. */
@@ -277,7 +277,7 @@ out:
* Validate and copy parameters from flowset.
*/
static int
-qfq_new_queue(struct new_queue *_q)
+qfq_new_queue(struct dn_queue *_q)
{
struct qfq_sched *q = (struct qfq_sched *)(_q->_si + 1);
struct qfq_class *cl = (struct qfq_class *)_q;
@@ -308,7 +308,7 @@ qfq_new_queue(struct new_queue *_q)
/* remove an empty queue */
static int
-qfq_free_queue(struct new_queue *_q)
+qfq_free_queue(struct dn_queue *_q)
{
struct qfq_sched *q = (struct qfq_sched *)(_q->_si + 1);
struct qfq_class *cl = (struct qfq_class *)_q;
@@ -519,7 +519,7 @@ qfq_update_class(struct qfq_sched *q, st
}
static struct mbuf *
-qfq_dequeue(struct new_sch_inst *si)
+qfq_dequeue(struct dn_sch_inst *si)
{
struct qfq_sched *q = (struct qfq_sched *)(si + 1);
struct qfq_group *grp;
@@ -620,7 +620,7 @@ qfq_update_start(struct qfq_sched *q, st
}
static int
-qfq_enqueue(struct new_sch_inst *si, struct new_queue *_q, struct mbuf *m)
+qfq_enqueue(struct dn_sch_inst *si, struct dn_queue *_q, struct mbuf *m)
{
struct qfq_sched *q = (struct qfq_sched *)(si + 1);
struct qfq_group *grp;
@@ -763,7 +763,7 @@ qfq_deactivate_class(struct qfq_sched *q
#endif
static int
-qfq_new_fsk(struct new_fsk *f)
+qfq_new_fsk(struct dn_fsk *f)
{
ipdn_bound_var(&f->fs.par[0], 1, 1, QFQ_MAX_WEIGHT, "qfq weight");
ipdn_bound_var(&f->fs.par[1], 1500, 1, 2000, "qfq maxlen");
@@ -775,7 +775,7 @@ qfq_new_fsk(struct new_fsk *f)
* initialize a new scheduler instance
*/
static int
-qfq_new_sched(struct new_sch_inst *si)
+qfq_new_sched(struct dn_sch_inst *si)
{
struct qfq_sched *q = (struct qfq_sched *)(si + 1);
struct qfq_group *grp;
@@ -799,7 +799,7 @@ static struct dn_alg qfq_desc = {
.flags = DN_MULTIQUEUE,
.si_datalen = sizeof(struct qfq_sched),
- .q_datalen = sizeof(struct qfq_class) - sizeof(struct new_queue),
+ .q_datalen = sizeof(struct qfq_class) - sizeof(struct dn_queue),
.enqueue = qfq_enqueue,
.dequeue = qfq_dequeue,
Modified: user/luigi/ipfw3-head/sys/netinet/ipfw/dn_sched_rr.c
==============================================================================
--- user/luigi/ipfw3-head/sys/netinet/ipfw/dn_sched_rr.c Sun Jan 31 21:22:45 2010 (r203320)
+++ user/luigi/ipfw3-head/sys/netinet/ipfw/dn_sched_rr.c Sun Jan 31 21:39:25 2010 (r203321)
@@ -46,7 +46,7 @@
#define DN_SCHED_RR 3 // XXX Where?
struct rr_queue {
- struct new_queue q; /* Standard queue */
+ struct dn_queue q; /* Standard queue */
int status; /* 1: queue is in the list */
int credit; /* Number of bytes to transmit */
int quantum; /* quantum * C */
@@ -54,7 +54,7 @@ struct rr_queue {
};
/* struct rr_schk contains global config parameters
- * and is right after new_schk
+ * and is right after dn_schk
*/
struct rr_schk {
int min_q; /* Min quantum */
@@ -62,7 +62,7 @@ struct rr_schk {
int q_bytes; /* Bytes per quantum */
};
-/* per-instance round robin list, right after new_sch_inst */
+/* per-instance round robin list, right after dn_sch_inst */
struct rr_si {
struct rr_queue *head, *tail; /* Pointer to current queue */
};
@@ -137,7 +137,7 @@ next_pointer(struct rr_si *si)
}
static int
-rr_enqueue(struct new_sch_inst *_si, struct new_queue *q, struct mbuf *m)
+rr_enqueue(struct dn_sch_inst *_si, struct dn_queue *q, struct mbuf *m)
{
struct rr_si *si;
struct rr_queue *rrq;
@@ -163,7 +163,7 @@ rr_enqueue(struct new_sch_inst *_si, str
}
static struct mbuf *
-rr_dequeue(struct new_sch_inst *_si)
+rr_dequeue(struct dn_sch_inst *_si)
{
/* Access scheduler instance private data */
struct rr_si *si = (struct rr_si *)(_si + 1);
@@ -195,7 +195,7 @@ rr_dequeue(struct new_sch_inst *_si)
}
static int
-rr_config(struct new_schk *_schk)
+rr_config(struct dn_schk *_schk)
{
struct rr_schk *schk = (struct rr_schk *)(_schk + 1);
ND("called");
@@ -209,7 +209,7 @@ rr_config(struct new_schk *_schk)
}
static int
-rr_new_sched(struct new_sch_inst *_si)
+rr_new_sched(struct dn_sch_inst *_si)
{
struct rr_si *si = (struct rr_si *)(_si + 1);
@@ -220,7 +220,7 @@ rr_new_sched(struct new_sch_inst *_si)
}
static int
-rr_free_sched(struct new_sch_inst *_si)
+rr_free_sched(struct dn_sch_inst *_si)
{
ND("called");
/* Nothing to do? */
@@ -228,7 +228,7 @@ rr_free_sched(struct new_sch_inst *_si)
}
static int
-rr_new_fsk(struct new_fsk *fs)
+rr_new_fsk(struct dn_fsk *fs)
{
struct rr_schk *schk = (struct rr_schk *)(fs->sched + 1);
/* par[0] is the weight, par[1] is the quantum step */
@@ -240,7 +240,7 @@ rr_new_fsk(struct new_fsk *fs)
}
static int
-rr_new_queue(struct new_queue *_q)
+rr_new_queue(struct dn_queue *_q)
{
struct rr_queue *q = (struct rr_queue *)_q;
@@ -259,7 +259,7 @@ rr_new_queue(struct new_queue *_q)
}
static int
-rr_free_queue(struct new_queue *_q)
+rr_free_queue(struct dn_queue *_q)
{
struct rr_queue *q = (struct rr_queue *)_q;
@@ -282,7 +282,7 @@ static struct dn_alg rr_desc = {
.flags = DN_MULTIQUEUE,
.si_datalen = sizeof(struct rr_si),
- .q_datalen = sizeof(struct rr_queue) - sizeof(struct new_queue),
+ .q_datalen = sizeof(struct rr_queue) - sizeof(struct dn_queue),
.enqueue = rr_enqueue,
.dequeue = rr_dequeue,
Modified: user/luigi/ipfw3-head/sys/netinet/ipfw/dn_sched_wf2q.c
==============================================================================
--- user/luigi/ipfw3-head/sys/netinet/ipfw/dn_sched_wf2q.c Sun Jan 31 21:22:45 2010 (r203320)
+++ user/luigi/ipfw3-head/sys/netinet/ipfw/dn_sched_wf2q.c Sun Jan 31 21:39:25 2010 (r203321)
@@ -84,7 +84,7 @@ struct wf2qp_si {
};
struct wf2qp_queue {
- struct new_queue _q;
+ struct dn_queue _q;
uint64_t S, F; /* start time, finish time */
uint32_t inv_w; /* ONE_FP / weight */
int32_t heap_pos; /* position (index) of struct in heap */
@@ -107,7 +107,7 @@ idle_check(struct wf2qp_si *si, int n, i
struct dn_heap *h = &si->idle_heap;
while (n-- > 0 && h->elements > 0 &&
(force || DN_KEY_LT(HEAP_TOP(h)->key, si->V))) {
- struct new_queue *q = HEAP_TOP(h)->object;
+ struct dn_queue *q = HEAP_TOP(h)->object;
struct wf2qp_queue *alg_fq = (struct wf2qp_queue *)q;
heap_extract(h, NULL);
@@ -122,9 +122,9 @@ idle_check(struct wf2qp_si *si, int n, i
}
static int
-wf2qp_enqueue(struct new_sch_inst *_si, struct new_queue *q, struct mbuf *m)
+wf2qp_enqueue(struct dn_sch_inst *_si, struct dn_queue *q, struct mbuf *m)
{
- struct new_fsk *fs = q->fs;
+ struct dn_fsk *fs = q->fs;
struct wf2qp_si *si = (struct wf2qp_si *)(_si + 1);
struct wf2qp_queue *alg_fq;
uint64_t len = m->m_pkthdr.len;
@@ -178,12 +178,12 @@ wf2qp_enqueue(struct new_sch_inst *_si,
/* XXX invariant: sch > 0 || V >= min(S in neh) */
static struct mbuf *
-wf2qp_dequeue(struct new_sch_inst *_si)
+wf2qp_dequeue(struct dn_sch_inst *_si)
{
/* Access scheduler instance private data */
struct wf2qp_si *si = (struct wf2qp_si *)(_si + 1);
struct mbuf *m;
- struct new_queue *q;
+ struct dn_queue *q;
struct dn_heap *sch = &si->sch_heap;
struct dn_heap *neh = &si->ne_heap;
struct wf2qp_queue *alg_fq;
@@ -251,7 +251,7 @@ wf2qp_dequeue(struct new_sch_inst *_si)
}
static int
-wf2qp_new_sched(struct new_sch_inst *_si)
+wf2qp_new_sched(struct dn_sch_inst *_si)
{
struct wf2qp_si *si = (struct wf2qp_si *)(_si + 1);
int ofs = offsetof(struct wf2qp_queue, heap_pos);
@@ -269,7 +269,7 @@ wf2qp_new_sched(struct new_sch_inst *_si
}
static int
-wf2qp_free_sched(struct new_sch_inst *_si)
+wf2qp_free_sched(struct dn_sch_inst *_si)
{
struct wf2qp_si *si = (struct wf2qp_si *)(_si + 1);
@@ -281,7 +281,7 @@ wf2qp_free_sched(struct new_sch_inst *_s
}
static int
-wf2qp_new_fsk(struct new_fsk *fs)
+wf2qp_new_fsk(struct dn_fsk *fs)
{
ipdn_bound_var(&fs->fs.par[0], 1,
1, 100, "WF2Q+ weight");
@@ -289,7 +289,7 @@ wf2qp_new_fsk(struct new_fsk *fs)
}
static int
-wf2qp_new_queue(struct new_queue *_q)
+wf2qp_new_queue(struct dn_queue *_q)
{
struct wf2qp_queue *q = (struct wf2qp_queue *)_q;
@@ -310,7 +310,7 @@ wf2qp_new_queue(struct new_queue *_q)
* of weights.
*/
static int
-wf2qp_free_queue(struct new_queue *q)
+wf2qp_free_queue(struct dn_queue *q)
{
struct wf2qp_queue *alg_fq = (struct wf2qp_queue *)q;
struct wf2qp_si *si = (struct wf2qp_si *)(q->_si + 1);
@@ -346,7 +346,7 @@ static struct dn_alg wf2qp_desc = {
/* we need extra space in the si and the queue */
.si_datalen = sizeof(struct wf2qp_si),
- .q_datalen = sizeof(struct wf2qp_queue) - sizeof(struct new_queue),
+ .q_datalen = sizeof(struct wf2qp_queue) - sizeof(struct dn_queue),
.enqueue = wf2qp_enqueue,
.dequeue = wf2qp_dequeue,
Modified: user/luigi/ipfw3-head/sys/netinet/ipfw/dn_test.h
==============================================================================
--- user/luigi/ipfw3-head/sys/netinet/ipfw/dn_test.h Sun Jan 31 21:22:45 2010 (r203320)
+++ user/luigi/ipfw3-head/sys/netinet/ipfw/dn_test.h Sun Jan 31 21:39:25 2010 (r203321)
@@ -40,10 +40,10 @@ enum {
struct dn_id {
int type, subtype, len, id;
};
-struct new_fs {
+struct dn_fs {
int par[1];
};
-struct new_sch {
+struct dn_sch {
};
struct dn_flow {
struct dn_id oid;
@@ -86,28 +86,28 @@ typedef struct _md_t moduledata_t;
#include <ip_dn_private.h>
#include <dn_sched.h>
#else
-struct new_queue {
- struct new_fsk *fs; /* parent flowset. */
- struct new_sch_inst *_si; /* parent sched instance. */
-};
-struct new_schk {
-};
-struct new_fsk {
- struct new_fs fs;
- struct new_schk *sched;
+struct dn_queue {
+ struct dn_fsk *fs; /* parent flowset. */
+ struct dn_sch_inst *_si; /* parent sched instance. */
+};
+struct dn_schk {
+};
+struct dn_fsk {
+ struct dn_fs fs;
+ struct dn_schk *sched;
};
-struct new_sch_inst {
- struct new_schk *sched;
+struct dn_sch_inst {
+ struct dn_schk *sched;
};
struct dn_alg {
int type;
const char *name;
void *enqueue, *dequeue;
int q_datalen, si_datalen, schk_datalen;
- int (*config)(struct new_schk *);
- int (*new_sched)(struct new_sch_inst *);
- int (*new_fsk)(struct new_fsk *);
- int (*new_queue)(struct new_queue *q);
+ int (*config)(struct dn_schk *);
+ int (*new_sched)(struct dn_sch_inst *);
+ int (*new_fsk)(struct dn_fsk *);
+ int (*new_queue)(struct dn_queue *q);
};
#endif
Modified: user/luigi/ipfw3-head/sys/netinet/ipfw/dummynet.txt
==============================================================================
--- user/luigi/ipfw3-head/sys/netinet/ipfw/dummynet.txt Sun Jan 31 21:22:45 2010 (r203320)
+++ user/luigi/ipfw3-head/sys/netinet/ipfw/dummynet.txt Sun Jan 31 21:39:25 2010 (r203321)
@@ -84,15 +84,15 @@ USERLAND-KERNEL API (ip_dummynet.h)
contains data about the physical link such as
bandwith, delay, burst size;
- struct new_profile:
+ struct dn_profile:
fields to simulate a delay profile
- struct new_sch:
+ struct dn_sch:
defines a scheduler (and a link attached to it).
Parameters include scheduler type, sched_mask, number of
buckets, and possibly other scheduler-specific parameters,
- struct new_fs:
+ struct dn_fs:
describes a flowset, i.e. a template for queues.
Main parameters are the scheduler we attach to, a flow_mask,
buckets, queue size, plr, weight, and other scheduler-specific
@@ -100,45 +100,45 @@ USERLAND-KERNEL API (ip_dummynet.h)
KERNEL REPRESENTATION (ip_dn_private.h)
- struct new_queue
+ struct dn_queue
individual queue of packets, created by a flowset using
flow_mask and attached to a scheduler instance selected
through sched_mask.
- A new_queue has a pointer to the new_fsk (which in turn counts
+ A dn_queue has a pointer to the dn_fsk (which in turn counts
how many queues point to it), a pointer to the
- new_sch_inst it attaches to, and is in a hash table in the
+ dn_sch_inst it attaches to, and is in a hash table in the
flowset. scheduler instances also should store queues in
their own containers used for scheduling (lists, trees, etc.)
CREATE: done on packet arrivals when a flow matches a flowset.
- DELETE: done only when deleting the parent new_sch_inst
+ DELETE: done only when deleting the parent dn_sch_inst
or draining memory.
- struct new_fsk
- includes a new_fs; a pointer to the new_schk; a link field
- for the list of new_fsk attached to the same scheduler,
+ struct dn_fsk
+ includes a dn_fs; a pointer to the dn_schk; a link field
+ for the list of dn_fsk attached to the same scheduler,
or for the unlinked list;
a refcount for the number of queues pointing to it;
- The new_fsk is in a hash table, fshash.
+ The dn_fsk is in a hash table, fshash.
CREATE: done on configuration commands.
DELETE: on configuration commands.
- struct new_sch_inst
- a scheduler instance, created from a new_schk applying sched_mask.
+ struct dn_sch_inst
+ a scheduler instance, created from a dn_schk applying sched_mask.
Contains a delay line, a reference to the parent, and scheduler-
- specific info. Both new_sch_inst and its delay line can be in the
+ specific info. Both dn_sch_inst and its delay line can be in the
evheap if they have events to be processed.
- CREATE: created from a new_schk applying sched_mask
+ CREATE: created from a dn_schk applying sched_mask
DELETE: configuration command delete a scheduler which in turn
sweeps the hash table of instances deleting them
- struct new_schk
- includes new_sch, dn_link, a pointer to new_profile,
- a hash table of new_sch_inst, a list of new_fsk
+ struct dn_schk
+ includes dn_sch, dn_link, a pointer to dn_profile,
+ a hash table of dn_sch_inst, a list of dn_fsk
attached to it.
CREATE: configuration command. If there are flowsets that
refer to this number, they are attached and moved
to the hash table
- DELETE: manual, see new_sch_inst
+ DELETE: manual, see dn_sch_inst
fshash schedhash
@@ -148,11 +148,11 @@ KERNEL REPRESENTATION (ip_dn_private.h)
|NEW_FSK |<----. | [dn_link] |
+---------------+ | +--------------+
|qht (hash) | | | siht(hash) |
- | [new_queue] | | | [new_si] |
- | [new_queue] | | | [new_si] |
+ | [dn_queue] | | | [dn_si] |
+ | [dn_queue] | | | [dn_si] |
| ... | | | ... |
- | +---------+ | | | +---------+ |
- | |new_queue| | | | |new_si | |
+ | +--------+ | | | +---------+ |
+ | |dn_queue| | | | |dn_si | |
| | fs *----------' | | | |
| | si *---------------------->| | |
| +---------+ | | +---------+ |
@@ -304,11 +304,11 @@ To create a pipe, queue or scheduler, th
The userland side of dummynet will prepare a buffer contains data to pass to
kernel side.
The buffer contains all struct needed to configure an object. In more detail,
-to configure a pipe all three structs (dn_link, new_sch, new_fs) are needed,
+to configure a pipe all three structs (dn_link, dn_sch, dn_fs) are needed,
plus the delay profile struct if the pipe has a delay profile.
-If configuring a scheduler only the struct new_sch is wrote in the buffer,
-while if configuring a flowset only the new_fs struct is wrote.
+If configuring a scheduler only the struct dn_sch is wrote in the buffer,
+while if configuring a flowset only the dn_fs struct is wrote.
The first struct in the buffer contains the type of command request, that is
if it is configuring a pipe, a queue, or a scheduler. Then there are structs
@@ -627,15 +627,15 @@ How to implement a new scheduler
================================
In dummynet, a scheduler algorithm is represented by two main structs, some
functions and other minor structs.
-- A struct new_sch_xyz (where xyz is the 'type' of scheduler algorithm
+- A struct dn_sch_xyz (where xyz is the 'type' of scheduler algorithm
implemented) contains data relative to scheduler, as global parameter that
are common to all instances of the scheduler
-- A struct new_sch_inst_xyz contains data relative to a single scheduler
+- A struct dn_sch_inst_xyz contains data relative to a single scheduler
instance, as local status variable depending for example by flows that
are linked with the scheduler, and so on.
To add a scheduler to dummynet, the user should type a command like:
'ipfw pipe x config sched <type> [mask ... ...]'
-This command creates a new struct new_sch_xyz of type <type>, and
+This command creates a new struct dn_sch_xyz of type <type>, and
store the optional parameter in that struct.
The parameter mask determines how many scheduler instance of this
@@ -646,7 +646,7 @@ If the mask is not set, all traffic goes
When a packet arrives to a scheduler, the system search the corrected
scheduler instance, and if it does not exist it is created now (the
-struct new_sch_inst_xyz is allocated by the system, and the scheduler
+struct dn_sch_inst_xyz is allocated by the system, and the scheduler
fills the field correctly). It is a task of the scheduler to create
the struct that contains all queues for a scheduler instance.
Dummynet provides some function to create an hash table to store
@@ -655,7 +655,7 @@ queues, but the schedule algorithm can c
To link a flow to a scheduler, the user should type a command like:
'ipfw queue z config pipe x [mask... ...]'
-This command creates a new 'new_fs' struct that will be inserted
+This command creates a new 'dn_fs' struct that will be inserted
in the system. If the scheduler x exists, this flowset will be
linked to that scheduler and the flowset type become the same as
the scheduler type. At this point, the function create_alg_fs_xyz()
@@ -668,11 +668,11 @@ and assign it to a separate queue. This
so it can ignore the mask if it wants.
See now the two main structs:
-struct new_sch_xyz {
+struct dn_sch_xyz {
struct gen g; /* important the name g */
/* global params */
};
-struct new_sch_inst_xyz {
+struct dn_sch_inst_xyz {
struct gen g; /* important the name g */
/* params of the instance */
};
@@ -703,20 +703,20 @@ The create_alg_fs_xyz() function is mand
gen, but the delete_alg_fs_xyz() is mandatory only if the previous function
has allocated some memory.
-A struct new_queue contains packets belonging to a queue and some statistical
+A struct dn_queue contains packets belonging to a queue and some statistical
data. The scheduler could have to store data in this struct, so it must define
-a new_queue_xyz struct:
-struct new_queue_xyz {
- struct new_queue q;
+a dn_queue_xyz struct:
+struct dn_queue_xyz {
+ struct dn_queue q;
/* parameter for a queue */
}
All structures are allocated by the system. To do so, the scheduler must
set the size of its structs in the scheduler descriptor:
-scheduler_size: sizeof(new_sch_xyz)
-scheduler_i_size: sizeof(new_sch_inst_xyz)
+scheduler_size: sizeof(dn_sch_xyz)
+scheduler_i_size: sizeof(dn_sch_inst_xyz)
flowset_size: sizeof(alg_fs_xyz)
-queue_size: sizeof(new_queue_xyz);
+queue_size: sizeof(dn_queue_xyz);
The scheduler_size could be 0, but other struct must have at least a struct gen.
@@ -731,7 +731,7 @@ scheduler functions.
should be implemented to remove this memory.
- int (*delete_scheduler_template)(void* sch);
Delete a scheduler template. This function is mandatory if the scheduler
- uses extra data respect the struct new_sch.
+ uses extra data respect the struct dn_sch.
- int (*create_scheduler_instance)(void *s);
Create a new scheduler instance. The system allocate the necessary memory
and the schedulet can access it using the 's' pointer.
@@ -776,10 +776,10 @@ scheduler functions.
It is called when a flowset is deleting. Must remove the memory allocate
by the create_alg_fs() function.
-- int (*create_queue_alg)(struct new_queue *q, struct gen *f);
+- int (*create_queue_alg)(struct dn_queue *q, struct gen *f);
Called when a queue is created. The function should link the queue
to the struct used by the scheduler instance to store all queues.
-- int (*delete_queue_alg)(struct new_queue *q);
+- int (*delete_queue_alg)(struct dn_queue *q);
Called when a queue is deleting. The function should remove extra data
and update the struct contains all queues in the scheduler instance.
Modified: user/luigi/ipfw3-head/sys/netinet/ipfw/ip_dn_io.c
==============================================================================
--- user/luigi/ipfw3-head/sys/netinet/ipfw/ip_dn_io.c Sun Jan 31 21:22:45 2010 (r203320)
+++ user/luigi/ipfw3-head/sys/netinet/ipfw/ip_dn_io.c Sun Jan 31 21:39:25 2010 (r203321)
@@ -230,9 +230,9 @@ void dn_free_pkts(struct mbuf *mnext)
* Return 0 on success, 1 on drop. The packet is consumed anyways.
*/
int
-dn_enqueue(struct new_queue *q, struct mbuf* m, int drop)
+dn_enqueue(struct dn_queue *q, struct mbuf* m, int drop)
{
- struct new_fs *f;
+ struct dn_fs *f;
struct dn_flow *ni; /* stats for scheduler instance */
uint64_t len;
@@ -306,11 +306,11 @@ transmit_event(struct mq *q, struct dela
* in milliseconds so we need to divide by 1000.
*/
static uint64_t
-extra_bits(struct mbuf *m, struct new_schk *s)
+extra_bits(struct mbuf *m, struct dn_schk *s)
{
int index;
uint64_t bits;
- struct new_profile *pf = s->profile;
+ struct dn_profile *pf = s->profile;
if (!pf || pf->samples_no == 0)
return 0;
@@ -329,10 +329,10 @@ extra_bits(struct mbuf *m, struct new_sc
* Return a pointer to the head of the queue.
*/
static struct mbuf *
-serve_sched(struct mq *q, struct new_sch_inst *si, uint64_t now)
+serve_sched(struct mq *q, struct dn_sch_inst *si, uint64_t now)
{
struct mq def_q;
- struct new_schk *s = si->sched;
+ struct dn_schk *s = si->sched;
struct mbuf *m = NULL;
int delay_line_idle = (si->dline.mq.head == NULL);
int done, bw;
@@ -442,7 +442,7 @@ dummynet_task(void *context, int pending
heap_extract(&dn_cfg.evheap, NULL);
if (p->type == DN_SCH_I) {
- serve_sched(&q, (struct new_sch_inst *)p, curr_time);
+ serve_sched(&q, (struct dn_sch_inst *)p, curr_time);
} else { /* extracted a delay line */
transmit_event(&q, (struct delay_line *)p, curr_time);
}
@@ -583,9 +583,9 @@ int
dummynet_io(struct mbuf **m0, int dir, struct ip_fw_args *fwa)
{
struct mbuf *m = *m0;
- struct new_fsk *fs = NULL;
- struct new_sch_inst *si;
- struct new_queue *q = NULL; /* default */
+ struct dn_fsk *fs = NULL;
+ struct dn_sch_inst *si;
+ struct dn_queue *q = NULL; /* default */
int fs_id = (fwa->rule.info & IPFW_INFO_MASK) +
((fwa->rule.info & IPFW_IS_PIPE) ? 2*DN_MAX_ID : 0);
Modified: user/luigi/ipfw3-head/sys/netinet/ipfw/ip_dn_private.h
==============================================================================
--- user/luigi/ipfw3-head/sys/netinet/ipfw/ip_dn_private.h Sun Jan 31 21:22:45 2010 (r203320)
+++ user/luigi/ipfw3-head/sys/netinet/ipfw/ip_dn_private.h Sun Jan 31 21:39:25 2010 (r203321)
@@ -74,10 +74,10 @@ MALLOC_DECLARE(M_DUMMYNET);
#define DN_BH_WUNLOCK() mtx_unlock(&dn_cfg.uh_mtx)
#define DN_BH_LOCK_ASSERT() mtx_assert(&dn_cfg.uh_mtx, MA_OWNED)
-SLIST_HEAD(new_schk_head, new_schk);
-SLIST_HEAD(new_sch_inst_head, new_sch_inst);
-SLIST_HEAD(new_fsk_head, new_fsk);
-SLIST_HEAD(new_queue_head, new_queue);
+SLIST_HEAD(dn_schk_head, dn_schk);
+SLIST_HEAD(dn_sch_inst_head, dn_sch_inst);
+SLIST_HEAD(dn_fsk_head, dn_fsk);
+SLIST_HEAD(dn_queue_head, dn_queue);
SLIST_HEAD(dn_alg_head, dn_alg);
struct mq { /* a basic queue of packets*/
@@ -130,7 +130,7 @@ struct dn_parms {
struct dn_ht *fshash;
struct dn_ht *schedhash;
/* list of flowsets without a scheduler -- use sch_chain */
- struct new_fsk_head fsu; /* list of unlinked flowsets */
+ struct dn_fsk_head fsu; /* list of unlinked flowsets */
struct dn_alg_head schedlist; /* list of algorithms */
/* if the upper half is busy doing something long,
@@ -141,14 +141,16 @@ struct dn_parms {
struct mq pending;
#ifdef _KERNEL
- /* uh_mtx arbitrates between system calls and also
+ /*
+ * This file is normally used in the kernel, unless we do
+ * some userland tests, in which case we do not need a mtx.
+ * uh_mtx arbitrates between system calls and also
* protects fshash, schedhash and fsunlinked.
* These structures are readonly for the lower half.
- */
- struct mtx uh_mtx;
- /* bh_mtx protects all other structures which may be
+ * bh_mtx protects all other structures which may be
* modified upon packet arrivals
*/
+ struct mtx uh_mtx;
struct mtx bh_mtx;
#endif /* _KERNEL */
};
@@ -159,7 +161,7 @@ struct dn_parms {
*/
struct delay_line {
struct dn_id oid;
- struct new_sch_inst *si;
+ struct dn_sch_inst *si;
struct mq mq;
};
@@ -174,16 +176,16 @@ struct delay_line {
* put them in external storage because the scheduler may not be
* available when the fsk is created.
*/
-struct new_fsk { /* kernel side of a flowset */
- struct new_fs fs;
- SLIST_ENTRY(new_fsk) fsk_next; /* hash chain for fshash */
+struct dn_fsk { /* kernel side of a flowset */
+ struct dn_fs fs;
+ SLIST_ENTRY(dn_fsk) fsk_next; /* hash chain for fshash */
struct ipfw_flow_id fsk_mask;
- /* hash table of queues, or just single queue */
- struct dn_ht *_qht;
- struct new_schk *sched; /* Sched we are linked to */
- SLIST_ENTRY(new_fsk) sch_chain; /* list of fsk attached to sched */
+ /* qht is a hash table of queues, or just a single queue */
+ struct dn_ht *qht;
+ struct dn_schk *sched; /* Sched we are linked to */
+ SLIST_ENTRY(dn_fsk) sch_chain; /* list of fsk attached to sched */
};
/*
@@ -194,12 +196,12 @@ struct new_fsk { /* kernel side of a flo
* detached from the scheduler -- in this case si == NULL and we
* should not enqueue.
*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***
More information about the svn-src-user
mailing list