Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[sonic_fw]: Add firmware management api base #30

Closed
wants to merge 1 commit into from
Closed
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
1 change: 1 addition & 0 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
'sonic_platform_base',
'sonic_psu',
'sonic_sfp',
'sonic_fw'
],
classifiers=[
'Development Status :: 3 - Alpha',
Expand Down
Empty file added sonic_fw/__init__.py
Empty file.
63 changes: 63 additions & 0 deletions sonic_fw/fw_manage_base.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
#!/usr/bin/env python
#
# fw_manage_base.py
#
# Abstract base class for implementing platform-specific
# Firmware management functionality for SONiC
#

try:
import abc
except ImportError as e:
raise ImportError(str(e) + " - required module not found")


class FwBase(object):
__metaclass__ = abc.ABCMeta

@abc.abstractmethod
def get_module_list(self):
"""
Retrieves the list of module that available on the device

:return: A list : the list of module that available on the device
"""
return []

@abc.abstractmethod
def get_fw_version(self, module_name):
"""
Retrieves the firmware version of module

:param module_name: A string, module name
:return: A Dict, firmware version object
- Example of return object of module that doesn't have sub modules
{
"module_name": "BIOS",
"fw_version": "1.0.0"
"has_submodule" = False
}
- Example of return object of module that have sub modules
{
"module_name": "CPLD",
"fw_version": {
"CPLD1" : "1.0.0",
"CPLD2" : "1.1.0"
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

in this case, i feel we should have CPLD1, CPLD2 as module name, each module will have only one version.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In that case,the list of supported module will be ["BIOS", "CPLD1", "CPLD2"] instead of ["BIOS", "CPLD"] and get_fw_version function should return only version string

Is that good?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yes

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

can you update the comments?

}
"has_submodule" = True
}
"""
return {}

@abc.abstractmethod
def install(self, module_name, image_path):
"""
Install firmware to module

:param module_name: A string, name of module that need to install new firmware
:param image_path: A string, path to firmware image
:return: Boolean,
- True if install process is finished without error
- False if install process is failed
"""
return False