[BACK]Return to if_media.h CVS log [TXT][DIR] Up to [local] / sys / net

Annotation of sys/net/if_media.h, Revision 1.1.1.1

1.1       nbrk        1: /*     $OpenBSD: if_media.h,v 1.24 2007/05/29 22:11:57 henning Exp $   */
                      2: /*     $NetBSD: if_media.h,v 1.22 2000/02/17 21:53:16 sommerfeld Exp $ */
                      3:
                      4: /*-
                      5:  * Copyright (c) 1998, 2000 The NetBSD Foundation, Inc.
                      6:  * All rights reserved.
                      7:  *
                      8:  * This code is derived from software contributed to The NetBSD Foundation
                      9:  * by Jason R. Thorpe of the Numerical Aerospace Simulation Facility,
                     10:  * NASA Ames Research Center.
                     11:  *
                     12:  * Redistribution and use in source and binary forms, with or without
                     13:  * modification, are permitted provided that the following conditions
                     14:  * are met:
                     15:  * 1. Redistributions of source code must retain the above copyright
                     16:  *    notice, this list of conditions and the following disclaimer.
                     17:  * 2. Redistributions in binary form must reproduce the above copyright
                     18:  *    notice, this list of conditions and the following disclaimer in the
                     19:  *    documentation and/or other materials provided with the distribution.
                     20:  * 3. All advertising materials mentioning features or use of this software
                     21:  *    must display the following acknowledgement:
                     22:  *     This product includes software developed by the NetBSD
                     23:  *     Foundation, Inc. and its contributors.
                     24:  * 4. Neither the name of The NetBSD Foundation nor the names of its
                     25:  *    contributors may be used to endorse or promote products derived
                     26:  *    from this software without specific prior written permission.
                     27:  *
                     28:  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
                     29:  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
                     30:  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
                     31:  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
                     32:  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
                     33:  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
                     34:  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
                     35:  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
                     36:  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
                     37:  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
                     38:  * POSSIBILITY OF SUCH DAMAGE.
                     39:  */
                     40:
                     41: /*
                     42:  * Copyright (c) 1997
                     43:  *     Jonathan Stone and Jason R. Thorpe.  All rights reserved.
                     44:  *
                     45:  * This software is derived from information provided by Matt Thomas.
                     46:  *
                     47:  * Redistribution and use in source and binary forms, with or without
                     48:  * modification, are permitted provided that the following conditions
                     49:  * are met:
                     50:  * 1. Redistributions of source code must retain the above copyright
                     51:  *    notice, this list of conditions and the following disclaimer.
                     52:  * 2. Redistributions in binary form must reproduce the above copyright
                     53:  *    notice, this list of conditions and the following disclaimer in the
                     54:  *    documentation and/or other materials provided with the distribution.
                     55:  * 3. All advertising materials mentioning features or use of this software
                     56:  *    must display the following acknowledgement:
                     57:  *     This product includes software developed by Jonathan Stone
                     58:  *     and Jason R. Thorpe for the NetBSD Project.
                     59:  * 4. The names of the authors may not be used to endorse or promote products
                     60:  *    derived from this software without specific prior written permission.
                     61:  *
                     62:  * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR
                     63:  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
                     64:  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
                     65:  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
                     66:  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
                     67:  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
                     68:  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
                     69:  * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
                     70:  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
                     71:  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
                     72:  * SUCH DAMAGE.
                     73:  */
                     74:
                     75: #ifndef _NET_IF_MEDIA_H_
                     76: #define _NET_IF_MEDIA_H_
                     77:
                     78: /*
                     79:  * Prototypes and definitions for BSD/OS-compatible network interface
                     80:  * media selection.
                     81:  *
                     82:  * Where it is safe to do so, this code strays slightly from the BSD/OS
                     83:  * design.  Software which uses the API (device drivers, basically)
                     84:  * shouldn't notice any difference.
                     85:  *
                     86:  * Many thanks to Matt Thomas for providing the information necessary
                     87:  * to implement this interface.
                     88:  */
                     89:
                     90: #ifdef _KERNEL
                     91:
                     92: #include <sys/queue.h>
                     93:
                     94: /*
                     95:  * Driver callbacks for media status and change requests.
                     96:  */
                     97: typedef        int (*ifm_change_cb_t)(struct ifnet *);
                     98: typedef        void (*ifm_stat_cb_t)(struct ifnet *, struct ifmediareq *);
                     99:
                    100: /*
                    101:  * In-kernel representation of a single supported media type.
                    102:  */
                    103: struct ifmedia_entry {
                    104:        TAILQ_ENTRY(ifmedia_entry) ifm_list;
                    105:        u_int   ifm_media;      /* description of this media attachment */
                    106:        u_int   ifm_data;       /* for driver-specific use */
                    107:        void    *ifm_aux;       /* for driver-specific use */
                    108: };
                    109:
                    110: /*
                    111:  * One of these goes into a network interface's softc structure.
                    112:  * It is used to keep general media state.
                    113:  */
                    114: struct ifmedia {
                    115:        u_int   ifm_mask;       /* mask of changes we don't care about */
                    116:        u_int   ifm_media;      /* current user-set media word */
                    117:        struct ifmedia_entry *ifm_cur;  /* currently selected media */
                    118:        TAILQ_HEAD(, ifmedia_entry) ifm_list; /* list of all supported media */
                    119:        ifm_change_cb_t ifm_change;     /* media change driver callback */
                    120:        ifm_stat_cb_t   ifm_status;     /* media status driver callback */
                    121: };
                    122:
                    123: /* Initialize an interface's struct if_media field. */
                    124: void   ifmedia_init(struct ifmedia *, int, ifm_change_cb_t,
                    125:             ifm_stat_cb_t);
                    126:
                    127: /* Add one supported medium to a struct ifmedia. */
                    128: void   ifmedia_add(struct ifmedia *, int, int, void *);
                    129:
                    130: /* Add an array (of ifmedia_entry) media to a struct ifmedia. */
                    131: void   ifmedia_list_add(struct ifmedia *, struct ifmedia_entry *,
                    132:            int);
                    133:
                    134: /* Set default media type on initialization. */
                    135: void   ifmedia_set(struct ifmedia *, int);
                    136:
                    137: /* Common ioctl function for getting/setting media, called by driver. */
                    138: int    ifmedia_ioctl(struct ifnet *, struct ifreq *, struct ifmedia *,
                    139:            u_long);
                    140:
                    141: /* Locate a media entry */
                    142: struct ifmedia_entry *ifmedia_match(struct ifmedia *, u_int, u_int);
                    143:
                    144: /* Delete all media for a given media instance */
                    145: void   ifmedia_delete_instance(struct ifmedia *, u_int);
                    146:
                    147: /* Compute baudrate for a given media. */
                    148: int    ifmedia_baudrate(int);
                    149: #endif /*_KERNEL */
                    150:
                    151: /*
                    152:  * if_media Options word:
                    153:  *     Bits    Use
                    154:  *     ----    -------
                    155:  *     0-4     Media subtype           MAX SUBTYPE == 31!
                    156:  *     5-7     Media type
                    157:  *     8-15    Type specific options
                    158:  *     16-19   RFU
                    159:  *     20-27   Shared (global) options
                    160:  *     28-31   Instance
                    161:  */
                    162:
                    163: /*
                    164:  * Ethernet
                    165:  */
                    166: #define IFM_ETHER      0x00000020
                    167: #define        IFM_10_T        3               /* 10BaseT - RJ45 */
                    168: #define        IFM_10_2        4               /* 10Base2 - Thinnet */
                    169: #define        IFM_10_5        5               /* 10Base5 - AUI */
                    170: #define        IFM_100_TX      6               /* 100BaseTX - RJ45 */
                    171: #define        IFM_100_FX      7               /* 100BaseFX - Fiber */
                    172: #define        IFM_100_T4      8               /* 100BaseT4 - 4 pair cat 3 */
                    173: #define        IFM_100_VG      9               /* 100VG-AnyLAN */
                    174: #define        IFM_100_T2      10              /* 100BaseT2 */
                    175: #define        IFM_1000_SX     11              /* 1000BaseSX - multi-mode fiber */
                    176: #define        IFM_10_STP      12              /* 10BaseT over shielded TP */
                    177: #define        IFM_10_FL       13              /* 10BaseFL - Fiber */
                    178: #define        IFM_1000_LX     14              /* 1000baseLX - single-mode fiber */
                    179: #define        IFM_1000_CX     15              /* 1000baseCX - 150ohm STP */
                    180: #define        IFM_1000_T      16              /* 1000baseT - 4 pair cat 5 */
                    181: #define        IFM_1000_TX     IFM_1000_T      /* for backwards compatibility */
                    182: #define        IFM_HPNA_1      17              /* HomePNA 1.0 (1Mb/s) */
                    183: #define        IFM_10G_LR      18              /* 10GBase-LR - single-mode fiber */
                    184: #define        IFM_10G_SR      19              /* 10GBase-SR - multi-mode fiber */
                    185: #define        IFM_10G_CX4     20              /* 10GBase-CX4 - copper */
                    186:
                    187: #define        IFM_ETH_MASTER  0x00000100      /* master mode (1000baseT) */
                    188: #define        IFM_ETH_RXPAUSE 0x00000200      /* receive PAUSE frames */
                    189: #define        IFM_ETH_TXPAUSE 0x00000400      /* transmit PAUSE frames */
                    190:
                    191: /*
                    192:  * FDDI
                    193:  */
                    194: #define        IFM_FDDI        0x00000060
                    195: #define        IFM_FDDI_SMF    3               /* Single-mode fiber */
                    196: #define        IFM_FDDI_MMF    4               /* Multi-mode fiber */
                    197: #define IFM_FDDI_UTP   5               /* CDDI / UTP */
                    198: #define IFM_FDDI_DA    0x00000100      /* Dual attach / single attach */
                    199:
                    200: /*
                    201:  * IEEE 802.11 Wireless
                    202:  */
                    203: #define        IFM_IEEE80211   0x00000080
                    204: #define        IFM_IEEE80211_FH1       3       /* Frequency Hopping 1Mbps */
                    205: #define        IFM_IEEE80211_FH2       4       /* Frequency Hopping 2Mbps */
                    206: #define        IFM_IEEE80211_DS2       5       /* Direct Sequence 2Mbps */
                    207: #define        IFM_IEEE80211_DS5       6       /* Direct Sequence 5Mbps*/
                    208: #define        IFM_IEEE80211_DS11      7       /* Direct Sequence 11Mbps*/
                    209: #define        IFM_IEEE80211_DS1       8       /* Direct Sequence  1Mbps*/
                    210: #define IFM_IEEE80211_DS22     9       /* Direct Sequence 22Mbps */
                    211: #define IFM_IEEE80211_OFDM6    10      /* OFDM 6Mbps */
                    212: #define IFM_IEEE80211_OFDM9    11      /* OFDM 9Mbps */
                    213: #define IFM_IEEE80211_OFDM12   12      /* OFDM 12Mbps */
                    214: #define IFM_IEEE80211_OFDM18   13      /* OFDM 18Mbps */
                    215: #define IFM_IEEE80211_OFDM24   14      /* OFDM 24Mbps */
                    216: #define IFM_IEEE80211_OFDM36   15      /* OFDM 36Mbps */
                    217: #define IFM_IEEE80211_OFDM48   16      /* OFDM 48Mbps */
                    218: #define IFM_IEEE80211_OFDM54   17      /* OFDM 54Mbps */
                    219: #define IFM_IEEE80211_OFDM72   18      /* OFDM 72Mbps */
                    220:
                    221: #define        IFM_IEEE80211_ADHOC     0x100   /* Operate in Adhoc mode */
                    222: #define        IFM_IEEE80211_HOSTAP    0x200   /* Operate in Host AP mode */
                    223: #define        IFM_IEEE80211_IBSS      0x400   /* Operate in IBSS mode */
                    224: #define        IFM_IEEE80211_IBSSMASTER 0x800  /* Operate as an IBSS master */
                    225: #define        IFM_IEEE80211_MONITOR   0x1000  /* Operate in Monitor mode */
                    226: #define        IFM_IEEE80211_TURBO     0x2000  /* Operate in Turbo mode */
                    227:
                    228: /* operating mode for multi-mode devices */
                    229: #define IFM_IEEE80211_11A      0x00010000      /* 5Ghz, OFDM mode */
                    230: #define IFM_IEEE80211_11B      0x00020000      /* Direct Sequence mode */
                    231: #define IFM_IEEE80211_11G      0x00030000      /* 2Ghz, CCK mode */
                    232: #define IFM_IEEE80211_FH       0x00040000      /* 2Ghz, GFSK mode */
                    233:
                    234: /*
                    235:  * Digitally multiplexed "Carrier" Serial Interfaces
                    236:  */
                    237: #define        IFM_TDM         0x000000a0
                    238: #define IFM_TDM_T1             3       /* T1 B8ZS+ESF 24 ts */
                    239: #define IFM_TDM_T1_AMI         4       /* T1 AMI+SF 24 ts */
                    240: #define IFM_TDM_E1             5       /* E1 HDB3+G.703 clearchannel 32 ts */
                    241: #define IFM_TDM_E1_G704                6       /* E1 HDB3+G.703+G.704 channelized 31 ts */
                    242: #define IFM_TDM_E1_AMI         7       /* E1 AMI+G.703 32 ts */
                    243: #define IFM_TDM_E1_AMI_G704    8       /* E1 AMI+G.703+G.704 31 ts */
                    244: #define IFM_TDM_T3             9       /* T3 B3ZS+C-bit 672 ts */
                    245: #define IFM_TDM_T3_M13         10      /* T3 B3ZS+M13 672 ts */
                    246: #define IFM_TDM_E3             11      /* E3 HDB3+G.751 512? ts */
                    247: #define IFM_TDM_E3_G751                12      /* E3 G.751 512 ts */
                    248: #define IFM_TDM_E3_G832                13      /* E3 G.832 512 ts */
                    249: #define IFM_TDM_E1_G704_CRC4   14      /* E1 HDB3+G.703+G.704 31 ts + CRC4 */
                    250: /*
                    251:  * 6 major ways that networks talk: Drivers enforce independent selection,
                    252:  * meaning, a driver will ensure that only one of these is set at a time.
                    253:  * Default is cisco hdlc mode with 32 bit CRC.
                    254:  */
                    255: #define IFM_TDM_HDLC_CRC16     0x0100  /* Use 16-bit CRC for HDLC instead */
                    256: #define IFM_TDM_PPP            0x0200  /* SPPP (dumb) */
                    257: #define IFM_TDM_FR_ANSI                0x0400  /* Frame Relay + LMI ANSI "Annex D" */
                    258: #define IFM_TDM_FR_CISCO       0x0800  /* Frame Relay + LMI Cisco */
                    259: #define IFM_TDM_FR_ITU         0x1000  /* Frame Relay + LMI ITU "Q933A" */
                    260:
                    261: /* operating mode */
                    262: #define IFM_TDM_MASTER         0x00010000      /* aka clock source internal */
                    263:
                    264: /*
                    265:  * Common Access Redundancy Protocol
                    266:  */
                    267: #define        IFM_CARP                0x000000c0
                    268:
                    269: /*
                    270:  * Shared media sub-types
                    271:  */
                    272: #define        IFM_AUTO        0               /* Autoselect best media */
                    273: #define        IFM_MANUAL      1               /* Jumper/dipswitch selects media */
                    274: #define        IFM_NONE        2               /* Deselect all media */
                    275:
                    276: /*
                    277:  * Shared options
                    278:  */
                    279: #define IFM_FDX                0x00100000      /* Force full duplex */
                    280: #define        IFM_HDX         0x00200000      /* Force half duplex */
                    281: #define        IFM_FLOW        0x00400000      /* enable hardware flow control */
                    282: #define IFM_FLAG0      0x01000000      /* Driver defined flag */
                    283: #define IFM_FLAG1      0x02000000      /* Driver defined flag */
                    284: #define IFM_FLAG2      0x04000000      /* Driver defined flag */
                    285: #define        IFM_LOOP        0x08000000      /* Put hardware in loopback */
                    286:
                    287: /*
                    288:  * Masks
                    289:  */
                    290: #define        IFM_NMASK       0x000000e0      /* Network type */
                    291: #define        IFM_TMASK       0x0000001f      /* Media sub-type */
                    292: #define        IFM_IMASK       0xf0000000      /* Instance */
                    293: #define        IFM_ISHIFT      28              /* Instance shift */
                    294: #define        IFM_OMASK       0x0000ff00      /* Type specific options */
                    295: #define        IFM_MMASK       0x00070000      /* Mode */
                    296: #define        IFM_MSHIFT      16              /* Mode shift */
                    297: #define        IFM_GMASK       0x0ff00000      /* Global options */
                    298:
                    299: /* Ethernet flow control mask */
                    300: #define        IFM_ETH_FMASK   (IFM_FLOW|IFM_ETH_RXPAUSE|IFM_ETH_TXPAUSE)
                    301:
                    302: #define        IFM_NMIN        IFM_ETHER       /* lowest Network type */
                    303: #define        IFM_NMAX        IFM_NMASK       /* highest Network type */
                    304:
                    305: /*
                    306:  * Status bits
                    307:  */
                    308: #define        IFM_AVALID      0x00000001      /* Active bit valid */
                    309: #define        IFM_ACTIVE      0x00000002      /* Interface attached to working net */
                    310:
                    311: /* Mask of "status valid" bits, for ifconfig(8). */
                    312: #define        IFM_STATUS_VALID        IFM_AVALID
                    313:
                    314: /* List of "status valid" bits, for ifconfig(8). */
                    315: #define        IFM_STATUS_VALID_LIST {                                         \
                    316:        IFM_AVALID,                                                     \
                    317:        0                                                               \
                    318: }
                    319:
                    320: /*
                    321:  * Macros to extract various bits of information from the media word.
                    322:  */
                    323: #define        IFM_TYPE(x)     ((x) & IFM_NMASK)
                    324: #define        IFM_SUBTYPE(x)  ((x) & IFM_TMASK)
                    325: #define        IFM_INST(x)     (((x) & IFM_IMASK) >> IFM_ISHIFT)
                    326: #define        IFM_OPTIONS(x)  ((x) & (IFM_OMASK|IFM_GMASK))
                    327: #define        IFM_MODE(x)     ((x) & IFM_MMASK)
                    328:
                    329: #define        IFM_INST_MAX    IFM_INST(IFM_IMASK)
                    330: #define        IFM_INST_ANY    ((u_int) -1)
                    331:
                    332: /*
                    333:  * Macro to create a media word.
                    334:  */
                    335: #define        IFM_MAKEWORD(type, subtype, options, instance)                  \
                    336:        ((type) | (subtype) | (options) | ((instance) << IFM_ISHIFT))
                    337: #define IFM_MAKEMODE(mode)                                             \
                    338:        (((mode) << IFM_MSHIFT) & IFM_MMASK)
                    339: /*
                    340:  * NetBSD extension not defined in the BSDI API.  This is used in various
                    341:  * places to get the canonical description for a given type/subtype.
                    342:  *
                    343:  * In the subtype and mediaopt descriptions, the valid TYPE bits are OR'd
                    344:  * in to indicate which TYPE the subtype/option corresponds to.  If no
                    345:  * TYPE is present, it is a shared media/mediaopt.
                    346:  *
                    347:  * Note that these are parsed case-insensitive.
                    348:  *
                    349:  * Order is important.  The first matching entry is the canonical name
                    350:  * for a media type; subsequent matches are aliases.
                    351:  */
                    352: struct ifmedia_description {
                    353:        int     ifmt_word;              /* word value; may be masked */
                    354:        const char *ifmt_string;        /* description */
                    355: };
                    356:
                    357: #define        IFM_TYPE_DESCRIPTIONS {                                         \
                    358:        { IFM_ETHER,                    "Ethernet" },                   \
                    359:        { IFM_ETHER,                    "ether" },                      \
                    360:        { IFM_FDDI,                     "FDDI" },                       \
                    361:        { IFM_IEEE80211,                "IEEE802.11" },                 \
                    362:        { IFM_TDM,                      "TDM" },                        \
                    363:        { IFM_CARP,                     "CARP" },                       \
                    364:        { 0, NULL },                                                    \
                    365: }
                    366:
                    367: #define        IFM_TYPE_MATCH(dt, t)                                           \
                    368:        (IFM_TYPE((dt)) == 0 || IFM_TYPE((dt)) == IFM_TYPE((t)))
                    369:
                    370: #define        IFM_SUBTYPE_DESCRIPTIONS {                                      \
                    371:        { IFM_AUTO,                     "autoselect" },                 \
                    372:        { IFM_AUTO,                     "auto" },                       \
                    373:        { IFM_MANUAL,                   "manual" },                     \
                    374:        { IFM_NONE,                     "none" },                       \
                    375:                                                                        \
                    376:        { IFM_ETHER|IFM_10_T,           "10baseT" },                    \
                    377:        { IFM_ETHER|IFM_10_T,           "10baseT/UTP" },                \
                    378:        { IFM_ETHER|IFM_10_T,           "UTP" },                        \
                    379:        { IFM_ETHER|IFM_10_T,           "10UTP" },                      \
                    380:        { IFM_ETHER|IFM_10_2,           "10base2" },                    \
                    381:        { IFM_ETHER|IFM_10_2,           "10base2/BNC" },                \
                    382:        { IFM_ETHER|IFM_10_2,           "BNC" },                        \
                    383:        { IFM_ETHER|IFM_10_2,           "10BNC" },                      \
                    384:        { IFM_ETHER|IFM_10_5,           "10base5" },                    \
                    385:        { IFM_ETHER|IFM_10_5,           "10base5/AUI" },                \
                    386:        { IFM_ETHER|IFM_10_5,           "AUI" },                        \
                    387:        { IFM_ETHER|IFM_10_5,           "10AUI" },                      \
                    388:        { IFM_ETHER|IFM_100_TX,         "100baseTX" },                  \
                    389:        { IFM_ETHER|IFM_100_TX,         "100TX" },                      \
                    390:        { IFM_ETHER|IFM_100_FX,         "100baseFX" },                  \
                    391:        { IFM_ETHER|IFM_100_FX,         "100FX" },                      \
                    392:        { IFM_ETHER|IFM_100_T4,         "100baseT4" },                  \
                    393:        { IFM_ETHER|IFM_100_T4,         "100T4" },                      \
                    394:        { IFM_ETHER|IFM_100_VG,         "100baseVG" },                  \
                    395:        { IFM_ETHER|IFM_100_VG,         "100VG" },                      \
                    396:        { IFM_ETHER|IFM_100_T2,         "100baseT2" },                  \
                    397:        { IFM_ETHER|IFM_100_T2,         "100T2" },                      \
                    398:        { IFM_ETHER|IFM_1000_SX,        "1000baseSX" },                 \
                    399:        { IFM_ETHER|IFM_1000_SX,        "1000SX" },                     \
                    400:        { IFM_ETHER|IFM_10_STP,         "10baseSTP" },                  \
                    401:        { IFM_ETHER|IFM_10_STP,         "STP" },                        \
                    402:        { IFM_ETHER|IFM_10_STP,         "10STP" },                      \
                    403:        { IFM_ETHER|IFM_10_FL,          "10baseFL" },                   \
                    404:        { IFM_ETHER|IFM_10_FL,          "FL" },                         \
                    405:        { IFM_ETHER|IFM_10_FL,          "10FL" },                       \
                    406:        { IFM_ETHER|IFM_1000_LX,        "1000baseLX" },                 \
                    407:        { IFM_ETHER|IFM_1000_LX,        "1000LX" },                     \
                    408:        { IFM_ETHER|IFM_1000_CX,        "1000baseCX" },                 \
                    409:        { IFM_ETHER|IFM_1000_CX,        "1000CX" },                     \
                    410:        { IFM_ETHER|IFM_1000_T,         "1000baseT" },                  \
                    411:        { IFM_ETHER|IFM_1000_T,         "1000T" },                      \
                    412:        { IFM_ETHER|IFM_1000_T,         "1000baseTX" },                 \
                    413:        { IFM_ETHER|IFM_1000_T,         "1000TX" },                     \
                    414:        { IFM_ETHER|IFM_HPNA_1,         "HomePNA1" },                   \
                    415:        { IFM_ETHER|IFM_HPNA_1,         "HPNA1" },                      \
                    416:        { IFM_ETHER|IFM_10G_LR,         "10GbaseLR" },                  \
                    417:        { IFM_ETHER|IFM_10G_LR,         "10GLR" },                      \
                    418:        { IFM_ETHER|IFM_10G_LR,         "10GBASE-LR" },                 \
                    419:        { IFM_ETHER|IFM_10G_SR,         "10GbaseSR" },                  \
                    420:        { IFM_ETHER|IFM_10G_SR,         "10GSR" },                      \
                    421:        { IFM_ETHER|IFM_10G_SR,         "10GBASE-SR" },                 \
                    422:        { IFM_ETHER|IFM_10G_CX4,        "10GbaseCX4" },                 \
                    423:        { IFM_ETHER|IFM_10G_CX4,        "10GCX4" },                     \
                    424:        { IFM_ETHER|IFM_10G_CX4,        "10GBASE-CX4" },                \
                    425:                                                                        \
                    426:        { IFM_FDDI|IFM_FDDI_SMF,        "Single-mode" },                \
                    427:        { IFM_FDDI|IFM_FDDI_SMF,        "SMF" },                        \
                    428:        { IFM_FDDI|IFM_FDDI_MMF,        "Multi-mode" },                 \
                    429:        { IFM_FDDI|IFM_FDDI_MMF,        "MMF" },                        \
                    430:        { IFM_FDDI|IFM_FDDI_UTP,        "UTP" },                        \
                    431:        { IFM_FDDI|IFM_FDDI_UTP,        "CDDI" },                       \
                    432:                                                                        \
                    433:        { IFM_IEEE80211|IFM_IEEE80211_FH1,      "FH1" },                \
                    434:        { IFM_IEEE80211|IFM_IEEE80211_FH2,      "FH2" },                \
                    435:        { IFM_IEEE80211|IFM_IEEE80211_DS2,      "DS2" },                \
                    436:        { IFM_IEEE80211|IFM_IEEE80211_DS5,      "DS5" },                \
                    437:        { IFM_IEEE80211|IFM_IEEE80211_DS11,     "DS11" },               \
                    438:        { IFM_IEEE80211|IFM_IEEE80211_DS1,      "DS1" },                \
                    439:        { IFM_IEEE80211|IFM_IEEE80211_DS22,     "DS22" },               \
                    440:        { IFM_IEEE80211|IFM_IEEE80211_OFDM6,    "OFDM6" },              \
                    441:        { IFM_IEEE80211|IFM_IEEE80211_OFDM9,    "OFDM9" },              \
                    442:        { IFM_IEEE80211|IFM_IEEE80211_OFDM12,   "OFDM12" },             \
                    443:        { IFM_IEEE80211|IFM_IEEE80211_OFDM18,   "OFDM18" },             \
                    444:        { IFM_IEEE80211|IFM_IEEE80211_OFDM24,   "OFDM24" },             \
                    445:        { IFM_IEEE80211|IFM_IEEE80211_OFDM36,   "OFDM36" },             \
                    446:        { IFM_IEEE80211|IFM_IEEE80211_OFDM48,   "OFDM48" },             \
                    447:        { IFM_IEEE80211|IFM_IEEE80211_OFDM54,   "OFDM54" },             \
                    448:        { IFM_IEEE80211|IFM_IEEE80211_OFDM72,   "OFDM72" },             \
                    449:                                                                        \
                    450:        { IFM_TDM|IFM_TDM_T1,           "t1" },                         \
                    451:        { IFM_TDM|IFM_TDM_T1_AMI,       "t1-ami" },                     \
                    452:        { IFM_TDM|IFM_TDM_E1,           "e1" },                         \
                    453:        { IFM_TDM|IFM_TDM_E1_G704,      "e1-g.704" },                   \
                    454:        { IFM_TDM|IFM_TDM_E1_AMI,       "e1-ami" },                     \
                    455:        { IFM_TDM|IFM_TDM_E1_AMI_G704,  "e1-ami-g.704" },               \
                    456:        { IFM_TDM|IFM_TDM_T3,           "t3" },                         \
                    457:        { IFM_TDM|IFM_TDM_T3_M13,       "t3-m13" },                     \
                    458:        { IFM_TDM|IFM_TDM_E3,           "e3" },                         \
                    459:        { IFM_TDM|IFM_TDM_E3_G751,      "e3-g.751" },                   \
                    460:        { IFM_TDM|IFM_TDM_E3_G832,      "e3-g.832" },                   \
                    461:        { IFM_TDM|IFM_TDM_E1_G704_CRC4, "e1-g.704-crc4" },              \
                    462:                                                                        \
                    463:        { 0, NULL },                                                    \
                    464: }
                    465:
                    466: #define IFM_MODE_DESCRIPTIONS {                                                \
                    467:        { IFM_AUTO,                             "autoselect" },         \
                    468:        { IFM_AUTO,                             "auto" },               \
                    469:        { IFM_IEEE80211|IFM_IEEE80211_11A,      "11a" },                \
                    470:        { IFM_IEEE80211|IFM_IEEE80211_11B,      "11b" },                \
                    471:        { IFM_IEEE80211|IFM_IEEE80211_11G,      "11g" },                \
                    472:        { IFM_IEEE80211|IFM_IEEE80211_FH,       "fh" },                 \
                    473:        { IFM_TDM|IFM_TDM_MASTER,               "master" },             \
                    474:        { 0, NULL },                                                    \
                    475: }
                    476:
                    477: #define        IFM_OPTION_DESCRIPTIONS {                                       \
                    478:        { IFM_FDX,                      "full-duplex" },                \
                    479:        { IFM_FDX,                      "fdx" },                        \
                    480:        { IFM_HDX,                      "half-duplex" },                \
                    481:        { IFM_HDX,                      "hdx" },                        \
                    482:        { IFM_FLAG0,                    "flag0" },                      \
                    483:        { IFM_FLAG1,                    "flag1" },                      \
                    484:        { IFM_FLAG2,                    "flag2" },                      \
                    485:        { IFM_LOOP,                     "loopback" },                   \
                    486:        { IFM_LOOP,                     "hw-loopback"},                 \
                    487:        { IFM_LOOP,                     "loop" },                       \
                    488:                                                                        \
                    489:        { IFM_ETHER|IFM_ETH_MASTER,     "master" },                     \
                    490:        { IFM_ETHER|IFM_ETH_RXPAUSE,    "rxpause" },                    \
                    491:        { IFM_ETHER|IFM_ETH_TXPAUSE,    "txpause" },                    \
                    492:                                                                        \
                    493:        { IFM_FDDI|IFM_FDDI_DA,         "dual-attach" },                \
                    494:        { IFM_FDDI|IFM_FDDI_DA,         "das" },                        \
                    495:                                                                        \
                    496:        { IFM_IEEE80211|IFM_IEEE80211_ADHOC,    "adhoc" },              \
                    497:        { IFM_IEEE80211|IFM_IEEE80211_HOSTAP,   "hostap" },             \
                    498:        { IFM_IEEE80211|IFM_IEEE80211_IBSS,     "ibss" },               \
                    499:        { IFM_IEEE80211|IFM_IEEE80211_IBSSMASTER, "ibss-master" },      \
                    500:        { IFM_IEEE80211|IFM_IEEE80211_MONITOR,  "monitor" },            \
                    501:        { IFM_IEEE80211|IFM_IEEE80211_TURBO,    "turbo" },              \
                    502:                                                                        \
                    503:        { IFM_TDM|IFM_TDM_HDLC_CRC16,   "hdlc-crc16" },                 \
                    504:        { IFM_TDM|IFM_TDM_PPP,          "ppp" },                        \
                    505:        { IFM_TDM|IFM_TDM_FR_ANSI,      "framerelay-ansi" },            \
                    506:        { IFM_TDM|IFM_TDM_FR_CISCO,     "framerelay-cisco" },           \
                    507:        { IFM_TDM|IFM_TDM_FR_ANSI,      "framerelay-itu" },             \
                    508:                                                                        \
                    509:        { 0, NULL },                                                    \
                    510: }
                    511:
                    512: /*
                    513:  * Baudrate descriptions for the various media types.
                    514:  */
                    515: struct ifmedia_baudrate {
                    516:        int     ifmb_word;              /* media word */
                    517:        int     ifmb_baudrate;          /* corresponding baudrate */
                    518: };
                    519:
                    520: #define        IFM_BAUDRATE_DESCRIPTIONS {                                     \
                    521:        { IFM_ETHER|IFM_10_T,           IF_Mbps(10) },                  \
                    522:        { IFM_ETHER|IFM_10_2,           IF_Mbps(10) },                  \
                    523:        { IFM_ETHER|IFM_10_5,           IF_Mbps(10) },                  \
                    524:        { IFM_ETHER|IFM_100_TX,         IF_Mbps(100) },                 \
                    525:        { IFM_ETHER|IFM_100_FX,         IF_Mbps(100) },                 \
                    526:        { IFM_ETHER|IFM_100_T4,         IF_Mbps(100) },                 \
                    527:        { IFM_ETHER|IFM_100_VG,         IF_Mbps(100) },                 \
                    528:        { IFM_ETHER|IFM_100_T2,         IF_Mbps(100) },                 \
                    529:        { IFM_ETHER|IFM_1000_SX,        IF_Mbps(1000) },                \
                    530:        { IFM_ETHER|IFM_10_STP,         IF_Mbps(10) },                  \
                    531:        { IFM_ETHER|IFM_10_FL,          IF_Mbps(10) },                  \
                    532:        { IFM_ETHER|IFM_1000_LX,        IF_Mbps(1000) },                \
                    533:        { IFM_ETHER|IFM_1000_CX,        IF_Mbps(1000) },                \
                    534:        { IFM_ETHER|IFM_1000_T,         IF_Mbps(1000) },                \
                    535:        { IFM_ETHER|IFM_HPNA_1,         IF_Mbps(1) },                   \
                    536:        { IFM_ETHER|IFM_10G_LR,         IF_Mbps(1000) },                \
                    537:        { IFM_ETHER|IFM_10G_SR,         IF_Mbps(1000) },                \
                    538:        { IFM_ETHER|IFM_10G_CX4,        IF_Mbps(1000) },                \
                    539:                                                                        \
                    540:        { IFM_FDDI|IFM_FDDI_SMF,        IF_Mbps(100) },                 \
                    541:        { IFM_FDDI|IFM_FDDI_MMF,        IF_Mbps(100) },                 \
                    542:        { IFM_FDDI|IFM_FDDI_UTP,        IF_Mbps(100) },                 \
                    543:                                                                        \
                    544:        { IFM_IEEE80211|IFM_IEEE80211_FH1, IF_Mbps(1) },                \
                    545:        { IFM_IEEE80211|IFM_IEEE80211_FH2, IF_Mbps(2) },                \
                    546:        { IFM_IEEE80211|IFM_IEEE80211_DS1, IF_Mbps(1) },                \
                    547:        { IFM_IEEE80211|IFM_IEEE80211_DS2, IF_Mbps(2) },                \
                    548:        { IFM_IEEE80211|IFM_IEEE80211_DS5, IF_Mbps(5) },                \
                    549:        { IFM_IEEE80211|IFM_IEEE80211_DS11, IF_Mbps(11) },              \
                    550:        { IFM_IEEE80211|IFM_IEEE80211_DS22, IF_Mbps(22) },              \
                    551:        { IFM_IEEE80211|IFM_IEEE80211_OFDM6, IF_Mbps(6) },              \
                    552:        { IFM_IEEE80211|IFM_IEEE80211_OFDM9, IF_Mbps(9) },              \
                    553:        { IFM_IEEE80211|IFM_IEEE80211_OFDM12, IF_Mbps(12) },            \
                    554:        { IFM_IEEE80211|IFM_IEEE80211_OFDM18, IF_Mbps(18) },            \
                    555:        { IFM_IEEE80211|IFM_IEEE80211_OFDM24, IF_Mbps(24) },            \
                    556:        { IFM_IEEE80211|IFM_IEEE80211_OFDM36, IF_Mbps(36) },            \
                    557:        { IFM_IEEE80211|IFM_IEEE80211_OFDM48, IF_Mbps(48) },            \
                    558:        { IFM_IEEE80211|IFM_IEEE80211_OFDM54, IF_Mbps(54) },            \
                    559:        { IFM_IEEE80211|IFM_IEEE80211_OFDM72, IF_Mbps(72) },            \
                    560:                                                                        \
                    561:        { IFM_TDM|IFM_TDM_T1,           IF_Kbps(1536) },                \
                    562:        { IFM_TDM|IFM_TDM_T1_AMI,       IF_Kbps(1536) },                \
                    563:        { IFM_TDM|IFM_TDM_E1,           IF_Kbps(2048) },                \
                    564:        { IFM_TDM|IFM_TDM_E1_G704,      IF_Kbps(2048) },                \
                    565:        { IFM_TDM|IFM_TDM_E1_AMI,       IF_Kbps(2048) },                \
                    566:        { IFM_TDM|IFM_TDM_E1_AMI_G704,  IF_Kbps(2048) },                \
                    567:        { IFM_TDM|IFM_TDM_T3,           IF_Kbps(44736) },               \
                    568:        { IFM_TDM|IFM_TDM_T3_M13,       IF_Kbps(44736) },               \
                    569:        { IFM_TDM|IFM_TDM_E3,           IF_Kbps(34368) },               \
                    570:        { IFM_TDM|IFM_TDM_E3_G751,      IF_Kbps(34368) },               \
                    571:        { IFM_TDM|IFM_TDM_E3_G832,      IF_Kbps(34368) },               \
                    572:        { IFM_TDM|IFM_TDM_E1_G704_CRC4, IF_Kbps(2048) },                \
                    573:                                                                        \
                    574:        { 0, 0 },                                                       \
                    575: }
                    576:
                    577: /*
                    578:  * Status bit descriptions for the various media types.
                    579:  */
                    580: struct ifmedia_status_description {
                    581:        int     ifms_type;
                    582:        int     ifms_valid;
                    583:        int     ifms_bit;
                    584:        const char *ifms_string[2];
                    585: };
                    586:
                    587: #define        IFM_STATUS_DESC(ifms, bit)                                      \
                    588:        (ifms)->ifms_string[((ifms)->ifms_bit & (bit)) ? 1 : 0]
                    589:
                    590: #define        IFM_STATUS_DESCRIPTIONS {                                       \
                    591:        { IFM_ETHER,            IFM_AVALID,     IFM_ACTIVE,             \
                    592:            { "no carrier", "active" } },                               \
                    593:        { IFM_FDDI,             IFM_AVALID,     IFM_ACTIVE,             \
                    594:            { "no ring", "inserted" } },                                \
                    595:        { IFM_IEEE80211,        IFM_AVALID,     IFM_ACTIVE,             \
                    596:            { "no network", "active" } },                               \
                    597:        { IFM_TDM,              IFM_AVALID,     IFM_ACTIVE,             \
                    598:            { "no carrier", "active" } },                               \
                    599:        { IFM_CARP,             IFM_AVALID,     IFM_ACTIVE,             \
                    600:            { "backup", "master" } },                                   \
                    601:        { 0,                    0,              0,                      \
                    602:            { NULL, NULL } }                                            \
                    603: }
                    604: #endif /* _NET_IF_MEDIA_H_ */

CVSweb