Skip to content
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions build_debian.sh
Original file line number Diff line number Diff line change
Expand Up @@ -458,6 +458,14 @@ build_number: ${BUILD_NUMBER:-0}
built_by: $USER@$BUILD_HOSTNAME
EOF

## Copy ASIC config checksum
python files/build_scripts/generate_asic_config_checksum.py
if [[ ! -f './asic_config_checksum' ]]; then
echo 'asic_config_checksum not found'
exit 1
fi
sudo cp asic_config_checksum $FILESYSTEM_ROOT/etc/sonic/asic_config_checksum

if [ -f sonic_debian_extension.sh ]; then
./sonic_debian_extension.sh $FILESYSTEM_ROOT $PLATFORM_DIR
fi
Expand Down
68 changes: 68 additions & 0 deletions files/build_scripts/generate_asic_config_checksum.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
#!/usr/bin/env python

import syslog
import errno
import hashlib

SYSLOG_IDENTIFIER = 'asic_config_checksum'

CHUNK_SIZE = 8192

SAMPLE_PATH = 'src/sonic-swss/swssconfig/sample/'
SAMPLE_FILES = ['netbouncer.json', '00-copp.config.json']

OUTPUT_FILE = './asic_config_checksum'

def log_info(msg):
syslog.openlog(SYSLOG_IDENTIFIER)
syslog.syslog(syslog.LOG_INFO, msg)
syslog.closelog()

def log_error(msg):
syslog.openlog(SYSLOG_IDENTIFIER)
syslog.syslog(syslog.LOG_ERR, msg)
syslog.closelog()

def get_samples():
'''
Gathers up ASIC config file names from the appropriately named 'sample'
directory in SWSS
'''
checksum_files = []
for file in SAMPLE_FILES:
checksum_files.append(SAMPLE_PATH + file)
return checksum_files

def generate_checksum(checksum_files):
'''
Iterates through all of the given ASIC config file, reads their contents,
and generates a checksum. NOTE: The checksum is performed in the order
provided. This function does NOT do any re-ordering of the files before
creating the checksum.
'''
checksum = hashlib.md5()
for file in checksum_files:
try:
with open(file, 'r') as f:
for chunk in iter(lambda: f.read(CHUNK_SIZE), b""):
checksum.update(chunk)
except IOError as e:
log_error('Error processing ASIC config file ' + file + ':' + e.strerror)
return None

return checksum.hexdigest()

def main():
checksum_files = []
checksum_files += get_samples()

checksum_files.sort()
checksum = generate_checksum(checksum_files)
if checksum == None:
exit(1)

with open(OUTPUT_FILE, 'w') as output:
output.write(checksum + '\n')

if __name__ == '__main__':
main()