Implements compare/2 and newer?/2 functions for comparing semantic versions.
Parsing rules:
- Supports 0-3 part versions (e.g., '7', '7.14', '7.14.1')
- Strips v/V prefix and whitespace
- Ignores suffixes after hyphen or space
- Pads missing parts with 0
- Invalid versions (4+ parts, non-numeric, negative) fall back to 0.0.0
Part of firmware version tracking feature (Phase 2).
- Create firmware_releases table to store latest available firmware versions
- Create device_firmware_history table to track version changes over time
- Add FirmwareRelease and DeviceFirmwareHistory Ecto schemas with validations
- Add comprehensive tests for both schemas (23 tests, 100% coverage)
firmware_releases stores one record per vendor/product_line with latest version.
device_firmware_history is append-only audit log of device firmware changes.
Part of firmware version tracking system for MikroTik (extensible to other vendors).
- Move Oban Web from /oban to /admin/oban
- Move LiveDashboard from /dashboard to /admin/dashboard
- Both remain protected by :require_superuser plug
- Update documentation to reflect new paths
Add lightweight integration tests to verify:
- C NIF module loads properly in web application
- MIB library initializes successfully
- Standard MIB name resolution works
- MibTranslator wrapper functions correctly
- Error handling for invalid MIB names
- SNMP profiles can be loaded (uses MIB translation)
These tests verify the C NIF works end-to-end without checking
full page content, focusing on functional verification only.
Move -lnetsnmp to end of link command (after source files).
In GCC/Clang, library flags must come after the object files that
reference them for proper symbol resolution.
This fixes 'undefined symbol: init_snmp' runtime errors on Linux.
On newer glibc versions, BSD types like u_char are only available
when _DEFAULT_SOURCE or _BSD_SOURCE feature test macros are defined.
Define these macros before including any headers to ensure BSD types
are available for net-snmp headers.
Add #include <sys/types.h> before net-snmp headers to provide
u_char and other BSD-style type definitions required by net-snmp.
This fixes compilation errors in CI/Docker builds on Linux.
Add explicit 'make' step in Dockerfile to compile the C NIF before
Elixir compilation. This ensures towerops_nif.so exists when the
Elixir code tries to load it.
The custom compiler task creates a bootstrap problem (needs to be
compiled before it can be used as a compiler), so we compile the
C NIF explicitly instead of relying on the compilers list.