# HG changeset patch # User Kirill Andreev # Date 1251206494 -14400 # Node ID f1119f03b7a98f5e51647c899ae0358b39af83ac # Parent 35963e5411c052085037fd162d2e239365619e46 Code review fixes diff -r 35963e5411c0 -r f1119f03b7a9 examples/mesh.cc --- a/examples/mesh.cc Tue Aug 25 15:27:49 2009 +0400 +++ b/examples/mesh.cc Tue Aug 25 17:21:34 2009 +0400 @@ -123,11 +123,18 @@ wifiPhy.SetChannel (wifiChannel.Create ()); // Install mesh point devices & protocols mesh.SetStackInstaller (m_stack, "Root", Mac48AddressValue (Mac48Address (m_root.c_str ()))); - mesh.SetSpreadInterfaceChannels (m_chan); + if (m_chan) + { + mesh.SetSpreadInterfaceChannels (MeshHelper::SPREAD_CHANNELS); + } + else + { + mesh.SetSpreadInterfaceChannels (MeshHelper::ZERO_CHANNEL); + } MeshInterfaceHelper interface = MeshInterfaceHelper::Default (); interface.SetType ("RandomStart", TimeValue (Seconds(m_randomStart))); - - meshDevices = mesh.Install (wifiPhy, interface, nodes, m_nIfaces); + mesh.SetNumberOfInterfaces (m_nIfaces); + meshDevices = mesh.Install (wifiPhy, interface, nodes); // Setup mobility MobilityHelper mobility; mobility.SetPositionAllocator ("ns3::GridPositionAllocator", diff -r 35963e5411c0 -r f1119f03b7a9 src/devices/mesh/mesh-point-device.cc --- a/src/devices/mesh/mesh-point-device.cc Tue Aug 25 15:27:49 2009 +0400 +++ b/src/devices/mesh/mesh-point-device.cc Tue Aug 25 17:21:34 2009 +0400 @@ -96,7 +96,7 @@ if (dst48.IsGroup ()) { Ptr packet_copy = packet->Copy (); - if (m_removeRoutingStuff (incomingPort->GetIfIndex (), src48, dst48, packet_copy, realProtocol)) + if (m_routingProtocol->RemoveRoutingStuff (incomingPort->GetIfIndex (), src48, dst48, packet_copy, realProtocol)) { m_rxCallback (this, packet_copy, realProtocol, src); Forward (incomingPort, packet, protocol, src48, dst48); @@ -109,10 +109,9 @@ if (dst48 == m_address) { Ptr packet_copy = packet->Copy (); - if (m_removeRoutingStuff (incomingPort->GetIfIndex (), src48, dst48, packet_copy, realProtocol)) + if (m_routingProtocol->RemoveRoutingStuff (incomingPort->GetIfIndex (), src48, dst48, packet_copy, realProtocol)) { m_rxCallback (this, packet_copy, realProtocol, src); - m_rxStats.unicastData++; m_rxStats.unicastDataBytes += packet->GetSize (); } @@ -127,7 +126,8 @@ const Mac48Address src, const Mac48Address dst) { // pass through routing protocol - m_requestRoute (inport->GetIfIndex (), src, dst, packet, protocol, m_myResponse); + m_routingProtocol->RequestRoute (inport->GetIfIndex (), src, dst, packet, protocol, MakeCallback ( + &MeshPointDevice::DoSend, this)); } void @@ -240,7 +240,8 @@ MeshPointDevice::Send (Ptr packet, const Address& dest, uint16_t protocolNumber) { const Mac48Address dst48 = Mac48Address::ConvertFrom (dest); - return m_requestRoute (m_ifIndex, m_address, dst48, packet, protocolNumber, m_myResponse); + return m_routingProtocol->RequestRoute (m_ifIndex, m_address, dst48, packet, protocolNumber, MakeCallback ( + &MeshPointDevice::DoSend, this)); } bool @@ -249,7 +250,8 @@ { const Mac48Address src48 = Mac48Address::ConvertFrom (src); const Mac48Address dst48 = Mac48Address::ConvertFrom (dest); - return m_requestRoute (m_ifIndex, src48, dst48, packet, protocolNumber, m_myResponse); + return m_routingProtocol->RequestRoute (m_ifIndex, src48, dst48, packet, protocolNumber, MakeCallback ( + &MeshPointDevice::DoSend, this)); } Ptr @@ -377,14 +379,9 @@ MeshPointDevice::SetRoutingProtocol (Ptr protocol) { NS_LOG_FUNCTION_NOARGS (); - NS_ASSERT_MSG (PeekPointer (protocol->GetMeshPoint ()) == this, "Routing protocol must be installed on mesh point to be useful."); - m_routingProtocol = protocol; - m_requestRoute = MakeCallback (&MeshL2RoutingProtocol::RequestRoute, protocol); - m_removeRoutingStuff = MakeCallback (&MeshL2RoutingProtocol::RemoveRoutingStuff, protocol); - m_myResponse = MakeCallback (&MeshPointDevice::DoSend, this); } Ptr diff -r 35963e5411c0 -r f1119f03b7a9 src/devices/mesh/mesh-point-device.h --- a/src/devices/mesh/mesh-point-device.h Tue Aug 25 15:27:49 2009 +0400 +++ b/src/devices/mesh/mesh-point-device.h Tue Aug 25 17:21:34 2009 +0400 @@ -163,18 +163,6 @@ uint16_t m_mtu; /// Virtual channel for upper layers Ptr m_channel; - - /// Routing request callback - Callback, - uint16_t, - MeshL2RoutingProtocol::RouteReplyCallback> m_requestRoute; - Callback, uint16_t&> m_removeRoutingStuff; - /// Routing response callback, this is supplied to mesh routing protocol - MeshL2RoutingProtocol::RouteReplyCallback m_myResponse; /// Current routing protocol, used mainly by GetRoutingProtocol Ptr m_routingProtocol; diff -r 35963e5411c0 -r f1119f03b7a9 src/helper/mesh-helper.cc --- a/src/helper/mesh-helper.cc Tue Aug 25 15:27:49 2009 +0400 +++ b/src/helper/mesh-helper.cc Tue Aug 25 17:21:34 2009 +0400 @@ -27,13 +27,14 @@ namespace ns3 { MeshHelper::MeshHelper () : - m_spreadInterfaceChannels (false), m_stack (0) + m_nInterfaces (1), + m_spreadChannelPolicy (ZERO_CHANNEL), m_stack (0) { } void -MeshHelper::SetSpreadInterfaceChannels (bool s) +MeshHelper::SetSpreadInterfaceChannels (enum ChannelPolicy policy) { - m_spreadInterfaceChannels = s; + m_spreadChannelPolicy = policy; } void MeshHelper::SetStackInstaller (std::string type, @@ -64,9 +65,14 @@ } } +void +MeshHelper::SetNumberOfInterfaces (uint32_t nInterfaces) +{ + m_nInterfaces = nInterfaces; +} NetDeviceContainer MeshHelper::Install (const WifiPhyHelper &phyHelper, const MeshInterfaceHelper &interfaceHelper, - NodeContainer c, uint32_t nInterfaces) const + NodeContainer c) const { NetDeviceContainer devices; NS_ASSERT (m_stack != 0); @@ -80,11 +86,10 @@ node->AddDevice (mp); // Create wifi interfaces (single interface by default) - for (uint32_t i = 0; i < nInterfaces; ++i) + for (uint32_t i = 0; i < m_nInterfaces; ++i) { uint32_t channel = i * 5; - Ptr iface = interfaceHelper.CreateInterface (phyHelper, node, - (m_spreadInterfaceChannels ? channel : 0)); + Ptr iface = interfaceHelper.CreateInterface (phyHelper, node, channel); mp->AddInterface (iface); } if (!m_stack->InstallStack (mp)) @@ -96,13 +101,6 @@ } return devices; } - -NetDeviceContainer -MeshHelper::Install (const WifiPhyHelper &phy, const MeshInterfaceHelper &interfaceHelper, Ptr node, - uint32_t nInterfaces) const -{ - return Install (phy, interfaceHelper, NodeContainer (node), nInterfaces); -} void MeshHelper::Report (const ns3::Ptr& device, std::ostream& os) { diff -r 35963e5411c0 -r f1119f03b7a9 src/helper/mesh-helper.h --- a/src/helper/mesh-helper.h Tue Aug 25 15:27:49 2009 +0400 +++ b/src/helper/mesh-helper.h Tue Aug 25 17:21:34 2009 +0400 @@ -46,8 +46,17 @@ * * If set to true different non-overlaping 20MHz frequency * channels will be assigned to different mesh point interfaces. - */ - void SetSpreadInterfaceChannels (bool); + */ + enum ChannelPolicy { + SPREAD_CHANNELS, + ZERO_CHANNEL + }; + void SetSpreadInterfaceChannels (ChannelPolicy); + /** + * \brief Set a number of interfaces in a mesh network + * \param nInterfaces is the number of interfaces + */ + void SetNumberOfInterfaces (uint32_t nInterfaces); /** * \brief Install 802.11s mesh device & protocols on given node list @@ -59,18 +68,8 @@ * * \return list of created mesh point devices, see MeshPointDevice */ - NetDeviceContainer Install (const WifiPhyHelper &phyHelper, const MeshInterfaceHelper &interfaceHelper, NodeContainer c, uint32_t nInterfaces = 1) const; - /** - * \brief Install 802.11s mesh device & protocols on given node - * - * \param phy Wifi PHY helper - * \param node Node to install - * \param roots List of root mesh points - * \param nInterfaces Number of mesh point radio interfaces (= WiFi NICs) - * - * \return list of created mesh point devices, see MeshPointDevice - */ - NetDeviceContainer Install (const WifiPhyHelper &phy, const MeshInterfaceHelper &interfaceHelper, Ptr node, uint32_t nInterfaces = 1) const; + NetDeviceContainer + Install (const WifiPhyHelper &phyHelper, const MeshInterfaceHelper &interfaceHelper, NodeContainer c) const; /** * \param type the type of ns3::MeshStack. * @@ -89,7 +88,8 @@ void Report (const ns3::Ptr&, std::ostream&); void ResetStats (const ns3::Ptr&); private: - bool m_spreadInterfaceChannels; + uint32_t m_nInterfaces; + ChannelPolicy m_spreadChannelPolicy; Ptr m_stack; ObjectFactory m_stackFactory; };