Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 17 additions & 17 deletions sonic_platform_base/sonic_xcvr/codes/public/sff8436.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,24 +15,24 @@ class Sff8436Codes(Sff8024):

POWER_CLASSES = {
0: "Power Class 1 Module (1.5W max. Power consumption)",
64: "Power Class 2 Module (2.0W max. Power consumption)",
128: "Power Class 3 Module (2.5W max. Power consumption)",
192: "Power Class 4 Module (3.5W max. Power consumption)",
1: "Power Class 2 Module (2.0W max. Power consumption)",
2: "Power Class 3 Module (2.5W max. Power consumption)",
3: "Power Class 4 Module (3.5W max. Power consumption)",
}

CLEI_CODE = {
0: "No CLEI code present in Page 02h",
16: "CLEI code present in Page 02h"
1: "CLEI code present in Page 02h"
}

CDR_TX = {
0: "No CDR in TX",
8: "CDR present in TX"
1: "CDR present in TX"
}

CDR_RX = {
0: "No CDR in RX",
4: "CDR present in RX"
1: "CDR present in RX"
}

ETHERNET_10_40G_COMPLIANCE = {
Expand Down Expand Up @@ -65,20 +65,20 @@ class Sff8436Codes(Sff8024):
}

FIBRE_CHANNEL_LINK_LENGTH = {
8: "Medium (M)",
16: "Long distance (L)",
32: "Intermediate distance (I)",
64: "Short distance (S)",
128: "Very long distance (V)"
1: "Medium (M)",
2: "Long distance (L)",
4: "Intermediate distance (I)",
8: "Short distance (S)",
16: "Very long distance (V)"
}

FIBRE_CHANNEL_TRANSMITTER_TECH = {
16: "Longwave Laser (LL)",
32: "Shortwave laser w OFC (SL)",
64: "Shortwave laser w/o OFC (SN)",
128: "Electrical intra-enclosure",
256: "Electrical inter-enclosure (EN)",
512: "Longwave laser (LC)"
1: "Longwave Laser (LL)",
2: "Shortwave laser w OFC (SL)",
4: "Shortwave laser w/o OFC (SN)",
8: "Electrical intra-enclosure",
16: "Electrical inter-enclosure (EN)",
32: "Longwave laser (LC)"
}

FIBRE_CHANNEL_TRANSMISSION_MEDIA = {
Expand Down
38 changes: 19 additions & 19 deletions sonic_platform_base/sonic_xcvr/codes/public/sff8472.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,15 +37,15 @@ class Sff8472Codes(Sff8024):
192: "Power Class 4 Module (3.5W max.)",
193: "Power Class 5 Module (4.0W max.)",
194: "Power Class 6 Module (4.5W max.)",
197: "Power Class 7 Module (5.0W max.)",
195: "Power Class 7 Module (5.0W max.)",
32: "Power Class 8 Module",
}

ETHERNET_10G_COMPLIANCE = {
16: "10GBASE-SR",
32: "10GBASE-LR",
64: "10GBASE-LRM",
128: "10GBASE-ER",
1: "10GBASE-SR",
2: "10GBASE-LR",
4: "10GBASE-LRM",
8: "10GBASE-ER",
}

INFINIBAND_COMPLIANCE = {
Expand All @@ -56,8 +56,8 @@ class Sff8472Codes(Sff8024):
}

ESCON_COMPLIANCE = {
128: "ESCON MMF, 1310nm LED",
64: "ESCON SMF, 1310nm Laser"
2: "ESCON MMF, 1310nm LED",
1: "ESCON SMF, 1310nm Laser"
}

SONET_COMPLIANCE = {
Expand Down Expand Up @@ -87,21 +87,21 @@ class Sff8472Codes(Sff8024):
}

FIBRE_CHANNEL_LINK_LENGTH = {
8: "Medium (M)",
16: "Long distance (L)",
32: "Intermediate distance (I)",
64: "Short distance (S)",
128: "Very long distance (V)"
1: "Medium (M)",
2: "Long distance (L)",
4: "Intermediate distance (I)",
8: "Short distance (S)",
16: "Very long distance (V)"
}

FIBRE_CHANNEL_TRANSMITTER_TECH = {
16: "Longwave Laser (LL)",
32: "Shortwave laser w OFC (SL)",
64: "Shortwave laser w/o OFC (SN)",
128: "Electrical intra-enclosure (EL)",
256: "Electrical inter-enclosure (EL)",
512: "Longwave laser (LC)",
1024: "Shortwave laser, linear RX (SA)"
1: "Longwave Laser (LL)",
2: "Shortwave laser w OFC (SL)",
4: "Shortwave laser w/o OFC (SN)",
8: "Electrical intra-enclosure (EL)",
16: "Electrical inter-enclosure (EL)",
32: "Longwave laser (LC)",
64: "Shortwave laser, linear RX (SA)"
}

SFP_CABLE_TECH = {
Expand Down
14 changes: 7 additions & 7 deletions sonic_platform_base/sonic_xcvr/codes/public/sff8636.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ class Sff8636Codes(Sff8024):
192: "Power Class 4 Module (3.5W max.)",
193: "Power Class 5 Module (4.0W max.)",
194: "Power Class 6 Module (4.5W max.)",
197: "Power Class 7 Module (5.0W max.)",
195: "Power Class 7 Module (5.0W max.)",
32: "Power Class 8 Module",
}

Expand Down Expand Up @@ -91,12 +91,12 @@ class Sff8636Codes(Sff8024):
}

FIBRE_CHANNEL_TRANSMITTER_TECH = {
16: "Longwave Laser (LL)",
32: "Shortwave laser w OFC (SL)",
64: "Shortwave laser w/o OFC (SN)",
128: "Electrical intra-enclosure",
256: "Electrical inter-enclosure (EN)",
512: "Longwave laser (LC)"
1: "Longwave Laser (LL)",
2: "Shortwave laser w OFC (SL)",
4: "Shortwave laser w/o OFC (SN)",
8: "Electrical intra-enclosure",
16: "Electrical inter-enclosure (EN)",
32: "Longwave laser (LC)"
}

FIBRE_CHANNEL_TRANSMISSION_MEDIA = {
Expand Down
6 changes: 3 additions & 3 deletions sonic_platform_base/sonic_xcvr/mem_maps/public/sff8436.py
Original file line number Diff line number Diff line change
Expand Up @@ -48,8 +48,8 @@ def __init__(self, codes):
*(RegBitField("%s_%d" % (consts.FIBRE_CHANNEL_LINK_LENGTH_FIELD, bit), bit) for bit in range(3, 8))
),
CodeRegField(consts.FIBRE_CHANNEL_TRANSMITTER_TECH_FIELD, self.get_addr(0, 135), self.codes.FIBRE_CHANNEL_TRANSMITTER_TECH,
*(RegBitField("%s_%d" % (consts.FIBRE_CHANNEL_TRANSMITTER_TECH_FIELD, bit), bit) for bit in list(range(0,3)) + list(range(8, 16))),
size=2, format="<H"
*(RegBitField("%s_%d" % (consts.FIBRE_CHANNEL_TRANSMITTER_TECH_FIELD, bit), bit) for bit in range(4, 11)),
size=2, format=">H"
),
CodeRegField(consts.FIBRE_CHANNEL_TRANSMISSION_MEDIA_FIELD, self.get_addr(0, 137), self.codes.FIBRE_CHANNEL_TRANSMISSION_MEDIA),
CodeRegField(consts.FIBRE_CHANNEL_SPEED_FIELD, self.get_addr(0, 138), self.codes.FIBRE_CHANNEL_SPEED),
Expand Down Expand Up @@ -139,4 +139,4 @@ def __init__(self, codes):
)

def get_addr(self, page, offset, page_size=128):
return page * page_size + offset
return page * page_size + offset
4 changes: 2 additions & 2 deletions sonic_platform_base/sonic_xcvr/mem_maps/public/sff8636.py
Original file line number Diff line number Diff line change
Expand Up @@ -58,8 +58,8 @@ def __init__(self, codes):
*(RegBitField("%s_%d" % (consts.FIBRE_CHANNEL_LINK_LENGTH_FIELD, bit), bit) for bit in range(3, 8))
),
CodeRegField(consts.FIBRE_CHANNEL_TRANSMITTER_TECH_FIELD, self.get_addr(0, 135), self.codes.FIBRE_CHANNEL_TRANSMITTER_TECH,
*(RegBitField("%s_%d" % (consts.FIBRE_CHANNEL_TRANSMITTER_TECH_FIELD, bit), bit) for bit in list(range(0,3)) + list(range(8, 16))),
size=2, format="<H"
*(RegBitField("%s_%d" % (consts.FIBRE_CHANNEL_TRANSMITTER_TECH_FIELD, bit), bit) for bit in range(4, 11)),
size=2, format=">H"
),
CodeRegField(consts.FIBRE_CHANNEL_TRANSMISSION_MEDIA_FIELD, self.get_addr(0, 137), self.codes.FIBRE_CHANNEL_TRANSMISSION_MEDIA),
CodeRegField(consts.FIBRE_CHANNEL_SPEED_FIELD, self.get_addr(0, 138), self.codes.FIBRE_CHANNEL_SPEED),
Expand Down
31 changes: 31 additions & 0 deletions tests/sonic_xcvr/test_sff8436.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,12 @@
from mock import MagicMock, patch
import pytest


from sonic_platform_base.sonic_xcvr.api.public.sff8436 import Sff8436Api
from sonic_platform_base.sonic_xcvr.codes.public.sff8436 import Sff8436Codes
from sonic_platform_base.sonic_xcvr.mem_maps.public.sff8436 import Sff8436MemMap
from sonic_platform_base.sonic_xcvr.xcvr_eeprom import XcvrEeprom
from sonic_platform_base.sonic_xcvr.fields import consts

class TestSff8436(object):
codes = Sff8436Codes
Expand Down Expand Up @@ -52,6 +55,33 @@ def test_api(self):
self.api.get_lpmode_support()
self.api.get_power_override_support()

@pytest.mark.parametrize("mock_response, expected", [
(bytearray([0x0]), "Power Class 1 Module (1.5W max. Power consumption)"),
(bytearray([0x40]), "Power Class 2 Module (2.0W max. Power consumption)"),
(bytearray([0x80]), "Power Class 3 Module (2.5W max. Power consumption)"),
(bytearray([0xC0]), "Power Class 4 Module (3.5W max. Power consumption)")
])
def test_power_class(self, mock_response, expected):
self.api.xcvr_eeprom.reader = MagicMock()
self.api.xcvr_eeprom.reader.return_value = mock_response
result = self.api.xcvr_eeprom.read(consts.POWER_CLASS_FIELD)
assert result == expected


@pytest.mark.parametrize("mock_response, expected", [
(bytearray([0x02, 0x0]), "Longwave laser (LC)"),
(bytearray([0x01, 0x0]), "Electrical inter-enclosure (EN)"),
(bytearray([0x0, 0x80]), "Electrical intra-enclosure"),
(bytearray([0x0, 0x40]), "Shortwave laser w/o OFC (SN)"),
(bytearray([0x0, 0x20]), "Shortwave laser w OFC (SL)"),
(bytearray([0x0, 0x10]), "Longwave Laser (LL)")
])
def test_fiber_channel_transmitter_tech(self, mock_response, expected):
self.api.xcvr_eeprom.reader = MagicMock()
self.api.xcvr_eeprom.reader.return_value = mock_response
result = self.api.xcvr_eeprom.read(consts.FIBRE_CHANNEL_TRANSMITTER_TECH_FIELD)
assert result == expected

def test_is_copper(self):
with patch.object(self.api, 'xcvr_eeprom') as mock_eeprom:
mock_eeprom.read = MagicMock()
Expand All @@ -73,3 +103,4 @@ def test_simulate_copper(self):
assert not self.api.get_rx_power_support()
assert not self.api.get_temperature_support()
assert not self.api.get_voltage_support()

16 changes: 16 additions & 0 deletions tests/sonic_xcvr/test_sff8472.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
from mock import MagicMock
import sys
import pytest

from sonic_platform_base.sonic_xcvr.api.public.sff8472 import Sff8472Api
from sonic_platform_base.sonic_xcvr.codes.public.sff8472 import Sff8472Codes
Expand Down Expand Up @@ -170,3 +171,18 @@ def test_rx_power(self):
}
decoded = rx_power_field.decode(data, **deps)
assert decoded == 209.713

@pytest.mark.parametrize("mock_response, expected", [
(bytearray([0x04, 0x0]), "Shortwave laser, linear RX (SA)"),
(bytearray([0x02, 0x0]), "Longwave laser (LC)"),
(bytearray([0x01, 0x0]), "Electrical inter-enclosure (EL)"),
(bytearray([0x0, 0x80]), "Electrical intra-enclosure (EL)"),
(bytearray([0x0, 0x40]), "Shortwave laser w/o OFC (SN)"),
(bytearray([0x0, 0x20]), "Shortwave laser w OFC (SL)"),
(bytearray([0x0, 0x10]), "Longwave Laser (LL)")
])
def test_fiber_channel_transmitter_tech(self, mock_response, expected):
self.api.xcvr_eeprom.reader = MagicMock()
self.api.xcvr_eeprom.reader.return_value = mock_response
result = self.api.xcvr_eeprom.read(consts.FIBRE_CHANNEL_TRANSMITTER_TECH_FIELD)
assert result == expected
34 changes: 34 additions & 0 deletions tests/sonic_xcvr/test_sff8636.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,12 @@
from mock import MagicMock, patch
import pytest


from sonic_platform_base.sonic_xcvr.api.public.sff8636 import Sff8636Api
from sonic_platform_base.sonic_xcvr.codes.public.sff8636 import Sff8636Codes
from sonic_platform_base.sonic_xcvr.mem_maps.public.sff8636 import Sff8636MemMap
from sonic_platform_base.sonic_xcvr.xcvr_eeprom import XcvrEeprom
from sonic_platform_base.sonic_xcvr.fields import consts

class TestSff8636(object):
codes = Sff8636Codes
Expand Down Expand Up @@ -52,6 +55,36 @@ def test_api(self):
self.api.get_lpmode_support()
self.api.get_power_override_support()

@pytest.mark.parametrize("mock_response, expected", [
(bytearray([0x0]), "Power Class 1 Module (1.5W max.)"),
(bytearray([0x40]), "Power Class 2 Module (2.0W max.)"),
(bytearray([0x80]), "Power Class 3 Module (2.5W max.)"),
(bytearray([0xC0]), "Power Class 4 Module (3.5W max.)"),
(bytearray([0xC1]), "Power Class 5 Module (4.0W max.)"),
(bytearray([0xC2]), "Power Class 6 Module (4.5W max.)"),
(bytearray([0xC3]), "Power Class 7 Module (5.0W max.)"),
(bytearray([0x20]), "Power Class 8 Module")
])
def test_power_class(self, mock_response, expected):
self.api.xcvr_eeprom.reader = MagicMock()
self.api.xcvr_eeprom.reader.return_value = mock_response
result = self.api.xcvr_eeprom.read(consts.POWER_CLASS_FIELD)
assert result == expected

@pytest.mark.parametrize("mock_response, expected", [
(bytearray([0x02, 0x0]), "Longwave laser (LC)"),
(bytearray([0x01, 0x0]), "Electrical inter-enclosure (EN)"),
(bytearray([0x0, 0x80]), "Electrical intra-enclosure"),
(bytearray([0x0, 0x40]), "Shortwave laser w/o OFC (SN)"),
(bytearray([0x0, 0x20]), "Shortwave laser w OFC (SL)"),
(bytearray([0x0, 0x10]), "Longwave Laser (LL)")
])
def test_fiber_channel_transmitter_tech(self, mock_response, expected):
self.api.xcvr_eeprom.reader = MagicMock()
self.api.xcvr_eeprom.reader.return_value = mock_response
result = self.api.xcvr_eeprom.read(consts.FIBRE_CHANNEL_TRANSMITTER_TECH_FIELD)
assert result == expected

def test_is_copper(self):
with patch.object(self.api, 'xcvr_eeprom') as mock_eeprom:
mock_eeprom.read = MagicMock()
Expand All @@ -71,3 +104,4 @@ def test_simulate_copper(self):
assert not self.api.get_rx_power_support()
assert not self.api.get_temperature_support()
assert not self.api.get_voltage_support()