A comprehensive DOCSIS configuration file parser and generator with human-friendly tools for cable modem configuration management.
The fastest way to run Bindocsis with the web UI:
podman run -d -p 4555:4555 ghcr.io/awksedgreep/bindocsis:latestThen open http://localhost:4555
That's it! No configuration required.
- β Web UI: Phoenix LiveView interface for visual config editing
- β Container Ready: Pre-built images on ghcr.io, zero-config deployment
- β Complete DOCSIS Support: Full support for DOCSIS 1.0, 1.1, 2.0, 3.0, and 3.1
- β DOCSIS 3.1 OFDM/OFDMA: Complete TLV 62/63 support with 25 sub-TLV specifications
- β Multiple Format Support: Binary (.cm), JSON, YAML, and human-readable config files
- β Round-Trip Conversion: Lossless conversion between all supported formats
- β Interactive Editor: Built-in CLI for live configuration editing
- β PacketCable/MTA Support: ASN.1 parsing for MTA provisioning (TLV 64)
- β Validation Framework: DOCSIS version detection and compliance checking
- β Human-Friendly Tools: Easy bandwidth setting, configuration analysis
- β Config Templates: Pre-built templates for residential, business, gigabit configs
- β Comprehensive Testing: 1276+ tests with >85% code coverage
# Set upstream bandwidth to 75 Mbps
elixir -S mix run set_bandwidth.exs modem.cm 75M
# Set bandwidth with custom output file
elixir -S mix run set_bandwidth.exs modem.cm 100Mbps modem_100M.cm# Get human-readable analysis with bandwidth detection
elixir -S mix run describe_config.exs modem.cm
# Creates a pretty JSON file with configuration summary# Convert to pretty-formatted JSON (much more readable!)
elixir -S mix run -e '{:ok, tlvs} = Bindocsis.parse_file("modem.cm"); {:ok, json} = Bindocsis.generate(tlvs, format: :json, pretty: true); File.write!("modem_pretty.json", json)}'For more advanced and dynamic configuration management, Bindocsis provides an interactive command-line editor. This allows you to load, modify, validate, and save DOCSIS configurations in a live session.
To enter the interactive editor:
./bindocsis edit
# Or to edit an existing file:
./bindocsis edit modem.cmOnce inside the editor, you can exit by typing quit or exit and pressing Enter. For a comprehensive guide on all interactive commands and features, please refer to the Interactive CLI Guide.
If available in Hex, the package can be installed
by adding bindocsis to your list of dependencies in mix.exs:
def deps do
[
{:bindocsis, "~> 0.1.0"}
]
endThe project includes comprehensive test suites organized by scope and execution speed. Tests are tagged to allow selective execution:
Run the core test suite excluding slow CLI and comprehensive fixture tests:
mix testThis excludes tests tagged with :cli, :comprehensive_fixtures, and :performance for faster feedback during development.
CLI tests are excluded by default as they involve system interactions and are slower. Run them specifically:
mix test --include cliRun tests with extensive fixture data (slower, more thorough):
mix test --include comprehensive_fixturesRun performance benchmarks and stress tests (excluded by default):
mix test --include performanceRun all tests including CLI, comprehensive fixtures, and performance tests:
mix test --include cli --include comprehensive_fixtures --include performance- Unit Tests (
test/unit/): Fast, isolated component tests - Integration Tests (
test/integration/): Cross-component interaction tests - CLI Tests (tagged
:cli): Command-line interface tests - Comprehensive Tests (tagged
:comprehensive_fixtures): Extended fixture coverage - Performance Tests (tagged
:performance): Benchmarks and stress tests
For CI environments, run the full test suite:
mix test --include cli --include comprehensive_fixtures --include performance --coverBindocsis includes a full-featured web interface built with Phoenix LiveView:
- Dashboard: Drag-and-drop file upload, recent configs
- Config Editor: Visual TLV editing with inline value changes
- TLV Browser: Explore the complete DOCSIS specification
- Templates: Quick-start configs for residential, business, gigabit, and more
- Export: Download as binary (.cm), JSON, YAML, or hex dump
Option 1: Container (Recommended)
podman run -d -p 4555:4555 ghcr.io/awksedgreep/bindocsis:latestOption 2: From Source
PHX_SERVER=true mix run --no-haltThen open http://localhost:4555
# Latest release
podman run -d -p 4555:4555 ghcr.io/awksedgreep/bindocsis:latest
# Specific version
podman run -d -p 4555:4555 ghcr.io/awksedgreep/bindocsis:0.9.0# Build locally
mix bindocsis.container.build
# Build and push to ghcr.io
mix bindocsis.container.release
# Custom version tag
mix bindocsis.container.build --tag 1.0.0| Variable | Default | Description |
|---|---|---|
SECRET_KEY_BASE |
Auto-generated | Cookie signing secret |
PHX_HOST |
localhost |
Hostname for URLs |
PORT |
4555 |
HTTP port |
For complete deployment documentation, see docs/DEPLOYMENT.md.
Documentation can be generated with ExDoc and published on HexDocs. Once published, the docs can be found at https://hexdocs.pm/bindocsis.