#!/bin/sh
# 容器网络形态由【兼容层】统一管理，本脚本在procd/netifd启动前把配置摆好。
#
# 为什么LAN直接绑eth0、而不是标准OpenWrt的br-lan网桥：
#   容器运行在【用户命名空间】里，其挂载命名空间归该userns所有，因此容器内的
#   /sys无法按netns隔离——它显示的是【宿主】的网卡（bond0/lan1/wan1/imq0…）。
#   netifd只能管理「在 /sys里同名存在」的设备：eth0/eth1恰好在宿主上也叫
#   eth0/eth1所以可用，而br-lan在宿主上不存在，netifd就会报NO_DEVICE且
#   永远不会创建它。宿主也无法代为修正 /sys（在userns拥有的挂载命名空间里
#   mount会被拒）。故LAN直接使用eth0——功能完整、LuCI可见。
#
# 另外：本脚本仅在「尚未配置」时补默认形态。已选旁路由/上游的容器里
# network.lan由宿主按模式重写，此处保持不动。
# 尽力而为，始终退出0。

NET_ADMIN=0
if command -v ip >/dev/null 2>&1; then
    # 用veth探测：它由内核内建提供。不要用dummy —— dummy是可选模块，
    # 某些内核（如iKuai的5.10）没有它，会返回 "Not supported"，
    # 从而把「有权限」误判成「没权限」。
    if ip link add owcprobe0 type veth peer name owcprobe1 >/dev/null 2>&1; then
        ip link del owcprobe0 >/dev/null 2>&1
        NET_ADMIN=1
    fi
fi

if command -v uci >/dev/null 2>&1; then
    # --- 旧版本遗留清理 ---
    uci -q delete network.pluginlan 2>/dev/null
    # 早期版本尝试过br-lan：netifd在本环境无法创建它，清掉以免NO_DEVICE报错
    uci -q delete network.brlan 2>/dev/null

    if [ "$NET_ADMIN" = "1" ]; then
        # 未配置形态 → 补上OpenWrt的LAN/WAN（仅当完全没有lan时）
        if ! uci -q get network.lan >/dev/null 2>&1; then
            uci -q set network.lan=interface
            uci -q set network.lan.device=eth0
            uci -q set network.lan.proto=static
            uci -q set network.lan.ipaddr=10.99.99.1
            uci -q set network.lan.netmask=255.255.255.0
            uci -q set network.lan.auto=1
            uci -q get network.wan >/dev/null 2>&1 || {
                uci -q set network.wan=interface
                uci -q set network.wan.device=eth1
                uci -q set network.wan.proto=none
                uci -q set network.wan.auto=1
            }
        fi
    else
        # 没有网络管理能力：绝不能把设备交给netifd（会卡死ubus/netifd）
        uci -q delete network.lan 2>/dev/null
        uci -q delete network.wan 2>/dev/null
    fi
    uci -q commit network 2>/dev/null

    # 插件的LAN绑定：LAN接口名由兼容层固定，插件不必再猜
    if uci -q get network.lan >/dev/null 2>&1 && [ -f /etc/config/openclash ]; then
        uci -q set openclash.config.lan_interface_name='lan' 2>/dev/null
        uci -q commit openclash 2>/dev/null
    fi
fi
exit 0
