v1.1.0: Complete kernel modules, fix WebUI bugs

Kernel modules fully implemented for kernel 6.6/Tensor G5:
- rc_wifi_mon: kprobes kallsyms, bcmdhd iovar monitor/promisc/allmulti,
  sysfs status at /sys/kernel/rc_wifi_mon/, clean unpatch on unload
- rc_shannon_cmd: ioctl interface (AT_CMD, GET_URC, SET_TIMEOUT,
  GET_STATUS, FLUSH), URC ring buffer (64 entries), modem probe on init
- rc_diag_bridge: HDLC decode with CRC-16 validation, FTM ioctl,
  EFS read/write/stat/unlink, version query, subsystem dispatch
- rc_ioctl.h: shared userspace header for all ioctl definitions
- All modules handle class_create() API change in kernel 6.4+

WebUI fixes:
- Fix malformed WiFi firmware JSON output
- Add vonr/vt/apn/nradv to carrier config read endpoint
- Fix carrier toggle state loading in frontend
- Fix redundant replace in kmod toggle logic

Makefile: single-module build (MOD=), make package target
uninstall.sh: unload kernel modules before cleanup
This commit is contained in:
sssnake
2026-03-31 20:25:44 -07:00
parent bb8f2aae2a
commit db07b4f7ef
10 changed files with 1656 additions and 204 deletions

View File

@@ -532,7 +532,7 @@ async function loadWifi() {
}
// WiFi hardware info
const wifiText = await fetch('/api/wifi/info').then(r => r.text()).catch(() => '');
const wifiText = await fetch('/api/wifi/info').then(r => r.ok ? r.text() : '').catch(() => '');
const wc = document.getElementById('wifi-hw-info');
if (wifiText.trim()) {
const lines = wifiText.trim().split('\n').filter(l => l.includes('='));
@@ -576,7 +576,7 @@ function updateKmodBtn(id, loaded) {
async function toggleKmod(mod) {
const kmod = await api('/api/kmod');
const key = mod.replace('rc_', '').replace('_cmd', '_cmd');
const key = mod.replace('rc_', '').replace('_cmd', '');
const mapKey = mod === 'rc_wifi_mon' ? 'wifi_mon' : mod === 'rc_shannon_cmd' ? 'shannon_cmd' : 'diag_bridge';
const loaded = kmod && kmod[mapKey];
const action = loaded ? 'unload' : 'load';
@@ -683,7 +683,11 @@ async function loadCarrier() {
const cc = await api('/api/carrier/config');
if (cc) {
setToggle('toggle-volte', cc.volte);
setToggle('toggle-vonr', cc.vonr);
setToggle('toggle-wfc', cc.wfc);
setToggle('toggle-vt', cc.vt);
setToggle('toggle-apn', cc.apn);
setToggle('toggle-nradv', cc.nradv);
setToggle('toggle-nettype', cc.hide_network_type === '0' ? '1' : '0');
}