Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 20 Jan 2010 09:48:46 +0000 (UTC)
From:      Luigi Rizzo <luigi@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-user@freebsd.org
Subject:   svn commit: r202687 - in user/luigi/ipfw3-head: sbin/ipfw sys/netinet/ipfw
Message-ID:  <201001200948.o0K9mkHo076515@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: luigi
Date: Wed Jan 20 09:48:46 2010
New Revision: 202687
URL: http://svn.freebsd.org/changeset/base/202687

Log:
  default to wf2q+ in the kernel and not in userland.

Modified:
  user/luigi/ipfw3-head/sbin/ipfw/dummynet.c
  user/luigi/ipfw3-head/sys/netinet/ipfw/ip_dummynet.c

Modified: user/luigi/ipfw3-head/sbin/ipfw/dummynet.c
==============================================================================
--- user/luigi/ipfw3-head/sbin/ipfw/dummynet.c	Wed Jan 20 09:29:07 2010	(r202686)
+++ user/luigi/ipfw3-head/sbin/ipfw/dummynet.c	Wed Jan 20 09:48:46 2010	(r202687)
@@ -308,6 +308,11 @@ flush_buf(char *buf)
 	
 /*
  * generic list routine. We expect objects in a specific order, i.e.
+ * PIPES AND SCHEDULERS:
+ *	pipe; scheduler; internal flowset if any; instances
+ *		XXX do we need the queue ?
+ * FLOWSETS:
+ *	flowset; queues;
  * pipe i (int queue); scheduler i; si(i) { flowsets() : queues }
  * filt is an array of sorted ranges whithin where we list
  */
@@ -322,12 +327,17 @@ list_pipes(struct dn_id *oid, struct dn_
 		errx(1, "invalid oid len %d\n", oid->len);
 
 	switch (oid->type) {
+	default:
+	    flush_buf(buf);
+	    printf("unrecognized object %d size %d\n", oid->type, oid->len);
+	    break;
 	case DN_PIPE: {
 	    struct new_pipe *p = (struct new_pipe *)oid;
 	    double b = p->bandwidth;
 	    char bwbuf[30];
 	    char burst[5 + 7];
 
+	    /* This starts a new object so flush buffer */
 	    flush_buf(buf);
 	    /* data rate */
 	    if (b == 0)
@@ -787,7 +797,8 @@ ipfw_config_pipe(int ac, char **av)
 		/* the WFQ scheduler */
 		sch = o_next(&buf, sizeof(*sch), DN_SCH);
 		sch->sched_nr = i;
-		sch->oid.subtype = DN_SCHED_WF2QP;
+		/* type should be wfq, but we set the default in the kernel. */
+		sch->oid.subtype = 0;
 		mask = &sch->sched_mask;
 		/* XXX the FIFO scheduler is created from the WFQ one */
 

Modified: user/luigi/ipfw3-head/sys/netinet/ipfw/ip_dummynet.c
==============================================================================
--- user/luigi/ipfw3-head/sys/netinet/ipfw/ip_dummynet.c	Wed Jan 20 09:29:07 2010	(r202686)
+++ user/luigi/ipfw3-head/sys/netinet/ipfw/ip_dummynet.c	Wed Jan 20 09:48:46 2010	(r202687)
@@ -1005,20 +1005,24 @@ config_sched(struct new_sch *_nsch, stru
 again: /* run twice, for wfq and fifo */
 	a.fp = find_sched_type(a.sch->oid.subtype, a.sch->type);
 	if (a.fp != NULL) {
-		a.sch->oid.subtype = a.fp->type;
 		s = dn_ht_find(dn_cfg.schedhash, i, DNHT_INSERT, &a);
+	} else if (a.sch->oid.subtype != 0 || a.sch->type[0]) {
+		DN_BH_WUNLOCK();
+		printf("invalid scheduler type %d %s\n",
+			a.sch->oid.subtype, a.sch->type);
+		return EINVAL;
 	} else {
-		/* accept missing type if sched already exists */
+		/* type not supplied. If it exist already, use
+		 * the existing one. Otherwise default to WF2Q+
+		 */
 		s = dn_ht_find(dn_cfg.schedhash, i, 0, &a);
 		if (s == NULL) {
-			DN_BH_WUNLOCK();
-			printf("invalid scheduler type %s %d\n",
-				a.sch->type, a.sch->oid.subtype);
-			return EINVAL;
+			a.sch->oid.subtype = DN_SCHED_WF2QP;
+			goto again;
 		}
 		a.fp = s->fp;
-		a.sch->oid.subtype = a.fp->type;
 	}
+	a.sch->oid.subtype = a.fp->type;
 	printf("%s start i %d ty %s -> %s\n",
 		__FUNCTION__, i, a.sch->type,
 			s ? (s->fp?"old":"new"):"none");



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201001200948.o0K9mkHo076515>