DOCSIS::ConfigFile - Decodes and encodes DOCSIS config files
DOCSIS::ConfigFile is a class which provides functionality to decode and encode DOCSIS (Data over Cable Service Interface Specifications) config files.
This module is used as a layer between any human readable data and the binary structure.
The files are usually served using a TFTP server, after a cable modem or MTA (Multimedia Terminal Adapter) has recevied an IP address from a DHCP server. These files are binary encode using a variety of functions, but all the data in the file are constructed by TLVs (type-length-value) blocks. These can be nested and concatenated.
See the source code or https://thorsen.pm/docsisious for list of supported parameters.
use DOCSIS::ConfigFile qw(encode_docsis decode_docsis); $data = decode_docsis $bytes; $bytes = encode_docsis({ GlobalPrivacyEnable => 1, MaxCPE => 2, NetworkAccess => 1, BaselinePrivacy => { AuthTimeout => 10, ReAuthTimeout => 10, AuthGraceTime => 600, OperTimeout => 1, ReKeyTimeout => 1, TEKGraceTime => 600, AuthRejectTimeout => 60, SAMapWaitTimeout => 1, SAMapMaxRetries => 4 }, SnmpMibObject => [ {oid => "1.3.6.1.4.1.1.77.1.6.1.1.6.2", INTEGER => 1}, {oid => "1.3.6.1.4.1.1429.77.1.6.1.1.6.2", STRING => "bootfile.bin"} ], VendorSpecific => {id => "0x0011ee", options => [30 => "0xff", 31 => "0x00", 32 => "0x28"]} });
You can install the SNMP.pm module to translate between SNMP OID formats. With the module installed, you can define the SnmpMibObject like the example below, instead of using numeric OIDs:
SnmpMibObject
encode_docsis({ SnmpMibObject => [ {oid => "docsDevNmAccessIp.1", IPADDRESS => "10.0.0.1"}, {oid => "docsDevNmAccessIpMask.1", IPADDRESS => "255.255.255.255"}, ] });
There is an example web application bundled with this distribution called "Docsisious". To run this application, you need to install Mojolicious and YAML::XS:
$ curl -L https://cpanmin.us | perl - -M https://cpan.metacpan.org DOCSIS::ConfigFile Mojolicious;
After installing the modules above, you can run the web app like this:
$ docsisious --listen http://*:8000;
And then open your favorite browser at http://localhost:8000. To see a live demo, you can visit https://thorsen.pm/docsisious.
$data = decode_docsis($byte_string); $data = decode_docsis(\$path_to_file);
Used to decode a DOCSIS config file into a data structure. The output $data can be used as input to "encode_docsis". Note: $data will only contain array-refs if the DOCSIS parameter occur more than once.
$data
$byte_string = encode_docsis(\%data, \%args);
Used to encode a data structure into a DOCSIS config file. Each of the keys in $data can either hold a hash- or array-ref. An array-ref is used if the same DOCSIS parameter occur multiple times. These two formats will result in the same $byte_string:
$byte_string
# Only one SnmpMibObject encode_docsis({ SnmpMibObject => { oid => "1.3.6.1.4.1.1429.77.1.6.1.1.6.2", STRING => "bootfile.bin" } }) # Allow one or more SnmpMibObjects encode_docsis({ SnmpMibObject => [ {oid => "1.3.6.1.4.1.1429.77.1.6.1.1.6.2", STRING => "bootfile.bin"} ] })
Possible %args:
%args
mta_algorithm
This argument is required when encoding MTA config files. Can be set to either empty string, "sha1" or "md5".
shared_secret
This argument is optional, but will be used as the shared secret used to increase security between the cable modem and CMTS.
Copyright (C) 2014-2018, Jan Henning Thorsen
This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
docsisious bundles Font Awesome.
docsisious
Jan Henning Thorsen - jhthorsen@cpan.org
jhthorsen@cpan.org
To install DOCSIS::ConfigFile, copy and paste the appropriate command in to your terminal.
cpanm
cpanm DOCSIS::ConfigFile
CPAN shell
perl -MCPAN -e shell install DOCSIS::ConfigFile
For more information on module installation, please visit the detailed CPAN module installation guide.