facebook / fboss

Facebook Open Switching System Software for controlling network switches.
Other
860 stars 295 forks source link

weutil : Changes to support Meru800bia #156

Closed arajeev-ARISTA closed 1 year ago

arajeev-ARISTA commented 1 year ago

Summary

Use FIELD_UINT instead of FIELD_HEX to parse CRC16 to be consistent with V4 spec: parseHex() function is currently used to parse FIELD_HEX values. parseHex() function internally uses std::stoi() to convert the bytes to a hex value. Since the CRC16 bytes are uint values (and not their ASCII equivalent) parseHex() function won’t work. Changing to FIELD_UINT would make sure the right parsing function parseUint() is used.

Introduce a new local variable lastByte in loadEeprom() function to handle large offset values: This helps to avoid limiting fileSize to a maximum value equal to the buffer size in the line fileSize = fileSize > max ? max : fileSize;. As a result, the offset value can be larger than the buffer size. Previously, the following check caused exceptions whenever the offset exceeded the buffer size

if (offset > fileSize) {
    throw std::runtime_error("Offset exceeds EEPROM size.");
 }

Additionally, lastByte also helps to track the number of bytes to be read when offset value is larger than the buffer size

Store lowercase string in translatedFrom: In the getEepromPath() function, set translatedFrom to the lowercase string lEeprom. translatedFrom is later used to look up config_.configEntry which stores keys in lowercase.

Testing

Read EEPROM with the command weutil --eeprom SCM --config_file weutil.json

arajeev-ARISTA commented 1 year ago

Closing as the issues are resolved by other changes.