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/bsd/net/if_media.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  * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
    3  *
    4  * @APPLE_LICENSE_HEADER_START@
    5  * 
    6  * Copyright (c) 1999-2003 Apple Computer, Inc.  All Rights Reserved.
    7  * 
    8  * This file contains Original Code and/or Modifications of Original Code
    9  * as defined in and that are subject to the Apple Public Source License
   10  * Version 2.0 (the 'License'). You may not use this file except in
   11  * compliance with the License. Please obtain a copy of the License at
   12  * http://www.opensource.apple.com/apsl/ and read it before using this
   13  * file.
   14  * 
   15  * The Original Code and all software distributed under the License are
   16  * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
   17  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
   18  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
   19  * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
   20  * Please see the License for the specific language governing rights and
   21  * limitations under the License.
   22  * 
   23  * @APPLE_LICENSE_HEADER_END@
   24  */
   25 /*      $NetBSD: if_media.h,v 1.3 1997/03/26 01:19:27 thorpej Exp $     */
   26 /* $FreeBSD: src/sys/net/if_media.h,v 1.9.2.1 2001/07/04 00:12:38 brooks Exp $ */
   27 
   28 /*
   29  * Copyright (c) 1997
   30  *      Jonathan Stone and Jason R. Thorpe.  All rights reserved.
   31  *
   32  * This software is derived from information provided by Matt Thomas.
   33  *
   34  * Redistribution and use in source and binary forms, with or without
   35  * modification, are permitted provided that the following conditions
   36  * are met:
   37  * 1. Redistributions of source code must retain the above copyright
   38  *    notice, this list of conditions and the following disclaimer.
   39  * 2. Redistributions in binary form must reproduce the above copyright
   40  *    notice, this list of conditions and the following disclaimer in the
   41  *    documentation and/or other materials provided with the distribution.
   42  * 3. All advertising materials mentioning features or use of this software
   43  *    must display the following acknowledgement:
   44  *      This product includes software developed by Jonathan Stone
   45  *      and Jason R. Thorpe for the NetBSD Project.
   46  * 4. The names of the authors may not be used to endorse or promote products
   47  *    derived from this software without specific prior written permission.
   48  *
   49  * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR
   50  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   51  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
   52  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
   53  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
   54  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
   55  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
   56  * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   57  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
   58  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   59  * SUCH DAMAGE.
   60  */
   61 
   62 #ifndef _NET_IF_MEDIA_H_
   63 #define _NET_IF_MEDIA_H_
   64 #include <sys/appleapiopts.h>
   65 
   66 /*
   67  * Prototypes and definitions for BSD/OS-compatible network interface
   68  * media selection.
   69  *
   70  * Where it is safe to do so, this code strays slightly from the BSD/OS
   71  * design.  Software which uses the API (device drivers, basically)
   72  * shouldn't notice any difference.
   73  *
   74  * Many thanks to Matt Thomas for providing the information necessary
   75  * to implement this interface.
   76  */
   77 
   78 #ifdef KERNEL
   79 
   80 #include <sys/queue.h>
   81 
   82 #ifdef __APPLE_API_UNSTABLE
   83 /*
   84  * Driver callbacks for media status and change requests.
   85  */
   86 typedef int (*ifm_change_cb_t) __P((struct ifnet *ifp));
   87 typedef void (*ifm_stat_cb_t) __P((struct ifnet *ifp, struct ifmediareq *req));
   88 
   89 /*
   90  * In-kernel representation of a single supported media type.
   91  */
   92 struct ifmedia_entry {
   93         LIST_ENTRY(ifmedia_entry) ifm_list;
   94         int     ifm_media;      /* description of this media attachment */
   95         int     ifm_data;       /* for driver-specific use */
   96         void    *ifm_aux;       /* for driver-specific use */
   97 };
   98 
   99 /*
  100  * One of these goes into a network interface's softc structure.
  101  * It is used to keep general media state.
  102  */
  103 struct ifmedia {
  104         int     ifm_mask;       /* mask of changes we don't care about */
  105         int     ifm_media;      /* current user-set media word */
  106         struct ifmedia_entry *ifm_cur;  /* currently selected media */
  107         LIST_HEAD(, ifmedia_entry) ifm_list; /* list of all supported media */
  108         ifm_change_cb_t ifm_change;     /* media change driver callback */
  109         ifm_stat_cb_t   ifm_status;     /* media status driver callback */
  110 };
  111 
  112 /* Initialize an interface's struct if_media field. */
  113 void    ifmedia_init __P((struct ifmedia *ifm, int dontcare_mask,
  114             ifm_change_cb_t change_callback, ifm_stat_cb_t status_callback));
  115 
  116 /* Add one supported medium to a struct ifmedia. */
  117 void    ifmedia_add __P((struct ifmedia *ifm, int mword, int data, void *aux));
  118 
  119 /* Add an array (of ifmedia_entry) media to a struct ifmedia. */
  120 void    ifmedia_list_add(struct ifmedia *mp, struct ifmedia_entry *lp,
  121             int count);
  122 
  123 /* Set default media type on initialization. */
  124 void    ifmedia_set __P((struct ifmedia *ifm, int mword));
  125 
  126 /* Common ioctl function for getting/setting media, called by driver. */
  127 int     ifmedia_ioctl __P((struct ifnet *ifp, struct ifreq *ifr,
  128             struct ifmedia *ifm, u_long cmd));
  129 
  130 #endif /* __APPLE_API_UNSTABLE */
  131 #endif /* KERNEL */
  132 
  133 /*
  134  * if_media Options word:
  135  *      Bits    Use
  136  *      ----    -------
  137  *      0-4         Media subtype
  138  *      5-7     Media type
  139  *      8-15    Type specific options
  140  *      16-19   RFU
  141  *      20-27   Shared (global) options
  142  *      28-31   Instance
  143  */
  144 
  145 /*
  146  * Ethernet
  147  */
  148 #define IFM_ETHER       0x00000020
  149 #define IFM_10_T        3               /* 10BaseT - RJ45 */
  150 #define IFM_10_2        4               /* 10Base2 - Thinnet */
  151 #define IFM_10_5        5               /* 10Base5 - AUI */
  152 #define IFM_100_TX      6               /* 100BaseTX - RJ45 */
  153 #define IFM_100_FX      7               /* 100BaseFX - Fiber */
  154 #define IFM_100_T4      8               /* 100BaseT4 - 4 pair cat 3 */
  155 #define IFM_100_VG      9               /* 100VG-AnyLAN */
  156 #define IFM_100_T2      10              /* 100BaseT2 */
  157 #define IFM_1000_SX     11              /* 1000BaseSX - multi-mode fiber */
  158 #define IFM_10_STP      12              /* 10BaseT over shielded TP */
  159 #define IFM_10_FL       13              /* 10baseFL - Fiber */
  160 #define IFM_1000_LX     14              /* 1000baseLX - single-mode fiber */
  161 #define IFM_1000_CX     15              /* 1000baseCX - 150ohm STP */
  162 #define IFM_1000_TX     16              /* 1000baseTX - 4 pair cat 5 */
  163 #define IFM_HPNA_1      17              /* HomePNA 1.0 (1Mb/s) */
  164 
  165 /*
  166  * Token ring
  167  */
  168 #define IFM_TOKEN       0x00000040
  169 #define IFM_TOK_STP4    3               /* Shielded twisted pair 4m - DB9 */
  170 #define IFM_TOK_STP16   4               /* Shielded twisted pair 16m - DB9 */
  171 #define IFM_TOK_UTP4    5               /* Unshielded twisted pair 4m - RJ45 */
  172 #define IFM_TOK_UTP16   6               /* Unshielded twisted pair 16m - RJ45 */
  173 #define IFM_TOK_STP100  7               /* Shielded twisted pair 100m - DB9 */
  174 #define IFM_TOK_UTP100  8               /* Unshielded twisted pair 100m - RJ45 */
  175 #define IFM_TOK_ETR     0x00000200      /* Early token release */
  176 #define IFM_TOK_SRCRT   0x00000400      /* Enable source routing features */
  177 #define IFM_TOK_ALLR    0x00000800      /* All routes / Single route bcast */
  178 #define IFM_TOK_DTR     0x00002000      /* Dedicated token ring */
  179 #define IFM_TOK_CLASSIC 0x00004000      /* Classic token ring */
  180 #define IFM_TOK_AUTO    0x00008000      /* Automatic Dedicate/Classic token ring */
  181 
  182 /*
  183  * FDDI
  184  */
  185 #define IFM_FDDI        0x00000060
  186 #define IFM_FDDI_SMF    3               /* Single-mode fiber */
  187 #define IFM_FDDI_MMF    4               /* Multi-mode fiber */
  188 #define IFM_FDDI_UTP    5               /* CDDI / UTP */
  189 #define IFM_FDDI_DA     0x00000100      /* Dual attach / single attach */
  190 
  191 /*
  192  * IEEE 802.11 Wireless
  193  */
  194 #define IFM_IEEE80211   0x00000080
  195 #define IFM_IEEE80211_FH1       3       /* Frequency Hopping 1Mbps */
  196 #define IFM_IEEE80211_FH2       4       /* Frequency Hopping 2Mbps */
  197 #define IFM_IEEE80211_DS2       5       /* Direct Sequence 2Mbps */
  198 #define IFM_IEEE80211_DS5       6       /* Direct Sequence 5Mbps*/
  199 #define IFM_IEEE80211_DS11      7       /* Direct Sequence 11Mbps*/
  200 #define IFM_IEEE80211_DS1       8       /* Direct Sequence 1Mbps */
  201 #define IFM_IEEE80211_DS22      9       /* Direct Sequence 22Mbps */
  202 #define IFM_IEEE80211_ADHOC     0x00000100      /* Operate in Adhoc mode */
  203 
  204 /*
  205  * Shared media sub-types
  206  */
  207 #define IFM_AUTO        0               /* Autoselect best media */
  208 #define IFM_MANUAL      1               /* Jumper/dipswitch selects media */
  209 #define IFM_NONE        2               /* Deselect all media */
  210 
  211 /*
  212  * Shared options
  213  */
  214 #define IFM_FDX         0x00100000      /* Force full duplex */
  215 #define IFM_HDX         0x00200000      /* Force half duplex */
  216 #define IFM_FLOW        0x00400000      /* enable hardware flow control */
  217 #define IFM_FLAG0       0x01000000      /* Driver defined flag */
  218 #define IFM_FLAG1       0x02000000      /* Driver defined flag */
  219 #define IFM_FLAG2       0x04000000      /* Driver defined flag */
  220 #define IFM_LOOP        0x08000000      /* Put hardware in loopback */
  221 
  222 /*
  223  * Masks
  224  */
  225 #define IFM_NMASK       0x000000e0      /* Network type */
  226 #define IFM_TMASK       0x0000001f      /* Media sub-type */
  227 #define IFM_IMASK       0xf0000000      /* Instance */
  228 #define IFM_ISHIFT      28              /* Instance shift */
  229 #define IFM_OMASK       0x0000ff00      /* Type specific options */
  230 #define IFM_GMASK       0x0ff00000      /* Global options */
  231 
  232 /*
  233  * Status bits
  234  */
  235 #define IFM_AVALID      0x00000001      /* Active bit valid */
  236 #define IFM_ACTIVE      0x00000002      /* Interface attached to working net */
  237 
  238 /*
  239  * Macros to extract various bits of information from the media word.
  240  */
  241 #define IFM_TYPE(x)         ((x) & IFM_NMASK)
  242 #define IFM_SUBTYPE(x)      ((x) & IFM_TMASK)
  243 #define IFM_TYPE_OPTIONS(x) ((x) & IFM_OMASK)
  244 #define IFM_INST(x)         (((x) & IFM_IMASK) >> IFM_ISHIFT)
  245 #define IFM_OPTIONS(x)  ((x) & (IFM_OMASK|IFM_GMASK))
  246 
  247 #define IFM_INST_MAX    IFM_INST(IFM_IMASK)
  248 
  249 /*
  250  * Macro to create a media word.
  251  */
  252 #define IFM_MAKEWORD(type, subtype, options, instance)                  \
  253         ((type) | (subtype) | (options) | ((instance) << IFM_ISHIFT))
  254 
  255 /*
  256  * NetBSD extension not defined in the BSDI API.  This is used in various
  257  * places to get the canonical description for a given type/subtype.
  258  *
  259  * NOTE: all but the top-level type descriptions must contain NO whitespace!
  260  * Otherwise, parsing these in ifconfig(8) would be a nightmare.
  261  */
  262 struct ifmedia_description {
  263         int     ifmt_word;              /* word value; may be masked */
  264         const char *ifmt_string;        /* description */
  265 };
  266 
  267 #define IFM_TYPE_DESCRIPTIONS {                     \
  268     { IFM_ETHER,     "Ethernet"   },                \
  269     { IFM_TOKEN,     "Token ring" },                \
  270     { IFM_FDDI,      "FDDI"       },                \
  271     { IFM_IEEE80211, "IEEE802.11" },                \
  272     { 0, NULL },                                    \
  273 }
  274 
  275 #define IFM_SUBTYPE_ETHERNET_DESCRIPTIONS {         \
  276     { IFM_10_T,     "10baseT/UTP" },                \
  277     { IFM_10_2,     "10base2/BNC" },                \
  278     { IFM_10_5,     "10base5/AUI" },                \
  279     { IFM_100_TX,   "100baseTX"   },                \
  280     { IFM_100_FX,   "100baseFX"   },                \
  281     { IFM_100_T4,   "100baseT4"   },                \
  282     { IFM_100_VG,   "100baseVG"   },                \
  283     { IFM_100_T2,   "100baseT2"   },                \
  284     { IFM_1000_SX,  "1000baseSX"  },                \
  285     { IFM_10_STP,   "10baseSTP"   },                \
  286     { IFM_10_FL,    "10baseFL"    },                \
  287     { IFM_1000_LX,  "1000baseLX"  },                \
  288     { IFM_1000_CX,  "1000baseCX"  },                \
  289     { IFM_1000_TX,  "1000baseTX"  },                \
  290     { IFM_HPNA_1,   "HomePNA1"    },                \
  291     { 0, NULL },                                    \
  292 }
  293 
  294 #define IFM_SUBTYPE_ETHERNET_ALIASES {              \
  295     { IFM_10_T,     "UTP"    },                     \
  296     { IFM_10_T,     "10UTP"  },                     \
  297     { IFM_10_2,     "BNC"    },                     \
  298     { IFM_10_2,     "10BNC"  },                     \
  299     { IFM_10_5,     "AUI"    },                     \
  300     { IFM_10_5,     "10AUI"  },                     \
  301     { IFM_100_TX,   "100TX"  },                     \
  302     { IFM_100_FX,   "100FX"  },                     \
  303     { IFM_100_T4,   "100T4"  },                     \
  304     { IFM_100_VG,   "100VG"  },                     \
  305     { IFM_100_T2,   "100T2"  },                     \
  306     { IFM_1000_SX,  "1000SX" },                     \
  307     { IFM_10_STP,   "STP"    },                     \
  308     { IFM_10_STP,   "10STP"  },                     \
  309     { IFM_10_FL,    "FL"     },                     \
  310     { IFM_10_FL,    "10FL"   },                     \
  311     { IFM_1000_LX,  "1000LX" },                     \
  312     { IFM_1000_CX,  "1000CX" },                     \
  313     { IFM_1000_TX,  "1000TX" },                     \
  314     { IFM_HPNA_1,   "HPNA1"  },                     \
  315     { 0, NULL },                                    \
  316 }
  317 
  318 #define IFM_SUBTYPE_ETHERNET_OPTION_DESCRIPTIONS {  \
  319     { 0, NULL },                                    \
  320 }
  321 
  322 #define IFM_SUBTYPE_TOKENRING_DESCRIPTIONS {        \
  323     { IFM_TOK_STP4,  "DB9/4Mbit" },                 \
  324     { IFM_TOK_STP16, "DB9/16Mbit" },                \
  325     { IFM_TOK_UTP4,  "UTP/4Mbit" },                 \
  326     { IFM_TOK_UTP16, "UTP/16Mbit" },                \
  327     { 0, NULL },                                    \
  328 }
  329 
  330 #define IFM_SUBTYPE_TOKENRING_ALIASES {             \
  331     { IFM_TOK_STP4,  "4STP" },                      \
  332     { IFM_TOK_STP16, "16STP" },                     \
  333     { IFM_TOK_UTP4,  "4UTP" },                      \
  334     { IFM_TOK_UTP16, "16UTP" },                     \
  335     { 0, NULL },                                    \
  336 }
  337 
  338 #define IFM_SUBTYPE_TOKENRING_OPTION_DESCRIPTIONS { \
  339     { IFM_TOK_ETR,   "EarlyTokenRelease" },         \
  340     { IFM_TOK_SRCRT, "SourceRouting" },             \
  341     { IFM_TOK_ALLR,  "AllRoutes" },                 \
  342     { 0, NULL },                                    \
  343 }
  344 
  345 #define IFM_SUBTYPE_FDDI_DESCRIPTIONS {             \
  346     { IFM_FDDI_SMF, "Single-mode" },                \
  347     { IFM_FDDI_MMF, "Multi-mode" },                 \
  348     { IFM_FDDI_UTP, "UTP" },                        \
  349     { 0, NULL },                                    \
  350 }
  351 
  352 #define IFM_SUBTYPE_FDDI_ALIASES {                  \
  353     { IFM_FDDI_SMF, "SMF" },                        \
  354     { IFM_FDDI_MMF, "MMF" },                        \
  355     { IFM_FDDI_UTP, "CDDI" },                       \
  356     { 0, NULL },                                    \
  357 }
  358 
  359 #define IFM_SUBTYPE_FDDI_OPTION_DESCRIPTIONS {      \
  360     { IFM_FDDI_DA,  "Dual-attach" },                \
  361     { 0, NULL },                                    \
  362 }
  363 
  364 #define IFM_SUBTYPE_IEEE80211_DESCRIPTIONS {        \
  365     { IFM_IEEE80211_FH1,  "FH1"  },                 \
  366     { IFM_IEEE80211_FH2,  "FH2"  },                 \
  367     { IFM_IEEE80211_DS1,  "DS1"  },                 \
  368     { IFM_IEEE80211_DS2,  "DS2"  },                 \
  369     { IFM_IEEE80211_DS5,  "DS5"  },                 \
  370     { IFM_IEEE80211_DS11, "DS11" },                 \
  371     { IFM_IEEE80211_DS22, "DS22" },                 \
  372     { 0, NULL },                                    \
  373 }
  374 
  375 #define IFM_SUBTYPE_IEEE80211_OPTION_DESCRIPTIONS { \
  376     { IFM_IEEE80211_ADHOC,  "adhoc" },              \
  377     { 0, NULL },                                    \
  378 }
  379 
  380 #define IFM_SUBTYPE_SHARED_DESCRIPTIONS {           \
  381     { IFM_AUTO,     "autoselect" },                 \
  382     { IFM_MANUAL,   "manual" },                     \
  383     { IFM_NONE,     "none" },                       \
  384     { 0, NULL },                                    \
  385 }
  386 
  387 #define IFM_SUBTYPE_SHARED_ALIASES {                \
  388     { IFM_AUTO,     "auto" },                       \
  389     { 0, NULL },                                    \
  390 }
  391 
  392 #define IFM_SHARED_OPTION_DESCRIPTIONS {            \
  393     { IFM_FDX,      "full-duplex" },                \
  394     { IFM_HDX,      "half-duplex" },                \
  395     { IFM_FLOW,     "flow-control" },               \
  396     { IFM_FLAG0,    "flag0" },                      \
  397     { IFM_FLAG1,    "flag1" },                      \
  398     { IFM_FLAG2,    "flag2" },                      \
  399     { IFM_LOOP,     "hw-loopback" },                \
  400     { 0, NULL },                                    \
  401 }
  402 
  403 #endif  /* _NET_IF_MEDIA_H_ */

Cache object: 65122a114d7873d8839965796f33d5b5


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