summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--UPDATING9
-rw-r--r--sys/netgraph/netgraph.h113
-rw-r--r--sys/netgraph/ng_base.c38
3 files changed, 40 insertions, 120 deletions
diff --git a/UPDATING b/UPDATING
index 4855314..b011621 100644
--- a/UPDATING
+++ b/UPDATING
@@ -18,6 +18,15 @@ NOTE TO PEOPLE WHO THINK THAT FreeBSD 5.x IS SLOW:
to maximize performance.
20040630:
+ The netgraph ABI version number has been incremented to indicate
+ an incompatible change in the ABI. Old netgraph nodes will refuse
+ to attach until recompiled. Netgraph no uses tehmbuf TAGS feature
+ to move metadata and this commit removes its home-grown metadata
+ facility. Nodes should just recompile unless they use metadata
+ in which case the changes are simple and shown in ng_ksocket.c
+ which can be used as an example.
+
+20040630:
ACPI has been updated to disable known-bad BIOS revisions. A message
will be printed on console indicating that ACPI has been disabled
automatically and that the user should use a newer BIOS, if possible.
diff --git a/sys/netgraph/netgraph.h b/sys/netgraph/netgraph.h
index 90d2056..5af4c83 100644
--- a/sys/netgraph/netgraph.h
+++ b/sys/netgraph/netgraph.h
@@ -62,7 +62,7 @@
* Change it for NETGRAPH_DEBUG version so we cannot mix debug and non debug
* modules.
*/
-#define _NG_ABI_VERSION 8
+#define _NG_ABI_VERSION 9
#ifdef NETGRAPH_DEBUG /*----------------------------------------------*/
#define NG_ABI_VERSION (_NG_ABI_VERSION + 0x10000)
#else /* NETGRAPH_DEBUG */ /*----------------------------------------------*/
@@ -554,42 +554,6 @@ _ng_node_foreach_hook(node_p node, ng_fn_eachhook *fn, void *arg,
#endif /* NETGRAPH_DEBUG */ /*----------------------------------------------*/
/***********************************************************************
- ***************** Meta Data Structures and Methods ********************
- ***********************************************************************
- *
- * The structure that holds meta_data about a data packet (e.g. priority)
- * Nodes might add or subtract options as needed if there is room.
- * They might reallocate the struct to make more room if they need to.
- * Meta-data is still experimental.
- */
-struct meta_field_header {
- u_long cookie; /* cookie for the field. Skip fields you don't
- * know about (same cookie as in messgaes) */
- u_short type; /* field ID */
- u_short len; /* total len of this field including extra
- * data */
- char data[0]; /* data starts here */
-};
-
-/* To zero out an option 'in place' set it's cookie to this */
-#define NGM_INVALID_COOKIE 865455152
-
-/* This part of the metadata is always present if the pointer is non NULL */
-struct ng_meta {
- char priority; /* -ve is less priority, 0 is default */
- char discardability; /* higher is less valuable.. discard first */
- u_short allocated_len; /* amount malloc'd */
- u_short used_len; /* sum of all fields, options etc. */
- u_short flags; /* see below.. generic flags */
- struct meta_field_header options[0]; /* add as (if) needed */
-};
-typedef struct ng_meta *meta_p;
-
-/* Flags for meta-data */
-#define NGMF_TEST 0x01 /* discard at the last moment before sending */
-#define NGMF_TRACE 0x02 /* trace when handing this data to a node */
-
-/***********************************************************************
************* Node Queue and Item Structures and Methods **************
***********************************************************************
*
@@ -601,10 +565,7 @@ struct ng_item {
node_p el_dest; /* The node it will be applied against (or NULL) */
hook_p el_hook; /* Entering hook. Optional in Control messages */
union {
- struct {
- struct mbuf *da_m;
- meta_p da_meta;
- } data;
+ struct mbuf *da_m;
struct {
struct ng_mesg *msg_msg;
ng_ID_t msg_retaddr;
@@ -644,8 +605,7 @@ struct ng_item {
* The debug versions must be either all used everywhere or not at all.
*/
-#define _NGI_M(i) ((i)->body.data.da_m)
-#define _NGI_META(i) ((i)->body.data.da_meta)
+#define _NGI_M(i) ((i)->body.da_m)
#define _NGI_MSG(i) ((i)->body.msg.msg_msg)
#define _NGI_RETADDR(i) ((i)->body.msg.msg_retaddr)
#define _NGI_FN(i) ((i)->body.fn.fn_fn)
@@ -674,7 +634,6 @@ struct ng_item {
void dumpitem(item_p item, char *file, int line);
static __inline void _ngi_check(item_p item, char *file, int line) ;
static __inline struct mbuf ** _ngi_m(item_p item, char *file, int line) ;
-static __inline meta_p * _ngi_meta(item_p item, char *file, int line) ;
static __inline ng_ID_t * _ngi_retaddr(item_p item, char *file, int line);
static __inline struct ng_mesg ** _ngi_msg(item_p item, char *file, int line) ;
static __inline ng_item_fn ** _ngi_fn(item_p item, char *file, int line) ;
@@ -701,13 +660,6 @@ _ngi_m(item_p item, char *file, int line)
return (&_NGI_M(item));
}
-static __inline meta_p *
-_ngi_meta(item_p item, char *file, int line)
-{
- _ngi_check(item, file, line);
- return (&_NGI_META(item));
-}
-
static __inline struct ng_mesg **
_ngi_msg(item_p item, char *file, int line)
{
@@ -758,7 +710,6 @@ _ngi_hook(item_p item, char *file, int line)
}
#define NGI_M(i) (*_ngi_m(i, _NN_))
-#define NGI_META(i) (*_ngi_meta(i, _NN_))
#define NGI_MSG(i) (*_ngi_msg(i, _NN_))
#define NGI_RETADDR(i) (*_ngi_retaddr(i, _NN_))
#define NGI_FN(i) (*_ngi_fn(i, _NN_))
@@ -790,7 +741,6 @@ _ngi_hook(item_p item, char *file, int line)
#else /* NETGRAPH_DEBUG */ /*----------------------------------------------*/
#define NGI_M(i) _NGI_M(i)
-#define NGI_META(i) _NGI_META(i)
#define NGI_MSG(i) _NGI_MSG(i)
#define NGI_RETADDR(i) _NGI_RETADDR(i)
#define NGI_FN(i) _NGI_FN(i)
@@ -814,12 +764,6 @@ _ngi_hook(item_p item, char *file, int line)
_NGI_M(i) = NULL; \
} while (0)
-#define NGI_GET_META(i,m) \
- do { \
- (m) = NGI_META(i); \
- _NGI_META(i) = NULL; \
- } while (0)
-
#define NGI_GET_MSG(i,m) \
do { \
(m) = NGI_MSG(i); \
@@ -857,12 +801,11 @@ _ngi_hook(item_p item, char *file, int line)
} while (0)
/*
- * Forward a data packet with no new meta-data.
- * old metadata is passed along without change.
- * Mbuf pointer is updated to new value. We presume you dealt with the
- * old one when you update it to the new one (or it maybe the old one).
- * We got a packet and possibly had to modify the mbuf.
- * You should probably use NGI_GET_M() if you are going to use this too
+ * Forward a data packet. Mbuf pointer is updated to new value. We
+ * presume you dealt with the old one when you update it to the new one
+ * (or it maybe the old one). We got a packet and possibly had to modify
+ * the mbuf. You should probably use NGI_GET_M() if you are going to use
+ * this too.
*/
#define NG_FWD_NEW_DATA(error, item, hook, m) \
do { \
@@ -871,7 +814,10 @@ _ngi_hook(item_p item, char *file, int line)
NG_FWD_ITEM_HOOK(error, item, hook); \
} while (0)
-/* Send a previously unpackaged mbuf when we have no metadata to send */
+/* Send a previously unpackaged mbuf. XXX: This should be called
+ * NG_SEND_DATA in future, but this name is kept for compatibility
+ * reasons.
+ */
#define NG_SEND_DATA_ONLY(error, hook, m) \
do { \
item_p _item; \
@@ -883,18 +829,7 @@ _ngi_hook(item_p item, char *file, int line)
(m) = NULL; \
} while (0)
-/* Send previously unpackeged data and metadata. */
-#define NG_SEND_DATA(error, hook, m, meta) \
- do { \
- item_p _item; \
- if ((_item = ng_package_data((m), (meta)))) { \
- NG_FWD_ITEM_HOOK(error, _item, hook); \
- } else { \
- (error) = ENOMEM; \
- } \
- (m) = NULL; \
- (meta) = NULL; \
- } while (0)
+#define NG_SEND_DATA(error, hook, m, x) NG_SEND_DATA_ONLY(error, hook, m)
#define NG_FREE_MSG(msg) \
do { \
@@ -904,14 +839,6 @@ _ngi_hook(item_p item, char *file, int line)
} \
} while (0)
-#define NG_FREE_META(meta) \
- do { \
- if ((meta)) { \
- FREE((meta), M_NETGRAPH_META); \
- (meta) = NULL; \
- } \
- } while (0)
-
#define NG_FREE_M(m) \
do { \
if ((m)) { \
@@ -1098,7 +1025,6 @@ MODULE_DEPEND(ng_##typename, netgraph, NG_ABI_VERSION, \
/* Only these two types should be visible to nodes */
MALLOC_DECLARE(M_NETGRAPH);
MALLOC_DECLARE(M_NETGRAPH_MSG);
-MALLOC_DECLARE(M_NETGRAPH_META);
/* declare the base of the netgraph sysclt hierarchy */
/* but only if this file cares about sysctls */
@@ -1115,13 +1041,12 @@ int ng_address_ID(node_p here, item_p item, ng_ID_t ID, ng_ID_t retaddr);
int ng_address_hook(node_p here, item_p item, hook_p hook, ng_ID_t retaddr);
int ng_address_path(node_p here, item_p item, char *address, ng_ID_t raddr);
int ng_bypass(hook_p hook1, hook_p hook2);
-meta_p ng_copy_meta(meta_p meta);
hook_p ng_findhook(node_p node, const char *name);
int ng_make_node_common(struct ng_type *typep, node_p *nodep);
int ng_name_node(node_p node, const char *name);
int ng_newtype(struct ng_type *tp);
ng_ID_t ng_node2ID(node_p node);
-item_p ng_package_data(struct mbuf *m, meta_p meta);
+item_p ng_package_data(struct mbuf *m, void *dummy);
item_p ng_package_msg(struct ng_mesg *msg);
item_p ng_package_msg_self(node_p here, hook_p hook, struct ng_mesg *msg);
void ng_replace_retaddr(node_p here, item_p item, ng_ID_t retaddr);
@@ -1157,4 +1082,14 @@ struct ng_tag_prio {
#define NG_PRIO_CUTOFF 32
#define NG_PRIO_LINKSTATE 64
+/* Macros and declarations to keep compatibility with metadata, which
+ * is obsoleted now. To be deleted.
+ */
+typedef void *meta_p;
+#define _NGI_META(i) NULL
+#define NGI_META(i) NULL
+#define NG_FREE_META(meta)
+#define NGI_GET_META(i,m)
+#define ng_copy_meta(meta) NULL
+
#endif /* _NETGRAPH_NETGRAPH_H_ */
diff --git a/sys/netgraph/ng_base.c b/sys/netgraph/ng_base.c
index 744972d..c12eae1 100644
--- a/sys/netgraph/ng_base.c
+++ b/sys/netgraph/ng_base.c
@@ -216,7 +216,6 @@ MALLOC_DEFINE(M_NETGRAPH, "netgraph", "netgraph structures and ctrl messages");
MALLOC_DEFINE(M_NETGRAPH_HOOK, "netgraph_hook", "netgraph hook structures");
MALLOC_DEFINE(M_NETGRAPH_NODE, "netgraph_node", "netgraph node structures");
MALLOC_DEFINE(M_NETGRAPH_ITEM, "netgraph_item", "netgraph item structures");
-MALLOC_DEFINE(M_NETGRAPH_META, "netgraph_meta", "netgraph name storage");
MALLOC_DEFINE(M_NETGRAPH_MSG, "netgraph_msg", "netgraph name storage");
/* Should not be visible outside this file */
@@ -1151,6 +1150,9 @@ ng_newtype(struct ng_type *tp)
|| (namelen == 0)
|| (namelen >= NG_TYPESIZ)) {
TRAP_ERROR();
+ if (tp->version != NG_ABI_VERSION) {
+ printf("Netgraph: Node type rejected. ABI mismatch. Suggest recompile\n");
+ }
return (EINVAL);
}
@@ -2095,7 +2097,6 @@ ng_flush_input_queue(struct ng_queue * ngq)
* Reference to destination rcv hook if relevant.
* Data:
* pointer to mbuf
- * pointer to metadata
* Control_Message:
* pointer to msg.
* ID of original sender node. (return address)
@@ -2890,26 +2891,6 @@ out:
return (error);
}
-/*
- * Copy a 'meta'.
- *
- * Returns new meta, or NULL if original meta is NULL or ENOMEM.
- */
-meta_p
-ng_copy_meta(meta_p meta)
-{
- meta_p meta2;
-
- if (meta == NULL)
- return (NULL);
- MALLOC(meta2, meta_p, meta->used_len, M_NETGRAPH_META, M_NOWAIT);
- if (meta2 == NULL)
- return (NULL);
- meta2->allocated_len = meta->used_len;
- bcopy(meta, meta2, meta->used_len);
- return (meta2);
-}
-
/************************************************************************
Module routines
************************************************************************/
@@ -3122,9 +3103,8 @@ ng_free_item(item_p item)
}
switch (item->el_flags & NGQF_TYPE) {
case NGQF_DATA:
- /* If we have an mbuf and metadata still attached.. */
+ /* If we have an mbuf still attached.. */
NG_FREE_M(_NGI_M(item));
- NG_FREE_META(_NGI_META(item));
break;
case NGQF_MESG:
_NGI_RETADDR(item) = 0;
@@ -3400,7 +3380,7 @@ ng_setisr(node_p node)
#endif
/*
- * Put elements into the item.
+ * Put mbuf into the item.
* Hook and node references will be removed when the item is dequeued.
* (or equivalent)
* (XXX) Unsafe because no reference held by peer on remote node.
@@ -3413,20 +3393,18 @@ ng_setisr(node_p node)
* This is possibly in the critical path for new data.
*/
item_p
-ng_package_data(struct mbuf *m, meta_p meta)
+ng_package_data(struct mbuf *m, void *dummy)
{
item_p item;
if ((item = ng_getqblk()) == NULL) {
NG_FREE_M(m);
- NG_FREE_META(meta);
return (NULL);
}
ITEM_DEBUG_CHECKS;
item->el_flags = NGQF_DATA;
item->el_next = NULL;
NGI_M(item) = m;
- NGI_META(item) = meta;
return (item);
}
@@ -3708,16 +3686,14 @@ ng_macro_test(item_p item)
node_p node = NULL;
hook_p hook = NULL;
struct mbuf *m;
- meta_p meta;
struct ng_mesg *msg;
ng_ID_t retaddr;
int error;
NGI_GET_M(item, m);
- NGI_GET_META(item, meta);
NGI_GET_MSG(item, msg);
retaddr = NGI_RETADDR(item);
- NG_SEND_DATA(error, hook, m, meta);
+ NG_SEND_DATA(error, hook, m, NULL);
NG_SEND_DATA_ONLY(error, hook, m);
NG_FWD_NEW_DATA(error, item, hook, m);
NG_FWD_ITEM_HOOK(error, item, hook);
OpenPOWER on IntegriCloud