Esempio n. 1
0
    raise ImportError("%s - required module not found" % str(e))

VERSION = '2.0'

SYSLOG_IDENTIFIER = "sfputil"

PLATFORM_SPECIFIC_MODULE_NAME = "sfputil"
PLATFORM_SPECIFIC_CLASS_NAME = "SfpUtil"

# Global platform-specific sfputil class instance
platform_sfputil = None
PLATFORM_JSON = 'platform.json'
PORT_CONFIG_INI = 'port_config.ini'

# Global logger instance
log = logger.Logger(SYSLOG_IDENTIFIER)

# ========================== Methods for printing ==========================


# Convert arraw of raw bytes into pretty-printed string
def raw_bytes_to_string_pretty(raw_bytes):
    hexstr = ""

    for i in range(0, len(raw_bytes)):
        if i > 0 and (i % 8) == 0:
            hexstr += " "

        if i > 0 and (i % 16) == 0:
            hexstr += "\n"
Esempio n. 2
0
COPPER_PORT_END = 48
SFP_PORT_START = 49
SFP_PORT_END = 52
PORT_END = 52

# Device counts
MAX_7215_FAN_DRAWERS = 2
MAX_7215_FANS_PER_DRAWER = 1
MAX_7215_PSU = 2
MAX_7215_THERMAL = 6

# Temp - disable these to help with early debug
MAX_7215_COMPONENT = 2

SYSLOG_IDENTIFIER = "chassis"
sonic_logger = logger.Logger(SYSLOG_IDENTIFIER)


class Chassis(ChassisBase):
    """
    Nokia platform-specific Chassis class
        Derived from Dell S6000 platform.
        customized for the 7215 platform.
    """
    def __init__(self):
        ChassisBase.__init__(self)
        self.system_led_supported_color = [
            'off', 'amber', 'green', 'amber_blink', 'green_blink'
        ]
        # Port numbers for SFP List Initialization
        self.COPPER_PORT_START = COPPER_PORT_START
Esempio n. 3
0
# definitions of the offset with width accomodated for values
# of MUX register specs of upper page 0x04 starting at 640
# info eeprom for Y Cable
Y_CABLE_IDENTFIER_LOWER_PAGE = 0
Y_CABLE_IDENTFIER_UPPER_PAGE = 128
Y_CABLE_DETERMINE_CABLE_READ_SIDE = 640
Y_CABLE_CHECK_LINK_ACTIVE = 641
Y_CABLE_SWITCH_MUX_DIRECTION = 642
Y_CABLE_MUX_DIRECTION = 644
Y_CABLE_ACTIVE_TOR_INDICATOR = 645
Y_CABLE_MANUAL_SWITCH_COUNT = 669

SYSLOG_IDENTIFIER = "sonic_y_cable"

# Global logger instance for helper functions and classes to log
helper_logger = logger.Logger(SYSLOG_IDENTIFIER)

# Global platform_chassis instance to call get_sfp required for read/write eeprom
platform_chassis = None

try:
    platform_chassis = sonic_platform.platform.Platform().get_chassis()
    helper_logger.log_info("chassis loaded {}".format(platform_chassis))
except Exception as e:
    helper_logger.log_warning("Failed to load chassis due to {}".format(
        repr(e)))


def toggle_mux_to_torA(physical_port):
    """
    This API specifically does a hard switch toggle of the Y cable's MUX regardless of link state to
packet is trapped to the CPU. In this case, we should ping the inner
destination IP to trigger the process of obtaining neighbor information
"""
import subprocess
import time

from datetime import datetime
from ipaddress import ip_interface
from pyroute2 import IPRoute
from scapy.layers.inet import IP
from scapy.layers.inet6 import IPv6
from scapy.sendrecv import AsyncSniffer
from swsssdk import ConfigDBConnector, SonicV2Connector
from sonic_py_common import logger as log

logger = log.Logger()

STATE_DB = 'STATE_DB'
PORTCHANNEL_INTERFACE_TABLE = 'PORTCHANNEL_INTERFACE'
TUNNEL_TABLE = 'TUNNEL'
PEER_SWITCH_TABLE = 'PEER_SWITCH'
INTF_TABLE_TEMPLATE = 'INTERFACE_TABLE|{}|{}'
STATE_KEY = 'state'
TUNNEL_TYPE_KEY = 'tunnel_type'
DST_IP_KEY = 'dst_ip'
ADDRESS_IPV4_KEY = 'address_ipv4'
IPINIP_TUNNEL = 'ipinip'

RTM_NEWLINK = 'RTM_NEWLINK'

Esempio n. 5
0
    from sonic_platform.eeprom import Eeprom
except ImportError as e:
    raise ImportError(str(e) + "- required module not found")

if sys.version_info[0] < 3:
    import commands as cmd
else:
    import subprocess as cmd

smbus_present = 1
try:
    import smbus
except ImportError as e:
    smbus_present = 0

sonic_logger = logger.Logger('psu')


class Psu(PsuBase):
    """Nokia platform-specific PSU class for 7215 """
    def __init__(self, psu_index):
        PsuBase.__init__(self)
        # PSU is 1-based in Nokia platforms
        self.index = psu_index + 1
        self._fan_list = []

        # PSU eeprom
        self.eeprom = Eeprom(is_psu=True, psu_index=self.index)

    def get_name(self):
        """
Esempio n. 6
0
# SDK sniffer file path and name
SDK_SNIFFER_TARGET_PATH = '/var/log/mellanox/sniffer/'
SDK_SNIFFER_FILENAME_PREFIX = 'sx_sdk_sniffer_'
SDK_SNIFFER_FILENAME_EXT = '.pcap'

# Supervisor config file path
TMP_SNIFFER_CONF_FILE = '/tmp/tmp.conf'
CONTAINER_NAME = 'syncd'
SNIFFER_CONF_FILE = '/etc/supervisor/conf.d/mlnx_sniffer.conf'
SNIFFER_CONF_FILE_IN_CONTAINER = CONTAINER_NAME + ':' + SNIFFER_CONF_FILE
# Command to restart swss service
COMMAND_RESTART_SWSS = 'systemctl restart swss.service'


# Global logger instance
log = logger.Logger(SNIFFER_SYSLOG_IDENTIFIER)

# generate sniffer target file name include a time stamp.
def sniffer_filename_generate(path, filename_prefix, filename_ext):
    time_stamp = time.strftime("%Y%m%d%H%M%S")
    filename = path + filename_prefix + time_stamp + filename_ext
    return filename


# write environment variable in local tmp file for sniffer
def env_variable_write(env_variable_string):
    conf_file = open(TMP_SNIFFER_CONF_FILE, 'a')
    if os.path.getsize(TMP_SNIFFER_CONF_FILE) == 0:
        conf_file.write('[program:syncd]\n')
    conf_file.write(env_variable_string)
    conf_file.close()
#############################################################################
# Nokia
#
# Module contains an implementation of SONiC Platform Base API and
# provides the Fan Drawer status which is available in the platform
#
#############################################################################

try:
    from sonic_platform_base.fan_drawer_base import FanDrawerBase
    from sonic_py_common import logger
except ImportError as e:
    raise ImportError(str(e) + "- required module not found")

sonic_logger = logger.Logger('fan_drawer')


class NokiaFanDrawer(FanDrawerBase):
    def __init__(self, index):
        super(NokiaFanDrawer, self).__init__()
        self._index = index + 1
        self._led = None

    def get_index(self):
        return self._index

    def get_presence(self):
        return self._fan_list[0].get_presence()

    def get_model(self):
        """
Esempio n. 8
0
IO_TYPE_WATCHDOG = 'W' << 8

WDR_INT = IO_READ | IO_SIZE_INT | IO_TYPE_WATCHDOG
""" Watchdog ioctl commands """
WDIOC_SETOPTIONS = 4 | WDR_INT
WDIOC_KEEPALIVE = 5 | WDR_INT
WDIOC_GETTIMEOUT = 7 | WDR_INT
""" Watchdog status constants """
WDIOS_DISABLECARD = 0x0001
WDIOS_ENABLECARD = 0x0002
""" watchdog sysfs """
WD_SYSFS_PATH = "/sys/class/watchdog/"

WD_COMMON_ERROR = -1

sonic_logger = logger.Logger()


class WatchdogImplBase(WatchdogBase):
    """
    Base class that implements common logic for interacting
    with watchdog using ioctl commands
    """
    def __init__(self, wd_device_path):
        """
        Open a watchdog handle
        @param wd_device_path Path to watchdog device
        """

        self.watchdog_path = wd_device_path
        self.watchdog = os.open(self.watchdog_path, os.O_WRONLY)
Esempio n. 9
0
#!/usr/bin/env python3

import subprocess

from sonic_py_common import logger
from swsscommon import swsscommon

log = logger.Logger('mark_dhcp_packet')


class MarkDhcpPacket(object):
    """
    Class used to configure dhcp packet mark in ebtables
    """
    def __init__(self):
        self.config_db_connector = None
        self.state_db_connector = None

    @property
    def config_db(self):
        """
        Returns config DB connector.
        Initializes the connector during the first call
        """
        if self.config_db_connector is None:
            self.config_db_connector = swsscommon.ConfigDBConnector()
            self.config_db_connector.connect()

        return self.config_db_connector

    @property
Esempio n. 10
0
########################################################################
# Nokia IXS7215
#
# Module contains an implementation of SONiC Platform Base API and
# provides the Thermals' information which are available in the platform
#
########################################################################

try:
    import os
    from sonic_platform_base.thermal_base import ThermalBase
    from sonic_py_common import logger
except ImportError as e:
    raise ImportError(str(e) + "- required module not found")

sonic_logger = logger.Logger('thermal')


class Thermal(ThermalBase):
    """Nokia platform-specific Thermal class"""

    I2C_CLASS_DIR = "/sys/class/i2c-adapter/"
    I2C_DEV_MAPPING = (['i2c-0/0-004a/hwmon/',
                        1], ['i2c-0/0-004b/hwmon/',
                             1], ['i2c-0/0-002e/',
                                  1], ['i2c-0/0-002e/',
                                       2], ['i2c-0/0-002e/', 3])

    HWMON_CLASS_DIR = "/sys/class/hwmon/"

    THERMAL_NAME = ("PCB PHY", "PCB MAC", "ADT7473-CPU", "ADT7473-LOC",
Esempio n. 11
0
#!/usr/bin/env python3

import time

from sonic_py_common import logger as log
from swsscommon.swsscommon import ConfigDBConnector, DBConnector, FieldValuePairs, ProducerStateTable, SonicV2Connector, Table
from swsscommon.swsscommon import APPL_DB, STATE_DB

logger = log.Logger('write_standby')

REDIS_SOCK_PATH = '/var/run/redis/redis.sock'


def create_fvs(**kwargs):
    return FieldValuePairs(list(kwargs.items()))


class MuxStateWriter(object):
    """
    Class used to write standby mux state to APP DB
    """
    def __init__(self):
        self.config_db_connector = None
        self.appl_db_connector = None
        self.state_db_connector = None
        self.asic_db_connector = None

    @property
    def config_db(self):
        """
        Returns config DB connector.
Esempio n. 12
0
    import os
    from sonic_platform_base.fan_base import FanBase
    from sonic_py_common import logger
except ImportError as e:
    raise ImportError(str(e) + "- required module not found")

smbus_present = 1
try:
    import smbus
except ImportError as e:
    smbus_present = 0

MAX_IXS7215_FAN_SPEED = 19000
WORKING_IXS7215_FAN_SPEED = 960

sonic_logger = logger.Logger('fan')


class Fan(FanBase):
    """Nokia platform-specific Fan class"""
    def __init__(self, fan_index, fan_drawer, psu_fan=False, dependency=None):
        self.is_psu_fan = psu_fan
        ADT7473_DIR = "/sys/bus/i2c/devices/0-002e/"

        if not self.is_psu_fan:
            # Fan is 1-based in Nokia platforms
            self.index = fan_index + 1
            self.fan_drawer = fan_drawer
            self.set_fan_speed_reg = ADT7473_DIR + "pwm{}".format(self.index)
            self.get_fan_speed_reg = ADT7473_DIR + "fan{}_input".format(
                self.index)
Esempio n. 13
0
import os
import pkgutil
import importlib

from sonic_py_common import logger

# Constants ====================================================================
PDDF_SUPPORT_FILE = '/usr/share/sonic/platform/pddf_support'

# Helper classs

log = logger.Logger()


class UtilHelper(object):
    def __init__(self):
        pass

    def load_plugins(self, plugins_namespace):
        """ Discover and load CLI plugins. Yield a plugin module. """
        def iter_namespace(ns_pkg):
            return pkgutil.iter_modules(ns_pkg.__path__, ns_pkg.__name__ + ".")

        for _, module_name, ispkg in iter_namespace(plugins_namespace):
            if ispkg:
                continue
            log.log_debug('importing plugin: {}'.format(module_name))
            try:
                module = importlib.import_module(module_name)
            except Exception as err:
                log.log_error('failed to import plugin {}: {}'.format(
from sonic_platform_base.sonic_thermal_control.thermal_action_base import ThermalPolicyActionBase
from sonic_platform_base.sonic_thermal_control.thermal_json_object import thermal_json_object

from sonic_py_common import logger

sonic_logger = logger.Logger('thermal_actions')


class SetFanSpeedAction(ThermalPolicyActionBase):
    """
    Base thermal action class to set speed for fans
    """
    # JSON field definition
    JSON_FIELD_SPEED = 'speed'
    JSON_FIELD_DEFAULT_SPEED = 'default_speed'
    JSON_FIELD_HIGHTEMP_SPEED = 'hightemp_speed'

    def __init__(self):
        """
        Constructor of SetFanSpeedAction
        """
        self.default_speed = 50
        self.hightemp_speed = 100
        self.speed = self.default_speed

    def load_from_json(self, json_obj):
        """
        Construct SetFanSpeedAction via JSON. JSON example:
            {
                "type": "fan.all.set_speed"
                "speed": "100"
Esempio n. 15
0
try:
    from sonic_platform_base.sonic_eeprom.eeprom_base import EepromDecoder
    from sonic_platform_base.sonic_eeprom.eeprom_tlvinfo import TlvInfoDecoder
    from sonic_py_common import logger
except ImportError as e:
    raise ImportError(str(e) + "- required module not found")


# PSU eeprom fields in format required by EepromDecoder
psu_eeprom_format = [
    ('Model', 's', 15), ('burn', 'x', 1),
    ('Part Number', 's', 14), ('burn', 'x', 40),
    ('Serial Number', 's', 11)
    ]

sonic_logger = logger.Logger('eeprom')


class Eeprom(TlvInfoDecoder):
    """Nokia platform-specific EEPROM class"""

    I2C_DIR = "/sys/class/i2c-adapter/"

    def __init__(self, is_psu=False, psu_index=0, is_fan=False, fan_index=0):
        self.is_psu_eeprom = is_psu
        self.is_fan_eeprom = is_fan
        self.is_sys_eeprom = not (is_psu | is_fan)

        if self.is_sys_eeprom:
            self.start_offset = 0
            self.eeprom_path = self.I2C_DIR + "i2c-0/0-0053/eeprom"