merge with ns-3-dev
authorPavel Boyko <boyko@iitp.ru>
Fri, 20 Nov 2009 13:06:46 +0300
changeset 5764 87e3b31b50b4
parent 5763 04848ede4d04 (current diff)
parent 5762 ae78a8de6f5f (diff)
child 5765 bc0f84039145
merge with ns-3-dev
--- a/CHANGES.html	Fri Nov 20 13:06:15 2009 +0300
+++ b/CHANGES.html	Fri Nov 20 13:06:46 2009 +0300
@@ -59,9 +59,10 @@
 by the ns-3 logging system to report the execution context of each log line.
 <li><b>Object::DoStart</b>: Users who need to complete their object setup at the start of a simulation
 can override this virtual method, perform their adhoc setup, and then, must chain up to their parent.
-
 <li><b>Aod hoc On-Demand Distance Vector (AODV)</b> routing model, 
 <a href=http://www.ietf.org/rfc/rfc3561.txt>RFC 3561</a> </li>
+<li><b>Ipv4::IsDestinationAddress (Ipv4Address address, uint32_t iif)</b> Method added to support checks of whether a destination address should be accepted 
+as one of the host's own addresses.  RFC 1122 Strong/Weak end system behavior can be changed with a new attribute (WeakEsModel) in class Ipv4.  </li>
 
 </ul>
 
--- a/bindings/python/apidefs/gcc-ILP32/ns3_module_core.py	Fri Nov 20 13:06:15 2009 +0300
+++ b/bindings/python/apidefs/gcc-ILP32/ns3_module_core.py	Fri Nov 20 13:06:46 2009 +0300
@@ -3372,7 +3372,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', 
--- a/bindings/python/apidefs/gcc-ILP32/ns3_module_dot11s.py	Fri Nov 20 13:06:15 2009 +0300
+++ b/bindings/python/apidefs/gcc-ILP32/ns3_module_dot11s.py	Fri Nov 20 13:06:46 2009 +0300
@@ -79,12 +79,12 @@
     module.add_enum('dot11sSynchronizationProtocolIdentifier', ['SYNC_NEIGHBOUR_OFFSET', 'SYNC_NULL'])
     ## ie-dot11s-configuration.h: ns3::dot11s::dot11sCongestionControlMode [enumeration]
     module.add_enum('dot11sCongestionControlMode', ['CONGESTION_SIGNALING', 'CONGESTION_NULL'])
+    ## ie-dot11s-configuration.h: ns3::dot11s::dot11sPathSelectionMetric [enumeration]
+    module.add_enum('dot11sPathSelectionMetric', ['METRIC_AIRTIME'])
+    ## ie-dot11s-peer-management.h: ns3::dot11s::PmpReasonCode [enumeration]
+    module.add_enum('PmpReasonCode', ['REASON11S_PEERING_CANCELLED', 'REASON11S_MESH_MAX_PEERS', 'REASON11S_MESH_CAPABILITY_POLICY_VIOLATION', 'REASON11S_MESH_CLOSE_RCVD', 'REASON11S_MESH_MAX_RETRIES', 'REASON11S_MESH_CONFIRM_TIMEOUT', 'REASON11S_MESH_INVALID_GTK', 'REASON11S_MESH_INCONSISTENT_PARAMETERS', 'REASON11S_MESH_INVALID_SECURITY_CAPABILITY', 'REASON11S_RESERVED'])
     ## ie-dot11s-configuration.h: ns3::dot11s::dot11sAuthenticationProtocol [enumeration]
     module.add_enum('dot11sAuthenticationProtocol', ['AUTH_NULL', 'AUTH_SAE'])
-    ## ie-dot11s-peer-management.h: ns3::dot11s::PmpReasonCode [enumeration]
-    module.add_enum('PmpReasonCode', ['REASON11S_PEERING_CANCELLED', 'REASON11S_MESH_MAX_PEERS', 'REASON11S_MESH_CAPABILITY_POLICY_VIOLATION', 'REASON11S_MESH_CLOSE_RCVD', 'REASON11S_MESH_MAX_RETRIES', 'REASON11S_MESH_CONFIRM_TIMEOUT', 'REASON11S_MESH_INVALID_GTK', 'REASON11S_MESH_INCONSISTENT_PARAMETERS', 'REASON11S_MESH_INVALID_SECURITY_CAPABILITY', 'REASON11S_RESERVED'])
-    ## ie-dot11s-configuration.h: ns3::dot11s::dot11sPathSelectionMetric [enumeration]
-    module.add_enum('dot11sPathSelectionMetric', ['METRIC_AIRTIME'])
     ## ie-dot11s-configuration.h: ns3::dot11s::Dot11sMeshCapability [class]
     module.add_class('Dot11sMeshCapability')
     ## hwmp-protocol.h: ns3::dot11s::HwmpProtocol [class]
--- a/bindings/python/apidefs/gcc-ILP32/ns3_module_internet_stack.py	Fri Nov 20 13:06:15 2009 +0300
+++ b/bindings/python/apidefs/gcc-ILP32/ns3_module_internet_stack.py	Fri Nov 20 13:06:46 2009 +0300
@@ -2013,6 +2013,11 @@
                    'int32_t', 
                    [param('ns3::Ptr< ns3::NetDevice const >', 'device')], 
                    is_const=True, is_virtual=True)
+    ## ipv4-l3-protocol.h: bool ns3::Ipv4L3Protocol::IsDestinationAddress(ns3::Ipv4Address address, uint32_t iif) const [member function]
+    cls.add_method('IsDestinationAddress', 
+                   'bool', 
+                   [param('ns3::Ipv4Address', 'address'), param('uint32_t', 'iif')], 
+                   is_const=True, is_virtual=True)
     ## ipv4-l3-protocol.h: bool ns3::Ipv4L3Protocol::AddAddress(uint32_t i, ns3::Ipv4InterfaceAddress address) [member function]
     cls.add_method('AddAddress', 
                    'bool', 
@@ -2098,6 +2103,16 @@
                    'bool', 
                    [], 
                    is_const=True, visibility='private', is_virtual=True)
+    ## ipv4-l3-protocol.h: void ns3::Ipv4L3Protocol::SetWeakEsModel(bool model) [member function]
+    cls.add_method('SetWeakEsModel', 
+                   'void', 
+                   [param('bool', 'model')], 
+                   visibility='private', is_virtual=True)
+    ## ipv4-l3-protocol.h: bool ns3::Ipv4L3Protocol::GetWeakEsModel() const [member function]
+    cls.add_method('GetWeakEsModel', 
+                   'bool', 
+                   [], 
+                   is_const=True, visibility='private', is_virtual=True)
     return
 
 def register_Ns3Ipv4L4Protocol_methods(root_module, cls):
--- a/bindings/python/apidefs/gcc-ILP32/ns3_module_node.py	Fri Nov 20 13:06:15 2009 +0300
+++ b/bindings/python/apidefs/gcc-ILP32/ns3_module_node.py	Fri Nov 20 13:06:46 2009 +0300
@@ -2754,6 +2754,11 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## ipv4.h: bool ns3::Ipv4::IsDestinationAddress(ns3::Ipv4Address address, uint32_t iif) const [member function]
+    cls.add_method('IsDestinationAddress', 
+                   'bool', 
+                   [param('ns3::Ipv4Address', 'address'), param('uint32_t', 'iif')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## ipv4.h: bool ns3::Ipv4::IsForwarding(uint32_t interface) const [member function]
     cls.add_method('IsForwarding', 
                    'bool', 
@@ -2801,11 +2806,21 @@
                    'bool', 
                    [], 
                    is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
+    ## ipv4.h: bool ns3::Ipv4::GetWeakEsModel() const [member function]
+    cls.add_method('GetWeakEsModel', 
+                   'bool', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
     ## ipv4.h: void ns3::Ipv4::SetIpForward(bool forward) [member function]
     cls.add_method('SetIpForward', 
                    'void', 
                    [param('bool', 'forward')], 
                    is_pure_virtual=True, visibility='private', is_virtual=True)
+    ## ipv4.h: void ns3::Ipv4::SetWeakEsModel(bool model) [member function]
+    cls.add_method('SetWeakEsModel', 
+                   'void', 
+                   [param('bool', 'model')], 
+                   is_pure_virtual=True, visibility='private', is_virtual=True)
     return
 
 def register_Ns3Ipv4AddressChecker_methods(root_module, cls):
--- a/bindings/python/apidefs/gcc-ILP32/ns3modulegen_generated.py	Fri Nov 20 13:06:15 2009 +0300
+++ b/bindings/python/apidefs/gcc-ILP32/ns3modulegen_generated.py	Fri Nov 20 13:06:46 2009 +0300
@@ -17,30 +17,30 @@
 import ns3_module_test
 import ns3_module_mobility
 import ns3_module_common
+import ns3_module_contrib
 import ns3_module_node
-import ns3_module_contrib
+import ns3_module_tap_bridge
+import ns3_module_v4ping
+import ns3_module_static_routing
+import ns3_module_packet_sink
+import ns3_module_stats
+import ns3_module_onoff
 import ns3_module_point_to_point
 import ns3_module_internet_stack
-import ns3_module_tap_bridge
 import ns3_module_csma
+import ns3_module_list_routing
+import ns3_module_virtual_net_device
 import ns3_module_wifi
-import ns3_module_static_routing
-import ns3_module_v4ping
-import ns3_module_virtual_net_device
-import ns3_module_packet_sink
-import ns3_module_global_routing
-import ns3_module_stats
-import ns3_module_list_routing
 import ns3_module_emu
 import ns3_module_bridge
-import ns3_module_onoff
+import ns3_module_global_routing
 import ns3_module_udp_echo
-import ns3_module_ping6
 import ns3_module_nix_vector_routing
 import ns3_module_olsr
 import ns3_module_aodv
+import ns3_module_radvd
+import ns3_module_ping6
 import ns3_module_flow_monitor
-import ns3_module_radvd
 import ns3_module_mesh
 import ns3_module_helper
 import ns3_module_dot11s
@@ -108,6 +108,17 @@
         ns3_module_common__local.register_types(module)
     
     root_module.end_section('ns3_module_common')
+    root_module.begin_section('ns3_module_contrib')
+    ns3_module_contrib.register_types(module)
+    
+    try:
+        import ns3_module_contrib__local
+    except ImportError:
+        pass
+    else:
+        ns3_module_contrib__local.register_types(module)
+    
+    root_module.end_section('ns3_module_contrib')
     root_module.begin_section('ns3_module_node')
     ns3_module_node.register_types(module)
     
@@ -119,17 +130,72 @@
         ns3_module_node__local.register_types(module)
     
     root_module.end_section('ns3_module_node')
-    root_module.begin_section('ns3_module_contrib')
-    ns3_module_contrib.register_types(module)
+    root_module.begin_section('ns3_module_tap_bridge')
+    ns3_module_tap_bridge.register_types(module)
     
     try:
-        import ns3_module_contrib__local
+        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_v4ping')
+    ns3_module_v4ping.register_types(module)
+    
+    try:
+        import ns3_module_v4ping__local
+    except ImportError:
+        pass
+    else:
+        ns3_module_v4ping__local.register_types(module)
+    
+    root_module.end_section('ns3_module_v4ping')
+    root_module.begin_section('ns3_module_static_routing')
+    ns3_module_static_routing.register_types(module)
+    
+    try:
+        import ns3_module_static_routing__local
     except ImportError:
         pass
     else:
-        ns3_module_contrib__local.register_types(module)
+        ns3_module_static_routing__local.register_types(module)
+    
+    root_module.end_section('ns3_module_static_routing')
+    root_module.begin_section('ns3_module_packet_sink')
+    ns3_module_packet_sink.register_types(module)
+    
+    try:
+        import ns3_module_packet_sink__local
+    except ImportError:
+        pass
+    else:
+        ns3_module_packet_sink__local.register_types(module)
+    
+    root_module.end_section('ns3_module_packet_sink')
+    root_module.begin_section('ns3_module_stats')
+    ns3_module_stats.register_types(module)
     
-    root_module.end_section('ns3_module_contrib')
+    try:
+        import ns3_module_stats__local
+    except ImportError:
+        pass
+    else:
+        ns3_module_stats__local.register_types(module)
+    
+    root_module.end_section('ns3_module_stats')
+    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_point_to_point')
     ns3_module_point_to_point.register_types(module)
     
@@ -152,17 +218,6 @@
         ns3_module_internet_stack__local.register_types(module)
     
     root_module.end_section('ns3_module_internet_stack')
-    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_csma')
     ns3_module_csma.register_types(module)
     
@@ -174,6 +229,28 @@
         ns3_module_csma__local.register_types(module)
     
     root_module.end_section('ns3_module_csma')
+    root_module.begin_section('ns3_module_list_routing')
+    ns3_module_list_routing.register_types(module)
+    
+    try:
+        import ns3_module_list_routing__local
+    except ImportError:
+        pass
+    else:
+        ns3_module_list_routing__local.register_types(module)
+    
+    root_module.end_section('ns3_module_list_routing')
+    root_module.begin_section('ns3_module_virtual_net_device')
+    ns3_module_virtual_net_device.register_types(module)
+    
+    try:
+        import ns3_module_virtual_net_device__local
+    except ImportError:
+        pass
+    else:
+        ns3_module_virtual_net_device__local.register_types(module)
+    
+    root_module.end_section('ns3_module_virtual_net_device')
     root_module.begin_section('ns3_module_wifi')
     ns3_module_wifi.register_types(module)
     
@@ -185,83 +262,6 @@
         ns3_module_wifi__local.register_types(module)
     
     root_module.end_section('ns3_module_wifi')
-    root_module.begin_section('ns3_module_static_routing')
-    ns3_module_static_routing.register_types(module)
-    
-    try:
-        import ns3_module_static_routing__local
-    except ImportError:
-        pass
-    else:
-        ns3_module_static_routing__local.register_types(module)
-    
-    root_module.end_section('ns3_module_static_routing')
-    root_module.begin_section('ns3_module_v4ping')
-    ns3_module_v4ping.register_types(module)
-    
-    try:
-        import ns3_module_v4ping__local
-    except ImportError:
-        pass
-    else:
-        ns3_module_v4ping__local.register_types(module)
-    
-    root_module.end_section('ns3_module_v4ping')
-    root_module.begin_section('ns3_module_virtual_net_device')
-    ns3_module_virtual_net_device.register_types(module)
-    
-    try:
-        import ns3_module_virtual_net_device__local
-    except ImportError:
-        pass
-    else:
-        ns3_module_virtual_net_device__local.register_types(module)
-    
-    root_module.end_section('ns3_module_virtual_net_device')
-    root_module.begin_section('ns3_module_packet_sink')
-    ns3_module_packet_sink.register_types(module)
-    
-    try:
-        import ns3_module_packet_sink__local
-    except ImportError:
-        pass
-    else:
-        ns3_module_packet_sink__local.register_types(module)
-    
-    root_module.end_section('ns3_module_packet_sink')
-    root_module.begin_section('ns3_module_global_routing')
-    ns3_module_global_routing.register_types(module)
-    
-    try:
-        import ns3_module_global_routing__local
-    except ImportError:
-        pass
-    else:
-        ns3_module_global_routing__local.register_types(module)
-    
-    root_module.end_section('ns3_module_global_routing')
-    root_module.begin_section('ns3_module_stats')
-    ns3_module_stats.register_types(module)
-    
-    try:
-        import ns3_module_stats__local
-    except ImportError:
-        pass
-    else:
-        ns3_module_stats__local.register_types(module)
-    
-    root_module.end_section('ns3_module_stats')
-    root_module.begin_section('ns3_module_list_routing')
-    ns3_module_list_routing.register_types(module)
-    
-    try:
-        import ns3_module_list_routing__local
-    except ImportError:
-        pass
-    else:
-        ns3_module_list_routing__local.register_types(module)
-    
-    root_module.end_section('ns3_module_list_routing')
     root_module.begin_section('ns3_module_emu')
     ns3_module_emu.register_types(module)
     
@@ -284,17 +284,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)
+    root_module.begin_section('ns3_module_global_routing')
+    ns3_module_global_routing.register_types(module)
     
     try:
-        import ns3_module_onoff__local
+        import ns3_module_global_routing__local
     except ImportError:
         pass
     else:
-        ns3_module_onoff__local.register_types(module)
+        ns3_module_global_routing__local.register_types(module)
     
-    root_module.end_section('ns3_module_onoff')
+    root_module.end_section('ns3_module_global_routing')
     root_module.begin_section('ns3_module_udp_echo')
     ns3_module_udp_echo.register_types(module)
     
@@ -306,17 +306,6 @@
         ns3_module_udp_echo__local.register_types(module)
     
     root_module.end_section('ns3_module_udp_echo')
-    root_module.begin_section('ns3_module_ping6')
-    ns3_module_ping6.register_types(module)
-    
-    try:
-        import ns3_module_ping6__local
-    except ImportError:
-        pass
-    else:
-        ns3_module_ping6__local.register_types(module)
-    
-    root_module.end_section('ns3_module_ping6')
     root_module.begin_section('ns3_module_nix_vector_routing')
     ns3_module_nix_vector_routing.register_types(module)
     
@@ -350,6 +339,28 @@
         ns3_module_aodv__local.register_types(module)
     
     root_module.end_section('ns3_module_aodv')
+    root_module.begin_section('ns3_module_radvd')
+    ns3_module_radvd.register_types(module)
+    
+    try:
+        import ns3_module_radvd__local
+    except ImportError:
+        pass
+    else:
+        ns3_module_radvd__local.register_types(module)
+    
+    root_module.end_section('ns3_module_radvd')
+    root_module.begin_section('ns3_module_ping6')
+    ns3_module_ping6.register_types(module)
+    
+    try:
+        import ns3_module_ping6__local
+    except ImportError:
+        pass
+    else:
+        ns3_module_ping6__local.register_types(module)
+    
+    root_module.end_section('ns3_module_ping6')
     root_module.begin_section('ns3_module_flow_monitor')
     ns3_module_flow_monitor.register_types(module)
     
@@ -361,17 +372,6 @@
         ns3_module_flow_monitor__local.register_types(module)
     
     root_module.end_section('ns3_module_flow_monitor')
-    root_module.begin_section('ns3_module_radvd')
-    ns3_module_radvd.register_types(module)
-    
-    try:
-        import ns3_module_radvd__local
-    except ImportError:
-        pass
-    else:
-        ns3_module_radvd__local.register_types(module)
-    
-    root_module.end_section('ns3_module_radvd')
     root_module.begin_section('ns3_module_mesh')
     ns3_module_mesh.register_types(module)
     
@@ -572,6 +572,17 @@
         ns3_module_common__local.register_methods(root_module)
     
     root_module.end_section('ns3_module_common')
+    root_module.begin_section('ns3_module_contrib')
+    ns3_module_contrib.register_methods(root_module)
+    
+    try:
+        import ns3_module_contrib__local
+    except ImportError:
+        pass
+    else:
+        ns3_module_contrib__local.register_methods(root_module)
+    
+    root_module.end_section('ns3_module_contrib')
     root_module.begin_section('ns3_module_node')
     ns3_module_node.register_methods(root_module)
     
@@ -583,17 +594,72 @@
         ns3_module_node__local.register_methods(root_module)
     
     root_module.end_section('ns3_module_node')
-    root_module.begin_section('ns3_module_contrib')
-    ns3_module_contrib.register_methods(root_module)
+    root_module.begin_section('ns3_module_tap_bridge')
+    ns3_module_tap_bridge.register_methods(root_module)
     
     try:
-        import ns3_module_contrib__local
+        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_v4ping')
+    ns3_module_v4ping.register_methods(root_module)
+    
+    try:
+        import ns3_module_v4ping__local
+    except ImportError:
+        pass
+    else:
+        ns3_module_v4ping__local.register_methods(root_module)
+    
+    root_module.end_section('ns3_module_v4ping')
+    root_module.begin_section('ns3_module_static_routing')
+    ns3_module_static_routing.register_methods(root_module)
+    
+    try:
+        import ns3_module_static_routing__local
     except ImportError:
         pass
     else:
-        ns3_module_contrib__local.register_methods(root_module)
+        ns3_module_static_routing__local.register_methods(root_module)
+    
+    root_module.end_section('ns3_module_static_routing')
+    root_module.begin_section('ns3_module_packet_sink')
+    ns3_module_packet_sink.register_methods(root_module)
+    
+    try:
+        import ns3_module_packet_sink__local
+    except ImportError:
+        pass
+    else:
+        ns3_module_packet_sink__local.register_methods(root_module)
+    
+    root_module.end_section('ns3_module_packet_sink')
+    root_module.begin_section('ns3_module_stats')
+    ns3_module_stats.register_methods(root_module)
     
-    root_module.end_section('ns3_module_contrib')
+    try:
+        import ns3_module_stats__local
+    except ImportError:
+        pass
+    else:
+        ns3_module_stats__local.register_methods(root_module)
+    
+    root_module.end_section('ns3_module_stats')
+    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_point_to_point')
     ns3_module_point_to_point.register_methods(root_module)
     
@@ -616,17 +682,6 @@
         ns3_module_internet_stack__local.register_methods(root_module)
     
     root_module.end_section('ns3_module_internet_stack')
-    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_csma')
     ns3_module_csma.register_methods(root_module)
     
@@ -638,6 +693,28 @@
         ns3_module_csma__local.register_methods(root_module)
     
     root_module.end_section('ns3_module_csma')
+    root_module.begin_section('ns3_module_list_routing')
+    ns3_module_list_routing.register_methods(root_module)
+    
+    try:
+        import ns3_module_list_routing__local
+    except ImportError:
+        pass
+    else:
+        ns3_module_list_routing__local.register_methods(root_module)
+    
+    root_module.end_section('ns3_module_list_routing')
+    root_module.begin_section('ns3_module_virtual_net_device')
+    ns3_module_virtual_net_device.register_methods(root_module)
+    
+    try:
+        import ns3_module_virtual_net_device__local
+    except ImportError:
+        pass
+    else:
+        ns3_module_virtual_net_device__local.register_methods(root_module)
+    
+    root_module.end_section('ns3_module_virtual_net_device')
     root_module.begin_section('ns3_module_wifi')
     ns3_module_wifi.register_methods(root_module)
     
@@ -649,83 +726,6 @@
         ns3_module_wifi__local.register_methods(root_module)
     
     root_module.end_section('ns3_module_wifi')
-    root_module.begin_section('ns3_module_static_routing')
-    ns3_module_static_routing.register_methods(root_module)
-    
-    try:
-        import ns3_module_static_routing__local
-    except ImportError:
-        pass
-    else:
-        ns3_module_static_routing__local.register_methods(root_module)
-    
-    root_module.end_section('ns3_module_static_routing')
-    root_module.begin_section('ns3_module_v4ping')
-    ns3_module_v4ping.register_methods(root_module)
-    
-    try:
-        import ns3_module_v4ping__local
-    except ImportError:
-        pass
-    else:
-        ns3_module_v4ping__local.register_methods(root_module)
-    
-    root_module.end_section('ns3_module_v4ping')
-    root_module.begin_section('ns3_module_virtual_net_device')
-    ns3_module_virtual_net_device.register_methods(root_module)
-    
-    try:
-        import ns3_module_virtual_net_device__local
-    except ImportError:
-        pass
-    else:
-        ns3_module_virtual_net_device__local.register_methods(root_module)
-    
-    root_module.end_section('ns3_module_virtual_net_device')
-    root_module.begin_section('ns3_module_packet_sink')
-    ns3_module_packet_sink.register_methods(root_module)
-    
-    try:
-        import ns3_module_packet_sink__local
-    except ImportError:
-        pass
-    else:
-        ns3_module_packet_sink__local.register_methods(root_module)
-    
-    root_module.end_section('ns3_module_packet_sink')
-    root_module.begin_section('ns3_module_global_routing')
-    ns3_module_global_routing.register_methods(root_module)
-    
-    try:
-        import ns3_module_global_routing__local
-    except ImportError:
-        pass
-    else:
-        ns3_module_global_routing__local.register_methods(root_module)
-    
-    root_module.end_section('ns3_module_global_routing')
-    root_module.begin_section('ns3_module_stats')
-    ns3_module_stats.register_methods(root_module)
-    
-    try:
-        import ns3_module_stats__local
-    except ImportError:
-        pass
-    else:
-        ns3_module_stats__local.register_methods(root_module)
-    
-    root_module.end_section('ns3_module_stats')
-    root_module.begin_section('ns3_module_list_routing')
-    ns3_module_list_routing.register_methods(root_module)
-    
-    try:
-        import ns3_module_list_routing__local
-    except ImportError:
-        pass
-    else:
-        ns3_module_list_routing__local.register_methods(root_module)
-    
-    root_module.end_section('ns3_module_list_routing')
     root_module.begin_section('ns3_module_emu')
     ns3_module_emu.register_methods(root_module)
     
@@ -748,17 +748,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)
+    root_module.begin_section('ns3_module_global_routing')
+    ns3_module_global_routing.register_methods(root_module)
     
     try:
-        import ns3_module_onoff__local
+        import ns3_module_global_routing__local
     except ImportError:
         pass
     else:
-        ns3_module_onoff__local.register_methods(root_module)
+        ns3_module_global_routing__local.register_methods(root_module)
     
-    root_module.end_section('ns3_module_onoff')
+    root_module.end_section('ns3_module_global_routing')
     root_module.begin_section('ns3_module_udp_echo')
     ns3_module_udp_echo.register_methods(root_module)
     
@@ -770,17 +770,6 @@
         ns3_module_udp_echo__local.register_methods(root_module)
     
     root_module.end_section('ns3_module_udp_echo')
-    root_module.begin_section('ns3_module_ping6')
-    ns3_module_ping6.register_methods(root_module)
-    
-    try:
-        import ns3_module_ping6__local
-    except ImportError:
-        pass
-    else:
-        ns3_module_ping6__local.register_methods(root_module)
-    
-    root_module.end_section('ns3_module_ping6')
     root_module.begin_section('ns3_module_nix_vector_routing')
     ns3_module_nix_vector_routing.register_methods(root_module)
     
@@ -814,6 +803,28 @@
         ns3_module_aodv__local.register_methods(root_module)
     
     root_module.end_section('ns3_module_aodv')
+    root_module.begin_section('ns3_module_radvd')
+    ns3_module_radvd.register_methods(root_module)
+    
+    try:
+        import ns3_module_radvd__local
+    except ImportError:
+        pass
+    else:
+        ns3_module_radvd__local.register_methods(root_module)
+    
+    root_module.end_section('ns3_module_radvd')
+    root_module.begin_section('ns3_module_ping6')
+    ns3_module_ping6.register_methods(root_module)
+    
+    try:
+        import ns3_module_ping6__local
+    except ImportError:
+        pass
+    else:
+        ns3_module_ping6__local.register_methods(root_module)
+    
+    root_module.end_section('ns3_module_ping6')
     root_module.begin_section('ns3_module_flow_monitor')
     ns3_module_flow_monitor.register_methods(root_module)
     
@@ -825,17 +836,6 @@
         ns3_module_flow_monitor__local.register_methods(root_module)
     
     root_module.end_section('ns3_module_flow_monitor')
-    root_module.begin_section('ns3_module_radvd')
-    ns3_module_radvd.register_methods(root_module)
-    
-    try:
-        import ns3_module_radvd__local
-    except ImportError:
-        pass
-    else:
-        ns3_module_radvd__local.register_methods(root_module)
-    
-    root_module.end_section('ns3_module_radvd')
     root_module.begin_section('ns3_module_mesh')
     ns3_module_mesh.register_methods(root_module)
     
@@ -1073,6 +1073,17 @@
         ns3_module_common__local.register_functions(root_module)
     
     root_module.end_section('ns3_module_common')
+    root_module.begin_section('ns3_module_contrib')
+    ns3_module_contrib.register_functions(root_module)
+    
+    try:
+        import ns3_module_contrib__local
+    except ImportError:
+        pass
+    else:
+        ns3_module_contrib__local.register_functions(root_module)
+    
+    root_module.end_section('ns3_module_contrib')
     root_module.begin_section('ns3_module_node')
     ns3_module_node.register_functions(root_module)
     
@@ -1084,17 +1095,72 @@
         ns3_module_node__local.register_functions(root_module)
     
     root_module.end_section('ns3_module_node')
-    root_module.begin_section('ns3_module_contrib')
-    ns3_module_contrib.register_functions(root_module)
+    root_module.begin_section('ns3_module_tap_bridge')
+    ns3_module_tap_bridge.register_functions(root_module)
     
     try:
-        import ns3_module_contrib__local
+        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_v4ping')
+    ns3_module_v4ping.register_functions(root_module)
+    
+    try:
+        import ns3_module_v4ping__local
+    except ImportError:
+        pass
+    else:
+        ns3_module_v4ping__local.register_functions(root_module)
+    
+    root_module.end_section('ns3_module_v4ping')
+    root_module.begin_section('ns3_module_static_routing')
+    ns3_module_static_routing.register_functions(root_module)
+    
+    try:
+        import ns3_module_static_routing__local
     except ImportError:
         pass
     else:
-        ns3_module_contrib__local.register_functions(root_module)
+        ns3_module_static_routing__local.register_functions(root_module)
+    
+    root_module.end_section('ns3_module_static_routing')
+    root_module.begin_section('ns3_module_packet_sink')
+    ns3_module_packet_sink.register_functions(root_module)
+    
+    try:
+        import ns3_module_packet_sink__local
+    except ImportError:
+        pass
+    else:
+        ns3_module_packet_sink__local.register_functions(root_module)
+    
+    root_module.end_section('ns3_module_packet_sink')
+    root_module.begin_section('ns3_module_stats')
+    ns3_module_stats.register_functions(root_module)
     
-    root_module.end_section('ns3_module_contrib')
+    try:
+        import ns3_module_stats__local
+    except ImportError:
+        pass
+    else:
+        ns3_module_stats__local.register_functions(root_module)
+    
+    root_module.end_section('ns3_module_stats')
+    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_point_to_point')
     ns3_module_point_to_point.register_functions(root_module)
     
@@ -1117,17 +1183,6 @@
         ns3_module_internet_stack__local.register_functions(root_module)
     
     root_module.end_section('ns3_module_internet_stack')
-    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_csma')
     ns3_module_csma.register_functions(root_module)
     
@@ -1139,6 +1194,28 @@
         ns3_module_csma__local.register_functions(root_module)
     
     root_module.end_section('ns3_module_csma')
+    root_module.begin_section('ns3_module_list_routing')
+    ns3_module_list_routing.register_functions(root_module)
+    
+    try:
+        import ns3_module_list_routing__local
+    except ImportError:
+        pass
+    else:
+        ns3_module_list_routing__local.register_functions(root_module)
+    
+    root_module.end_section('ns3_module_list_routing')
+    root_module.begin_section('ns3_module_virtual_net_device')
+    ns3_module_virtual_net_device.register_functions(root_module)
+    
+    try:
+        import ns3_module_virtual_net_device__local
+    except ImportError:
+        pass
+    else:
+        ns3_module_virtual_net_device__local.register_functions(root_module)
+    
+    root_module.end_section('ns3_module_virtual_net_device')
     root_module.begin_section('ns3_module_wifi')
     ns3_module_wifi.register_functions(root_module)
     
@@ -1150,83 +1227,6 @@
         ns3_module_wifi__local.register_functions(root_module)
     
     root_module.end_section('ns3_module_wifi')
-    root_module.begin_section('ns3_module_static_routing')
-    ns3_module_static_routing.register_functions(root_module)
-    
-    try:
-        import ns3_module_static_routing__local
-    except ImportError:
-        pass
-    else:
-        ns3_module_static_routing__local.register_functions(root_module)
-    
-    root_module.end_section('ns3_module_static_routing')
-    root_module.begin_section('ns3_module_v4ping')
-    ns3_module_v4ping.register_functions(root_module)
-    
-    try:
-        import ns3_module_v4ping__local
-    except ImportError:
-        pass
-    else:
-        ns3_module_v4ping__local.register_functions(root_module)
-    
-    root_module.end_section('ns3_module_v4ping')
-    root_module.begin_section('ns3_module_virtual_net_device')
-    ns3_module_virtual_net_device.register_functions(root_module)
-    
-    try:
-        import ns3_module_virtual_net_device__local
-    except ImportError:
-        pass
-    else:
-        ns3_module_virtual_net_device__local.register_functions(root_module)
-    
-    root_module.end_section('ns3_module_virtual_net_device')
-    root_module.begin_section('ns3_module_packet_sink')
-    ns3_module_packet_sink.register_functions(root_module)
-    
-    try:
-        import ns3_module_packet_sink__local
-    except ImportError:
-        pass
-    else:
-        ns3_module_packet_sink__local.register_functions(root_module)
-    
-    root_module.end_section('ns3_module_packet_sink')
-    root_module.begin_section('ns3_module_global_routing')
-    ns3_module_global_routing.register_functions(root_module)
-    
-    try:
-        import ns3_module_global_routing__local
-    except ImportError:
-        pass
-    else:
-        ns3_module_global_routing__local.register_functions(root_module)
-    
-    root_module.end_section('ns3_module_global_routing')
-    root_module.begin_section('ns3_module_stats')
-    ns3_module_stats.register_functions(root_module)
-    
-    try:
-        import ns3_module_stats__local
-    except ImportError:
-        pass
-    else:
-        ns3_module_stats__local.register_functions(root_module)
-    
-    root_module.end_section('ns3_module_stats')
-    root_module.begin_section('ns3_module_list_routing')
-    ns3_module_list_routing.register_functions(root_module)
-    
-    try:
-        import ns3_module_list_routing__local
-    except ImportError:
-        pass
-    else:
-        ns3_module_list_routing__local.register_functions(root_module)
-    
-    root_module.end_section('ns3_module_list_routing')
     root_module.begin_section('ns3_module_emu')
     ns3_module_emu.register_functions(root_module)
     
@@ -1249,17 +1249,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)
+    root_module.begin_section('ns3_module_global_routing')
+    ns3_module_global_routing.register_functions(root_module)
     
     try:
-        import ns3_module_onoff__local
+        import ns3_module_global_routing__local
     except ImportError:
         pass
     else:
-        ns3_module_onoff__local.register_functions(root_module)
+        ns3_module_global_routing__local.register_functions(root_module)
     
-    root_module.end_section('ns3_module_onoff')
+    root_module.end_section('ns3_module_global_routing')
     root_module.begin_section('ns3_module_udp_echo')
     ns3_module_udp_echo.register_functions(root_module)
     
@@ -1271,17 +1271,6 @@
         ns3_module_udp_echo__local.register_functions(root_module)
     
     root_module.end_section('ns3_module_udp_echo')
-    root_module.begin_section('ns3_module_ping6')
-    ns3_module_ping6.register_functions(root_module)
-    
-    try:
-        import ns3_module_ping6__local
-    except ImportError:
-        pass
-    else:
-        ns3_module_ping6__local.register_functions(root_module)
-    
-    root_module.end_section('ns3_module_ping6')
     root_module.begin_section('ns3_module_nix_vector_routing')
     ns3_module_nix_vector_routing.register_functions(root_module)
     
@@ -1315,6 +1304,28 @@
         ns3_module_aodv__local.register_functions(root_module)
     
     root_module.end_section('ns3_module_aodv')
+    root_module.begin_section('ns3_module_radvd')
+    ns3_module_radvd.register_functions(root_module)
+    
+    try:
+        import ns3_module_radvd__local
+    except ImportError:
+        pass
+    else:
+        ns3_module_radvd__local.register_functions(root_module)
+    
+    root_module.end_section('ns3_module_radvd')
+    root_module.begin_section('ns3_module_ping6')
+    ns3_module_ping6.register_functions(root_module)
+    
+    try:
+        import ns3_module_ping6__local
+    except ImportError:
+        pass
+    else:
+        ns3_module_ping6__local.register_functions(root_module)
+    
+    root_module.end_section('ns3_module_ping6')
     root_module.begin_section('ns3_module_flow_monitor')
     ns3_module_flow_monitor.register_functions(root_module)
     
@@ -1326,17 +1337,6 @@
         ns3_module_flow_monitor__local.register_functions(root_module)
     
     root_module.end_section('ns3_module_flow_monitor')
-    root_module.begin_section('ns3_module_radvd')
-    ns3_module_radvd.register_functions(root_module)
-    
-    try:
-        import ns3_module_radvd__local
-    except ImportError:
-        pass
-    else:
-        ns3_module_radvd__local.register_functions(root_module)
-    
-    root_module.end_section('ns3_module_radvd')
     root_module.begin_section('ns3_module_mesh')
     ns3_module_mesh.register_functions(root_module)
     
--- a/bindings/python/apidefs/gcc-LP64/ns3_module_dot11s.py	Fri Nov 20 13:06:15 2009 +0300
+++ b/bindings/python/apidefs/gcc-LP64/ns3_module_dot11s.py	Fri Nov 20 13:06:46 2009 +0300
@@ -77,14 +77,14 @@
     module.add_enum('dot11sSynchronizationProtocolIdentifier', ['SYNC_NEIGHBOUR_OFFSET', 'SYNC_NULL'])
     ## ie-dot11s-configuration.h: ns3::dot11s::dot11sCongestionControlMode [enumeration]
     module.add_enum('dot11sCongestionControlMode', ['CONGESTION_SIGNALING', 'CONGESTION_NULL'])
-    ## ie-dot11s-configuration.h: ns3::dot11s::dot11sAuthenticationProtocol [enumeration]
-    module.add_enum('dot11sAuthenticationProtocol', ['AUTH_NULL', 'AUTH_SAE'])
+    ## ie-dot11s-configuration.h: ns3::dot11s::dot11sPathSelectionMetric [enumeration]
+    module.add_enum('dot11sPathSelectionMetric', ['METRIC_AIRTIME'])
     ## ie-dot11s-peer-management.h: ns3::dot11s::PmpReasonCode [enumeration]
     module.add_enum('PmpReasonCode', ['REASON11S_PEERING_CANCELLED', 'REASON11S_MESH_MAX_PEERS', 'REASON11S_MESH_CAPABILITY_POLICY_VIOLATION', 'REASON11S_MESH_CLOSE_RCVD', 'REASON11S_MESH_MAX_RETRIES', 'REASON11S_MESH_CONFIRM_TIMEOUT', 'REASON11S_MESH_INVALID_GTK', 'REASON11S_MESH_INCONSISTENT_PARAMETERS', 'REASON11S_MESH_INVALID_SECURITY_CAPABILITY', 'REASON11S_RESERVED'])
-    ## ie-dot11s-configuration.h: ns3::dot11s::dot11sPathSelectionMetric [enumeration]
-    module.add_enum('dot11sPathSelectionMetric', ['METRIC_AIRTIME'])
     ## ie-dot11s-configuration.h: ns3::dot11s::dot11sPathSelectionProtocol [enumeration]
     module.add_enum('dot11sPathSelectionProtocol', ['PROTOCOL_HWMP'])
+    ## ie-dot11s-configuration.h: ns3::dot11s::dot11sAuthenticationProtocol [enumeration]
+    module.add_enum('dot11sAuthenticationProtocol', ['AUTH_NULL', 'AUTH_SAE'])
     ## ie-dot11s-configuration.h: ns3::dot11s::Dot11sMeshCapability [class]
     module.add_class('Dot11sMeshCapability')
     ## hwmp-protocol.h: ns3::dot11s::HwmpProtocol [class]
--- a/bindings/python/apidefs/gcc-LP64/ns3_module_internet_stack.py	Fri Nov 20 13:06:15 2009 +0300
+++ b/bindings/python/apidefs/gcc-LP64/ns3_module_internet_stack.py	Fri Nov 20 13:06:46 2009 +0300
@@ -2013,6 +2013,11 @@
                    'int32_t', 
                    [param('ns3::Ptr< ns3::NetDevice const >', 'device')], 
                    is_const=True, is_virtual=True)
+    ## ipv4-l3-protocol.h: bool ns3::Ipv4L3Protocol::IsDestinationAddress(ns3::Ipv4Address address, uint32_t iif) const [member function]
+    cls.add_method('IsDestinationAddress', 
+                   'bool', 
+                   [param('ns3::Ipv4Address', 'address'), param('uint32_t', 'iif')], 
+                   is_const=True, is_virtual=True)
     ## ipv4-l3-protocol.h: bool ns3::Ipv4L3Protocol::AddAddress(uint32_t i, ns3::Ipv4InterfaceAddress address) [member function]
     cls.add_method('AddAddress', 
                    'bool', 
@@ -2098,6 +2103,16 @@
                    'bool', 
                    [], 
                    is_const=True, visibility='private', is_virtual=True)
+    ## ipv4-l3-protocol.h: void ns3::Ipv4L3Protocol::SetWeakEsModel(bool model) [member function]
+    cls.add_method('SetWeakEsModel', 
+                   'void', 
+                   [param('bool', 'model')], 
+                   visibility='private', is_virtual=True)
+    ## ipv4-l3-protocol.h: bool ns3::Ipv4L3Protocol::GetWeakEsModel() const [member function]
+    cls.add_method('GetWeakEsModel', 
+                   'bool', 
+                   [], 
+                   is_const=True, visibility='private', is_virtual=True)
     return
 
 def register_Ns3Ipv4L4Protocol_methods(root_module, cls):
--- a/bindings/python/apidefs/gcc-LP64/ns3_module_node.py	Fri Nov 20 13:06:15 2009 +0300
+++ b/bindings/python/apidefs/gcc-LP64/ns3_module_node.py	Fri Nov 20 13:06:46 2009 +0300
@@ -2754,6 +2754,11 @@
                    'ns3::TypeId', 
                    [], 
                    is_static=True)
+    ## ipv4.h: bool ns3::Ipv4::IsDestinationAddress(ns3::Ipv4Address address, uint32_t iif) const [member function]
+    cls.add_method('IsDestinationAddress', 
+                   'bool', 
+                   [param('ns3::Ipv4Address', 'address'), param('uint32_t', 'iif')], 
+                   is_pure_virtual=True, is_const=True, is_virtual=True)
     ## ipv4.h: bool ns3::Ipv4::IsForwarding(uint32_t interface) const [member function]
     cls.add_method('IsForwarding', 
                    'bool', 
@@ -2801,11 +2806,21 @@
                    'bool', 
                    [], 
                    is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
+    ## ipv4.h: bool ns3::Ipv4::GetWeakEsModel() const [member function]
+    cls.add_method('GetWeakEsModel', 
+                   'bool', 
+                   [], 
+                   is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
     ## ipv4.h: void ns3::Ipv4::SetIpForward(bool forward) [member function]
     cls.add_method('SetIpForward', 
                    'void', 
                    [param('bool', 'forward')], 
                    is_pure_virtual=True, visibility='private', is_virtual=True)
+    ## ipv4.h: void ns3::Ipv4::SetWeakEsModel(bool model) [member function]
+    cls.add_method('SetWeakEsModel', 
+                   'void', 
+                   [param('bool', 'model')], 
+                   is_pure_virtual=True, visibility='private', is_virtual=True)
     return
 
 def register_Ns3Ipv4AddressChecker_methods(root_module, cls):
--- a/bindings/python/apidefs/gcc-LP64/ns3modulegen_generated.py	Fri Nov 20 13:06:15 2009 +0300
+++ b/bindings/python/apidefs/gcc-LP64/ns3modulegen_generated.py	Fri Nov 20 13:06:46 2009 +0300
@@ -17,30 +17,30 @@
 import ns3_module_test
 import ns3_module_mobility
 import ns3_module_common
+import ns3_module_contrib
 import ns3_module_node
-import ns3_module_contrib
+import ns3_module_tap_bridge
+import ns3_module_v4ping
+import ns3_module_static_routing
+import ns3_module_packet_sink
+import ns3_module_stats
+import ns3_module_onoff
 import ns3_module_point_to_point
 import ns3_module_internet_stack
-import ns3_module_tap_bridge
 import ns3_module_csma
+import ns3_module_list_routing
+import ns3_module_virtual_net_device
 import ns3_module_wifi
-import ns3_module_static_routing
-import ns3_module_v4ping
-import ns3_module_virtual_net_device
-import ns3_module_packet_sink
-import ns3_module_global_routing
-import ns3_module_stats
-import ns3_module_list_routing
 import ns3_module_emu
 import ns3_module_bridge
-import ns3_module_onoff
+import ns3_module_global_routing
 import ns3_module_udp_echo
-import ns3_module_ping6
 import ns3_module_nix_vector_routing
 import ns3_module_olsr
 import ns3_module_aodv
+import ns3_module_radvd
+import ns3_module_ping6
 import ns3_module_flow_monitor
-import ns3_module_radvd
 import ns3_module_mesh
 import ns3_module_helper
 import ns3_module_dot11s
@@ -108,6 +108,17 @@
         ns3_module_common__local.register_types(module)
     
     root_module.end_section('ns3_module_common')
+    root_module.begin_section('ns3_module_contrib')
+    ns3_module_contrib.register_types(module)
+    
+    try:
+        import ns3_module_contrib__local
+    except ImportError:
+        pass
+    else:
+        ns3_module_contrib__local.register_types(module)
+    
+    root_module.end_section('ns3_module_contrib')
     root_module.begin_section('ns3_module_node')
     ns3_module_node.register_types(module)
     
@@ -119,17 +130,72 @@
         ns3_module_node__local.register_types(module)
     
     root_module.end_section('ns3_module_node')
-    root_module.begin_section('ns3_module_contrib')
-    ns3_module_contrib.register_types(module)
+    root_module.begin_section('ns3_module_tap_bridge')
+    ns3_module_tap_bridge.register_types(module)
     
     try:
-        import ns3_module_contrib__local
+        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_v4ping')
+    ns3_module_v4ping.register_types(module)
+    
+    try:
+        import ns3_module_v4ping__local
+    except ImportError:
+        pass
+    else:
+        ns3_module_v4ping__local.register_types(module)
+    
+    root_module.end_section('ns3_module_v4ping')
+    root_module.begin_section('ns3_module_static_routing')
+    ns3_module_static_routing.register_types(module)
+    
+    try:
+        import ns3_module_static_routing__local
     except ImportError:
         pass
     else:
-        ns3_module_contrib__local.register_types(module)
+        ns3_module_static_routing__local.register_types(module)
+    
+    root_module.end_section('ns3_module_static_routing')
+    root_module.begin_section('ns3_module_packet_sink')
+    ns3_module_packet_sink.register_types(module)
+    
+    try:
+        import ns3_module_packet_sink__local
+    except ImportError:
+        pass
+    else:
+        ns3_module_packet_sink__local.register_types(module)
+    
+    root_module.end_section('ns3_module_packet_sink')
+    root_module.begin_section('ns3_module_stats')
+    ns3_module_stats.register_types(module)
     
-    root_module.end_section('ns3_module_contrib')
+    try:
+        import ns3_module_stats__local
+    except ImportError:
+        pass
+    else:
+        ns3_module_stats__local.register_types(module)
+    
+    root_module.end_section('ns3_module_stats')
+    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_point_to_point')
     ns3_module_point_to_point.register_types(module)
     
@@ -152,17 +218,6 @@
         ns3_module_internet_stack__local.register_types(module)
     
     root_module.end_section('ns3_module_internet_stack')
-    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_csma')
     ns3_module_csma.register_types(module)
     
@@ -174,6 +229,28 @@
         ns3_module_csma__local.register_types(module)
     
     root_module.end_section('ns3_module_csma')
+    root_module.begin_section('ns3_module_list_routing')
+    ns3_module_list_routing.register_types(module)
+    
+    try:
+        import ns3_module_list_routing__local
+    except ImportError:
+        pass
+    else:
+        ns3_module_list_routing__local.register_types(module)
+    
+    root_module.end_section('ns3_module_list_routing')
+    root_module.begin_section('ns3_module_virtual_net_device')
+    ns3_module_virtual_net_device.register_types(module)
+    
+    try:
+        import ns3_module_virtual_net_device__local
+    except ImportError:
+        pass
+    else:
+        ns3_module_virtual_net_device__local.register_types(module)
+    
+    root_module.end_section('ns3_module_virtual_net_device')
     root_module.begin_section('ns3_module_wifi')
     ns3_module_wifi.register_types(module)
     
@@ -185,83 +262,6 @@
         ns3_module_wifi__local.register_types(module)
     
     root_module.end_section('ns3_module_wifi')
-    root_module.begin_section('ns3_module_static_routing')
-    ns3_module_static_routing.register_types(module)
-    
-    try:
-        import ns3_module_static_routing__local
-    except ImportError:
-        pass
-    else:
-        ns3_module_static_routing__local.register_types(module)
-    
-    root_module.end_section('ns3_module_static_routing')
-    root_module.begin_section('ns3_module_v4ping')
-    ns3_module_v4ping.register_types(module)
-    
-    try:
-        import ns3_module_v4ping__local
-    except ImportError:
-        pass
-    else:
-        ns3_module_v4ping__local.register_types(module)
-    
-    root_module.end_section('ns3_module_v4ping')
-    root_module.begin_section('ns3_module_virtual_net_device')
-    ns3_module_virtual_net_device.register_types(module)
-    
-    try:
-        import ns3_module_virtual_net_device__local
-    except ImportError:
-        pass
-    else:
-        ns3_module_virtual_net_device__local.register_types(module)
-    
-    root_module.end_section('ns3_module_virtual_net_device')
-    root_module.begin_section('ns3_module_packet_sink')
-    ns3_module_packet_sink.register_types(module)
-    
-    try:
-        import ns3_module_packet_sink__local
-    except ImportError:
-        pass
-    else:
-        ns3_module_packet_sink__local.register_types(module)
-    
-    root_module.end_section('ns3_module_packet_sink')
-    root_module.begin_section('ns3_module_global_routing')
-    ns3_module_global_routing.register_types(module)
-    
-    try:
-        import ns3_module_global_routing__local
-    except ImportError:
-        pass
-    else:
-        ns3_module_global_routing__local.register_types(module)
-    
-    root_module.end_section('ns3_module_global_routing')
-    root_module.begin_section('ns3_module_stats')
-    ns3_module_stats.register_types(module)
-    
-    try:
-        import ns3_module_stats__local
-    except ImportError:
-        pass
-    else:
-        ns3_module_stats__local.register_types(module)
-    
-    root_module.end_section('ns3_module_stats')
-    root_module.begin_section('ns3_module_list_routing')
-    ns3_module_list_routing.register_types(module)
-    
-    try:
-        import ns3_module_list_routing__local
-    except ImportError:
-        pass
-    else:
-        ns3_module_list_routing__local.register_types(module)
-    
-    root_module.end_section('ns3_module_list_routing')
     root_module.begin_section('ns3_module_emu')
     ns3_module_emu.register_types(module)
     
@@ -284,17 +284,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)
+    root_module.begin_section('ns3_module_global_routing')
+    ns3_module_global_routing.register_types(module)
     
     try:
-        import ns3_module_onoff__local
+        import ns3_module_global_routing__local
     except ImportError:
         pass
     else:
-        ns3_module_onoff__local.register_types(module)
+        ns3_module_global_routing__local.register_types(module)
     
-    root_module.end_section('ns3_module_onoff')
+    root_module.end_section('ns3_module_global_routing')
     root_module.begin_section('ns3_module_udp_echo')
     ns3_module_udp_echo.register_types(module)
     
@@ -306,17 +306,6 @@
         ns3_module_udp_echo__local.register_types(module)
     
     root_module.end_section('ns3_module_udp_echo')
-    root_module.begin_section('ns3_module_ping6')
-    ns3_module_ping6.register_types(module)
-    
-    try:
-        import ns3_module_ping6__local
-    except ImportError:
-        pass
-    else:
-        ns3_module_ping6__local.register_types(module)
-    
-    root_module.end_section('ns3_module_ping6')
     root_module.begin_section('ns3_module_nix_vector_routing')
     ns3_module_nix_vector_routing.register_types(module)
     
@@ -350,6 +339,28 @@
         ns3_module_aodv__local.register_types(module)
     
     root_module.end_section('ns3_module_aodv')
+    root_module.begin_section('ns3_module_radvd')
+    ns3_module_radvd.register_types(module)
+    
+    try:
+        import ns3_module_radvd__local
+    except ImportError:
+        pass
+    else:
+        ns3_module_radvd__local.register_types(module)
+    
+    root_module.end_section('ns3_module_radvd')
+    root_module.begin_section('ns3_module_ping6')
+    ns3_module_ping6.register_types(module)
+    
+    try:
+        import ns3_module_ping6__local
+    except ImportError:
+        pass
+    else:
+        ns3_module_ping6__local.register_types(module)
+    
+    root_module.end_section('ns3_module_ping6')
     root_module.begin_section('ns3_module_flow_monitor')
     ns3_module_flow_monitor.register_types(module)
     
@@ -361,17 +372,6 @@
         ns3_module_flow_monitor__local.register_types(module)
     
     root_module.end_section('ns3_module_flow_monitor')
-    root_module.begin_section('ns3_module_radvd')
-    ns3_module_radvd.register_types(module)
-    
-    try:
-        import ns3_module_radvd__local
-    except ImportError:
-        pass
-    else:
-        ns3_module_radvd__local.register_types(module)
-    
-    root_module.end_section('ns3_module_radvd')
     root_module.begin_section('ns3_module_mesh')
     ns3_module_mesh.register_types(module)
     
@@ -572,6 +572,17 @@
         ns3_module_common__local.register_methods(root_module)
     
     root_module.end_section('ns3_module_common')
+    root_module.begin_section('ns3_module_contrib')
+    ns3_module_contrib.register_methods(root_module)
+    
+    try:
+        import ns3_module_contrib__local
+    except ImportError:
+        pass
+    else:
+        ns3_module_contrib__local.register_methods(root_module)
+    
+    root_module.end_section('ns3_module_contrib')
     root_module.begin_section('ns3_module_node')
     ns3_module_node.register_methods(root_module)
     
@@ -583,17 +594,72 @@
         ns3_module_node__local.register_methods(root_module)
     
     root_module.end_section('ns3_module_node')
-    root_module.begin_section('ns3_module_contrib')
-    ns3_module_contrib.register_methods(root_module)
+    root_module.begin_section('ns3_module_tap_bridge')
+    ns3_module_tap_bridge.register_methods(root_module)
     
     try:
-        import ns3_module_contrib__local
+        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_v4ping')
+    ns3_module_v4ping.register_methods(root_module)
+    
+    try:
+        import ns3_module_v4ping__local
+    except ImportError:
+        pass
+    else:
+        ns3_module_v4ping__local.register_methods(root_module)
+    
+    root_module.end_section('ns3_module_v4ping')
+    root_module.begin_section('ns3_module_static_routing')
+    ns3_module_static_routing.register_methods(root_module)
+    
+    try:
+        import ns3_module_static_routing__local
     except ImportError:
         pass
     else:
-        ns3_module_contrib__local.register_methods(root_module)
+        ns3_module_static_routing__local.register_methods(root_module)
+    
+    root_module.end_section('ns3_module_static_routing')
+    root_module.begin_section('ns3_module_packet_sink')
+    ns3_module_packet_sink.register_methods(root_module)
+    
+    try:
+        import ns3_module_packet_sink__local
+    except ImportError:
+        pass
+    else:
+        ns3_module_packet_sink__local.register_methods(root_module)
+    
+    root_module.end_section('ns3_module_packet_sink')
+    root_module.begin_section('ns3_module_stats')
+    ns3_module_stats.register_methods(root_module)
     
-    root_module.end_section('ns3_module_contrib')
+    try:
+        import ns3_module_stats__local
+    except ImportError:
+        pass
+    else:
+        ns3_module_stats__local.register_methods(root_module)
+    
+    root_module.end_section('ns3_module_stats')
+    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_point_to_point')
     ns3_module_point_to_point.register_methods(root_module)
     
@@ -616,17 +682,6 @@
         ns3_module_internet_stack__local.register_methods(root_module)
     
     root_module.end_section('ns3_module_internet_stack')
-    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_csma')
     ns3_module_csma.register_methods(root_module)
     
@@ -638,6 +693,28 @@
         ns3_module_csma__local.register_methods(root_module)
     
     root_module.end_section('ns3_module_csma')
+    root_module.begin_section('ns3_module_list_routing')
+    ns3_module_list_routing.register_methods(root_module)
+    
+    try:
+        import ns3_module_list_routing__local
+    except ImportError:
+        pass
+    else:
+        ns3_module_list_routing__local.register_methods(root_module)
+    
+    root_module.end_section('ns3_module_list_routing')
+    root_module.begin_section('ns3_module_virtual_net_device')
+    ns3_module_virtual_net_device.register_methods(root_module)
+    
+    try:
+        import ns3_module_virtual_net_device__local
+    except ImportError:
+        pass
+    else:
+        ns3_module_virtual_net_device__local.register_methods(root_module)
+    
+    root_module.end_section('ns3_module_virtual_net_device')
     root_module.begin_section('ns3_module_wifi')
     ns3_module_wifi.register_methods(root_module)
     
@@ -649,83 +726,6 @@
         ns3_module_wifi__local.register_methods(root_module)
     
     root_module.end_section('ns3_module_wifi')
-    root_module.begin_section('ns3_module_static_routing')
-    ns3_module_static_routing.register_methods(root_module)
-    
-    try:
-        import ns3_module_static_routing__local
-    except ImportError:
-        pass
-    else:
-        ns3_module_static_routing__local.register_methods(root_module)
-    
-    root_module.end_section('ns3_module_static_routing')
-    root_module.begin_section('ns3_module_v4ping')
-    ns3_module_v4ping.register_methods(root_module)
-    
-    try:
-        import ns3_module_v4ping__local
-    except ImportError:
-        pass
-    else:
-        ns3_module_v4ping__local.register_methods(root_module)
-    
-    root_module.end_section('ns3_module_v4ping')
-    root_module.begin_section('ns3_module_virtual_net_device')
-    ns3_module_virtual_net_device.register_methods(root_module)
-    
-    try:
-        import ns3_module_virtual_net_device__local
-    except ImportError:
-        pass
-    else:
-        ns3_module_virtual_net_device__local.register_methods(root_module)
-    
-    root_module.end_section('ns3_module_virtual_net_device')
-    root_module.begin_section('ns3_module_packet_sink')
-    ns3_module_packet_sink.register_methods(root_module)
-    
-    try:
-        import ns3_module_packet_sink__local
-    except ImportError:
-        pass
-    else:
-        ns3_module_packet_sink__local.register_methods(root_module)
-    
-    root_module.end_section('ns3_module_packet_sink')
-    root_module.begin_section('ns3_module_global_routing')
-    ns3_module_global_routing.register_methods(root_module)
-    
-    try:
-        import ns3_module_global_routing__local
-    except ImportError:
-        pass
-    else:
-        ns3_module_global_routing__local.register_methods(root_module)
-    
-    root_module.end_section('ns3_module_global_routing')
-    root_module.begin_section('ns3_module_stats')
-    ns3_module_stats.register_methods(root_module)
-    
-    try:
-        import ns3_module_stats__local
-    except ImportError:
-        pass
-    else:
-        ns3_module_stats__local.register_methods(root_module)
-    
-    root_module.end_section('ns3_module_stats')
-    root_module.begin_section('ns3_module_list_routing')
-    ns3_module_list_routing.register_methods(root_module)
-    
-    try:
-        import ns3_module_list_routing__local
-    except ImportError:
-        pass
-    else:
-        ns3_module_list_routing__local.register_methods(root_module)
-    
-    root_module.end_section('ns3_module_list_routing')
     root_module.begin_section('ns3_module_emu')
     ns3_module_emu.register_methods(root_module)
     
@@ -748,17 +748,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)
+    root_module.begin_section('ns3_module_global_routing')
+    ns3_module_global_routing.register_methods(root_module)
     
     try:
-        import ns3_module_onoff__local
+        import ns3_module_global_routing__local
     except ImportError:
         pass
     else:
-        ns3_module_onoff__local.register_methods(root_module)
+        ns3_module_global_routing__local.register_methods(root_module)
     
-    root_module.end_section('ns3_module_onoff')
+    root_module.end_section('ns3_module_global_routing')
     root_module.begin_section('ns3_module_udp_echo')
     ns3_module_udp_echo.register_methods(root_module)
     
@@ -770,17 +770,6 @@
         ns3_module_udp_echo__local.register_methods(root_module)
     
     root_module.end_section('ns3_module_udp_echo')
-    root_module.begin_section('ns3_module_ping6')
-    ns3_module_ping6.register_methods(root_module)
-    
-    try:
-        import ns3_module_ping6__local
-    except ImportError:
-        pass
-    else:
-        ns3_module_ping6__local.register_methods(root_module)
-    
-    root_module.end_section('ns3_module_ping6')
     root_module.begin_section('ns3_module_nix_vector_routing')
     ns3_module_nix_vector_routing.register_methods(root_module)
     
@@ -814,6 +803,28 @@
         ns3_module_aodv__local.register_methods(root_module)
     
     root_module.end_section('ns3_module_aodv')
+    root_module.begin_section('ns3_module_radvd')
+    ns3_module_radvd.register_methods(root_module)
+    
+    try:
+        import ns3_module_radvd__local
+    except ImportError:
+        pass
+    else:
+        ns3_module_radvd__local.register_methods(root_module)
+    
+    root_module.end_section('ns3_module_radvd')
+    root_module.begin_section('ns3_module_ping6')
+    ns3_module_ping6.register_methods(root_module)
+    
+    try:
+        import ns3_module_ping6__local
+    except ImportError:
+        pass
+    else:
+        ns3_module_ping6__local.register_methods(root_module)
+    
+    root_module.end_section('ns3_module_ping6')
     root_module.begin_section('ns3_module_flow_monitor')
     ns3_module_flow_monitor.register_methods(root_module)
     
@@ -825,17 +836,6 @@
         ns3_module_flow_monitor__local.register_methods(root_module)
     
     root_module.end_section('ns3_module_flow_monitor')
-    root_module.begin_section('ns3_module_radvd')
-    ns3_module_radvd.register_methods(root_module)
-    
-    try:
-        import ns3_module_radvd__local
-    except ImportError:
-        pass
-    else:
-        ns3_module_radvd__local.register_methods(root_module)
-    
-    root_module.end_section('ns3_module_radvd')
     root_module.begin_section('ns3_module_mesh')
     ns3_module_mesh.register_methods(root_module)
     
@@ -1073,6 +1073,17 @@
         ns3_module_common__local.register_functions(root_module)
     
     root_module.end_section('ns3_module_common')
+    root_module.begin_section('ns3_module_contrib')
+    ns3_module_contrib.register_functions(root_module)
+    
+    try:
+        import ns3_module_contrib__local
+    except ImportError:
+        pass
+    else:
+        ns3_module_contrib__local.register_functions(root_module)
+    
+    root_module.end_section('ns3_module_contrib')
     root_module.begin_section('ns3_module_node')
     ns3_module_node.register_functions(root_module)
     
@@ -1084,17 +1095,72 @@
         ns3_module_node__local.register_functions(root_module)
     
     root_module.end_section('ns3_module_node')
-    root_module.begin_section('ns3_module_contrib')
-    ns3_module_contrib.register_functions(root_module)
+    root_module.begin_section('ns3_module_tap_bridge')
+    ns3_module_tap_bridge.register_functions(root_module)
     
     try:
-        import ns3_module_contrib__local
+        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_v4ping')
+    ns3_module_v4ping.register_functions(root_module)
+    
+    try:
+        import ns3_module_v4ping__local
+    except ImportError:
+        pass
+    else:
+        ns3_module_v4ping__local.register_functions(root_module)
+    
+    root_module.end_section('ns3_module_v4ping')
+    root_module.begin_section('ns3_module_static_routing')
+    ns3_module_static_routing.register_functions(root_module)
+    
+    try:
+        import ns3_module_static_routing__local
     except ImportError:
         pass
     else:
-        ns3_module_contrib__local.register_functions(root_module)
+        ns3_module_static_routing__local.register_functions(root_module)
+    
+    root_module.end_section('ns3_module_static_routing')
+    root_module.begin_section('ns3_module_packet_sink')
+    ns3_module_packet_sink.register_functions(root_module)
+    
+    try:
+        import ns3_module_packet_sink__local
+    except ImportError:
+        pass
+    else:
+        ns3_module_packet_sink__local.register_functions(root_module)
+    
+    root_module.end_section('ns3_module_packet_sink')
+    root_module.begin_section('ns3_module_stats')
+    ns3_module_stats.register_functions(root_module)
     
-    root_module.end_section('ns3_module_contrib')
+    try:
+        import ns3_module_stats__local
+    except ImportError:
+        pass
+    else:
+        ns3_module_stats__local.register_functions(root_module)
+    
+    root_module.end_section('ns3_module_stats')
+    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_point_to_point')
     ns3_module_point_to_point.register_functions(root_module)
     
@@ -1117,17 +1183,6 @@
         ns3_module_internet_stack__local.register_functions(root_module)
     
     root_module.end_section('ns3_module_internet_stack')
-    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_csma')
     ns3_module_csma.register_functions(root_module)
     
@@ -1139,6 +1194,28 @@
         ns3_module_csma__local.register_functions(root_module)
     
     root_module.end_section('ns3_module_csma')
+    root_module.begin_section('ns3_module_list_routing')
+    ns3_module_list_routing.register_functions(root_module)
+    
+    try:
+        import ns3_module_list_routing__local
+    except ImportError:
+        pass
+    else:
+        ns3_module_list_routing__local.register_functions(root_module)
+    
+    root_module.end_section('ns3_module_list_routing')
+    root_module.begin_section('ns3_module_virtual_net_device')
+    ns3_module_virtual_net_device.register_functions(root_module)
+    
+    try:
+        import ns3_module_virtual_net_device__local
+    except ImportError:
+        pass
+    else:
+        ns3_module_virtual_net_device__local.register_functions(root_module)
+    
+    root_module.end_section('ns3_module_virtual_net_device')
     root_module.begin_section('ns3_module_wifi')
     ns3_module_wifi.register_functions(root_module)
     
@@ -1150,83 +1227,6 @@
         ns3_module_wifi__local.register_functions(root_module)
     
     root_module.end_section('ns3_module_wifi')
-    root_module.begin_section('ns3_module_static_routing')
-    ns3_module_static_routing.register_functions(root_module)
-    
-    try:
-        import ns3_module_static_routing__local
-    except ImportError:
-        pass
-    else:
-        ns3_module_static_routing__local.register_functions(root_module)
-    
-    root_module.end_section('ns3_module_static_routing')
-    root_module.begin_section('ns3_module_v4ping')
-    ns3_module_v4ping.register_functions(root_module)
-    
-    try:
-        import ns3_module_v4ping__local
-    except ImportError:
-        pass
-    else:
-        ns3_module_v4ping__local.register_functions(root_module)
-    
-    root_module.end_section('ns3_module_v4ping')
-    root_module.begin_section('ns3_module_virtual_net_device')
-    ns3_module_virtual_net_device.register_functions(root_module)
-    
-    try:
-        import ns3_module_virtual_net_device__local
-    except ImportError:
-        pass
-    else:
-        ns3_module_virtual_net_device__local.register_functions(root_module)
-    
-    root_module.end_section('ns3_module_virtual_net_device')
-    root_module.begin_section('ns3_module_packet_sink')
-    ns3_module_packet_sink.register_functions(root_module)
-    
-    try:
-        import ns3_module_packet_sink__local
-    except ImportError:
-        pass
-    else:
-        ns3_module_packet_sink__local.register_functions(root_module)
-    
-    root_module.end_section('ns3_module_packet_sink')
-    root_module.begin_section('ns3_module_global_routing')
-    ns3_module_global_routing.register_functions(root_module)
-    
-    try:
-        import ns3_module_global_routing__local
-    except ImportError:
-        pass
-    else:
-        ns3_module_global_routing__local.register_functions(root_module)
-    
-    root_module.end_section('ns3_module_global_routing')
-    root_module.begin_section('ns3_module_stats')
-    ns3_module_stats.register_functions(root_module)
-    
-    try:
-        import ns3_module_stats__local
-    except ImportError:
-        pass
-    else:
-        ns3_module_stats__local.register_functions(root_module)
-    
-    root_module.end_section('ns3_module_stats')
-    root_module.begin_section('ns3_module_list_routing')
-    ns3_module_list_routing.register_functions(root_module)
-    
-    try:
-        import ns3_module_list_routing__local
-    except ImportError:
-        pass
-    else:
-        ns3_module_list_routing__local.register_functions(root_module)
-    
-    root_module.end_section('ns3_module_list_routing')
     root_module.begin_section('ns3_module_emu')
     ns3_module_emu.register_functions(root_module)
     
@@ -1249,17 +1249,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)
+    root_module.begin_section('ns3_module_global_routing')
+    ns3_module_global_routing.register_functions(root_module)
     
     try:
-        import ns3_module_onoff__local
+        import ns3_module_global_routing__local
     except ImportError:
         pass
     else:
-        ns3_module_onoff__local.register_functions(root_module)
+        ns3_module_global_routing__local.register_functions(root_module)
     
-    root_module.end_section('ns3_module_onoff')
+    root_module.end_section('ns3_module_global_routing')
     root_module.begin_section('ns3_module_udp_echo')
     ns3_module_udp_echo.register_functions(root_module)
     
@@ -1271,17 +1271,6 @@
         ns3_module_udp_echo__local.register_functions(root_module)
     
     root_module.end_section('ns3_module_udp_echo')
-    root_module.begin_section('ns3_module_ping6')
-    ns3_module_ping6.register_functions(root_module)
-    
-    try:
-        import ns3_module_ping6__local
-    except ImportError:
-        pass
-    else:
-        ns3_module_ping6__local.register_functions(root_module)
-    
-    root_module.end_section('ns3_module_ping6')
     root_module.begin_section('ns3_module_nix_vector_routing')
     ns3_module_nix_vector_routing.register_functions(root_module)
     
@@ -1315,6 +1304,28 @@
         ns3_module_aodv__local.register_functions(root_module)
     
     root_module.end_section('ns3_module_aodv')
+    root_module.begin_section('ns3_module_radvd')
+    ns3_module_radvd.register_functions(root_module)
+    
+    try:
+        import ns3_module_radvd__local
+    except ImportError:
+        pass
+    else:
+        ns3_module_radvd__local.register_functions(root_module)
+    
+    root_module.end_section('ns3_module_radvd')
+    root_module.begin_section('ns3_module_ping6')
+    ns3_module_ping6.register_functions(root_module)
+    
+    try:
+        import ns3_module_ping6__local
+    except ImportError:
+        pass
+    else:
+        ns3_module_ping6__local.register_functions(root_module)
+    
+    root_module.end_section('ns3_module_ping6')
     root_module.begin_section('ns3_module_flow_monitor')
     ns3_module_flow_monitor.register_functions(root_module)
     
@@ -1326,17 +1337,6 @@
         ns3_module_flow_monitor__local.register_functions(root_module)
     
     root_module.end_section('ns3_module_flow_monitor')
-    root_module.begin_section('ns3_module_radvd')
-    ns3_module_radvd.register_functions(root_module)
-    
-    try:
-        import ns3_module_radvd__local
-    except ImportError:
-        pass
-    else:
-        ns3_module_radvd__local.register_functions(root_module)
-    
-    root_module.end_section('ns3_module_radvd')
     root_module.begin_section('ns3_module_mesh')
     ns3_module_mesh.register_functions(root_module)
     
--- a/src/core/object.cc	Fri Nov 20 13:06:15 2009 +0300
+++ b/src/core/object.cc	Fri Nov 20 13:06:46 2009 +0300
@@ -163,24 +163,49 @@
 void
 Object::Start (void)
 {
+  /**
+   * Note: the code here is a bit tricky because we need to protect ourselves from
+   * modifications in the aggregate array while DoStart is called. The user's
+   * implementation of the DoStart method could call GetObject (which could
+   * reorder the array) and it could call AggregateObject which would add an 
+   * object at the end of the array. To be safe, we restart iteration over the 
+   * array whenever we call some user code, just in case.
+   */
+ restart:
   uint32_t n = m_aggregates->n;
   for (uint32_t i = 0; i < n; i++)
     {
       Object *current = m_aggregates->buffer[i];
-      current->DoStart ();
-      current->m_started = true;
+      if (!current->m_started)
+        {
+          current->DoStart ();
+          current->m_started = true;
+          goto restart;
+        }
     }
 }
 void 
 Object::Dispose (void)
 {
+  /**
+   * Note: the code here is a bit tricky because we need to protect ourselves from
+   * modifications in the aggregate array while DoDispose is called. The user's
+   * DoDispose implementation could call GetObject (which could reorder the array) 
+   * and it could call AggregateObject which would add an object at the end of the array.
+   * So, to be safe, we restart the iteration over the array whenever we call some
+   * user code.
+   */
+ restart:
   uint32_t n = m_aggregates->n;
   for (uint32_t i = 0; i < n; i++)
     {
       Object *current = m_aggregates->buffer[i];
-      NS_ASSERT (!current->m_disposed);
-      current->DoDispose ();
-      current->m_disposed = true;
+      if (!current->m_disposed)
+        {
+          current->DoDispose ();
+          current->m_disposed = true;
+          goto restart;
+        }
     }
 }
 void
@@ -216,21 +241,25 @@
   struct Aggregates *aggregates = 
     (struct Aggregates *)malloc (sizeof(struct Aggregates)+(total-1)*sizeof(Object*));
   aggregates->n = total;
+
+  // copy our buffer to the new buffer
   memcpy (&aggregates->buffer[0], 
           &m_aggregates->buffer[0], 
           m_aggregates->n*sizeof(Object*));
-  // append the other aggregates in the new buffer
+
+  // append the other buffer into the new buffer too
   for (uint32_t i = 0; i < other->m_aggregates->n; i++)
     {
       aggregates->buffer[m_aggregates->n+i] = other->m_aggregates->buffer[i];
       UpdateSortedArray (aggregates, m_aggregates->n + i);
     }
 
-  // free both aggregate buffers
-  free (m_aggregates);
-  free (other->m_aggregates);
+  // keep track of the old aggregate buffers for the iteration
+  // of NotifyNewAggregates
+  struct Aggregates *a = m_aggregates;
+  struct Aggregates *b = other->m_aggregates;
 
-  // Then, assign that buffer to every object
+  // Then, assign the new aggregation buffer to every object
   uint32_t n = aggregates->n;
   for (uint32_t i = 0; i < n; i++)
     {
@@ -241,12 +270,25 @@
   // share the counts
   ShareCount (other);
 
-  // Finally, call NotifyNewAggregate in the listed chain
-  for (uint32_t i = 0; i < n; i++)
+  // Finally, call NotifyNewAggregate on all the objects aggregates together.
+  // We purposedly use the old aggregate buffers to iterate over the objects
+  // because this allows us to assume that they will not change from under 
+  // our feet, even if our users call AggregateObject from within their
+  // NotifyNewAggregate method.
+  for (uint32_t i = 0; i < a->n; i++)
     {
-      Object *current = m_aggregates->buffer[i];
+      Object *current = a->buffer[i];
       current->NotifyNewAggregate ();
     }
+  for (uint32_t i = 0; i < b->n; i++)
+    {
+      Object *current = b->buffer[i];
+      current->NotifyNewAggregate ();
+    }
+
+  // Now that we are done with them, we can free our old aggregate buffers
+  free (a);
+  free (b);
 }
 /**
  * This function must be implemented in the stack that needs to notify
--- a/src/core/object.h	Fri Nov 20 13:06:15 2009 +0300
+++ b/src/core/object.h	Fri Nov 20 13:06:46 2009 +0300
@@ -127,6 +127,12 @@
    * This method aggregates the two objects together: after this
    * method returns, it becomes possible to call GetObject
    * on one to get the other, and vice-versa. 
+   *
+   * This method calls the virtual method NotifyNewAggregates to
+   * notify all aggregated objects that they have been aggregated
+   * together.
+   *
+   * \sa NotifyNewAggregate
    */
   void AggregateObject (Ptr<Object> other);
 
@@ -141,26 +147,32 @@
   AggregateIterator GetAggregateIterator (void) const;
 
   /**
-   * Execute starting code of an object. What this method does is really up
-   * to the user.
+   * This method calls the virtual DoStart method on all the objects
+   * aggregated to this object. DoStart will be called only once over
+   * the lifetime of an object, just like DoDispose is called only
+   * once.
+   *
+   * \sa DoStart
    */
   void Start (void);
 
 protected:
  /**
-  * This function is called by the AggregateObject on all the objects connected in the listed chain.
-  * This way the new object aggregated will be used if needed by the NotifyNewAggregate corresponding
-  * to each object connected in the listed chain. It should be implemented by objects needing an
-  * additional/special behavior when aggregated to another object.
+  * This method is invoked whenever two sets of objects are aggregated together.
+  * It is invoked exactly once for each object in both sets.
+  * This method can be overriden by subclasses who wish to be notified of aggregation
+  * events. These subclasses must chain up to their base class NotifyNewAggregate method.
+  * It is safe to call GetObject and AggregateObject from within this method.
   */
-  virtual void NotifyNewAggregate ();
+  virtual void NotifyNewAggregate (void);
   /**
    * This method is called only once by Object::Start. If the user
    * calls Object::Start multiple times, DoStart is called only the
    * first time.
    *
    * Subclasses are expected to override this method and _chain up_
-   * to their parent's implementation once they are done.
+   * to their parent's implementation once they are done. It is
+   * safe to call GetObject and AggregateObject from within this method.
    */
   virtual void DoStart (void);
   /**
@@ -173,6 +185,8 @@
    * i.e., for simplicity, the destructor of every subclass should
    * be empty and its content should be moved to the associated
    * DoDispose method.
+   *
+   * It is safe to call GetObject from within this method.
    */
   virtual void DoDispose (void);
   /**
--- a/src/internet-stack/ipv4-l3-protocol.cc	Fri Nov 20 13:06:15 2009 +0300
+++ b/src/internet-stack/ipv4-l3-protocol.cc	Fri Nov 20 13:06:46 2009 +0300
@@ -355,6 +355,70 @@
   return -1;
 }
 
+bool
+Ipv4L3Protocol::IsDestinationAddress (Ipv4Address address, uint32_t iif) const
+{
+  NS_LOG_FUNCTION (this << address << " " << iif);
+
+  // First check the incoming interface for a unicast address match
+  for (uint32_t i = 0; i < GetNAddresses (iif); i++)
+    {
+      Ipv4InterfaceAddress iaddr = GetAddress (iif, i);
+      if (address == iaddr.GetLocal ())
+        {
+          NS_LOG_LOGIC ("For me (destination " << address << " match)");
+          return true;
+        }
+      if (address == iaddr.GetBroadcast ())
+        {
+          NS_LOG_LOGIC ("For me (interface broadcast address)");
+          return true;
+        }
+    }
+
+  if (address.IsMulticast ())
+    {
+#ifdef NOTYET
+      if (MulticastCheckGroup (iif, address ))
+#endif
+      if (true)
+        {
+          NS_LOG_LOGIC ("For me (Ipv4Addr multicast address");
+          return true;
+        }
+    }
+
+  if (address.IsBroadcast ())
+    {
+      NS_LOG_LOGIC ("For me (Ipv4Addr broadcast address)");
+      return true;
+    }
+
+  if (GetWeakEsModel ())  // Check other interfaces
+    { 
+      for (uint32_t j = 0; j < GetNInterfaces (); j++)
+        {
+          if (j == uint32_t (iif)) continue;
+          for (uint32_t i = 0; i < GetNAddresses (j); i++)
+            {
+              Ipv4InterfaceAddress iaddr = GetAddress (j, i);
+              if (address == iaddr.GetLocal ())
+                {
+                  NS_LOG_LOGIC ("For me (destination " << address << " match) on another interface");
+                  return true;
+                }
+              //  This is a small corner case:  match another interface's broadcast address
+              if (address == iaddr.GetBroadcast ())
+                {
+                  NS_LOG_LOGIC ("For me (interface broadcast address on another interface)");
+                  return true;
+                }
+            }
+        }
+    }
+  return false;
+}
+
 void 
 Ipv4L3Protocol::Receive( Ptr<NetDevice> device, Ptr<const Packet> p, uint16_t protocol, const Address &from,
                          const Address &to, NetDevice::PacketType packetType)
@@ -901,6 +965,18 @@
   return m_ipForward;
 }
 
+void 
+Ipv4L3Protocol::SetWeakEsModel (bool model)
+{
+  m_weakEsModel = model;
+}
+
+bool 
+Ipv4L3Protocol::GetWeakEsModel (void) const
+{
+  return m_weakEsModel;
+}
+
 void
 Ipv4L3Protocol::RouteInputError (Ptr<const Packet> p, const Ipv4Header & ipHeader, Socket::SocketErrno sockErrno)
 {
--- a/src/internet-stack/ipv4-l3-protocol.h	Fri Nov 20 13:06:15 2009 +0300
+++ b/src/internet-stack/ipv4-l3-protocol.h	Fri Nov 20 13:06:46 2009 +0300
@@ -170,6 +170,7 @@
   int32_t GetInterfaceForAddress (Ipv4Address addr) const;
   int32_t GetInterfaceForPrefix (Ipv4Address addr, Ipv4Mask mask) const;
   int32_t GetInterfaceForDevice (Ptr<const NetDevice> device) const;
+  bool IsDestinationAddress (Ipv4Address address, uint32_t iif) const;
 
   bool AddAddress (uint32_t i, Ipv4InterfaceAddress address);
   Ipv4InterfaceAddress GetAddress (uint32_t interfaceIndex, uint32_t addressIndex) const;
@@ -200,8 +201,11 @@
   Ipv4L3Protocol(const Ipv4L3Protocol &);
   Ipv4L3Protocol &operator = (const Ipv4L3Protocol &);
 
+  // class Ipv4 attributes
   virtual void SetIpForward (bool forward);
   virtual bool GetIpForward (void) const;
+  virtual void SetWeakEsModel (bool model);
+  virtual bool GetWeakEsModel (void) const;
 
   Ipv4Header BuildHeader (
             Ipv4Address source,
@@ -239,6 +243,7 @@
   typedef std::list<Ptr<Ipv4L4Protocol> > L4List_t;
 
   bool m_ipForward;
+  bool m_weakEsModel;
   L4List_t m_protocols;
   Ipv4InterfaceList m_interfaces;
   uint8_t m_defaultTtl;
--- a/src/node/ipv4.cc	Fri Nov 20 13:06:15 2009 +0300
+++ b/src/node/ipv4.cc	Fri Nov 20 13:06:46 2009 +0300
@@ -37,6 +37,12 @@
                    MakeBooleanAccessor (&Ipv4::SetIpForward,
                                         &Ipv4::GetIpForward),
                    MakeBooleanChecker ())
+    .AddAttribute ("WeakEsModel", 
+                   "RFC1122 term for whether host accepts datagram with a dest. address on another interface",
+                   BooleanValue (true),
+                   MakeBooleanAccessor (&Ipv4::SetWeakEsModel,
+                                        &Ipv4::GetWeakEsModel),
+                   MakeBooleanChecker ())
 #if 0
     .AddAttribute ("MtuDiscover", "If enabled, every outgoing ip packet will have the DF flag set.",
                    BooleanValue (false),
--- a/src/node/ipv4.h	Fri Nov 20 13:06:15 2009 +0300
+++ b/src/node/ipv4.h	Fri Nov 20 13:06:46 2009 +0300
@@ -123,11 +123,33 @@
    * This method searches the list of interfaces for one that holds a
    * particular address.  This call takes an IP address as a parameter and
    * returns the interface number of the first interface that has been assigned
-   * that address, or -1 if not found.  There must be an exact match.
+   * that address, or -1 if not found.  There must be an exact match; this
+   * method will not match broadcast or multicast addresses.
    */
   virtual int32_t GetInterfaceForAddress (Ipv4Address address) const = 0;
 
   /**
+   * \brief Determine whether address and interface corresponding to
+   *        received packet can be accepted for local delivery
+   *
+   * \param address The IP address being considered
+   * \param iif The incoming Ipv4 interface index
+   *
+   * This method can be used to determine whether a received packet has
+   * an acceptable address for local delivery on the host.  The address
+   * may be a unicast, multicast, or broadcast address.  This method will
+   * return true if address is an exact match of a unicast address on
+   * one of the host's interfaces (see below), if address corresponds to 
+   * a multicast group that the host has joined (and the incoming device
+   * is acceptable), or if address corresponds to a broadcast address.
+   *
+   * If the Ipv4 attribute WeakEsModel is true, the unicast address may
+   * match any of the Ipv4 addresses on any interface.  If the attribute is
+   * false, the address must match one assigned to the incoming device.
+   */
+  virtual bool IsDestinationAddress (Ipv4Address address, uint32_t iif) const = 0;
+
+  /**
    * \brief Return the interface number of first interface found that 
    *  has an Ipv4 address within the prefix specified by the input
    *  address and mask parameters
@@ -257,6 +279,8 @@
   // Indirect the Ipv4 attributes through private pure virtual methods
   virtual void SetIpForward (bool forward) = 0;
   virtual bool GetIpForward (void) const = 0;
+  virtual void SetWeakEsModel (bool model) = 0;
+  virtual bool GetWeakEsModel (void) const = 0;
 };
 
 } // namespace ns3 
--- a/src/routing/list-routing/ipv4-list-routing.cc	Fri Nov 20 13:06:15 2009 +0300
+++ b/src/routing/list-routing/ipv4-list-routing.cc	Fri Nov 20 13:06:46 2009 +0300
@@ -121,75 +121,21 @@
   NS_ASSERT (m_ipv4->GetInterfaceForDevice (idev) >= 0);
   uint32_t iif = m_ipv4->GetInterfaceForDevice (idev); 
 
-  // Multicast recognition; handle local delivery here
-  //
-  if (header.GetDestination().IsMulticast ())
-    {
-#ifdef NOTYET
-      if (m_ipv4->MulticastCheckGroup (iif, header.GetDestination ()))
-#endif
-      if (true)
-        {
-          NS_LOG_LOGIC ("Multicast packet for me-- local deliver");
-          Ptr<Packet> packetCopy = p->Copy();
-          // Here may want to disable lcb callback in recursive RouteInput
-          // call below
-          lcb (packetCopy, header, iif);
-          // Fall through-- we may also need to forward this
-          retVal = true;
-        }
-      for (Ipv4RoutingProtocolList::const_iterator rprotoIter =
-         m_routingProtocols.begin (); rprotoIter != m_routingProtocols.end ();
-           rprotoIter++)
-        {
-          NS_LOG_LOGIC ("Multicast packet for me-- trying to forward");
-          if ((*rprotoIter).second->RouteInput (p, header, idev, ucb, mcb, lcb, ecb))
-            {
-              retVal = true;
-            }
-        }
-      return retVal;
-    }
-
-  if (header.GetDestination ().IsBroadcast ())
+  retVal = m_ipv4->IsDestinationAddress (header.GetDestination (), iif);
+  if (retVal == true)
     {
-      NS_LOG_LOGIC ("For me (Ipv4Addr broadcast address)");
-      // TODO:  Local Deliver for broadcast
-      // TODO:  Forward broadcast
-    }
-
- // TODO:  Configurable option to enable RFC 1222 Strong End System Model
- // Right now, we will be permissive and allow a source to send us
- // a packet to one of our other interface addresses; that is, the
- // destination unicast address does not match one of the iif addresses,
- // but we check our other interfaces.  This could be an option
- // (to remove the outer loop immediately below and just check iif).
-  for (uint32_t j = 0; j < m_ipv4->GetNInterfaces (); j++)
-    {
-      for (uint32_t i = 0; i < m_ipv4->GetNAddresses (j); i++)
+      NS_LOG_LOGIC ("Address "<< header.GetDestination () << " is a match for local delivery");
+      if (header.GetDestination ().IsMulticast ())
         {
-          Ipv4InterfaceAddress iaddr = m_ipv4->GetAddress (j, i);
-          Ipv4Address addr = iaddr.GetLocal ();
-          if (addr.IsEqual (header.GetDestination ()))
-            {
-              if (j == iif)
-                {
-                  NS_LOG_LOGIC ("For me (destination " << addr << " match)");
-                }
-              else
-                {
-                  NS_LOG_LOGIC ("For me (destination " << addr << " match) on another interface " << header.GetDestination ());
-                }
-              lcb (p, header, iif);
-              return true;
-            }
-          if (header.GetDestination ().IsEqual (iaddr.GetBroadcast ()))
-            {
-              NS_LOG_LOGIC ("For me (interface broadcast address)");
-              lcb (p, header, iif);
-              return true;
-            }
-          NS_LOG_LOGIC ("Address "<< addr << " not a match");
+          Ptr<Packet> packetCopy = p->Copy();
+          lcb (packetCopy, header, iif);
+          retVal = true;
+          // Fall through
+        }
+      else
+        {
+          lcb (p, header, iif);
+          return true;
         }
     }
   // Check if input device supports IP forwarding
@@ -200,13 +146,21 @@
       return false;
     }
   // Next, try to find a route
+  // If we have already delivered a packet locally (e.g. multicast)
+  // we suppress further downstream local delivery by nulling the callback
+  LocalDeliverCallback downstreamLcb = lcb;
+  if (retVal == true)
+    {
+      downstreamLcb = MakeNullCallback<void, Ptr<const Packet>, const Ipv4Header &, uint32_t > ();
+    }
   for (Ipv4RoutingProtocolList::const_iterator rprotoIter =
          m_routingProtocols.begin ();
        rprotoIter != m_routingProtocols.end ();
        rprotoIter++)
     {
-      if ((*rprotoIter).second->RouteInput (p, header, idev, ucb, mcb, lcb, ecb))
+      if ((*rprotoIter).second->RouteInput (p, header, idev, ucb, mcb, downstreamLcb, ecb))
         {
+          NS_LOG_LOGIC ("Route found to forward packet in protocol " << (*rprotoIter).second->GetInstanceTypeId ().GetName ()); 
           return true;
         }
     }
--- a/src/routing/olsr/olsr-routing-protocol.cc	Fri Nov 20 13:06:15 2009 +0300
+++ b/src/routing/olsr/olsr-routing-protocol.cc	Fri Nov 20 13:06:46 2009 +0300
@@ -219,7 +219,7 @@
 {
   m_ipv4 = 0;
 
-  for (std::map< Ptr<Socket>, Ipv4Address >::iterator iter = m_socketAddresses.begin ();
+  for (std::map< Ptr<Socket>, Ipv4InterfaceAddress >::iterator iter = m_socketAddresses.begin ();
        iter != m_socketAddresses.end (); iter++)
     {
       iter->first->Close ();
@@ -278,7 +278,7 @@
           NS_FATAL_ERROR ("Failed to bind() OLSR receive socket");
         }
       socket->Connect (InetSocketAddress (Ipv4Address (0xffffffff), OLSR_PORT_NUMBER));
-      m_socketAddresses[socket] = addr;
+      m_socketAddresses[socket] = m_ipv4->GetAddress (i, 0);
     }
 
   HelloTimerExpire ();
@@ -305,7 +305,7 @@
 
   InetSocketAddress inetSourceAddr = InetSocketAddress::ConvertFrom (sourceAddress);
   Ipv4Address senderIfaceAddr = inetSourceAddr.GetIpv4 ();
-  Ipv4Address receiverIfaceAddr = m_socketAddresses[socket];
+  Ipv4Address receiverIfaceAddr = m_socketAddresses[socket].GetLocal ();
   NS_ASSERT (receiverIfaceAddr != Ipv4Address ());
   NS_LOG_DEBUG ("OLSR node " << m_mainAddress << " received a OLSR packet from "
                 << senderIfaceAddr << " to " << receiverIfaceAddr);
@@ -2653,11 +2653,32 @@
 }
 
 bool RoutingProtocol::RouteInput  (Ptr<const Packet> p, 
-  const Ipv4Header &header, Ptr<const NetDevice> idev,                            UnicastForwardCallback ucb, MulticastForwardCallback mcb,             
+  const Ipv4Header &header, Ptr<const NetDevice> idev,                            
+  UnicastForwardCallback ucb, MulticastForwardCallback mcb,             
   LocalDeliverCallback lcb, ErrorCallback ecb)
 {   
   NS_LOG_FUNCTION (this << " " << m_ipv4->GetObject<Node> ()->GetId() << " " << header.GetDestination ());
   
+  Ipv4Address dst = header.GetDestination ();
+  Ipv4Address origin = header.GetSource ();
+
+  // Consume self-originated packets
+  if (IsMyOwnAddress (origin) == true)
+    {
+      return true; 
+    }
+  
+  // Local delivery
+  NS_ASSERT (m_ipv4->GetInterfaceForDevice (idev) >= 0);
+  uint32_t iif = m_ipv4->GetInterfaceForDevice (idev);
+  if (m_ipv4->IsDestinationAddress (dst, iif))
+    {
+        NS_LOG_LOGIC ("Local delivery to " << dst);
+        lcb (p, header, iif);
+        return true;
+    }
+  
+  // Forwarding
   Ptr<Ipv4Route> rtentry;
   RoutingTableEntry entry1, entry2; 
   if (Lookup (header.GetDestination (), entry1))
@@ -2920,6 +2941,21 @@
   AddTestCase (new OlsrMprTestCase ());
 }
 
+bool
+RoutingProtocol::IsMyOwnAddress (const Ipv4Address & a) const
+{
+  for (std::map<Ptr<Socket> , Ipv4InterfaceAddress>::const_iterator j =
+      m_socketAddresses.begin (); j != m_socketAddresses.end (); ++j)
+    {
+      Ipv4InterfaceAddress iface = j->second;
+      if (a == iface.GetLocal ())
+        {
+          return true;
+        }
+    }
+  return false;
+}
+
 
 }} // namespace olsr, ns3
 
--- a/src/routing/olsr/olsr-routing-protocol.h	Fri Nov 20 13:06:15 2009 +0300
+++ b/src/routing/olsr/olsr-routing-protocol.h	Fri Nov 20 13:06:46 2009 +0300
@@ -229,13 +229,15 @@
                                const olsr::MessageHeader::Hello &hello);
 
   int Degree (NeighborTuple const &tuple);
+  /// Check that address is one of my interfaces
+  bool IsMyOwnAddress (const Ipv4Address & a) const;
 
   Ipv4Address m_mainAddress;
 
   // One socket per interface, each bound to that interface's address
   // (reason: for OLSR Link Sensing we need to know on which interface
   // HELLO messages arrive)
-  std::map< Ptr<Socket>, Ipv4Address > m_socketAddresses;
+  std::map< Ptr<Socket>, Ipv4InterfaceAddress > m_socketAddresses;
 
   TracedCallback <const PacketHeader &,
                   const MessageList &> m_rxPacketTrace;