static void ngd_detach(struct socket *so) { struct ngpcb *const pcbp = sotongpcb(so); KASSERT(pcbp != NULL, ("ngd_detach: pcbp == NULL")); ng_detach_common(pcbp, NG_DATA); }
static void ngd_detach(netmsg_t msg) { struct socket *so = msg->detach.base.nm_so; struct ngpcb *const pcbp = sotongpcb(so); KASSERT(pcbp != NULL, ("ngd_detach: pcbp == NULL")); ng_detach_common(pcbp, NG_DATA); lwkt_replymsg(&msg->detach.base.lmsg, 0); }
static int ng_attach_cntl(struct socket *so) { struct ngsock *priv; struct ngpcb *pcbp; int error; /* Allocate node private info */ priv = kmalloc(sizeof(*priv), M_NETGRAPH_SOCK, M_WAITOK | M_ZERO); /* Setup protocol control block */ if ((error = ng_attach_common(so, NG_CONTROL)) != 0) { kfree(priv, M_NETGRAPH_SOCK); return (error); } pcbp = sotongpcb(so); /* Link the pcb the private data. */ priv->ctlsock = pcbp; pcbp->sockdata = priv; priv->refs++; /* Initialize mutex. */ mtx_init(&priv->mtx, "ng_socket"); /* Make the generic node components */ if ((error = ng_make_node_common(&typestruct, &priv->node)) != 0) { kfree(priv, M_NETGRAPH_SOCK); ng_detach_common(pcbp, NG_CONTROL); return (error); } /* Link the node and the private data. */ NG_NODE_SET_PRIVATE(priv->node, priv); NG_NODE_REF(priv->node); priv->refs++; return (0); }