C++ 如何使用ns3实现多播动态加入/删减

C++ 如何使用ns3实现多播动态加入/删减,c++,multicast,ns-3,C++,Multicast,Ns 3,是否有一种方法可以使用ns3实现多播网络中节点的动态修剪/嫁接。我能找到的所有资源都只实现多播网络的静态路由。引用此: 在ns-3中,我们为执行setDefaultMulticastute(dev,nd)的节点路由表设置默认多播路由,如文档所述,这相当于执行以下操作: route add 224.0.0.0 netmask 240.0.0.0 dev nd 在物理世界中为linux服务器设置多播时,我们需要为路由表中的多播地址设置路由。在ns-3模拟世界中,我们必须对使用SetDef

是否有一种方法可以使用ns3实现多播网络中节点的动态修剪/嫁接。我能找到的所有资源都只实现多播网络的静态路由。

引用此:

在ns-3中,我们为执行
setDefaultMulticastute(dev,nd)
的节点路由表设置默认多播路由,如文档所述,这相当于执行以下操作:

    route add 224.0.0.0 netmask 240.0.0.0 dev nd
在物理世界中为linux服务器设置多播时,我们需要为路由表中的多播地址设置路由。在ns-3模拟世界中,我们必须对使用
SetDefaultMulticastRoute(dev,nd)
创建的每个节点执行相同的操作

静态多播路由用于从一个LAN路由到另一个LAN。在现实世界中,我们需要一个知道如何路由多播的路由器。在ns-3模拟世界中,我们需要一个知道如何路由多播的路由器。因此,在ns-3中,我们需要使用安装在模拟中充当路由器的节点上的
AddMulticastRoute()
设置从一个LAN到另一个LAN的静态路由

如果有一个ns-3助手可以在
NodeContainer
NetDeviceContainer
上安装默认的多播路由,那就太好了。但是,该方法需要一个节点及其关联的
NetDevice
,因此必须使用循环来设置它们,假设
NodeContainer
中的
0..N
节点与
NetDeviceContainer
中的
0..N
节点直接相关

    for (int i = 0; i < N; i++) {
        Ptr<Node> sender = nodecontainer.Get (i);
        Ptr<NetDevice> senderIf = netdevicecontainer.Get (i);
        multicast.SetDefaultMulticastRoute (sender, senderIf);
    }
    78  if (m_socket == 0)
    79     {
    80       TypeId tid = TypeId::LookupByName ("ns3::UdpSocketFactory");
    81       m_socket = Socket::CreateSocket (GetNode (), tid);
    82       InetSocketAddress local = InetSocketAddress (Ipv4Address::GetAny (), m_port);
    83       m_socket->Bind (local);
    84       if (addressUtils::IsMulticast (m_local))
    85         {
    86           Ptr<UdpSocket> udpSocket = DynamicCast<UdpSocket> (m_socket);
    87           if (udpSocket)
    88             {
    89               // equivalent to setsockopt (MCAST_JOIN_GROUP)
    90               udpSocket->MulticastJoinGroup (0, m_local);
    91             }
    92           else
    93             {
    94               NS_FATAL_ERROR ("Error: Failed to join multicast group");
    95             }
    96         }
    97     }