@@ -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,27 +722,24 @@ def eeprom_hexdump(port, page):
718722 lines .append (output )
719723 click .echo ('\n ' .join (lines ))
720724
721-
722725def validate_eeprom_page (page ):
723726 """
724727 Validate input page module EEPROM
725728 Args:
726729 page: str page input by user
727-
728730 Returns:
729731 int page
730732 """
731733 try :
732- page = int (page )
734+ page = int (str ( page ), base = 16 )
733735 except ValueError :
734736 click .echo ('Please enter a numeric page number' )
735737 sys .exit (ERROR_NOT_IMPLEMENTED )
736- if page < 0 or page > 255 :
737- click .echo (f'Invalid page { page } ' )
738+ if page < 0 or page > MAX_EEPROM_PAGE :
739+ click .echo (f'Error: Invalid page number { page } ' )
738740 sys .exit (ERROR_INVALID_PAGE )
739741 return page
740742
741-
742743def eeprom_hexdump_single_port (logical_port_name , page ):
743744 """
744745 Dump EEPROM for a single logical port in hex format.
@@ -830,7 +831,7 @@ def eeprom_hexdump_pages_general(logical_port_name, pages, target_page):
830831 tuple(0, dump string) if success else tuple(error_code, error_message)
831832 """
832833 if target_page is not None :
833- 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' ]
834835 else :
835836 lines = [f'EEPROM hexdump for port { logical_port_name } ' ]
836837 physical_port = logical_port_to_physical_port_index (logical_port_name )
@@ -871,7 +872,7 @@ def eeprom_hexdump_pages_sff8472(logical_port_name, pages, target_page):
871872 tuple(0, dump string) if success else tuple(error_code, error_message)
872873 """
873874 if target_page is not None :
874- 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' ]
875876 else :
876877 lines = [f'EEPROM hexdump for port { logical_port_name } ' ]
877878 physical_port = logical_port_to_physical_port_index (logical_port_name )
@@ -928,28 +929,6 @@ def eeprom_dump_general(physical_port, page, flat_offset, size, page_offset, no_
928929 return 0 , '' .join ('{:02x}' .format (x ) for x in page_dump )
929930
930931
931-
932- def eeprom_dump_general (physical_port , page , flat_offset , size , page_offset , no_format = False ):
933- """
934- Dump module EEPROM for given pages in hex format.
935- Args:
936- logical_port_name: logical port name
937- pages: a list of pages to be dumped. The list always include a default page list and the target_page input by
938- user
939- target_page: user input page number, optional. target_page is only for display purpose
940- Returns:
941- tuple(0, dump string) if success else tuple(error_code, error_message)
942- """
943- sfp = platform_chassis .get_sfp (physical_port )
944- page_dump = sfp .read_eeprom (flat_offset , size )
945- if page_dump is None :
946- return ERROR_NOT_IMPLEMENTED , f'Error: Failed to read EEPROM for page { page :x} h, flat_offset { flat_offset } , page_offset { page_offset } , size { size } !'
947- if not no_format :
948- return 0 , hexdump (EEPROM_DUMP_INDENT , page_dump , page_offset , start_newline = False )
949- else :
950- return 0 , '' .join ('{:02x}' .format (x ) for x in page_dump )
951-
952-
953932def convert_byte_to_valid_ascii_char (byte ):
954933 if byte < 32 or 126 < byte :
955934 return '.'
@@ -1737,7 +1716,7 @@ def target(port_name, target):
17371716# 'read-eeprom' subcommand
17381717@cli .command ()
17391718@click .option ('-p' , '--port' , metavar = '<logical_port_name>' , help = "Logical port name" , required = True )
1740- @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 )
17411720@click .option ('-o' , '--offset' , metavar = '<offset>' , type = click .IntRange (0 , MAX_EEPROM_OFFSET ), help = "EEPROM offset within the page" , required = True )
17421721@click .option ('-s' , '--size' , metavar = '<size>' , type = click .IntRange (1 , MAX_EEPROM_OFFSET + 1 ), help = "Size of byte to be read" , required = True )
17431722@click .option ('--no-format' , is_flag = True , help = "Display non formatted data" )
@@ -1765,6 +1744,8 @@ def read_eeprom(port, page, offset, size, no_format, wire_addr):
17651744 api = sfp .get_xcvr_api ()
17661745 if api is None :
17671746 click .echo ('Error: SFP EEPROM not detected!' )
1747+ if page is not None :
1748+ page = validate_eeprom_page (page )
17681749 if not isinstance (api , sff8472 .Sff8472Api ):
17691750 overall_offset = get_overall_offset_general (api , page , offset , size )
17701751 else :
@@ -1785,7 +1766,7 @@ def read_eeprom(port, page, offset, size, no_format, wire_addr):
17851766# 'write-eeprom' subcommand
17861767@cli .command ()
17871768@click .option ('-p' , '--port' , metavar = '<logical_port_name>' , help = "Logical port name" , required = True )
1788- @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 )
17891770@click .option ('-o' , '--offset' , metavar = '<offset>' , type = click .IntRange (0 , MAX_EEPROM_OFFSET ), help = "EEPROM offset within the page" , required = True )
17901771@click .option ('-d' , '--data' , metavar = '<data>' , help = "Hex string EEPROM data" , required = True )
17911772@click .option ('--wire-addr' , help = "Wire address of sff8472" )
@@ -1819,7 +1800,8 @@ def write_eeprom(port, page, offset, data, wire_addr, verify):
18191800 if api is None :
18201801 click .echo ('Error: SFP EEPROM not detected!' )
18211802 sys .exit (EXIT_FAIL )
1822-
1803+ if page is not None :
1804+ page = validate_eeprom_page (page )
18231805 if not isinstance (api , sff8472 .Sff8472Api ):
18241806 overall_offset = get_overall_offset_general (api , page , offset , len (bytes ))
18251807 else :
@@ -1855,11 +1837,11 @@ def get_overall_offset_general(api, page, offset, size):
18551837 """
18561838 if api .is_flat_memory ():
18571839 if page != 0 :
1858- 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' )
18591841
18601842 if page != 0 :
18611843 if offset < MIN_OFFSET_FOR_NON_PAGE0 :
1862- 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 ]' )
18631845
18641846 if size + offset - 1 > MAX_EEPROM_OFFSET :
18651847 raise ValueError (f'Invalid size { size } , valid range: [1, { 255 - offset + 1 } ]' )
0 commit comments