Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F6846837
libifconfig_sfp_enums.c
freqlabs (Ryan Moeller)
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Authored By
freqlabs
Jul 1 2020, 12:21 PM
2020-07-01 12:21:12 (UTC+0)
Size
31 KB
Referenced Files
None
Subscribers
None
libifconfig_sfp_enums.c
View Options
/*-
* Copyright (c) 2020, Ryan Moeller <freqlabs@FreeBSD.org>
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* $FreeBSD$
*/
/*
* Autogenerated file, do not edit!
*
* See sfp.lua instead.
*/
#include
<libifconfig_sfp_enums.h>
#include
<libifconfig_sfp_enums_internal.h>
struct
sfp_enum_metadata
{
int
number
;
/* numeric discriminant value */
const
char
*
symbol
;
/* symbolic name */
const
char
*
display
;
/* display name */
const
char
*
description
;
/* detailed description */
};
const
struct
sfp_enum_metadata
*
find_metadata
(
const
struct
sfp_enum_metadata
*
table
,
int
number
)
{
while
(
table
->
number
!=
number
&&
table
->
symbol
!=
NULL
)
++
table
;
return
(
table
->
symbol
!=
NULL
?
table
:
NULL
);
}
/*
* SFF-8024 Rev. 4.6 Table 4-1: Indentifier Values
*/
static
const
struct
sfp_enum_metadata
sfp_id_table_
[]
=
{
{
.
number
=
SFP_ID_UNKNOWN
,
.
symbol
=
"SFP_ID_UNKNOWN"
,
.
display
=
"Unknown"
,
.
description
=
"Unknown or unspecified"
,
},
{
.
number
=
SFP_ID_GBIC
,
.
symbol
=
"SFP_ID_GBIC"
,
.
display
=
"GBIC"
,
.
description
=
"GBIC"
,
},
{
.
number
=
SFP_ID_SFF
,
.
symbol
=
"SFP_ID_SFF"
,
.
display
=
"SFF"
,
.
description
=
"Module soldered to motherboard (ex: SFF)"
,
},
{
.
number
=
SFP_ID_SFP
,
.
symbol
=
"SFP_ID_SFP"
,
.
display
=
"SFP/SFP+/SFP28"
,
.
description
=
"SFP or SFP+"
,
},
{
.
number
=
SFP_ID_XBI
,
.
symbol
=
"SFP_ID_XBI"
,
.
display
=
"XBI"
,
.
description
=
"300 pin XBI"
,
},
{
.
number
=
SFP_ID_XENPAK
,
.
symbol
=
"SFP_ID_XENPAK"
,
.
display
=
"Xenpak"
,
.
description
=
"Xenpak"
,
},
{
.
number
=
SFP_ID_XFP
,
.
symbol
=
"SFP_ID_XFP"
,
.
display
=
"XFP"
,
.
description
=
"XFP"
,
},
{
.
number
=
SFP_ID_XFF
,
.
symbol
=
"SFP_ID_XFF"
,
.
display
=
"XFF"
,
.
description
=
"XFF"
,
},
{
.
number
=
SFP_ID_XFPE
,
.
symbol
=
"SFP_ID_XFPE"
,
.
display
=
"XFP-E"
,
.
description
=
"XFP-E"
,
},
{
.
number
=
SFP_ID_XPAK
,
.
symbol
=
"SFP_ID_XPAK"
,
.
display
=
"XPAK"
,
.
description
=
"XPAK"
,
},
{
.
number
=
SFP_ID_X2
,
.
symbol
=
"SFP_ID_X2"
,
.
display
=
"X2"
,
.
description
=
"X2"
,
},
{
.
number
=
SFP_ID_DWDM_SFP
,
.
symbol
=
"SFP_ID_DWDM_SFP"
,
.
display
=
"DWDM-SFP/SFP+"
,
.
description
=
"DWDM-SFP/SFP+"
,
},
{
.
number
=
SFP_ID_QSFP
,
.
symbol
=
"SFP_ID_QSFP"
,
.
display
=
"QSFP"
,
.
description
=
"QSFP"
,
},
{
.
number
=
SFP_ID_QSFPPLUS
,
.
symbol
=
"SFP_ID_QSFPPLUS"
,
.
display
=
"QSFP+"
,
.
description
=
"QSFP+ or later"
,
},
{
.
number
=
SFP_ID_CXP
,
.
symbol
=
"SFP_ID_CXP"
,
.
display
=
"CXP"
,
.
description
=
"CXP"
,
},
{
.
number
=
SFP_ID_HD4X
,
.
symbol
=
"SFP_ID_HD4X"
,
.
display
=
"HD4X"
,
.
description
=
"Shielded Mini Multilane HD 4X"
,
},
{
.
number
=
SFP_ID_HD8X
,
.
symbol
=
"SFP_ID_HD8X"
,
.
display
=
"HD8X"
,
.
description
=
"Shielded Mini Multilane HD 8X"
,
},
{
.
number
=
SFP_ID_QSFP28
,
.
symbol
=
"SFP_ID_QSFP28"
,
.
display
=
"QSFP28"
,
.
description
=
"QSFP28 or later"
,
},
{
.
number
=
SFP_ID_CXP2
,
.
symbol
=
"SFP_ID_CXP2"
,
.
display
=
"CXP2"
,
.
description
=
"CXP2 (aka CXP28)"
,
},
{
.
number
=
SFP_ID_CDFP
,
.
symbol
=
"SFP_ID_CDFP"
,
.
display
=
"CDFP"
,
.
description
=
"CDFP (Style 1/Style 2)"
,
},
{
.
number
=
SFP_ID_SMM4
,
.
symbol
=
"SFP_ID_SMM4"
,
.
display
=
"SMM4"
,
.
description
=
"Shielded Mini Multilane HD 4X fanout"
,
},
{
.
number
=
SFP_ID_SMM8
,
.
symbol
=
"SFP_ID_SMM8"
,
.
display
=
"SMM8"
,
.
description
=
"Shielded Mini Multilane HD 8X fanout"
,
},
{
.
number
=
SFP_ID_CDFP3
,
.
symbol
=
"SFP_ID_CDFP3"
,
.
display
=
"CDFP3"
,
.
description
=
"CDFP (Style 3)"
,
},
{
.
number
=
SFP_ID_MICROQSFP
,
.
symbol
=
"SFP_ID_MICROQSFP"
,
.
display
=
"microQSFP"
,
.
description
=
"microQSFP"
,
},
{
.
number
=
SFP_ID_QSFP_DD
,
.
symbol
=
"SFP_ID_QSFP_DD"
,
.
display
=
"QSFP-DD"
,
.
description
=
"QSFP-DD 8X pluggable transceiver"
,
},
{
.
number
=
SFP_ID_QSFP8X
,
.
symbol
=
"SFP_ID_QSFP8X"
,
.
display
=
"QSFP8X"
,
.
description
=
"QSFP 8X pluggable transceiver"
,
},
{
.
number
=
SFP_ID_SFP_DD
,
.
symbol
=
"SFP_ID_SFP_DD"
,
.
display
=
"SFP-DD"
,
.
description
=
"SFP-DD 2X pluggable transceiver"
,
},
{
.
number
=
SFP_ID_DSFP
,
.
symbol
=
"SFP_ID_DSFP"
,
.
display
=
"DSFP"
,
.
description
=
"DSFP Dual SFP pluggable transceiver"
,
},
{
.
number
=
SFP_ID_X4ML
,
.
symbol
=
"SFP_ID_X4ML"
,
.
display
=
"x4MiniLink/OcuLink"
,
.
description
=
"x4 MiniLink/OcuLink"
,
},
{
.
number
=
SFP_ID_X8ML
,
.
symbol
=
"SFP_ID_X8ML"
,
.
display
=
"x8MiniLink"
,
.
description
=
"x8 MiniLink"
,
},
{
.
number
=
SFP_ID_QSFP_CMIS
,
.
symbol
=
"SFP_ID_QSFP_CMIS"
,
.
display
=
"QSFP+(CMIS)"
,
.
description
=
"QSFP+ or later w/Common Management Interface Specification"
,
},
{
0
}
};
const
struct
sfp_enum_metadata
*
sfp_id_table
=
sfp_id_table_
;
const
char
*
ifconfig_sfp_id_symbol
(
enum
sfp_id
v
)
{
const
struct
sfp_enum_metadata
*
metadata
;
if
((
metadata
=
find_metadata
(
sfp_id_table
,
v
))
==
NULL
)
return
(
NULL
);
return
(
metadata
->
symbol
);
}
const
char
*
ifconfig_sfp_id_display
(
enum
sfp_id
v
)
{
const
struct
sfp_enum_metadata
*
metadata
;
if
((
metadata
=
find_metadata
(
sfp_id_table
,
v
))
==
NULL
)
return
(
NULL
);
return
(
metadata
->
display
);
}
const
char
*
ifconfig_sfp_id_description
(
enum
sfp_id
v
)
{
const
struct
sfp_enum_metadata
*
metadata
;
if
((
metadata
=
find_metadata
(
sfp_id_table
,
v
))
==
NULL
)
return
(
NULL
);
return
(
metadata
->
description
);
}
/*
* SFF-8024 Rev. 4.6 Table 4-3: Connector Types
*/
static
const
struct
sfp_enum_metadata
sfp_conn_table_
[]
=
{
{
.
number
=
SFP_CONN_UNKNOWN
,
.
symbol
=
"SFP_CONN_UNKNOWN"
,
.
display
=
"Unknown"
,
},
{
.
number
=
SFP_CONN_SC
,
.
symbol
=
"SFP_CONN_SC"
,
.
display
=
"SC"
,
},
{
.
number
=
SFP_CONN_FC_1_COPPER
,
.
symbol
=
"SFP_CONN_FC_1_COPPER"
,
.
display
=
"Fibre Channel Style 1 copper"
,
},
{
.
number
=
SFP_CONN_FC_2_COPPER
,
.
symbol
=
"SFP_CONN_FC_2_COPPER"
,
.
display
=
"Fibre Channel Style 2 copper"
,
},
{
.
number
=
SFP_CONN_BNC_TNC
,
.
symbol
=
"SFP_CONN_BNC_TNC"
,
.
display
=
"BNC/TNC"
,
},
{
.
number
=
SFP_CONN_FC_COAX
,
.
symbol
=
"SFP_CONN_FC_COAX"
,
.
display
=
"Fibre Channel coaxial"
,
},
{
.
number
=
SFP_CONN_FIBER_JACK
,
.
symbol
=
"SFP_CONN_FIBER_JACK"
,
.
display
=
"Fiber Jack"
,
},
{
.
number
=
SFP_CONN_LC
,
.
symbol
=
"SFP_CONN_LC"
,
.
display
=
"LC"
,
},
{
.
number
=
SFP_CONN_MT_RJ
,
.
symbol
=
"SFP_CONN_MT_RJ"
,
.
display
=
"MT-RJ"
,
},
{
.
number
=
SFP_CONN_MU
,
.
symbol
=
"SFP_CONN_MU"
,
.
display
=
"MU"
,
},
{
.
number
=
SFP_CONN_SG
,
.
symbol
=
"SFP_CONN_SG"
,
.
display
=
"SG"
,
},
{
.
number
=
SFP_CONN_OPTICAL_PIGTAIL
,
.
symbol
=
"SFP_CONN_OPTICAL_PIGTAIL"
,
.
display
=
"Optical pigtail"
,
},
{
.
number
=
SFP_CONN_MPO_1X12_POPTIC
,
.
symbol
=
"SFP_CONN_MPO_1X12_POPTIC"
,
.
display
=
"MPO 1x12 Parallel Optic"
,
},
{
.
number
=
SFP_CONN_MPO_2X16_POPTIC
,
.
symbol
=
"SFP_CONN_MPO_2X16_POPTIC"
,
.
display
=
"MPO 2x16 Parallel Optic"
,
},
{
.
number
=
SFP_CONN_HSSDC_II
,
.
symbol
=
"SFP_CONN_HSSDC_II"
,
.
display
=
"HSSDC II"
,
},
{
.
number
=
SFP_CONN_COPPER_PIGTAIL
,
.
symbol
=
"SFP_CONN_COPPER_PIGTAIL"
,
.
display
=
"Copper pigtail"
,
},
{
.
number
=
SFP_CONN_RJ45
,
.
symbol
=
"SFP_CONN_RJ45"
,
.
display
=
"RJ45"
,
},
{
.
number
=
SFP_CONN_NONE
,
.
symbol
=
"SFP_CONN_NONE"
,
.
display
=
"No separable connector"
,
},
{
.
number
=
SFP_CONN_MXC_2X16
,
.
symbol
=
"SFP_CONN_MXC_2X16"
,
.
display
=
"MXC 2x16"
,
},
{
.
number
=
SFP_CONN_CS_OPTICAL
,
.
symbol
=
"SFP_CONN_CS_OPTICAL"
,
.
display
=
"CS optical connector"
,
},
{
.
number
=
SFP_CONN_MINI_CS_OPTICAL
,
.
symbol
=
"SFP_CONN_MINI_CS_OPTICAL"
,
.
display
=
"Mini CS optical connector"
,
},
{
.
number
=
SFP_CONN_MPO_2X12_POPTIC
,
.
symbol
=
"SFP_CONN_MPO_2X12_POPTIC"
,
.
display
=
"MPO 2x12 Parallel Optic"
,
},
{
.
number
=
SFP_CONN_MPO_1X16_POPTIC
,
.
symbol
=
"SFP_CONN_MPO_1X16_POPTIC"
,
.
display
=
"MPO 1x16 Parallel Optic"
,
},
{
0
}
};
const
struct
sfp_enum_metadata
*
sfp_conn_table
=
sfp_conn_table_
;
const
char
*
ifconfig_sfp_conn_symbol
(
enum
sfp_conn
v
)
{
const
struct
sfp_enum_metadata
*
metadata
;
if
((
metadata
=
find_metadata
(
sfp_conn_table
,
v
))
==
NULL
)
return
(
NULL
);
return
(
metadata
->
symbol
);
}
const
char
*
ifconfig_sfp_conn_display
(
enum
sfp_conn
v
)
{
const
struct
sfp_enum_metadata
*
metadata
;
if
((
metadata
=
find_metadata
(
sfp_conn_table
,
v
))
==
NULL
)
return
(
NULL
);
return
(
metadata
->
display
);
}
/*
* SFF-8472 Rev. 11.4 table 3.5: Transceiver codes
*/
/*
* 10G Ethernet/IB compliance codes, byte 3
*/
static
const
struct
sfp_enum_metadata
sfp_eth_10g_table_
[]
=
{
{
.
number
=
SFP_ETH_10G_10G_BASE_ER
,
.
symbol
=
"SFP_ETH_10G_10G_BASE_ER"
,
.
display
=
"10G Base-ER"
,
},
{
.
number
=
SFP_ETH_10G_10G_BASE_LRM
,
.
symbol
=
"SFP_ETH_10G_10G_BASE_LRM"
,
.
display
=
"10G Base-LRM"
,
},
{
.
number
=
SFP_ETH_10G_10G_BASE_LR
,
.
symbol
=
"SFP_ETH_10G_10G_BASE_LR"
,
.
display
=
"10G Base-LR"
,
},
{
.
number
=
SFP_ETH_10G_10G_BASE_SR
,
.
symbol
=
"SFP_ETH_10G_10G_BASE_SR"
,
.
display
=
"10G Base-SR"
,
},
{
.
number
=
SFP_ETH_10G_1X_SX
,
.
symbol
=
"SFP_ETH_10G_1X_SX"
,
.
display
=
"1X SX"
,
},
{
.
number
=
SFP_ETH_10G_1X_LX
,
.
symbol
=
"SFP_ETH_10G_1X_LX"
,
.
display
=
"1X LX"
,
},
{
.
number
=
SFP_ETH_10G_1X_COPPER_ACTIVE
,
.
symbol
=
"SFP_ETH_10G_1X_COPPER_ACTIVE"
,
.
display
=
"1X Copper Active"
,
},
{
.
number
=
SFP_ETH_10G_1X_COPPER_PASSIVE
,
.
symbol
=
"SFP_ETH_10G_1X_COPPER_PASSIVE"
,
.
display
=
"1X Copper Passive"
,
},
{
0
}
};
const
struct
sfp_enum_metadata
*
sfp_eth_10g_table
=
sfp_eth_10g_table_
;
const
char
*
ifconfig_sfp_eth_10g_symbol
(
enum
sfp_eth_10g
v
)
{
const
struct
sfp_enum_metadata
*
metadata
;
if
((
metadata
=
find_metadata
(
sfp_eth_10g_table
,
v
))
==
NULL
)
return
(
NULL
);
return
(
metadata
->
symbol
);
}
const
char
*
ifconfig_sfp_eth_10g_display
(
enum
sfp_eth_10g
v
)
{
const
struct
sfp_enum_metadata
*
metadata
;
if
((
metadata
=
find_metadata
(
sfp_eth_10g_table
,
v
))
==
NULL
)
return
(
NULL
);
return
(
metadata
->
display
);
}
/*
* Ethernet compliance codes, byte 6
*/
static
const
struct
sfp_enum_metadata
sfp_eth_table_
[]
=
{
{
.
number
=
SFP_ETH_BASE_PX
,
.
symbol
=
"SFP_ETH_BASE_PX"
,
.
display
=
"BASE-PX"
,
},
{
.
number
=
SFP_ETH_BASE_BX10
,
.
symbol
=
"SFP_ETH_BASE_BX10"
,
.
display
=
"BASE-BX10"
,
},
{
.
number
=
SFP_ETH_100BASE_FX
,
.
symbol
=
"SFP_ETH_100BASE_FX"
,
.
display
=
"100BASE-FX"
,
},
{
.
number
=
SFP_ETH_100BASE_LX_LX10
,
.
symbol
=
"SFP_ETH_100BASE_LX_LX10"
,
.
display
=
"100BASE-LX/LX10"
,
},
{
.
number
=
SFP_ETH_1000BASE_T
,
.
symbol
=
"SFP_ETH_1000BASE_T"
,
.
display
=
"1000BASE-T"
,
},
{
.
number
=
SFP_ETH_1000BASE_CX
,
.
symbol
=
"SFP_ETH_1000BASE_CX"
,
.
display
=
"1000BASE-CX"
,
},
{
.
number
=
SFP_ETH_1000BASE_LX
,
.
symbol
=
"SFP_ETH_1000BASE_LX"
,
.
display
=
"1000BASE-LX"
,
},
{
.
number
=
SFP_ETH_1000BASE_SX
,
.
symbol
=
"SFP_ETH_1000BASE_SX"
,
.
display
=
"1000BASE-SX"
,
},
{
0
}
};
const
struct
sfp_enum_metadata
*
sfp_eth_table
=
sfp_eth_table_
;
const
char
*
ifconfig_sfp_eth_symbol
(
enum
sfp_eth
v
)
{
const
struct
sfp_enum_metadata
*
metadata
;
if
((
metadata
=
find_metadata
(
sfp_eth_table
,
v
))
==
NULL
)
return
(
NULL
);
return
(
metadata
->
symbol
);
}
const
char
*
ifconfig_sfp_eth_display
(
enum
sfp_eth
v
)
{
const
struct
sfp_enum_metadata
*
metadata
;
if
((
metadata
=
find_metadata
(
sfp_eth_table
,
v
))
==
NULL
)
return
(
NULL
);
return
(
metadata
->
display
);
}
/*
* FC link length, byte 7
*/
static
const
struct
sfp_enum_metadata
sfp_fc_len_table_
[]
=
{
{
.
number
=
SFP_FC_LEN_VERY_LONG
,
.
symbol
=
"SFP_FC_LEN_VERY_LONG"
,
.
display
=
"very long distance"
,
},
{
.
number
=
SFP_FC_LEN_SHORT
,
.
symbol
=
"SFP_FC_LEN_SHORT"
,
.
display
=
"short distance"
,
},
{
.
number
=
SFP_FC_LEN_INTERMEDIATE
,
.
symbol
=
"SFP_FC_LEN_INTERMEDIATE"
,
.
display
=
"intermediate distance"
,
},
{
.
number
=
SFP_FC_LEN_LONG
,
.
symbol
=
"SFP_FC_LEN_LONG"
,
.
display
=
"long distance"
,
},
{
.
number
=
SFP_FC_LEN_MEDIUM
,
.
symbol
=
"SFP_FC_LEN_MEDIUM"
,
.
display
=
"medium distance"
,
},
{
0
}
};
const
struct
sfp_enum_metadata
*
sfp_fc_len_table
=
sfp_fc_len_table_
;
const
char
*
ifconfig_sfp_fc_len_symbol
(
enum
sfp_fc_len
v
)
{
const
struct
sfp_enum_metadata
*
metadata
;
if
((
metadata
=
find_metadata
(
sfp_fc_len_table
,
v
))
==
NULL
)
return
(
NULL
);
return
(
metadata
->
symbol
);
}
const
char
*
ifconfig_sfp_fc_len_display
(
enum
sfp_fc_len
v
)
{
const
struct
sfp_enum_metadata
*
metadata
;
if
((
metadata
=
find_metadata
(
sfp_fc_len_table
,
v
))
==
NULL
)
return
(
NULL
);
return
(
metadata
->
display
);
}
/*
* Channel/Cable technology, byte 7-8
*/
static
const
struct
sfp_enum_metadata
sfp_cab_tech_table_
[]
=
{
{
.
number
=
SFP_CAB_TECH_SA
,
.
symbol
=
"SFP_CAB_TECH_SA"
,
.
display
=
"Shortwave laser (SA)"
,
},
{
.
number
=
SFP_CAB_TECH_LC
,
.
symbol
=
"SFP_CAB_TECH_LC"
,
.
display
=
"Longwave laser (LC)"
,
},
{
.
number
=
SFP_CAB_TECH_EL_INTER
,
.
symbol
=
"SFP_CAB_TECH_EL_INTER"
,
.
display
=
"Electrical inter-enclosure (EL)"
,
},
{
.
number
=
SFP_CAB_TECH_EL_INTRA
,
.
symbol
=
"SFP_CAB_TECH_EL_INTRA"
,
.
display
=
"Electrical intra-enclosure (EL)"
,
},
{
.
number
=
SFP_CAB_TECH_SN
,
.
symbol
=
"SFP_CAB_TECH_SN"
,
.
display
=
"Shortwave laser (SN)"
,
},
{
.
number
=
SFP_CAB_TECH_SL
,
.
symbol
=
"SFP_CAB_TECH_SL"
,
.
display
=
"Shortwave laser (SL)"
,
},
{
.
number
=
SFP_CAB_TECH_LL
,
.
symbol
=
"SFP_CAB_TECH_LL"
,
.
display
=
"Longwave laser (LL)"
,
},
{
.
number
=
SFP_CAB_TECH_ACTIVE
,
.
symbol
=
"SFP_CAB_TECH_ACTIVE"
,
.
display
=
"Active Cable"
,
},
{
.
number
=
SFP_CAB_TECH_PASSIVE
,
.
symbol
=
"SFP_CAB_TECH_PASSIVE"
,
.
display
=
"Passive Cable"
,
},
{
0
}
};
const
struct
sfp_enum_metadata
*
sfp_cab_tech_table
=
sfp_cab_tech_table_
;
const
char
*
ifconfig_sfp_cab_tech_symbol
(
enum
sfp_cab_tech
v
)
{
const
struct
sfp_enum_metadata
*
metadata
;
if
((
metadata
=
find_metadata
(
sfp_cab_tech_table
,
v
))
==
NULL
)
return
(
NULL
);
return
(
metadata
->
symbol
);
}
const
char
*
ifconfig_sfp_cab_tech_display
(
enum
sfp_cab_tech
v
)
{
const
struct
sfp_enum_metadata
*
metadata
;
if
((
metadata
=
find_metadata
(
sfp_cab_tech_table
,
v
))
==
NULL
)
return
(
NULL
);
return
(
metadata
->
display
);
}
/*
* FC Transmission media, byte 9
*/
static
const
struct
sfp_enum_metadata
sfp_fc_media_table_
[]
=
{
{
.
number
=
SFP_FC_MEDIA_TW
,
.
symbol
=
"SFP_FC_MEDIA_TW"
,
.
display
=
"Twin Axial Pair (TW)"
,
},
{
.
number
=
SFP_FC_MEDIA_TP
,
.
symbol
=
"SFP_FC_MEDIA_TP"
,
.
display
=
"Twisted Pair (TP)"
,
},
{
.
number
=
SFP_FC_MEDIA_MI
,
.
symbol
=
"SFP_FC_MEDIA_MI"
,
.
display
=
"Miniature Coax (MI)"
,
},
{
.
number
=
SFP_FC_MEDIA_TV
,
.
symbol
=
"SFP_FC_MEDIA_TV"
,
.
display
=
"Video Coax (TV)"
,
},
{
.
number
=
SFP_FC_MEDIA_M6
,
.
symbol
=
"SFP_FC_MEDIA_M6"
,
.
display
=
"Miltimode 62.5um (M6)"
,
},
{
.
number
=
SFP_FC_MEDIA_M5
,
.
symbol
=
"SFP_FC_MEDIA_M5"
,
.
display
=
"Multimode 50um (M5)"
,
},
{
.
number
=
SFP_FC_MEDIA_RESERVED
,
.
symbol
=
"SFP_FC_MEDIA_RESERVED"
,
.
display
=
"Reserved"
,
},
{
.
number
=
SFP_FC_MEDIA_SM
,
.
symbol
=
"SFP_FC_MEDIA_SM"
,
.
display
=
"Single Mode (SM)"
,
},
{
0
}
};
const
struct
sfp_enum_metadata
*
sfp_fc_media_table
=
sfp_fc_media_table_
;
const
char
*
ifconfig_sfp_fc_media_symbol
(
enum
sfp_fc_media
v
)
{
const
struct
sfp_enum_metadata
*
metadata
;
if
((
metadata
=
find_metadata
(
sfp_fc_media_table
,
v
))
==
NULL
)
return
(
NULL
);
return
(
metadata
->
symbol
);
}
const
char
*
ifconfig_sfp_fc_media_display
(
enum
sfp_fc_media
v
)
{
const
struct
sfp_enum_metadata
*
metadata
;
if
((
metadata
=
find_metadata
(
sfp_fc_media_table
,
v
))
==
NULL
)
return
(
NULL
);
return
(
metadata
->
display
);
}
/*
* FC Speed, byte 10
*/
static
const
struct
sfp_enum_metadata
sfp_fc_speed_table_
[]
=
{
{
.
number
=
SFP_FC_SPEED_1200
,
.
symbol
=
"SFP_FC_SPEED_1200"
,
.
display
=
"1200 MBytes/sec"
,
},
{
.
number
=
SFP_FC_SPEED_800
,
.
symbol
=
"SFP_FC_SPEED_800"
,
.
display
=
"800 MBytes/sec"
,
},
{
.
number
=
SFP_FC_SPEED_1600
,
.
symbol
=
"SFP_FC_SPEED_1600"
,
.
display
=
"1600 MBytes/sec"
,
},
{
.
number
=
SFP_FC_SPEED_400
,
.
symbol
=
"SFP_FC_SPEED_400"
,
.
display
=
"400 MBytes/sec"
,
},
{
.
number
=
SFP_FC_SPEED_3200
,
.
symbol
=
"SFP_FC_SPEED_3200"
,
.
display
=
"3200 MBytes/sec"
,
},
{
.
number
=
SFP_FC_SPEED_200
,
.
symbol
=
"SFP_FC_SPEED_200"
,
.
display
=
"200 MBytes/sec"
,
},
{
.
number
=
SFP_FC_SPEED_100
,
.
symbol
=
"SFP_FC_SPEED_100"
,
.
display
=
"100 MBytes/sec"
,
},
{
0
}
};
const
struct
sfp_enum_metadata
*
sfp_fc_speed_table
=
sfp_fc_speed_table_
;
const
char
*
ifconfig_sfp_fc_speed_symbol
(
enum
sfp_fc_speed
v
)
{
const
struct
sfp_enum_metadata
*
metadata
;
if
((
metadata
=
find_metadata
(
sfp_fc_speed_table
,
v
))
==
NULL
)
return
(
NULL
);
return
(
metadata
->
symbol
);
}
const
char
*
ifconfig_sfp_fc_speed_display
(
enum
sfp_fc_speed
v
)
{
const
struct
sfp_enum_metadata
*
metadata
;
if
((
metadata
=
find_metadata
(
sfp_fc_speed_table
,
v
))
==
NULL
)
return
(
NULL
);
return
(
metadata
->
display
);
}
/*
* SFF-8436 Rev. 4.8 table 33: Specification compliance
*/
/*
* 10/40G Ethernet compliance codes, byte 128 + 3
*/
static
const
struct
sfp_enum_metadata
sfp_eth_1040g_table_
[]
=
{
{
.
number
=
SFP_ETH_1040G_EXTENDED
,
.
symbol
=
"SFP_ETH_1040G_EXTENDED"
,
.
display
=
"Extended"
,
},
{
.
number
=
SFP_ETH_1040G_10GBASE_LRM
,
.
symbol
=
"SFP_ETH_1040G_10GBASE_LRM"
,
.
display
=
"10GBASE-LRM"
,
},
{
.
number
=
SFP_ETH_1040G_10GBASE_LR
,
.
symbol
=
"SFP_ETH_1040G_10GBASE_LR"
,
.
display
=
"10GBASE-LR"
,
},
{
.
number
=
SFP_ETH_1040G_10GBASE_SR
,
.
symbol
=
"SFP_ETH_1040G_10GBASE_SR"
,
.
display
=
"10GBASE-SR"
,
},
{
.
number
=
SFP_ETH_1040G_40GBASE_CR4
,
.
symbol
=
"SFP_ETH_1040G_40GBASE_CR4"
,
.
display
=
"40GBASE-CR4"
,
},
{
.
number
=
SFP_ETH_1040G_40GBASE_SR4
,
.
symbol
=
"SFP_ETH_1040G_40GBASE_SR4"
,
.
display
=
"40GBASE-SR4"
,
},
{
.
number
=
SFP_ETH_1040G_40GBASE_LR4
,
.
symbol
=
"SFP_ETH_1040G_40GBASE_LR4"
,
.
display
=
"40GBASE-LR4"
,
},
{
.
number
=
SFP_ETH_1040G_40G_ACTIVE
,
.
symbol
=
"SFP_ETH_1040G_40G_ACTIVE"
,
.
display
=
"40G Active Cable"
,
},
{
0
}
};
const
struct
sfp_enum_metadata
*
sfp_eth_1040g_table
=
sfp_eth_1040g_table_
;
const
char
*
ifconfig_sfp_eth_1040g_symbol
(
enum
sfp_eth_1040g
v
)
{
const
struct
sfp_enum_metadata
*
metadata
;
if
((
metadata
=
find_metadata
(
sfp_eth_1040g_table
,
v
))
==
NULL
)
return
(
NULL
);
return
(
metadata
->
symbol
);
}
const
char
*
ifconfig_sfp_eth_1040g_display
(
enum
sfp_eth_1040g
v
)
{
const
struct
sfp_enum_metadata
*
metadata
;
if
((
metadata
=
find_metadata
(
sfp_eth_1040g_table
,
v
))
==
NULL
)
return
(
NULL
);
return
(
metadata
->
display
);
}
/*
* SFF-8024 Rev. 4.6 table 4-4: Extended Specification Compliance
*/
static
const
struct
sfp_enum_metadata
sfp_eth_ext_table_
[]
=
{
{
.
number
=
SFP_ETH_EXT_RESERVED_FF
,
.
symbol
=
"SFP_ETH_EXT_RESERVED_FF"
,
.
display
=
"Reserved"
,
},
{
.
number
=
SFP_ETH_EXT_128GFC_LW
,
.
symbol
=
"SFP_ETH_EXT_128GFC_LW"
,
.
display
=
"128GFC LW"
,
},
{
.
number
=
SFP_ETH_EXT_128GFC_SW
,
.
symbol
=
"SFP_ETH_EXT_128GFC_SW"
,
.
display
=
"128GFC SW"
,
},
{
.
number
=
SFP_ETH_EXT_128GFC_EA
,
.
symbol
=
"SFP_ETH_EXT_128GFC_EA"
,
.
display
=
"128GFC EA"
,
},
{
.
number
=
SFP_ETH_EXT_64GFC_LW
,
.
symbol
=
"SFP_ETH_EXT_64GFC_LW"
,
.
display
=
"64GFC LW"
,
},
{
.
number
=
SFP_ETH_EXT_64GFC_SW
,
.
symbol
=
"SFP_ETH_EXT_64GFC_SW"
,
.
display
=
"64GFC SW"
,
},
{
.
number
=
SFP_ETH_EXT_64GFC_EA
,
.
symbol
=
"SFP_ETH_EXT_64GFC_EA"
,
.
display
=
"64GFC EA"
,
},
{
.
number
=
SFP_ETH_EXT_RESERVED_4F
,
.
symbol
=
"SFP_ETH_EXT_RESERVED_4F"
,
.
display
=
"Reserved"
,
},
{
.
number
=
SFP_ETH_EXT_RESERVED_4E
,
.
symbol
=
"SFP_ETH_EXT_RESERVED_4E"
,
.
display
=
"Reserved"
,
},
{
.
number
=
SFP_ETH_EXT_RESERVED_4D
,
.
symbol
=
"SFP_ETH_EXT_RESERVED_4D"
,
.
display
=
"Reserved"
,
},
{
.
number
=
SFP_ETH_EXT_RESERVED_4C
,
.
symbol
=
"SFP_ETH_EXT_RESERVED_4C"
,
.
display
=
"Reserved"
,
},
{
.
number
=
SFP_ETH_EXT_RESERVED_4B
,
.
symbol
=
"SFP_ETH_EXT_RESERVED_4B"
,
.
display
=
"Reserved"
,
},
{
.
number
=
SFP_ETH_EXT_RESERVED_4A
,
.
symbol
=
"SFP_ETH_EXT_RESERVED_4A"
,
.
display
=
"Reserved"
,
},
{
.
number
=
SFP_ETH_EXT_RESERVED_49
,
.
symbol
=
"SFP_ETH_EXT_RESERVED_49"
,
.
display
=
"Reserved"
,
},
{
.
number
=
SFP_ETH_EXT_RESERVED_48
,
.
symbol
=
"SFP_ETH_EXT_RESERVED_48"
,
.
display
=
"Reserved"
,
},
{
.
number
=
SFP_ETH_EXT_RESERVED_47
,
.
symbol
=
"SFP_ETH_EXT_RESERVED_47"
,
.
display
=
"Reserved"
,
},
{
.
number
=
SFP_ETH_EXT_200GBASE_LR4
,
.
symbol
=
"SFP_ETH_EXT_200GBASE_LR4"
,
.
display
=
"200GBASE-LR4"
,
},
{
.
number
=
SFP_ETH_EXT_50GBASE_LR
,
.
symbol
=
"SFP_ETH_EXT_50GBASE_LR"
,
.
display
=
"50GBASE-LR"
,
},
{
.
number
=
SFP_ETH_EXT_200G_1550NM_PSM4
,
.
symbol
=
"SFP_ETH_EXT_200G_1550NM_PSM4"
,
.
display
=
"200G 1550nm PSM4"
,
},
{
.
number
=
SFP_ETH_EXT_200GBASE_FR4
,
.
symbol
=
"SFP_ETH_EXT_200GBASE_FR4"
,
.
display
=
"200GBASE-FR4"
,
},
{
.
number
=
SFP_ETH_EXT_50GBASE_FR_200GBASE_DR4
,
.
symbol
=
"SFP_ETH_EXT_50GBASE_FR_200GBASE_DR4"
,
.
display
=
"50GBASE-FR or 200GBASE-DR4"
,
},
{
.
number
=
SFP_ETH_EXT_50GBASE_SR_100GBASE_SR2_200GBASE_SR4
,
.
symbol
=
"SFP_ETH_EXT_50GBASE_SR_100GBASE_SR2_200GBASE_SR4"
,
.
display
=
"50GBASE-SR/100GBASE-SR2/200GBASE-SR4"
,
},
{
.
number
=
SFP_ETH_EXT_50GBASE_CR_100GBASE_CR2_200GBASE_CR4
,
.
symbol
=
"SFP_ETH_EXT_50GBASE_CR_100GBASE_CR2_200GBASE_CR4"
,
.
display
=
"50GBASE-CR/100GBASE-CR2/200GBASE-CR4"
,
},
{
.
number
=
SFP_ETH_EXT_RESERVED_3F
,
.
symbol
=
"SFP_ETH_EXT_RESERVED_3F"
,
.
display
=
"Reserved"
,
},
{
.
number
=
SFP_ETH_EXT_RESERVED_3E
,
.
symbol
=
"SFP_ETH_EXT_RESERVED_3E"
,
.
display
=
"Reserved"
,
},
{
.
number
=
SFP_ETH_EXT_RESERVED_3D
,
.
symbol
=
"SFP_ETH_EXT_RESERVED_3D"
,
.
display
=
"Reserved"
,
},
{
.
number
=
SFP_ETH_EXT_RESERVED_3C
,
.
symbol
=
"SFP_ETH_EXT_RESERVED_3C"
,
.
display
=
"Reserved"
,
},
{
.
number
=
SFP_ETH_EXT_RESERVED_3B
,
.
symbol
=
"SFP_ETH_EXT_RESERVED_3B"
,
.
display
=
"Reserved"
,
},
{
.
number
=
SFP_ETH_EXT_RESERVED_3A
,
.
symbol
=
"SFP_ETH_EXT_RESERVED_3A"
,
.
display
=
"Reserved"
,
},
{
.
number
=
SFP_ETH_EXT_RESERVED_39
,
.
symbol
=
"SFP_ETH_EXT_RESERVED_39"
,
.
display
=
"Reserved"
,
},
{
.
number
=
SFP_ETH_EXT_RESERVED_38
,
.
symbol
=
"SFP_ETH_EXT_RESERVED_38"
,
.
display
=
"Reserved"
,
},
{
.
number
=
SFP_ETH_EXT_RESERVED_37
,
.
symbol
=
"SFP_ETH_EXT_RESERVED_37"
,
.
display
=
"Reserved"
,
},
{
.
number
=
SFP_ETH_EXT_RESERVED_36
,
.
symbol
=
"SFP_ETH_EXT_RESERVED_36"
,
.
display
=
"Reserved"
,
},
{
.
number
=
SFP_ETH_EXT_RESERVED_35
,
.
symbol
=
"SFP_ETH_EXT_RESERVED_35"
,
.
display
=
"Reserved"
,
},
{
.
number
=
SFP_ETH_EXT_RESERVED_34
,
.
symbol
=
"SFP_ETH_EXT_RESERVED_34"
,
.
display
=
"Reserved"
,
},
{
.
number
=
SFP_ETH_EXT_50_100_200GAUI_AOC_HI_BER
,
.
symbol
=
"SFP_ETH_EXT_50_100_200GAUI_AOC_HI_BER"
,
.
display
=
"50GAUI/100GAUI-2/200GAUI-4 AOC (BER <2.6e-4)"
,
},
{
.
number
=
SFP_ETH_EXT_50_100_200GAUI_ACC_HI_BER
,
.
symbol
=
"SFP_ETH_EXT_50_100_200GAUI_ACC_HI_BER"
,
.
display
=
"50GAUI/100GAUI-2/200GAUI-4 ACC (BER <2.6e-4)"
,
},
{
.
number
=
SFP_ETH_EXT_50_100_200GAUI_AOC_LO_BER
,
.
symbol
=
"SFP_ETH_EXT_50_100_200GAUI_AOC_LO_BER"
,
.
display
=
"50GAUI/100GAUI-2/200GAUI-4 AOC (BER <1e-6)"
,
},
{
.
number
=
SFP_ETH_EXT_50_100_200GAUI_ACC_LO_BER
,
.
symbol
=
"SFP_ETH_EXT_50_100_200GAUI_ACC_LO_BER"
,
.
display
=
"50GAUI/100GAUI-2/200GAUI-4 ACC (BER <1e-6)"
,
},
{
.
number
=
SFP_ETH_EXT_RESERVED_2F
,
.
symbol
=
"SFP_ETH_EXT_RESERVED_2F"
,
.
display
=
"Reserved"
,
},
{
.
number
=
SFP_ETH_EXT_RESERVED_2E
,
.
symbol
=
"SFP_ETH_EXT_RESERVED_2E"
,
.
display
=
"Reserved"
,
},
{
.
number
=
SFP_ETH_EXT_RESERVED_2D
,
.
symbol
=
"SFP_ETH_EXT_RESERVED_2D"
,
.
display
=
"Reserved"
,
},
{
.
number
=
SFP_ETH_EXT_RESERVED_2C
,
.
symbol
=
"SFP_ETH_EXT_RESERVED_2C"
,
.
display
=
"Reserved"
,
},
{
.
number
=
SFP_ETH_EXT_RESERVED_2B
,
.
symbol
=
"SFP_ETH_EXT_RESERVED_2B"
,
.
display
=
"Reserved"
,
},
{
.
number
=
SFP_ETH_EXT_RESERVED_2A
,
.
symbol
=
"SFP_ETH_EXT_RESERVED_2A"
,
.
display
=
"Reserved"
,
},
{
.
number
=
SFP_ETH_EXT_RESERVED_29
,
.
symbol
=
"SFP_ETH_EXT_RESERVED_29"
,
.
display
=
"Reserved"
,
},
{
.
number
=
SFP_ETH_EXT_RESERVED_28
,
.
symbol
=
"SFP_ETH_EXT_RESERVED_28"
,
.
display
=
"Reserved"
,
},
{
.
number
=
SFP_ETH_EXT_100G_LR
,
.
symbol
=
"SFP_ETH_EXT_100G_LR"
,
.
display
=
"100G-LR"
,
},
{
.
number
=
SFP_ETH_EXT_100G_FR
,
.
symbol
=
"SFP_ETH_EXT_100G_FR"
,
.
display
=
"100G-FR"
,
},
{
.
number
=
SFP_ETH_EXT_100GBASE_DR
,
.
symbol
=
"SFP_ETH_EXT_100GBASE_DR"
,
.
display
=
"100GBASE-DR"
,
},
{
.
number
=
SFP_ETH_EXT_4WDM_40_MSA
,
.
symbol
=
"SFP_ETH_EXT_4WDM_40_MSA"
,
.
display
=
"4WDM-40 MSA"
,
},
{
.
number
=
SFP_ETH_EXT_4WDM_20_MSA
,
.
symbol
=
"SFP_ETH_EXT_4WDM_20_MSA"
,
.
display
=
"4WDM-20 MSA"
,
},
{
.
number
=
SFP_ETH_EXT_4WDM_10_MSA
,
.
symbol
=
"SFP_ETH_EXT_4WDM_10_MSA"
,
.
display
=
"4WDM-10 MSA"
,
},
{
.
number
=
SFP_ETH_EXT_100G_PAM4_BIDI
,
.
symbol
=
"SFP_ETH_EXT_100G_PAM4_BIDI"
,
.
display
=
"100G PAM4 BiDi"
,
},
{
.
number
=
SFP_ETH_EXT_100G_SWDM4
,
.
symbol
=
"SFP_ETH_EXT_100G_SWDM4"
,
.
display
=
"100G SWDM4"
,
},
{
.
number
=
SFP_ETH_EXT_40G_SWDM4
,
.
symbol
=
"SFP_ETH_EXT_40G_SWDM4"
,
.
display
=
"40G SWDM4"
,
},
{
.
number
=
SFP_ETH_EXT_2_5GBASE_T
,
.
symbol
=
"SFP_ETH_EXT_2_5GBASE_T"
,
.
display
=
"2.5GBASE-T"
,
},
{
.
number
=
SFP_ETH_EXT_5GBASE_T
,
.
symbol
=
"SFP_ETH_EXT_5GBASE_T"
,
.
display
=
"5GBASE-T"
,
},
{
.
number
=
SFP_ETH_EXT_10GBASE_T_SR
,
.
symbol
=
"SFP_ETH_EXT_10GBASE_T_SR"
,
.
display
=
"10GBASE-T Short Reach"
,
},
{
.
number
=
SFP_ETH_EXT_100G_1550NM_WDM
,
.
symbol
=
"SFP_ETH_EXT_100G_1550NM_WDM"
,
.
display
=
"100G 1550nm WDM"
,
},
{
.
number
=
SFP_ETH_EXT_100GE_DWDM2
,
.
symbol
=
"SFP_ETH_EXT_100GE_DWDM2"
,
.
display
=
"100GE-DWDM2"
,
},
{
.
number
=
SFP_ETH_EXT_100G_25GAUI_C2M_ACC
,
.
symbol
=
"SFP_ETH_EXT_100G_25GAUI_C2M_ACC"
,
.
display
=
"100G ACC or 25GAUI C2M ACC"
,
},
{
.
number
=
SFP_ETH_EXT_100G_25GAUI_C2M_AOC
,
.
symbol
=
"SFP_ETH_EXT_100G_25GAUI_C2M_AOC"
,
.
display
=
"100G AOC or 25GAUI C2M AOC"
,
},
{
.
number
=
SFP_ETH_EXT_100G_CLR4
,
.
symbol
=
"SFP_ETH_EXT_100G_CLR4"
,
.
display
=
"100G CLR4"
,
},
{
.
number
=
SFP_ETH_EXT_10GBASE_T_SFI
,
.
symbol
=
"SFP_ETH_EXT_10GBASE_T_SFI"
,
.
display
=
"10GBASE-T with SFI electrical interface"
,
},
{
.
number
=
SFP_ETH_EXT_G959_1_P1L1_2D2
,
.
symbol
=
"SFP_ETH_EXT_G959_1_P1L1_2D2"
,
.
display
=
"G959.1 profile P1L1-2D2"
,
},
{
.
number
=
SFP_ETH_EXT_G959_1_P1S1_2D2
,
.
symbol
=
"SFP_ETH_EXT_G959_1_P1S1_2D2"
,
.
display
=
"G959.1 profile P1S1-2D2"
,
},
{
.
number
=
SFP_ETH_EXT_G959_1_P1I1_2D1
,
.
symbol
=
"SFP_ETH_EXT_G959_1_P1I1_2D1"
,
.
display
=
"G959.1 profile P1I1-2D1"
,
},
{
.
number
=
SFP_ETH_EXT_40G_PSM4
,
.
symbol
=
"SFP_ETH_EXT_40G_PSM4"
,
.
display
=
"40G PSM4 Parallel SMF"
,
},
{
.
number
=
SFP_ETH_EXT_4X_10GBASE_SR
,
.
symbol
=
"SFP_ETH_EXT_4X_10GBASE_SR"
,
.
display
=
"4 x 10GBASE-SR"
,
},
{
.
number
=
SFP_ETH_EXT_40GBASE_ER4
,
.
symbol
=
"SFP_ETH_EXT_40GBASE_ER4"
,
.
display
=
"40GBASE-ER4"
,
},
{
.
number
=
SFP_ETH_EXT_RESERVED_0F
,
.
symbol
=
"SFP_ETH_EXT_RESERVED_0F"
,
.
display
=
"Reserved"
,
},
{
.
number
=
SFP_ETH_EXT_RESERVED_0E
,
.
symbol
=
"SFP_ETH_EXT_RESERVED_0E"
,
.
display
=
"Reserved"
,
},
{
.
number
=
SFP_ETH_EXT_CA_25G_N
,
.
symbol
=
"SFP_ETH_EXT_CA_25G_N"
,
.
display
=
"25GBASE-CR CA-25G-N"
,
},
{
.
number
=
SFP_ETH_EXT_CA_25G_S
,
.
symbol
=
"SFP_ETH_EXT_CA_25G_S"
,
.
display
=
"25GBASE-CR CA-25G-S"
,
},
{
.
number
=
SFP_ETH_EXT_CA_L
,
.
symbol
=
"SFP_ETH_EXT_CA_L"
,
.
display
=
"100GBASE-CR4 or 25GBASE-CR CA-L"
,
},
{
.
number
=
SFP_ETH_EXT_RESERVED_0A
,
.
symbol
=
"SFP_ETH_EXT_RESERVED_0A"
,
.
display
=
"Reserved"
,
},
{
.
number
=
SFP_ETH_EXT_OBSOLETE
,
.
symbol
=
"SFP_ETH_EXT_OBSOLETE"
,
.
display
=
"Obsolete"
,
},
{
.
number
=
SFP_ETH_EXT_100G_25GAUI_C2M_ACC_1
,
.
symbol
=
"SFP_ETH_EXT_100G_25GAUI_C2M_ACC_1"
,
.
display
=
"100G ACC (Active Copper Cable"
,
},
{
.
number
=
SFP_ETH_EXT_100G_PSM4_P_SMF
,
.
symbol
=
"SFP_ETH_EXT_100G_PSM4_P_SMF"
,
.
display
=
"100G PSM4 Parallel SMF"
,
},
{
.
number
=
SFP_ETH_EXT_100G_CWDM4
,
.
symbol
=
"SFP_ETH_EXT_100G_CWDM4"
,
.
display
=
"100G CWDM4"
,
},
{
.
number
=
SFP_ETH_EXT_100GBASE_SR10
,
.
symbol
=
"SFP_ETH_EXT_100GBASE_SR10"
,
.
display
=
"100GBASE-SR10"
,
},
{
.
number
=
SFP_ETH_EXT_100GBASE_ER4_25GBASE_ER
,
.
symbol
=
"SFP_ETH_EXT_100GBASE_ER4_25GBASE_ER"
,
.
display
=
"100GBASE-ER4 or 25GBASE-ER"
,
},
{
.
number
=
SFP_ETH_EXT_100GBASE_LR4_25GBASE_LR
,
.
symbol
=
"SFP_ETH_EXT_100GBASE_LR4_25GBASE_LR"
,
.
display
=
"100GBASE-LR4 or 25GBASE-LR"
,
},
{
.
number
=
SFP_ETH_EXT_100GBASE_SR4_25GBASE_SR
,
.
symbol
=
"SFP_ETH_EXT_100GBASE_SR4_25GBASE_SR"
,
.
display
=
"100GBASE-SR4 or 25GBASE-SR"
,
},
{
.
number
=
SFP_ETH_EXT_100G_25GAUI_C2M_AOC_1
,
.
symbol
=
"SFP_ETH_EXT_100G_25GAUI_C2M_AOC_1"
,
.
display
=
"100G AOC (Active Optical Cable"
,
},
{
.
number
=
SFP_ETH_EXT_UNSPECIFIED
,
.
symbol
=
"SFP_ETH_EXT_UNSPECIFIED"
,
.
display
=
"Unspecified"
,
},
{
0
}
};
const
struct
sfp_enum_metadata
*
sfp_eth_ext_table
=
sfp_eth_ext_table_
;
const
char
*
ifconfig_sfp_eth_ext_symbol
(
enum
sfp_eth_ext
v
)
{
const
struct
sfp_enum_metadata
*
metadata
;
if
((
metadata
=
find_metadata
(
sfp_eth_ext_table
,
v
))
==
NULL
)
return
(
NULL
);
return
(
metadata
->
symbol
);
}
const
char
*
ifconfig_sfp_eth_ext_display
(
enum
sfp_eth_ext
v
)
{
const
struct
sfp_enum_metadata
*
metadata
;
if
((
metadata
=
find_metadata
(
sfp_eth_ext_table
,
v
))
==
NULL
)
return
(
NULL
);
return
(
metadata
->
display
);
}
/*
* SFF-8636 Rev. 2.9 table 6.3: Revision compliance
*/
static
const
struct
sfp_enum_metadata
sfp_rev_table_
[]
=
{
{
.
number
=
SFP_REV_SFF_8436_REV_LE_4_8
,
.
symbol
=
"SFP_REV_SFF_8436_REV_LE_4_8"
,
.
display
=
"SFF-8436 rev <=4.8"
,
},
{
.
number
=
SFP_REV_SFF_8436_REV_LE_4_8_ALT
,
.
symbol
=
"SFP_REV_SFF_8436_REV_LE_4_8_ALT"
,
.
display
=
"SFF-8436 rev <=4.8"
,
},
{
.
number
=
SFP_REV_SFF_8636_REV_LE_1_3
,
.
symbol
=
"SFP_REV_SFF_8636_REV_LE_1_3"
,
.
display
=
"SFF-8636 rev <=1.3"
,
},
{
.
number
=
SFP_REV_SFF_8636_REV_LE_1_4
,
.
symbol
=
"SFP_REV_SFF_8636_REV_LE_1_4"
,
.
display
=
"SFF-8636 rev <=1.4"
,
},
{
.
number
=
SFP_REV_SFF_8636_REV_LE_1_5
,
.
symbol
=
"SFP_REV_SFF_8636_REV_LE_1_5"
,
.
display
=
"SFF-8636 rev <=1.5"
,
},
{
.
number
=
SFP_REV_SFF_8636_REV_LE_2_0
,
.
symbol
=
"SFP_REV_SFF_8636_REV_LE_2_0"
,
.
display
=
"SFF-8636 rev <=2.0"
,
},
{
.
number
=
SFP_REV_SFF_8636_REV_LE_2_7
,
.
symbol
=
"SFP_REV_SFF_8636_REV_LE_2_7"
,
.
display
=
"SFF-8636 rev <=2.7"
,
},
{
.
number
=
SFP_REV_SFF_8363_REV_GE_2_8
,
.
symbol
=
"SFP_REV_SFF_8363_REV_GE_2_8"
,
.
display
=
"SFF-8636 rev >=2.8"
,
},
{
.
number
=
SFP_REV_UNSPECIFIED
,
.
symbol
=
"SFP_REV_UNSPECIFIED"
,
.
display
=
"Unspecified"
,
},
{
0
}
};
const
struct
sfp_enum_metadata
*
sfp_rev_table
=
sfp_rev_table_
;
const
char
*
ifconfig_sfp_rev_symbol
(
enum
sfp_rev
v
)
{
const
struct
sfp_enum_metadata
*
metadata
;
if
((
metadata
=
find_metadata
(
sfp_rev_table
,
v
))
==
NULL
)
return
(
NULL
);
return
(
metadata
->
symbol
);
}
const
char
*
ifconfig_sfp_rev_display
(
enum
sfp_rev
v
)
{
const
struct
sfp_enum_metadata
*
metadata
;
if
((
metadata
=
find_metadata
(
sfp_rev_table
,
v
))
==
NULL
)
return
(
NULL
);
return
(
metadata
->
display
);
}
File Metadata
Details
Attached
Mime Type
text/x-c
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
2664801
Default Alt Text
libifconfig_sfp_enums.c (31 KB)
Attached To
Mode
D25494: libifconfig: Add functionality for querying SFP modules
Attached
Detach File
Event Timeline
Log In to Comment