CMTS info

Helpful linux and DOCSIS/CMTS howtos and tips

Upgrading cable modem software

1)Get working CM config.

Easiest and most secure way of makeing upgrade config is to take already working and appropriately secured one.

After obtaining one, convert it back to txt form:

docsis -d config_file > upgrade.conf
2) Add new firmware name, firmware upgrade(tftp) server and make modem download new SW.

Append this before closing " } ":

  SwUpgradeFilename "NEW_FIRMWARE_FILENAME";
  SwUpgradeServer TFTP_SERVER_IP;
  SnmpMibObject docsDevSwAdminStatus.0 Integer 2; /* allowProvisioningUpgrade */

3) Add Mfg CVC.

Mfg CVC(Manufacturer Code Verification Certificate) is simple SSL v3 cert which must be sent to CM in order to upgrade the software.
It should be included to software package(look in CVC dir).

If there is no separate cert file, CVC cert is appended to modem software itself(usually .p7b file). To extract certificate open this file on windows and export it as DER. The file to use as SwUpgradeFilename is .p7b file not the .bin file.

Reader's comment: For people using Linux, xca is a great and userfriendly tool. Under certificates import pkcs#7, select your p7b file, and then export to DER.

The cert must be appended to modm config file using the MfgCVCData directive, which sadly accepts up to 254 chars. Certs are often larger so MfgCVCData must be specified several times.

To create Mfg CVC Data directive, take manufacturer cert and then:

  hexdump -v -e ' 2/1 "%02X" ' -n 254 cert.cer

The complete MfgCVCData option would be MfgCVCData 0xOUTPUT_FROM_ABOVE;
To create next portion just skip first 254 chars with -s:

   hexdump -v -e ' 2/1 "%02X" ' -n 254 -s 254 cert.cer

Increase -s by 254 for next portions.

To simplify procedure one may write a simple script:

#!/bin/bash
CERT=cert.cer
VAL1=`hexdump -v -e ' 2/1 "%02X" ' -n 254 $CERT`
VAL2=`hexdump -v -e ' 2/1 "%02X" ' -n 254 -s 254 $CERT`
VAL3=`hexdump -v -e ' 2/1 "%02X" ' -n 254 -s 508 $CERT`
VAL4=`hexdump -v -e ' 2/1 "%02X" ' -n 254 -s 762 $CERT`

echo MfgCVCData 0x$VAL1\;
echo MfgCVCData 0x$VAL2\;
echo MfgCVCData 0x$VAL3\;
echo MfgCVCData 0x$VAL4\;

Just copy and paste the result into our upgrade.conf config file. Remove the last MfgCVCData dircetive if it is only "0x".

Resulting file should look something like this:

Main
{
  ...
  Normal configuration goes here
  ...
  SwUpgradeFilename "DCM325-ST32.0E.16-070425-S-E.img";
  SwUpgradeServer 192.168.0.1;
  SnmpMibObject docsDevSwAdminStatus.0 Integer 2; /* allowProvisioningUpgrade */
  
  MfgCVCData 0x308202EC30887af687a6f8a687f6a87f68fa68fa6fa8fa68af7af687af68fa6fa8fa6fa8fa7fa68fa6f87f6a87fa68fa76fa8f6a8fa68fa68fa6fa86868349320482104218409128410284109832021309810923821302183092130219381029382109382109382100942121840912092184092184092148092184109248092148210482192109482109482109421840921840921840921448210984092184092184210948092184210984213109600658409568054968480943850943584358435032840921809528086430943864389843590328409328409328432982309483209483209483298423098409328320984093284320932098490328409B;
  MfgCVCData 0x03131D43a35353536456546546546790909980909435435435435eE20436572746966696361746530819F300D06092A864886F70D010101050003818D0030818902818100DC68351D98E2DEC31DADC75CD465465465465464564465B52E3A806855BCC5E40A677C9806120D9D63E6355976955E7AFF739C57450B72EE9F456B83A3D5177B37ECE298FA7E286042B2C8FF3FFF983F625FFED7BF3A9C8888F01C82FA3A474D8A41AC85349C7C4BBD4ED6A081B506EDB66415A5CD4A8FF82DA978EEE456CFA10203010001A31A301830160603551D250101FF040C300A06082B060545645654654654654654654686F70D01010505000382010100831876DCD;
  MfgCVCData 0xD4F133AC7C564A58CC23EF6A42D71DBD18A3C3EB57433805640D7951C81380BF6458D4EC6B2CA9D41E12E60B25B9C17397FDE346AC7ED6EF6CCCC61C4A2844E28B7916820266A5B96DEA22BBF4F854C8C259D881EF67D51A2FE0E6E520F44C645654654654905FE6271034AAD777308003F302A4F275E9AD75C80564FE057C5D419DF1B4AFEC5085C3A3091C3D81470165C84DC2039BA0E8DA517E606B3B45F204D97CCB6FE2B49FA1FD2F763429313FE3F570F4C7C085F5538489D9F1BF87CF756754654F4A46183B7414434BF0C4E2FDB7506ED94181A1550B6662647E389E75D42C8FDAB;
}  
5) Convert to binary

Config file must be in binary format to be accepted by CM. To do this using docsis program execute:

  docsis -e upgrade.conf keyfile upgrade.bin

Keyfile is a text file containing your authentication string for the CMTS

6) Upgrade

Copy the binary config file and software file to root directory of your tftp server:

  cp upgrade.bin /tftpboot/
  cp DCM325-ST32.0E.16-070425-S-E.img /tftpboot/

Change filename directive in DHCP cofinguration file for modems you want to upgrade. Then restart the DHCP server.

To start upgrading simply power cycle desired modems.

Template: designsbydarren.com on license
All trademarks belong to their respective owners. All materials presented here for informational purposes only.