name: simplemesh-controller description: Controller 专用约束:只做策略 + MQTT 收发,不连 hostapd/system_monitor/backhaul。修改 src/controller.c、controller 策略或 MQTT 订阅/发布时使用。
SimpleMesh Controller 专用约束
最重要约束
接到与 Controller 相关的修改时,先判断是否符合本 skill 与全局架构(只 MQTT + 策略,不接底层数据源);若有偏离,先简要说明再确认是否执行。
职责(必须遵守)
- 只做:策略决策 + MQTT 收发。输入输出均为 MQTT。
- 不做:不直接连 hostapd、不连 system_monitor、不连 backhaul;不持有 WiFi/系统/回传的底层数据源。不读取 UCI 的 wifi_iface、backhaul、mode 等做连接逻辑(这些属于 Agent)。
- 运行位置:仅在 controller 设备;该设备可同时跑 Agent(本机也当节点),由 main_uloop 的
-m both决定是否启动 agent。
实现与文件
- 实现:
src/controller.c、src/controller.h。 - 本机 AL MAC:在 controller_init 中通过 platform/system_api.c 的 init_device_info 获取(如 br-lan),写入
ctx->controller_al_mac,回复 topology_report 时使用;不引入 backhaul,仅用系统通用接口。 - MQTT:使用
transport/mqtt_client.c、transport/mesh_mqtt.c、mqtt_topics.h;订阅 topology_query、topology_report 等;发布 topology_report(含 JOIN 响应)、topology_query 等。主题与报文格式以 doc/1_mqtt_topic.md 为准。 - 策略占位:在
controller_mqtt_on_message中解析 topology_query(JOIN)、topology_report 等;维护 mesh_node 表(如mesh_node_add_or_update);回复 topology_report。后续 RRM/BTM/STEER 等策略只在此处扩展 MQTT 收发与内存结构,不接 ubus/backhaul。 - 定时/任务:可用 uloop_timeout 或 main_task(与 agent 共用 main_task 调度方式亦可);不做 hostapd 订阅、不做 backhaul 检查。
修改/新增时的约束
- 新增功能:只加 MQTT 订阅/发布与策略逻辑(如新 topic、新报文解析、新策略决策)。不得在 controller 中引入 hostapd_ubus、backhaul、config_uci(wifi_iface、bh_iface、mode)、wifi_ubus 等 Agent 数据源。本机设备身份(AL MAC)仅通过 system_api.init_device_info 获取。
- MQTT 主题:在
mqtt_topics.h或 doc/1_mqtt_topic.md 中定义;实现与文档一致。
参考
- 全局框架:
.cursor/skills/simplemesh/SKILL.md - 架构与 MQTT:doc/0_architecture.md、doc/1_mqtt_topic.md
- 实现:
src/controller.c中controller_init(init_device_info)、controller_mqtt_on_message、mesh_node_add_or_update、mesh_mqtt_send_topology_report_response。 - 系统通用:
src/platform/system_api.c中init_device_info(设备 MAC 等)。