Annotation of XNU/bsd/net/if_media.h, revision 1.1.1.1

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

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.