57#include <sys/kernel.h>
58#include <sys/malloc.h>
227 sizeof(*
stats), M_NOWAIT);
234 sizeof(
stats->right));
236 sizeof(
stats->left));
237 bcopy(&sc->right2left.
stats, &
stats->right2left,
238 sizeof(
stats->right2left));
239 bcopy(&sc->left2right.
stats, &
stats->left2right,
240 sizeof(
stats->left2right));
243 bzero(&sc->right.
stats,
244 sizeof(sc->right.
stats));
245 bzero(&sc->left.
stats,
246 sizeof(sc->left.
stats));
247 bzero(&sc->right2left.
stats,
248 sizeof(sc->right2left.
stats));
249 bzero(&sc->left2right.
stats,
250 sizeof(sc->left2right.
stats));
260 if (lasthook == sc->left.hook || lasthook == sc->right.hook) {
262 if (hinfo && hinfo->
dest) {
300 hinfo->
stats.inOctets += m->m_pkthdr.len;
301 hinfo->
stats.inFrames++;
308 m2 = m_dup(m, M_NOWAIT);
314 h->
stats.outOctets += m->m_pkthdr.len;
315 h->
stats.outFrames++;
322 h->
stats.outOctets += m->m_pkthdr.len;
323 h->
stats.outFrames++;
371 KASSERT(hinfo != NULL, (
"%s: null info", __func__));
375 if (sc->left.dest == hinfo) {
376 sc->left.dest = sc->left.dup;
378 }
else if (sc->left.dup == hinfo)
380 if (sc->right.dest == hinfo) {
381 sc->right.dest = sc->right.dup;
382 sc->right.dup = NULL;
383 }
else if (sc->right.dup == hinfo)
384 sc->right.dup = NULL;
385 if (sc->left2right.dest == hinfo)
386 sc->left2right.dest = NULL;
387 if (sc->right2left.dest == hinfo)
388 sc->right2left.dest = NULL;
#define NG_HOOK_NODE(hook)
int ng_rcvmsg_t(node_p node, item_p item, hook_p lasthook)
#define NG_FWD_ITEM_HOOK(error, item, hook)
int ng_disconnect_t(hook_p hook)
#define NG_NODE_SET_PRIVATE(node, val)
#define NG_RESPOND_MSG(error, here, item, resp)
#define NG_NODE_IS_VALID(node)
#define NG_NODE_UNREF(node)
#define NG_HOOK_SET_PRIVATE(hook, val)
int ng_rmnode_self(node_p here)
#define NG_SEND_DATA_ONLY(error, hook, m)
int ng_close_t(node_p node)
int ng_rcvdata_t(hook_p hook, item_p item)
int ng_shutdown_t(node_p node)
#define NG_FREE_ITEM(item)
int ng_constructor_t(node_p node)
int ng_bypass(hook_p hook1, hook_p hook2)
#define NG_NODE_NUMHOOKS(node)
#define NGI_GET_MSG(i, m)
#define NG_NODE_PRIVATE(node)
int ng_newhook_t(node_p node, hook_p hook, const char *name)
#define NG_HOOK_PRIVATE(hook)
#define NG_MKRESPONSE(rsp, msg, len, how)
const struct ng_parse_type ng_parse_struct_type
static ng_rcvdata_t ng_tee_rcvdata
static const struct ng_parse_struct_field ng_tee_hookstat_type_fields[]
static struct ng_type ng_tee_typestruct
static ng_shutdown_t ng_tee_shutdown
static ng_rcvmsg_t ng_tee_rcvmsg
static const struct ng_cmdlist ng_tee_cmds[]
static const struct ng_parse_type ng_tee_hookstat_type
static ng_constructor_t ng_tee_constructor
static ng_disconnect_t ng_tee_disconnect
static const struct ng_parse_struct_field ng_tee_stats_type_fields[]
static ng_close_t ng_tee_close
NETGRAPH_INIT(tee, &ng_tee_typestruct)
static const struct ng_parse_type ng_tee_stats_type
static ng_newhook_t ng_tee_newhook
#define NG_TEE_STATS_INFO(hstype)
#define NG_TEE_HOOK_RIGHT2LEFT
#define NG_TEE_HOOK_LEFT2RIGHT
#define NG_TEE_HOOK_RIGHT
#define NG_TEE_HOOKSTAT_INFO
struct ng_car_hookstats stats
struct ng_async_stat stats
struct ng_mesg::ng_msghdr header
struct hookinfo right2left
struct hookinfo left2right