Merge branch 'master' of github.com:opencomputeproject/OpenNetworkLinux into roth_onlp

This commit is contained in:
Carl D. Roth
2017-09-13 14:45:09 -07:00
24 changed files with 364 additions and 70 deletions

View File

@@ -7,5 +7,4 @@ include $(ONL)/make/config.mk
export TOOLCHAIN := x86_64-linux-gnu
export ARCH := amd64
export UARCH := AMD64
export __$(ARCH)__ := 1

View File

@@ -7,3 +7,4 @@ include $(ONL)/make/config.mk
export TOOLCHAIN := aarch64-linux-gnu
export ARCH := arm64
export UARCH := ARM64
export __$(ARCH)__ := 1

View File

@@ -7,3 +7,4 @@ include $(ONL)/make/config.mk
export TOOLCHAIN := arm-linux-gnueabi
export ARCH := armel
export UARCH := ARMEL
export __$(ARCH)__ := 1

View File

@@ -7,5 +7,4 @@ include $(ONL)/make/config.mk
export TOOLCHAIN := powerpc-linux-gnu
export ARCH := powerpc
export UARCH := PPC
export __$(ARCH)__ := 1

View File

@@ -236,7 +236,7 @@ blkid_find_gpt_boot() {
}
installer_fixup_gpt() {
local buf dat sts dev
local buf dat sts dev do_recover
buf=$(mktemp -u -t sgdisk-XXXXXX)
@@ -264,32 +264,79 @@ installer_fixup_gpt() {
fi
test -b "$dev" || return 0
# see if it's a clean GPT partition table
if sgdisk -p "$dev" > "$buf" 2>&1; then
sts=0
do_recover=
# simple validation using sgdisk
if test "$do_recover"; then
:
else
sts=$?
fi
if test $sts -ne 0; then
cat "$buf" 1>&2
rm -f "$buf"
installer_say "Cannot reliably get GPT partition table"
return 1
fi
if sgdisk -p "$dev" > "$buf" 2>&1; then
sts=0
else
sts=$?
fi
if test $sts -ne 0; then
cat "$buf" 1>&2
rm -f "$buf"
installer_say "Cannot reliably get GPT partition table"
return 1
fi
case $(cat "$buf") in
*Caution*|*Warning*)
cat $buf 1>&2
installer_say "Found issues with the GPT partition table"
rm -f "$buf"
;;
*)
installer_say "Found a clean GPT partition table"
rm -f "$buf"
return 0
case $(cat "$buf") in
*Caution*|*Warning*)
cat $buf 1>&2
installer_say "Found issues with the GPT partition table"
do_recover=1
rm -f "$buf"
;;
esac
esac
fi
# more thorough validation
if test "$do_recover"; then
:
else
local inp
inp=$(mktemp -u -t sgdisk-XXXXXX)
cat > "$inp" <<-END
x
r
v
q
END
if gdisk "$dev" < "$inp" > "$buf" 2>&1; then
sts=0
else
sts=$?
fi
rm -f "$inp"
if test $sts -ne 0; then
cat "$buf" 1>&2
rm -f "$buf"
installer_say "Cannot reliably verify GPT partition table"
return 1
fi
case $(cat "$buf") in
*Caution*|*Warning*|*Problem:*)
cat $buf 1>&2
installer_say "Found issues with the GPT partition table"
do_recover=1
rm -f "$buf"
;;
esac
fi
if test "$do_recover"; then
:
else
installer_say "Found a clean GPT partition table"
rm -f "$buf"
return 0
fi
installer_say "Attempting to correct the GPT partition table"
# this is the simple method; gdisk/sfgdisk will correct

View File

@@ -1,21 +1,21 @@
############################################################
# <bsn.cl fy=2014 v=onl>
#
# Copyright 2014, 2015 Big Switch Networks, Inc.
#
#
# Copyright 2014, 2015 Big Switch Networks, Inc.
#
# Licensed under the Eclipse Public License, Version 1.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
#
# http://www.eclipse.org/legal/epl-v10.html
#
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
# either express or implied. See the License for the specific
# language governing permissions and limitations under the
# License.
#
#
# </bsn.cl>
############################################################
#
@@ -24,6 +24,5 @@
############################################################
onlp_AUTO_DEFS := module/auto/onlp.yml
onlp_AUTO_DIRS := module/inc/onlp module/src
onlp_AUTO_DIRS := module/inc/onlp module/src module/py
include $(BUILDER)/auto.mk

View File

@@ -231,6 +231,17 @@ psu_caps: &psu_caps
- PIN : (1 << 7)
- POUT : (1 << 8)
# SFP Controls
sfp_controls: &sfp_controls
- RESET
- RESET_STATE
- RX_LOS
- TX_FAULT
- TX_DISABLE
- TX_DISABLE_CHANNEL
- LP_MODE
- POWER_OVERRIDE
definitions:
cdefs:
ONLP_CONFIG_HEADER:
@@ -255,25 +266,13 @@ definitions:
members: *thermal_threshold
onlp_sfp_control:
tag: sfp1
members:
- RESET
- RESET_STATE
- RX_LOS
- TX_FAULT
- TX_DISABLE
- TX_DISABLE_CHANNEL
- LP_MODE
- POWER_OVERRIDE
members: *sfp_controls
onlp_sfp_control_flag:
tag: sfp2
members:
- RESET : (1 << ONLP_SFP_CONTROL_RESET)
- RESET_STATE : ( 1 << ONLP_SFP_CONTROL_RESET_STATE )
- RX_LOS : ( 1 << ONLP_SFP_CONTROL_RX_LOS )
- TX_FAULT : ( 1 << ONLP_SFP_CONTROL_TX_FAULT )
- TX_DISABLE : ( 1 << ONLP_SFP_CONTROL_TX_DISABLE )
- LP_MODE : ( 1 << ONLP_SFP_CONTROL_LP_MODE )
- POWER_OVERRIDE : ( 1 << ONLP_SFP_CONTROL_POWER_OVERRIDE )
members: *sfp_controls
flags: True
onlp_fan_mode:
tag: fan
members: *fan_modes
@@ -302,6 +301,8 @@ definitions:
tag: psu
members: *psu_caps
pyenum: *enums
portingmacro:
ONLP:
macros:

View File

@@ -59,6 +59,7 @@ typedef enum onlp_status_e {
*/
int onlp_init(void);
int onlp_denit(void);
/**
* @brief Dump the current platform data.

View File

@@ -51,13 +51,14 @@ typedef enum onlp_sfp_control_e {
/* <auto.start.enum(tag:sfp2).define> */
/** onlp_sfp_control_flag */
typedef enum onlp_sfp_control_flag_e {
ONLP_SFP_CONTROL_FLAG_RESET = (1 << ONLP_SFP_CONTROL_RESET),
ONLP_SFP_CONTROL_FLAG_RESET_STATE = ( 1 << ONLP_SFP_CONTROL_RESET_STATE ),
ONLP_SFP_CONTROL_FLAG_RX_LOS = ( 1 << ONLP_SFP_CONTROL_RX_LOS ),
ONLP_SFP_CONTROL_FLAG_TX_FAULT = ( 1 << ONLP_SFP_CONTROL_TX_FAULT ),
ONLP_SFP_CONTROL_FLAG_TX_DISABLE = ( 1 << ONLP_SFP_CONTROL_TX_DISABLE ),
ONLP_SFP_CONTROL_FLAG_LP_MODE = ( 1 << ONLP_SFP_CONTROL_LP_MODE ),
ONLP_SFP_CONTROL_FLAG_POWER_OVERRIDE = ( 1 << ONLP_SFP_CONTROL_POWER_OVERRIDE ),
ONLP_SFP_CONTROL_FLAG_RESET = (1 << 0),
ONLP_SFP_CONTROL_FLAG_RESET_STATE = (1 << 1),
ONLP_SFP_CONTROL_FLAG_RX_LOS = (1 << 2),
ONLP_SFP_CONTROL_FLAG_TX_FAULT = (1 << 3),
ONLP_SFP_CONTROL_FLAG_TX_DISABLE = (1 << 4),
ONLP_SFP_CONTROL_FLAG_TX_DISABLE_CHANNEL = (1 << 5),
ONLP_SFP_CONTROL_FLAG_LP_MODE = (1 << 6),
ONLP_SFP_CONTROL_FLAG_POWER_OVERRIDE = (1 << 7),
} onlp_sfp_control_flag_t;
/* <auto.end.enum(tag:sfp2).define> */

View File

@@ -0,0 +1,169 @@
#!/usr/bin/python
############################################################
#
# These are all ONLP Enumeration values
# for use with the Python API.
#
############################################################
class Enumeration(object):
@classmethod
def name(klass, value):
for (k, v) in klass.__dict__.iteritems():
if v == value:
return k
return None
# <auto.start.pyenum(ALL).define>
class ONLP_FAN_CAPS(Enumeration):
B2F = (1 << 0)
F2B = (1 << 1)
SET_RPM = (1 << 2)
SET_PERCENTAGE = (1 << 3)
GET_RPM = (1 << 4)
GET_PERCENTAGE = (1 << 5)
class ONLP_FAN_DIR(Enumeration):
B2F = 0
F2B = 1
class ONLP_FAN_MODE(Enumeration):
OFF = 0
SLOW = 1
NORMAL = 2
FAST = 3
MAX = 4
class ONLP_FAN_STATUS(Enumeration):
PRESENT = (1 << 0)
FAILED = (1 << 1)
B2F = (1 << 2)
F2B = (1 << 3)
class ONLP_LED_CAPS(Enumeration):
ON_OFF = (1 << 0)
CHAR = (1 << 1)
RED = (1 << 10)
RED_BLINKING = (1 << 11)
ORANGE = (1 << 12)
ORANGE_BLINKING = (1 << 13)
YELLOW = (1 << 14)
YELLOW_BLINKING = (1 << 15)
GREEN = (1 << 16)
GREEN_BLINKING = (1 << 17)
BLUE = (1 << 18)
BLUE_BLINKING = (1 << 19)
PURPLE = (1 << 20)
PURPLE_BLINKING = (1 << 21)
AUTO = (1 << 22)
AUTO_BLINKING = (1 << 23)
class ONLP_LED_MODE(Enumeration):
OFF = 0
ON = 1
BLINKING = 2
RED = 10
RED_BLINKING = 11
ORANGE = 12
ORANGE_BLINKING = 13
YELLOW = 14
YELLOW_BLINKING = 15
GREEN = 16
GREEN_BLINKING = 17
BLUE = 18
BLUE_BLINKING = 19
PURPLE = 20
PURPLE_BLINKING = 21
AUTO = 22
AUTO_BLINKING = 23
class ONLP_LED_STATUS(Enumeration):
PRESENT = (1 << 0)
FAILED = (1 << 1)
ON = (1 << 2)
class ONLP_OID_TYPE(Enumeration):
SYS = 1
THERMAL = 2
FAN = 3
PSU = 4
LED = 5
MODULE = 6
RTC = 7
class ONLP_PSU_CAPS(Enumeration):
AC = (1 << 0)
DC12 = (1 << 1)
DC48 = (1 << 2)
VIN = (1 << 3)
VOUT = (1 << 4)
IIN = (1 << 5)
IOUT = (1 << 6)
PIN = (1 << 7)
POUT = (1 << 8)
class ONLP_PSU_STATUS(Enumeration):
PRESENT = (1 << 0)
FAILED = (1 << 1)
UNPLUGGED = (1 << 2)
class ONLP_SFP_CONTROL(Enumeration):
RESET = 0
RESET_STATE = 1
RX_LOS = 2
TX_FAULT = 3
TX_DISABLE = 4
TX_DISABLE_CHANNEL = 5
LP_MODE = 6
POWER_OVERRIDE = 7
class ONLP_SFP_CONTROL_FLAG(Enumeration):
RESET = (1 << 0)
RESET_STATE = (1 << 1)
RX_LOS = (1 << 2)
TX_FAULT = (1 << 3)
TX_DISABLE = (1 << 4)
TX_DISABLE_CHANNEL = (1 << 5)
LP_MODE = (1 << 6)
POWER_OVERRIDE = (1 << 7)
class ONLP_STATUS(Enumeration):
OK = 0
E_GENERIC = -1
E_UNSUPPORTED = -10
E_MISSING = -11
E_INVALID = -12
E_INTERNAL = -13
E_PARAM = -14
E_I2C = -15
class ONLP_THERMAL_CAPS(Enumeration):
GET_TEMPERATURE = (1 << 0)
GET_WARNING_THRESHOLD = (1 << 1)
GET_ERROR_THRESHOLD = (1 << 2)
GET_SHUTDOWN_THRESHOLD = (1 << 3)
class ONLP_THERMAL_STATUS(Enumeration):
PRESENT = (1 << 0)
FAILED = (1 << 1)
class ONLP_THERMAL_THRESHOLD(Enumeration):
WARNING_DEFAULT = 45000
ERROR_DEFAULT = 55000
SHUTDOWN_DEFAULT = 60000
# <auto.end.pyenum(ALL).define>

View File

@@ -1,21 +1,21 @@
/************************************************************
* <bsn.cl fy=2014 v=onl>
*
* Copyright 2014, 2015 Big Switch Networks, Inc.
*
*
* Copyright 2014, 2015 Big Switch Networks, Inc.
*
* Licensed under the Eclipse Public License, Version 1.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
*
* http://www.eclipse.org/legal/epl-v10.html
*
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
* either express or implied. See the License for the specific
* language governing permissions and limitations under the
* License.
*
*
* </bsn.cl>
************************************************************
*
@@ -62,3 +62,15 @@ onlp_init(void)
onlp_thermal_init();
return 0;
}
int
onlp_denit(void)
{
#if ONLP_CONFIG_INCLUDE_API_LOCK == 1
onlp_api_lock_denit();
#endif
onlp_json_denit();
return 0;
}

View File

@@ -798,6 +798,7 @@ aim_map_si_t onlp_sfp_control_flag_map[] =
{ "RX_LOS", ONLP_SFP_CONTROL_FLAG_RX_LOS },
{ "TX_FAULT", ONLP_SFP_CONTROL_FLAG_TX_FAULT },
{ "TX_DISABLE", ONLP_SFP_CONTROL_FLAG_TX_DISABLE },
{ "TX_DISABLE_CHANNEL", ONLP_SFP_CONTROL_FLAG_TX_DISABLE_CHANNEL },
{ "LP_MODE", ONLP_SFP_CONTROL_FLAG_LP_MODE },
{ "POWER_OVERRIDE", ONLP_SFP_CONTROL_FLAG_POWER_OVERRIDE },
{ NULL, 0 }
@@ -810,6 +811,7 @@ aim_map_si_t onlp_sfp_control_flag_desc_map[] =
{ "None", ONLP_SFP_CONTROL_FLAG_RX_LOS },
{ "None", ONLP_SFP_CONTROL_FLAG_TX_FAULT },
{ "None", ONLP_SFP_CONTROL_FLAG_TX_DISABLE },
{ "None", ONLP_SFP_CONTROL_FLAG_TX_DISABLE_CHANNEL },
{ "None", ONLP_SFP_CONTROL_FLAG_LP_MODE },
{ "None", ONLP_SFP_CONTROL_FLAG_POWER_OVERRIDE },
{ NULL, 0 }

View File

@@ -45,6 +45,12 @@ onlp_api_lock_init(void)
api_sem__ = os_sem_create_flags(1, OS_SEM_CREATE_F_TRUE_RELATIVE_TIMEOUTS);
}
void
onlp_api_lock_denit(void)
{
os_sem_destroy(api_sem__);
}
void
onlp_api_lock(const char* api)
{
@@ -71,6 +77,12 @@ onlp_api_lock_init(void)
onlp_shlock_global_init();
}
void
onlp_api_lock_denit(void)
{
/* TODO */
}
void
onlp_api_lock(const char* api)
{
@@ -119,5 +131,3 @@ onlp_api_lock_test(void)
}
#endif /* ONLP_CONFIG_INCLUDE_API_LOCK */

View File

@@ -33,6 +33,7 @@
* @brief Initialize the ONLP API lock infrastructure.
*/
void onlp_api_lock_init();
void onlp_api_lock_denit();
/**
* @brief Take the ONLP API lock.

View File

@@ -53,6 +53,8 @@ sff_module_types: &sff_module_types
desc: "100GBASE-LR4"
- 100G_CWDM4:
desc: "100G-CWDM4"
- 100G_PSM4:
desc: "100G-PSM4"
- 40G_BASE_CR4:
desc: "40GBASE-CR4"
- 40G_BASE_SR4:

View File

@@ -144,6 +144,8 @@
(idprom[192] == SFF8636_CC192_100GE_LR4)
#define SFF8636_MEDIA_100GE_CWDM4(idprom) \
(idprom[192] == SFF8636_CC192_100GE_CWDM4)
#define SFF8636_MEDIA_100GE_PSM4(idprom) \
(idprom[192] == SFF8636_CC192_100GE_PSM4)
#define SFF8636_MEDIA_100GE_CR4(idprom) \
(idprom[192] == SFF8636_CC192_100GE_CR4)
#define SFF8636_MEDIA_25GE_CR_S(idprom) \

View File

@@ -102,6 +102,7 @@ typedef enum sff_module_type_e {
SFF_MODULE_TYPE_100G_BASE_SR4,
SFF_MODULE_TYPE_100G_BASE_LR4,
SFF_MODULE_TYPE_100G_CWDM4,
SFF_MODULE_TYPE_100G_PSM4,
SFF_MODULE_TYPE_40G_BASE_CR4,
SFF_MODULE_TYPE_40G_BASE_SR4,
SFF_MODULE_TYPE_40G_BASE_LR4,
@@ -141,6 +142,7 @@ typedef enum sff_module_type_e {
"100G_BASE_SR4", \
"100G_BASE_LR4", \
"100G_CWDM4", \
"100G_PSM4", \
"40G_BASE_CR4", \
"40G_BASE_SR4", \
"40G_BASE_LR4", \

View File

@@ -12,6 +12,7 @@ SFF_MEDIA_TYPE_ENTRY(100G_BASE_CR4, 100GBASE-CR4)
SFF_MEDIA_TYPE_ENTRY(100G_BASE_SR4, 100GBASE-SR4)
SFF_MEDIA_TYPE_ENTRY(100G_BASE_LR4, 100GBASE-LR4)
SFF_MEDIA_TYPE_ENTRY(100G_CWDM4, 100G-CWDM4)
SFF_MEDIA_TYPE_ENTRY(100G_PSM4, 100G-PSM4)
SFF_MEDIA_TYPE_ENTRY(40G_BASE_CR4, 40GBASE-CR4)
SFF_MEDIA_TYPE_ENTRY(40G_BASE_SR4, 40GBASE-SR4)
SFF_MEDIA_TYPE_ENTRY(40G_BASE_LR4, 40GBASE-LR4)
@@ -57,6 +58,7 @@ SFF_MODULE_TYPE_ENTRY(100G_BASE_CR4, 100GBASE-CR4)
SFF_MODULE_TYPE_ENTRY(100G_BASE_SR4, 100GBASE-SR4)
SFF_MODULE_TYPE_ENTRY(100G_BASE_LR4, 100GBASE-LR4)
SFF_MODULE_TYPE_ENTRY(100G_CWDM4, 100G-CWDM4)
SFF_MODULE_TYPE_ENTRY(100G_PSM4, 100G-PSM4)
SFF_MODULE_TYPE_ENTRY(40G_BASE_CR4, 40GBASE-CR4)
SFF_MODULE_TYPE_ENTRY(40G_BASE_SR4, 40GBASE-SR4)
SFF_MODULE_TYPE_ENTRY(40G_BASE_LR4, 40GBASE-LR4)

View File

@@ -76,6 +76,11 @@ sff_module_type_get(const uint8_t* eeprom)
&& SFF8636_MEDIA_100GE_CWDM4(eeprom))
return SFF_MODULE_TYPE_100G_CWDM4;
if (SFF8636_MODULE_QSFP28(eeprom)
&& SFF8636_MEDIA_EXTENDED(eeprom)
&& SFF8636_MEDIA_100GE_PSM4(eeprom))
return SFF_MODULE_TYPE_100G_PSM4;
if (SFF8436_MODULE_QSFP_PLUS_V2(eeprom)
&& SFF8436_MEDIA_40GE_CR4(eeprom))
return SFF_MODULE_TYPE_40G_BASE_CR4;
@@ -241,6 +246,7 @@ sff_media_type_get(sff_module_type_t mt)
case SFF_MODULE_TYPE_100G_BASE_SR4:
case SFF_MODULE_TYPE_100G_BASE_LR4:
case SFF_MODULE_TYPE_100G_CWDM4:
case SFF_MODULE_TYPE_100G_PSM4:
case SFF_MODULE_TYPE_40G_BASE_SR4:
case SFF_MODULE_TYPE_40G_BASE_LR4:
case SFF_MODULE_TYPE_40G_BASE_LM4:
@@ -286,6 +292,7 @@ sff_module_caps_get(sff_module_type_t mt, uint32_t *caps)
case SFF_MODULE_TYPE_100G_BASE_LR4:
case SFF_MODULE_TYPE_100G_BASE_CR4:
case SFF_MODULE_TYPE_100G_CWDM4:
case SFF_MODULE_TYPE_100G_PSM4:
*caps |= SFF_MODULE_CAPS_F_100G;
return 0;
@@ -677,6 +684,7 @@ sff_info_init(sff_info_t* info, sff_module_type_t mt,
case SFF_MODULE_TYPE_100G_BASE_SR4:
case SFF_MODULE_TYPE_100G_BASE_LR4:
case SFF_MODULE_TYPE_100G_CWDM4:
case SFF_MODULE_TYPE_100G_PSM4:
info->sfp_type = SFF_SFP_TYPE_QSFP28;
info->media_type = SFF_MEDIA_TYPE_FIBER;
info->caps = SFF_MODULE_CAPS_F_100G;

View File

@@ -61,6 +61,10 @@
#define SFF_100G_CWDM4_PROPERTIES \
SFF_SFP_TYPE_QSFP28, "QSFP28", SFF_MODULE_TYPE_100G_CWDM4, "100G-CWDM4", SFF_MEDIA_TYPE_FIBER, "Fiber", SFF_MODULE_CAPS_F_100G
#define SFF_100G_PSM4_PROPERTIES \
SFF_SFP_TYPE_QSFP28, "QSFP28", SFF_MODULE_TYPE_100G_PSM4, "100G-PSM4", SFF_MEDIA_TYPE_FIBER, "Fiber", SFF_MODULE_CAPS_F_100G
static sff_db_entry_t sff_database__[] =
{
@@ -1413,6 +1417,35 @@ static sff_db_entry_t sff_database__[] =
},
},
},
{
{
.eeprom = {
0x11, 0x07, 0x00, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0xb8, 0x00, 0x00, 0x85, 0x0b, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x45, 0x26, 0x44, 0xf0, 0x45, 0x63,
0x45, 0x3a, 0x1d, 0xee, 0x1d, 0x88, 0x23, 0x8a, 0x24, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x11, 0xcc, 0x0c, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0x00, 0x02, 0x00,
0x00, 0x00, 0x00, 0x40, 0x49, 0x4e, 0x4e, 0x4f, 0x4c, 0x49, 0x47, 0x48, 0x54, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x00, 0x44, 0x7c, 0x7f, 0x54, 0x52, 0x2d, 0x56, 0x43, 0x31, 0x33, 0x54,
0x2d, 0x4e, 0x30, 0x30, 0x20, 0x20, 0x20, 0x20, 0x30, 0x31, 0x66, 0x58, 0x07, 0xd0, 0x46, 0x33,
0x07, 0x07, 0xff, 0xda, 0x49, 0x4e, 0x47, 0x41, 0x54, 0x36, 0x36, 0x35, 0x30, 0x30, 0x37, 0x39,
0x20, 0x20, 0x20, 0x20, 0x31, 0x36, 0x30, 0x35, 0x31, 0x32, 0x31, 0x39, 0x0c, 0x00, 0x67, 0x57,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
},
.info = {
"INNOLIGHT ",
"TR-VC13T-N00 ",
"INGAT6650079 ",
SFF_100G_PSM4_PROPERTIES,
-1,
},
},
},
#endif /** SFF_CONFIG_INCLUDE_DATABASE */
};

View File

@@ -136,6 +136,7 @@ aim_map_si_t sff_module_type_map[] =
{ "100G_BASE_SR4", SFF_MODULE_TYPE_100G_BASE_SR4 },
{ "100G_BASE_LR4", SFF_MODULE_TYPE_100G_BASE_LR4 },
{ "100G_CWDM4", SFF_MODULE_TYPE_100G_CWDM4 },
{ "100G_PSM4", SFF_MODULE_TYPE_100G_PSM4 },
{ "40G_BASE_CR4", SFF_MODULE_TYPE_40G_BASE_CR4 },
{ "40G_BASE_SR4", SFF_MODULE_TYPE_40G_BASE_SR4 },
{ "40G_BASE_LR4", SFF_MODULE_TYPE_40G_BASE_LR4 },
@@ -172,6 +173,7 @@ aim_map_si_t sff_module_type_desc_map[] =
{ "100GBASE-SR4", SFF_MODULE_TYPE_100G_BASE_SR4 },
{ "100GBASE-LR4", SFF_MODULE_TYPE_100G_BASE_LR4 },
{ "100G-CWDM4", SFF_MODULE_TYPE_100G_CWDM4 },
{ "100G-PSM4", SFF_MODULE_TYPE_100G_PSM4 },
{ "40GBASE-CR4", SFF_MODULE_TYPE_40G_BASE_CR4 },
{ "40GBASE-SR4", SFF_MODULE_TYPE_40G_BASE_SR4 },
{ "40GBASE-LR4", SFF_MODULE_TYPE_40G_BASE_LR4 },

View File

@@ -3,7 +3,7 @@
#
# Inclusive Makefile for the sff module.
#
# Autogenerated 2017-08-22 22:14:08.507022
# Autogenerated 2017-08-31 20:47:10.071123
#
###############################################################################
sff_BASEDIR := $(dir $(abspath $(lastword $(MAKEFILE_LIST))))