本文整理汇总了C++中NG_NODE_PRIVATE函数的典型用法代码示例。如果您正苦于以下问题:C++ NG_NODE_PRIVATE函数的具体用法?C++ NG_NODE_PRIVATE怎么用?C++ NG_NODE_PRIVATE使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了NG_NODE_PRIVATE函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: sscfu_send_lower
static void
sscfu_send_lower(struct sscfu *sscf, void *p, enum sscop_aasig sig,
struct mbuf *m, u_int arg)
{
node_p node = (node_p)p;
struct priv *priv = NG_NODE_PRIVATE(node);
int error;
struct sscop_arg *a;
if (priv->lower == NULL) {
if (m != NULL)
m_freem(m);
return;
}
if (m == NULL) {
MGETHDR(m, M_NOWAIT, MT_DATA);
if (m == NULL)
return;
m->m_len = sizeof(struct sscop_arg);
m->m_pkthdr.len = m->m_len;
} else {
M_PREPEND(m, sizeof(struct sscop_arg), M_NOWAIT);
if (m == NULL)
return;
}
a = mtod(m, struct sscop_arg *);
a->sig = sig;
a->arg = arg;
NG_SEND_DATA_ONLY(error, priv->lower, m);
}
示例2: ng_vjc_newhook
/*
* Add a new hook
*/
static int
ng_vjc_newhook(node_p node, hook_p hook, const char *name)
{
const priv_p priv = NG_NODE_PRIVATE(node);
hook_p *hookp;
/* Get hook */
if (strcmp(name, NG_VJC_HOOK_IP) == 0)
hookp = &priv->ip;
else if (strcmp(name, NG_VJC_HOOK_VJCOMP) == 0)
hookp = &priv->vjcomp;
else if (strcmp(name, NG_VJC_HOOK_VJUNCOMP) == 0)
hookp = &priv->vjuncomp;
else if (strcmp(name, NG_VJC_HOOK_VJIP) == 0)
hookp = &priv->vjip;
else
return (EINVAL);
/* See if already connected */
if (*hookp)
return (EISCONN);
/* OK */
*hookp = hook;
return (0);
}
示例3: ng_sscfu_rcvlower
static int
ng_sscfu_rcvlower(hook_p hook, item_p item)
{
node_p node = NG_HOOK_NODE(hook);
struct priv *priv = NG_NODE_PRIVATE(node);
struct mbuf *m;
struct sscop_arg a;
if (!priv->enabled || priv->upper == NULL) {
NG_FREE_ITEM(item);
return (0);
}
NGI_GET_M(item, m);
NG_FREE_ITEM(item);
if (!(m->m_flags & M_PKTHDR)) {
printf("no pkthdr\n");
m_freem(m);
return (EINVAL);
}
/*
* Strip of the SSCOP header.
*/
if (m->m_len < (int)sizeof(a) && (m = m_pullup(m, sizeof(a))) == NULL)
return (ENOMEM);
bcopy((caddr_t)mtod(m, struct sscop_arg *), &a, sizeof(a));
m_adj(m, sizeof(a));
sscfu_input(priv->sscf, a.sig, m, a.arg);
return (0);
}
示例4: bt3c_forward
static void
bt3c_forward(node_p node, hook_p hook, void *arg1, int arg2)
{
bt3c_softc_p sc = (bt3c_softc_p) NG_NODE_PRIVATE(node);
struct mbuf *m = NULL;
int error;
if (sc == NULL)
return;
if (sc->hook != NULL && NG_HOOK_IS_VALID(sc->hook)) {
for (;;) {
IF_DEQUEUE(&sc->inq, m);
if (m == NULL)
break;
NG_SEND_DATA_ONLY(error, sc->hook, m);
if (error != 0)
NG_BT3C_STAT_IERROR(sc->stat);
}
} else {
IF_LOCK(&sc->inq);
for (;;) {
_IF_DEQUEUE(&sc->inq, m);
if (m == NULL)
break;
NG_BT3C_STAT_IERROR(sc->stat);
NG_FREE_M(m);
}
IF_UNLOCK(&sc->inq);
}
} /* bt3c_forward */
示例5: ng_ksocket_shutdown
/*
* Destroy node
*/
static int
ng_ksocket_shutdown(node_p node)
{
const priv_p priv = NG_NODE_PRIVATE(node);
priv_p embryo;
/* Close our socket (if any) */
if (priv->so != NULL) {
atomic_clear_int(&priv->so->so_rcv.ssb_flags, SSB_UPCALL);
atomic_clear_int(&priv->so->so_snd.ssb_flags, SSB_UPCALL);
priv->so->so_upcall = NULL;
soclose(priv->so, FNONBLOCK);
priv->so = NULL;
}
/* If we are an embryo, take ourselves out of the parent's list */
if (priv->flags & KSF_EMBRYONIC) {
LIST_REMOVE(priv, siblings);
priv->flags &= ~KSF_EMBRYONIC;
}
/* Remove any embryonic children we have */
while (!LIST_EMPTY(&priv->embryos)) {
embryo = LIST_FIRST(&priv->embryos);
ng_rmnode_self(embryo->node);
}
/* Take down netgraph node */
bzero(priv, sizeof(*priv));
kfree(priv, M_NETGRAPH);
NG_NODE_SET_PRIVATE(node, NULL);
NG_NODE_UNREF(node); /* let the node escape */
return (0);
}
示例6: ng_sscop_rcvupper
static int
ng_sscop_rcvupper(hook_p hook, item_p item)
{
struct priv *priv = NG_NODE_PRIVATE(NG_HOOK_NODE(hook));
struct sscop_arg a;
struct mbuf *m;
if (!priv->enabled) {
NG_FREE_ITEM(item);
return (EINVAL);
}
/*
* If the lower layer is not connected allow to proceed.
* The lower layer sending function will drop outgoing frames,
* and the sscop will timeout any establish requests.
*/
NGI_GET_M(item, m);
NG_FREE_ITEM(item);
if (!(m->m_flags & M_PKTHDR)) {
printf("no pkthdr\n");
m_freem(m);
return (EINVAL);
}
if (m->m_len < (int)sizeof(a) && (m = m_pullup(m, sizeof(a))) == NULL)
return (ENOBUFS);
bcopy((caddr_t)mtod(m, struct sscop_arg *), &a, sizeof(a));
m_adj(m, sizeof(a));
return (sscop_aasig(priv->sscop, a.sig, m, a.arg));
}
示例7: sscop_send_manage
static void
sscop_send_manage(struct sscop *sscop, void *p, enum sscop_maasig sig,
struct SSCOP_MBUF_T *m, u_int err, u_int cnt)
{
node_p node = (node_p)p;
struct priv *priv = NG_NODE_PRIVATE(node);
int error;
struct sscop_merr *e;
struct sscop_marg *a;
if (priv->manage == NULL) {
if (m != NULL)
m_freem(m);
priv->stats.maa_dropped++;
return;
}
if (sig == SSCOP_MERROR_indication) {
MGETHDR(m, M_NOWAIT, MT_DATA);
if (m == NULL)
return;
m->m_len = sizeof(*e);
m->m_pkthdr.len = m->m_len;
e = mtod(m, struct sscop_merr *);
e->sig = sig;
e->err = err;
e->cnt = cnt;
priv->stats.errors++;
} else if (m == NULL) {
示例8: ng_sscop_rcvlower
/*
* DATA
*/
static int
ng_sscop_rcvlower(hook_p hook, item_p item)
{
struct priv *priv = NG_NODE_PRIVATE(NG_HOOK_NODE(hook));
struct mbuf *m;
if (!priv->enabled) {
NG_FREE_ITEM(item);
return EINVAL;
}
/*
* If we are disconnected at the upper layer and in the IDLE
* state, drop any incoming packet.
*/
if (priv->upper != NULL || sscop_getstate(priv->sscop) != SSCOP_IDLE) {
NGI_GET_M(item, m);
priv->stats.in_packets++;
sscop_input(priv->sscop, m);
} else {
priv->stats.in_dropped++;
}
NG_FREE_ITEM(item);
return (0);
}
示例9: ng_xxx_newhook
/*
* Give our ok for a hook to be added...
* If we are not running this might kick a device into life.
* Possibly decode information out of the hook name.
* Add the hook's private info to the hook structure.
* (if we had some). In this example, we assume that there is a
* an array of structs, called 'channel' in the private info,
* one for each active channel. The private
* pointer of each hook points to the appropriate XXX_hookinfo struct
* so that the source of an input packet is easily identified.
* (a dlci is a frame relay channel)
*/
static int
ng_xxx_newhook(node_p node, hook_p hook, const char *name)
{
const xxx_p xxxp = NG_NODE_PRIVATE(node);
const char *cp;
int dlci = 0;
int chan;
#if 0
/* Possibly start up the device if it's not already going */
if ((xxxp->flags & SCF_RUNNING) == 0) {
ng_xxx_start_hardware(xxxp);
}
#endif
/* Example of how one might use hooks with embedded numbers: All
* hooks start with 'dlci' and have a decimal trailing channel
* number up to 4 digits Use the leadin defined int he associated .h
* file. */
if (strncmp(name,
NG_XXX_HOOK_DLCI_LEADIN, strlen(NG_XXX_HOOK_DLCI_LEADIN)) == 0) {
char *eptr;
cp = name + strlen(NG_XXX_HOOK_DLCI_LEADIN);
if (!isdigit(*cp) || (cp[0] == '0' && cp[1] != '\0'))
return (EINVAL);
dlci = (int)strtoul(cp, &eptr, 10);
if (*eptr != '\0' || dlci < 0 || dlci > 1023)
return (EINVAL);
/* We have a dlci, now either find it, or allocate it */
for (chan = 0; chan < XXX_NUM_DLCIS; chan++)
if (xxxp->channel[chan].dlci == dlci)
break;
if (chan == XXX_NUM_DLCIS) {
for (chan = 0; chan < XXX_NUM_DLCIS; chan++)
if (xxxp->channel[chan].dlci == -2)
break;
if (chan == XXX_NUM_DLCIS)
return (ENOBUFS);
xxxp->channel[chan].dlci = dlci;
}
if (xxxp->channel[chan].hook != NULL)
return (EADDRINUSE);
NG_HOOK_SET_PRIVATE(hook, xxxp->channel + chan);
xxxp->channel[chan].hook = hook;
return (0);
} else if (strcmp(name, NG_XXX_HOOK_DOWNSTREAM) == 0) {
/* Example of simple predefined hooks. */
/* do something specific to the downstream connection */
xxxp->downstream_hook.hook = hook;
NG_HOOK_SET_PRIVATE(hook, &xxxp->downstream_hook);
} else if (strcmp(name, NG_XXX_HOOK_DEBUG) == 0) {
/* do something specific to a debug connection */
xxxp->debughook = hook;
NG_HOOK_SET_PRIVATE(hook, NULL);
} else
return (EINVAL); /* not a hook we know about */
return(0);
}
示例10: ngt_newhook
/*
* Add a hook
*/
static int
ngt_newhook(node_p node, hook_p hook, const char *name)
{
const sc_p sc = NG_NODE_PRIVATE(node);
if (strcmp(name, NG_TEE_HOOK_RIGHT) == 0) {
sc->right.hook = hook;
bzero(&sc->right.stats, sizeof(sc->right.stats));
NG_HOOK_SET_PRIVATE(hook, &sc->right);
} else if (strcmp(name, NG_TEE_HOOK_LEFT) == 0) {
sc->left.hook = hook;
bzero(&sc->left.stats, sizeof(sc->left.stats));
NG_HOOK_SET_PRIVATE(hook, &sc->left);
} else if (strcmp(name, NG_TEE_HOOK_RIGHT2LEFT) == 0) {
sc->right2left.hook = hook;
bzero(&sc->right2left.stats, sizeof(sc->right2left.stats));
NG_HOOK_SET_PRIVATE(hook, &sc->right2left);
} else if (strcmp(name, NG_TEE_HOOK_LEFT2RIGHT) == 0) {
sc->left2right.hook = hook;
bzero(&sc->left2right.stats, sizeof(sc->left2right.stats));
NG_HOOK_SET_PRIVATE(hook, &sc->left2right);
} else
return (EINVAL);
return (0);
}
示例11: ng_ksocket_rcvdata
/*
* Receive incoming data on our hook. Send it out the socket.
*/
static int
ng_ksocket_rcvdata(hook_p hook, item_p item)
{
struct thread *td = curthread; /* XXX broken */
const node_p node = NG_HOOK_NODE(hook);
const priv_p priv = NG_NODE_PRIVATE(node);
struct socket *const so = priv->so;
struct sockaddr *sa = NULL;
int error;
struct mbuf *m;
struct sa_tag *stag;
/* Extract data */
NGI_GET_M(item, m);
NG_FREE_ITEM(item);
/*
* Look if socket address is stored in packet tags.
* If sockaddr is ours, or provided by a third party (zero id),
* then we accept it.
*/
if (((stag = (struct sa_tag *)m_tag_locate(m, NGM_KSOCKET_COOKIE,
NG_KSOCKET_TAG_SOCKADDR, NULL)) != NULL) &&
(stag->id == NG_NODE_ID(node) || stag->id == 0))
sa = &stag->sa;
/* Reset specific mbuf flags to prevent addressing problems. */
m->m_flags &= ~(M_BCAST|M_MCAST);
/* Send packet */
error = sosend(so, sa, 0, m, 0, 0, td);
return (error);
}
示例12: ng_bt3c_shutdown
static int
ng_bt3c_shutdown(node_p node)
{
bt3c_softc_p sc = (bt3c_softc_p) NG_NODE_PRIVATE(node);
/* Let old node go */
NG_NODE_SET_PRIVATE(node, NULL);
NG_NODE_UNREF(node);
/* Create new fresh one if we are not going down */
if (sc == NULL)
goto out;
/* Create new Netgraph node */
if (ng_make_node_common(&typestruct, &sc->node) != 0) {
device_printf(sc->dev, "Could not create Netgraph node\n");
sc->node = NULL;
goto out;
}
/* Name new Netgraph node */
if (ng_name_node(sc->node, device_get_nameunit(sc->dev)) != 0) {
device_printf(sc->dev, "Could not name Netgraph node\n");
NG_NODE_UNREF(sc->node);
sc->node = NULL;
goto out;
}
NG_NODE_SET_PRIVATE(sc->node, sc);
out:
return (0);
} /* ng_bt3c_shutdown */
示例13: ng_sscop_disconnect
static int
ng_sscop_disconnect(hook_p hook)
{
node_p node = NG_HOOK_NODE(hook);
struct priv *priv = NG_NODE_PRIVATE(node);
if(hook == priv->upper)
priv->upper = NULL;
else if(hook == priv->lower)
priv->lower = NULL;
else if(hook == priv->manage)
priv->manage = NULL;
if(NG_NODE_NUMHOOKS(node) == 0) {
if(NG_NODE_IS_VALID(node))
ng_rmnode_self(node);
} else {
/*
* Imply a release request, if the upper layer is
* disconnected.
*/
if(priv->upper == NULL && priv->lower != NULL &&
priv->enabled &&
sscop_getstate(priv->sscop) != SSCOP_IDLE) {
sscop_aasig(priv->sscop, SSCOP_RELEASE_request,
NULL, 0);
}
}
return 0;
}
示例14: ng_sscfu_disconnect
static int
ng_sscfu_disconnect(hook_p hook)
{
node_p node = NG_HOOK_NODE(hook);
struct priv *priv = NG_NODE_PRIVATE(node);
if (hook == priv->upper)
priv->upper = NULL;
else if (hook == priv->lower)
priv->lower = NULL;
else {
log(LOG_ERR, "bogus hook");
return (EINVAL);
}
if (NG_NODE_NUMHOOKS(node) == 0) {
if (NG_NODE_IS_VALID(node))
ng_rmnode_self(node);
} else {
/*
* Because there are no timeouts reset the protocol
* if the lower layer is disconnected.
*/
if (priv->lower == NULL &&
priv->enabled &&
sscfu_getstate(priv->sscf) != SSCFU_RELEASED)
sscfu_reset(priv->sscf);
}
return (0);
}
示例15: ng_ubt_disconnect
static int
ng_ubt_disconnect(hook_p hook)
{
struct ubt_softc *sc = NG_NODE_PRIVATE(NG_HOOK_NODE(hook));
UBT_NG_LOCK(sc);
if (hook != sc->sc_hook) {
UBT_NG_UNLOCK(sc);
return (EINVAL);
}
sc->sc_hook = NULL;
/* Kick off task to stop all USB xfers */
ubt_task_schedule(sc, UBT_FLAG_T_STOP_ALL);
/* Drain queues */
NG_BT_MBUFQ_DRAIN(&sc->sc_cmdq);
NG_BT_MBUFQ_DRAIN(&sc->sc_aclq);
NG_BT_MBUFQ_DRAIN(&sc->sc_scoq);
UBT_NG_UNLOCK(sc);
return (0);
} /* ng_ubt_disconnect */