--- a/bindings/python/ns3_module_core.py Wed Mar 25 10:40:01 2009 -0700
+++ b/bindings/python/ns3_module_core.py Thu Mar 26 17:39:20 2009 -0700
@@ -479,34 +479,34 @@
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<ns3::Object> obj) [member function]
+ ## names.h: static void ns3::Names::Add(std::string name, ns3::Ptr<ns3::Object> obj) [member function]
cls.add_method('Add',
- 'bool',
+ 'void',
[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<ns3::Object> object) [member function]
+ ## names.h: static void ns3::Names::Add(std::string path, std::string name, ns3::Ptr<ns3::Object> object) [member function]
cls.add_method('Add',
- 'bool',
+ 'void',
[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<ns3::Object> context, std::string name, ns3::Ptr<ns3::Object> object) [member function]
+ ## names.h: static void ns3::Names::Add(ns3::Ptr<ns3::Object> context, std::string name, ns3::Ptr<ns3::Object> object) [member function]
cls.add_method('Add',
- 'bool',
+ 'void',
[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]
+ ## names.h: static void ns3::Names::Rename(std::string oldpath, std::string newname) [member function]
cls.add_method('Rename',
- 'bool',
+ 'void',
[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]
+ ## names.h: static void ns3::Names::Rename(std::string path, std::string oldname, std::string newname) [member function]
cls.add_method('Rename',
- 'bool',
+ 'void',
[param('std::string', 'path'), param('std::string', 'oldname'), param('std::string', 'newname')],
is_static=True)
- ## names.h: static bool ns3::Names::Rename(ns3::Ptr<ns3::Object> context, std::string oldname, std::string newname) [member function]
+ ## names.h: static void ns3::Names::Rename(ns3::Ptr<ns3::Object> context, std::string oldname, std::string newname) [member function]
cls.add_method('Rename',
- 'bool',
+ 'void',
[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<ns3::Object> object) [member function]
--- a/bindings/python/ns3_module_helper.py Wed Mar 25 10:40:01 2009 -0700
+++ b/bindings/python/ns3_module_helper.py Thu Mar 26 17:39:20 2009 -0700
@@ -946,6 +946,8 @@
def register_Ns3TapBridgeHelper_methods(root_module, cls):
## tap-bridge-helper.h: ns3::TapBridgeHelper::TapBridgeHelper(ns3::TapBridgeHelper const & arg0) [copy constructor]
cls.add_constructor([param('ns3::TapBridgeHelper const &', 'arg0')])
+ ## tap-bridge-helper.h: ns3::TapBridgeHelper::TapBridgeHelper() [constructor]
+ cls.add_constructor([])
## tap-bridge-helper.h: ns3::TapBridgeHelper::TapBridgeHelper(ns3::Ipv4Address gateway) [constructor]
cls.add_constructor([param('ns3::Ipv4Address', 'gateway')])
## tap-bridge-helper.h: void ns3::TapBridgeHelper::SetAttribute(std::string n1, ns3::AttributeValue const & v1) [member function]
@@ -968,6 +970,10 @@
cls.add_method('Install',
'ns3::Ptr< ns3::NetDevice >',
[param('std::string', 'nodeName'), param('std::string', 'ndName')])
+ ## tap-bridge-helper.h: ns3::Ptr<ns3::NetDevice> ns3::TapBridgeHelper::Install(ns3::Ptr<ns3::Node> node, ns3::Ptr<ns3::NetDevice> nd, ns3::AttributeValue const & v1) [member function]
+ cls.add_method('Install',
+ 'ns3::Ptr< ns3::NetDevice >',
+ [param('ns3::Ptr< ns3::Node >', 'node'), param('ns3::Ptr< ns3::NetDevice >', 'nd'), param('ns3::AttributeValue const &', 'v1')])
return
def register_Ns3UdpEchoClientHelper_methods(root_module, cls):
--- a/bindings/python/ns3_module_tap_bridge.py Wed Mar 25 10:40:01 2009 -0700
+++ b/bindings/python/ns3_module_tap_bridge.py Thu Mar 26 17:39:20 2009 -0700
@@ -5,6 +5,8 @@
## tap-bridge.h: ns3::TapBridge [class]
module.add_class('TapBridge', parent=root_module['ns3::NetDevice'])
+ ## tap-bridge.h: ns3::TapBridge::Mode [enumeration]
+ module.add_enum('Mode', ['ILLEGAL', 'CONFIGURE_LOCAL', 'USE_LOCAL', 'USE_BRIDGE'], outer_class=root_module['ns3::TapBridge'])
## Register a nested module for the namespace Config
@@ -76,6 +78,14 @@
cls.add_method('Stop',
'void',
[param('ns3::Time', 'tStop')])
+ ## tap-bridge.h: void ns3::TapBridge::SetMode(ns3::TapBridge::Mode mode) [member function]
+ cls.add_method('SetMode',
+ 'void',
+ [param('ns3::TapBridge::Mode', 'mode')])
+ ## tap-bridge.h: ns3::TapBridge::Mode ns3::TapBridge::GetMode() [member function]
+ cls.add_method('GetMode',
+ 'ns3::TapBridge::Mode',
+ [])
## tap-bridge.h: void ns3::TapBridge::SetName(std::string const name) [member function]
cls.add_method('SetName',
'void',
--- a/src/core/names.cc Wed Mar 25 10:40:01 2009 -0700
+++ b/src/core/names.cc Thu Mar 26 17:39:20 2009 -0700
@@ -623,40 +623,47 @@
NamesPriv::Delete ();
}
-bool
+void
Names::Add (std::string name, Ptr<Object> object)
{
- return NamesPriv::Get ()->Add (name, object);
+ bool result = NamesPriv::Get ()->Add (name, object);
+ NS_ABORT_MSG_UNLESS (result, "Names::Add(): Error adding name " << name);
}
-bool
+void
Names::Rename (std::string oldpath, std::string newname)
{
- return NamesPriv::Get ()->Rename (oldpath, newname);
+ bool result = NamesPriv::Get ()->Rename (oldpath, newname);
+ NS_ABORT_MSG_UNLESS (result, "Names::Rename(): Error renaming " << oldpath << " to " << newname);
}
-bool
+void
Names::Add (std::string path, std::string name, Ptr<Object> object)
{
- return NamesPriv::Get ()->Add (path, name, object);
+ bool result = NamesPriv::Get ()->Add (path, name, object);
+ NS_ABORT_MSG_UNLESS (result, "Names::Add(): Error adding " << path << " " << name);
}
-bool
+void
Names::Rename (std::string path, std::string oldname, std::string newname)
{
- return NamesPriv::Get ()->Rename (path, oldname, newname);
+ bool result = NamesPriv::Get ()->Rename (path, oldname, newname);
+ NS_ABORT_MSG_UNLESS (result, "Names::Rename (): Error renaming " << path << " " << oldname << " to " << newname);
}
-bool
+void
Names::Add (Ptr<Object> context, std::string name, Ptr<Object> object)
{
- return NamesPriv::Get ()->Add (context, name, object);
+ bool result = NamesPriv::Get ()->Add (context, name, object);
+ NS_ABORT_MSG_UNLESS (result, "Names::Add(): Error adding name " << name << " under context " << &context);
}
-bool
+void
Names::Rename (Ptr<Object> context, std::string oldname, std::string newname)
{
- return NamesPriv::Get ()->Rename (context, oldname, newname);
+ bool result = NamesPriv::Get ()->Rename (context, oldname, newname);
+ NS_ABORT_MSG_UNLESS (result, "Names::Rename (): Error renaming " << oldname << " to " << newname << " under context " <<
+ &context);
}
std::string
@@ -730,50 +737,53 @@
{
bool result = true;
+ //
+ // Names::Add and Names::Rename return void to align with the Config API.
+ // The private versions of these functions do return error codes so we
+ // can test to make sure errors are detected. Names::Add and
+ // Names::Rename check for these error codes and abort if an error was
+ // detected. So when we expect that an error should be detected, we
+ // have to call the private routine to avoid a fatal error popping.
//
// Name a couple of objects at the root level
//
Ptr<TestObject> client = CreateObject<TestObject> ();
- result = Names::Add ("Client", client);
- NS_TEST_ASSERT_EQUAL (result, true);
+ Names::Add ("Client", client);
Ptr<TestObject> server = CreateObject<TestObject> ();
- result = Names::Add ("Server", server);
- NS_TEST_ASSERT_EQUAL (result, true);
+ Names::Add ("Server", server);
//
// We shouldn't be able to add another name to a previously named object
//
- result = Names::Add ("Not Client", client);
+ result = NamesPriv::Get ()->Add ("Not Client", client);
NS_TEST_ASSERT_EQUAL (result, false);
//
// We shouldn't be able to duplicate a name at the root level.
//
Ptr<TestObject> secondClient = CreateObject<TestObject> ();
- result = Names::Add ("Client", secondClient);
+ result = NamesPriv::Get ()->Add ("Client", secondClient);
NS_TEST_ASSERT_EQUAL (result, false);
//
// We should be able to add a new name in the first object's context
//
Ptr<TestObject> clientEth0 = CreateObject<TestObject> ();
- result = Names::Add (client, "eth0", clientEth0);
- NS_TEST_ASSERT_EQUAL (result, true);
+ Names::Add (client, "eth0", clientEth0);
//
// We shouldn't be able to duplicate a name in that context.
//
Ptr<TestObject> secondClientEth0 = CreateObject<TestObject> ();
- result = Names::Add (client, "eth0", secondClientEth0);
+ result = NamesPriv::Get ()->Add (client, "eth0", secondClientEth0);
NS_TEST_ASSERT_EQUAL (result, false);
//
// We should be able to add the same name in the second object's context
//
Ptr<TestObject> serverEth0 = CreateObject<TestObject> ();
- result = Names::Add (server, "eth0", serverEth0);
- NS_TEST_ASSERT_EQUAL (result, true);
+ Names::Add (server, "eth0", serverEth0);
//
// We should be able to find the short names for the objects we created
@@ -879,32 +889,28 @@
// in the name.
//
Ptr<TestObject> router1 = CreateObject<TestObject> ();
- result = Names::Add ("/Names/Router1", router1);
- NS_TEST_ASSERT_EQUAL (result, true);
+ Names::Add ("/Names/Router1", router1);
//
// We should be able to add objects while not including the root of the namespace
// in the name.
//
Ptr<TestObject> router2 = CreateObject<TestObject> ();
- result = Names::Add ("Router2", router2);
- NS_TEST_ASSERT_EQUAL (result, true);
+ Names::Add ("Router2", router2);
//
// We should be able to add sub-objects while including the root of the namespace
// in the name.
//
Ptr<TestObject> router1Eth0 = CreateObject<TestObject> ();
- result = Names::Add ("/Names/Router1/eth0", router1Eth0);
- NS_TEST_ASSERT_EQUAL (result, true);
+ Names::Add ("/Names/Router1/eth0", router1Eth0);
//
// We should be able to add sub-objects while not including the root of the namespace
// in the name.
//
Ptr<TestObject> router2Eth0 = CreateObject<TestObject> ();
- result = Names::Add ("Router2/eth0", router2Eth0);
- NS_TEST_ASSERT_EQUAL (result, true);
+ Names::Add ("Router2/eth0", router2Eth0);
//
// We should be able to find these objects in the same two ways
@@ -937,20 +943,17 @@
// We have a pile of names defined. We should be able to rename them in the
// usual ways.
//
- result = Names::Rename ("/Names/Router1", "RouterX");
- NS_TEST_ASSERT_EQUAL (result, true);
+ Names::Rename ("/Names/Router1", "RouterX");
foundObject = Names::Find<TestObject> ("/Names/RouterX");
NS_TEST_ASSERT_EQUAL (foundObject, router1);
- result = Names::Rename ("Router2", "RouterY");
- NS_TEST_ASSERT_EQUAL (result, true);
+ Names::Rename ("Router2", "RouterY");
foundObject = Names::Find<TestObject> ("RouterY");
NS_TEST_ASSERT_EQUAL (foundObject, router2);
- result = Names::Rename ("/Names/RouterX/eth0", "ath0");
- NS_TEST_ASSERT_EQUAL (result, true);
+ Names::Rename ("/Names/RouterX/eth0", "ath0");
foundObject = Names::Find<TestObject> ("/Names/RouterX/ath0");
NS_TEST_ASSERT_EQUAL (foundObject, router1Eth0);
@@ -963,7 +966,7 @@
// object.
//
- result = Names::Rename ("/Names/RouterX", "RouterY");
+ result = NamesPriv::Get ()->Rename ("/Names/RouterX", "RouterY");
NS_TEST_ASSERT_EQUAL (result, false);
Names::Delete ();
--- a/src/core/names.h Wed Mar 25 10:40:01 2009 -0700
+++ b/src/core/names.h Thu Mar 26 17:39:20 2009 -0700
@@ -65,7 +65,7 @@
* prepended with a path to that object.
* \param obj A smart pointer to the object itself.
*/
- static bool Add (std::string name, Ptr<Object> obj);
+ static void Add (std::string name, Ptr<Object> obj);
/**
* \brief An intermediate form of Names::Add allowing you to provide a path to
@@ -96,11 +96,9 @@
* \param name The name of the object you want to associate.
* \param obj A smart pointer to the object itself.
*
- * \returns true if the association was successfully completed, false otherwise
- *
* \see Names::Add (Ptr<Object> context, std::string name, Ptr<Object> object);
*/
- static bool Add (std::string path, std::string name, Ptr<Object> object);
+ static void Add (std::string path, std::string name, Ptr<Object> object);
/**
* \brief A low-level form of Names::Add allowing you to specify the path to
@@ -148,10 +146,8 @@
* under which you want this new name to be defined.
* \param name The name of the object you want to associate.
* \param obj A smart pointer to the object itself.
- *
- * \returns true if the association was successfully completed, false otherwise
*/
- static bool Add (Ptr<Object> context, std::string name, Ptr<Object> object);
+ static void Add (Ptr<Object> context, std::string name, Ptr<Object> object);
/**
* \brief Rename a previously associated name.
@@ -178,11 +174,9 @@
* \param oldpath The current path name to the object you want to change.
* \param newname The new name of the object you want to change.
*
- * \returns true if the name change was successfully completed, false otherwise
- *
* \see Names::Add (std::string name, Ptr<Object> obj)
*/
- static bool Rename (std::string oldpath, std::string newname);
+ static void Rename (std::string oldpath, std::string newname);
/**
* \brief An intermediate form of Names::Rename allowing you to provide a path to
@@ -203,10 +197,8 @@
* you want this name change to occur (cf. directory).
* \param oldname The currently defined name of the object.
* \param newname The new name you want the object to have.
- *
- * \returns true if the name change was successfully completed, false otherwise
*/
- static bool Rename (std::string path, std::string oldname, std::string newname);
+ static void Rename (std::string path, std::string oldname, std::string newname);
/**
* \brief A low-level form of Names::Rename allowing you to specify the path to
@@ -244,10 +236,8 @@
* under which you want this new name to be defined.
* \param oldname The current shortname of the object you want to change.
* \param newname The new shortname of the object you want to change.
- *
- * \returns true if the name change was successfully completed, false otherwise
*/
- static bool Rename (Ptr<Object> context, std::string oldname, std::string newname);
+ static void Rename (Ptr<Object> context, std::string oldname, std::string newname);
/**
* Given a pointer to an object, look to see if that object has a name