# HG changeset patch # User Raj Bhattacharjea # Date 1235451387 18000 # Node ID 6ef5bba17bf956cba63192746461a485060ade6e # Parent c070d2fca46d95725125c8dcd04b9ee66795fa93# Parent ef9ae8962bbb6cad1e7de447660822d3ac863b13 Sync with ns-3-dev diff -r c070d2fca46d -r 6ef5bba17bf9 bindings/python/ns3_module_core.py --- a/bindings/python/ns3_module_core.py Mon Feb 23 23:49:17 2009 -0500 +++ b/bindings/python/ns3_module_core.py Mon Feb 23 23:56:27 2009 -0500 @@ -45,6 +45,8 @@ module.add_class('IntToType', template_parameters=['6']) ## int-to-type.h: ns3::IntToType<6>::v_e [enumeration] module.add_enum('v_e', ['value'], outer_class=root_module['ns3::IntToType< 6 >']) + ## names.h: ns3::Names [class] + module.add_class('Names') ## object-base.h: ns3::ObjectBase [class] module.add_class('ObjectBase', allow_subclassing=True) ## object-factory.h: ns3::ObjectFactory [class] @@ -225,6 +227,7 @@ register_Ns3IntToType__4_methods(root_module, root_module['ns3::IntToType< 4 >']) register_Ns3IntToType__5_methods(root_module, root_module['ns3::IntToType< 5 >']) register_Ns3IntToType__6_methods(root_module, root_module['ns3::IntToType< 6 >']) + register_Ns3Names_methods(root_module, root_module['ns3::Names']) register_Ns3ObjectBase_methods(root_module, root_module['ns3::ObjectBase']) register_Ns3ObjectFactory_methods(root_module, root_module['ns3::ObjectFactory']) register_Ns3RandomVariable_methods(root_module, root_module['ns3::RandomVariable']) @@ -446,6 +449,58 @@ cls.add_copy_constructor() return +def register_Ns3Names_methods(root_module, cls): + ## names.h: ns3::Names::Names(ns3::Names const & arg0) [copy constructor] + cls.add_constructor([param('ns3::Names const &', 'arg0')]) + ## names.h: ns3::Names::Names() [constructor] + cls.add_constructor([]) + ## names.h: static bool ns3::Names::Add(std::string name, ns3::Ptr obj) [member function] + cls.add_method('Add', + 'bool', + [param('std::string', 'name'), param('ns3::Ptr< ns3::Object >', 'obj')], + is_static=True) + ## names.h: static bool ns3::Names::Add(std::string path, std::string name, ns3::Ptr object) [member function] + cls.add_method('Add', + 'bool', + [param('std::string', 'path'), param('std::string', 'name'), param('ns3::Ptr< ns3::Object >', 'object')], + is_static=True) + ## names.h: static bool ns3::Names::Add(ns3::Ptr context, std::string name, ns3::Ptr object) [member function] + cls.add_method('Add', + 'bool', + [param('ns3::Ptr< ns3::Object >', 'context'), param('std::string', 'name'), param('ns3::Ptr< ns3::Object >', 'object')], + is_static=True) + ## names.h: static bool ns3::Names::Rename(std::string oldpath, std::string newname) [member function] + cls.add_method('Rename', + 'bool', + [param('std::string', 'oldpath'), param('std::string', 'newname')], + is_static=True) + ## names.h: static bool ns3::Names::Rename(std::string path, std::string oldname, std::string newname) [member function] + cls.add_method('Rename', + 'bool', + [param('std::string', 'path'), param('std::string', 'oldname'), param('std::string', 'newname')], + is_static=True) + ## names.h: static bool ns3::Names::Rename(ns3::Ptr context, std::string oldname, std::string newname) [member function] + cls.add_method('Rename', + 'bool', + [param('ns3::Ptr< ns3::Object >', 'context'), param('std::string', 'oldname'), param('std::string', 'newname')], + is_static=True) + ## names.h: static std::string ns3::Names::FindName(ns3::Ptr object) [member function] + cls.add_method('FindName', + 'std::string', + [param('ns3::Ptr< ns3::Object >', 'object')], + is_static=True) + ## names.h: static std::string ns3::Names::FindPath(ns3::Ptr object) [member function] + cls.add_method('FindPath', + 'std::string', + [param('ns3::Ptr< ns3::Object >', 'object')], + is_static=True) + ## names.h: static void ns3::Names::Delete() [member function] + cls.add_method('Delete', + 'void', + [], + is_static=True) + return + def register_Ns3ObjectBase_methods(root_module, cls): ## object-base.h: ns3::ObjectBase::ObjectBase() [constructor] cls.add_constructor([]) @@ -2004,7 +2059,7 @@ module.add_function('TypeNameGet', 'std::string', [], - template_parameters=['long long']) + template_parameters=['long']) ## type-name.h: extern std::string ns3::TypeNameGet() [free function] module.add_function('TypeNameGet', 'std::string', @@ -2024,7 +2079,7 @@ module.add_function('TypeNameGet', 'std::string', [], - template_parameters=['unsigned long long']) + template_parameters=['unsigned long']) ## type-name.h: extern std::string ns3::TypeNameGet() [free function] module.add_function('TypeNameGet', 'std::string', diff -r c070d2fca46d -r 6ef5bba17bf9 bindings/python/ns3_module_helper.py --- a/bindings/python/ns3_module_helper.py Mon Feb 23 23:49:17 2009 -0500 +++ b/bindings/python/ns3_module_helper.py Mon Feb 23 23:56:27 2009 -0500 @@ -37,6 +37,8 @@ module.add_class('PointToPointHelper', allow_subclassing=False) ## static-multicast-route-helper.h: ns3::StaticMulticastRouteHelper [class] module.add_class('StaticMulticastRouteHelper', allow_subclassing=False) + ## tap-bridge-helper.h: ns3::TapBridgeHelper [class] + module.add_class('TapBridgeHelper', allow_subclassing=False) ## udp-echo-helper.h: ns3::UdpEchoClientHelper [class] module.add_class('UdpEchoClientHelper', allow_subclassing=False) ## udp-echo-helper.h: ns3::UdpEchoServerHelper [class] @@ -110,6 +112,7 @@ register_Ns3PacketSocketHelper_methods(root_module, root_module['ns3::PacketSocketHelper']) register_Ns3PointToPointHelper_methods(root_module, root_module['ns3::PointToPointHelper']) register_Ns3StaticMulticastRouteHelper_methods(root_module, root_module['ns3::StaticMulticastRouteHelper']) + register_Ns3TapBridgeHelper_methods(root_module, root_module['ns3::TapBridgeHelper']) register_Ns3UdpEchoClientHelper_methods(root_module, root_module['ns3::UdpEchoClientHelper']) register_Ns3UdpEchoServerHelper_methods(root_module, root_module['ns3::UdpEchoServerHelper']) register_Ns3V4PingHelper_methods(root_module, root_module['ns3::V4PingHelper']) @@ -124,6 +127,8 @@ cls.add_constructor([]) ## application-container.h: ns3::ApplicationContainer::ApplicationContainer(ns3::Ptr application) [constructor] cls.add_constructor([param('ns3::Ptr< ns3::Application >', 'application')]) + ## application-container.h: ns3::ApplicationContainer::ApplicationContainer(std::string name) [constructor] + cls.add_constructor([param('std::string', 'name')]) ## application-container.h: __gnu_cxx::__normal_iterator*,std::vector, std::allocator > > > ns3::ApplicationContainer::Begin() const [member function] cls.add_method('Begin', '__gnu_cxx::__normal_iterator< ns3::Ptr< ns3::Application > const, std::vector< ns3::Ptr< ns3::Application > > >', @@ -152,6 +157,10 @@ cls.add_method('Add', 'void', [param('ns3::Ptr< ns3::Application >', 'application')]) + ## application-container.h: void ns3::ApplicationContainer::Add(std::string name) [member function] + cls.add_method('Add', + 'void', + [param('std::string', 'name')]) ## application-container.h: void ns3::ApplicationContainer::Start(ns3::Time start) [member function] cls.add_method('Start', 'void', @@ -247,11 +256,31 @@ 'ns3::NetDeviceContainer', [param('ns3::Ptr< ns3::Node >', 'node')], is_const=True) + ## csma-helper.h: ns3::NetDeviceContainer ns3::CsmaHelper::Install(std::string name) const [member function] + cls.add_method('Install', + 'ns3::NetDeviceContainer', + [param('std::string', 'name')], + is_const=True) ## csma-helper.h: ns3::NetDeviceContainer ns3::CsmaHelper::Install(ns3::Ptr node, ns3::Ptr channel) const [member function] cls.add_method('Install', 'ns3::NetDeviceContainer', [param('ns3::Ptr< ns3::Node >', 'node'), param('ns3::Ptr< ns3::CsmaChannel >', 'channel')], is_const=True) + ## csma-helper.h: ns3::NetDeviceContainer ns3::CsmaHelper::Install(ns3::Ptr node, std::string channelName) const [member function] + cls.add_method('Install', + 'ns3::NetDeviceContainer', + [param('ns3::Ptr< ns3::Node >', 'node'), param('std::string', 'channelName')], + is_const=True) + ## csma-helper.h: ns3::NetDeviceContainer ns3::CsmaHelper::Install(std::string nodeName, ns3::Ptr channel) const [member function] + cls.add_method('Install', + 'ns3::NetDeviceContainer', + [param('std::string', 'nodeName'), param('ns3::Ptr< ns3::CsmaChannel >', 'channel')], + is_const=True) + ## csma-helper.h: ns3::NetDeviceContainer ns3::CsmaHelper::Install(std::string nodeName, std::string channelName) const [member function] + cls.add_method('Install', + 'ns3::NetDeviceContainer', + [param('std::string', 'nodeName'), param('std::string', 'channelName')], + is_const=True) ## csma-helper.h: ns3::NetDeviceContainer ns3::CsmaHelper::Install(ns3::NodeContainer const & c) const [member function] cls.add_method('Install', 'ns3::NetDeviceContainer', @@ -262,6 +291,11 @@ 'ns3::NetDeviceContainer', [param('ns3::NodeContainer const &', 'c'), param('ns3::Ptr< ns3::CsmaChannel >', 'channel')], is_const=True) + ## csma-helper.h: ns3::NetDeviceContainer ns3::CsmaHelper::Install(ns3::NodeContainer const & c, std::string channelName) const [member function] + cls.add_method('Install', + 'ns3::NetDeviceContainer', + [param('ns3::NodeContainer const &', 'c'), param('std::string', 'channelName')], + is_const=True) ## csma-helper.h: void ns3::CsmaHelper::InstallStar(ns3::Ptr hub, ns3::NodeContainer spokes, ns3::NetDeviceContainer & hubDevices, ns3::NetDeviceContainer & spokeDevices) [member function] cls.add_method('InstallStar', 'void', @@ -325,6 +359,11 @@ 'ns3::NetDeviceContainer', [param('ns3::Ptr< ns3::Node >', 'node')], is_const=True) + ## emu-helper.h: ns3::NetDeviceContainer ns3::EmuHelper::Install(std::string nodeName) const [member function] + cls.add_method('Install', + 'ns3::NetDeviceContainer', + [param('std::string', 'nodeName')], + is_const=True) ## emu-helper.h: ns3::NetDeviceContainer ns3::EmuHelper::Install(ns3::NodeContainer const & c) const [member function] cls.add_method('Install', 'ns3::NetDeviceContainer', @@ -336,6 +375,11 @@ def register_Ns3InternetStackHelper_methods(root_module, cls): ## internet-stack-helper.h: ns3::InternetStackHelper::InternetStackHelper() [constructor] cls.add_constructor([]) + ## internet-stack-helper.h: void ns3::InternetStackHelper::Install(std::string nodeName) const [member function] + cls.add_method('Install', + 'void', + [param('std::string', 'nodeName')], + is_const=True) ## internet-stack-helper.h: void ns3::InternetStackHelper::Install(ns3::Ptr node) const [member function] cls.add_method('Install', 'void', @@ -437,6 +481,10 @@ cls.add_method('PushReferenceMobilityModel', 'void', [param('ns3::Ptr< ns3::Object >', 'reference')]) + ## mobility-helper.h: void ns3::MobilityHelper::PushReferenceMobilityModel(std::string referenceName) [member function] + cls.add_method('PushReferenceMobilityModel', + 'void', + [param('std::string', 'referenceName')]) ## mobility-helper.h: void ns3::MobilityHelper::PopReferenceMobilityModel() [member function] cls.add_method('PopReferenceMobilityModel', 'void', @@ -451,6 +499,11 @@ 'void', [param('ns3::Ptr< ns3::Node >', 'node')], is_const=True) + ## mobility-helper.h: void ns3::MobilityHelper::Install(std::string nodeName) const [member function] + cls.add_method('Install', + 'void', + [param('std::string', 'nodeName')], + is_const=True) ## mobility-helper.h: void ns3::MobilityHelper::Install(ns3::NodeContainer container) const [member function] cls.add_method('Install', 'void', @@ -483,6 +536,8 @@ cls.add_constructor([]) ## net-device-container.h: ns3::NetDeviceContainer::NetDeviceContainer(ns3::Ptr dev) [constructor] cls.add_constructor([param('ns3::Ptr< ns3::NetDevice >', 'dev')]) + ## net-device-container.h: ns3::NetDeviceContainer::NetDeviceContainer(std::string devName) [constructor] + cls.add_constructor([param('std::string', 'devName')]) ## net-device-container.h: ns3::NetDeviceContainer::NetDeviceContainer(ns3::NetDeviceContainer const & a, ns3::NetDeviceContainer const & b) [constructor] cls.add_constructor([param('ns3::NetDeviceContainer const &', 'a'), param('ns3::NetDeviceContainer const &', 'b')]) ## net-device-container.h: __gnu_cxx::__normal_iterator*,std::vector, std::allocator > > > ns3::NetDeviceContainer::Begin() const [member function] @@ -521,6 +576,8 @@ cls.add_constructor([]) ## node-container.h: ns3::NodeContainer::NodeContainer(ns3::Ptr node) [constructor] cls.add_constructor([param('ns3::Ptr< ns3::Node >', 'node')]) + ## node-container.h: ns3::NodeContainer::NodeContainer(std::string nodeName) [constructor] + cls.add_constructor([param('std::string', 'nodeName')]) ## node-container.h: ns3::NodeContainer::NodeContainer(ns3::NodeContainer const & a, ns3::NodeContainer const & b) [constructor] cls.add_constructor([param('ns3::NodeContainer const &', 'a'), param('ns3::NodeContainer const &', 'b')]) ## node-container.h: ns3::NodeContainer::NodeContainer(ns3::NodeContainer const & a, ns3::NodeContainer const & b, ns3::NodeContainer const & c) [constructor] @@ -561,6 +618,10 @@ cls.add_method('Add', 'void', [param('ns3::Ptr< ns3::Node >', 'node')]) + ## node-container.h: void ns3::NodeContainer::Add(std::string nodeName) [member function] + cls.add_method('Add', + 'void', + [param('std::string', 'nodeName')]) ## node-container.h: static ns3::NodeContainer ns3::NodeContainer::GetGlobal() [member function] cls.add_method('GetGlobal', 'ns3::NodeContainer', @@ -595,6 +656,10 @@ cls.add_method('Install', 'void', [param('ns3::Ptr< ns3::Node >', 'node')]) + ## olsr-helper.h: void ns3::OlsrHelper::Install(std::string nodeName) [member function] + cls.add_method('Install', + 'void', + [param('std::string', 'nodeName')]) ## olsr-helper.h: void ns3::OlsrHelper::InstallAll() [member function] cls.add_method('InstallAll', 'void', @@ -648,6 +713,11 @@ 'void', [param('ns3::Ptr< ns3::Node >', 'node')], is_const=True) + ## packet-socket-helper.h: void ns3::PacketSocketHelper::Install(std::string nodeName) const [member function] + cls.add_method('Install', + 'void', + [param('std::string', 'nodeName')], + is_const=True) ## packet-socket-helper.h: void ns3::PacketSocketHelper::Install(ns3::NodeContainer c) const [member function] cls.add_method('Install', 'void', @@ -730,6 +800,18 @@ cls.add_method('Install', 'ns3::NetDeviceContainer', [param('ns3::Ptr< ns3::Node >', 'a'), param('ns3::Ptr< ns3::Node >', 'b')]) + ## point-to-point-helper.h: ns3::NetDeviceContainer ns3::PointToPointHelper::Install(ns3::Ptr a, std::string bName) [member function] + cls.add_method('Install', + 'ns3::NetDeviceContainer', + [param('ns3::Ptr< ns3::Node >', 'a'), param('std::string', 'bName')]) + ## point-to-point-helper.h: ns3::NetDeviceContainer ns3::PointToPointHelper::Install(std::string aName, ns3::Ptr b) [member function] + cls.add_method('Install', + 'ns3::NetDeviceContainer', + [param('std::string', 'aName'), param('ns3::Ptr< ns3::Node >', 'b')]) + ## point-to-point-helper.h: ns3::NetDeviceContainer ns3::PointToPointHelper::Install(std::string aNode, std::string bNode) [member function] + cls.add_method('Install', + 'ns3::NetDeviceContainer', + [param('std::string', 'aNode'), param('std::string', 'bNode')]) ## point-to-point-helper.h: void ns3::PointToPointHelper::InstallStar(ns3::Ptr hub, ns3::NodeContainer spokes, ns3::NetDeviceContainer & hubDevices, ns3::NetDeviceContainer & spokeDevices) [member function] cls.add_method('InstallStar', 'void', @@ -740,14 +822,38 @@ def register_Ns3StaticMulticastRouteHelper_methods(root_module, cls): ## static-multicast-route-helper.h: ns3::StaticMulticastRouteHelper::StaticMulticastRouteHelper() [constructor] cls.add_constructor([]) - ## static-multicast-route-helper.h: void ns3::StaticMulticastRouteHelper::AddMulticastRoute(ns3::Ptr arg0, ns3::Ipv4Address source, ns3::Ipv4Address group, ns3::Ptr input, ns3::NetDeviceContainer output) [member function] + ## static-multicast-route-helper.h: void ns3::StaticMulticastRouteHelper::AddMulticastRoute(ns3::Ptr n, ns3::Ipv4Address source, ns3::Ipv4Address group, ns3::Ptr input, ns3::NetDeviceContainer output) [member function] + cls.add_method('AddMulticastRoute', + 'void', + [param('ns3::Ptr< ns3::Node >', 'n'), param('ns3::Ipv4Address', 'source'), param('ns3::Ipv4Address', 'group'), param('ns3::Ptr< ns3::NetDevice >', 'input'), param('ns3::NetDeviceContainer', 'output')]) + ## static-multicast-route-helper.h: void ns3::StaticMulticastRouteHelper::AddMulticastRoute(std::string n, ns3::Ipv4Address source, ns3::Ipv4Address group, ns3::Ptr input, ns3::NetDeviceContainer output) [member function] cls.add_method('AddMulticastRoute', 'void', - [param('ns3::Ptr< ns3::Node >', 'arg0'), param('ns3::Ipv4Address', 'source'), param('ns3::Ipv4Address', 'group'), param('ns3::Ptr< ns3::NetDevice >', 'input'), param('ns3::NetDeviceContainer', 'output')]) + [param('std::string', 'n'), param('ns3::Ipv4Address', 'source'), param('ns3::Ipv4Address', 'group'), param('ns3::Ptr< ns3::NetDevice >', 'input'), param('ns3::NetDeviceContainer', 'output')]) + ## static-multicast-route-helper.h: void ns3::StaticMulticastRouteHelper::AddMulticastRoute(ns3::Ptr n, ns3::Ipv4Address source, ns3::Ipv4Address group, std::string inputName, ns3::NetDeviceContainer output) [member function] + cls.add_method('AddMulticastRoute', + 'void', + [param('ns3::Ptr< ns3::Node >', 'n'), param('ns3::Ipv4Address', 'source'), param('ns3::Ipv4Address', 'group'), param('std::string', 'inputName'), param('ns3::NetDeviceContainer', 'output')]) + ## static-multicast-route-helper.h: void ns3::StaticMulticastRouteHelper::AddMulticastRoute(std::string nName, ns3::Ipv4Address source, ns3::Ipv4Address group, std::string inputName, ns3::NetDeviceContainer output) [member function] + cls.add_method('AddMulticastRoute', + 'void', + [param('std::string', 'nName'), param('ns3::Ipv4Address', 'source'), param('ns3::Ipv4Address', 'group'), param('std::string', 'inputName'), param('ns3::NetDeviceContainer', 'output')]) ## static-multicast-route-helper.h: void ns3::StaticMulticastRouteHelper::SetDefaultMulticastRoute(ns3::Ptr n, ns3::Ptr nd) [member function] cls.add_method('SetDefaultMulticastRoute', 'void', [param('ns3::Ptr< ns3::Node >', 'n'), param('ns3::Ptr< ns3::NetDevice >', 'nd')]) + ## static-multicast-route-helper.h: void ns3::StaticMulticastRouteHelper::SetDefaultMulticastRoute(ns3::Ptr n, std::string ndName) [member function] + cls.add_method('SetDefaultMulticastRoute', + 'void', + [param('ns3::Ptr< ns3::Node >', 'n'), param('std::string', 'ndName')]) + ## static-multicast-route-helper.h: void ns3::StaticMulticastRouteHelper::SetDefaultMulticastRoute(std::string nName, ns3::Ptr nd) [member function] + cls.add_method('SetDefaultMulticastRoute', + 'void', + [param('std::string', 'nName'), param('ns3::Ptr< ns3::NetDevice >', 'nd')]) + ## static-multicast-route-helper.h: void ns3::StaticMulticastRouteHelper::SetDefaultMulticastRoute(std::string nName, std::string ndName) [member function] + cls.add_method('SetDefaultMulticastRoute', + 'void', + [param('std::string', 'nName'), param('std::string', 'ndName')]) ## static-multicast-route-helper.h: void ns3::StaticMulticastRouteHelper::JoinMulticastGroup(ns3::Ptr n, ns3::Ipv4Address source, ns3::Ipv4Address group) [member function] cls.add_method('JoinMulticastGroup', 'void', @@ -767,6 +873,11 @@ 'ns3::ApplicationContainer', [param('ns3::Ptr< ns3::Node >', 'node')], is_const=True) + ## udp-echo-helper.h: ns3::ApplicationContainer ns3::UdpEchoClientHelper::Install(std::string nodeName) const [member function] + cls.add_method('Install', + 'ns3::ApplicationContainer', + [param('std::string', 'nodeName')], + is_const=True) ## udp-echo-helper.h: ns3::ApplicationContainer ns3::UdpEchoClientHelper::Install(ns3::NodeContainer c) const [member function] cls.add_method('Install', 'ns3::ApplicationContainer', @@ -787,6 +898,11 @@ 'ns3::ApplicationContainer', [param('ns3::Ptr< ns3::Node >', 'node')], is_const=True) + ## udp-echo-helper.h: ns3::ApplicationContainer ns3::UdpEchoServerHelper::Install(std::string nodeName) const [member function] + cls.add_method('Install', + 'ns3::ApplicationContainer', + [param('std::string', 'nodeName')], + is_const=True) ## udp-echo-helper.h: ns3::ApplicationContainer ns3::UdpEchoServerHelper::Install(ns3::NodeContainer c) const [member function] cls.add_method('Install', 'ns3::ApplicationContainer', @@ -890,6 +1006,10 @@ cls.add_method('SetChannel', 'void', [param('ns3::Ptr< ns3::YansWifiChannel >', 'channel')]) + ## yans-wifi-helper.h: void ns3::YansWifiPhyHelper::SetChannel(std::string channelName) [member function] + cls.add_method('SetChannel', + 'void', + [param('std::string', 'channelName')]) ## yans-wifi-helper.h: void ns3::YansWifiPhyHelper::Set(std::string name, ns3::AttributeValue const & v) [member function] cls.add_method('Set', 'void', diff -r c070d2fca46d -r 6ef5bba17bf9 bindings/python/ns3_module_node.py --- a/bindings/python/ns3_module_node.py Mon Feb 23 23:49:17 2009 -0500 +++ b/bindings/python/ns3_module_node.py Mon Feb 23 23:56:27 2009 -0500 @@ -109,6 +109,8 @@ module.add_class('Channel', parent=root_module['ns3::Object']) ## drop-tail-queue.h: ns3::DropTailQueue [class] module.add_class('DropTailQueue', parent=root_module['ns3::Queue']) + ## drop-tail-queue.h: ns3::DropTailQueue::Mode [enumeration] + module.add_enum('Mode', ['ILLEGAL', 'PACKETS', 'BYTES'], outer_class=root_module['ns3::DropTailQueue']) ## ethernet-header.h: ns3::EthernetHeader [class] module.add_class('EthernetHeader', parent=root_module['ns3::Header']) ## ethernet-trailer.h: ns3::EthernetTrailer [class] @@ -2296,6 +2298,14 @@ is_static=True) ## drop-tail-queue.h: ns3::DropTailQueue::DropTailQueue() [constructor] cls.add_constructor([]) + ## drop-tail-queue.h: void ns3::DropTailQueue::SetMode(ns3::DropTailQueue::Mode mode) [member function] + cls.add_method('SetMode', + 'void', + [param('ns3::DropTailQueue::Mode', 'mode')]) + ## drop-tail-queue.h: ns3::DropTailQueue::Mode ns3::DropTailQueue::GetMode() [member function] + cls.add_method('GetMode', + 'ns3::DropTailQueue::Mode', + []) ## drop-tail-queue.h: bool ns3::DropTailQueue::DoEnqueue(ns3::Ptr p) [member function] cls.add_method('DoEnqueue', 'bool', diff -r c070d2fca46d -r 6ef5bba17bf9 bindings/python/ns3_module_simulator.py --- a/bindings/python/ns3_module_simulator.py Mon Feb 23 23:49:17 2009 -0500 +++ b/bindings/python/ns3_module_simulator.py Mon Feb 23 23:56:27 2009 -0500 @@ -1330,6 +1330,43 @@ cls.add_copy_constructor() return +def register_Ns3Ns2CalendarScheduler_methods(root_module, cls): + ## ns2-calendar-scheduler.h: ns3::Ns2CalendarScheduler::Ns2CalendarScheduler(ns3::Ns2CalendarScheduler const & arg0) [copy constructor] + cls.add_constructor([param('ns3::Ns2CalendarScheduler const &', 'arg0')]) + ## ns2-calendar-scheduler.h: static ns3::TypeId ns3::Ns2CalendarScheduler::GetTypeId() [member function] + cls.add_method('GetTypeId', + 'ns3::TypeId', + [], + is_static=True) + ## ns2-calendar-scheduler.h: ns3::Ns2CalendarScheduler::Ns2CalendarScheduler() [constructor] + cls.add_constructor([]) + ## ns2-calendar-scheduler.h: void ns3::Ns2CalendarScheduler::Insert(ns3::Scheduler::Event const & ev) [member function] + cls.add_method('Insert', + 'void', + [param('ns3::Scheduler::Event const &', 'ev')], + is_virtual=True) + ## ns2-calendar-scheduler.h: bool ns3::Ns2CalendarScheduler::IsEmpty() const [member function] + cls.add_method('IsEmpty', + 'bool', + [], + is_const=True, is_virtual=True) + ## ns2-calendar-scheduler.h: ns3::Scheduler::Event ns3::Ns2CalendarScheduler::PeekNext() const [member function] + cls.add_method('PeekNext', + 'ns3::Scheduler::Event', + [], + is_const=True, is_virtual=True) + ## ns2-calendar-scheduler.h: ns3::Scheduler::Event ns3::Ns2CalendarScheduler::RemoveNext() [member function] + cls.add_method('RemoveNext', + 'ns3::Scheduler::Event', + [], + is_virtual=True) + ## ns2-calendar-scheduler.h: void ns3::Ns2CalendarScheduler::Remove(ns3::Scheduler::Event const & ev) [member function] + cls.add_method('Remove', + 'void', + [param('ns3::Scheduler::Event const &', 'ev')], + is_virtual=True) + return + def register_Ns3RealtimeSimulatorImpl_methods(root_module, cls): ## realtime-simulator-impl.h: static ns3::TypeId ns3::RealtimeSimulatorImpl::GetTypeId() [member function] cls.add_method('GetTypeId', diff -r c070d2fca46d -r 6ef5bba17bf9 bindings/python/ns3_module_tap_bridge.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bindings/python/ns3_module_tap_bridge.py Mon Feb 23 23:56:27 2009 -0500 @@ -0,0 +1,235 @@ +from pybindgen import Module, FileCodeSink, param, retval, cppclass + +def register_types(module): + root_module = module.get_root() + + ## tap-bridge.h: ns3::TapBridge [class] + module.add_class('TapBridge', parent=root_module['ns3::NetDevice']) + + ## Register a nested module for the namespace Config + + nested_module = module.add_cpp_namespace('Config') + register_types_ns3_Config(nested_module) + + + ## Register a nested module for the namespace TimeStepPrecision + + nested_module = module.add_cpp_namespace('TimeStepPrecision') + register_types_ns3_TimeStepPrecision(nested_module) + + + ## Register a nested module for the namespace internal + + nested_module = module.add_cpp_namespace('internal') + register_types_ns3_internal(nested_module) + + + ## Register a nested module for the namespace olsr + + nested_module = module.add_cpp_namespace('olsr') + register_types_ns3_olsr(nested_module) + + +def register_types_ns3_Config(module): + root_module = module.get_root() + + +def register_types_ns3_TimeStepPrecision(module): + root_module = module.get_root() + + +def register_types_ns3_internal(module): + root_module = module.get_root() + + +def register_types_ns3_olsr(module): + root_module = module.get_root() + + +def register_methods(root_module): + register_Ns3TapBridge_methods(root_module, root_module['ns3::TapBridge']) + return + +def register_Ns3TapBridge_methods(root_module, cls): + ## tap-bridge.h: ns3::TapBridge::TapBridge(ns3::TapBridge const & arg0) [copy constructor] + cls.add_constructor([param('ns3::TapBridge const &', 'arg0')]) + ## tap-bridge.h: static ns3::TypeId ns3::TapBridge::GetTypeId() [member function] + cls.add_method('GetTypeId', + 'ns3::TypeId', + [], + is_static=True) + ## tap-bridge.h: ns3::TapBridge::TapBridge() [constructor] + cls.add_constructor([]) + ## tap-bridge.h: ns3::Ptr ns3::TapBridge::GetBridgedNetDevice() [member function] + cls.add_method('GetBridgedNetDevice', + 'ns3::Ptr< ns3::NetDevice >', + []) + ## tap-bridge.h: void ns3::TapBridge::SetBridgedNetDevice(ns3::Ptr bridgedDevice) [member function] + cls.add_method('SetBridgedNetDevice', + 'void', + [param('ns3::Ptr< ns3::NetDevice >', 'bridgedDevice')]) + ## tap-bridge.h: void ns3::TapBridge::Start(ns3::Time tStart) [member function] + cls.add_method('Start', + 'void', + [param('ns3::Time', 'tStart')]) + ## tap-bridge.h: void ns3::TapBridge::Stop(ns3::Time tStop) [member function] + cls.add_method('Stop', + 'void', + [param('ns3::Time', 'tStop')]) + ## tap-bridge.h: void ns3::TapBridge::SetName(std::string const name) [member function] + cls.add_method('SetName', + 'void', + [param('std::string const', 'name')], + is_virtual=True) + ## tap-bridge.h: std::string ns3::TapBridge::GetName() const [member function] + cls.add_method('GetName', + 'std::string', + [], + is_const=True, is_virtual=True) + ## tap-bridge.h: void ns3::TapBridge::SetIfIndex(uint32_t const index) [member function] + cls.add_method('SetIfIndex', + 'void', + [param('uint32_t const', 'index')], + is_virtual=True) + ## tap-bridge.h: uint32_t ns3::TapBridge::GetIfIndex() const [member function] + cls.add_method('GetIfIndex', + 'uint32_t', + [], + is_const=True, is_virtual=True) + ## tap-bridge.h: ns3::Ptr ns3::TapBridge::GetChannel() const [member function] + cls.add_method('GetChannel', + 'ns3::Ptr< ns3::Channel >', + [], + is_const=True, is_virtual=True) + ## tap-bridge.h: ns3::Address ns3::TapBridge::GetAddress() const [member function] + cls.add_method('GetAddress', + 'ns3::Address', + [], + is_const=True, is_virtual=True) + ## tap-bridge.h: bool ns3::TapBridge::SetMtu(uint16_t const mtu) [member function] + cls.add_method('SetMtu', + 'bool', + [param('uint16_t const', 'mtu')], + is_virtual=True) + ## tap-bridge.h: uint16_t ns3::TapBridge::GetMtu() const [member function] + cls.add_method('GetMtu', + 'uint16_t', + [], + is_const=True, is_virtual=True) + ## tap-bridge.h: bool ns3::TapBridge::IsLinkUp() const [member function] + cls.add_method('IsLinkUp', + 'bool', + [], + is_const=True, is_virtual=True) + ## tap-bridge.h: void ns3::TapBridge::SetLinkChangeCallback(ns3::Callback callback) [member function] + cls.add_method('SetLinkChangeCallback', + 'void', + [param('ns3::Callback< void, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'callback')], + is_virtual=True) + ## tap-bridge.h: bool ns3::TapBridge::IsBroadcast() const [member function] + cls.add_method('IsBroadcast', + 'bool', + [], + is_const=True, is_virtual=True) + ## tap-bridge.h: ns3::Address ns3::TapBridge::GetBroadcast() const [member function] + cls.add_method('GetBroadcast', + 'ns3::Address', + [], + is_const=True, is_virtual=True) + ## tap-bridge.h: bool ns3::TapBridge::IsMulticast() const [member function] + cls.add_method('IsMulticast', + 'bool', + [], + is_const=True, is_virtual=True) + ## tap-bridge.h: ns3::Address ns3::TapBridge::GetMulticast(ns3::Ipv4Address multicastGroup) const [member function] + cls.add_method('GetMulticast', + 'ns3::Address', + [param('ns3::Ipv4Address', 'multicastGroup')], + is_const=True, is_virtual=True) + ## tap-bridge.h: bool ns3::TapBridge::IsPointToPoint() const [member function] + cls.add_method('IsPointToPoint', + 'bool', + [], + is_const=True, is_virtual=True) + ## tap-bridge.h: bool ns3::TapBridge::IsBridge() const [member function] + cls.add_method('IsBridge', + 'bool', + [], + is_const=True, is_virtual=True) + ## tap-bridge.h: bool ns3::TapBridge::Send(ns3::Ptr packet, ns3::Address const & dest, uint16_t protocolNumber) [member function] + cls.add_method('Send', + 'bool', + [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::Address const &', 'dest'), param('uint16_t', 'protocolNumber')], + is_virtual=True) + ## tap-bridge.h: bool ns3::TapBridge::SendFrom(ns3::Ptr packet, ns3::Address const & source, ns3::Address const & dest, uint16_t protocolNumber) [member function] + cls.add_method('SendFrom', + 'bool', + [param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::Address const &', 'source'), param('ns3::Address const &', 'dest'), param('uint16_t', 'protocolNumber')], + is_virtual=True) + ## tap-bridge.h: ns3::Ptr ns3::TapBridge::GetNode() const [member function] + cls.add_method('GetNode', + 'ns3::Ptr< ns3::Node >', + [], + is_const=True, is_virtual=True) + ## tap-bridge.h: void ns3::TapBridge::SetNode(ns3::Ptr node) [member function] + cls.add_method('SetNode', + 'void', + [param('ns3::Ptr< ns3::Node >', 'node')], + is_virtual=True) + ## tap-bridge.h: bool ns3::TapBridge::NeedsArp() const [member function] + cls.add_method('NeedsArp', + 'bool', + [], + is_const=True, is_virtual=True) + ## tap-bridge.h: void ns3::TapBridge::SetReceiveCallback(ns3::Callback, ns3::Ptr, unsigned short, ns3::Address const&, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty> cb) [member function] + cls.add_method('SetReceiveCallback', + 'void', + [param('ns3::Callback< bool, ns3::Ptr< ns3::NetDevice >, ns3::Ptr< ns3::Packet const >, unsigned short, ns3::Address const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'cb')], + is_virtual=True) + ## tap-bridge.h: void ns3::TapBridge::SetPromiscReceiveCallback(ns3::Callback, ns3::Ptr, unsigned short, ns3::Address const&, ns3::Address const&, ns3::NetDevice::PacketType, ns3::empty, ns3::empty, ns3::empty> cb) [member function] + cls.add_method('SetPromiscReceiveCallback', + 'void', + [param('ns3::Callback< bool, ns3::Ptr< ns3::NetDevice >, ns3::Ptr< ns3::Packet const >, unsigned short, ns3::Address const &, ns3::Address const &, ns3::NetDevice::PacketType, ns3::empty, ns3::empty, ns3::empty >', 'cb')], + is_virtual=True) + ## tap-bridge.h: bool ns3::TapBridge::SupportsSendFrom() const [member function] + cls.add_method('SupportsSendFrom', + 'bool', + [], + is_const=True, is_virtual=True) + ## tap-bridge.h: ns3::Address ns3::TapBridge::GetMulticast(ns3::Ipv6Address addr) const [member function] + cls.add_method('GetMulticast', + 'ns3::Address', + [param('ns3::Ipv6Address', 'addr')], + is_const=True, is_virtual=True) + ## tap-bridge.h: void ns3::TapBridge::DoDispose() [member function] + cls.add_method('DoDispose', + 'void', + [], + visibility='protected', is_virtual=True) + ## tap-bridge.h: void ns3::TapBridge::ReceiveFromBridgedDevice(ns3::Ptr device, ns3::Ptr packet, uint16_t protocol, ns3::Address const & src, ns3::Address const & dst, ns3::NetDevice::PacketType packetType) [member function] + cls.add_method('ReceiveFromBridgedDevice', + 'void', + [param('ns3::Ptr< ns3::NetDevice >', 'device'), param('ns3::Ptr< ns3::Packet const >', 'packet'), param('uint16_t', 'protocol'), param('ns3::Address const &', 'src'), param('ns3::Address const &', 'dst'), param('ns3::NetDevice::PacketType', 'packetType')], + visibility='protected') + return + +def register_functions(root_module): + module = root_module + register_functions_ns3_Config(module.get_submodule('Config'), root_module) + register_functions_ns3_TimeStepPrecision(module.get_submodule('TimeStepPrecision'), root_module) + register_functions_ns3_internal(module.get_submodule('internal'), root_module) + register_functions_ns3_olsr(module.get_submodule('olsr'), root_module) + return + +def register_functions_ns3_Config(module, root_module): + return + +def register_functions_ns3_TimeStepPrecision(module, root_module): + return + +def register_functions_ns3_internal(module, root_module): + return + +def register_functions_ns3_olsr(module, root_module): + return + diff -r c070d2fca46d -r 6ef5bba17bf9 bindings/python/ns3modulegen.py --- a/bindings/python/ns3modulegen.py Mon Feb 23 23:49:17 2009 -0500 +++ b/bindings/python/ns3modulegen.py Mon Feb 23 23:56:27 2009 -0500 @@ -86,6 +86,7 @@ ns3modulegen_core_customizations.Simulator_customizations(root_module) ns3modulegen_core_customizations.CommandLine_customizations(root_module) ns3modulegen_core_customizations.TypeId_customizations(root_module) + ns3modulegen_core_customizations.add_std_ofstream(root_module) for local_module in LOCAL_MODULES: @@ -141,6 +142,10 @@ root_module.classes.remove(root_module['ns3::%s' % clsname]) root_module.enums.remove(root_module['ns3::RealtimeSimulatorImpl::SynchronizationMode']) + if 'TapBridge' not in enabled_features: + for clsname in ['TapBridge', 'TapBridgeHelper']: + root_module.classes.remove(root_module['ns3::%s' % clsname]) + root_module.generate(out, '_ns3') out.close() diff -r c070d2fca46d -r 6ef5bba17bf9 bindings/python/ns3modulegen_core_customizations.py --- a/bindings/python/ns3modulegen_core_customizations.py Mon Feb 23 23:49:17 2009 -0500 +++ b/bindings/python/ns3modulegen_core_customizations.py Mon Feb 23 23:56:27 2009 -0500 @@ -530,3 +530,20 @@ flags=["METH_VARARGS", "METH_KEYWORDS", "METH_STATIC"]) +def add_std_ofstream(module): + module.add_include('') + ostream = module.add_class('ostream', foreign_cpp_namespace='::std') + ostream.set_cannot_be_constructed("abstract base class") + ofstream = module.add_class('ofstream', foreign_cpp_namespace='::std', parent=ostream) + ofstream.add_enum('openmode', [ + ('app', 'std::ios_base::app'), + ('ate', 'std::ios_base::ate'), + ('binary', 'std::ios_base::binary'), + ('in', 'std::ios_base::in'), + ('out', 'std::ios_base::out'), + ('trunc', 'std::ios_base::trunc'), + ]) + ofstream.add_constructor([Parameter.new("const char *", 'filename'), + Parameter.new("::std::ofstream::openmode", 'mode', default_value="std::ios_base::out")]) + ofstream.add_method('close', None, []) + diff -r c070d2fca46d -r 6ef5bba17bf9 bindings/python/ns3modulegen_generated.py --- a/bindings/python/ns3modulegen_generated.py Mon Feb 23 23:49:17 2009 -0500 +++ b/bindings/python/ns3modulegen_generated.py Mon Feb 23 23:56:27 2009 -0500 @@ -20,17 +20,18 @@ import ns3_module_contrib import ns3_module_point_to_point import ns3_module_stats +import ns3_module_tap_bridge import ns3_module_internet_stack import ns3_module_wifi import ns3_module_csma import ns3_module_emu import ns3_module_bridge +import ns3_module_onoff import ns3_module_packet_sink import ns3_module_v4ping import ns3_module_global_routing -import ns3_module_onoff +import ns3_module_udp_echo import ns3_module_olsr -import ns3_module_udp_echo import ns3_module_helper def module_init(): @@ -128,6 +129,17 @@ ns3_module_stats__local.register_types(module) root_module.end_section('ns3_module_stats') + root_module.begin_section('ns3_module_tap_bridge') + ns3_module_tap_bridge.register_types(module) + + try: + import ns3_module_tap_bridge__local + except ImportError: + pass + else: + ns3_module_tap_bridge__local.register_types(module) + + root_module.end_section('ns3_module_tap_bridge') root_module.begin_section('ns3_module_internet_stack') ns3_module_internet_stack.register_types(module) @@ -183,6 +195,17 @@ ns3_module_bridge__local.register_types(module) root_module.end_section('ns3_module_bridge') + root_module.begin_section('ns3_module_onoff') + ns3_module_onoff.register_types(module) + + try: + import ns3_module_onoff__local + except ImportError: + pass + else: + ns3_module_onoff__local.register_types(module) + + root_module.end_section('ns3_module_onoff') root_module.begin_section('ns3_module_packet_sink') ns3_module_packet_sink.register_types(module) @@ -216,17 +239,17 @@ ns3_module_global_routing__local.register_types(module) root_module.end_section('ns3_module_global_routing') - root_module.begin_section('ns3_module_onoff') - ns3_module_onoff.register_types(module) + root_module.begin_section('ns3_module_udp_echo') + ns3_module_udp_echo.register_types(module) try: - import ns3_module_onoff__local + import ns3_module_udp_echo__local except ImportError: pass else: - ns3_module_onoff__local.register_types(module) + ns3_module_udp_echo__local.register_types(module) - root_module.end_section('ns3_module_onoff') + root_module.end_section('ns3_module_udp_echo') root_module.begin_section('ns3_module_olsr') ns3_module_olsr.register_types(module) @@ -238,17 +261,6 @@ ns3_module_olsr__local.register_types(module) root_module.end_section('ns3_module_olsr') - root_module.begin_section('ns3_module_udp_echo') - ns3_module_udp_echo.register_types(module) - - try: - import ns3_module_udp_echo__local - except ImportError: - pass - else: - ns3_module_udp_echo__local.register_types(module) - - root_module.end_section('ns3_module_udp_echo') root_module.begin_section('ns3_module_helper') ns3_module_helper.register_types(module) @@ -393,6 +405,17 @@ ns3_module_stats__local.register_methods(root_module) root_module.end_section('ns3_module_stats') + root_module.begin_section('ns3_module_tap_bridge') + ns3_module_tap_bridge.register_methods(root_module) + + try: + import ns3_module_tap_bridge__local + except ImportError: + pass + else: + ns3_module_tap_bridge__local.register_methods(root_module) + + root_module.end_section('ns3_module_tap_bridge') root_module.begin_section('ns3_module_internet_stack') ns3_module_internet_stack.register_methods(root_module) @@ -448,6 +471,17 @@ ns3_module_bridge__local.register_methods(root_module) root_module.end_section('ns3_module_bridge') + root_module.begin_section('ns3_module_onoff') + ns3_module_onoff.register_methods(root_module) + + try: + import ns3_module_onoff__local + except ImportError: + pass + else: + ns3_module_onoff__local.register_methods(root_module) + + root_module.end_section('ns3_module_onoff') root_module.begin_section('ns3_module_packet_sink') ns3_module_packet_sink.register_methods(root_module) @@ -481,17 +515,17 @@ ns3_module_global_routing__local.register_methods(root_module) root_module.end_section('ns3_module_global_routing') - root_module.begin_section('ns3_module_onoff') - ns3_module_onoff.register_methods(root_module) + root_module.begin_section('ns3_module_udp_echo') + ns3_module_udp_echo.register_methods(root_module) try: - import ns3_module_onoff__local + import ns3_module_udp_echo__local except ImportError: pass else: - ns3_module_onoff__local.register_methods(root_module) + ns3_module_udp_echo__local.register_methods(root_module) - root_module.end_section('ns3_module_onoff') + root_module.end_section('ns3_module_udp_echo') root_module.begin_section('ns3_module_olsr') ns3_module_olsr.register_methods(root_module) @@ -503,17 +537,6 @@ ns3_module_olsr__local.register_methods(root_module) root_module.end_section('ns3_module_olsr') - root_module.begin_section('ns3_module_udp_echo') - ns3_module_udp_echo.register_methods(root_module) - - try: - import ns3_module_udp_echo__local - except ImportError: - pass - else: - ns3_module_udp_echo__local.register_methods(root_module) - - root_module.end_section('ns3_module_udp_echo') root_module.begin_section('ns3_module_helper') ns3_module_helper.register_methods(root_module) @@ -617,6 +640,17 @@ ns3_module_stats__local.register_functions(root_module) root_module.end_section('ns3_module_stats') + root_module.begin_section('ns3_module_tap_bridge') + ns3_module_tap_bridge.register_functions(root_module) + + try: + import ns3_module_tap_bridge__local + except ImportError: + pass + else: + ns3_module_tap_bridge__local.register_functions(root_module) + + root_module.end_section('ns3_module_tap_bridge') root_module.begin_section('ns3_module_internet_stack') ns3_module_internet_stack.register_functions(root_module) @@ -672,6 +706,17 @@ ns3_module_bridge__local.register_functions(root_module) root_module.end_section('ns3_module_bridge') + root_module.begin_section('ns3_module_onoff') + ns3_module_onoff.register_functions(root_module) + + try: + import ns3_module_onoff__local + except ImportError: + pass + else: + ns3_module_onoff__local.register_functions(root_module) + + root_module.end_section('ns3_module_onoff') root_module.begin_section('ns3_module_packet_sink') ns3_module_packet_sink.register_functions(root_module) @@ -705,17 +750,17 @@ ns3_module_global_routing__local.register_functions(root_module) root_module.end_section('ns3_module_global_routing') - root_module.begin_section('ns3_module_onoff') - ns3_module_onoff.register_functions(root_module) + root_module.begin_section('ns3_module_udp_echo') + ns3_module_udp_echo.register_functions(root_module) try: - import ns3_module_onoff__local + import ns3_module_udp_echo__local except ImportError: pass else: - ns3_module_onoff__local.register_functions(root_module) + ns3_module_udp_echo__local.register_functions(root_module) - root_module.end_section('ns3_module_onoff') + root_module.end_section('ns3_module_udp_echo') root_module.begin_section('ns3_module_olsr') ns3_module_olsr.register_functions(root_module) @@ -727,17 +772,6 @@ ns3_module_olsr__local.register_functions(root_module) root_module.end_section('ns3_module_olsr') - root_module.begin_section('ns3_module_udp_echo') - ns3_module_udp_echo.register_functions(root_module) - - try: - import ns3_module_udp_echo__local - except ImportError: - pass - else: - ns3_module_udp_echo__local.register_functions(root_module) - - root_module.end_section('ns3_module_udp_echo') root_module.begin_section('ns3_module_helper') ns3_module_helper.register_functions(root_module) diff -r c070d2fca46d -r 6ef5bba17bf9 bindings/python/wscript --- a/bindings/python/wscript Mon Feb 23 23:49:17 2009 -0500 +++ b/bindings/python/wscript Mon Feb 23 23:56:27 2009 -0500 @@ -15,7 +15,7 @@ import Utils ## https://launchpad.net/pybindgen/ -REQUIRED_PYBINDGEN_VERSION = (0, 9, 0, 605) +REQUIRED_PYBINDGEN_VERSION = (0, 10, 0, 626) REQUIRED_PYGCCXML_VERSION = (0, 9, 5) diff -r c070d2fca46d -r 6ef5bba17bf9 doc/manual/manual.texi --- a/doc/manual/manual.texi Mon Feb 23 23:49:17 2009 -0500 +++ b/doc/manual/manual.texi Mon Feb 23 23:56:27 2009 -0500 @@ -10,7 +10,7 @@ four forms: @itemize @bullet @item @uref{http://www.nsnam.org/doxygen/index.html,,ns-3 Doxygen/Manual}: Documentation of the public APIs of the simulator -@item @uref{http://www.nsnam.org/tutorial/index.html,,ns-3 Tutorial} +@item @uref{http://www.nsnam.org/docs/tutorial/tutorial.html,,ns-3 Tutorial} @item Reference Manual (this document) @item @uref{http://www.nsnam.org/wiki/index.php,, ns-3 wiki} @end itemize @@ -27,7 +27,7 @@ Primary documentation for the @command{ns-3} project is available in four forms: @itemize @bullet -@item @uref{http://www.nsnam.org/tutorial/index.html,,ns-3 Tutorial} +@item @uref{http://www.nsnam.org/docs/tutorial/tutorial.html,,ns-3 Tutorial} @item @uref{http://www.nsnam.org/doxygen/index.html,,ns-3 Doxygen}: Documentation of the public APIs of the simulator @item Reference Manual (this document) @item @uref{http://www.nsnam.org/wiki/index.php,, ns-3 wiki} diff -r c070d2fca46d -r 6ef5bba17bf9 doc/tutorial/tweaking.texi --- a/doc/tutorial/tweaking.texi Mon Feb 23 23:49:17 2009 -0500 +++ b/doc/tutorial/tweaking.texi Mon Feb 23 23:56:27 2009 -0500 @@ -272,21 +272,19 @@ ~/repos/ns-3-dev > ./waf --run scratch/first Entering directory `/home/craigdo/repos/ns-3-dev/build' Compilation finished successfully - 0ns UdpEchoServerApplication:UdpEchoServer() - 0ns UdpEchoClientApplication:UdpEchoClient() - 1000000000ns UdpEchoServerApplication:StartApplication() - 2000000000ns UdpEchoClientApplication:StartApplication() - 2000000000ns UdpEchoClientApplication:ScheduleTransmit() - 2000000000ns UdpEchoClientApplication:Send() - 2000000000ns UdpEchoClientApplication:Send(): Sent 1024 bytes to 10.1.1.2 - 2003686400ns UdpEchoServerApplication:HandleRead(): Received 1024 bytes - from 10.1.1.1 - 2003686400ns UdpEchoServerApplication:HandleRead(): Echoing packet - 2007372800ns UdpEchoClientApplication:HandleRead(0x62c8c0, 0x62d020) - 2007372800ns UdpEchoClientApplication:HandleRead(): Received 1024 bytes - from 10.1.1.2 - 10000000000ns UdpEchoServerApplication:StopApplication() - 10000000000ns UdpEchoClientApplication:StopApplication() + 0s UdpEchoServerApplication:UdpEchoServer() + 0s UdpEchoClientApplication:UdpEchoClient() + 1s UdpEchoServerApplication:StartApplication() + 2s UdpEchoClientApplication:StartApplication() + 2s UdpEchoClientApplication:ScheduleTransmit() + 2s UdpEchoClientApplication:Send() + 2s UdpEchoClientApplication:Send(): Sent 1024 bytes to 10.1.1.2 + 2.00369s UdpEchoServerApplication:HandleRead(): Received 1024 bytes from 10.1.1.1 + 2.00369s UdpEchoServerApplication:HandleRead(): Echoing packet + 2.00737s UdpEchoClientApplication:HandleRead(0x62c8c0, 0x62d020) + 2.00737s UdpEchoClientApplication:HandleRead(): Received 1024 bytes from 10.1.1.2 + 10s UdpEchoServerApplication:StopApplication() + 10s UdpEchoClientApplication:StopApplication() UdpEchoClientApplication:DoDispose() UdpEchoServerApplication:DoDispose() UdpEchoClientApplication:~UdpEchoClient() @@ -295,7 +293,7 @@ @end verbatim You can see that the constructor for the UdpEchoServer was called at a -simulation time of 0 nanoseconds. This is actually happening before the +simulation time of 0 seconds. This is actually happening before the simulation starts. The same for the UdpEchoClient constructor. Recall that the @code{first.cc} script started the echo server application at diff -r c070d2fca46d -r 6ef5bba17bf9 examples/second.cc --- a/examples/second.cc Mon Feb 23 23:49:17 2009 -0500 +++ b/examples/second.cc Mon Feb 23 23:56:27 2009 -0500 @@ -36,14 +36,21 @@ int main (int argc, char *argv[]) { - LogComponentEnable("UdpEchoClientApplication", LOG_LEVEL_INFO); - LogComponentEnable("UdpEchoServerApplication", LOG_LEVEL_INFO); + bool verbose = true; uint32_t nCsma = 3; CommandLine cmd; cmd.AddValue ("nCsma", "Number of \"extra\" CSMA nodes/devices", nCsma); + cmd.AddValue ("verbose", "Tell echo applications to log if true", verbose); + cmd.Parse (argc,argv); + if (verbose) + { + LogComponentEnable("UdpEchoClientApplication", LOG_LEVEL_INFO); + LogComponentEnable("UdpEchoServerApplication", LOG_LEVEL_INFO); + } + NodeContainer p2pNodes; p2pNodes.Create (2); diff -r c070d2fca46d -r 6ef5bba17bf9 examples/third.cc --- a/examples/third.cc Mon Feb 23 23:49:17 2009 -0500 +++ b/examples/third.cc Mon Feb 23 23:56:27 2009 -0500 @@ -40,16 +40,24 @@ int main (int argc, char *argv[]) { - LogComponentEnable("UdpEchoClientApplication", LOG_LEVEL_INFO); - LogComponentEnable("UdpEchoServerApplication", LOG_LEVEL_INFO); + + bool verbose = true; uint32_t nCsma = 3; uint32_t nWifi = 3; CommandLine cmd; cmd.AddValue ("nCsma", "Number of \"extra\" CSMA nodes/devices", nCsma); cmd.AddValue ("nWifi", "Number of wifi STA devices", nWifi); + cmd.AddValue ("verbose", "Tell echo applications to log if true", verbose); + cmd.Parse (argc,argv); + if (verbose) + { + LogComponentEnable("UdpEchoClientApplication", LOG_LEVEL_INFO); + LogComponentEnable("UdpEchoServerApplication", LOG_LEVEL_INFO); + } + NodeContainer p2pNodes; p2pNodes.Create (2); diff -r c070d2fca46d -r 6ef5bba17bf9 examples/wifi-ap.py --- a/examples/wifi-ap.py Mon Feb 23 23:49:17 2009 -0500 +++ b/examples/wifi-ap.py Mon Feb 23 23:56:27 2009 -0500 @@ -154,9 +154,13 @@ # Config::Connect ("/NodeList/*/DeviceList/*/Phy/Tx", MakeCallback (&PhyTxTrace)); # Config::Connect ("/NodeList/*/DeviceList/*/Phy/State", MakeCallback (&PhyStateTrace)); + ascii = ns3.ofstream("wifi-ap.tr") + ns3.YansWifiPhyHelper.EnableAsciiAll(ascii) + ns3.Simulator.Run() ns3.Simulator.Destroy() + ascii.close() return 0 diff -r c070d2fca46d -r 6ef5bba17bf9 regression.py --- a/regression.py Mon Feb 23 23:49:17 2009 -0500 +++ b/regression.py Mon Feb 23 23:56:27 2009 -0500 @@ -37,6 +37,30 @@ tests.sort() return tests +def diff(dir1, dir2, verbose): + import filecmp + comp = filecmp.dircmp(dir1, dir2) + differ = (comp.left_only or comp.right_only or comp.diff_files) + if differ: + if verbose: + comp.report() + import difflib + for diff_fname in comp.diff_files: + if not (diff_fname.endswith(".tr") or diff_fname.endswith(".mob")): + print "The different file %r does not sound like a text file, not compared." % (diff_fname,) + diff_file1 = open(os.path.join(dir1, diff_fname), "rt").readlines() + diff_file2 = open(os.path.join(dir2, diff_fname), "rt").readlines() + diff = difflib.unified_diff(diff_file1, diff_file2) + count = 0 + print "Differences in file %r" % (diff_fname,) + for line in diff: + print line + count += 1 + if count > 100: + break + return 1 + else: + return 0 class regression_test_task(Task.TaskBase): after = 'cc cxx cc_link cxx_link' @@ -136,17 +160,7 @@ print >> sys.stderr, ex return 1 - if Options.options.verbose: - #diffCmd = "diff traces " + refTestDirName + " | head" - diffCmd = subprocess.Popen([self.env['DIFF'], trace_output_path, reference_traces_path], - stdout=subprocess.PIPE) - headCmd = subprocess.Popen("head", stdin=diffCmd.stdout) - rc2 = headCmd.wait() - diffCmd.stdout.close() - rc1 = diffCmd.wait() - rc = rc1 or rc2 - else: - rc = subprocess.Popen([self.env['DIFF'], trace_output_path, reference_traces_path], stdout=dev_null()).wait() + rc = diff(trace_output_path, reference_traces_path, Options.options.verbose) if rc: print "----------" print "Traces differ in test: ", self.test_name @@ -154,6 +168,8 @@ print "Traces in directory: " + trace_output_path print "Run the following command for details:" print "\tdiff -u %s %s" % (reference_traces_path, trace_output_path) + if not Options.options.verbose: + print "Or re-run regression testing with option -v" print "----------" return rc diff -r c070d2fca46d -r 6ef5bba17bf9 regression/tests/test-second.py --- a/regression/tests/test-second.py Mon Feb 23 23:49:17 2009 -0500 +++ b/regression/tests/test-second.py Mon Feb 23 23:56:27 2009 -0500 @@ -1,4 +1,6 @@ #! /usr/bin/env python -"""Generic trace-comparison-type regression test.""" +"""Compare that Second generates correct traces.""" +arguments = ["--verbose=0"] + diff -r c070d2fca46d -r 6ef5bba17bf9 regression/tests/test-third.py --- a/regression/tests/test-third.py Mon Feb 23 23:49:17 2009 -0500 +++ b/regression/tests/test-third.py Mon Feb 23 23:56:27 2009 -0500 @@ -1,4 +1,6 @@ #! /usr/bin/env python -"""Generic trace-comparison-type regression test.""" +"""Compare that Third generates correct traces.""" +arguments = ["--verbose=0"] + diff -r c070d2fca46d -r 6ef5bba17bf9 src/core/callback.cc --- a/src/core/callback.cc Mon Feb 23 23:49:17 2009 -0500 +++ b/src/core/callback.cc Mon Feb 23 23:56:27 2009 -0500 @@ -35,4 +35,55 @@ ATTRIBUTE_CHECKER_IMPLEMENT (Callback); +#if (__GNUC__ >= 3) + +#include +#include +#include "log.h" + +std::string +CallbackBase::Demangle(const std::string& mangled) +{ + int status; + char* demangled = abi::__cxa_demangle(mangled.c_str(), + NULL, NULL, &status); + + std::string ret; + if (status == 0) { + NS_ASSERT(demangled); + ret = demangled; + } + else if (status == -1) { + NS_LOG_UNCOND("Callback demangling failed: Memory allocation failure occured."); + ret = mangled; + } + else if (status == -2) { + NS_LOG_UNCOND("Callback demangling failed: Mangled name is not a valid under the C++ ABI mangling rules."); + ret = mangled; + } + else if (status == -3) { + NS_LOG_UNCOND("Callback demangling failed: One of the arguments is invalid."); + ret = mangled; + } + else { + NS_LOG_UNCOND("Callback demangling failed: status " << status); + ret = mangled; + } + + if (demangled) { + free(demangled); + } + return ret; +} + +#else + +std::string +CallbackBase::Demangle(const std::string& mangled) +{ + return mangled; +} + +#endif + } // namespace ns3 diff -r c070d2fca46d -r 6ef5bba17bf9 src/core/callback.h --- a/src/core/callback.h Mon Feb 23 23:49:17 2009 -0500 +++ b/src/core/callback.h Mon Feb 23 23:56:27 2009 -0500 @@ -340,6 +340,8 @@ protected: CallbackBase (Ptr impl) : m_impl (impl) {} Ptr m_impl; + + static std::string Demangle(const std::string& mangled); }; /** @@ -476,9 +478,9 @@ void DoAssign (Ptr other) { if (!DoCheckType (other)) { - NS_FATAL_ERROR ("Incompatible types. (feed to \"c++filt -t\")" - " got=" << typeid (*other).name () << - ", expected=" << typeid (CallbackImpl *).name ()); + NS_FATAL_ERROR ("Incompatible types. (feed to \"c++filt -t\" if needed)" << std::endl << + "got=" << Demangle ( typeid (*other).name () ) << std::endl << + "expected=" << Demangle ( typeid (CallbackImpl *).name () )); } m_impl = const_cast (PeekPointer (other)); } diff -r c070d2fca46d -r 6ef5bba17bf9 src/devices/bridge/bridge-net-device.cc --- a/src/devices/bridge/bridge-net-device.cc Mon Feb 23 23:49:17 2009 -0500 +++ b/src/devices/bridge/bridge-net-device.cc Mon Feb 23 23:56:27 2009 -0500 @@ -370,22 +370,30 @@ BridgeNetDevice::Send (Ptr packet, const Address& dest, uint16_t protocolNumber) { NS_LOG_FUNCTION_NOARGS (); - for (std::vector< Ptr >::iterator iter = m_ports.begin (); - iter != m_ports.end (); iter++) - { - Ptr port = *iter; - port->SendFrom (packet, m_address, dest, protocolNumber); - } - - return true; + return SendFrom (packet, m_address, dest, protocolNumber); } bool BridgeNetDevice::SendFrom (Ptr packet, const Address& src, const Address& dest, uint16_t protocolNumber) { NS_LOG_FUNCTION_NOARGS (); + Mac48Address dst = Mac48Address::ConvertFrom (dest); + + // try to use the learned state if data is unicast + if (!dst.IsGroup ()) + { + Ptr outPort = GetLearnedState (dst); + if (outPort != NULL) + { + outPort->SendFrom (packet, src, dest, protocolNumber); + return true; + } + } + + // data was not unicast or no state has been learned for that mac + // address => flood through all ports. for (std::vector< Ptr >::iterator iter = m_ports.begin (); - iter != m_ports.end (); iter++) + iter != m_ports.end (); iter++) { Ptr port = *iter; port->SendFrom (packet, src, dest, protocolNumber); diff -r c070d2fca46d -r 6ef5bba17bf9 src/devices/csma/csma-net-device.cc --- a/src/devices/csma/csma-net-device.cc Mon Feb 23 23:49:17 2009 -0500 +++ b/src/devices/csma/csma-net-device.cc Mon Feb 23 23:56:27 2009 -0500 @@ -411,10 +411,15 @@ { NS_LOG_FUNCTION_NOARGS (); + // + // This function is called to start the process of transmitting a packet. We + // expect that a Ptr to the packet to be transmitted has been placed in + // m_currentPkt. + NS_LOG_LOGIC ("m_currentPkt=" << m_currentPkt); NS_LOG_LOGIC ("UID is " << m_currentPkt->GetUid ()); + // - // This function is called to start the process of transmitting a packet. // We need to tell the channel that we've started wiggling the wire and // schedule an event that will be executed when it's time to tell the // channel that we're done wiggling the wire. @@ -487,20 +492,43 @@ { NS_LOG_FUNCTION_NOARGS (); + // + // When we started transmitting the current packet, it was placed in + // m_currentPkt. So we had better find one there. + // + NS_ASSERT_MSG (m_currentPkt != 0, "CsmaNetDevice::TransmitAbort(): m_currentPkt zero"); + NS_LOG_LOGIC ("m_currentPkt=" << m_currentPkt); NS_LOG_LOGIC ("Pkt UID is " << m_currentPkt->GetUid () << ")"); // - // Since we were transmitting a packet, that packet had better be on the transmit queue. + // Hit the drop trace source. + // + // XXX Should there be a separate transmit drop trace? // - m_currentPkt = m_queue->Dequeue (); - NS_ASSERT_MSG (m_currentPkt != 0, "No Packet on queue during CsmaNetDevice::TransmitAbort()"); + m_dropTrace (m_currentPkt); - // - // The last one failed. Let's try to transmit the next one (if there) + // + // We're done with that one, so reset the backoff algorithm and ready the + // transmit state machine. // m_backoff.ResetBackoffTime (); m_txMachineState = READY; - TransmitStart (); + + // + // If there is another packet on the input queue, we need to start trying to + // get that out. If the queue is empty we just wait until someone puts one + // in. + // + if (m_queue->IsEmpty ()) + { + return; + } + else + { + m_currentPkt = m_queue->Dequeue (); + NS_ASSERT_MSG (m_currentPkt != 0, "CsmaNetDevice::TransmitAbort(): IsEmpty false but no Packet on queue?"); + TransmitStart (); + } } void @@ -514,11 +542,18 @@ // schedule an event that will be executed when it's time to re-enable // the transmitter after the interframe gap. // - NS_ASSERT_MSG (m_txMachineState == BUSY, "Must be BUSY if transmitting"); + NS_ASSERT_MSG (m_txMachineState == BUSY, "CsmaNetDevice::transmitCompleteEvent(): Must be BUSY if transmitting"); NS_ASSERT (m_channel->GetState () == TRANSMITTING); m_txMachineState = GAP; + // + // When we started transmitting the current packet, it was placed in + // m_currentPkt. So we had better find one there. + // + NS_ASSERT_MSG (m_currentPkt != 0, "CsmaNetDevice::TransmitCompleteEvent(): m_currentPkt zero"); + NS_LOG_LOGIC ("m_currentPkt=" << m_currentPkt); NS_LOG_LOGIC ("Pkt UID is " << m_currentPkt->GetUid () << ")"); + m_channel->TransmitEnd (); NS_LOG_LOGIC ("Schedule TransmitReadyEvent in " << m_tInterframeGap.GetSeconds () << "sec"); @@ -536,10 +571,18 @@ // gap has passed. If there are pending transmissions, we use this opportunity // to start the next transmit. // - NS_ASSERT_MSG (m_txMachineState == GAP, "Must be in interframe gap"); + NS_ASSERT_MSG (m_txMachineState == GAP, "CsmaNetDevice::TransmitReadyEvent(): Must be in interframe gap"); m_txMachineState = READY; // + // When we started transmitting the current packet, it was placed in + // m_currentPkt. So we had better find one there. + // + NS_ASSERT_MSG (m_currentPkt != 0, "CsmaNetDevice::TransmitCompleteEvent(): m_currentPkt zero"); + NS_LOG_LOGIC ("m_currentPkt=" << m_currentPkt); + NS_LOG_LOGIC ("Pkt UID is " << m_currentPkt->GetUid () << ")"); + + // // Get the next packet from the queue for transmitting // if (m_queue->IsEmpty ()) diff -r c070d2fca46d -r 6ef5bba17bf9 src/helper/mobility-helper.cc --- a/src/helper/mobility-helper.cc Mon Feb 23 23:49:17 2009 -0500 +++ b/src/helper/mobility-helper.cc Mon Feb 23 23:56:27 2009 -0500 @@ -46,12 +46,7 @@ { m_position = allocator; } -void -MobilityHelper::SetPositionAllocator (std::string allocatorName) -{ - Ptr allocator = Names::Find (allocatorName); - m_position = allocator; -} + void MobilityHelper::SetPositionAllocator (std::string type, std::string n1, const AttributeValue &v1, diff -r c070d2fca46d -r 6ef5bba17bf9 src/helper/mobility-helper.h --- a/src/helper/mobility-helper.h Mon Feb 23 23:49:17 2009 -0500 +++ b/src/helper/mobility-helper.h Mon Feb 23 23:56:27 2009 -0500 @@ -50,13 +50,6 @@ * \param allocator allocate initial node positions */ void SetPositionAllocator (Ptr allocator); - /** - * Set the position allocator which will be used to allocate the initial - * position of every node initialized during MobilityModel::Install. - * - * \param allocator allocate initial node positions - */ - void SetPositionAllocator (std::string allocatorName); /** * \param type the type of mobility model to use. diff -r c070d2fca46d -r 6ef5bba17bf9 src/node/drop-tail-queue.cc --- a/src/node/drop-tail-queue.cc Mon Feb 23 23:49:17 2009 -0500 +++ b/src/node/drop-tail-queue.cc Mon Feb 23 23:56:27 2009 -0500 @@ -17,6 +17,7 @@ */ #include "ns3/log.h" +#include "ns3/enum.h" #include "ns3/uinteger.h" #include "drop-tail-queue.h" @@ -31,10 +32,22 @@ static TypeId tid = TypeId ("ns3::DropTailQueue") .SetParent () .AddConstructor () - .AddAttribute ("MaxPackets", "The maximum number of packets accepted by this DropTailQueue.", + .AddAttribute ("Mode", + "Whether to use Bytes (see MaxBytes) or Packets (see MaxPackets) as the maximum queue size metric.", + EnumValue (PACKETS), + MakeEnumAccessor (&DropTailQueue::SetMode), + MakeEnumChecker (BYTES, "Bytes", + PACKETS, "Packets")) + .AddAttribute ("MaxPackets", + "The maximum number of packets accepted by this DropTailQueue.", UintegerValue (100), MakeUintegerAccessor (&DropTailQueue::m_maxPackets), MakeUintegerChecker ()) + .AddAttribute ("MaxBytes", + "The maximum number of bytes accepted by this DropTailQueue.", + UintegerValue (100 * 65535), + MakeUintegerAccessor (&DropTailQueue::m_maxBytes), + MakeUintegerChecker ()) ; return tid; @@ -52,19 +65,45 @@ NS_LOG_FUNCTION_NOARGS (); } + void +DropTailQueue::SetMode (enum Mode mode) +{ + NS_LOG_FUNCTION (mode); + m_mode = mode; +} + + DropTailQueue::Mode +DropTailQueue::GetMode (void) +{ + NS_LOG_FUNCTION_NOARGS (); + return m_mode; +} + bool DropTailQueue::DoEnqueue (Ptr p) { NS_LOG_FUNCTION (this << p); - if (m_packets.size () >= m_maxPackets) + if (m_mode == PACKETS && (m_packets.size () >= m_maxPackets)) { - NS_LOG_LOGIC ("Queue full -- droppping pkt"); + NS_LOG_LOGIC ("Queue full (at max packets) -- droppping pkt"); Drop (p); return false; } + if (m_mode == BYTES && (m_bytesInQueue + p->GetSize () >= m_maxBytes)) + { + NS_LOG_LOGIC ("Queue full (packet would exceed max bytes) -- droppping pkt"); + Drop (p); + return false; + } + + m_bytesInQueue += p->GetSize (); m_packets.push(p); + + NS_LOG_LOGIC ("Number packets " << m_packets.size ()); + NS_LOG_LOGIC ("Number bytes " << m_bytesInQueue); + return true; } @@ -81,9 +120,13 @@ Ptr p = m_packets.front (); m_packets.pop (); + m_bytesInQueue -= p->GetSize (); NS_LOG_LOGIC ("Popped " << p); + NS_LOG_LOGIC ("Number packets " << m_packets.size ()); + NS_LOG_LOGIC ("Number bytes " << m_bytesInQueue); + return p; } @@ -100,6 +143,9 @@ Ptr p = m_packets.front (); + NS_LOG_LOGIC ("Number packets " << m_packets.size ()); + NS_LOG_LOGIC ("Number bytes " << m_bytesInQueue); + return p; } diff -r c070d2fca46d -r 6ef5bba17bf9 src/node/drop-tail-queue.h --- a/src/node/drop-tail-queue.h Mon Feb 23 23:49:17 2009 -0500 +++ b/src/node/drop-tail-queue.h Mon Feb 23 23:56:27 2009 -0500 @@ -44,14 +44,41 @@ virtual ~DropTailQueue(); + /** + * Enumeration of the modes supported in the class. + * + */ + enum Mode { + ILLEGAL, /**< Mode not set */ + PACKETS, /**< Use number of packets for maximum queue size */ + BYTES, /**< Use number of bytes for maximum queue size */ + }; + + /** + * Set the operating mode of this device. + * + * \param mode The operating mode of this device. + * + */ + void SetMode (DropTailQueue::Mode mode); + + /** + * Get the encapsulation mode of this device. + * + * \returns The encapsulation mode of this device. + */ + DropTailQueue::Mode GetMode (void); + private: virtual bool DoEnqueue (Ptr p); virtual Ptr DoDequeue (void); virtual Ptr DoPeek (void) const; -private: std::queue > m_packets; uint32_t m_maxPackets; + uint32_t m_maxBytes; + uint32_t m_bytesInQueue; + Mode m_mode; }; }; // namespace ns3 diff -r c070d2fca46d -r 6ef5bba17bf9 wscript --- a/wscript Mon Feb 23 23:49:17 2009 -0500 +++ b/wscript Mon Feb 23 23:56:27 2009 -0500 @@ -256,9 +256,6 @@ conf.env['NS3_ENABLED_MODULES'] = ['ns3-'+mod for mod in Options.options.enable_modules.split(',')] - # we cannot run regression tests without diff - conf.find_program('diff', var='DIFF') - # for suid bits conf.find_program('sudo', var='SUDO') @@ -464,9 +461,6 @@ Options.options.compile_targets = os.path.basename(program_name) if Options.options.regression or Options.options.regression_generate: - if not env['DIFF']: - raise Utils.WafError("Cannot run regression tests: the 'diff' program is not installed.") - regression_traces = env['REGRESSION_TRACES'] if not regression_traces: raise Utils.WafError("Cannot run regression tests: reference traces directory not given"