@@ -697,16 +697,20 @@ def eeprom(port, dump_dom, namespace):
697
697
# 'eeprom-hexdump' subcommand
698
698
@show .command ()
699
699
@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>" )
701
701
def eeprom_hexdump (port , page ):
702
702
"""Display EEPROM hexdump of SFP transceiver(s)"""
703
703
if port :
704
704
if page is None :
705
705
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 ))
707
709
click .echo (output )
708
710
sys .exit (return_code )
709
711
else :
712
+ if page is not None :
713
+ page = validate_eeprom_page (page )
710
714
logical_port_list = natsorted (platform_sfputil .logical )
711
715
lines = []
712
716
for logical_port_name in logical_port_list :
@@ -718,27 +722,24 @@ def eeprom_hexdump(port, page):
718
722
lines .append (output )
719
723
click .echo ('\n ' .join (lines ))
720
724
721
-
722
725
def validate_eeprom_page (page ):
723
726
"""
724
727
Validate input page module EEPROM
725
728
Args:
726
729
page: str page input by user
727
-
728
730
Returns:
729
731
int page
730
732
"""
731
733
try :
732
- page = int (page )
734
+ page = int (str ( page ), base = 16 )
733
735
except ValueError :
734
736
click .echo ('Please enter a numeric page number' )
735
737
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 } ' )
738
740
sys .exit (ERROR_INVALID_PAGE )
739
741
return page
740
742
741
-
742
743
def eeprom_hexdump_single_port (logical_port_name , page ):
743
744
"""
744
745
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):
830
831
tuple(0, dump string) if success else tuple(error_code, error_message)
831
832
"""
832
833
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' ]
834
835
else :
835
836
lines = [f'EEPROM hexdump for port { logical_port_name } ' ]
836
837
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):
871
872
tuple(0, dump string) if success else tuple(error_code, error_message)
872
873
"""
873
874
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' ]
875
876
else :
876
877
lines = [f'EEPROM hexdump for port { logical_port_name } ' ]
877
878
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_
928
929
return 0 , '' .join ('{:02x}' .format (x ) for x in page_dump )
929
930
930
931
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
-
953
932
def convert_byte_to_valid_ascii_char (byte ):
954
933
if byte < 32 or 126 < byte :
955
934
return '.'
@@ -1737,7 +1716,7 @@ def target(port_name, target):
1737
1716
# 'read-eeprom' subcommand
1738
1717
@cli .command ()
1739
1718
@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 )
1741
1720
@click .option ('-o' , '--offset' , metavar = '<offset>' , type = click .IntRange (0 , MAX_EEPROM_OFFSET ), help = "EEPROM offset within the page" , required = True )
1742
1721
@click .option ('-s' , '--size' , metavar = '<size>' , type = click .IntRange (1 , MAX_EEPROM_OFFSET + 1 ), help = "Size of byte to be read" , required = True )
1743
1722
@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):
1765
1744
api = sfp .get_xcvr_api ()
1766
1745
if api is None :
1767
1746
click .echo ('Error: SFP EEPROM not detected!' )
1747
+ if page is not None :
1748
+ page = validate_eeprom_page (page )
1768
1749
if not isinstance (api , sff8472 .Sff8472Api ):
1769
1750
overall_offset = get_overall_offset_general (api , page , offset , size )
1770
1751
else :
@@ -1785,7 +1766,7 @@ def read_eeprom(port, page, offset, size, no_format, wire_addr):
1785
1766
# 'write-eeprom' subcommand
1786
1767
@cli .command ()
1787
1768
@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 )
1789
1770
@click .option ('-o' , '--offset' , metavar = '<offset>' , type = click .IntRange (0 , MAX_EEPROM_OFFSET ), help = "EEPROM offset within the page" , required = True )
1790
1771
@click .option ('-d' , '--data' , metavar = '<data>' , help = "Hex string EEPROM data" , required = True )
1791
1772
@click .option ('--wire-addr' , help = "Wire address of sff8472" )
@@ -1819,7 +1800,8 @@ def write_eeprom(port, page, offset, data, wire_addr, verify):
1819
1800
if api is None :
1820
1801
click .echo ('Error: SFP EEPROM not detected!' )
1821
1802
sys .exit (EXIT_FAIL )
1822
-
1803
+ if page is not None :
1804
+ page = validate_eeprom_page (page )
1823
1805
if not isinstance (api , sff8472 .Sff8472Api ):
1824
1806
overall_offset = get_overall_offset_general (api , page , offset , len (bytes ))
1825
1807
else :
@@ -1855,11 +1837,11 @@ def get_overall_offset_general(api, page, offset, size):
1855
1837
"""
1856
1838
if api .is_flat_memory ():
1857
1839
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' )
1859
1841
1860
1842
if page != 0 :
1861
1843
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 ]' )
1863
1845
1864
1846
if size + offset - 1 > MAX_EEPROM_OFFSET :
1865
1847
raise ValueError (f'Invalid size { size } , valid range: [1, { 255 - offset + 1 } ]' )
0 commit comments