3

我想在 IntelliJ IDEA 中设置网络模拟。为此,我尝试将 IDE 配置为使用包中包含的 2-node-network.groovy 脚本。我可以运行模拟脚本并通过 Web 界面访问调制解调器,但某些 shell 命令(例如“tell”、“host”等)将不起作用。

到目前为止我采取的步骤:

  1. 在IDE中配置一个环境变量指向Unetstack主目录(unet_home=.../unet-3.0.0/)

  2. 在 IDE 中使用从 2-node-network.groovy 脚本复制的代码进行了新的运行配置,但更改了 home 变量:

    import org.arl.fjage.RealTimePlatform

    def unet_home = System.getenv("unet_home");
    println(unet_home)

    println '''
    2-node network
    --------------
    Stack:
    Node A: tcp://localhost:1101, http://localhost:8081/
    Node B: tcp://localhost:1102, http://localhost:8082/
    '''

    platform = RealTimePlatform   // use real-time mode

    // run the simulation forever
    simulate {
        node 'A', location: [ 0.km, 0.km, -15.m], web: 8081, api: 1101, stack: "$unet_home/etc/setup"
        node 'B', location: [ 1.km, 0.km, -15.m], web: 8082, api: 1102, stack: "$unet_home/etc/setup"
    }

网页外壳输出:

> mac
<<< CSMA >>>

[org.arl.unet.mac.CSMAParam]
  maxBackoff = 30.0
  minBackoff = 0.5
  phy = phy
  reservationsPending = 0

[org.arl.unet.mac.MacParam]
  ackPayloadSize = 0
  channelBusy = false
  maxReservationDuration = 600.0
  recommendedReservationDuration = 15.0
  reservationPayloadSize = 0
> tell host('A'), "Hello"
Unknown method: host(...)
> tell
Unknown command or property: tell
>
4

1 回答 1

1

在 shell 启动过程中,命令是从etc/fshrc.groovy文件中加载的。看来这个文件执行失败了,可能是因为找不到。

初始化脚本用于查找的系统属性etcunet.home(not unet_home)。这通常在启动 Java 时bin/unet在环境变量的 shell 脚本中设置:UNET_HOME

java -Dunet.home="$UNET_HOME" ...

如果您使用 shell 脚本运行模拟,则应将环境变量UNET_HOME(区分大小写)设置为指向unet-3.0.0包含该文件夹的etc/文件夹。如果你直接java自己运行,你应该unet.home像上图那样设置系统属性。

在您的模拟脚本中,您可以检查是否正确设置:

println(System.getProperty('unet.home'))

帮助您调试。

于 2019-10-13T11:42:05.447 回答