# Priority Vendors Analysis: MikroTik & Ubiquiti

**Date**: 2026-02-12
**Purpose**: Comprehensive sensor coverage comparison between Towerops and LibreNMS for priority vendors

---

## Executive Summary

| Vendor Platform | Towerops Parity | Critical Gaps | Priority |
|---|---|---|---|
| **MikroTik RouterOS** | 65-70% | Wireless sensors (0% coverage) | HIGH |
| **Ubiquiti AirOS (airMAX)** | 95% | Per-chain RSSI | LOW |
| **Ubiquiti UniFi** | 80% | Channel-to-frequency conversion | MEDIUM |
| **Ubiquiti AirFiber AF-LTU** | 40% | TX/RX Modulation Rate (CRITICAL) | **CRITICAL** |
| **Ubiquiti AirFiber AF60** | 35% | MCS Rate, RSSI, SNR | **CRITICAL** |
| **Ubiquiti EdgeOS** | 80% | None (Towerops exceeds LibreNMS) | LOW |
| **Ubiquiti EdgeOLT** | 95% | None (Towerops exceeds LibreNMS) | LOW |

---

## MikroTik RouterOS - Detailed Analysis

### Current Coverage: 65-70% Overall Parity

#### ✅ **Excellent Coverage** (100% parity):
- **Temperature**: Optical module temp, system gauge temp
- **Voltage**: Optical supply, POE voltage (per port), gauge voltage, high-load voltage
- **Current**: Optical Tx bias, POE current (per port), gauge current
- **Power**: POE power (per port), gauge power
- **dBm**: Optical Tx/Rx power
- **Fanspeed**: System fans via gauge table
- **Count**: DHCP leases, firewall connections (total/IPv4/IPv6)
- **State**: Optical Rx loss/Tx fault, POE status, gauge status, 60GHz connection/mode

All OIDs match LibreNMS exactly. All divisors correct.

#### ❌ **Critical Gaps** (0% coverage):

**Wireless Sensor Discovery** - Missing 11 sensor types:
1. **Clients (Station Count)** - `mtxrWlApTable` - CRITICAL for capacity planning
2. **CCQ (Channel Capacity Quality)** - `mtxrWlApTable`, `mtxrWlStatTable` - Link quality indicator
3. **Frequency** - `mtxrWlApTable`, `mtxrWlStatTable`, `mtxrWl60GTable` - Channel information
4. **Noise Floor** - `mtxrWlApTable` - RF environment quality
5. **Rate (Tx/Rx)** - `mtxrWlApTable`, `mtxrWlStatTable` - Throughput monitoring
6. **RSSI (Signal Strength)** - `mtxrWl60GTable` - Connection quality
7. **Quality** - `mtxrWl60GTable` - Signal quality metric
8. **Distance** - `mtxrWl60GStaTable` - Link distance measurement
9. **RSRQ (LTE)** - `mtxrLTEModemTable` - LTE signal quality
10. **RSRP (LTE)** - `mtxrLTEModemTable` - LTE reference signal power
11. **SINR (LTE)** - `mtxrLTEModemTable` - LTE signal-to-noise

**Advanced Features Missing**:
- Transceiver discovery (vendor, serial, wavelength metadata)
- QoS monitoring (queue stats, traffic shaping)
- VLAN discovery
- OS polling (device-level metrics)

#### Implementation Complexity:
- **Wireless sensors**: HIGH - Requires new YAML tables + sensor mappings (similar to LibreNMS `discoverWirelessClients()`, `discoverWirelessCcq()`, etc.)
- **Transceiver discovery**: MEDIUM - Metadata extraction from optical modules
- **QoS/VLAN**: MEDIUM-HIGH - New MIB tables and discovery logic

---

## Ubiquiti Platforms - Detailed Analysis

### AirOS (airMAX) - 95% Parity ✅

**Excellent coverage** of all core wireless metrics:
- Frequency, Capacity, CCQ, Client count, Distance, Noise floor
- Tx Power, Signal quality, Tx/Rx rate, RSSI
- Channel utilization (Tx/Rx), CPU load, Temperature
- GPS fix status and coordinates

**Minor gap**: Per-chain RSSI discovery (LibreNMS walks per chain, Towerops has combined)

---

### UniFi - 80% Parity ✅

**Good coverage** of access point metrics:
- Clients (2.4GHz and 5GHz per SSID)
- CCQ (per radio with 10x divisor)
- Tx Power (per radio)
- Channel utilization (total, self-rx, self-tx)

**Missing**:
- Channel-to-frequency conversion (static OID doesn't update with channel changes)
- Other BSS utilization
- Processor discovery

---

### AirFiber AF-LTU - 40% Parity ⚠️ **CRITICAL GAPS**

**Current coverage**:
- ✅ Radio role (AP/CPE), GPS status/fix/satellites
- ✅ CPU usage

**Missing CRITICAL sensors**:
- ❌ **TX Modulation Rate** (state sensor with QAM mappings) - **MOST CRITICAL**
- ❌ **RX Modulation Rate** (state sensor) - **MOST CRITICAL**
- ❌ Frequency
- ❌ Distance (with 1000x divisor for km)
- ❌ TX/RX Capacity (with 1000x divisor for Mbps)
- ❌ RX Power (per chain 0/1)
- ❌ RX Ideal Power (per chain)
- ❌ TX EIRP
- ❌ Signal Level (per chain quality)

**Production Impact**: Without modulation rate sensors, operators cannot diagnose link quality degradation. These state sensors show when links drop from high QAM to low QAM due to interference or alignment issues.

---

### AirFiber AF60 - 35% Parity ⚠️ **CRITICAL GAPS**

**Current coverage**:
- ✅ Radio role (AP/CPE), GPS status/fix/satellites
- ✅ CPU usage

**Missing CRITICAL sensors**:
- ❌ **TX MCS Rate** (state sensor, 9 states from 1X to 9X) - **MOST CRITICAL**
- ❌ **RX MCS Rate** (state sensor) - **MOST CRITICAL**
- ❌ RSSI (Local/Remote per-chain)
- ❌ SNR (Signal-to-Noise Ratio per-chain)
- ❌ Frequency
- ❌ Distance (with 1000x divisor)
- ❌ TX/RX Capacity (with 1000x divisor)
- ❌ Active Link Status (Main/Backup state)

**Production Impact**: MCS rate is THE key indicator of link health on AF60. Without it, capacity numbers are meaningless because operators can't see WHY throughput changed.

---

### EdgeOS - 80% Parity ✅ **Towerops Advantage**

**Towerops has BETTER coverage than LibreNMS**:
- ✅ CPU load, PSU sensors (voltage, current, power)
- ✅ Battery metrics (charge level, runtime remaining)
- ✅ Temperature, fan speed
- ✅ PSU operational/charging/status states

LibreNMS only does basic Entity-MIB hardware inventory.

---

### EdgeOLT - 95% Parity ✅ **Towerops Advantage**

**Towerops has comprehensive OLT coverage**:
- ✅ SFP status, ONU online status, ONU count
- ✅ Temperature, fan speed
- ✅ ONU RX/TX power (dBm with 100x divisor)

LibreNMS only discovers ports, not optical power metrics.

---

## Implementation Priority

### **TIER 1 - CRITICAL (Week 1)** 🔴

**Impact**: Production monitoring gaps for point-to-point wireless links

1. **AirFiber AF60 - TX/RX MCS Rate State Sensors**
   - File: `priv/profiles/os_discovery/airos-af60.yaml`
   - OIDs:
     - TX MCS: `.1.3.6.1.4.1.41112.1.11.1.5.1.1`
     - RX MCS: `.1.3.6.1.4.1.41112.1.11.1.5.2.1`
   - States: 9 levels (1X through 9X modulation)
   - Reference: `LibreNMS/OS/AirosAf60.php`

2. **AirFiber AF-LTU - TX/RX Modulation Rate State Sensors**
   - File: `priv/profiles/os_discovery/airos-af-ltu.yaml`
   - OIDs:
     - TX Modulation: `.1.3.6.1.4.1.41112.1.10.1.5.1.1`
     - RX Modulation: `.1.3.6.1.4.1.41112.1.10.1.5.2.1`
   - States: Multiple QAM levels
   - Reference: `LibreNMS/OS/AirosAfLtu.php`

**Effort**: 2-4 hours (state sensors with YAML definitions)

---

### **TIER 2 - HIGH (Week 1-2)** 🟡

**Impact**: Enhanced AirFiber monitoring for capacity planning and troubleshooting

3. **AirFiber AF60 - RSSI Per-Chain**
   - Local RSSI chain 0/1: `.1.3.6.1.4.1.41112.1.11.1.5.17.1`, `.1.3.6.1.4.1.41112.1.11.1.5.18.1`
   - Remote RSSI chain 0/1: `.1.3.6.1.4.1.41112.1.11.1.5.19.1`, `.1.3.6.1.4.1.41112.1.11.1.5.20.1`

4. **AirFiber AF60 - SNR Per-Chain**
   - Local SNR chain 0/1: `.1.3.6.1.4.1.41112.1.11.1.5.21.1`, `.1.3.6.1.4.1.41112.1.11.1.5.22.1`
   - Remote SNR chain 0/1: `.1.3.6.1.4.1.41112.1.11.1.5.23.1`, `.1.3.6.1.4.1.41112.1.11.1.5.24.1`

5. **AirFiber AF60/AF-LTU - Core Wireless Metrics**
   - Frequency, Distance (1000x divisor), TX/RX Capacity (1000x divisor)

6. **AirFiber AF60 - Active Link Status**
   - State sensor for main/backup link selection

**Effort**: 4-6 hours (YAML sensor definitions)

---

### **TIER 3 - MEDIUM (Week 2-3)** 🟢

**Impact**: Enhanced UniFi and AirFiber optical monitoring

7. **UniFi - Channel to Frequency Conversion**
   - Add channel polling OID
   - Implement frequency calculation algorithm (channel → MHz)
   - Reference: `LibreNMS/OS/Unifi.php`

8. **AirFiber AF-LTU - Optical Power Sensors**
   - RX Power per chain (actual and ideal)
   - TX EIRP, Signal level per chain

**Effort**: 6-8 hours (vendor module enhancements + YAML)

---

### **TIER 4 - LARGE EFFORT (Week 3+)** 🔵

**Impact**: Complete MikroTik wireless monitoring

9. **MikroTik - Wireless Sensor Discovery**
   - Implement 11 wireless sensor types via vendor module
   - Tables: `mtxrWlApTable`, `mtxrWlStatTable`, `mtxrWl60GTable`, `mtxrLTEModemTable`
   - Pattern: Similar to LibreNMS `discoverWirelessClients()` methods
   - File: Create or enhance `lib/towerops/snmp/profiles/vendors/mikrotik.ex`

**Effort**: 12-16 hours (vendor module with multiple discovery methods)

---

## Files to Modify

### Immediate (Tier 1):
- `priv/profiles/os_discovery/airos-af60.yaml` - Add MCS rate state sensors
- `priv/profiles/os_discovery/airos-af-ltu.yaml` - Add modulation rate state sensors

### Short-term (Tier 2-3):
- `priv/profiles/os_discovery/airos-af60.yaml` - Add RSSI, SNR, frequency, distance, capacity
- `priv/profiles/os_discovery/airos-af-ltu.yaml` - Add frequency, distance, capacity, optical power
- `priv/profiles/os_discovery/unifi.yaml` - Add channel OID
- `lib/towerops/snmp/profiles/vendors/unifi.ex` - Frequency calculation

### Medium-term (Tier 4):
- `lib/towerops/snmp/profiles/vendors/mikrotik.ex` - Create or enhance with wireless discovery
- `priv/profiles/os_discovery/routeros.yaml` - Add wireless sensor tables (if using YAML approach)

---

## Test Coverage Requirements

### Tier 1 (State Sensors):
- Test all MCS/modulation states (1X through 9X for AF60)
- Test QAM levels for AF-LTU
- Verify state descriptions match LibreNMS mappings

### Tier 2 (Wireless Metrics):
- Test per-chain RSSI/SNR with multi-chain devices
- Test distance with various link distances
- Verify divisors (1000x for distance/capacity)

### Tier 4 (MikroTik Wireless):
- Test with multiple wireless interfaces (2.4GHz, 5GHz, 60GHz)
- Test with LTE modems
- Verify CCQ, client count, frequency across interface types

---

## Reference Files (LibreNMS)

### AirFiber:
- `~/dev/librenms/LibreNMS/OS/AirosAf60.php` - MCS state mappings
- `~/dev/librenms/LibreNMS/OS/AirosAfLtu.php` - Modulation state mappings
- `~/dev/librenms/includes/discovery/sensors/airos-af*.inc.php` - Legacy PHP discovery

### MikroTik:
- `~/dev/librenms/LibreNMS/OS/Routeros.php` - All 11 wireless discovery methods
- `~/dev/librenms/includes/discovery/sensors/routeros.inc.php` - Legacy discovery

### UniFi:
- `~/dev/librenms/LibreNMS/OS/Unifi.php` - Frequency calculation and CCQ polling

---

## Success Metrics

After implementing all tiers:

| Vendor Platform | Current Parity | Target Parity | Delta |
|---|---|---|---|
| MikroTik RouterOS | 65-70% | 90%+ | +25% |
| Ubiquiti AirFiber AF-LTU | 40% | 90%+ | +50% |
| Ubiquiti AirFiber AF60 | 35% | 90%+ | +55% |
| Ubiquiti UniFi | 80% | 90%+ | +10% |

**Overall Priority Vendor Parity**: 65% → 90%+

---

## Conclusion

The analysis reveals that Towerops has **excellent basic sensor coverage** but is **missing critical wireless link quality indicators** for point-to-point devices (AirFiber) and **complete wireless monitoring** for MikroTik.

**Immediate action required**: Implement Tier 1 (AirFiber MCS/modulation rate state sensors) to enable production link health monitoring.

**Strategic priority**: MikroTik wireless sensor discovery (Tier 4) is the largest gap but requires significant effort. Should be planned as a dedicated sprint after Tiers 1-3 are complete.
