if_media.h revision 165569
125428Speter/* $NetBSD: if_media.h,v 1.3 1997/03/26 01:19:27 thorpej Exp $ */ 250477Speter/* $FreeBSD: head/sys/net/if_media.h 165569 2006-12-27 18:46:18Z sam $ */ 325428Speter 4139823Simp/*- 525428Speter * Copyright (c) 1997 625428Speter * Jonathan Stone and Jason R. Thorpe. All rights reserved. 725428Speter * 825428Speter * This software is derived from information provided by Matt Thomas. 925428Speter * 1025428Speter * Redistribution and use in source and binary forms, with or without 1125428Speter * modification, are permitted provided that the following conditions 1225428Speter * are met: 1325428Speter * 1. Redistributions of source code must retain the above copyright 1425428Speter * notice, this list of conditions and the following disclaimer. 1525428Speter * 2. Redistributions in binary form must reproduce the above copyright 1625428Speter * notice, this list of conditions and the following disclaimer in the 1725428Speter * documentation and/or other materials provided with the distribution. 1825428Speter * 3. All advertising materials mentioning features or use of this software 1925428Speter * must display the following acknowledgement: 2025428Speter * This product includes software developed by Jonathan Stone 2125428Speter * and Jason R. Thorpe for the NetBSD Project. 2225428Speter * 4. The names of the authors may not be used to endorse or promote products 2325428Speter * derived from this software without specific prior written permission. 2425428Speter * 2525428Speter * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR 2625428Speter * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 2725428Speter * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 2825428Speter * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 2925428Speter * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 3025428Speter * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 3125428Speter * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 3225428Speter * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 3325428Speter * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 3425428Speter * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 3525428Speter * SUCH DAMAGE. 3625428Speter */ 3725428Speter 3825428Speter#ifndef _NET_IF_MEDIA_H_ 3925428Speter#define _NET_IF_MEDIA_H_ 4025428Speter 4125428Speter/* 4225428Speter * Prototypes and definitions for BSD/OS-compatible network interface 4325428Speter * media selection. 4425428Speter * 4525428Speter * Where it is safe to do so, this code strays slightly from the BSD/OS 4625428Speter * design. Software which uses the API (device drivers, basically) 4725428Speter * shouldn't notice any difference. 4825428Speter * 4925428Speter * Many thanks to Matt Thomas for providing the information necessary 5025428Speter * to implement this interface. 5125428Speter */ 5225428Speter 5355205Speter#ifdef _KERNEL 5425428Speter 5525428Speter#include <sys/queue.h> 5625428Speter 5725428Speter/* 5825428Speter * Driver callbacks for media status and change requests. 5925428Speter */ 6092725Salfredtypedef int (*ifm_change_cb_t)(struct ifnet *ifp); 6192725Salfredtypedef void (*ifm_stat_cb_t)(struct ifnet *ifp, struct ifmediareq *req); 6225428Speter 6325428Speter/* 6425428Speter * In-kernel representation of a single supported media type. 6525428Speter */ 6625428Speterstruct ifmedia_entry { 6760938Sjake LIST_ENTRY(ifmedia_entry) ifm_list; 6825428Speter int ifm_media; /* description of this media attachment */ 6925428Speter int ifm_data; /* for driver-specific use */ 7025428Speter void *ifm_aux; /* for driver-specific use */ 7125428Speter}; 7225428Speter 7325428Speter/* 7425428Speter * One of these goes into a network interface's softc structure. 7525428Speter * It is used to keep general media state. 7625428Speter */ 7725428Speterstruct ifmedia { 7825428Speter int ifm_mask; /* mask of changes we don't care about */ 7925428Speter int ifm_media; /* current user-set media word */ 8025428Speter struct ifmedia_entry *ifm_cur; /* currently selected media */ 8160938Sjake LIST_HEAD(, ifmedia_entry) ifm_list; /* list of all supported media */ 8225428Speter ifm_change_cb_t ifm_change; /* media change driver callback */ 8325428Speter ifm_stat_cb_t ifm_status; /* media status driver callback */ 8425428Speter}; 8525428Speter 8625428Speter/* Initialize an interface's struct if_media field. */ 8792725Salfredvoid ifmedia_init(struct ifmedia *ifm, int dontcare_mask, 8892725Salfred ifm_change_cb_t change_callback, ifm_stat_cb_t status_callback); 8925428Speter 9045720Speter/* Remove all mediums from a struct ifmedia. */ 9192725Salfredvoid ifmedia_removeall( struct ifmedia *ifm); 9245720Speter 9325428Speter/* Add one supported medium to a struct ifmedia. */ 9492725Salfredvoid ifmedia_add(struct ifmedia *ifm, int mword, int data, void *aux); 9525428Speter 9625428Speter/* Add an array (of ifmedia_entry) media to a struct ifmedia. */ 9725428Spetervoid ifmedia_list_add(struct ifmedia *mp, struct ifmedia_entry *lp, 9825428Speter int count); 9925428Speter 10025428Speter/* Set default media type on initialization. */ 10192725Salfredvoid ifmedia_set(struct ifmedia *ifm, int mword); 10225428Speter 10325428Speter/* Common ioctl function for getting/setting media, called by driver. */ 10492725Salfredint ifmedia_ioctl(struct ifnet *ifp, struct ifreq *ifr, 10592725Salfred struct ifmedia *ifm, u_long cmd); 10625428Speter 107155669Sglebius/* Compute baudrate for a given media. */ 108155669Sglebiusuint64_t ifmedia_baudrate(int); 109155669Sglebius 11055205Speter#endif /*_KERNEL */ 11125428Speter 11225428Speter/* 11325428Speter * if_media Options word: 11425428Speter * Bits Use 11525428Speter * ---- ------- 11653649Sjulian * 0-4 Media variant 11725428Speter * 5-7 Media type 11825428Speter * 8-15 Type specific options 119114163Ssam * 16-18 Mode (for multi-mode devices) 120114163Ssam * 19 RFU 12125428Speter * 20-27 Shared (global) options 12225428Speter * 28-31 Instance 12325428Speter */ 12425428Speter 12525428Speter/* 12625428Speter * Ethernet 12725428Speter */ 12895702Sphk#define IFM_ETHER 0x00000020 12925428Speter#define IFM_10_T 3 /* 10BaseT - RJ45 */ 13025428Speter#define IFM_10_2 4 /* 10Base2 - Thinnet */ 13125428Speter#define IFM_10_5 5 /* 10Base5 - AUI */ 13225428Speter#define IFM_100_TX 6 /* 100BaseTX - RJ45 */ 13325428Speter#define IFM_100_FX 7 /* 100BaseFX - Fiber */ 13425428Speter#define IFM_100_T4 8 /* 100BaseT4 - 4 pair cat 3 */ 13525428Speter#define IFM_100_VG 9 /* 100VG-AnyLAN */ 13625428Speter#define IFM_100_T2 10 /* 100BaseT2 */ 13795702Sphk#define IFM_1000_SX 11 /* 1000BaseSX - multi-mode fiber */ 13895702Sphk#define IFM_10_STP 12 /* 10BaseT over shielded TP */ 13995702Sphk#define IFM_10_FL 13 /* 10BaseFL - Fiber */ 14095702Sphk#define IFM_1000_LX 14 /* 1000baseLX - single-mode fiber */ 14195702Sphk#define IFM_1000_CX 15 /* 1000baseCX - 150ohm STP */ 14295702Sphk#define IFM_1000_T 16 /* 1000baseT - 4 pair cat 5 */ 14395702Sphk#define IFM_HPNA_1 17 /* HomePNA 1.0 (1Mb/s) */ 144155669Sglebius#define IFM_10G_LR 18 /* 10GBase-LR 1310nm Single-mode */ 145155669Sglebius#define IFM_10G_SR 19 /* 10GBase-SR 850nm Multi-mode */ 146159162Sglebius#define IFM_10G_CX4 20 /* 10GBase CX4 copper */ 147133603Stackerman 14853649Sjulian/* note 31 is the max! */ 14925428Speter 15095702Sphk#define IFM_ETH_MASTER 0x00000100 /* master mode (1000baseT) */ 15195702Sphk 15225428Speter/* 15325428Speter * Token ring 15425428Speter */ 15525428Speter#define IFM_TOKEN 0x00000040 15625428Speter#define IFM_TOK_STP4 3 /* Shielded twisted pair 4m - DB9 */ 15725428Speter#define IFM_TOK_STP16 4 /* Shielded twisted pair 16m - DB9 */ 15825428Speter#define IFM_TOK_UTP4 5 /* Unshielded twisted pair 4m - RJ45 */ 15925428Speter#define IFM_TOK_UTP16 6 /* Unshielded twisted pair 16m - RJ45 */ 16095702Sphk#define IFM_TOK_STP100 7 /* Shielded twisted pair 100m - DB9 */ 16195702Sphk#define IFM_TOK_UTP100 8 /* Unshielded twisted pair 100m - RJ45 */ 16225428Speter#define IFM_TOK_ETR 0x00000200 /* Early token release */ 16325428Speter#define IFM_TOK_SRCRT 0x00000400 /* Enable source routing features */ 16425428Speter#define IFM_TOK_ALLR 0x00000800 /* All routes / Single route bcast */ 16595702Sphk#define IFM_TOK_DTR 0x00002000 /* Dedicated token ring */ 16695702Sphk#define IFM_TOK_CLASSIC 0x00004000 /* Classic token ring */ 16795702Sphk#define IFM_TOK_AUTO 0x00008000 /* Automatic Dedicate/Classic token ring */ 16825428Speter 16925428Speter/* 17025428Speter * FDDI 17125428Speter */ 17225428Speter#define IFM_FDDI 0x00000060 17325428Speter#define IFM_FDDI_SMF 3 /* Single-mode fiber */ 17425428Speter#define IFM_FDDI_MMF 4 /* Multi-mode fiber */ 17595702Sphk#define IFM_FDDI_UTP 5 /* CDDI / UTP */ 17695702Sphk#define IFM_FDDI_DA 0x00000100 /* Dual attach / single attach */ 17725428Speter 17825428Speter/* 17977217Sphk * IEEE 802.11 Wireless 18077217Sphk */ 18195702Sphk#define IFM_IEEE80211 0x00000080 182114163Ssam/* NB: 0,1,2 are auto, manual, none defined below */ 18395702Sphk#define IFM_IEEE80211_FH1 3 /* Frequency Hopping 1Mbps */ 18495702Sphk#define IFM_IEEE80211_FH2 4 /* Frequency Hopping 2Mbps */ 18595702Sphk#define IFM_IEEE80211_DS1 5 /* Direct Sequence 1Mbps */ 18695702Sphk#define IFM_IEEE80211_DS2 6 /* Direct Sequence 2Mbps */ 18795702Sphk#define IFM_IEEE80211_DS5 7 /* Direct Sequence 5.5Mbps */ 18895702Sphk#define IFM_IEEE80211_DS11 8 /* Direct Sequence 11Mbps */ 18995702Sphk#define IFM_IEEE80211_DS22 9 /* Direct Sequence 22Mbps */ 190114163Ssam#define IFM_IEEE80211_OFDM6 10 /* OFDM 6Mbps */ 191114163Ssam#define IFM_IEEE80211_OFDM9 11 /* OFDM 9Mbps */ 192114163Ssam#define IFM_IEEE80211_OFDM12 12 /* OFDM 12Mbps */ 193114163Ssam#define IFM_IEEE80211_OFDM18 13 /* OFDM 18Mbps */ 194114163Ssam#define IFM_IEEE80211_OFDM24 14 /* OFDM 24Mbps */ 195114163Ssam#define IFM_IEEE80211_OFDM36 15 /* OFDM 36Mbps */ 196114163Ssam#define IFM_IEEE80211_OFDM48 16 /* OFDM 48Mbps */ 197114163Ssam#define IFM_IEEE80211_OFDM54 17 /* OFDM 54Mbps */ 198114163Ssam#define IFM_IEEE80211_OFDM72 18 /* OFDM 72Mbps */ 199128195Sfjoe#define IFM_IEEE80211_DS354k 19 /* Direct Sequence 354Kbps */ 200128195Sfjoe#define IFM_IEEE80211_DS512k 20 /* Direct Sequence 512Kbps */ 201165569Ssam#define IFM_IEEE80211_OFDM3 21 /* OFDM 3Mbps */ 202165569Ssam#define IFM_IEEE80211_OFDM4 22 /* OFDM 4.5Mbps */ 203165569Ssam#define IFM_IEEE80211_OFDM27 23 /* OFDM 27Mbps */ 204124543Sonoe 20595702Sphk#define IFM_IEEE80211_ADHOC 0x00000100 /* Operate in Adhoc mode */ 20695702Sphk#define IFM_IEEE80211_HOSTAP 0x00000200 /* Operate in Host AP mode */ 20796174Simp#define IFM_IEEE80211_IBSS 0x00000400 /* Operate in IBSS mode */ 20896174Simp#define IFM_IEEE80211_IBSSMASTER 0x00000800 /* Operate as an IBSS master */ 209114163Ssam#define IFM_IEEE80211_TURBO 0x00001000 /* Operate in turbo mode */ 210117817Ssam#define IFM_IEEE80211_MONITOR 0x00002000 /* Operate in monitor mode */ 211124543Sonoe 212114163Ssam/* operating mode for multi-mode devices */ 213124543Sonoe#define IFM_IEEE80211_11A 0x00010000 /* 5Ghz, OFDM mode */ 214124543Sonoe#define IFM_IEEE80211_11B 0x00020000 /* Direct Sequence mode */ 215124543Sonoe#define IFM_IEEE80211_11G 0x00030000 /* 2Ghz, CCK mode */ 216124543Sonoe#define IFM_IEEE80211_FH 0x00040000 /* 2Ghz, GFSK mode */ 21777217Sphk 21877217Sphk/* 219114232Sharti * ATM 220114232Sharti */ 221114232Sharti#define IFM_ATM 0x000000a0 222114232Sharti#define IFM_ATM_UNKNOWN 3 223114232Sharti#define IFM_ATM_UTP_25 4 224114232Sharti#define IFM_ATM_TAXI_100 5 225114232Sharti#define IFM_ATM_TAXI_140 6 226114232Sharti#define IFM_ATM_MM_155 7 227114232Sharti#define IFM_ATM_SM_155 8 228114232Sharti#define IFM_ATM_UTP_155 9 229114232Sharti#define IFM_ATM_MM_622 10 230114232Sharti#define IFM_ATM_SM_622 11 231125015Sharti#define IFM_ATM_VIRTUAL 12 232114232Sharti#define IFM_ATM_SDH 0x00000100 /* SDH instead of SONET */ 233114232Sharti#define IFM_ATM_NOSCRAMB 0x00000200 /* no scrambling */ 234114232Sharti#define IFM_ATM_UNASSIGNED 0x00000400 /* unassigned cells */ 235114232Sharti 236114232Sharti/* 237142215Sglebius * CARP Common Address Redundancy Protocol 238142215Sglebius */ 239142215Sglebius#define IFM_CARP 0x000000c0 240142215Sglebius 241142215Sglebius/* 24225428Speter * Shared media sub-types 24325428Speter */ 24425428Speter#define IFM_AUTO 0 /* Autoselect best media */ 24525428Speter#define IFM_MANUAL 1 /* Jumper/dipswitch selects media */ 24625428Speter#define IFM_NONE 2 /* Deselect all media */ 24725428Speter 24825428Speter/* 24925428Speter * Shared options 25025428Speter */ 25195702Sphk#define IFM_FDX 0x00100000 /* Force full duplex */ 25225428Speter#define IFM_HDX 0x00200000 /* Force half duplex */ 25395702Sphk#define IFM_FLAG0 0x01000000 /* Driver defined flag */ 25495702Sphk#define IFM_FLAG1 0x02000000 /* Driver defined flag */ 25595702Sphk#define IFM_FLAG2 0x04000000 /* Driver defined flag */ 25625428Speter#define IFM_LOOP 0x08000000 /* Put hardware in loopback */ 25725428Speter 25825428Speter/* 25925428Speter * Masks 26025428Speter */ 26125428Speter#define IFM_NMASK 0x000000e0 /* Network type */ 26253649Sjulian#define IFM_TMASK 0x0000001f /* Media sub-type */ 26325428Speter#define IFM_IMASK 0xf0000000 /* Instance */ 26425428Speter#define IFM_ISHIFT 28 /* Instance shift */ 26525428Speter#define IFM_OMASK 0x0000ff00 /* Type specific options */ 266114163Ssam#define IFM_MMASK 0x00070000 /* Mode */ 267114163Ssam#define IFM_MSHIFT 16 /* Mode shift */ 26825428Speter#define IFM_GMASK 0x0ff00000 /* Global options */ 26925428Speter 27025428Speter/* 27125428Speter * Status bits 27225428Speter */ 27325428Speter#define IFM_AVALID 0x00000001 /* Active bit valid */ 27425428Speter#define IFM_ACTIVE 0x00000002 /* Interface attached to working net */ 27525428Speter 276156751Sandre/* Mask of "status valid" bits, for ifconfig(8). */ 277156751Sandre#define IFM_STATUS_VALID IFM_AVALID 278156751Sandre 279156751Sandre/* List of "status valid" bits, for ifconfig(8). */ 280156751Sandre#define IFM_STATUS_VALID_LIST { \ 281156751Sandre IFM_AVALID, \ 282156751Sandre 0 \ 283156751Sandre} 284156751Sandre 28525428Speter/* 28625428Speter * Macros to extract various bits of information from the media word. 28725428Speter */ 28844165Sjulian#define IFM_TYPE(x) ((x) & IFM_NMASK) 28944165Sjulian#define IFM_SUBTYPE(x) ((x) & IFM_TMASK) 29095702Sphk#define IFM_TYPE_OPTIONS(x) ((x) & IFM_OMASK) 29144165Sjulian#define IFM_INST(x) (((x) & IFM_IMASK) >> IFM_ISHIFT) 29295702Sphk#define IFM_OPTIONS(x) ((x) & (IFM_OMASK|IFM_GMASK)) 293124823Sonoe#define IFM_MODE(x) ((x) & IFM_MMASK) 29425428Speter 29595702Sphk#define IFM_INST_MAX IFM_INST(IFM_IMASK) 29644521Swpaul 29725428Speter/* 29844521Swpaul * Macro to create a media word. 29944521Swpaul */ 30095702Sphk#define IFM_MAKEWORD(type, subtype, options, instance) \ 30144521Swpaul ((type) | (subtype) | (options) | ((instance) << IFM_ISHIFT)) 302114163Ssam#define IFM_MAKEMODE(mode) \ 303114163Ssam (((mode) << IFM_MSHIFT) & IFM_MMASK) 30444521Swpaul 30544521Swpaul/* 30625428Speter * NetBSD extension not defined in the BSDI API. This is used in various 30725428Speter * places to get the canonical description for a given type/subtype. 30825428Speter * 30925428Speter * NOTE: all but the top-level type descriptions must contain NO whitespace! 31025428Speter * Otherwise, parsing these in ifconfig(8) would be a nightmare. 31125428Speter */ 31225428Speterstruct ifmedia_description { 31325428Speter int ifmt_word; /* word value; may be masked */ 31425428Speter const char *ifmt_string; /* description */ 31525428Speter}; 31625428Speter 31725428Speter#define IFM_TYPE_DESCRIPTIONS { \ 31877217Sphk { IFM_ETHER, "Ethernet" }, \ 31977217Sphk { IFM_TOKEN, "Token ring" }, \ 32077217Sphk { IFM_FDDI, "FDDI" }, \ 32177217Sphk { IFM_IEEE80211, "IEEE 802.11 Wireless Ethernet" }, \ 322114232Sharti { IFM_ATM, "ATM" }, \ 323142215Sglebius { IFM_CARP, "Common Address Redundancy Protocol" }, \ 32425428Speter { 0, NULL }, \ 32525428Speter} 32625428Speter 32725428Speter#define IFM_SUBTYPE_ETHERNET_DESCRIPTIONS { \ 32825428Speter { IFM_10_T, "10baseT/UTP" }, \ 32925428Speter { IFM_10_2, "10base2/BNC" }, \ 33025428Speter { IFM_10_5, "10base5/AUI" }, \ 33125428Speter { IFM_100_TX, "100baseTX" }, \ 33225428Speter { IFM_100_FX, "100baseFX" }, \ 33325428Speter { IFM_100_T4, "100baseT4" }, \ 33425428Speter { IFM_100_VG, "100baseVG" }, \ 33525428Speter { IFM_100_T2, "100baseT2" }, \ 33644521Swpaul { IFM_10_STP, "10baseSTP" }, \ 33744521Swpaul { IFM_10_FL, "10baseFL" }, \ 33844542Swpaul { IFM_1000_SX, "1000baseSX" }, \ 33944542Swpaul { IFM_1000_LX, "1000baseLX" }, \ 34044542Swpaul { IFM_1000_CX, "1000baseCX" }, \ 34195673Sphk { IFM_1000_T, "1000baseTX" }, \ 34295702Sphk { IFM_1000_T, "1000baseT" }, \ 34395702Sphk { IFM_HPNA_1, "homePNA" }, \ 344155708Sglebius { IFM_10G_LR, "10Gbase-LR" }, \ 345155708Sglebius { IFM_10G_SR, "10Gbase-SR" }, \ 346159162Sglebius { IFM_10G_CX4, "10Gbase-CX4" }, \ 34725428Speter { 0, NULL }, \ 34825428Speter} 34925428Speter 35025428Speter#define IFM_SUBTYPE_ETHERNET_ALIASES { \ 35125428Speter { IFM_10_T, "UTP" }, \ 35225428Speter { IFM_10_T, "10UTP" }, \ 35325428Speter { IFM_10_2, "BNC" }, \ 35425428Speter { IFM_10_2, "10BNC" }, \ 35525428Speter { IFM_10_5, "AUI" }, \ 35625428Speter { IFM_10_5, "10AUI" }, \ 35725428Speter { IFM_100_TX, "100TX" }, \ 35825428Speter { IFM_100_T4, "100T4" }, \ 35925428Speter { IFM_100_VG, "100VG" }, \ 36025428Speter { IFM_100_T2, "100T2" }, \ 36144521Swpaul { IFM_10_STP, "10STP" }, \ 36244521Swpaul { IFM_10_FL, "10FL" }, \ 36395702Sphk { IFM_1000_SX, "1000SX" }, \ 36495702Sphk { IFM_1000_LX, "1000LX" }, \ 36595702Sphk { IFM_1000_CX, "1000CX" }, \ 36695702Sphk { IFM_1000_T, "1000TX" }, \ 36795702Sphk { IFM_1000_T, "1000T" }, \ 36825428Speter { 0, NULL }, \ 36925428Speter} 37025428Speter 37125428Speter#define IFM_SUBTYPE_ETHERNET_OPTION_DESCRIPTIONS { \ 37225428Speter { 0, NULL }, \ 37325428Speter} 37425428Speter 37525428Speter#define IFM_SUBTYPE_TOKENRING_DESCRIPTIONS { \ 37625428Speter { IFM_TOK_STP4, "DB9/4Mbit" }, \ 37725428Speter { IFM_TOK_STP16, "DB9/16Mbit" }, \ 37825428Speter { IFM_TOK_UTP4, "UTP/4Mbit" }, \ 37925428Speter { IFM_TOK_UTP16, "UTP/16Mbit" }, \ 38044165Sjulian { IFM_TOK_STP100, "STP/100Mbit" }, \ 38144165Sjulian { IFM_TOK_UTP100, "UTP/100Mbit" }, \ 38225428Speter { 0, NULL }, \ 38325428Speter} 38425428Speter 38525428Speter#define IFM_SUBTYPE_TOKENRING_ALIASES { \ 38625428Speter { IFM_TOK_STP4, "4STP" }, \ 38725428Speter { IFM_TOK_STP16, "16STP" }, \ 38825428Speter { IFM_TOK_UTP4, "4UTP" }, \ 38925428Speter { IFM_TOK_UTP16, "16UTP" }, \ 39044165Sjulian { IFM_TOK_STP100, "100STP" }, \ 39144165Sjulian { IFM_TOK_UTP100, "100UTP" }, \ 39225428Speter { 0, NULL }, \ 39325428Speter} 39425428Speter 39525428Speter#define IFM_SUBTYPE_TOKENRING_OPTION_DESCRIPTIONS { \ 39625428Speter { IFM_TOK_ETR, "EarlyTokenRelease" }, \ 39725428Speter { IFM_TOK_SRCRT, "SourceRouting" }, \ 39825428Speter { IFM_TOK_ALLR, "AllRoutes" }, \ 39944165Sjulian { IFM_TOK_DTR, "Dedicated" }, \ 40044165Sjulian { IFM_TOK_CLASSIC,"Classic" }, \ 40144165Sjulian { IFM_TOK_AUTO, " " }, \ 40225428Speter { 0, NULL }, \ 40325428Speter} 40425428Speter 40525428Speter#define IFM_SUBTYPE_FDDI_DESCRIPTIONS { \ 40625428Speter { IFM_FDDI_SMF, "Single-mode" }, \ 40725428Speter { IFM_FDDI_MMF, "Multi-mode" }, \ 40825428Speter { IFM_FDDI_UTP, "UTP" }, \ 40925428Speter { 0, NULL }, \ 41025428Speter} 41125428Speter 41225428Speter#define IFM_SUBTYPE_FDDI_ALIASES { \ 41325428Speter { IFM_FDDI_SMF, "SMF" }, \ 41425428Speter { IFM_FDDI_MMF, "MMF" }, \ 41525428Speter { IFM_FDDI_UTP, "CDDI" }, \ 41625428Speter { 0, NULL }, \ 41725428Speter} 41825428Speter 41925428Speter#define IFM_SUBTYPE_FDDI_OPTION_DESCRIPTIONS { \ 42025428Speter { IFM_FDDI_DA, "Dual-attach" }, \ 42125428Speter { 0, NULL }, \ 42225428Speter} 42325428Speter 42477217Sphk#define IFM_SUBTYPE_IEEE80211_DESCRIPTIONS { \ 42577217Sphk { IFM_IEEE80211_FH1, "FH/1Mbps" }, \ 42677217Sphk { IFM_IEEE80211_FH2, "FH/2Mbps" }, \ 42777217Sphk { IFM_IEEE80211_DS1, "DS/1Mbps" }, \ 42877217Sphk { IFM_IEEE80211_DS2, "DS/2Mbps" }, \ 42977217Sphk { IFM_IEEE80211_DS5, "DS/5.5Mbps" }, \ 43077217Sphk { IFM_IEEE80211_DS11, "DS/11Mbps" }, \ 43177217Sphk { IFM_IEEE80211_DS22, "DS/22Mbps" }, \ 432114163Ssam { IFM_IEEE80211_OFDM6, "OFDM/6Mbps" }, \ 433114163Ssam { IFM_IEEE80211_OFDM9, "OFDM/9Mbps" }, \ 434114163Ssam { IFM_IEEE80211_OFDM12, "OFDM/12Mbps" }, \ 435114163Ssam { IFM_IEEE80211_OFDM18, "OFDM/18Mbps" }, \ 436114163Ssam { IFM_IEEE80211_OFDM24, "OFDM/24Mbps" }, \ 437114163Ssam { IFM_IEEE80211_OFDM36, "OFDM/36Mbps" }, \ 438114163Ssam { IFM_IEEE80211_OFDM48, "OFDM/48Mbps" }, \ 439114163Ssam { IFM_IEEE80211_OFDM54, "OFDM/54Mbps" }, \ 440114163Ssam { IFM_IEEE80211_OFDM72, "OFDM/72Mbps" }, \ 441128195Sfjoe { IFM_IEEE80211_DS354k, "DS/354Kbps" }, \ 442128195Sfjoe { IFM_IEEE80211_DS512k, "DS/512Kbps" }, \ 443165569Ssam { IFM_IEEE80211_OFDM3, "OFDM/3Mbps" }, \ 444165569Ssam { IFM_IEEE80211_OFDM4, "OFDM/4.5Mbps" }, \ 445165569Ssam { IFM_IEEE80211_OFDM27, "OFDM/27Mbps" }, \ 44677217Sphk { 0, NULL }, \ 44777217Sphk} 44877217Sphk 44977217Sphk#define IFM_SUBTYPE_IEEE80211_ALIASES { \ 45077217Sphk { IFM_IEEE80211_FH1, "FH1" }, \ 45177217Sphk { IFM_IEEE80211_FH2, "FH2" }, \ 45277217Sphk { IFM_IEEE80211_FH1, "FrequencyHopping/1Mbps" }, \ 45377217Sphk { IFM_IEEE80211_FH2, "FrequencyHopping/2Mbps" }, \ 45477217Sphk { IFM_IEEE80211_DS1, "DS1" }, \ 45577217Sphk { IFM_IEEE80211_DS2, "DS2" }, \ 45677217Sphk { IFM_IEEE80211_DS5, "DS5.5" }, \ 45777217Sphk { IFM_IEEE80211_DS11, "DS11" }, \ 45877217Sphk { IFM_IEEE80211_DS22, "DS22" }, \ 45977217Sphk { IFM_IEEE80211_DS1, "DirectSequence/1Mbps" }, \ 46077217Sphk { IFM_IEEE80211_DS2, "DirectSequence/2Mbps" }, \ 46177217Sphk { IFM_IEEE80211_DS5, "DirectSequence/5.5Mbps" }, \ 46277217Sphk { IFM_IEEE80211_DS11, "DirectSequence/11Mbps" }, \ 46377217Sphk { IFM_IEEE80211_DS22, "DirectSequence/22Mbps" }, \ 464114163Ssam { IFM_IEEE80211_OFDM6, "OFDM6" }, \ 465114163Ssam { IFM_IEEE80211_OFDM9, "OFDM9" }, \ 466114163Ssam { IFM_IEEE80211_OFDM12, "OFDM12" }, \ 467114163Ssam { IFM_IEEE80211_OFDM18, "OFDM18" }, \ 468114163Ssam { IFM_IEEE80211_OFDM24, "OFDM24" }, \ 469114163Ssam { IFM_IEEE80211_OFDM36, "OFDM36" }, \ 470114163Ssam { IFM_IEEE80211_OFDM48, "OFDM48" }, \ 471114163Ssam { IFM_IEEE80211_OFDM54, "OFDM54" }, \ 472114163Ssam { IFM_IEEE80211_OFDM72, "OFDM72" }, \ 473114163Ssam { IFM_IEEE80211_DS1, "CCK1" }, \ 474114163Ssam { IFM_IEEE80211_DS2, "CCK2" }, \ 475114163Ssam { IFM_IEEE80211_DS5, "CCK5.5" }, \ 476114163Ssam { IFM_IEEE80211_DS11, "CCK11" }, \ 477128195Sfjoe { IFM_IEEE80211_DS354k, "DS354K" }, \ 478128195Sfjoe { IFM_IEEE80211_DS354k, "DirectSequence/354Kbps" }, \ 479128195Sfjoe { IFM_IEEE80211_DS512k, "DS512K" }, \ 480128195Sfjoe { IFM_IEEE80211_DS512k, "DirectSequence/512Kbps" }, \ 481165569Ssam { IFM_IEEE80211_OFDM3, "OFDM3" }, \ 482165569Ssam { IFM_IEEE80211_OFDM4, "OFDM4.5" }, \ 483165569Ssam { IFM_IEEE80211_OFDM27, "OFDM27" }, \ 48477217Sphk { 0, NULL }, \ 48577217Sphk} 48677217Sphk 48777217Sphk#define IFM_SUBTYPE_IEEE80211_OPTION_DESCRIPTIONS { \ 48877217Sphk { IFM_IEEE80211_ADHOC, "adhoc" }, \ 48994489Simp { IFM_IEEE80211_HOSTAP, "hostap" }, \ 49096174Simp { IFM_IEEE80211_IBSS, "ibss" }, \ 49196174Simp { IFM_IEEE80211_IBSSMASTER, "ibss-master" }, \ 492114163Ssam { IFM_IEEE80211_TURBO, "turbo" }, \ 493117817Ssam { IFM_IEEE80211_MONITOR, "monitor" }, \ 49477217Sphk { 0, NULL }, \ 49577217Sphk} 49677217Sphk 497114163Ssam#define IFM_SUBTYPE_IEEE80211_MODE_DESCRIPTIONS { \ 498116819Ssam { IFM_AUTO, "autoselect" }, \ 499114163Ssam { IFM_IEEE80211_11A, "11a" }, \ 500114163Ssam { IFM_IEEE80211_11B, "11b" }, \ 501114163Ssam { IFM_IEEE80211_11G, "11g" }, \ 502124543Sonoe { IFM_IEEE80211_FH, "fh" }, \ 503114163Ssam { 0, NULL }, \ 504114163Ssam} 505114163Ssam 506116819Ssam#define IFM_SUBTYPE_IEEE80211_MODE_ALIASES { \ 507116819Ssam { IFM_AUTO, "auto" }, \ 508116819Ssam { 0, NULL }, \ 509116819Ssam} 510116819Ssam 511114232Sharti# define IFM_SUBTYPE_ATM_DESCRIPTIONS { \ 512114232Sharti { IFM_ATM_UNKNOWN, "Unknown" }, \ 513114232Sharti { IFM_ATM_UTP_25, "UTP/25.6MBit" }, \ 514114232Sharti { IFM_ATM_TAXI_100, "Taxi/100MBit" }, \ 515114232Sharti { IFM_ATM_TAXI_140, "Taxi/140MBit" }, \ 516114232Sharti { IFM_ATM_MM_155, "Multi-mode/155MBit" }, \ 517114232Sharti { IFM_ATM_SM_155, "Single-mode/155MBit" }, \ 518114232Sharti { IFM_ATM_UTP_155, "UTP/155MBit" }, \ 519115690Sharti { IFM_ATM_MM_622, "Multi-mode/622MBit" }, \ 520114232Sharti { IFM_ATM_SM_622, "Single-mode/622MBit" }, \ 521125015Sharti { IFM_ATM_VIRTUAL, "Virtual" }, \ 522114232Sharti { 0, NULL }, \ 523114232Sharti} 524114232Sharti 525114232Sharti# define IFM_SUBTYPE_ATM_ALIASES { \ 526114232Sharti { IFM_ATM_UNKNOWN, "UNKNOWN" }, \ 527114232Sharti { IFM_ATM_UTP_25, "UTP-25" }, \ 528114232Sharti { IFM_ATM_TAXI_100, "TAXI-100" }, \ 529114232Sharti { IFM_ATM_TAXI_140, "TAXI-140" }, \ 530114232Sharti { IFM_ATM_MM_155, "MM-155" }, \ 531114232Sharti { IFM_ATM_SM_155, "SM-155" }, \ 532114232Sharti { IFM_ATM_UTP_155, "UTP-155" }, \ 533114232Sharti { IFM_ATM_MM_622, "MM-622" }, \ 534114232Sharti { IFM_ATM_SM_622, "SM-622" }, \ 535125015Sharti { IFM_ATM_VIRTUAL, "VIRTUAL" }, \ 536114232Sharti { 0, NULL }, \ 537114232Sharti} 538114232Sharti 539114232Sharti#define IFM_SUBTYPE_ATM_OPTION_DESCRIPTIONS { \ 540114232Sharti { IFM_ATM_SDH, "SDH" }, \ 541114232Sharti { IFM_ATM_NOSCRAMB, "Noscramb" }, \ 542114232Sharti { IFM_ATM_UNASSIGNED, "Unassigned" }, \ 543114232Sharti { 0, NULL }, \ 544114232Sharti} 545114232Sharti 546114232Sharti 54725428Speter#define IFM_SUBTYPE_SHARED_DESCRIPTIONS { \ 54825428Speter { IFM_AUTO, "autoselect" }, \ 54925428Speter { IFM_MANUAL, "manual" }, \ 55025428Speter { IFM_NONE, "none" }, \ 55125428Speter { 0, NULL }, \ 55225428Speter} 55325428Speter 55425428Speter#define IFM_SUBTYPE_SHARED_ALIASES { \ 55525428Speter { IFM_AUTO, "auto" }, \ 55625428Speter { 0, NULL }, \ 55725428Speter} 55825428Speter 55925428Speter#define IFM_SHARED_OPTION_DESCRIPTIONS { \ 56025428Speter { IFM_FDX, "full-duplex" }, \ 56125428Speter { IFM_HDX, "half-duplex" }, \ 56225428Speter { IFM_FLAG0, "flag0" }, \ 56325428Speter { IFM_FLAG1, "flag1" }, \ 56425428Speter { IFM_FLAG2, "flag2" }, \ 56525428Speter { IFM_LOOP, "hw-loopback" }, \ 56625428Speter { 0, NULL }, \ 56725428Speter} 56825428Speter 569155669Sglebius/* 570155669Sglebius * Baudrate descriptions for the various media types. 571155669Sglebius */ 572155669Sglebiusstruct ifmedia_baudrate { 573155669Sglebius int ifmb_word; /* media word */ 574155669Sglebius uint64_t ifmb_baudrate; /* corresponding baudrate */ 575155669Sglebius}; 576155669Sglebius 577155669Sglebius#define IFM_BAUDRATE_DESCRIPTIONS { \ 578155669Sglebius { IFM_ETHER | IFM_10_T, IF_Mbps(10) }, \ 579155669Sglebius { IFM_ETHER | IFM_10_2, IF_Mbps(10) }, \ 580155669Sglebius { IFM_ETHER | IFM_10_5, IF_Mbps(10) }, \ 581155669Sglebius { IFM_ETHER | IFM_100_TX, IF_Mbps(100) }, \ 582155669Sglebius { IFM_ETHER | IFM_100_FX, IF_Mbps(100) }, \ 583155669Sglebius { IFM_ETHER | IFM_100_T4, IF_Mbps(100) }, \ 584155669Sglebius { IFM_ETHER | IFM_100_VG, IF_Mbps(100) }, \ 585155669Sglebius { IFM_ETHER | IFM_100_T2, IF_Mbps(100) }, \ 586155669Sglebius { IFM_ETHER | IFM_1000_SX, IF_Mbps(1000) }, \ 587155669Sglebius { IFM_ETHER | IFM_10_STP, IF_Mbps(10) }, \ 588155669Sglebius { IFM_ETHER | IFM_10_FL, IF_Mbps(10) }, \ 589155669Sglebius { IFM_ETHER | IFM_1000_LX, IF_Mbps(1000) }, \ 590155669Sglebius { IFM_ETHER | IFM_1000_CX, IF_Mbps(1000) }, \ 591155669Sglebius { IFM_ETHER | IFM_1000_T, IF_Mbps(1000) }, \ 592155669Sglebius { IFM_ETHER | IFM_HPNA_1, IF_Mbps(1) }, \ 593155669Sglebius { IFM_ETHER | IFM_10G_LR, IF_Gbps(10ULL) }, \ 594159162Sglebius { IFM_ETHER | IFM_10G_SR, IF_Gbps(10ULL) }, \ 595159162Sglebius { IFM_ETHER | IFM_10G_CX4, IF_Gbps(10ULL) }, \ 596155669Sglebius \ 597155669Sglebius { IFM_TOKEN | IFM_TOK_STP4, IF_Mbps(4) }, \ 598155669Sglebius { IFM_TOKEN | IFM_TOK_STP16, IF_Mbps(16) }, \ 599155669Sglebius { IFM_TOKEN | IFM_TOK_UTP4, IF_Mbps(4) }, \ 600155669Sglebius { IFM_TOKEN | IFM_TOK_UTP16, IF_Mbps(16) }, \ 601155669Sglebius \ 602155669Sglebius { IFM_FDDI | IFM_FDDI_SMF, IF_Mbps(100) }, \ 603155669Sglebius { IFM_FDDI | IFM_FDDI_MMF, IF_Mbps(100) }, \ 604155669Sglebius { IFM_FDDI | IFM_FDDI_UTP, IF_Mbps(100) }, \ 605155669Sglebius \ 606155669Sglebius { IFM_IEEE80211 | IFM_IEEE80211_FH1, IF_Mbps(1) }, \ 607155669Sglebius { IFM_IEEE80211 | IFM_IEEE80211_FH2, IF_Mbps(2) }, \ 608155669Sglebius { IFM_IEEE80211 | IFM_IEEE80211_DS2, IF_Mbps(2) }, \ 609155669Sglebius { IFM_IEEE80211 | IFM_IEEE80211_DS5, IF_Kbps(5500) }, \ 610155669Sglebius { IFM_IEEE80211 | IFM_IEEE80211_DS11, IF_Mbps(11) }, \ 611155669Sglebius { IFM_IEEE80211 | IFM_IEEE80211_DS1, IF_Mbps(1) }, \ 612155669Sglebius { IFM_IEEE80211 | IFM_IEEE80211_DS22, IF_Mbps(22) }, \ 613155669Sglebius { IFM_IEEE80211 | IFM_IEEE80211_OFDM6, IF_Mbps(6) }, \ 614155669Sglebius { IFM_IEEE80211 | IFM_IEEE80211_OFDM9, IF_Mbps(9) }, \ 615155669Sglebius { IFM_IEEE80211 | IFM_IEEE80211_OFDM12, IF_Mbps(12) }, \ 616155669Sglebius { IFM_IEEE80211 | IFM_IEEE80211_OFDM18, IF_Mbps(18) }, \ 617155669Sglebius { IFM_IEEE80211 | IFM_IEEE80211_OFDM24, IF_Mbps(24) }, \ 618155669Sglebius { IFM_IEEE80211 | IFM_IEEE80211_OFDM36, IF_Mbps(36) }, \ 619155669Sglebius { IFM_IEEE80211 | IFM_IEEE80211_OFDM48, IF_Mbps(48) }, \ 620155669Sglebius { IFM_IEEE80211 | IFM_IEEE80211_OFDM54, IF_Mbps(54) }, \ 621155669Sglebius { IFM_IEEE80211 | IFM_IEEE80211_OFDM72, IF_Mbps(72) }, \ 622155669Sglebius \ 623155669Sglebius { 0, 0 }, \ 624155669Sglebius} 625155669Sglebius 626156751Sandre/* 627156751Sandre * Status descriptions for the various media types. 628156751Sandre */ 629156751Sandrestruct ifmedia_status_description { 630156751Sandre int ifms_type; 631156751Sandre int ifms_valid; 632156751Sandre int ifms_bit; 633156751Sandre const char *ifms_string[2]; 634156751Sandre}; 635156751Sandre 636156751Sandre#define IFM_STATUS_DESC(ifms, bit) \ 637156751Sandre (ifms)->ifms_string[((ifms)->ifms_bit & (bit)) ? 1 : 0] 638156751Sandre 639156751Sandre#define IFM_STATUS_DESCRIPTIONS { \ 640156751Sandre { IFM_ETHER, IFM_AVALID, IFM_ACTIVE, \ 641156751Sandre { "no carrier", "active" } }, \ 642156751Sandre { IFM_FDDI, IFM_AVALID, IFM_ACTIVE, \ 643156751Sandre { "no ring", "inserted" } }, \ 644156751Sandre { IFM_TOKEN, IFM_AVALID, IFM_ACTIVE, \ 645156751Sandre { "no ring", "inserted" } }, \ 646156751Sandre { IFM_IEEE80211, IFM_AVALID, IFM_ACTIVE, \ 647156751Sandre { "no network", "active" } }, \ 648156751Sandre { IFM_ATM, IFM_AVALID, IFM_ACTIVE, \ 649156751Sandre { "no network", "active" } }, \ 650156751Sandre { IFM_CARP, IFM_AVALID, IFM_ACTIVE, \ 651156751Sandre { "backup", "master" } }, \ 652156751Sandre { 0, 0, 0, \ 653156751Sandre { NULL, NULL } } \ 654156751Sandre} 65525428Speter#endif /* _NET_IF_MEDIA_H_ */ 656