Lines Matching +full:interface +full:- +full:node
5 /*-
6 * SPDX-License-Identifier: BSD-3-Clause AND BSD-2-Clause
35 * Copyright (c) 1996-2000 Whistle Communications, Inc.
53 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT.
69 * ng_gif(4) netgraph node type
93 #define IFP2NG(ifp) ((struct ng_node *)((struct gif_softc *)(ifp->if_softc))->gif_netgraph)
94 #define IFP2NG_SET(ifp, val) (((struct gif_softc *)(ifp->if_softc))->gif_netgraph = (val))
96 /* Per-node private data */
98 struct ifnet *ifp; /* associated interface */
111 static void ng_gif_input2(node_p node, struct mbuf **mp, int af);
113 static int ng_gif_rcv_lower(node_p node, struct mbuf *m);
115 /* Netgraph node methods */
165 * Handle a packet that has come in on an interface. We get to
171 const node_p node = IFP2NG(ifp); in ng_gif_input() local
172 const priv_p priv = NG_NODE_PRIVATE(node); in ng_gif_input()
175 if (priv->lower == NULL || priv->lowerOrphan) in ng_gif_input()
177 ng_gif_input2(node, mp, af); in ng_gif_input()
181 * Handle a packet that has come in on an interface, and which
187 const node_p node = IFP2NG(ifp); in ng_gif_input_orphan() local
188 const priv_p priv = NG_NODE_PRIVATE(node); in ng_gif_input_orphan()
191 if (priv->lower == NULL || !priv->lowerOrphan) { in ng_gif_input_orphan()
195 ng_gif_input2(node, &m, af); in ng_gif_input_orphan()
201 * Handle a packet that has come in on a gif interface.
205 ng_gif_input2(node_p node, struct mbuf **mp, int af) in ng_gif_input2() argument
207 const priv_p priv = NG_NODE_PRIVATE(node); in ng_gif_input2()
215 NG_SEND_DATA_ONLY(error, priv->lower, *mp); in ng_gif_input2()
220 * A new gif interface has been attached.
221 * Create a new node for it, etc.
227 node_p node; in ng_gif_attach() local
229 /* Create node */ in ng_gif_attach()
230 KASSERT(!IFP2NG(ifp), ("%s: node already exists?", __func__)); in ng_gif_attach()
231 if (ng_make_node_common(&ng_gif_typestruct, &node) != 0) { in ng_gif_attach()
233 __func__, "create node", ifp->if_xname); in ng_gif_attach()
241 __func__, "allocate memory", ifp->if_xname); in ng_gif_attach()
242 NG_NODE_UNREF(node); in ng_gif_attach()
245 NG_NODE_SET_PRIVATE(node, priv); in ng_gif_attach()
246 priv->ifp = ifp; in ng_gif_attach()
247 IFP2NG_SET(ifp, node); in ng_gif_attach()
249 /* Try to give the node the same name as the interface */ in ng_gif_attach()
250 if (ng_name_node(node, ifp->if_xname) != 0) { in ng_gif_attach()
251 log(LOG_WARNING, "%s: can't name node %s\n", in ng_gif_attach()
252 __func__, ifp->if_xname); in ng_gif_attach()
257 * An interface is being detached.
258 * REALLY Destroy its node.
263 const node_p node = IFP2NG(ifp); in ng_gif_detach() local
266 if (node == NULL) /* no node (why not?), ignore */ in ng_gif_detach()
268 priv = NG_NODE_PRIVATE(node); in ng_gif_detach()
269 NG_NODE_REALLY_DIE(node); /* Force real removal of node */ in ng_gif_detach()
276 priv->ifp = NULL; /* XXX race if interrupted an output packet */ in ng_gif_detach()
277 ng_rmnode_self(node); /* remove all netgraph parts */ in ng_gif_detach()
302 * big lump. The next node will do an m_pullup() in ng_gif_glue_af()
327 NETGRAPH NODE METHODS
331 * It is not possible or allowable to create a node of this type.
332 * Nodes get created when the interface is attached (or, when
333 * this node type's KLD is loaded).
336 ng_gif_constructor(node_p node) in ng_gif_constructor() argument
345 ng_gif_newhook(node_p node, hook_p hook, const char *name) in ng_gif_newhook() argument
347 const priv_p priv = NG_NODE_PRIVATE(node); in ng_gif_newhook()
348 u_char orphan = priv->lowerOrphan; in ng_gif_newhook()
357 hookptr = &priv->lower; in ng_gif_newhook()
360 hookptr = &priv->lower; in ng_gif_newhook()
371 priv->lowerOrphan = orphan; in ng_gif_newhook()
391 ng_gif_rcvmsg(node_p node, item_p item, hook_p lasthook) in ng_gif_rcvmsg() argument
393 const priv_p priv = NG_NODE_PRIVATE(node); in ng_gif_rcvmsg()
399 switch (msg->header.typecookie) { in ng_gif_rcvmsg()
401 switch (msg->header.cmd) { in ng_gif_rcvmsg()
408 strlcpy(resp->data, priv->ifp->if_xname, IFNAMSIZ); in ng_gif_rcvmsg()
416 *((u_int32_t *)resp->data) = priv->ifp->if_index; in ng_gif_rcvmsg()
427 NG_RESPOND_MSG(error, node, item, resp); in ng_gif_rcvmsg()
438 const node_p node = NG_HOOK_NODE(hook); in ng_gif_rcvdata() local
439 const priv_p priv = NG_NODE_PRIVATE(node); in ng_gif_rcvdata()
445 if (hook == priv->lower) in ng_gif_rcvdata()
446 return ng_gif_rcv_lower(node, m); in ng_gif_rcvdata()
454 ng_gif_rcv_lower(node_p node, struct mbuf *m) in ng_gif_rcv_lower() argument
457 const priv_p priv = NG_NODE_PRIVATE(node); in ng_gif_rcv_lower()
462 if (m->m_pkthdr.len < sizeof(sa_family_t)) { in ng_gif_rcv_lower()
466 if (m->m_len < sizeof(sa_family_t) in ng_gif_rcv_lower()
480 return gif_output(priv->ifp, m, &dst, NULL); in ng_gif_rcv_lower()
484 * Shutdown node. This resets the node but does not remove it
488 ng_gif_shutdown(node_p node) in ng_gif_shutdown() argument
490 const priv_p priv = NG_NODE_PRIVATE(node); in ng_gif_shutdown()
492 if (node->nd_flags & NGF_REALLY_DIE) { in ng_gif_shutdown()
494 * WE came here because the gif interface is being destroyed, in ng_gif_shutdown()
499 NG_NODE_SET_PRIVATE(node, NULL); in ng_gif_shutdown()
501 NG_NODE_UNREF(node); /* free node itself */ in ng_gif_shutdown()
504 NG_NODE_REVIVE(node); /* Signal ng_rmnode we are persisant */ in ng_gif_shutdown()
516 if (hook == priv->lower) { in ng_gif_disconnect()
517 priv->lower = NULL; in ng_gif_disconnect()
518 priv->lowerOrphan = 0; in ng_gif_disconnect()
523 ng_rmnode_self(NG_HOOK_NODE(hook)); /* reset node */ in ng_gif_disconnect()
533 * Handle loading and unloading for this node type.
555 /* Create nodes for any already-existing gif interfaces */ in ng_gif_mod_event()
561 if (ifp->if_type == IFT_GIF) in ng_gif_mod_event()