[PTP] Update cgu parser for Logan Beach NIC

Intel Logan Beach NICs have additional fields in the cgu output,
resulting in failures when converting it into a dict. Updated the logic
for cgu_output_to_dict() to find the start and end of the "input" table.
Once the start and end lines of the table are identified, then the other
required fields can be located based on the known offset from the table.

This also allows any future lines added to the table to handled without
requiring additional code changes.

Updated the unit tests to cover both the Logan Beach and Westport Channel
cgu output formats.

Test plan:
PASS: Unit tests passing
PASS: Build notificationservice-base image and test on both NIC
types.

Story: 2010270
Task: 46870

Signed-off-by: Cole Walker <cole.walker@windriver.com>
Change-Id: Ib6716f38ea3c64a68e7162bb5d4f2154fa399a8c
This commit is contained in:
Cole Walker 2022-11-17 14:24:04 -05:00
parent 3a365e737a
commit 916f9da112
4 changed files with 90 additions and 20 deletions

View File

@ -95,9 +95,17 @@ class CguHandler:
'Phase offset': ''
}
}
# Get the input state table start and end lines
# Can vary in length depending on NIC types
for index, line in enumerate(cgu_output):
if "input (idx)" in line:
table_start = index + 2
if "EEC DPLL:" in line:
dpll_start = index
table_end = index - 1
for line in cgu_output[7:14]:
# Build a dict out of the 7 line table
for line in cgu_output[table_start:table_end]:
# Build a dict out of the table
dict_to_insert = {
re.split(' +', line)[1]: {
'state': re.split(' +', line)[4],
@ -110,13 +118,20 @@ class CguHandler:
cgu_dict['input'].update(dict_to_insert)
# Add the DPLL data below the table
# Set the line offsets for each item we want
eec_current_ref = dpll_start + 1
eec_status = dpll_start + 2
pps_current_ref = dpll_start + 5
pps_status = dpll_start + 6
pps_phase_offset = dpll_start + 7
cgu_dict['EEC DPLL']['Current reference'] = \
re.split('[ \t]+', cgu_output[16])[3]
cgu_dict['EEC DPLL']['Status'] = re.split('[ \t]+', cgu_output[17])[2]
re.split('[ \t]+', cgu_output[eec_current_ref])[-1]
cgu_dict['EEC DPLL']['Status'] = re.split('[ \t]+', cgu_output[eec_status])[-1]
cgu_dict['PPS DPLL']['Current reference'] = \
re.split('[ \t]+', cgu_output[20])[3]
cgu_dict['PPS DPLL']['Status'] = re.split('[ \t]+', cgu_output[21])[2]
re.split('[ \t]+', cgu_output[pps_current_ref])[-1]
cgu_dict['PPS DPLL']['Status'] = re.split('[ \t]+', cgu_output[pps_status])[-1]
cgu_dict['PPS DPLL']['Phase offset'] = \
re.split('[ \t]+', cgu_output[22])[3]
re.split('[ \t]+', cgu_output[pps_phase_offset])[-1]
self.cgu_output_parsed = cgu_dict

View File

@ -57,21 +57,51 @@ class CguHandlerTests(unittest.TestCase):
with self.assertRaises(FileNotFoundError):
self.testCguHandler.get_cgu_path_from_pci_addr()
def test_cgu_output_to_dict(self):
def test_cgu_output_to_dict_logan_beach(self):
reference_dict = {
'input':
{'CVL-SDP22': {'state': 'invalid', 'priority': {'EEC': '8', 'PPS': '8'}},
'CVL-SDP20': {'state': 'invalid', 'priority': {'EEC': '15', 'PPS': '3'}},
'C827_0-RCLKA': {'state': 'invalid', 'priority': {'EEC': '4', 'PPS': '4'}},
'C827_0-RCLKB': {'state': 'invalid', 'priority': {'EEC': '5', 'PPS': '5'}},
'SMA1': {'state': 'invalid', 'priority': {'EEC': '1', 'PPS': '1'}},
'SMA2/U.FL2': {'state': 'invalid', 'priority': {'EEC': '2', 'PPS': '2'}},
'GNSS-1PPS': {'state': 'valid', 'priority': {'EEC': '0', 'PPS': '0'}}},
'EEC DPLL': {'Current reference': 'GNSS-1PPS', 'Status': 'locked_ho_ack'},
'PPS DPLL': {'Current reference': 'GNSS-1PPS', 'Status': 'locked_ho_ack',
'Phase offset': '295'}}
"input": {
"CVL-SDP22": {"state": "invalid", "priority": {"EEC": "8", "PPS": "8"}},
"CVL-SDP20": {"state": "invalid", "priority": {"EEC": "15", "PPS": "3"}},
"C827_0-RCLKA": {"state": "invalid", "priority": {"EEC": "4", "PPS": "4"}},
"C827_0-RCLKB": {"state": "invalid", "priority": {"EEC": "5", "PPS": "5"}},
"C827_1-RCLKA": {"state": "invalid", "priority": {"EEC": "6", "PPS": "6"}},
"C827_1-RCLKB": {"state": "invalid", "priority": {"EEC": "7", "PPS": "7"}},
"SMA1": {"state": "invalid", "priority": {"EEC": "1", "PPS": "1"}},
"SMA2/U.FL2": {"state": "invalid", "priority": {"EEC": "2", "PPS": "2"}},
"GNSS-1PPS": {"state": "valid", "priority": {"EEC": "0", "PPS": "0"}},
},
"EEC DPLL": {"Current reference": "GNSS-1PPS", "Status": "locked_ho_acq"},
"PPS DPLL": {
"Current reference": "GNSS-1PPS",
"Status": "locked_ho_acq",
"Phase offset": "-86",
},
}
self.testCguHandler.cgu_path = testpath + "test_input_files/mock_cgu_output"
self.testCguHandler.cgu_path = testpath + "test_input_files/mock_cgu_output_logan_beach"
self.testCguHandler.read_cgu()
self.testCguHandler.cgu_output_to_dict()
self.assertDictEqual(self.testCguHandler.cgu_output_parsed, reference_dict)
def test_cgu_output_to_dict_westport_channel(self):
reference_dict = {
"input": {
"CVL-SDP22": {"state": "invalid", "priority": {"EEC": "8", "PPS": "8"}},
"CVL-SDP20": {"state": "invalid", "priority": {"EEC": "15", "PPS": "3"}},
"C827_0-RCLKA": {"state": "invalid", "priority": {"EEC": "4", "PPS": "4"}},
"C827_0-RCLKB": {"state": "invalid", "priority": {"EEC": "5", "PPS": "5"}},
"SMA1": {"state": "invalid", "priority": {"EEC": "1", "PPS": "1"}},
"SMA2/U.FL2": {"state": "invalid", "priority": {"EEC": "2", "PPS": "2"}},
"GNSS-1PPS": {"state": "valid", "priority": {"EEC": "0", "PPS": "0"}},
},
"EEC DPLL": {"Current reference": "GNSS-1PPS", "Status": "locked_ho_ack"},
"PPS DPLL": {
"Current reference": "GNSS-1PPS",
"Status": "locked_ho_ack",
"Phase offset": "295",
},
}
self.testCguHandler.cgu_path = testpath + "test_input_files/mock_cgu_output_westport_channel"
self.testCguHandler.read_cgu()
self.testCguHandler.cgu_output_to_dict()
self.assertDictEqual(self.testCguHandler.cgu_output_parsed, reference_dict)

View File

@ -0,0 +1,25 @@
Found ZL80032 CGU
DPLL Config ver: 1.3.0.1
CGU Input status:
| | priority | |
input (idx) | state | EEC (0) | PPS (1) | ESync fail |
----------------------------------------------------------------
CVL-SDP22 (0) | invalid | 8 | 8 | N/A |
CVL-SDP20 (1) | invalid | 15 | 3 | N/A |
C827_0-RCLKA (2) | invalid | 4 | 4 | N/A |
C827_0-RCLKB (3) | invalid | 5 | 5 | N/A |
C827_1-RCLKA (4) | invalid | 6 | 6 | N/A |
C827_1-RCLKB (5) | invalid | 7 | 7 | N/A |
SMA1 (6) | invalid | 1 | 1 | N/A |
SMA2/U.FL2 (7) | invalid | 2 | 2 | N/A |
GNSS-1PPS (8) | valid | 0 | 0 | N/A |
EEC DPLL:
Current reference: GNSS-1PPS
Status: locked_ho_acq
PPS DPLL:
Current reference: GNSS-1PPS
Status: locked_ho_acq
Phase offset [ns]: -86