38 #ifndef _NET_IF_MEDIA_H_ 39 #define _NET_IF_MEDIA_H_ 55 #include <sys/queue.h> 60 typedef int (*ifm_change_cb_t)(
struct ifnet *ifp);
61 typedef void (*ifm_stat_cb_t)(
struct ifnet *ifp,
struct ifmediareq *req);
66 struct ifmedia_entry {
67 LIST_ENTRY(ifmedia_entry) ifm_list;
80 struct ifmedia_entry *ifm_cur;
81 LIST_HEAD(, ifmedia_entry) ifm_list;
82 ifm_change_cb_t ifm_change;
83 ifm_stat_cb_t ifm_status;
87 void ifmedia_init(
struct ifmedia *ifm,
int dontcare_mask,
88 ifm_change_cb_t change_callback, ifm_stat_cb_t status_callback);
91 void ifmedia_removeall(
struct ifmedia *ifm);
94 void ifmedia_add(
struct ifmedia *ifm,
int mword,
int data,
void *aux);
97 void ifmedia_list_add(
struct ifmedia *mp,
struct ifmedia_entry *lp,
101 void ifmedia_set(
struct ifmedia *ifm,
int mword);
104 int ifmedia_ioctl(
struct ifnet *ifp,
struct ifreq *ifr,
105 struct ifmedia *ifm, u_long cmd);
125 #define IFM_ETHER 0x00000020 133 #define IFM_100_T2 10 134 #define IFM_1000_SX 11 135 #define IFM_10_STP 12 137 #define IFM_1000_LX 14 138 #define IFM_1000_CX 15 139 #define IFM_1000_T 16 140 #define IFM_HPNA_1 17 143 #define IFM_ETH_MASTER 0x00000100 148 #define IFM_TOKEN 0x00000040 149 #define IFM_TOK_STP4 3 150 #define IFM_TOK_STP16 4 151 #define IFM_TOK_UTP4 5 152 #define IFM_TOK_UTP16 6 153 #define IFM_TOK_STP100 7 154 #define IFM_TOK_UTP100 8 155 #define IFM_TOK_ETR 0x00000200 156 #define IFM_TOK_SRCRT 0x00000400 157 #define IFM_TOK_ALLR 0x00000800 158 #define IFM_TOK_DTR 0x00002000 159 #define IFM_TOK_CLASSIC 0x00004000 160 #define IFM_TOK_AUTO 0x00008000 165 #define IFM_FDDI 0x00000060 166 #define IFM_FDDI_SMF 3 167 #define IFM_FDDI_MMF 4 168 #define IFM_FDDI_UTP 5 169 #define IFM_FDDI_DA 0x00000100 174 #define IFM_IEEE80211 0x00000080 176 #define IFM_IEEE80211_FH1 3 177 #define IFM_IEEE80211_FH2 4 178 #define IFM_IEEE80211_DS1 5 179 #define IFM_IEEE80211_DS2 6 180 #define IFM_IEEE80211_DS5 7 181 #define IFM_IEEE80211_DS11 8 182 #define IFM_IEEE80211_DS22 9 183 #define IFM_IEEE80211_OFDM6 10 184 #define IFM_IEEE80211_OFDM9 11 185 #define IFM_IEEE80211_OFDM12 12 186 #define IFM_IEEE80211_OFDM18 13 187 #define IFM_IEEE80211_OFDM24 14 188 #define IFM_IEEE80211_OFDM36 15 189 #define IFM_IEEE80211_OFDM48 16 190 #define IFM_IEEE80211_OFDM54 17 191 #define IFM_IEEE80211_OFDM72 18 193 #define IFM_IEEE80211_ADHOC 0x00000100 194 #define IFM_IEEE80211_HOSTAP 0x00000200 195 #define IFM_IEEE80211_IBSS 0x00000400 196 #define IFM_IEEE80211_IBSSMASTER 0x00000800 197 #define IFM_IEEE80211_TURBO 0x00001000 198 #define IFM_IEEE80211_MONITOR 0x00002000 201 #define IFM_IEEE80211_11A 0x00010000 202 #define IFM_IEEE80211_11B 0x00020000 203 #define IFM_IEEE80211_11G 0x00030000 204 #define IFM_IEEE80211_FH 0x00040000 209 #define IFM_ATM 0x000000a0 210 #define IFM_ATM_UNKNOWN 3 211 #define IFM_ATM_UTP_25 4 212 #define IFM_ATM_TAXI_100 5 213 #define IFM_ATM_TAXI_140 6 214 #define IFM_ATM_MM_155 7 215 #define IFM_ATM_SM_155 8 216 #define IFM_ATM_UTP_155 9 217 #define IFM_ATM_MM_622 10 218 #define IFM_ATM_SM_622 11 219 #define IFM_ATM_VIRTUAL 12 220 #define IFM_ATM_SDH 0x00000100 221 #define IFM_ATM_NOSCRAMB 0x00000200 222 #define IFM_ATM_UNASSIGNED 0x00000400 234 #define IFM_FDX 0x00100000 235 #define IFM_HDX 0x00200000 236 #define IFM_FLAG0 0x01000000 237 #define IFM_FLAG1 0x02000000 238 #define IFM_FLAG2 0x04000000 239 #define IFM_LOOP 0x08000000 244 #define IFM_NMASK 0x000000e0 245 #define IFM_TMASK 0x0000001f 246 #define IFM_IMASK 0xf0000000 247 #define IFM_ISHIFT 28 248 #define IFM_OMASK 0x0000ff00 249 #define IFM_MMASK 0x00070000 250 #define IFM_MSHIFT 16 251 #define IFM_GMASK 0x0ff00000 260 #define IFM_AVALID IFM_FLAG0 261 #define IFM_ACTIVE IFM_FLAG0 266 #define IFM_TYPE(x) ((x) & IFM_NMASK) 267 #define IFM_SUBTYPE(x) ((x) & IFM_TMASK) 268 #define IFM_TYPE_OPTIONS(x) ((x) & IFM_OMASK) 269 #define IFM_INST(x) (((x) & IFM_IMASK) >> IFM_ISHIFT) 270 #define IFM_OPTIONS(x) ((x) & (IFM_OMASK|IFM_GMASK)) 271 #define IFM_MODE(x) ((x) & IFM_MMASK) 273 #define IFM_INST_MAX IFM_INST(IFM_IMASK) 278 #define IFM_MAKEWORD(type, subtype, options, instance) \ 279 ((type) | (subtype) | (options) | ((uint32_t)(instance) << IFM_ISHIFT)) 280 #define IFM_MAKEMODE(mode) \ 281 (((mode) << IFM_MSHIFT) & IFM_MMASK) 292 const char *ifmt_string;
295 #define IFM_TYPE_DESCRIPTIONS { \ 296 { IFM_ETHER, "Ethernet" }, \ 297 { IFM_TOKEN, "Token ring" }, \ 298 { IFM_FDDI, "FDDI" }, \ 299 { IFM_IEEE80211, "IEEE 802.11 Wireless Ethernet" }, \ 300 { IFM_ATM, "ATM" }, \ 304 #define IFM_SUBTYPE_ETHERNET_DESCRIPTIONS { \ 305 { IFM_10_T, "10baseT/UTP" }, \ 306 { IFM_10_2, "10base2/BNC" }, \ 307 { IFM_10_5, "10base5/AUI" }, \ 308 { IFM_100_TX, "100baseTX" }, \ 309 { IFM_100_FX, "100baseFX" }, \ 310 { IFM_100_T4, "100baseT4" }, \ 311 { IFM_100_VG, "100baseVG" }, \ 312 { IFM_100_T2, "100baseT2" }, \ 313 { IFM_10_STP, "10baseSTP" }, \ 314 { IFM_10_FL, "10baseFL" }, \ 315 { IFM_1000_SX, "1000baseSX" }, \ 316 { IFM_1000_LX, "1000baseLX" }, \ 317 { IFM_1000_CX, "1000baseCX" }, \ 318 { IFM_1000_T, "1000baseTX" }, \ 319 { IFM_1000_T, "1000baseT" }, \ 320 { IFM_HPNA_1, "homePNA" }, \ 324 #define IFM_SUBTYPE_ETHERNET_ALIASES { \ 325 { IFM_10_T, "UTP" }, \ 326 { IFM_10_T, "10UTP" }, \ 327 { IFM_10_2, "BNC" }, \ 328 { IFM_10_2, "10BNC" }, \ 329 { IFM_10_5, "AUI" }, \ 330 { IFM_10_5, "10AUI" }, \ 331 { IFM_100_TX, "100TX" }, \ 332 { IFM_100_T4, "100T4" }, \ 333 { IFM_100_VG, "100VG" }, \ 334 { IFM_100_T2, "100T2" }, \ 335 { IFM_10_STP, "10STP" }, \ 336 { IFM_10_FL, "10FL" }, \ 337 { IFM_1000_SX, "1000SX" }, \ 338 { IFM_1000_LX, "1000LX" }, \ 339 { IFM_1000_CX, "1000CX" }, \ 340 { IFM_1000_T, "1000TX" }, \ 341 { IFM_1000_T, "1000T" }, \ 345 #define IFM_SUBTYPE_ETHERNET_OPTION_DESCRIPTIONS { \ 349 #define IFM_SUBTYPE_TOKENRING_DESCRIPTIONS { \ 350 { IFM_TOK_STP4, "DB9/4Mbit" }, \ 351 { IFM_TOK_STP16, "DB9/16Mbit" }, \ 352 { IFM_TOK_UTP4, "UTP/4Mbit" }, \ 353 { IFM_TOK_UTP16, "UTP/16Mbit" }, \ 354 { IFM_TOK_STP100, "STP/100Mbit" }, \ 355 { IFM_TOK_UTP100, "UTP/100Mbit" }, \ 359 #define IFM_SUBTYPE_TOKENRING_ALIASES { \ 360 { IFM_TOK_STP4, "4STP" }, \ 361 { IFM_TOK_STP16, "16STP" }, \ 362 { IFM_TOK_UTP4, "4UTP" }, \ 363 { IFM_TOK_UTP16, "16UTP" }, \ 364 { IFM_TOK_STP100, "100STP" }, \ 365 { IFM_TOK_UTP100, "100UTP" }, \ 369 #define IFM_SUBTYPE_TOKENRING_OPTION_DESCRIPTIONS { \ 370 { IFM_TOK_ETR, "EarlyTokenRelease" }, \ 371 { IFM_TOK_SRCRT, "SourceRouting" }, \ 372 { IFM_TOK_ALLR, "AllRoutes" }, \ 373 { IFM_TOK_DTR, "Dedicated" }, \ 374 { IFM_TOK_CLASSIC,"Classic" }, \ 375 { IFM_TOK_AUTO, " " }, \ 379 #define IFM_SUBTYPE_FDDI_DESCRIPTIONS { \ 380 { IFM_FDDI_SMF, "Single-mode" }, \ 381 { IFM_FDDI_MMF, "Multi-mode" }, \ 382 { IFM_FDDI_UTP, "UTP" }, \ 386 #define IFM_SUBTYPE_FDDI_ALIASES { \ 387 { IFM_FDDI_SMF, "SMF" }, \ 388 { IFM_FDDI_MMF, "MMF" }, \ 389 { IFM_FDDI_UTP, "CDDI" }, \ 393 #define IFM_SUBTYPE_FDDI_OPTION_DESCRIPTIONS { \ 394 { IFM_FDDI_DA, "Dual-attach" }, \ 398 #define IFM_SUBTYPE_IEEE80211_DESCRIPTIONS { \ 399 { IFM_IEEE80211_FH1, "FH/1Mbps" }, \ 400 { IFM_IEEE80211_FH2, "FH/2Mbps" }, \ 401 { IFM_IEEE80211_DS1, "DS/1Mbps" }, \ 402 { IFM_IEEE80211_DS2, "DS/2Mbps" }, \ 403 { IFM_IEEE80211_DS5, "DS/5.5Mbps" }, \ 404 { IFM_IEEE80211_DS11, "DS/11Mbps" }, \ 405 { IFM_IEEE80211_DS22, "DS/22Mbps" }, \ 406 { IFM_IEEE80211_OFDM6, "OFDM/6Mbps" }, \ 407 { IFM_IEEE80211_OFDM9, "OFDM/9Mbps" }, \ 408 { IFM_IEEE80211_OFDM12, "OFDM/12Mbps" }, \ 409 { IFM_IEEE80211_OFDM18, "OFDM/18Mbps" }, \ 410 { IFM_IEEE80211_OFDM24, "OFDM/24Mbps" }, \ 411 { IFM_IEEE80211_OFDM36, "OFDM/36Mbps" }, \ 412 { IFM_IEEE80211_OFDM48, "OFDM/48Mbps" }, \ 413 { IFM_IEEE80211_OFDM54, "OFDM/54Mbps" }, \ 414 { IFM_IEEE80211_OFDM72, "OFDM/72Mbps" }, \ 418 #define IFM_SUBTYPE_IEEE80211_ALIASES { \ 419 { IFM_IEEE80211_FH1, "FH1" }, \ 420 { IFM_IEEE80211_FH2, "FH2" }, \ 421 { IFM_IEEE80211_FH1, "FrequencyHopping/1Mbps" }, \ 422 { IFM_IEEE80211_FH2, "FrequencyHopping/2Mbps" }, \ 423 { IFM_IEEE80211_DS1, "DS1" }, \ 424 { IFM_IEEE80211_DS2, "DS2" }, \ 425 { IFM_IEEE80211_DS5, "DS5.5" }, \ 426 { IFM_IEEE80211_DS11, "DS11" }, \ 427 { IFM_IEEE80211_DS22, "DS22" }, \ 428 { IFM_IEEE80211_DS1, "DirectSequence/1Mbps" }, \ 429 { IFM_IEEE80211_DS2, "DirectSequence/2Mbps" }, \ 430 { IFM_IEEE80211_DS5, "DirectSequence/5.5Mbps" }, \ 431 { IFM_IEEE80211_DS11, "DirectSequence/11Mbps" }, \ 432 { IFM_IEEE80211_DS22, "DirectSequence/22Mbps" }, \ 433 { IFM_IEEE80211_OFDM6, "OFDM6" }, \ 434 { IFM_IEEE80211_OFDM9, "OFDM9" }, \ 435 { IFM_IEEE80211_OFDM12, "OFDM12" }, \ 436 { IFM_IEEE80211_OFDM18, "OFDM18" }, \ 437 { IFM_IEEE80211_OFDM24, "OFDM24" }, \ 438 { IFM_IEEE80211_OFDM36, "OFDM36" }, \ 439 { IFM_IEEE80211_OFDM48, "OFDM48" }, \ 440 { IFM_IEEE80211_OFDM54, "OFDM54" }, \ 441 { IFM_IEEE80211_OFDM72, "OFDM72" }, \ 442 { IFM_IEEE80211_DS1, "CCK1" }, \ 443 { IFM_IEEE80211_DS2, "CCK2" }, \ 444 { IFM_IEEE80211_DS5, "CCK5.5" }, \ 445 { IFM_IEEE80211_DS11, "CCK11" }, \ 449 #define IFM_SUBTYPE_IEEE80211_OPTION_DESCRIPTIONS { \ 450 { IFM_IEEE80211_ADHOC, "adhoc" }, \ 451 { IFM_IEEE80211_HOSTAP, "hostap" }, \ 452 { IFM_IEEE80211_IBSS, "ibss" }, \ 453 { IFM_IEEE80211_IBSSMASTER, "ibss-master" }, \ 454 { IFM_IEEE80211_TURBO, "turbo" }, \ 455 { IFM_IEEE80211_MONITOR, "monitor" }, \ 459 #define IFM_SUBTYPE_IEEE80211_MODE_DESCRIPTIONS { \ 460 { IFM_AUTO, "autoselect" }, \ 461 { IFM_IEEE80211_11A, "11a" }, \ 462 { IFM_IEEE80211_11B, "11b" }, \ 463 { IFM_IEEE80211_11G, "11g" }, \ 464 { IFM_IEEE80211_FH, "fh" }, \ 468 #define IFM_SUBTYPE_IEEE80211_MODE_ALIASES { \ 469 { IFM_AUTO, "auto" }, \ 473 # define IFM_SUBTYPE_ATM_DESCRIPTIONS { \ 474 { IFM_ATM_UNKNOWN, "Unknown" }, \ 475 { IFM_ATM_UTP_25, "UTP/25.6MBit" }, \ 476 { IFM_ATM_TAXI_100, "Taxi/100MBit" }, \ 477 { IFM_ATM_TAXI_140, "Taxi/140MBit" }, \ 478 { IFM_ATM_MM_155, "Multi-mode/155MBit" }, \ 479 { IFM_ATM_SM_155, "Single-mode/155MBit" }, \ 480 { IFM_ATM_UTP_155, "UTP/155MBit" }, \ 481 { IFM_ATM_MM_622, "Multi-mode/622MBit" }, \ 482 { IFM_ATM_SM_622, "Single-mode/622MBit" }, \ 483 { IFM_ATM_VIRTUAL, "Virtual" }, \ 487 # define IFM_SUBTYPE_ATM_ALIASES { \ 488 { IFM_ATM_UNKNOWN, "UNKNOWN" }, \ 489 { IFM_ATM_UTP_25, "UTP-25" }, \ 490 { IFM_ATM_TAXI_100, "TAXI-100" }, \ 491 { IFM_ATM_TAXI_140, "TAXI-140" }, \ 492 { IFM_ATM_MM_155, "MM-155" }, \ 493 { IFM_ATM_SM_155, "SM-155" }, \ 494 { IFM_ATM_UTP_155, "UTP-155" }, \ 495 { IFM_ATM_MM_622, "MM-622" }, \ 496 { IFM_ATM_SM_622, "SM-622" }, \ 497 { IFM_ATM_VIRTUAL, "VIRTUAL" }, \ 501 #define IFM_SUBTYPE_ATM_OPTION_DESCRIPTIONS { \ 502 { IFM_ATM_SDH, "SDH" }, \ 503 { IFM_ATM_NOSCRAMB, "Noscramb" }, \ 504 { IFM_ATM_UNASSIGNED, "Unassigned" }, \ 509 #define IFM_SUBTYPE_SHARED_DESCRIPTIONS { \ 510 { IFM_AUTO, "autoselect" }, \ 511 { IFM_MANUAL, "manual" }, \ 512 { IFM_NONE, "none" }, \ 516 #define IFM_SUBTYPE_SHARED_ALIASES { \ 517 { IFM_AUTO, "auto" }, \ 521 #define IFM_SHARED_OPTION_DESCRIPTIONS { \ 522 { IFM_FDX, "full-duplex" }, \ 523 { IFM_HDX, "half-duplex" }, \ 524 { IFM_FLAG0, "flag0" }, \ 525 { IFM_FLAG1, "flag1" }, \ 526 { IFM_FLAG2, "flag2" }, \ 527 { IFM_LOOP, "hw-loopback" }, \