You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OMNeT++ SDN场景配置多控制器仿真运行崩溃问题求助

错误原因分析

你遇到的退出码-1073741819是Windows平台下典型的空指针访问错误(STATUS_ACCESS_VIOLATION),问题全部出在你修改后的My_OFA_switch::connect代码中:

  • connectAddr和ctl变量未初始化,如果某台交换机的connectAddress参数既不是controller1也不是controller2,两个判断分支都不命中,后续调用地址解析时访问野指针直接崩溃
  • 你直接对getSubmodule的返回值调用getFullPath(),如果对应名称的控制器模块不存在,getSubmodule返回空指针,直接调用成员函数会触发崩溃
  • 没有加地址解析成功的校验逻辑,解析失败时连接空地址也会触发崩溃

修复后的connect函数代码

void My_OFA_switch::connect() {
  socket.renewSocket();
  int connectPort = par("connectPort");
  const char *connectAddress = par("connectAddress");
  EV << "connectAddress  = " << connectAddress << " connectPort =" << connectPort << endl;

  const char *connectAddr = connectAddress; // 用参数值做兜底默认值
  cModule *ctl = nullptr; // 显式初始化为空指针

  if (strcmp(connectAddress, "controller1") == 0) {
    ctl = getSystemModule()->getSubmodule("controller1");
  } else if (strcmp(connectAddress, "controller2") == 0) {
    ctl = getSystemModule()->getSubmodule("controller2");
  }

  if(ctl != nullptr) {
    connectAddr = ctl->getFullPath().c_str();
    EV << "ctl->getFullPath() = " << connectAddr << endl;
  }

  L3Address ctlIPAddr;
  bool resolveRes = L3AddressResolver().tryResolve(connectAddr, ctlIPAddr);
  EV << "connect L3Address resolve result = " << resolveRes << " addr = " << ctlIPAddr << endl;
  // 增加解析成功判断,避免连接无效地址
  if (resolveRes && !ctlIPAddr.isUnspecified()) {
    socket.connect(ctlIPAddr, connectPort);
  } else {
    throw cRuntimeError("Failed to resolve controller address: %s", connectAddr);
  }
}

同时需要在ini配置中为每台交换机指定对应的控制器:

*.switch[0].connectAddress = "controller1"
*.switch[1].connectAddress = "controller2"
*.switch[*].connectPort = 6633

额外确认你的NED网络定义中,根网络下确实存在命名为controller1和controller2的两个控制器子模块。


Switch.cc代码是否需要修改

不需要修改。这段代码是控制器行为模块获取同控制器单元下ofa_controller实例的逻辑,只要你两个控制器的NED定义中都包含ofa_controller子模块、且都绑定了Switch行为类,该代码可以正常运行。


内容的提问来源于stack exchange,提问作者Amthal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 18:06:10