fix(network): auto-cache LAN iface for carrier when CLAWD_ETH_IFACE unset
First getWiredIfaceWithCarrier() result locks _lanMonitoredIface; subsequent hasLanCableCarrier only reads that sysfs carrier so unplug reliably turns LAN off. CLAWD_ETH_IFACE still overrides. Made-with: Cursor
This commit is contained in:
@@ -62,9 +62,12 @@ function hasWiredCarrier() {
|
||||
return getWiredIfaceWithCarrier() !== null;
|
||||
}
|
||||
|
||||
/** LAN 灯:未配 CLAWD_ETH_IFACE 时,首次见 carrier 的有线口会缓存,之后只读该口(拔线即灭) */
|
||||
let _lanMonitoredIface = null;
|
||||
|
||||
/**
|
||||
* LAN 面板灯专用:若设置 CLAWD_ETH_IFACE,只认该口 carrier(拔网线必灭);
|
||||
* 未设置时退回 hasWiredCarrier()(可能受其它网口影响,建议在 box 上配置 end0 等)。
|
||||
* LAN 面板灯专用:优先 CLAWD_ETH_IFACE;否则自动锁定首次出现的 getWiredIfaceWithCarrier(),
|
||||
* 之后仅看该口 carrier(避免「任意有线」与其它虚拟口混淆)。多口同时在线时仍以扫描序为准,可用手动 env 覆盖。
|
||||
*/
|
||||
function hasLanCableCarrier() {
|
||||
const explicit = process.env.CLAWD_ETH_IFACE;
|
||||
@@ -75,7 +78,20 @@ function hasLanCableCarrier() {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return hasWiredCarrier();
|
||||
|
||||
if (_lanMonitoredIface) {
|
||||
try {
|
||||
return fs.readFileSync(`/sys/class/net/${_lanMonitoredIface}/carrier`, 'utf8').trim() === '1';
|
||||
} catch (_) {
|
||||
_lanMonitoredIface = null;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
const wired = getWiredIfaceWithCarrier();
|
||||
if (!wired) return false;
|
||||
_lanMonitoredIface = wired;
|
||||
return true;
|
||||
}
|
||||
|
||||
function _tryPingInternet() {
|
||||
|
||||
Reference in New Issue
Block a user