Home | History | Annotate | Line # | Download | only in net
if_media.h revision 1.26.14.1
      1  1.26.14.1   gehenna /*	$NetBSD: if_media.h,v 1.26.14.1 2002/08/29 00:56:42 gehenna Exp $	*/
      2        1.7   thorpej 
      3        1.7   thorpej /*-
      4       1.24   thorpej  * Copyright (c) 1998, 2000, 2001 The NetBSD Foundation, Inc.
      5        1.7   thorpej  * All rights reserved.
      6        1.7   thorpej  *
      7        1.7   thorpej  * This code is derived from software contributed to The NetBSD Foundation
      8        1.7   thorpej  * by Jason R. Thorpe of the Numerical Aerospace Simulation Facility,
      9        1.7   thorpej  * NASA Ames Research Center.
     10        1.7   thorpej  *
     11        1.7   thorpej  * Redistribution and use in source and binary forms, with or without
     12        1.7   thorpej  * modification, are permitted provided that the following conditions
     13        1.7   thorpej  * are met:
     14        1.7   thorpej  * 1. Redistributions of source code must retain the above copyright
     15        1.7   thorpej  *    notice, this list of conditions and the following disclaimer.
     16        1.7   thorpej  * 2. Redistributions in binary form must reproduce the above copyright
     17        1.7   thorpej  *    notice, this list of conditions and the following disclaimer in the
     18        1.7   thorpej  *    documentation and/or other materials provided with the distribution.
     19        1.7   thorpej  * 3. All advertising materials mentioning features or use of this software
     20        1.7   thorpej  *    must display the following acknowledgement:
     21        1.7   thorpej  *	This product includes software developed by the NetBSD
     22        1.7   thorpej  *	Foundation, Inc. and its contributors.
     23        1.7   thorpej  * 4. Neither the name of The NetBSD Foundation nor the names of its
     24        1.7   thorpej  *    contributors may be used to endorse or promote products derived
     25        1.7   thorpej  *    from this software without specific prior written permission.
     26        1.7   thorpej  *
     27        1.7   thorpej  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
     28        1.7   thorpej  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
     29        1.7   thorpej  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     30        1.7   thorpej  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
     31        1.7   thorpej  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
     32        1.7   thorpej  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
     33        1.7   thorpej  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
     34        1.7   thorpej  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
     35        1.7   thorpej  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
     36        1.7   thorpej  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
     37        1.7   thorpej  * POSSIBILITY OF SUCH DAMAGE.
     38        1.7   thorpej  */
     39        1.1   thorpej 
     40        1.1   thorpej /*
     41        1.1   thorpej  * Copyright (c) 1997
     42        1.1   thorpej  *	Jonathan Stone and Jason R. Thorpe.  All rights reserved.
     43        1.1   thorpej  *
     44        1.1   thorpej  * This software is derived from information provided by Matt Thomas.
     45        1.1   thorpej  *
     46        1.1   thorpej  * Redistribution and use in source and binary forms, with or without
     47        1.1   thorpej  * modification, are permitted provided that the following conditions
     48        1.1   thorpej  * are met:
     49        1.1   thorpej  * 1. Redistributions of source code must retain the above copyright
     50        1.1   thorpej  *    notice, this list of conditions and the following disclaimer.
     51        1.1   thorpej  * 2. Redistributions in binary form must reproduce the above copyright
     52        1.1   thorpej  *    notice, this list of conditions and the following disclaimer in the
     53        1.1   thorpej  *    documentation and/or other materials provided with the distribution.
     54        1.1   thorpej  * 3. All advertising materials mentioning features or use of this software
     55        1.1   thorpej  *    must display the following acknowledgement:
     56        1.1   thorpej  *	This product includes software developed by Jonathan Stone
     57        1.1   thorpej  *	and Jason R. Thorpe for the NetBSD Project.
     58        1.1   thorpej  * 4. The names of the authors may not be used to endorse or promote products
     59        1.1   thorpej  *    derived from this software without specific prior written permission.
     60        1.1   thorpej  *
     61        1.1   thorpej  * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR
     62        1.1   thorpej  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
     63        1.1   thorpej  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     64        1.1   thorpej  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
     65        1.1   thorpej  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
     66        1.1   thorpej  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
     67        1.1   thorpej  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
     68        1.1   thorpej  * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
     69        1.1   thorpej  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
     70        1.1   thorpej  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     71        1.1   thorpej  * SUCH DAMAGE.
     72        1.1   thorpej  */
     73        1.1   thorpej 
     74        1.1   thorpej #ifndef _NET_IF_MEDIA_H_
     75        1.1   thorpej #define _NET_IF_MEDIA_H_
     76        1.1   thorpej 
     77        1.1   thorpej /*
     78        1.1   thorpej  * Prototypes and definitions for BSD/OS-compatible network interface
     79        1.1   thorpej  * media selection.
     80        1.1   thorpej  *
     81        1.1   thorpej  * Where it is safe to do so, this code strays slightly from the BSD/OS
     82        1.1   thorpej  * design.  Software which uses the API (device drivers, basically)
     83        1.1   thorpej  * shouldn't notice any difference.
     84        1.1   thorpej  *
     85        1.1   thorpej  * Many thanks to Matt Thomas for providing the information necessary
     86        1.1   thorpej  * to implement this interface.
     87        1.1   thorpej  */
     88        1.1   thorpej 
     89        1.1   thorpej #ifdef _KERNEL
     90        1.1   thorpej 
     91        1.1   thorpej #include <sys/queue.h>
     92        1.1   thorpej 
     93        1.1   thorpej /*
     94        1.1   thorpej  * Driver callbacks for media status and change requests.
     95        1.1   thorpej  */
     96        1.1   thorpej typedef	int (*ifm_change_cb_t) __P((struct ifnet *ifp));
     97        1.1   thorpej typedef	void (*ifm_stat_cb_t) __P((struct ifnet *ifp, struct ifmediareq *req));
     98        1.1   thorpej 
     99        1.1   thorpej /*
    100        1.1   thorpej  * In-kernel representation of a single supported media type.
    101        1.1   thorpej  */
    102        1.1   thorpej struct ifmedia_entry {
    103       1.15   thorpej 	TAILQ_ENTRY(ifmedia_entry) ifm_list;
    104        1.1   thorpej 	int	ifm_media;	/* description of this media attachment */
    105        1.1   thorpej 	int	ifm_data;	/* for driver-specific use */
    106        1.1   thorpej 	void	*ifm_aux;	/* for driver-specific use */
    107        1.1   thorpej };
    108        1.1   thorpej 
    109        1.1   thorpej /*
    110        1.1   thorpej  * One of these goes into a network interface's softc structure.
    111        1.1   thorpej  * It is used to keep general media state.
    112        1.1   thorpej  */
    113        1.1   thorpej struct ifmedia {
    114        1.1   thorpej 	int	ifm_mask;	/* mask of changes we don't care about */
    115        1.1   thorpej 	int	ifm_media;	/* current user-set media word */
    116        1.1   thorpej 	struct ifmedia_entry *ifm_cur;	/* currently selected media */
    117       1.15   thorpej 	TAILQ_HEAD(, ifmedia_entry) ifm_list; /* list of all supported media */
    118        1.1   thorpej 	ifm_change_cb_t	ifm_change;	/* media change driver callback */
    119        1.1   thorpej 	ifm_stat_cb_t	ifm_status;	/* media status driver callback */
    120        1.1   thorpej };
    121        1.1   thorpej 
    122        1.1   thorpej /* Initialize an interface's struct if_media field. */
    123        1.1   thorpej void	ifmedia_init __P((struct ifmedia *ifm, int dontcare_mask,
    124        1.1   thorpej 	    ifm_change_cb_t change_callback, ifm_stat_cb_t status_callback));
    125        1.1   thorpej 
    126        1.1   thorpej /* Add one supported medium to a struct ifmedia. */
    127        1.1   thorpej void	ifmedia_add __P((struct ifmedia *ifm, int mword, int data, void *aux));
    128        1.1   thorpej 
    129        1.1   thorpej /* Add an array (of ifmedia_entry) media to a struct ifmedia. */
    130        1.1   thorpej void	ifmedia_list_add(struct ifmedia *mp, struct ifmedia_entry *lp,
    131        1.1   thorpej 	    int count);
    132        1.1   thorpej 
    133        1.1   thorpej /* Set default media type on initialization. */
    134        1.1   thorpej void	ifmedia_set __P((struct ifmedia *ifm, int mword));
    135        1.1   thorpej 
    136        1.1   thorpej /* Common ioctl function for getting/setting media, called by driver. */
    137        1.1   thorpej int	ifmedia_ioctl __P((struct ifnet *ifp, struct ifreq *ifr,
    138        1.1   thorpej 	    struct ifmedia *ifm, u_long cmd));
    139       1.14   thorpej 
    140       1.14   thorpej /* Look up a media entry. */
    141       1.14   thorpej struct ifmedia_entry *ifmedia_match __P((struct ifmedia *ifm, int flags,
    142       1.14   thorpej 	    int mask));
    143        1.1   thorpej 
    144       1.20   thorpej /* Delete all media for a given media instance */
    145       1.20   thorpej void	ifmedia_delete_instance __P((struct ifmedia *, int));
    146       1.20   thorpej 
    147       1.23   thorpej /* Compute baudrate for a given media. */
    148       1.23   thorpej int	ifmedia_baudrate __P((int));
    149        1.1   thorpej #endif /*_KERNEL */
    150        1.1   thorpej 
    151        1.1   thorpej /*
    152        1.1   thorpej  * if_media Options word:
    153        1.1   thorpej  *	Bits	Use
    154        1.1   thorpej  *	----	-------
    155       1.21   thorpej  *	0-4	Media subtype		MAX SUBTYPE == 31!
    156        1.1   thorpej  *	5-7	Media type
    157        1.1   thorpej  *	8-15	Type specific options
    158        1.1   thorpej  *	16-19	RFU
    159        1.1   thorpej  *	20-27	Shared (global) options
    160        1.1   thorpej  *	28-31	Instance
    161        1.1   thorpej  */
    162        1.1   thorpej 
    163        1.1   thorpej /*
    164        1.1   thorpej  * Ethernet
    165        1.1   thorpej  */
    166        1.1   thorpej #define IFM_ETHER	0x00000020
    167        1.1   thorpej #define	IFM_10_T	3		/* 10BaseT - RJ45 */
    168        1.1   thorpej #define	IFM_10_2	4		/* 10Base2 - Thinnet */
    169        1.1   thorpej #define	IFM_10_5	5		/* 10Base5 - AUI */
    170        1.1   thorpej #define	IFM_100_TX	6		/* 100BaseTX - RJ45 */
    171        1.1   thorpej #define	IFM_100_FX	7		/* 100BaseFX - Fiber */
    172        1.1   thorpej #define	IFM_100_T4	8		/* 100BaseT4 - 4 pair cat 3 */
    173        1.1   thorpej #define	IFM_100_VG	9		/* 100VG-AnyLAN */
    174        1.1   thorpej #define	IFM_100_T2	10		/* 100BaseT2 */
    175       1.19   thorpej #define	IFM_1000_SX	11		/* 1000BaseSX - multi-mode fiber */
    176        1.4   thorpej #define	IFM_10_STP	12		/* 10BaseT over shielded TP */
    177        1.6   thorpej #define	IFM_10_FL	13		/* 10BaseFL - Fiber */
    178       1.19   thorpej #define	IFM_1000_LX	14		/* 1000baseLX - single-mode fiber */
    179       1.19   thorpej #define	IFM_1000_CX	15		/* 1000baseCX - 150ohm STP */
    180       1.25     bjh21 #define	IFM_1000_T	16		/* 1000baseT - 4 pair cat 5 */
    181       1.21   thorpej #define	IFM_HPNA_1	17		/* HomePNA 1.0 (1Mb/s) */
    182        1.1   thorpej 
    183       1.25     bjh21 #define	IFM_ETH_MASTER	0x00000100	/* master mode (1000baseT) */
    184       1.24   thorpej 
    185        1.1   thorpej /*
    186        1.1   thorpej  * Token ring
    187        1.1   thorpej  */
    188        1.1   thorpej #define	IFM_TOKEN	0x00000040
    189        1.1   thorpej #define	IFM_TOK_STP4	3		/* Shielded twisted pair 4m - DB9 */
    190        1.1   thorpej #define	IFM_TOK_STP16	4		/* Shielded twisted pair 16m - DB9 */
    191        1.1   thorpej #define	IFM_TOK_UTP4	5		/* Unshielded twisted pair 4m - RJ45 */
    192        1.1   thorpej #define	IFM_TOK_UTP16	6		/* Unshielded twisted pair 16m - RJ45 */
    193        1.1   thorpej #define	IFM_TOK_ETR	0x00000200	/* Early token release */
    194        1.1   thorpej #define	IFM_TOK_SRCRT	0x00000400	/* Enable source routing features */
    195        1.1   thorpej #define	IFM_TOK_ALLR	0x00000800	/* All routes / Single route bcast */
    196        1.1   thorpej 
    197        1.1   thorpej /*
    198        1.1   thorpej  * FDDI
    199        1.1   thorpej  */
    200        1.1   thorpej #define	IFM_FDDI	0x00000060
    201        1.1   thorpej #define	IFM_FDDI_SMF	3		/* Single-mode fiber */
    202        1.1   thorpej #define	IFM_FDDI_MMF	4		/* Multi-mode fiber */
    203        1.1   thorpej #define IFM_FDDI_UTP	5		/* CDDI / UTP */
    204        1.1   thorpej #define IFM_FDDI_DA	0x00000100	/* Dual attach / single attach */
    205        1.1   thorpej 
    206        1.1   thorpej /*
    207       1.16    chopps  * IEEE 802.11 Wireless
    208       1.16    chopps  */
    209       1.16    chopps #define	IFM_IEEE80211	0x00000080
    210       1.17  augustss #define	IFM_IEEE80211_FH1	3	/* Frequency Hopping 1Mbps */
    211       1.16    chopps #define	IFM_IEEE80211_FH2	4	/* Frequency Hopping 2Mbps */
    212       1.16    chopps #define	IFM_IEEE80211_DS2	5	/* Direct Sequence 2Mbps */
    213       1.16    chopps #define	IFM_IEEE80211_DS5	6	/* Direct Sequence 5Mbps*/
    214       1.16    chopps #define	IFM_IEEE80211_DS11	7	/* Direct Sequence 11Mbps*/
    215       1.22  sommerfe #define	IFM_IEEE80211_DS1	8	/* Direct Sequence 1Mbps */
    216       1.22  sommerfe 
    217  1.26.14.1   gehenna #define	IFM_IEEE80211_ADHOC	 0x00000100	/* Operate in Adhoc mode */
    218  1.26.14.1   gehenna #define	IFM_IEEE80211_HOSTAP	 0x00000200	/* Operate in Host AP mode */
    219       1.16    chopps 
    220       1.16    chopps /*
    221        1.1   thorpej  * Shared media sub-types
    222        1.1   thorpej  */
    223        1.1   thorpej #define	IFM_AUTO	0		/* Autoselect best media */
    224        1.1   thorpej #define	IFM_MANUAL	1		/* Jumper/dipswitch selects media */
    225        1.1   thorpej #define	IFM_NONE	2		/* Deselect all media */
    226        1.1   thorpej 
    227        1.1   thorpej /*
    228        1.1   thorpej  * Shared options
    229        1.1   thorpej  */
    230        1.1   thorpej #define IFM_FDX		0x00100000	/* Force full duplex */
    231        1.1   thorpej #define	IFM_HDX		0x00200000	/* Force half duplex */
    232       1.13   thorpej #define	IFM_FLOW	0x00400000	/* enable hardware flow control */
    233        1.1   thorpej #define IFM_FLAG0	0x01000000	/* Driver defined flag */
    234        1.1   thorpej #define IFM_FLAG1	0x02000000	/* Driver defined flag */
    235        1.1   thorpej #define IFM_FLAG2	0x04000000	/* Driver defined flag */
    236        1.1   thorpej #define	IFM_LOOP	0x08000000	/* Put hardware in loopback */
    237        1.1   thorpej 
    238        1.1   thorpej /*
    239        1.1   thorpej  * Masks
    240        1.1   thorpej  */
    241        1.1   thorpej #define	IFM_NMASK	0x000000e0	/* Network type */
    242       1.21   thorpej #define	IFM_TMASK	0x0000001f	/* Media sub-type */
    243        1.1   thorpej #define	IFM_IMASK	0xf0000000	/* Instance */
    244        1.1   thorpej #define	IFM_ISHIFT	28		/* Instance shift */
    245        1.1   thorpej #define	IFM_OMASK	0x0000ff00	/* Type specific options */
    246        1.1   thorpej #define	IFM_GMASK	0x0ff00000	/* Global options */
    247        1.9   thorpej 
    248        1.9   thorpej #define	IFM_NMIN	IFM_ETHER	/* lowest Network type */
    249        1.9   thorpej #define	IFM_NMAX	IFM_NMASK	/* highest Network type */
    250        1.1   thorpej 
    251        1.1   thorpej /*
    252        1.1   thorpej  * Status bits
    253        1.1   thorpej  */
    254        1.1   thorpej #define	IFM_AVALID	0x00000001	/* Active bit valid */
    255        1.1   thorpej #define	IFM_ACTIVE	0x00000002	/* Interface attached to working net */
    256        1.1   thorpej 
    257       1.18   thorpej /* Mask of "status valid" bits, for ifconfig(8). */
    258       1.18   thorpej #define	IFM_STATUS_VALID IFM_AVALID
    259       1.18   thorpej 
    260       1.18   thorpej /* List of "status valid" bits, for ifconfig(8). */
    261       1.18   thorpej #define	IFM_STATUS_VALID_LIST {						\
    262       1.18   thorpej 	IFM_AVALID,							\
    263       1.18   thorpej 	0,								\
    264       1.18   thorpej }
    265       1.18   thorpej 
    266        1.1   thorpej /*
    267        1.1   thorpej  * Macros to extract various bits of information from the media word.
    268        1.1   thorpej  */
    269        1.1   thorpej #define	IFM_TYPE(x)	((x) & IFM_NMASK)
    270        1.1   thorpej #define	IFM_SUBTYPE(x)	((x) & IFM_TMASK)
    271        1.1   thorpej #define	IFM_INST(x)	(((x) & IFM_IMASK) >> IFM_ISHIFT)
    272        1.7   thorpej #define	IFM_OPTIONS(x)	((x) & (IFM_OMASK|IFM_GMASK))
    273       1.10   thorpej 
    274       1.10   thorpej #define	IFM_INST_MAX	IFM_INST(IFM_IMASK)
    275       1.20   thorpej #define	IFM_INST_ANY	-1
    276        1.8   thorpej 
    277        1.8   thorpej /*
    278        1.8   thorpej  * Macro to create a media word.
    279        1.8   thorpej  */
    280        1.8   thorpej #define	IFM_MAKEWORD(type, subtype, options, instance)			\
    281        1.8   thorpej 	((type) | (subtype) | (options) | ((instance) << IFM_ISHIFT))
    282        1.1   thorpej 
    283        1.1   thorpej /*
    284        1.1   thorpej  * NetBSD extension not defined in the BSDI API.  This is used in various
    285        1.1   thorpej  * places to get the canonical description for a given type/subtype.
    286        1.1   thorpej  *
    287        1.7   thorpej  * In the subtype and mediaopt descriptions, the valid TYPE bits are OR'd
    288        1.7   thorpej  * in to indicate which TYPE the subtype/option corresponds to.  If no
    289        1.7   thorpej  * TYPE is present, it is a shared media/mediaopt.
    290        1.7   thorpej  *
    291        1.7   thorpej  * Note that these are parsed case-insensitive.
    292        1.7   thorpej  *
    293        1.7   thorpej  * Order is important.  The first matching entry is the canonical name
    294        1.7   thorpej  * for a media type; subsequent matches are aliases.
    295        1.1   thorpej  */
    296        1.1   thorpej struct ifmedia_description {
    297        1.1   thorpej 	int	ifmt_word;		/* word value; may be masked */
    298        1.1   thorpej 	const char *ifmt_string;	/* description */
    299        1.1   thorpej };
    300        1.1   thorpej 
    301        1.1   thorpej #define	IFM_TYPE_DESCRIPTIONS {						\
    302        1.7   thorpej 	{ IFM_ETHER,			"Ethernet" },			\
    303        1.7   thorpej 	{ IFM_ETHER,			"ether" },			\
    304        1.7   thorpej 	{ IFM_TOKEN,			"TokenRing" },			\
    305        1.7   thorpej 	{ IFM_TOKEN,			"token" },			\
    306        1.7   thorpej 	{ IFM_FDDI,			"FDDI" },			\
    307       1.16    chopps 	{ IFM_IEEE80211,		"IEEE802.11" },			\
    308        1.7   thorpej 	{ 0, NULL },							\
    309        1.7   thorpej }
    310        1.7   thorpej 
    311        1.7   thorpej #define	IFM_TYPE_MATCH(dt, t)						\
    312        1.7   thorpej 	(IFM_TYPE((dt)) == 0 || IFM_TYPE((dt)) == IFM_TYPE((t)))
    313        1.7   thorpej 
    314        1.7   thorpej #define	IFM_SUBTYPE_DESCRIPTIONS {					\
    315        1.7   thorpej 	{ IFM_AUTO,			"autoselect" },			\
    316        1.7   thorpej 	{ IFM_AUTO,			"auto" },			\
    317        1.7   thorpej 	{ IFM_MANUAL,			"manual" },			\
    318        1.7   thorpej 	{ IFM_NONE,			"none" },			\
    319        1.7   thorpej 									\
    320        1.7   thorpej 	{ IFM_ETHER|IFM_10_T,		"10baseT" },			\
    321       1.11   thorpej 	{ IFM_ETHER|IFM_10_T,		"10baseT/UTP" },		\
    322        1.7   thorpej 	{ IFM_ETHER|IFM_10_T,		"UTP" },			\
    323        1.7   thorpej 	{ IFM_ETHER|IFM_10_T,		"10UTP" },			\
    324        1.7   thorpej 	{ IFM_ETHER|IFM_10_2,		"10base2" },			\
    325       1.11   thorpej 	{ IFM_ETHER|IFM_10_2,		"10base2/BNC" },		\
    326        1.7   thorpej 	{ IFM_ETHER|IFM_10_2,		"BNC" },			\
    327        1.7   thorpej 	{ IFM_ETHER|IFM_10_2,		"10BNC" },			\
    328        1.7   thorpej 	{ IFM_ETHER|IFM_10_5,		"10base5" },			\
    329       1.11   thorpej 	{ IFM_ETHER|IFM_10_5,		"10base5/AUI" },		\
    330        1.7   thorpej 	{ IFM_ETHER|IFM_10_5,		"AUI" },			\
    331        1.7   thorpej 	{ IFM_ETHER|IFM_10_5,		"10AUI" },			\
    332        1.7   thorpej 	{ IFM_ETHER|IFM_100_TX,		"100baseTX" },			\
    333        1.7   thorpej 	{ IFM_ETHER|IFM_100_TX,		"100TX" },			\
    334        1.7   thorpej 	{ IFM_ETHER|IFM_100_FX,		"100baseFX" },			\
    335        1.7   thorpej 	{ IFM_ETHER|IFM_100_FX,		"100FX" },			\
    336        1.7   thorpej 	{ IFM_ETHER|IFM_100_T4,		"100baseT4" },			\
    337        1.7   thorpej 	{ IFM_ETHER|IFM_100_T4,		"100T4" },			\
    338        1.7   thorpej 	{ IFM_ETHER|IFM_100_VG,		"100baseVG" },			\
    339        1.7   thorpej 	{ IFM_ETHER|IFM_100_VG,		"100VG" },			\
    340        1.7   thorpej 	{ IFM_ETHER|IFM_100_T2,		"100baseT2" },			\
    341        1.7   thorpej 	{ IFM_ETHER|IFM_100_T2,		"100T2" },			\
    342       1.19   thorpej 	{ IFM_ETHER|IFM_1000_SX,	"1000baseSX" },			\
    343       1.19   thorpej 	{ IFM_ETHER|IFM_1000_SX,	"1000SX" },			\
    344        1.7   thorpej 	{ IFM_ETHER|IFM_10_STP,		"10baseSTP" },			\
    345        1.7   thorpej 	{ IFM_ETHER|IFM_10_STP,		"STP" },			\
    346        1.7   thorpej 	{ IFM_ETHER|IFM_10_STP,		"10STP" },			\
    347        1.7   thorpej 	{ IFM_ETHER|IFM_10_FL,		"10baseFL" },			\
    348        1.7   thorpej 	{ IFM_ETHER|IFM_10_FL,		"FL" },				\
    349        1.7   thorpej 	{ IFM_ETHER|IFM_10_FL,		"10FL" },			\
    350       1.19   thorpej 	{ IFM_ETHER|IFM_1000_LX,	"1000baseLX" },			\
    351       1.19   thorpej 	{ IFM_ETHER|IFM_1000_LX,	"1000LX" },			\
    352       1.19   thorpej 	{ IFM_ETHER|IFM_1000_CX,	"1000baseCX" },			\
    353       1.19   thorpej 	{ IFM_ETHER|IFM_1000_CX,	"1000CX" },			\
    354       1.25     bjh21 	{ IFM_ETHER|IFM_1000_T,		"1000baseT" },			\
    355       1.25     bjh21 	{ IFM_ETHER|IFM_1000_T,		"1000T" },			\
    356       1.21   thorpej 	{ IFM_ETHER|IFM_HPNA_1,		"HomePNA1" },			\
    357       1.21   thorpej 	{ IFM_ETHER|IFM_HPNA_1,		"HPNA1" },			\
    358        1.7   thorpej 									\
    359        1.7   thorpej 	{ IFM_TOKEN|IFM_TOK_STP4,	"DB9/4Mbit" },			\
    360        1.7   thorpej 	{ IFM_TOKEN|IFM_TOK_STP4,	"4STP" },			\
    361        1.7   thorpej 	{ IFM_TOKEN|IFM_TOK_STP16,	"DB9/16Mbit" },			\
    362        1.7   thorpej 	{ IFM_TOKEN|IFM_TOK_STP16,	"16STP" },			\
    363        1.7   thorpej 	{ IFM_TOKEN|IFM_TOK_UTP4,	"UTP/4Mbit" },			\
    364        1.7   thorpej 	{ IFM_TOKEN|IFM_TOK_UTP4,	"4UTP" },			\
    365        1.7   thorpej 	{ IFM_TOKEN|IFM_TOK_UTP16,	"UTP/16Mbit" },			\
    366        1.7   thorpej 	{ IFM_TOKEN|IFM_TOK_UTP16,	"16UTP" },			\
    367        1.7   thorpej 									\
    368        1.7   thorpej 	{ IFM_FDDI|IFM_FDDI_SMF,	"Single-mode" },		\
    369        1.7   thorpej 	{ IFM_FDDI|IFM_FDDI_SMF,	"SMF" },			\
    370        1.7   thorpej 	{ IFM_FDDI|IFM_FDDI_MMF,	"Multi-mode" },			\
    371        1.7   thorpej 	{ IFM_FDDI|IFM_FDDI_MMF,	"MMF" },			\
    372        1.7   thorpej 	{ IFM_FDDI|IFM_FDDI_UTP,	"UTP" },			\
    373        1.7   thorpej 	{ IFM_FDDI|IFM_FDDI_UTP,	"CDDI" },			\
    374       1.12   thorpej 									\
    375       1.12   thorpej 	/*								\
    376       1.12   thorpej 	 * Short-hand for common media+option combos.			\
    377       1.12   thorpej 	 */								\
    378       1.12   thorpej 	{ IFM_ETHER|IFM_10_T|IFM_FDX,	"10baseT-FDX" },		\
    379       1.12   thorpej 	{ IFM_ETHER|IFM_100_TX|IFM_FDX,	"100baseTX-FDX" },		\
    380        1.7   thorpej 									\
    381       1.16    chopps 	/*								\
    382       1.16    chopps 	 * IEEE 802.11							\
    383       1.16    chopps 	 */								\
    384       1.16    chopps 	{ IFM_IEEE80211|IFM_IEEE80211_FH1,	"FH1"	},		\
    385       1.16    chopps 	{ IFM_IEEE80211|IFM_IEEE80211_FH2,	"FH2"	},		\
    386       1.22  sommerfe 	{ IFM_IEEE80211|IFM_IEEE80211_DS1,	"DS1"	},		\
    387       1.16    chopps 	{ IFM_IEEE80211|IFM_IEEE80211_DS2,	"DS2"	},		\
    388       1.16    chopps 	{ IFM_IEEE80211|IFM_IEEE80211_DS5,	"DS5"	},		\
    389       1.16    chopps 	{ IFM_IEEE80211|IFM_IEEE80211_DS11,	"DS11"	},		\
    390       1.16    chopps 									\
    391        1.7   thorpej 	{ 0, NULL },							\
    392        1.7   thorpej }
    393        1.7   thorpej 
    394        1.7   thorpej #define	IFM_OPTION_DESCRIPTIONS {					\
    395        1.7   thorpej 	{ IFM_FDX,			"full-duplex" },		\
    396        1.7   thorpej 	{ IFM_FDX,			"fdx" },			\
    397        1.7   thorpej 	{ IFM_HDX,			"half-duplex" },		\
    398        1.7   thorpej 	{ IFM_HDX,			"hdx" },			\
    399        1.7   thorpej 	{ IFM_FLAG0,			"flag0" },			\
    400        1.7   thorpej 	{ IFM_FLAG1,			"flag1" },			\
    401        1.7   thorpej 	{ IFM_FLAG2,			"flag2" },			\
    402        1.7   thorpej 	{ IFM_LOOP,			"loopback" },			\
    403        1.7   thorpej 	{ IFM_LOOP,			"hw-loopback"},			\
    404        1.7   thorpej 	{ IFM_LOOP,			"loop" },			\
    405       1.24   thorpej 									\
    406       1.24   thorpej 	{ IFM_ETHER|IFM_ETH_MASTER,	"master" },			\
    407        1.7   thorpej 									\
    408        1.7   thorpej 	{ IFM_TOKEN|IFM_TOK_ETR,	"EarlyTokenRelease" },		\
    409        1.7   thorpej 	{ IFM_TOKEN|IFM_TOK_ETR,	"ETR" },			\
    410        1.7   thorpej 	{ IFM_TOKEN|IFM_TOK_SRCRT,	"SourceRouting" },		\
    411        1.7   thorpej 	{ IFM_TOKEN|IFM_TOK_SRCRT,	"SRCRT" },			\
    412        1.7   thorpej 	{ IFM_TOKEN|IFM_TOK_ALLR,	"AllRoutes" },			\
    413        1.7   thorpej 	{ IFM_TOKEN|IFM_TOK_ALLR,	"ALLR" },			\
    414        1.7   thorpej 									\
    415        1.7   thorpej 	{ IFM_FDDI|IFM_FDDI_DA,		"dual-attach" },		\
    416        1.7   thorpej 	{ IFM_FDDI|IFM_FDDI_DA,		"das" },			\
    417       1.16    chopps 									\
    418       1.16    chopps 	{ IFM_IEEE80211|IFM_IEEE80211_ADHOC,	"adhoc" },		\
    419  1.26.14.1   gehenna 	{ IFM_IEEE80211|IFM_IEEE80211_ADHOC,	"ibss" },		\
    420  1.26.14.1   gehenna 	{ IFM_IEEE80211|IFM_IEEE80211_HOSTAP,	"hostap" },		\
    421        1.7   thorpej 									\
    422        1.1   thorpej 	{ 0, NULL },							\
    423       1.23   thorpej }
    424       1.23   thorpej 
    425       1.23   thorpej /*
    426       1.23   thorpej  * Baudrate descriptions for the various media types.
    427       1.23   thorpej  */
    428       1.23   thorpej struct ifmedia_baudrate {
    429       1.23   thorpej 	int	ifmb_word;		/* media word */
    430       1.23   thorpej 	int	ifmb_baudrate;		/* corresponding baudrate */
    431       1.23   thorpej };
    432       1.23   thorpej 
    433       1.23   thorpej #define	IFM_BAUDRATE_DESCRIPTIONS {					\
    434       1.23   thorpej 	{ IFM_ETHER|IFM_10_T,		IF_Mbps(10) },			\
    435       1.23   thorpej 	{ IFM_ETHER|IFM_10_2,		IF_Mbps(10) },			\
    436       1.23   thorpej 	{ IFM_ETHER|IFM_10_5,		IF_Mbps(10) },			\
    437       1.23   thorpej 	{ IFM_ETHER|IFM_100_TX,		IF_Mbps(100) },			\
    438       1.23   thorpej 	{ IFM_ETHER|IFM_100_FX,		IF_Mbps(100) },			\
    439       1.23   thorpej 	{ IFM_ETHER|IFM_100_T4,		IF_Mbps(100) },			\
    440       1.23   thorpej 	{ IFM_ETHER|IFM_100_VG,		IF_Mbps(100) },			\
    441       1.23   thorpej 	{ IFM_ETHER|IFM_100_T2,		IF_Mbps(100) },			\
    442       1.23   thorpej 	{ IFM_ETHER|IFM_1000_SX,	IF_Mbps(1000) },		\
    443       1.23   thorpej 	{ IFM_ETHER|IFM_10_STP,		IF_Mbps(10) },			\
    444       1.23   thorpej 	{ IFM_ETHER|IFM_10_FL,		IF_Mbps(10) },			\
    445       1.23   thorpej 	{ IFM_ETHER|IFM_1000_LX,	IF_Mbps(1000) },		\
    446       1.23   thorpej 	{ IFM_ETHER|IFM_1000_CX,	IF_Mbps(1000) },		\
    447       1.26    kleink 	{ IFM_ETHER|IFM_1000_T,		IF_Mbps(1000) },		\
    448       1.23   thorpej 	{ IFM_ETHER|IFM_HPNA_1,		IF_Mbps(1) },			\
    449       1.23   thorpej 									\
    450       1.23   thorpej 	{ IFM_TOKEN|IFM_TOK_STP4,	IF_Mbps(4) },			\
    451       1.23   thorpej 	{ IFM_TOKEN|IFM_TOK_STP16,	IF_Mbps(16) },			\
    452       1.23   thorpej 	{ IFM_TOKEN|IFM_TOK_UTP4,	IF_Mbps(4) },			\
    453       1.23   thorpej 	{ IFM_TOKEN|IFM_TOK_UTP16,	IF_Mbps(16) },			\
    454       1.23   thorpej 									\
    455       1.23   thorpej 	{ IFM_FDDI|IFM_FDDI_SMF,	IF_Mbps(100) },			\
    456       1.23   thorpej 	{ IFM_FDDI|IFM_FDDI_MMF,	IF_Mbps(100) },			\
    457       1.23   thorpej 	{ IFM_FDDI|IFM_FDDI_UTP,	IF_Mbps(100) },			\
    458       1.23   thorpej 									\
    459       1.23   thorpej 	{ IFM_IEEE80211|IFM_IEEE80211_FH1, IF_Mbps(1) },		\
    460       1.23   thorpej 	{ IFM_IEEE80211|IFM_IEEE80211_FH2, IF_Mbps(2) },		\
    461       1.23   thorpej 	{ IFM_IEEE80211|IFM_IEEE80211_DS2, IF_Mbps(2) },		\
    462       1.23   thorpej 	{ IFM_IEEE80211|IFM_IEEE80211_DS5, IF_Mbps(5) },		\
    463       1.23   thorpej 	{ IFM_IEEE80211|IFM_IEEE80211_DS11, IF_Mbps(11) },		\
    464       1.23   thorpej 	{ IFM_IEEE80211|IFM_IEEE80211_DS1, IF_Mbps(1) },		\
    465       1.23   thorpej 									\
    466       1.23   thorpej 	{ 0, 0 },							\
    467       1.18   thorpej }
    468       1.18   thorpej 
    469       1.18   thorpej /*
    470       1.18   thorpej  * Status bit descriptions for the various media types.
    471       1.18   thorpej  */
    472       1.18   thorpej struct ifmedia_status_description {
    473       1.18   thorpej 	int	ifms_type;
    474       1.18   thorpej 	int	ifms_valid;
    475       1.18   thorpej 	int	ifms_bit;
    476       1.18   thorpej 	const char *ifms_string[2];
    477       1.18   thorpej };
    478       1.18   thorpej 
    479       1.18   thorpej #define	IFM_STATUS_DESC(ifms, bit)					\
    480       1.18   thorpej 	(ifms)->ifms_string[((ifms)->ifms_bit & (bit)) ? 1 : 0]
    481       1.18   thorpej 
    482       1.18   thorpej #define	IFM_STATUS_DESCRIPTIONS {					\
    483       1.18   thorpej 	{ IFM_ETHER,		IFM_AVALID,	IFM_ACTIVE,		\
    484       1.18   thorpej 	  { "no carrier", "active" } },					\
    485       1.18   thorpej 									\
    486       1.18   thorpej 	{ IFM_FDDI,		IFM_AVALID,	IFM_ACTIVE,		\
    487       1.18   thorpej 	  { "no ring", "inserted" } },					\
    488       1.18   thorpej 									\
    489       1.18   thorpej 	{ IFM_TOKEN,		IFM_AVALID,	IFM_ACTIVE,		\
    490       1.18   thorpej 	  { "no ring", "inserted" } },					\
    491       1.18   thorpej 									\
    492       1.18   thorpej 	{ IFM_IEEE80211,	IFM_AVALID,	IFM_ACTIVE,		\
    493       1.18   thorpej 	  { "no network", "active" } },					\
    494       1.18   thorpej 									\
    495       1.18   thorpej 	{ 0,			0,		0,			\
    496       1.18   thorpej 	  { NULL, NULL } },						\
    497        1.1   thorpej }
    498        1.1   thorpej 
    499        1.1   thorpej #endif	/* _NET_IF_MEDIA_H_ */
    500