MCPcopy Create free account
hub / github.com/F-Stack/f-stack / ng_eiface_constructor

Function ng_eiface_constructor

freebsd/netgraph/ng_eiface.c:381–442  ·  view source on GitHub ↗

* Constructor for a node */

Source from the content-addressed store, hash-verified

379 * Constructor for a node
380 */
381static int
382ng_eiface_constructor(node_p node)
383{
384 struct ifnet *ifp;
385 priv_p priv;
386 struct ether_addr eaddr;
387
388 /* Allocate node and interface private structures */
389 priv = malloc(sizeof(*priv), M_NETGRAPH, M_WAITOK | M_ZERO);
390
391 ifp = priv->ifp = if_alloc(IFT_ETHER);
392 if (ifp == NULL) {
393 free(priv, M_NETGRAPH);
394 return (ENOSPC);
395 }
396
397 /* Link them together */
398 ifp->if_softc = priv;
399
400 /* Get an interface unit number */
401 priv->unit = alloc_unr(V_ng_eiface_unit);
402
403 /* Link together node and private info */
404 NG_NODE_SET_PRIVATE(node, priv);
405 priv->node = node;
406
407 /* Initialize interface structure */
408 if_initname(ifp, NG_EIFACE_EIFACE_NAME, priv->unit);
409 ifp->if_init = ng_eiface_init;
410 ifp->if_output = ether_output;
411 ifp->if_start = ng_eiface_start;
412 ifp->if_ioctl = ng_eiface_ioctl;
413 ifp->if_snd.ifq_maxlen = ifqmaxlen;
414 ifp->if_flags = (IFF_SIMPLEX | IFF_BROADCAST | IFF_MULTICAST);
415 ifp->if_capabilities = IFCAP_VLAN_MTU | IFCAP_JUMBO_MTU;
416 ifp->if_capenable = IFCAP_VLAN_MTU | IFCAP_JUMBO_MTU;
417 ifmedia_init(&priv->media, 0, ng_eiface_mediachange,
418 ng_eiface_mediastatus);
419 ifmedia_add(&priv->media, IFM_ETHER | IFM_10_T, 0, NULL);
420 ifmedia_add(&priv->media, IFM_ETHER | IFM_10_T | IFM_FDX, 0, NULL);
421 ifmedia_add(&priv->media, IFM_ETHER | IFM_100_TX, 0, NULL);
422 ifmedia_add(&priv->media, IFM_ETHER | IFM_100_TX | IFM_FDX, 0, NULL);
423 ifmedia_add(&priv->media, IFM_ETHER | IFM_1000_T, 0, NULL);
424 ifmedia_add(&priv->media, IFM_ETHER | IFM_1000_T | IFM_FDX, 0, NULL);
425 ifmedia_add(&priv->media, IFM_ETHER | IFM_10G_T | IFM_FDX, 0, NULL);
426 ifmedia_add(&priv->media, IFM_ETHER | IFM_AUTO, 0, NULL);
427 ifmedia_set(&priv->media, IFM_ETHER | IFM_AUTO);
428 priv->link_status = IFM_AVALID;
429
430 /* Give this node the same name as the interface (if possible) */
431 if (ng_name_node(node, ifp->if_xname) != 0)
432 log(LOG_WARNING, "%s: can't acquire netgraph name\n",
433 ifp->if_xname);
434
435 /* Attach the interface */
436 ether_gen_addr(ifp, &eaddr);
437 ether_ifattach(ifp, eaddr.octet);
438 ifp->if_baudrate = ifmedia_baudrate(IFM_ETHER | IFM_1000_T);

Callers

nothing calls this directly

Calls 13

mallocFunction · 0.85
if_allocFunction · 0.85
alloc_unrFunction · 0.85
if_initnameFunction · 0.85
ifmedia_initFunction · 0.85
ifmedia_addFunction · 0.85
ifmedia_setFunction · 0.85
ether_gen_addrFunction · 0.85
ether_ifattachFunction · 0.85
ng_name_nodeFunction · 0.70
freeFunction · 0.50
logFunction · 0.50

Tested by

no test coverage detected