svn commit: r203382 - user/luigi/ipfw3-head/sys/netinet/ipfw
Luigi Rizzo
luigi at FreeBSD.org
Tue Feb 2 16:18:51 UTC 2010
Author: luigi
Date: Tue Feb 2 16:18:51 2010
New Revision: 203382
URL: http://svn.freebsd.org/changeset/base/203382
Log:
some portability fixes.
Modified:
user/luigi/ipfw3-head/sys/netinet/ipfw/dn_heap.c
user/luigi/ipfw3-head/sys/netinet/ipfw/dn_sched_qfq.c
user/luigi/ipfw3-head/sys/netinet/ipfw/ip_dn_private.h
user/luigi/ipfw3-head/sys/netinet/ipfw/ip_dummynet.c
Modified: user/luigi/ipfw3-head/sys/netinet/ipfw/dn_heap.c
==============================================================================
--- user/luigi/ipfw3-head/sys/netinet/ipfw/dn_heap.c Tue Feb 2 16:17:44 2010 (r203381)
+++ user/luigi/ipfw3-head/sys/netinet/ipfw/dn_heap.c Tue Feb 2 16:18:51 2010 (r203382)
@@ -43,6 +43,7 @@ __FBSDID("$FreeBSD$");
#else /* !_KERNEL */
#include <stdio.h>
+#include <dn_test.h>
#include <strings.h>
#include <stdlib.h>
@@ -74,7 +75,7 @@ MALLOC_DEFINE(M_DN_HEAP, "dummynet", "du
#define HEAP_INCREMENT 15
static int
-heap_resize(struct dn_heap *h, int new_size)
+heap_resize(struct dn_heap *h, unsigned int new_size)
{
struct dn_heap_entry *p;
Modified: user/luigi/ipfw3-head/sys/netinet/ipfw/dn_sched_qfq.c
==============================================================================
--- user/luigi/ipfw3-head/sys/netinet/ipfw/dn_sched_qfq.c Tue Feb 2 16:17:44 2010 (r203381)
+++ user/luigi/ipfw3-head/sys/netinet/ipfw/dn_sched_qfq.c Tue Feb 2 16:18:51 2010 (r203382)
@@ -53,22 +53,18 @@ static void dump_sched(struct qfq_sched
#define DN_SCHED_QFQ 4 // XXX Where?
typedef unsigned long bitmap;
-#ifndef __FreeBSD__ /* actually, only linux X86 */
-static inline unsigned long __fls(unsigned long word)
-{
- asm("bsr %1,%0"
- : "=r" (word)
- : "rm" (word));
- return word;
-}
-#else
+/*
+ * bitmaps ops are critical. Some linux versions have __fls
+ * and the bitmap ops. Some machines have ffs
+ */
+#if !defined(_KERNEL) || defined( __FreeBSD__ )
static inline unsigned long __fls(unsigned long word)
{
return fls(word) - 1;
}
#endif
-#if !defined(__linux__)
+#if !defined(_KERNEL) || !defined(__linux__)
#ifdef QFQ_DEBUG
int test_bit(int ix, bitmap *p)
{
Modified: user/luigi/ipfw3-head/sys/netinet/ipfw/ip_dn_private.h
==============================================================================
--- user/luigi/ipfw3-head/sys/netinet/ipfw/ip_dn_private.h Tue Feb 2 16:17:44 2010 (r203381)
+++ user/luigi/ipfw3-head/sys/netinet/ipfw/ip_dn_private.h Tue Feb 2 16:18:51 2010 (r203382)
@@ -248,10 +248,11 @@ struct dn_sch_inst {
uint64_t idle_time; /* start of scheduler instance idle time */
};
-/* kernel-side flags */
+/* kernel-side flags. Linux has DN_DELETE in fcntl.h
+ */
enum {
/* 1 and 2 are reserved for the SCAN flags */
- DN_DELETE = 0x0004, /* destroy */
+ DN_DESTROY = 0x0004, /* destroy */
DN_DELETE_FS = 0x0008, /* destroy flowset */
DN_DETACH = 0x0010,
DN_ACTIVE = 0x0020, /* object is in evheap */
Modified: user/luigi/ipfw3-head/sys/netinet/ipfw/ip_dummynet.c
==============================================================================
--- user/luigi/ipfw3-head/sys/netinet/ipfw/ip_dummynet.c Tue Feb 2 16:17:44 2010 (r203381)
+++ user/luigi/ipfw3-head/sys/netinet/ipfw/ip_dummynet.c Tue Feb 2 16:18:51 2010 (r203382)
@@ -287,7 +287,7 @@ q_new(uintptr_t key, int flags, void *ar
/*
* Notify schedulers that a queue is going away.
- * If (flags & DN_DELETE), also free the packets.
+ * If (flags & DN_DESTROY), also free the packets.
* The version for callbacks is called q_delete_cb().
*/
static void
@@ -300,7 +300,7 @@ dn_delete_queue(struct dn_queue *q, int
if (fs && fs->sched->fp->free_queue)
fs->sched->fp->free_queue(q);
q->_si = NULL;
- if (flags & DN_DELETE) {
+ if (flags & DN_DESTROY) {
if (q->mq.head)
dn_free_pkts(q->mq.head);
bzero(q, sizeof(*q)); // safety
@@ -314,13 +314,13 @@ q_delete_cb(void *q, void *arg)
{
int flags = (int)(uintptr_t)arg;
dn_delete_queue(q, flags);
- return (flags & DN_DELETE) ? DNHT_SCAN_DEL : 0;
+ return (flags & DN_DESTROY) ? DNHT_SCAN_DEL : 0;
}
/*
* calls dn_delete_queue/q_delete_cb on all queues,
* which notifies the parent scheduler and possibly drains packets.
- * flags & DN_DELETE: drains queues and destroy qht;
+ * flags & DN_DESTROY: drains queues and destroy qht;
*/
static void
qht_delete(struct dn_fsk *fs, int flags)
@@ -331,13 +331,13 @@ qht_delete(struct dn_fsk *fs, int flags)
return;
if (fs->fs.flags & DN_HAVE_MASK) {
dn_ht_scan(fs->qht, q_delete_cb, (void *)(uintptr_t)flags);
- if (flags & DN_DELETE) {
+ if (flags & DN_DESTROY) {
dn_ht_free(fs->qht, 0);
fs->qht = NULL;
}
} else {
dn_delete_queue((struct dn_queue *)(fs->qht), flags);
- if (flags & DN_DELETE)
+ if (flags & DN_DESTROY)
fs->qht = NULL;
}
}
@@ -553,18 +553,18 @@ fsk_new(uintptr_t key, int flags, void *
/*
* detach flowset from its current scheduler. Flags as follows:
* DN_DETACH removes from the fsk_list
- * DN_DELETE deletes individual queues
+ * DN_DESTROY deletes individual queues
* DN_DELETE_FS destroys the flowset (otherwise goes in unlinked).
*/
static void
fsk_detach(struct dn_fsk *fs, int flags)
{
if (flags & DN_DELETE_FS)
- flags |= DN_DELETE;
+ flags |= DN_DESTROY;
ND("fs %d from sched %d flags %s %s %s",
fs->fs.fs_nr, fs->fs.sched_nr,
(flags & DN_DELETE_FS) ? "DEL_FS":"",
- (flags & DN_DELETE) ? "DEL":"",
+ (flags & DN_DESTROY) ? "DEL":"",
(flags & DN_DETACH) ? "DET":"");
if (flags & DN_DETACH) { /* detach from the list */
struct dn_fsk_head *h;
@@ -587,9 +587,9 @@ fsk_detach(struct dn_fsk *fs, int flags)
/*
* Detach or destroy all flowsets in a list.
* flags specifies what to do:
- * DN_DELETE: flush all queues
- * DN_DELETE_FS: DN_DELETE + destroy flowset
- * DN_DELETE_FS implies DN_DELETE
+ * DN_DESTROY: flush all queues
+ * DN_DELETE_FS: DN_DESTROY + destroy flowset
+ * DN_DELETE_FS implies DN_DESTROY
*/
static void
fsk_detach_list(struct dn_fsk_head *h, int flags)
@@ -695,7 +695,7 @@ schk_new(uintptr_t key, int flags, void
* detach from the scheduler, destroy the internal flowset, and
* all instances. The scheduler goes away too.
* arg is 0 (only detach flowsets and destroy instances)
- * DN_DELETE (detach & delete queues, delete schk)
+ * DN_DESTROY (detach & delete queues, delete schk)
* or DN_DELETE_FS (delete queues and flowsets, delete schk)
*/
static int
@@ -706,10 +706,10 @@ schk_delete_cb(void *obj, void *arg)
int a = (int)arg;
ND("sched %d arg %s%s",
s->sch.sched_nr,
- a&DN_DELETE ? "DEL ":"",
+ a&DN_DESTROY ? "DEL ":"",
a&DN_DELETE_FS ? "DEL_FS":"");
#endif
- fsk_detach_list(&s->fsk_list, arg ? DN_DELETE : 0);
+ fsk_detach_list(&s->fsk_list, arg ? DN_DESTROY : 0);
/* no more flowset pointing to us now */
if (s->sch.flags & DN_HAVE_MASK)
dn_ht_scan(s->siht, si_destroy, NULL);
@@ -740,7 +740,7 @@ delete_schk(int i)
return EINVAL;
delete_fs(i + DN_MAX_ID, 1); /* first delete internal fs */
/* then detach flowsets, delete traffic */
- schk_delete_cb(s, (void*)(uintptr_t)DN_DELETE);
+ schk_delete_cb(s, (void*)(uintptr_t)DN_DESTROY);
return 0;
}
/*--- end of schk hashtable support ---*/
@@ -1093,8 +1093,8 @@ config_fs(struct dn_fs *nfs, struct dn_i
fs->fs.fs_nr,
fs->fs.sched_nr, fs->sched, nfs->sched_nr, s);
if (fs->sched) {
- int flags = s ? DN_DETACH : (DN_DETACH | DN_DELETE);
- flags |= DN_DELETE; /* XXX temporary */
+ int flags = s ? DN_DETACH : (DN_DETACH | DN_DESTROY);
+ flags |= DN_DESTROY; /* XXX temporary */
fsk_detach(fs, flags);
}
fs->fs = *nfs; /* copy configuration */
@@ -1193,7 +1193,7 @@ again: /* run twice, for wfq and fifo */
/* Detach flowsets, preserve queues. */
// schk_delete_cb(s, NULL);
// XXX temporarily, kill queues
- schk_delete_cb(s, (void *)DN_DELETE);
+ schk_delete_cb(s, (void *)DN_DESTROY);
goto again;
} else {
DX(4, "sched %d unchanged type %s", i, a.fp->name);
@@ -1217,7 +1217,7 @@ again: /* run twice, for wfq and fifo */
s->fs = config_fs(&fs, NULL, 1 /* locked */);
}
if (!s->fs) {
- schk_delete_cb(s, (void *)DN_DELETE);
+ schk_delete_cb(s, (void *)DN_DESTROY);
D("error creating internal fs for %d", i);
DN_BH_WUNLOCK();
return ENOMEM;
More information about the svn-src-user
mailing list