@@ -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,6 +722,23 @@ def eeprom_hexdump(port, page):
718
722
lines .append (output )
719
723
click .echo ('\n ' .join (lines ))
720
724
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
721
742
722
743
def eeprom_hexdump_single_port (logical_port_name , page ):
723
744
"""
@@ -810,7 +831,7 @@ def eeprom_hexdump_pages_general(logical_port_name, pages, target_page):
810
831
tuple(0, dump string) if success else tuple(error_code, error_message)
811
832
"""
812
833
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' ]
814
835
else :
815
836
lines = [f'EEPROM hexdump for port { logical_port_name } ' ]
816
837
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):
851
872
tuple(0, dump string) if success else tuple(error_code, error_message)
852
873
"""
853
874
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' ]
855
876
else :
856
877
lines = [f'EEPROM hexdump for port { logical_port_name } ' ]
857
878
physical_port = logical_port_to_physical_port_index (logical_port_name )
@@ -1695,7 +1716,7 @@ def target(port_name, target):
1695
1716
# 'read-eeprom' subcommand
1696
1717
@cli .command ()
1697
1718
@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 )
1699
1720
@click .option ('-o' , '--offset' , metavar = '<offset>' , type = click .IntRange (0 , MAX_EEPROM_OFFSET ), help = "EEPROM offset within the page" , required = True )
1700
1721
@click .option ('-s' , '--size' , metavar = '<size>' , type = click .IntRange (1 , MAX_EEPROM_OFFSET + 1 ), help = "Size of byte to be read" , required = True )
1701
1722
@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):
1723
1744
api = sfp .get_xcvr_api ()
1724
1745
if api is None :
1725
1746
click .echo ('Error: SFP EEPROM not detected!' )
1747
+ if page is not None :
1748
+ page = validate_eeprom_page (page )
1726
1749
if not isinstance (api , sff8472 .Sff8472Api ):
1727
1750
overall_offset = get_overall_offset_general (api , page , offset , size )
1728
1751
else :
@@ -1743,7 +1766,7 @@ def read_eeprom(port, page, offset, size, no_format, wire_addr):
1743
1766
# 'write-eeprom' subcommand
1744
1767
@cli .command ()
1745
1768
@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 )
1747
1770
@click .option ('-o' , '--offset' , metavar = '<offset>' , type = click .IntRange (0 , MAX_EEPROM_OFFSET ), help = "EEPROM offset within the page" , required = True )
1748
1771
@click .option ('-d' , '--data' , metavar = '<data>' , help = "Hex string EEPROM data" , required = True )
1749
1772
@click .option ('--wire-addr' , help = "Wire address of sff8472" )
@@ -1777,7 +1800,8 @@ def write_eeprom(port, page, offset, data, wire_addr, verify):
1777
1800
if api is None :
1778
1801
click .echo ('Error: SFP EEPROM not detected!' )
1779
1802
sys .exit (EXIT_FAIL )
1780
-
1803
+ if page is not None :
1804
+ page = validate_eeprom_page (page )
1781
1805
if not isinstance (api , sff8472 .Sff8472Api ):
1782
1806
overall_offset = get_overall_offset_general (api , page , offset , len (bytes ))
1783
1807
else :
@@ -1813,11 +1837,11 @@ def get_overall_offset_general(api, page, offset, size):
1813
1837
"""
1814
1838
if api .is_flat_memory ():
1815
1839
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' )
1817
1841
1818
1842
if page != 0 :
1819
1843
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 ]' )
1821
1845
1822
1846
if size + offset - 1 > MAX_EEPROM_OFFSET :
1823
1847
raise ValueError (f'Invalid size { size } , valid range: [1, { 255 - offset + 1 } ]' )
0 commit comments