@@ -697,16 +697,20 @@ def eeprom(port, dump_dom, namespace):
697697# 'eeprom-hexdump' subcommand
698698@show .command ()
699699@click .option ('-p' , '--port' , metavar = '<port_name>' , help = "Display SFP EEPROM hexdump for port <port_name>" )
700- @click .option ('-n' , '--page' , metavar = '<page_number>' , type = click . IntRange ( 0 , MAX_EEPROM_PAGE ), help = "Display SFP EEEPROM hexdump for <page_number_in_hex>" )
700+ @click .option ('-n' , '--page' , metavar = '<page_number>' , help = "Display SFP EEEPROM hexdump for <page_number_in_hex>" )
701701def eeprom_hexdump (port , page ):
702702 """Display EEPROM hexdump of SFP transceiver(s)"""
703703 if port :
704704 if page is None :
705705 page = 0
706- return_code , output = eeprom_hexdump_single_port (port , page )
706+ else :
707+ page = validate_eeprom_page (page )
708+ return_code , output = eeprom_hexdump_single_port (port , int (str (page ), base = 16 ))
707709 click .echo (output )
708710 sys .exit (return_code )
709711 else :
712+ if page is not None :
713+ page = validate_eeprom_page (page )
710714 logical_port_list = natsorted (platform_sfputil .logical )
711715 lines = []
712716 for logical_port_name in logical_port_list :
@@ -718,6 +722,23 @@ def eeprom_hexdump(port, page):
718722 lines .append (output )
719723 click .echo ('\n ' .join (lines ))
720724
725+ def validate_eeprom_page (page ):
726+ """
727+ Validate input page module EEPROM
728+ Args:
729+ page: str page input by user
730+ Returns:
731+ int page
732+ """
733+ try :
734+ page = int (str (page ), base = 16 )
735+ except ValueError :
736+ click .echo ('Please enter a numeric page number' )
737+ sys .exit (ERROR_NOT_IMPLEMENTED )
738+ if page < 0 or page > MAX_EEPROM_PAGE :
739+ click .echo (f'Error: Invalid page number { page } ' )
740+ sys .exit (ERROR_INVALID_PAGE )
741+ return page
721742
722743def eeprom_hexdump_single_port (logical_port_name , page ):
723744 """
@@ -810,7 +831,7 @@ def eeprom_hexdump_pages_general(logical_port_name, pages, target_page):
810831 tuple(0, dump string) if success else tuple(error_code, error_message)
811832 """
812833 if target_page is not None :
813- lines = [f'EEPROM hexdump for port { logical_port_name } page { target_page } h' ]
834+ lines = [f'EEPROM hexdump for port { logical_port_name } page { target_page :x } h' ]
814835 else :
815836 lines = [f'EEPROM hexdump for port { logical_port_name } ' ]
816837 physical_port = logical_port_to_physical_port_index (logical_port_name )
@@ -851,7 +872,7 @@ def eeprom_hexdump_pages_sff8472(logical_port_name, pages, target_page):
851872 tuple(0, dump string) if success else tuple(error_code, error_message)
852873 """
853874 if target_page is not None :
854- lines = [f'EEPROM hexdump for port { logical_port_name } page { target_page } h' ]
875+ lines = [f'EEPROM hexdump for port { logical_port_name } page { target_page :x } h' ]
855876 else :
856877 lines = [f'EEPROM hexdump for port { logical_port_name } ' ]
857878 physical_port = logical_port_to_physical_port_index (logical_port_name )
@@ -1695,7 +1716,7 @@ def target(port_name, target):
16951716# 'read-eeprom' subcommand
16961717@cli .command ()
16971718@click .option ('-p' , '--port' , metavar = '<logical_port_name>' , help = "Logical port name" , required = True )
1698- @click .option ('-n' , '--page' , metavar = '<page>' , type = click . IntRange ( 0 , MAX_EEPROM_PAGE ), help = "EEPROM page number" , required = True )
1719+ @click .option ('-n' , '--page' , metavar = '<page>' , help = "EEPROM page number in hex " , required = True )
16991720@click .option ('-o' , '--offset' , metavar = '<offset>' , type = click .IntRange (0 , MAX_EEPROM_OFFSET ), help = "EEPROM offset within the page" , required = True )
17001721@click .option ('-s' , '--size' , metavar = '<size>' , type = click .IntRange (1 , MAX_EEPROM_OFFSET + 1 ), help = "Size of byte to be read" , required = True )
17011722@click .option ('--no-format' , is_flag = True , help = "Display non formatted data" )
@@ -1723,6 +1744,8 @@ def read_eeprom(port, page, offset, size, no_format, wire_addr):
17231744 api = sfp .get_xcvr_api ()
17241745 if api is None :
17251746 click .echo ('Error: SFP EEPROM not detected!' )
1747+ if page is not None :
1748+ page = validate_eeprom_page (page )
17261749 if not isinstance (api , sff8472 .Sff8472Api ):
17271750 overall_offset = get_overall_offset_general (api , page , offset , size )
17281751 else :
@@ -1743,7 +1766,7 @@ def read_eeprom(port, page, offset, size, no_format, wire_addr):
17431766# 'write-eeprom' subcommand
17441767@cli .command ()
17451768@click .option ('-p' , '--port' , metavar = '<logical_port_name>' , help = "Logical port name" , required = True )
1746- @click .option ('-n' , '--page' , metavar = '<page>' , type = click . IntRange ( 0 , MAX_EEPROM_PAGE ), help = "EEPROM page number" , required = True )
1769+ @click .option ('-n' , '--page' , metavar = '<page>' , help = "EEPROM page number in hex " , required = True )
17471770@click .option ('-o' , '--offset' , metavar = '<offset>' , type = click .IntRange (0 , MAX_EEPROM_OFFSET ), help = "EEPROM offset within the page" , required = True )
17481771@click .option ('-d' , '--data' , metavar = '<data>' , help = "Hex string EEPROM data" , required = True )
17491772@click .option ('--wire-addr' , help = "Wire address of sff8472" )
@@ -1777,7 +1800,8 @@ def write_eeprom(port, page, offset, data, wire_addr, verify):
17771800 if api is None :
17781801 click .echo ('Error: SFP EEPROM not detected!' )
17791802 sys .exit (EXIT_FAIL )
1780-
1803+ if page is not None :
1804+ page = validate_eeprom_page (page )
17811805 if not isinstance (api , sff8472 .Sff8472Api ):
17821806 overall_offset = get_overall_offset_general (api , page , offset , len (bytes ))
17831807 else :
@@ -1813,11 +1837,11 @@ def get_overall_offset_general(api, page, offset, size):
18131837 """
18141838 if api .is_flat_memory ():
18151839 if page != 0 :
1816- raise ValueError (f'Invalid page number { page } , only page 0 is supported' )
1840+ raise ValueError (f'Invalid page number { page :x } h , only page 0 is supported' )
18171841
18181842 if page != 0 :
18191843 if offset < MIN_OFFSET_FOR_NON_PAGE0 :
1820- raise ValueError (f'Invalid offset { offset } for page { page } , valid range: [128, 255 ]' )
1844+ raise ValueError (f'Invalid offset { offset } for page { page :x } h , valid range: [80h, FFh ]' )
18211845
18221846 if size + offset - 1 > MAX_EEPROM_OFFSET :
18231847 raise ValueError (f'Invalid size { size } , valid range: [1, { 255 - offset + 1 } ]' )
0 commit comments