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.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 /*      $OpenBSD: if.h,v 1.209 2022/06/27 15:11:23 jan Exp $    */
    2 /*      $NetBSD: if.h,v 1.23 1996/05/07 02:40:27 thorpej Exp $  */
    3 
    4 /*
    5  * Copyright (c) 1982, 1986, 1989, 1993
    6  *      The Regents of the University of California.  All rights reserved.
    7  *
    8  * Redistribution and use in source and binary forms, with or without
    9  * modification, are permitted provided that the following conditions
   10  * are met:
   11  * 1. Redistributions of source code must retain the above copyright
   12  *    notice, this list of conditions and the following disclaimer.
   13  * 2. Redistributions in binary form must reproduce the above copyright
   14  *    notice, this list of conditions and the following disclaimer in the
   15  *    documentation and/or other materials provided with the distribution.
   16  * 3. Neither the name of the University nor the names of its contributors
   17  *    may be used to endorse or promote products derived from this software
   18  *    without specific prior written permission.
   19  *
   20  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
   21  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   22  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   23  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
   24  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
   25  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
   26  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   27  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
   28  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
   29  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   30  * SUCH DAMAGE.
   31  *
   32  *      @(#)if.h        8.1 (Berkeley) 6/10/93
   33  */
   34 
   35 #ifndef _NET_IF_H_
   36 #define _NET_IF_H_
   37 
   38 #include <sys/cdefs.h>
   39 
   40 /*
   41  * Length of interface external name, including terminating '\0'.
   42  * Note: this is the same size as a generic device's external name.
   43  */
   44 #define IF_NAMESIZE     16
   45 
   46 struct if_nameindex {
   47         unsigned int    if_index;
   48         char            *if_name;
   49 };
   50 
   51 #ifndef _KERNEL
   52 __BEGIN_DECLS
   53 unsigned int if_nametoindex(const char *);
   54 char    *if_indextoname(unsigned int, char *);
   55 struct  if_nameindex *if_nameindex(void);
   56 void    if_freenameindex(struct if_nameindex *);
   57 __END_DECLS
   58 #endif
   59 
   60 #if __BSD_VISIBLE
   61 
   62 #include <sys/types.h>
   63 #include <sys/time.h>
   64 #include <sys/socket.h>
   65 
   66 /*
   67  * Structure used to query names of interface cloners.
   68  */
   69 struct if_clonereq {
   70         int     ifcr_total;             /* total cloners (out) */
   71         int     ifcr_count;             /* room for this many in user buffer */
   72         char    *ifcr_buffer;           /* buffer for cloner names */
   73 };
   74 
   75 #define MCLPOOLS        8               /* number of cluster pools */
   76 
   77 struct if_rxring {
   78         int     rxr_adjusted;
   79         u_int   rxr_alive;
   80         u_int   rxr_cwm;
   81         u_int   rxr_lwm;
   82         u_int   rxr_hwm;
   83 };
   84 
   85 struct if_rxring_info {
   86         char    ifr_name[16];           /* name of the ring */
   87         u_int   ifr_size;               /* size of the packets on the ring */
   88         struct if_rxring ifr_info;
   89 };
   90 
   91 /* Structure used in SIOCGIFRXR request. */
   92 struct if_rxrinfo {
   93         u_int   ifri_total;
   94         struct if_rxring_info *ifri_entries;
   95 };
   96 
   97 /*
   98  * Structure defining statistics and other data kept regarding a network
   99  * interface.
  100  */
  101 struct  if_data {
  102         /* generic interface information */
  103         u_char          ifi_type;               /* ethernet, tokenring, etc. */
  104         u_char          ifi_addrlen;            /* media address length */
  105         u_char          ifi_hdrlen;             /* media header length */
  106         u_char          ifi_link_state;         /* current link state */
  107         u_int32_t       ifi_mtu;                /* maximum transmission unit */
  108         u_int32_t       ifi_metric;             /* routing metric (external only) */
  109         u_int32_t       ifi_rdomain;            /* routing instance */
  110         u_int64_t       ifi_baudrate;           /* linespeed */
  111         /* volatile statistics */
  112         u_int64_t       ifi_ipackets;           /* packets received on interface */
  113         u_int64_t       ifi_ierrors;            /* input errors on interface */
  114         u_int64_t       ifi_opackets;           /* packets sent on interface */
  115         u_int64_t       ifi_oerrors;            /* output errors on interface */
  116         u_int64_t       ifi_collisions;         /* collisions on csma interfaces */
  117         u_int64_t       ifi_ibytes;             /* total number of octets received */
  118         u_int64_t       ifi_obytes;             /* total number of octets sent */
  119         u_int64_t       ifi_imcasts;            /* packets received via multicast */
  120         u_int64_t       ifi_omcasts;            /* packets sent via multicast */
  121         u_int64_t       ifi_iqdrops;            /* dropped on input, this interface */
  122         u_int64_t       ifi_oqdrops;            /* dropped on output, this interface */
  123         u_int64_t       ifi_noproto;            /* destined for unsupported protocol */
  124         u_int32_t       ifi_capabilities;       /* interface capabilities */
  125         struct  timeval ifi_lastchange; /* last operational state change */
  126 };
  127 
  128 #define IFQ_NQUEUES     8
  129 #define IFQ_MINPRIO     0
  130 #define IFQ_MAXPRIO     IFQ_NQUEUES - 1
  131 #define IFQ_DEFPRIO     3
  132 #define IFQ_PRIO2TOS(_p) ((_p) << 5)
  133 #define IFQ_TOS2PRIO(_t) ((_t) >> 5)
  134 
  135 /*
  136  * Values for if_link_state.
  137  */
  138 #define LINK_STATE_UNKNOWN      0       /* link unknown */
  139 #define LINK_STATE_INVALID      1       /* link invalid */
  140 #define LINK_STATE_DOWN         2       /* link is down */
  141 #define LINK_STATE_KALIVE_DOWN  3       /* keepalive reports down */
  142 #define LINK_STATE_UP           4       /* link is up */
  143 #define LINK_STATE_HALF_DUPLEX  5       /* link is up and half duplex */
  144 #define LINK_STATE_FULL_DUPLEX  6       /* link is up and full duplex */
  145 
  146 #define LINK_STATE_IS_UP(_s)    \
  147                 ((_s) >= LINK_STATE_UP || (_s) == LINK_STATE_UNKNOWN)
  148 
  149 /*
  150  * Status bit descriptions for the various interface types.
  151  */
  152 struct if_status_description {
  153         u_char  ifs_type;
  154         u_char  ifs_state;
  155         const char *ifs_string;
  156 };
  157 
  158 #define LINK_STATE_DESC_MATCH(_ifs, _t, _s)                             \
  159         (((_ifs)->ifs_type == (_t) || (_ifs)->ifs_type == 0) &&         \
  160             (_ifs)->ifs_state == (_s))
  161 
  162 
  163 #define LINK_STATE_DESCRIPTIONS {                                       \
  164         { IFT_ETHER, LINK_STATE_DOWN, "no carrier" },                   \
  165                                                                         \
  166         { IFT_IEEE80211, LINK_STATE_DOWN, "no network" },               \
  167                                                                         \
  168         { IFT_PPP, LINK_STATE_DOWN, "no carrier" },                     \
  169                                                                         \
  170         { IFT_CARP, LINK_STATE_DOWN, "backup" },                        \
  171         { IFT_CARP, LINK_STATE_UP, "master" },                          \
  172         { IFT_CARP, LINK_STATE_HALF_DUPLEX, "master" },                 \
  173         { IFT_CARP, LINK_STATE_FULL_DUPLEX, "master" },                 \
  174                                                                         \
  175         { 0, LINK_STATE_UP, "active" },                                 \
  176         { 0, LINK_STATE_HALF_DUPLEX, "active" },                        \
  177         { 0, LINK_STATE_FULL_DUPLEX, "active" },                        \
  178                                                                         \
  179         { 0, LINK_STATE_UNKNOWN, "unknown" },                           \
  180         { 0, LINK_STATE_INVALID, "invalid" },                           \
  181         { 0, LINK_STATE_DOWN, "down" },                                 \
  182         { 0, LINK_STATE_KALIVE_DOWN, "keepalive down" },                \
  183         { 0, 0, NULL }                                                  \
  184 }
  185 
  186 /* Traditional BSD name for length of interface external name. */
  187 #define IFNAMSIZ        IF_NAMESIZE
  188 
  189 /*
  190  * Length of interface description, including terminating '\0'.
  191  */
  192 #define IFDESCRSIZE     64
  193 
  194 /*
  195  * Interface flags can be either owned by the stack or the driver.  The
  196  * symbols below document who is toggling which flag.
  197  *
  198  *      I       immutable after creation
  199  *      N       written by the stack (upon user request)
  200  *      d       written by the driver
  201  *      c       for userland compatibility only
  202  */
  203 #define IFF_UP          0x1             /* [N] interface is up */
  204 #define IFF_BROADCAST   0x2             /* [I] broadcast address valid */
  205 #define IFF_DEBUG       0x4             /* [N] turn on debugging */
  206 #define IFF_LOOPBACK    0x8             /* [I] is a loopback net */
  207 #define IFF_POINTOPOINT 0x10            /* [I] is point-to-point link */
  208 #define IFF_STATICARP   0x20            /* [N] only static ARP */
  209 #define IFF_RUNNING     0x40            /* [d] resources allocated */
  210 #define IFF_NOARP       0x80            /* [N] no address resolution protocol */
  211 #define IFF_PROMISC     0x100           /* [N] receive all packets */
  212 #define IFF_ALLMULTI    0x200           /* [d] receive all multicast packets */
  213 #define IFF_OACTIVE     0x400           /* [c] transmission in progress */
  214 #define IFF_SIMPLEX     0x800           /* [I] can't hear own transmissions */
  215 #define IFF_LINK0       0x1000          /* [N] per link layer defined bit */
  216 #define IFF_LINK1       0x2000          /* [N] per link layer defined bit */
  217 #define IFF_LINK2       0x4000          /* [N] per link layer defined bit */
  218 #define IFF_MULTICAST   0x8000          /* [I] supports multicast */
  219 
  220 /* flags set internally only: */
  221 #define IFF_CANTCHANGE \
  222         (IFF_BROADCAST|IFF_POINTOPOINT|IFF_RUNNING|IFF_OACTIVE|\
  223             IFF_SIMPLEX|IFF_MULTICAST|IFF_ALLMULTI)
  224 
  225 #define IFXF_MPSAFE             0x1     /* [I] if_start is mpsafe */
  226 #define IFXF_CLONED             0x2     /* [I] pseudo interface */
  227 #define IFXF_AUTOCONF6TEMP      0x4     /* [N] v6 temporary addrs enabled */
  228 #define IFXF_MPLS               0x8     /* [N] supports MPLS */
  229 #define IFXF_WOL                0x10    /* [N] wake on lan enabled */
  230 #define IFXF_AUTOCONF6          0x20    /* [N] v6 autoconf enabled */
  231 #define IFXF_INET6_NOSOII       0x40    /* [N] don't do RFC 7217 */
  232 #define IFXF_AUTOCONF4          0x80    /* [N] v4 autoconf (aka dhcp) enabled */
  233 #define IFXF_MONITOR            0x100   /* [N] only used for bpf */
  234 #define IFXF_TSO                0x200   /* [N] TCP segment offloading */
  235 
  236 #define IFXF_CANTCHANGE \
  237         (IFXF_MPSAFE|IFXF_CLONED)
  238 
  239 /*
  240  * Some convenience macros used for setting ifi_baudrate.
  241  */
  242 #define IF_Kbps(x)      ((x) * 1000ULL)                 /* kilobits/sec. */
  243 #define IF_Mbps(x)      (IF_Kbps((x) * 1000ULL))        /* megabits/sec. */
  244 #define IF_Gbps(x)      (IF_Mbps((x) * 1000ULL))        /* gigabits/sec. */
  245 
  246 /* Capabilities that interfaces can advertise. */
  247 #define IFCAP_CSUM_IPv4         0x00000001      /* can do IPv4 header csum */
  248 #define IFCAP_CSUM_TCPv4        0x00000002      /* can do IPv4/TCP csum */
  249 #define IFCAP_CSUM_UDPv4        0x00000004      /* can do IPv4/UDP csum */
  250 #define IFCAP_VLAN_MTU          0x00000010      /* VLAN-compatible MTU */
  251 #define IFCAP_VLAN_HWTAGGING    0x00000020      /* hardware VLAN tag support */
  252 #define IFCAP_CSUM_TCPv6        0x00000080      /* can do IPv6/TCP checksums */
  253 #define IFCAP_CSUM_UDPv6        0x00000100      /* can do IPv6/UDP checksums */
  254 #define IFCAP_TSO               0x00004000      /* TCP segment offloading */
  255 #define IFCAP_WOL               0x00008000      /* can do wake on lan */
  256 
  257 #define IFCAP_CSUM_MASK         (IFCAP_CSUM_IPv4 | IFCAP_CSUM_TCPv4 | \
  258     IFCAP_CSUM_UDPv4 | IFCAP_CSUM_TCPv6 | IFCAP_CSUM_UDPv6)
  259 
  260 /* symbolic names for terminal (per-protocol) CTL_IFQ_ nodes */
  261 #define IFQCTL_LEN 1
  262 #define IFQCTL_MAXLEN 2
  263 #define IFQCTL_DROPS 3
  264 #define IFQCTL_CONGESTION 4
  265 #define IFQCTL_MAXID 5
  266 
  267 /* sysctl for ifq (per-protocol packet input queue variant of ifqueue) */
  268 #define CTL_IFQ_NAMES  { \
  269         { 0, 0 }, \
  270         { "len", CTLTYPE_INT }, \
  271         { "maxlen", CTLTYPE_INT }, \
  272         { "drops", CTLTYPE_INT }, \
  273         { "congestion", CTLTYPE_INT }, \
  274 }
  275 
  276 /*
  277  * Message format for use in obtaining information about interfaces
  278  * from sysctl and the routing socket.
  279  */
  280 struct if_msghdr {
  281         u_short ifm_msglen;     /* to skip over non-understood messages */
  282         u_char  ifm_version;    /* future binary compatibility */
  283         u_char  ifm_type;       /* message type */
  284         u_short ifm_hdrlen;     /* sizeof(if_msghdr) to skip over the header */
  285         u_short ifm_index;      /* index for associated ifp */
  286         u_short ifm_tableid;    /* routing table id */
  287         u_char  ifm_pad1;
  288         u_char  ifm_pad2;
  289         int     ifm_addrs;      /* like rtm_addrs */
  290         int     ifm_flags;      /* value of if_flags */
  291         int     ifm_xflags;
  292         struct  if_data ifm_data;/* statistics and other data about if */
  293 };
  294 
  295 /*
  296  * Message format for use in obtaining information about interface addresses
  297  * from sysctl and the routing socket.
  298  */
  299 struct ifa_msghdr {
  300         u_short ifam_msglen;    /* to skip over non-understood messages */
  301         u_char  ifam_version;   /* future binary compatibility */
  302         u_char  ifam_type;      /* message type */
  303         u_short ifam_hdrlen;    /* sizeof(ifa_msghdr) to skip over the header */
  304         u_short ifam_index;     /* index for associated ifp */
  305         u_short ifam_tableid;   /* routing table id */
  306         u_char  ifam_pad1;
  307         u_char  ifam_pad2;
  308         int     ifam_addrs;     /* like rtm_addrs */
  309         int     ifam_flags;     /* value of ifa_flags */
  310         int     ifam_metric;    /* value of ifa_metric */
  311 };
  312 
  313 /*
  314  * Message format announcing the arrival or departure of a network interface.
  315  */
  316 struct if_announcemsghdr {
  317         u_short ifan_msglen;    /* to skip over non-understood messages */
  318         u_char  ifan_version;   /* future binary compatibility */
  319         u_char  ifan_type;      /* message type */
  320         u_short ifan_hdrlen;    /* sizeof(if_announcemsghdr) to skip header */
  321         u_short ifan_index;     /* index for associated ifp */
  322         u_short ifan_what;      /* what type of announcement */
  323         char    ifan_name[IFNAMSIZ];    /* if name, e.g. "en0" */
  324 };
  325 
  326 #define IFAN_ARRIVAL    0       /* interface arrival */
  327 #define IFAN_DEPARTURE  1       /* interface departure */
  328 
  329 /* message format used to pass 80211 interface info */
  330 struct if_ieee80211_data {
  331         uint8_t         ifie_channel;   /* IEEE80211_CHAN_MAX  == 255 */
  332         uint8_t         ifie_nwid_len;
  333         uint32_t        ifie_flags;     /* ieee80211com.ic_flags */
  334         uint32_t        ifie_xflags;    /* ieee80211com.ic xflags */
  335         uint8_t         ifie_nwid[32];  /* IEEE80211_NWID_LEN */
  336         uint8_t         ifie_addr[6];   /* IEEE80211_ADDR_LEN */
  337 };
  338 
  339 struct if_ieee80211_msghdr {
  340         uint16_t        ifim_msglen;
  341         uint8_t         ifim_version;
  342         uint8_t         ifim_type;
  343         uint16_t        ifim_hdrlen;
  344         uint16_t        ifim_index;
  345         uint16_t        ifim_tableid;
  346 
  347         struct if_ieee80211_data        ifim_ifie;
  348 };
  349 
  350 /* message format used to pass interface name to index mappings */
  351 struct if_nameindex_msg {
  352         unsigned int    if_index;
  353         char            if_name[IFNAMSIZ];
  354 };
  355 
  356 /*
  357  * interface groups
  358  */
  359 
  360 #define IFG_ALL         "all"           /* group contains all interfaces */
  361 #define IFG_EGRESS      "egress"        /* if(s) default route(s) point to */
  362 
  363 struct ifg_req {
  364         union {
  365                 char                     ifgrqu_group[IFNAMSIZ];
  366                 char                     ifgrqu_member[IFNAMSIZ];
  367         } ifgrq_ifgrqu;
  368 #define ifgrq_group     ifgrq_ifgrqu.ifgrqu_group
  369 #define ifgrq_member    ifgrq_ifgrqu.ifgrqu_member
  370 };
  371 
  372 struct ifg_attrib {
  373         int     ifg_carp_demoted;
  374 };
  375 
  376 /*
  377  * Used to lookup groups for an interface
  378  */
  379 struct ifgroupreq {
  380         char    ifgr_name[IFNAMSIZ];
  381         u_int   ifgr_len;
  382         union {
  383                 char                     ifgru_group[IFNAMSIZ];
  384                 struct  ifg_req         *ifgru_groups;
  385                 struct  ifg_attrib       ifgru_attrib;
  386         } ifgr_ifgru;
  387 #define ifgr_group      ifgr_ifgru.ifgru_group
  388 #define ifgr_groups     ifgr_ifgru.ifgru_groups
  389 #define ifgr_attrib     ifgr_ifgru.ifgru_attrib
  390 };
  391 
  392 /*
  393  * Interface request structure used for socket
  394  * ioctl's.  All interface ioctl's must have parameter
  395  * definitions which begin with ifr_name.  The
  396  * remainder may be interface specific.
  397  */
  398 struct  ifreq {
  399         char    ifr_name[IFNAMSIZ];             /* if name, e.g. "en0" */
  400         union {
  401                 struct  sockaddr        ifru_addr;
  402                 struct  sockaddr        ifru_dstaddr;
  403                 struct  sockaddr        ifru_broadaddr;
  404                 short                   ifru_flags;
  405                 int                     ifru_metric;
  406                 int64_t                 ifru_vnetid;
  407                 uint64_t                ifru_media;
  408                 caddr_t                 ifru_data;
  409                 unsigned int            ifru_index;
  410         } ifr_ifru;
  411 #define ifr_addr        ifr_ifru.ifru_addr      /* address */
  412 #define ifr_dstaddr     ifr_ifru.ifru_dstaddr   /* other end of p-to-p link */
  413 #define ifr_broadaddr   ifr_ifru.ifru_broadaddr /* broadcast address */
  414 #define ifr_flags       ifr_ifru.ifru_flags     /* flags */
  415 #define ifr_metric      ifr_ifru.ifru_metric    /* metric */
  416 #define ifr_mtu         ifr_ifru.ifru_metric    /* mtu (overload) */
  417 #define ifr_hardmtu     ifr_ifru.ifru_metric    /* hardmtu (overload) */
  418 #define ifr_media       ifr_ifru.ifru_media     /* media options */
  419 #define ifr_rdomainid   ifr_ifru.ifru_metric    /* VRF instance (overload) */
  420 #define ifr_vnetid      ifr_ifru.ifru_vnetid    /* Virtual Net Id */
  421 #define ifr_ttl         ifr_ifru.ifru_metric    /* tunnel TTL (overload) */
  422 #define ifr_df          ifr_ifru.ifru_metric    /* tunnel DF (overload) */
  423 #define ifr_data        ifr_ifru.ifru_data      /* for use by interface */
  424 #define ifr_index       ifr_ifru.ifru_index     /* interface index */
  425 #define ifr_llprio      ifr_ifru.ifru_metric    /* link layer priority */
  426 #define ifr_hdrprio     ifr_ifru.ifru_metric    /* header prio field config */
  427 #define ifr_pwe3        ifr_ifru.ifru_metric    /* PWE3 type */
  428 };
  429 
  430 #define IF_HDRPRIO_MIN          IFQ_MINPRIO
  431 #define IF_HDRPRIO_MAX          IFQ_MAXPRIO
  432 #define IF_HDRPRIO_PACKET       -1      /* use mbuf prio */
  433 #define IF_HDRPRIO_PAYLOAD      -2      /* copy payload prio */
  434 #define IF_HDRPRIO_OUTER        -3      /* use outer prio */
  435 
  436 #define IF_PWE3_ETHERNET        1       /* ethernet or ethernet tagged */
  437 #define IF_PWE3_IP              2       /* IP layer 2 */
  438 
  439 struct ifaliasreq {
  440         char    ifra_name[IFNAMSIZ];            /* if name, e.g. "en0" */
  441         union {
  442                 struct  sockaddr ifrau_addr;
  443                 int     ifrau_align;
  444          } ifra_ifrau;
  445 #ifndef ifra_addr
  446 #define ifra_addr       ifra_ifrau.ifrau_addr
  447 #endif
  448         struct  sockaddr ifra_dstaddr;
  449 #define ifra_broadaddr  ifra_dstaddr
  450         struct  sockaddr ifra_mask;
  451 };
  452 
  453 struct ifmediareq {
  454         char            ifm_name[IFNAMSIZ];     /* if name, e.g. "en0" */
  455         uint64_t        ifm_current;            /* get/set current media options */
  456         uint64_t        ifm_mask;               /* don't care mask */
  457         uint64_t        ifm_status;             /* media status */
  458         uint64_t        ifm_active;             /* active options */
  459         int             ifm_count;              /* # entries in ifm_ulist array */
  460         uint64_t        *ifm_ulist;             /* media words */
  461 };
  462 
  463 struct ifkalivereq {
  464         char    ikar_name[IFNAMSIZ];            /* if name, e.g. "en0" */
  465         int     ikar_timeo;
  466         int     ikar_cnt;
  467 };
  468 
  469 /*
  470  * Structure used in SIOCGIFCONF request.
  471  * Used to retrieve interface configuration
  472  * for machine (useful for programs which
  473  * must know all networks accessible).
  474  */
  475 struct  ifconf {
  476         int     ifc_len;                /* size of associated buffer */
  477         union {
  478                 caddr_t ifcu_buf;
  479                 struct  ifreq *ifcu_req;
  480         } ifc_ifcu;
  481 #define ifc_buf ifc_ifcu.ifcu_buf       /* buffer address */
  482 #define ifc_req ifc_ifcu.ifcu_req       /* array of structures returned */
  483 };
  484 
  485 /*
  486  * Structure for SIOC[AGD]LIFADDR
  487  */
  488 struct if_laddrreq {
  489         char iflr_name[IFNAMSIZ];
  490         unsigned int flags;
  491 #define IFLR_PREFIX     0x8000  /* in: prefix given  out: kernel fills id */
  492         unsigned int prefixlen;         /* in/out */
  493         struct sockaddr_storage addr;   /* in/out */
  494         struct sockaddr_storage dstaddr; /* out */
  495 };
  496 
  497 /* SIOCIFAFDETACH */
  498 struct if_afreq {
  499         char            ifar_name[IFNAMSIZ];
  500         sa_family_t     ifar_af;
  501 };
  502 
  503 /* SIOC[SG]IFPARENT */
  504 struct if_parent {
  505         char            ifp_name[IFNAMSIZ];
  506         char            ifp_parent[IFNAMSIZ];
  507 };
  508 
  509 /* SIOCGIFSFFPAGE */
  510 
  511 #define IFSFF_ADDR_EEPROM       0xa0
  512 #define IFSFF_ADDR_DDM          0xa2
  513 
  514 #define IFSFF_DATA_LEN          256
  515 
  516 struct if_sffpage {
  517         char             sff_ifname[IFNAMSIZ];          /* u -> k */
  518         uint8_t          sff_addr;                      /* u -> k */
  519         uint8_t          sff_page;                      /* u -> k */
  520         uint8_t          sff_data[IFSFF_DATA_LEN];      /* k -> u */
  521 };
  522 
  523 #include <net/if_arp.h>
  524 
  525 #ifdef _KERNEL
  526 struct socket;
  527 struct ifnet;
  528 struct ifq_ops;
  529 
  530 void    if_alloc_sadl(struct ifnet *);
  531 void    if_free_sadl(struct ifnet *);
  532 void    if_attach(struct ifnet *);
  533 void    if_attach_queues(struct ifnet *, unsigned int);
  534 void    if_attach_iqueues(struct ifnet *, unsigned int);
  535 void    if_attach_ifq(struct ifnet *, const struct ifq_ops *, void *);
  536 void    if_attachhead(struct ifnet *);
  537 void    if_deactivate(struct ifnet *);
  538 void    if_detach(struct ifnet *);
  539 void    if_down(struct ifnet *);
  540 void    if_downall(void);
  541 void    if_link_state_change(struct ifnet *);
  542 void    if_up(struct ifnet *);
  543 void    if_getdata(struct ifnet *, struct if_data *);
  544 void    ifinit(void);
  545 int     ifioctl(struct socket *, u_long, caddr_t, struct proc *);
  546 int     ifpromisc(struct ifnet *, int);
  547 struct  ifg_group *if_creategroup(const char *);
  548 int     if_addgroup(struct ifnet *, const char *);
  549 int     if_delgroup(struct ifnet *, const char *);
  550 void    if_group_routechange(struct sockaddr *, struct sockaddr *);
  551 struct  ifnet *if_unit(const char *);
  552 struct  ifnet *if_get(unsigned int);
  553 void    if_put(struct ifnet *);
  554 void    ifnewlladdr(struct ifnet *);
  555 void    if_congestion(void);
  556 int     if_congested(void);
  557 __dead void     unhandled_af(int);
  558 int     if_setlladdr(struct ifnet *, const uint8_t *);
  559 struct taskq * net_tq(unsigned int);
  560 
  561 #endif /* _KERNEL */
  562 
  563 #endif /* __BSD_VISIBLE */
  564 
  565 #endif /* _NET_IF_H_ */

Cache object: e759dbfbcf3a91d26c2543cd4ab6a304


[ 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.