如何在NS3中设置节点的IP地址和数据?

时间:2018-03-03 23:18:24

标签: c++ ns-3

我有两个关于ns-3的主要问题。

  1. 我完全构建了拓扑,但我希望能够设置(更改)NodeContainer中存在的节点的IP地址。这是可能的,如果是这样的话?

  2. 我需要设置节点所持有的数据,因为我正在模拟点对点流媒体服务。我不明白如何更改节点保存的数据,甚至不知道如何查看数据。

  3. 抱歉延误。以下是我用来尝试设置节点IP地址的代码片段。其中csmaTopLeftParentToTopLeft是NodeContainer

    node = csmaTopLeftParentToTopLeft.Get(2);
    
    ipv4 = node->GetObject<Ipv4> (); // Get Ipv4 instance of the node
    
    addr = ipv4->GetAddress (0, 0).GetLocal (); // Get Ipv4InterfaceAddress of xth interface.
    IPAddress = Ip.c_str();
    addr.Set(IPAddress);
    

    这会运行,但如果我在print语句之后检查值,则表明该值从未实际更改过。

    这些事情看起来似乎不应该是这么难做但我已经尝试了很多方法并搜索互联网,但在这个主题上找不到任何东西。

1 个答案:

答案 0 :(得分:1)

我想出了如何设置节点的IP地址。

 Ptr<Node> node;
 Ptr<Ipv4> ipv4;
 Ipv4InterfaceAddress addr;
 Ipv4Address addressIp;
 const char * IPAddress;

 IPAddress = Ip.c_str();

 Ptr<NetDevice> device =  devices.Get(counter);

 node = device->GetNode();

 ipv4 = node->GetObject<Ipv4>(); // Get Ipv4 instance of the node

 int32_t interface = ipv4->GetInterfaceForDevice (device);
 if (interface == -1) {
   interface = ipv4->AddInterface (device);
 }

 Ipv4InterfaceAddress ipv4Addr = Ipv4InterfaceAddress (Ipv4Address(IPAddress), Ipv4Mask ("/16"));

 ipv4->AddAddress (interface, ipv4Addr);
 ipv4->SetMetric (interface, 1);
 ipv4->SetUp (interface);