Annotation of XNU/bsd/net/if_media.h, revision 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.