跳转到内容

设置、状态与事件

struct PeerEndpoint {
std::string host{};
uint16_t port = 0;
};

来自 TOML [[peer]].uri,已去掉 tcp:// 前缀。

get_config_info() 返回的生效设置副本。

字段类型说明
instance_namestd::string实例名,缺省取 hostname
hostnamestd::string主机名,缺省 Espressif,最多 32 码点
instance_idstd::array<uint8_t,16>UUID 字节
has_instance_idbool是否已确定 UUID(内部状态)
instance_name_explicitboolinstance_name 是否显式配置(内部状态)
network_namestd::string网络名,缺省 default
network_secretstd::string网络密钥;对外副本恒为空
peersstd::vector<PeerEndpoint>入口列表
has_static_ipv4bool是否配置静态 IPv4
static_ipv4uint32_t静态 IPv4 数值
static_prefixuint8_t前缀,缺省 24
dhcpbool是否启用 DHCP
dhcp_has_subnetbool是否显式配置 DHCP 子网(内部状态)
dhcp_subnetuint32_tDHCP 子网网络号
dhcp_prefixuint8_tDHCP 子网前缀
enable_encryptionbool是否加密数据与 RPC
mtuuint16_t虚拟 MTU

has_instance_id、instance_name_explicit、dhcp_has_subnet 是内部状态位,应用通常不需要读取。

enum class State : uint8_t {
Uninitialized,
Stopped,
WaitingUnderlay,
Connecting,
Handshaking,
Syncing,
Ready,
Stopping,
Error,
};

迁移与语义见 状态机、事件与时序。

enum class EventType : uint8_t {
Started,
PeerUp,
NetworkReady,
PeerDown, // 预留,当前不产生
Error,
Stopped,
};
字段类型说明
stateState当前状态
peer_iduint32_t本机 peer id,0 表示尚未分配
virtual_ipv4uint32_t虚拟 IPv4 数值
prefix_lenuint8_t前缀长度
direct_peer_countsize_t已握手直连数
reachable_route_countsize_t可达路由数
last_erroresp_err_t最近一次错误
dropped_packetsuint64_t丢弃的报文数
struct Event {
EventType type = EventType::Error;
Status status{};
uint32_t peer_id = 0; // PeerUp 时有效
};
using EventCallback = void (*)(const Event& event, void* user_data) noexcept;
  • 在控制面任务中同步执行;
  • 必须快速返回;
  • 可调用只读接口与 connect()/disconnect();
  • 禁止 stop()/析构。
struct RuntimeOptions {
EventCallback on_event = nullptr;
void* user_data = nullptr;
};

user_data 在 stop() 返回前保持有效;多实例时用它区分上下文。

常量值
kMinMtu576
kDefaultMtu1380
kDefaultDhcpSubnet0x0A7E7E00(10.126.126.0)
kDefaultDhcpPrefix24
kDefaultHostname"Espressif"
kDefaultNetworkName"default"
  • IPv4 用主机字节序数值表示,例如 10.144.144.10 = 0x0A90900A;
  • 打印时按 (ip >> 24) & 0xff 依次取字节;
  • peer_id 是 32 位无符号整数,日志里常用 0x%08x。