Deleted Added
sdiff udiff text old ( 67506 ) new ( 69922 )
full compact
1
2/*
3 * netgraph.h
4 *
5 * Copyright (c) 1996-1999 Whistle Communications, Inc.
6 * All rights reserved.
7 *
8 * Subject to the following obligations and disclaimer of warranty, use and

--- 22 unchanged lines hidden (view full) ---

31 * SERVICES, LOSS OF USE, DATA OR PROFITS, HOWEVER CAUSED AND UNDER ANY
32 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
33 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
34 * THIS SOFTWARE, EVEN IF WHISTLE COMMUNICATIONS IS ADVISED OF THE POSSIBILITY
35 * OF SUCH DAMAGE.
36 *
37 * Author: Julian Elischer <julian@freebsd.org>
38 *
39 * $FreeBSD: head/sys/netgraph/netgraph.h 67506 2000-10-24 17:32:45Z julian $
40 * $Whistle: netgraph.h,v 1.29 1999/11/01 07:56:13 julian Exp $
41 */
42
43#ifndef _NETGRAPH_NETGRAPH_H_
44#define _NETGRAPH_NETGRAPH_H_ 1
45
46#include <sys/queue.h>
47#include <sys/malloc.h>

--- 14 unchanged lines hidden (view full) ---

62 struct ng_hook *peer; /* the other end of this link */
63 struct ng_node *node; /* The node this hook is attached to */
64 LIST_ENTRY(ng_hook) hooks; /* linked list of all hooks on node */
65};
66typedef struct ng_hook *hook_p;
67
68/* Flags for a hook */
69#define HK_INVALID 0x0001 /* don't trust it! */
70
71/*
72 * Structure of a node
73 */
74struct ng_node {
75 char *name; /* optional globally unique name */
76 struct ng_type *type; /* the installed 'type' */
77 int flags; /* see below for bit definitions */

--- 56 unchanged lines hidden (view full) ---

134typedef int ng_rcvmsg_t(node_p node, struct ng_mesg *msg,
135 const char *retaddr, struct ng_mesg **resp,
136 hook_p lasthook);
137typedef int ng_shutdown_t(node_p node);
138typedef int ng_newhook_t(node_p node, hook_p hook, const char *name);
139typedef hook_p ng_findhook_t(node_p node, const char *name);
140typedef int ng_connect_t(hook_p hook);
141typedef int ng_rcvdata_t(hook_p hook, struct mbuf *m, meta_p meta,
142 struct mbuf **ret_m, meta_p *ret_meta);
143typedef int ng_disconnect_t(hook_p hook);
144
145/*
146 * Command list -- each node type specifies the command that it knows
147 * how to convert between ASCII and binary using an array of these.
148 * The last element in the array must be a terminator with cookie=0.
149 */
150
151struct ng_cmdlist {
152 u_int32_t cookie; /* command typecookie */
153 int cmd; /* command number */
154 const char *name; /* command name */
155 const struct ng_parse_type *mesgType; /* args if !NGF_RESP */
156 const struct ng_parse_type *respType; /* args if NGF_RESP */
157};
158
159/*
160 * Structure of a node type
161 */
162struct ng_type {
163
164 u_int32_t version; /* must equal NG_VERSION */
165 const char *name; /* Unique type name */
166 modeventhand_t mod_event; /* Module event handler (optional) */
167 ng_constructor_t *constructor; /* Node constructor */
168 ng_rcvmsg_t *rcvmsg; /* control messages come here */
169 ng_shutdown_t *shutdown; /* reset, and free resources */
170 ng_newhook_t *newhook; /* first notification of new hook */
171 ng_findhook_t *findhook; /* only if you have lots of hooks */
172 ng_connect_t *connect; /* final notification of new hook */
173 ng_rcvdata_t *rcvdata; /* date comes here */
174 ng_rcvdata_t *rcvdataq; /* or here if being queued */
175 ng_disconnect_t *disconnect; /* notify on disconnect */
176
177 const struct ng_cmdlist *cmdlist; /* commands we can convert */
178
179 /* R/W data private to the base netgraph code DON'T TOUCH! */
180 LIST_ENTRY(ng_type) types; /* linked list of all types */
181 int refs; /* number of instances */
182};
183
184/* Send data packet with meta-data */
185#define NG_SEND_DATA(error, hook, m, a) \
186 do { \
187 (error) = ng_send_data((hook), (m), (a), NULL, NULL); \
188 (m) = NULL; \
189 (a) = NULL; \
190 } while (0)
191
192/* Send queued data packet with meta-data */
193#define NG_SEND_DATAQ(error, hook, m, a) \
194 do { \
195 (error) = ng_send_dataq((hook), (m), (a), NULL, NULL); \
196 (m) = NULL; \
197 (a) = NULL; \
198 } while (0)
199
200#define NG_SEND_DATA_RET(error, hook, m, a) \
201 do { \
202 struct mbuf *rm = NULL; \
203 meta_p ra = NULL; \
204 (error) = ng_send_data((hook), (m), (a), &rm, &ra); \
205 (m) = rm; \
206 (a) = ra; \
207 } while (0)
208
209/* Free metadata */
210#define NG_FREE_META(a) \
211 do { \
212 if ((a)) { \
213 FREE((a), M_NETGRAPH); \
214 a = NULL; \
215 } \
216 } while (0)
217
218/* Free any data packet and/or meta-data */
219#define NG_FREE_DATA(m, a) \
220 do { \
221 if ((m)) { \
222 m_freem((m)); \
223 m = NULL; \
224 } \
225 NG_FREE_META((a)); \
226 } while (0)
227
228/*
229 * Use the NETGRAPH_INIT() macro to link a node type into the
230 * netgraph system. This works for types compiled into the kernel
231 * as well as KLD modules. The first argument should be the type
232 * name (eg, echo) and the second a pointer to the type struct.
233 *

--- 29 unchanged lines hidden (view full) ---

263struct ng_type *ng_findtype(const char *type);
264int ng_make_node(const char *type, node_p *nodepp);
265int ng_make_node_common(struct ng_type *typep, node_p *nodep);
266int ng_mkpeer(node_p node, const char *name, const char *name2, char *type);
267int ng_mod_event(module_t mod, int what, void *arg);
268int ng_name_node(node_p node, const char *name);
269int ng_newtype(struct ng_type *tp);
270ng_ID_t ng_node2ID(node_p node);
271int ng_path2node(node_p here, const char *path, node_p *dest, char **rtnp,
272 hook_p *lasthook);
273int ng_path_parse(char *addr, char **node, char **path, char **hook);
274int ng_queue_data(hook_p hook, struct mbuf *m, meta_p meta);
275int ng_queue_msg(node_p here, struct ng_mesg *msg, const char *address);
276void ng_release_node(node_p node);
277void ng_rmnode(node_p node);
278int ng_send_data(hook_p hook, struct mbuf *m, meta_p meta,
279 struct mbuf **ret_m, meta_p *ret_meta);
280int ng_send_dataq(hook_p hook, struct mbuf *m, meta_p meta,
281 struct mbuf **ret_m, meta_p *ret_meta);
282int ng_send_msg(node_p here, struct ng_mesg *msg,
283 const char *address, struct ng_mesg **resp);
284void ng_unname(node_p node);
285void ng_unref(node_p node);
286int ng_wait_node(node_p node, char *msg);
287
288#endif /* _NETGRAPH_NETGRAPH_H_ */
289