MIB Viewer

Modem Firmware Upgrades

Cable modem firmware upgrades over DOCSIS are driven by four objects in DOCS-CABLE-DEVICE-MIB - point the modem at a TFTP server and filename, then trigger the download by setting its admin status. This can be done two ways: baked into a bootfile so it happens automatically at next provisioning, or live with snmpset against a modem that's already online.

The relevant OIDs

  • docsDevSwServer 1.3.6.1.2.1.69.1.3.3.0 — IP address of the TFTP server hosting the firmware image. DOCS-CABLE-DEVICE-MIB.
  • docsDevSwFilename 1.3.6.1.2.1.69.1.3.4.0 — filename of the firmware image on that server. DOCS-CABLE-DEVICE-MIB.
  • docsDevSwAdminStatus 1.3.6.1.2.1.69.1.3.1.0 — read-write; setting this to 3 (upgradeFromMgt) is what actually triggers the download and flash. DOCS-CABLE-DEVICE-MIB.
  • docsDevSwOperStatus 1.3.6.1.2.1.69.1.3.2.0 — read-only; reports upgrade progress (in progress, complete, failed, and so on) once triggered. DOCS-CABLE-DEVICE-MIB.

Triggering an upgrade live with snmpset

Assuming a read-write community (or SNMPv3 credentials) already configured on the modem:

snmpset -v2c -c private 192.168.100.5 \
  1.3.6.1.2.1.69.1.3.3.0 a 10.0.0.5 \
  1.3.6.1.2.1.69.1.3.4.0 s "cm-firmware-v2.bin" \
  1.3.6.1.2.1.69.1.3.1.0 i 3

The a type is an IP address, s a string, i an integer - matching the SYNTAX of each object. After the last set, watch docsDevSwOperStatus to confirm the modem actually picked up the request and is progressing through the upgrade rather than silently ignoring it:

snmpget -v2c -c public 192.168.100.5 1.3.6.1.2.1.69.1.3.2.0

Baking the upgrade into a bootfile instead

Rather than (or in addition to) a live snmpset, the same objects can be set from within a config file compiled with the rlaager/docsis tool, so the modem picks up the new firmware automatically the next time it provisions:

# upgrade.cfg
SnmpMibObject docsDevSwServer IPADDRESS 10.0.0.5
SnmpMibObject docsDevSwFilename STRING "cm-firmware-v2.bin"
SnmpMibObject docsDevSwAdminStatus INTEGER 3

Compiled the same way as any other bootfile: ./docsis -e upgrade.cfg key.txt upgrade.bin.

A practical note

Bulk firmware pushes are one of the more disruptive things you can do to a fleet of modems - each one reboots as part of flashing new firmware. Staggering the rollout (a subset of modems at a time, watching for a spike in provisioning failures before continuing) is generally safer than pushing to an entire population simultaneously, especially the first time a new firmware image is being deployed.