The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/net/if_private.h

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /*-
    2  * SPDX-License-Identifier: BSD-3-Clause
    3  *
    4  * Copyright (c) 1982, 1986, 1989, 1993
    5  *      The Regents of the University of California.  All rights reserved.
    6  *
    7  * Redistribution and use in source and binary forms, with or without
    8  * modification, are permitted provided that the following conditions
    9  * are met:
   10  * 1. Redistributions of source code must retain the above copyright
   11  *    notice, this list of conditions and the following disclaimer.
   12  * 2. Redistributions in binary form must reproduce the above copyright
   13  *    notice, this list of conditions and the following disclaimer in the
   14  *    documentation and/or other materials provided with the distribution.
   15  * 3. Neither the name of the University nor the names of its contributors
   16  *    may be used to endorse or promote products derived from this software
   17  *    without specific prior written permission.
   18  *
   19  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
   20  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   21  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   22  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
   23  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
   24  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
   25  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   26  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
   27  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
   28  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   29  * SUCH DAMAGE.
   30  *
   31  *      From: @(#)if.h  8.1 (Berkeley) 6/10/93
   32  */
   33 
   34 #ifndef _NET_IF_PRIVATE_H_
   35 #define _NET_IF_PRIVATE_H_
   36 
   37 #ifdef  _KERNEL
   38 /*
   39  * Structure defining a network interface.
   40  */
   41 struct ifnet {
   42         /* General book keeping of interface lists. */
   43         CK_STAILQ_ENTRY(ifnet) if_link;         /* all struct ifnets are chained (CK_) */
   44         LIST_ENTRY(ifnet) if_clones;    /* interfaces of a cloner */
   45         CK_STAILQ_HEAD(, ifg_list) if_groups; /* linked list of groups per if (CK_) */
   46                                         /* protected by if_addr_lock */
   47         u_char  if_alloctype;           /* if_type at time of allocation */
   48         uint8_t if_numa_domain;         /* NUMA domain of device */
   49         /* Driver and protocol specific information that remains stable. */
   50         void    *if_softc;              /* pointer to driver state */
   51         void    *if_llsoftc;            /* link layer softc */
   52         void    *if_l2com;              /* pointer to protocol bits */
   53         const char *if_dname;           /* driver name */
   54         int     if_dunit;               /* unit or IF_DUNIT_NONE */
   55         u_short if_index;               /* numeric abbreviation for this if  */
   56         u_short if_idxgen;              /* ... and its generation count */
   57         char    if_xname[IFNAMSIZ];     /* external name (name + unit) */
   58         char    *if_description;        /* interface description */
   59 
   60         /* Variable fields that are touched by the stack and drivers. */
   61         int     if_flags;               /* up/down, broadcast, etc. */
   62         int     if_drv_flags;           /* driver-managed status flags */
   63         int     if_capabilities;        /* interface features & capabilities */
   64         int     if_capabilities2;       /* part 2 */
   65         int     if_capenable;           /* enabled features & capabilities */
   66         int     if_capenable2;          /* part 2 */
   67         void    *if_linkmib;            /* link-type-specific MIB data */
   68         size_t  if_linkmiblen;          /* length of above data */
   69         u_int   if_refcount;            /* reference count */
   70 
   71         /* These fields are shared with struct if_data. */
   72         uint8_t         if_type;        /* ethernet, tokenring, etc */
   73         uint8_t         if_addrlen;     /* media address length */
   74         uint8_t         if_hdrlen;      /* media header length */
   75         uint8_t         if_link_state;  /* current link state */
   76         uint32_t        if_mtu;         /* maximum transmission unit */
   77         uint32_t        if_metric;      /* routing metric (external only) */
   78         uint64_t        if_baudrate;    /* linespeed */
   79         uint64_t        if_hwassist;    /* HW offload capabilities, see IFCAP */
   80         time_t          if_epoch;       /* uptime at attach or stat reset */
   81         struct timeval  if_lastchange;  /* time of last administrative change */
   82 
   83         struct  ifaltq if_snd;          /* output queue (includes altq) */
   84         struct  task if_linktask;       /* task for link change events */
   85         struct  task if_addmultitask;   /* task for SIOCADDMULTI */
   86 
   87         /* Addresses of different protocol families assigned to this if. */
   88         struct mtx if_addr_lock;        /* lock to protect address lists */
   89                 /*
   90                  * if_addrhead is the list of all addresses associated to
   91                  * an interface.
   92                  * Some code in the kernel assumes that first element
   93                  * of the list has type AF_LINK, and contains sockaddr_dl
   94                  * addresses which store the link-level address and the name
   95                  * of the interface.
   96                  * However, access to the AF_LINK address through this
   97                  * field is deprecated. Use if_addr instead.
   98                  */
   99         struct  ifaddrhead if_addrhead; /* linked list of addresses per if */
  100         struct  ifmultihead if_multiaddrs; /* multicast addresses configured */
  101         int     if_amcount;             /* number of all-multicast requests */
  102         struct  ifaddr  *if_addr;       /* pointer to link-level address */
  103         void    *if_hw_addr;            /* hardware link-level address */
  104         const u_int8_t *if_broadcastaddr; /* linklevel broadcast bytestring */
  105         struct  mtx if_afdata_lock;
  106         void    *if_afdata[AF_MAX];
  107         int     if_afdata_initialized;
  108 
  109         /* Additional features hung off the interface. */
  110         u_int   if_fib;                 /* interface FIB */
  111         struct  vnet *if_vnet;          /* pointer to network stack instance */
  112         struct  vnet *if_home_vnet;     /* where this ifnet originates from */
  113         struct  ifvlantrunk *if_vlantrunk; /* pointer to 802.1q data */
  114         struct  bpf_if *if_bpf;         /* packet filter structure */
  115         int     if_pcount;              /* number of promiscuous listeners */
  116         void    *if_bridge;             /* bridge glue */
  117         void    *if_lagg;               /* lagg glue */
  118         void    *if_pf_kif;             /* pf glue */
  119         struct  carp_if *if_carp;       /* carp interface structure */
  120         struct  label *if_label;        /* interface MAC label */
  121         struct  netmap_adapter *if_netmap; /* netmap(4) softc */
  122 
  123         /* Various procedures of the layer2 encapsulation and drivers. */
  124         if_output_fn_t if_output;       /* output routine (enqueue) */
  125         if_input_fn_t if_input;         /* input routine (from h/w driver) */
  126         struct mbuf *(*if_bridge_input)(struct ifnet *, struct mbuf *);
  127         int     (*if_bridge_output)(struct ifnet *, struct mbuf *, struct sockaddr *,
  128                     struct rtentry *);
  129         void (*if_bridge_linkstate)(struct ifnet *ifp);
  130         if_start_fn_t   if_start;       /* initiate output routine */
  131         if_ioctl_fn_t   if_ioctl;       /* ioctl routine */
  132         if_init_fn_t    if_init;        /* Init routine */
  133         int     (*if_resolvemulti)      /* validate/resolve multicast */
  134                 (struct ifnet *, struct sockaddr **, struct sockaddr *);
  135         if_qflush_fn_t  if_qflush;      /* flush any queue */
  136         if_transmit_fn_t if_transmit;   /* initiate output routine */
  137 
  138         void    (*if_reassign)          /* reassign to vnet routine */
  139                 (struct ifnet *, struct vnet *, char *);
  140         if_get_counter_t if_get_counter; /* get counter values */
  141         int     (*if_requestencap)      /* make link header from request */
  142                 (struct ifnet *, struct if_encap_req *);
  143 
  144         /* Statistics. */
  145         counter_u64_t   if_counters[IFCOUNTERS];
  146 
  147         /* Stuff that's only temporary and doesn't belong here. */
  148 
  149         /*
  150          * Network adapter TSO limits:
  151          * ===========================
  152          *
  153          * If the "if_hw_tsomax" field is zero the maximum segment
  154          * length limit does not apply. If the "if_hw_tsomaxsegcount"
  155          * or the "if_hw_tsomaxsegsize" field is zero the TSO segment
  156          * count limit does not apply. If all three fields are zero,
  157          * there is no TSO limit.
  158          *
  159          * NOTE: The TSO limits should reflect the values used in the
  160          * BUSDMA tag a network adapter is using to load a mbuf chain
  161          * for transmission. The TCP/IP network stack will subtract
  162          * space for all linklevel and protocol level headers and
  163          * ensure that the full mbuf chain passed to the network
  164          * adapter fits within the given limits.
  165          */
  166         u_int   if_hw_tsomax;           /* TSO maximum size in bytes */
  167         u_int   if_hw_tsomaxsegcount;   /* TSO maximum segment count */
  168         u_int   if_hw_tsomaxsegsize;    /* TSO maximum segment size in bytes */
  169 
  170         /*
  171          * Network adapter send tag support:
  172          */
  173         if_snd_tag_alloc_t *if_snd_tag_alloc;
  174 
  175         /* Ratelimit (packet pacing) */
  176         if_ratelimit_query_t *if_ratelimit_query;
  177         if_ratelimit_setup_t *if_ratelimit_setup;
  178 
  179         /* Ethernet PCP */
  180         uint8_t if_pcp;
  181 
  182         /*
  183          * Debugnet (Netdump) hooks to be called while in db/panic.
  184          */
  185         struct debugnet_methods *if_debugnet_methods;
  186         struct epoch_context    if_epoch_ctx;
  187 
  188         /*
  189          * Spare fields to be added before branching a stable branch, so
  190          * that structure can be enhanced without changing the kernel
  191          * binary interface.
  192          */
  193         int     if_ispare[4];           /* general use */
  194 };
  195 
  196 #endif  /* _KERNEL */
  197 
  198 #endif  /* _NET_IF_PRIVATE_H_ */

Cache object: 8a44652e0fa3c93d21b895dd31b31cd4


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.