merge
authorGustavo J. A. M. Carneiro <gjc@inescporto.pt>
Sat May 30 17:37:38 2009 +0100 (9 months ago)
changeset 4554df8bf70eb486
parent 4553 3048bd67e5cf
parent 4479 ba809221f9b3
child 4555 e8a12e172432
merge
examples/wscript
src/helper/static-multicast-route-helper.cc
src/helper/static-multicast-route-helper.h
src/internet-stack/arp-ipv4-interface.cc
src/internet-stack/arp-ipv4-interface.h
src/internet-stack/internet-stack.cc
src/internet-stack/internet-stack.h
src/internet-stack/ipv4-loopback-interface.cc
src/internet-stack/ipv4-loopback-interface.h
src/internet-stack/ipv4-static-routing.cc
src/internet-stack/ipv4-static-routing.h
src/wscript
     1.1 --- a/CHANGES.html	Sat May 30 17:36:50 2009 +0100
     1.2 +++ b/CHANGES.html	Sat May 30 17:37:38 2009 +0100
     1.3 @@ -52,11 +52,94 @@
     1.4  
     1.5  <h2>New API:</h2>
     1.6  <ul>
     1.7 +<li> <b>attributes for class Ipv4</b>
     1.8 +<p> class Ipv4 now contains attributes in ipv4.cc; the first one
     1.9 +is called "IpForward" that will enable/disable Ipv4 forwarding.  
    1.10 +</li>
    1.11  </ul>
    1.12  
    1.13  <h2>Changes to existing API:</h2>
    1.14  <ul>
    1.15  
    1.16 +<li><b> Routing decoupled from class Ipv4</b>
    1.17 +<p> All calls of the form "Ipv4::AddHostRouteTo ()" etc. (i.e. to 
    1.18 +add static routes, both unicast and multicast) have been moved to a new 
    1.19 +class Ipv4StaticRouting.  In addition, class Ipv4 now holds only
    1.20 +one possible routing protocol; the previous way to add routing protocols
    1.21 +(by ordered list of priority) has been moved to a new class Ipv4ListRouting.
    1.22 +Class Ipv4 has a new minimal routing API (just to set and get the routing
    1.23 +protocol):
    1.24 +<pre>
    1.25 +-  virtual void AddRoutingProtocol (Ptr&lt;Ipv4RoutingProtocol&gt; routingProtocol, int16_t priority) = 0;
    1.26 ++  virtual void SetRoutingProtocol (Ptr&lt;Ipv4RoutingProtocol&gt; routingProtocol) = 0;
    1.27 ++  virtual Ptr&lt;Ipv4RoutingProtocol&gt; GetRoutingProtocol (void) const = 0;
    1.28 +</pre>
    1.29 +</li>
    1.30 +
    1.31 +<li><b> class Ipv4RoutingProtocol is refactored</b>
    1.32 +<p> The abstract base class Ipv4RoutingProtocol has been refactored to
    1.33 +align with corresponding Linux Ipv4 routing architecture, and has been
    1.34 +moved from ipv4.h to a new file ipv4-routing-protocol.h.  The new
    1.35 +methods (RouteOutput () and RouteInput ()) are aligned with Linux 
    1.36 +ip_route_output() and ip_route_input().  However,
    1.37 +the general nature of these calls (synchronous routing lookup for
    1.38 +locally originated packets, and an asynchronous, callback-based lookup
    1.39 +for forwarded packets) is still the same.
    1.40 +<pre>
    1.41 +-  typedef Callback&lt;void, bool, const Ipv4Route&, Ptr&lt;Packet&gt;, const Ipv4Header&&gt; RouteReplyCallback;
    1.42 ++  typedef Callback&lt;void, Ptr&lt;Ipv4Route&gt;, Ptr&lt;const Packet&gt;, const Ipv4Header &&gt; UnicastForwardCallback;
    1.43 ++  typedef Callback&lt;void, Ptr&lt;Ipv4MulticastRoute&gt;, Ptr&lt;const Packet&gt;, const Ipv4Header &&gt; MulticastForwardCallback;
    1.44 ++  typedef Callback&lt;void, Ptr&lt;const Packet&gt;, const Ipv4Header &, uint32_t &gt; LocalDeliverCallback;
    1.45 ++  typedef Callback&lt;void, Ptr&lt;const Packet&gt;, const Ipv4Header &&gt; ErrorCallback;
    1.46 +-  virtual bool RequestInterface (Ipv4Address destination, uint32_t& interface) = 0;
    1.47 ++  virtual Ptr&lt;Ipv4Route&gt; RouteOutput (const Ipv4Header &header, uint32_t oif, Socket::SocketErrno &errno) = 0;
    1.48 +-  virtual bool RequestRoute (uint32_t interface,
    1.49 +-                            const Ipv4Header &ipHeader,
    1.50 +-                            Ptr&lt;Packet&gt; packet,
    1.51 +-                            RouteReplyCallback routeReply) = 0;
    1.52 ++  virtual bool RouteInput  (Ptr&lt;const Packet&gt; p, const Ipv4Header &header, Ptr&lt;const NetDevice&gt; idev,
    1.53 ++                             UnicastForwardCallback ucb, MulticastForwardCallback mcb,
    1.54 ++                             LocalDeliverCallback lcb, ErrorCallback ecb) = 0;
    1.55 +</pre>
    1.56 +
    1.57 +</li>
    1.58 +<li><b> previous class Ipv4Route, Ipv4MulticastRoute renamed; new classes with
    1.59 +those same names added</b>
    1.60 +<p> The previous class Ipv4Route and Ipv4MulticastRoute are used by 
    1.61 +Ipv4StaticRouting and Ipv4GlobalRouting to record internal routing table
    1.62 +entries, so they were renamed to class Ipv4RoutingTableEntry and
    1.63 +Ipv4MulticastRoutingTableEntry, respectively.  In their place, new
    1.64 +class Ipv4Route and class Ipv4MulticastRoute have been added.  These
    1.65 +are reference-counted objects that are analogous to Linux struct
    1.66 +rtable and struct mfc_cache, respectively, to achieve better compatibility
    1.67 +with Linux routing architecture in the future.  
    1.68 +
    1.69 +<li><b> class Ipv4 address-to-interface mapping functions changed</b>
    1.70 +<p>  There was some general cleanup of functions that involve mappings
    1.71 +from Ipv4Address to either NetDevice or Ipv4 interface index.  
    1.72 +<pre>
    1.73 +-  virtual uint32_t FindInterfaceForAddr (Ipv4Address addr) const = 0;
    1.74 +-  virtual uint32_t FindInterfaceForAddr (Ipv4Address addr, Ipv4Mask mask) const = 0;
    1.75 ++  virtual int32_t GetInterfaceForAddress (Ipv4Address address) const = 0;
    1.76 ++  virtual int32_t GetInterfaceForPrefix (Ipv4Address address, Ipv4Mask mask) const = 0;
    1.77 +-  virtual int32_t FindInterfaceForDevice(Ptr&lt;NetDevice&gt; nd) const = 0;
    1.78 ++  virtual int32_t GetInterfaceForDevice (Ptr&lt;const NetDevice&gt; device) const = 0;
    1.79 +-  virtual Ipv4Address GetSourceAddress (Ipv4Address destination) const = 0;
    1.80 +-  virtual bool GetInterfaceForDestination (Ipv4Address dest,
    1.81 +-  virtual uint32_t GetInterfaceByAddress (Ipv4Address addr, Ipv4Mask mask = Ipv4Mask("255.255.255.255"));
    1.82 +</pre>
    1.83 +
    1.84 +<li><b> class Ipv4 multicast join API deleted</b>
    1.85 +<p> The following methods are not really used in present form since IGMP
    1.86 +is not being generated, so they have been removed (planned to be replaced
    1.87 +by multicast socket-based calls in the future):
    1.88 +
    1.89 +<pre>
    1.90 +- virtual void JoinMulticastGroup (Ipv4Address origin, Ipv4Address group) = 0;
    1.91 +- virtual void LeaveMulticastGroup (Ipv4Address origin, Ipv4Address group) = 0;
    1.92 +</pre>
    1.93 +
    1.94 +
    1.95  <li><b>Deconflict NetDevice::ifIndex and Ipv4::ifIndex (bug 85).</b>
    1.96  <p>All function parameters named "ifIndex" that refer 
    1.97  to an Ipv4 interface are instead named "interface".
     2.1 --- a/RELEASE_NOTES	Sat May 30 17:36:50 2009 +0100
     2.2 +++ b/RELEASE_NOTES	Sat May 30 17:37:38 2009 +0100
     2.3 @@ -17,13 +17,21 @@
     2.4  
     2.5  New user-visible features
     2.6  -------------------------
     2.7 -  a) 802.11e EDCA support: Has been added possibilty to manage QoS traffic on wifi stations.
     2.8  
     2.9 -  b) 802.11n initial support: Has been added support for A-MSDU frame aggregation feature.
    2.10 +  a) 802.11 MAC:
    2.11 +     - EDCA multi-qos-class support (Mirko Banchi)
    2.12 +     - 802.11n initial support for A-MSDU frame aggregation (Mirko Banchi)
    2.13 +     - aarf-cd and cara rate control algorithms (Federico Maguolo)
    2.14 +  b) 802.11 PHY:
    2.15 +     - 802.11b PHY support (Gary Pei)
    2.16 +     - Nakagami propagation loss model (Timo Bingmann)
    2.17 +  c) GammaVariable and ErlangVariable (Timo Bingmann)
    2.18   
    2.19  API changes from ns-3.4
    2.20  -----------------------
    2.21 -API changes for this release are documented in the file CHANGES.html
    2.22 +API changes for this release are documented in the file CHANGES.html.  The
    2.23 +internal API and composition of the IPv4 stack underwent significant
    2.24 +refactoring in this release cycle.
    2.25  
    2.26  Release 3.4
    2.27  ===========
     3.1 --- a/bindings/python/ns3_module_bridge.py	Sat May 30 17:36:50 2009 +0100
     3.2 +++ b/bindings/python/ns3_module_bridge.py	Sat May 30 17:37:38 2009 +0100
     3.3 @@ -1,4 +1,4 @@
     3.4 -from pybindgen import Module, FileCodeSink, param, retval, cppclass
     3.5 +from pybindgen import Module, FileCodeSink, param, retval, cppclass, typehandlers
     3.6  
     3.7  def register_types(module):
     3.8      root_module = module.get_root()
     3.9 @@ -20,6 +20,12 @@
    3.10      register_types_ns3_TimeStepPrecision(nested_module)
    3.11      
    3.12      
    3.13 +    ## Register a nested module for the namespace addressUtils
    3.14 +    
    3.15 +    nested_module = module.add_cpp_namespace('addressUtils')
    3.16 +    register_types_ns3_addressUtils(nested_module)
    3.17 +    
    3.18 +    
    3.19      ## Register a nested module for the namespace internal
    3.20      
    3.21      nested_module = module.add_cpp_namespace('internal')
    3.22 @@ -40,6 +46,10 @@
    3.23      root_module = module.get_root()
    3.24      
    3.25  
    3.26 +def register_types_ns3_addressUtils(module):
    3.27 +    root_module = module.get_root()
    3.28 +    
    3.29 +
    3.30  def register_types_ns3_internal(module):
    3.31      root_module = module.get_root()
    3.32      
    3.33 @@ -254,6 +264,7 @@
    3.34      module = root_module
    3.35      register_functions_ns3_Config(module.get_submodule('Config'), root_module)
    3.36      register_functions_ns3_TimeStepPrecision(module.get_submodule('TimeStepPrecision'), root_module)
    3.37 +    register_functions_ns3_addressUtils(module.get_submodule('addressUtils'), root_module)
    3.38      register_functions_ns3_internal(module.get_submodule('internal'), root_module)
    3.39      register_functions_ns3_olsr(module.get_submodule('olsr'), root_module)
    3.40      return
    3.41 @@ -264,6 +275,9 @@
    3.42  def register_functions_ns3_TimeStepPrecision(module, root_module):
    3.43      return
    3.44  
    3.45 +def register_functions_ns3_addressUtils(module, root_module):
    3.46 +    return
    3.47 +
    3.48  def register_functions_ns3_internal(module, root_module):
    3.49      return
    3.50  
     4.1 --- a/bindings/python/ns3_module_common.py	Sat May 30 17:36:50 2009 +0100
     4.2 +++ b/bindings/python/ns3_module_common.py	Sat May 30 17:37:38 2009 +0100
     4.3 @@ -1,4 +1,4 @@
     4.4 -from pybindgen import Module, FileCodeSink, param, retval, cppclass
     4.5 +from pybindgen import Module, FileCodeSink, param, retval, cppclass, typehandlers
     4.6  
     4.7  def register_types(module):
     4.8      root_module = module.get_root()
     4.9 @@ -66,6 +66,12 @@
    4.10      register_types_ns3_TimeStepPrecision(nested_module)
    4.11      
    4.12      
    4.13 +    ## Register a nested module for the namespace addressUtils
    4.14 +    
    4.15 +    nested_module = module.add_cpp_namespace('addressUtils')
    4.16 +    register_types_ns3_addressUtils(nested_module)
    4.17 +    
    4.18 +    
    4.19      ## Register a nested module for the namespace internal
    4.20      
    4.21      nested_module = module.add_cpp_namespace('internal')
    4.22 @@ -86,6 +92,10 @@
    4.23      root_module = module.get_root()
    4.24      
    4.25  
    4.26 +def register_types_ns3_addressUtils(module):
    4.27 +    root_module = module.get_root()
    4.28 +    
    4.29 +
    4.30  def register_types_ns3_internal(module):
    4.31      root_module = module.get_root()
    4.32      
    4.33 @@ -1115,6 +1125,7 @@
    4.34                          [])
    4.35      register_functions_ns3_Config(module.get_submodule('Config'), root_module)
    4.36      register_functions_ns3_TimeStepPrecision(module.get_submodule('TimeStepPrecision'), root_module)
    4.37 +    register_functions_ns3_addressUtils(module.get_submodule('addressUtils'), root_module)
    4.38      register_functions_ns3_internal(module.get_submodule('internal'), root_module)
    4.39      register_functions_ns3_olsr(module.get_submodule('olsr'), root_module)
    4.40      return
    4.41 @@ -1125,6 +1136,9 @@
    4.42  def register_functions_ns3_TimeStepPrecision(module, root_module):
    4.43      return
    4.44  
    4.45 +def register_functions_ns3_addressUtils(module, root_module):
    4.46 +    return
    4.47 +
    4.48  def register_functions_ns3_internal(module, root_module):
    4.49      return
    4.50  
     5.1 --- a/bindings/python/ns3_module_contrib.py	Sat May 30 17:36:50 2009 +0100
     5.2 +++ b/bindings/python/ns3_module_contrib.py	Sat May 30 17:37:38 2009 +0100
     5.3 @@ -1,4 +1,4 @@
     5.4 -from pybindgen import Module, FileCodeSink, param, retval, cppclass
     5.5 +from pybindgen import Module, FileCodeSink, param, retval, cppclass, typehandlers
     5.6  
     5.7  def register_types(module):
     5.8      root_module = module.get_root()
     5.9 @@ -52,6 +52,12 @@
    5.10      register_types_ns3_TimeStepPrecision(nested_module)
    5.11      
    5.12      
    5.13 +    ## Register a nested module for the namespace addressUtils
    5.14 +    
    5.15 +    nested_module = module.add_cpp_namespace('addressUtils')
    5.16 +    register_types_ns3_addressUtils(nested_module)
    5.17 +    
    5.18 +    
    5.19      ## Register a nested module for the namespace internal
    5.20      
    5.21      nested_module = module.add_cpp_namespace('internal')
    5.22 @@ -72,6 +78,10 @@
    5.23      root_module = module.get_root()
    5.24      
    5.25  
    5.26 +def register_types_ns3_addressUtils(module):
    5.27 +    root_module = module.get_root()
    5.28 +    
    5.29 +
    5.30  def register_types_ns3_internal(module):
    5.31      root_module = module.get_root()
    5.32      
    5.33 @@ -470,6 +480,7 @@
    5.34      module = root_module
    5.35      register_functions_ns3_Config(module.get_submodule('Config'), root_module)
    5.36      register_functions_ns3_TimeStepPrecision(module.get_submodule('TimeStepPrecision'), root_module)
    5.37 +    register_functions_ns3_addressUtils(module.get_submodule('addressUtils'), root_module)
    5.38      register_functions_ns3_internal(module.get_submodule('internal'), root_module)
    5.39      register_functions_ns3_olsr(module.get_submodule('olsr'), root_module)
    5.40      return
    5.41 @@ -480,6 +491,9 @@
    5.42  def register_functions_ns3_TimeStepPrecision(module, root_module):
    5.43      return
    5.44  
    5.45 +def register_functions_ns3_addressUtils(module, root_module):
    5.46 +    return
    5.47 +
    5.48  def register_functions_ns3_internal(module, root_module):
    5.49      return
    5.50  
     6.1 --- a/bindings/python/ns3_module_core.py	Sat May 30 17:36:50 2009 +0100
     6.2 +++ b/bindings/python/ns3_module_core.py	Sat May 30 17:37:38 2009 +0100
     6.3 @@ -1,4 +1,4 @@
     6.4 -from pybindgen import Module, FileCodeSink, param, retval, cppclass
     6.5 +from pybindgen import Module, FileCodeSink, param, retval, cppclass, typehandlers
     6.6  
     6.7  def register_types(module):
     6.8      root_module = module.get_root()
     6.9 @@ -186,6 +186,12 @@
    6.10      register_types_ns3_TimeStepPrecision(nested_module)
    6.11      
    6.12      
    6.13 +    ## Register a nested module for the namespace addressUtils
    6.14 +    
    6.15 +    nested_module = module.add_cpp_namespace('addressUtils')
    6.16 +    register_types_ns3_addressUtils(nested_module)
    6.17 +    
    6.18 +    
    6.19      ## Register a nested module for the namespace internal
    6.20      
    6.21      nested_module = module.add_cpp_namespace('internal')
    6.22 @@ -209,6 +215,10 @@
    6.23      root_module = module.get_root()
    6.24      
    6.25  
    6.26 +def register_types_ns3_addressUtils(module):
    6.27 +    root_module = module.get_root()
    6.28 +    
    6.29 +
    6.30  def register_types_ns3_internal(module):
    6.31      root_module = module.get_root()
    6.32      
    6.33 @@ -1641,6 +1651,11 @@
    6.34                     'ns3::Object::AggregateIterator', 
    6.35                     [], 
    6.36                     is_const=True)
    6.37 +    ## object.h: void ns3::Object::NotifyNewAggregate() [member function]
    6.38 +    cls.add_method('NotifyNewAggregate', 
    6.39 +                   'void', 
    6.40 +                   [], 
    6.41 +                   visibility='protected', is_virtual=True)
    6.42      ## object.h: void ns3::Object::DoDispose() [member function]
    6.43      cls.add_method('DoDispose', 
    6.44                     'void', 
    6.45 @@ -2222,6 +2237,7 @@
    6.46                          template_parameters=['unsigned char'])
    6.47      register_functions_ns3_Config(module.get_submodule('Config'), root_module)
    6.48      register_functions_ns3_TimeStepPrecision(module.get_submodule('TimeStepPrecision'), root_module)
    6.49 +    register_functions_ns3_addressUtils(module.get_submodule('addressUtils'), root_module)
    6.50      register_functions_ns3_internal(module.get_submodule('internal'), root_module)
    6.51      register_functions_ns3_olsr(module.get_submodule('olsr'), root_module)
    6.52      return
    6.53 @@ -2288,6 +2304,9 @@
    6.54  def register_functions_ns3_TimeStepPrecision(module, root_module):
    6.55      return
    6.56  
    6.57 +def register_functions_ns3_addressUtils(module, root_module):
    6.58 +    return
    6.59 +
    6.60  def register_functions_ns3_internal(module, root_module):
    6.61      ## double.h: extern ns3::Ptr<ns3::AttributeChecker const> ns3::internal::MakeDoubleChecker(double min, double max, std::string name) [free function]
    6.62      module.add_function('MakeDoubleChecker', 
     7.1 --- a/bindings/python/ns3_module_csma.py	Sat May 30 17:36:50 2009 +0100
     7.2 +++ b/bindings/python/ns3_module_csma.py	Sat May 30 17:37:38 2009 +0100
     7.3 @@ -1,4 +1,4 @@
     7.4 -from pybindgen import Module, FileCodeSink, param, retval, cppclass
     7.5 +from pybindgen import Module, FileCodeSink, param, retval, cppclass, typehandlers
     7.6  
     7.7  def register_types(module):
     7.8      root_module = module.get_root()
     7.9 @@ -28,6 +28,12 @@
    7.10      register_types_ns3_TimeStepPrecision(nested_module)
    7.11      
    7.12      
    7.13 +    ## Register a nested module for the namespace addressUtils
    7.14 +    
    7.15 +    nested_module = module.add_cpp_namespace('addressUtils')
    7.16 +    register_types_ns3_addressUtils(nested_module)
    7.17 +    
    7.18 +    
    7.19      ## Register a nested module for the namespace internal
    7.20      
    7.21      nested_module = module.add_cpp_namespace('internal')
    7.22 @@ -48,6 +54,10 @@
    7.23      root_module = module.get_root()
    7.24      
    7.25  
    7.26 +def register_types_ns3_addressUtils(module):
    7.27 +    root_module = module.get_root()
    7.28 +    
    7.29 +
    7.30  def register_types_ns3_internal(module):
    7.31      root_module = module.get_root()
    7.32      
    7.33 @@ -414,6 +424,7 @@
    7.34      module = root_module
    7.35      register_functions_ns3_Config(module.get_submodule('Config'), root_module)
    7.36      register_functions_ns3_TimeStepPrecision(module.get_submodule('TimeStepPrecision'), root_module)
    7.37 +    register_functions_ns3_addressUtils(module.get_submodule('addressUtils'), root_module)
    7.38      register_functions_ns3_internal(module.get_submodule('internal'), root_module)
    7.39      register_functions_ns3_olsr(module.get_submodule('olsr'), root_module)
    7.40      return
    7.41 @@ -424,6 +435,9 @@
    7.42  def register_functions_ns3_TimeStepPrecision(module, root_module):
    7.43      return
    7.44  
    7.45 +def register_functions_ns3_addressUtils(module, root_module):
    7.46 +    return
    7.47 +
    7.48  def register_functions_ns3_internal(module, root_module):
    7.49      return
    7.50  
     8.1 --- a/bindings/python/ns3_module_emu.py	Sat May 30 17:36:50 2009 +0100
     8.2 +++ b/bindings/python/ns3_module_emu.py	Sat May 30 17:37:38 2009 +0100
     8.3 @@ -1,4 +1,4 @@
     8.4 -from pybindgen import Module, FileCodeSink, param, retval, cppclass
     8.5 +from pybindgen import Module, FileCodeSink, param, retval, cppclass, typehandlers
     8.6  
     8.7  def register_types(module):
     8.8      root_module = module.get_root()
     8.9 @@ -18,6 +18,12 @@
    8.10      register_types_ns3_TimeStepPrecision(nested_module)
    8.11      
    8.12      
    8.13 +    ## Register a nested module for the namespace addressUtils
    8.14 +    
    8.15 +    nested_module = module.add_cpp_namespace('addressUtils')
    8.16 +    register_types_ns3_addressUtils(nested_module)
    8.17 +    
    8.18 +    
    8.19      ## Register a nested module for the namespace internal
    8.20      
    8.21      nested_module = module.add_cpp_namespace('internal')
    8.22 @@ -38,6 +44,10 @@
    8.23      root_module = module.get_root()
    8.24      
    8.25  
    8.26 +def register_types_ns3_addressUtils(module):
    8.27 +    root_module = module.get_root()
    8.28 +    
    8.29 +
    8.30  def register_types_ns3_internal(module):
    8.31      root_module = module.get_root()
    8.32      
    8.33 @@ -206,6 +216,7 @@
    8.34      module = root_module
    8.35      register_functions_ns3_Config(module.get_submodule('Config'), root_module)
    8.36      register_functions_ns3_TimeStepPrecision(module.get_submodule('TimeStepPrecision'), root_module)
    8.37 +    register_functions_ns3_addressUtils(module.get_submodule('addressUtils'), root_module)
    8.38      register_functions_ns3_internal(module.get_submodule('internal'), root_module)
    8.39      register_functions_ns3_olsr(module.get_submodule('olsr'), root_module)
    8.40      return
    8.41 @@ -216,6 +227,9 @@
    8.42  def register_functions_ns3_TimeStepPrecision(module, root_module):
    8.43      return
    8.44  
    8.45 +def register_functions_ns3_addressUtils(module, root_module):
    8.46 +    return
    8.47 +
    8.48  def register_functions_ns3_internal(module, root_module):
    8.49      return
    8.50  
     9.1 --- a/bindings/python/ns3_module_global_routing.py	Sat May 30 17:36:50 2009 +0100
     9.2 +++ b/bindings/python/ns3_module_global_routing.py	Sat May 30 17:37:38 2009 +0100
     9.3 @@ -1,4 +1,4 @@
     9.4 -from pybindgen import Module, FileCodeSink, param, retval, cppclass
     9.5 +from pybindgen import Module, FileCodeSink, param, retval, cppclass, typehandlers
     9.6  
     9.7  def register_types(module):
     9.8      root_module = module.get_root()
     9.9 @@ -30,6 +30,12 @@
    9.10      register_types_ns3_TimeStepPrecision(nested_module)
    9.11      
    9.12      
    9.13 +    ## Register a nested module for the namespace addressUtils
    9.14 +    
    9.15 +    nested_module = module.add_cpp_namespace('addressUtils')
    9.16 +    register_types_ns3_addressUtils(nested_module)
    9.17 +    
    9.18 +    
    9.19      ## Register a nested module for the namespace internal
    9.20      
    9.21      nested_module = module.add_cpp_namespace('internal')
    9.22 @@ -50,6 +56,10 @@
    9.23      root_module = module.get_root()
    9.24      
    9.25  
    9.26 +def register_types_ns3_addressUtils(module):
    9.27 +    root_module = module.get_root()
    9.28 +    
    9.29 +
    9.30  def register_types_ns3_internal(module):
    9.31      root_module = module.get_root()
    9.32      
    9.33 @@ -287,6 +297,7 @@
    9.34      module = root_module
    9.35      register_functions_ns3_Config(module.get_submodule('Config'), root_module)
    9.36      register_functions_ns3_TimeStepPrecision(module.get_submodule('TimeStepPrecision'), root_module)
    9.37 +    register_functions_ns3_addressUtils(module.get_submodule('addressUtils'), root_module)
    9.38      register_functions_ns3_internal(module.get_submodule('internal'), root_module)
    9.39      register_functions_ns3_olsr(module.get_submodule('olsr'), root_module)
    9.40      return
    9.41 @@ -297,6 +308,9 @@
    9.42  def register_functions_ns3_TimeStepPrecision(module, root_module):
    9.43      return
    9.44  
    9.45 +def register_functions_ns3_addressUtils(module, root_module):
    9.46 +    return
    9.47 +
    9.48  def register_functions_ns3_internal(module, root_module):
    9.49      return
    9.50  
    10.1 --- a/bindings/python/ns3_module_helper.py	Sat May 30 17:36:50 2009 +0100
    10.2 +++ b/bindings/python/ns3_module_helper.py	Sat May 30 17:37:38 2009 +0100
    10.3 @@ -1,4 +1,4 @@
    10.4 -from pybindgen import Module, FileCodeSink, param, retval, cppclass
    10.5 +from pybindgen import Module, FileCodeSink, param, retval, cppclass, typehandlers
    10.6  
    10.7  def register_types(module):
    10.8      root_module = module.get_root()
    10.9 @@ -17,6 +17,8 @@
   10.10      module.add_class('Ipv4AddressHelper', allow_subclassing=False)
   10.11      ## ipv4-interface-container.h: ns3::Ipv4InterfaceContainer [class]
   10.12      module.add_class('Ipv4InterfaceContainer')
   10.13 +    ## ipv4-static-routing-helper.h: ns3::Ipv4StaticRoutingHelper [class]
   10.14 +    module.add_class('Ipv4StaticRoutingHelper', allow_subclassing=False)
   10.15      ## mobility-helper.h: ns3::MobilityHelper [class]
   10.16      module.add_class('MobilityHelper', allow_subclassing=False)
   10.17      ## net-device-container.h: ns3::NetDeviceContainer [class]
   10.18 @@ -35,8 +37,6 @@
   10.19      module.add_class('PacketSocketHelper', allow_subclassing=False)
   10.20      ## point-to-point-helper.h: ns3::PointToPointHelper [class]
   10.21      module.add_class('PointToPointHelper', allow_subclassing=False)
   10.22 -    ## static-multicast-route-helper.h: ns3::StaticMulticastRouteHelper [class]
   10.23 -    module.add_class('StaticMulticastRouteHelper', allow_subclassing=False)
   10.24      ## tap-bridge-helper.h: ns3::TapBridgeHelper [class]
   10.25      module.add_class('TapBridgeHelper', allow_subclassing=False)
   10.26      ## udp-echo-helper.h: ns3::UdpEchoClientHelper [class]
   10.27 @@ -72,6 +72,12 @@
   10.28      register_types_ns3_TimeStepPrecision(nested_module)
   10.29      
   10.30      
   10.31 +    ## Register a nested module for the namespace addressUtils
   10.32 +    
   10.33 +    nested_module = module.add_cpp_namespace('addressUtils')
   10.34 +    register_types_ns3_addressUtils(nested_module)
   10.35 +    
   10.36 +    
   10.37      ## Register a nested module for the namespace internal
   10.38      
   10.39      nested_module = module.add_cpp_namespace('internal')
   10.40 @@ -92,6 +98,10 @@
   10.41      root_module = module.get_root()
   10.42      
   10.43  
   10.44 +def register_types_ns3_addressUtils(module):
   10.45 +    root_module = module.get_root()
   10.46 +    
   10.47 +
   10.48  def register_types_ns3_internal(module):
   10.49      root_module = module.get_root()
   10.50      
   10.51 @@ -108,6 +118,7 @@
   10.52      register_Ns3InternetStackHelper_methods(root_module, root_module['ns3::InternetStackHelper'])
   10.53      register_Ns3Ipv4AddressHelper_methods(root_module, root_module['ns3::Ipv4AddressHelper'])
   10.54      register_Ns3Ipv4InterfaceContainer_methods(root_module, root_module['ns3::Ipv4InterfaceContainer'])
   10.55 +    register_Ns3Ipv4StaticRoutingHelper_methods(root_module, root_module['ns3::Ipv4StaticRoutingHelper'])
   10.56      register_Ns3MobilityHelper_methods(root_module, root_module['ns3::MobilityHelper'])
   10.57      register_Ns3NetDeviceContainer_methods(root_module, root_module['ns3::NetDeviceContainer'])
   10.58      register_Ns3NodeContainer_methods(root_module, root_module['ns3::NodeContainer'])
   10.59 @@ -117,7 +128,6 @@
   10.60      register_Ns3PacketSinkHelper_methods(root_module, root_module['ns3::PacketSinkHelper'])
   10.61      register_Ns3PacketSocketHelper_methods(root_module, root_module['ns3::PacketSocketHelper'])
   10.62      register_Ns3PointToPointHelper_methods(root_module, root_module['ns3::PointToPointHelper'])
   10.63 -    register_Ns3StaticMulticastRouteHelper_methods(root_module, root_module['ns3::StaticMulticastRouteHelper'])
   10.64      register_Ns3TapBridgeHelper_methods(root_module, root_module['ns3::TapBridgeHelper'])
   10.65      register_Ns3UdpEchoClientHelper_methods(root_module, root_module['ns3::UdpEchoClientHelper'])
   10.66      register_Ns3UdpEchoServerHelper_methods(root_module, root_module['ns3::UdpEchoServerHelper'])
   10.67 @@ -423,10 +433,14 @@
   10.68                     'void', 
   10.69                     [param('ns3::NodeContainer', 'c')], 
   10.70                     is_const=True)
   10.71 -    ## internet-stack-helper.h: void ns3::InternetStackHelper::SetNscStack(std::string soname) [member function]
   10.72 -    cls.add_method('SetNscStack', 
   10.73 +    ## internet-stack-helper.h: void ns3::InternetStackHelper::SetTcp(std::string tid) [member function]
   10.74 +    cls.add_method('SetTcp', 
   10.75                     'void', 
   10.76 -                   [param('std::string', 'soname')])
   10.77 +                   [param('std::string', 'tid')])
   10.78 +    ## internet-stack-helper.h: void ns3::InternetStackHelper::SetTcp(std::string tid, std::string attr, ns3::AttributeValue const & val) [member function]
   10.79 +    cls.add_method('SetTcp', 
   10.80 +                   'void', 
   10.81 +                   [param('std::string', 'tid'), param('std::string', 'attr'), param('ns3::AttributeValue const &', 'val')])
   10.82      ## internet-stack-helper.h: static void ns3::InternetStackHelper::EnableAscii(std::ostream & os, ns3::NodeContainer n) [member function]
   10.83      cls.add_method('EnableAscii', 
   10.84                     'void', 
   10.85 @@ -500,6 +514,50 @@
   10.86                     [param('std::string', 'ipv4Name'), param('uint32_t', 'interface')])
   10.87      return
   10.88  
   10.89 +def register_Ns3Ipv4StaticRoutingHelper_methods(root_module, cls):
   10.90 +    ## ipv4-static-routing-helper.h: ns3::Ipv4StaticRoutingHelper::Ipv4StaticRoutingHelper(ns3::Ipv4StaticRoutingHelper const & arg0) [copy constructor]
   10.91 +    cls.add_constructor([param('ns3::Ipv4StaticRoutingHelper const &', 'arg0')])
   10.92 +    ## ipv4-static-routing-helper.h: ns3::Ipv4StaticRoutingHelper::Ipv4StaticRoutingHelper() [constructor]
   10.93 +    cls.add_constructor([])
   10.94 +    ## ipv4-static-routing-helper.h: ns3::Ptr<ns3::Ipv4StaticRouting> ns3::Ipv4StaticRoutingHelper::GetStaticRouting(ns3::Ptr<ns3::Ipv4> ipv4) const [member function]
   10.95 +    cls.add_method('GetStaticRouting', 
   10.96 +                   'ns3::Ptr< ns3::Ipv4StaticRouting >', 
   10.97 +                   [param('ns3::Ptr< ns3::Ipv4 >', 'ipv4')], 
   10.98 +                   is_const=True)
   10.99 +    ## ipv4-static-routing-helper.h: void ns3::Ipv4StaticRoutingHelper::AddMulticastRoute(ns3::Ptr<ns3::Node> n, ns3::Ipv4Address source, ns3::Ipv4Address group, ns3::Ptr<ns3::NetDevice> input, ns3::NetDeviceContainer output) [member function]
  10.100 +    cls.add_method('AddMulticastRoute', 
  10.101 +                   'void', 
  10.102 +                   [param('ns3::Ptr< ns3::Node >', 'n'), param('ns3::Ipv4Address', 'source'), param('ns3::Ipv4Address', 'group'), param('ns3::Ptr< ns3::NetDevice >', 'input'), param('ns3::NetDeviceContainer', 'output')])
  10.103 +    ## ipv4-static-routing-helper.h: void ns3::Ipv4StaticRoutingHelper::AddMulticastRoute(std::string n, ns3::Ipv4Address source, ns3::Ipv4Address group, ns3::Ptr<ns3::NetDevice> input, ns3::NetDeviceContainer output) [member function]
  10.104 +    cls.add_method('AddMulticastRoute', 
  10.105 +                   'void', 
  10.106 +                   [param('std::string', 'n'), param('ns3::Ipv4Address', 'source'), param('ns3::Ipv4Address', 'group'), param('ns3::Ptr< ns3::NetDevice >', 'input'), param('ns3::NetDeviceContainer', 'output')])
  10.107 +    ## ipv4-static-routing-helper.h: void ns3::Ipv4StaticRoutingHelper::AddMulticastRoute(ns3::Ptr<ns3::Node> n, ns3::Ipv4Address source, ns3::Ipv4Address group, std::string inputName, ns3::NetDeviceContainer output) [member function]
  10.108 +    cls.add_method('AddMulticastRoute', 
  10.109 +                   'void', 
  10.110 +                   [param('ns3::Ptr< ns3::Node >', 'n'), param('ns3::Ipv4Address', 'source'), param('ns3::Ipv4Address', 'group'), param('std::string', 'inputName'), param('ns3::NetDeviceContainer', 'output')])
  10.111 +    ## ipv4-static-routing-helper.h: void ns3::Ipv4StaticRoutingHelper::AddMulticastRoute(std::string nName, ns3::Ipv4Address source, ns3::Ipv4Address group, std::string inputName, ns3::NetDeviceContainer output) [member function]
  10.112 +    cls.add_method('AddMulticastRoute', 
  10.113 +                   'void', 
  10.114 +                   [param('std::string', 'nName'), param('ns3::Ipv4Address', 'source'), param('ns3::Ipv4Address', 'group'), param('std::string', 'inputName'), param('ns3::NetDeviceContainer', 'output')])
  10.115 +    ## ipv4-static-routing-helper.h: void ns3::Ipv4StaticRoutingHelper::SetDefaultMulticastRoute(ns3::Ptr<ns3::Node> n, ns3::Ptr<ns3::NetDevice> nd) [member function]
  10.116 +    cls.add_method('SetDefaultMulticastRoute', 
  10.117 +                   'void', 
  10.118 +                   [param('ns3::Ptr< ns3::Node >', 'n'), param('ns3::Ptr< ns3::NetDevice >', 'nd')])
  10.119 +    ## ipv4-static-routing-helper.h: void ns3::Ipv4StaticRoutingHelper::SetDefaultMulticastRoute(ns3::Ptr<ns3::Node> n, std::string ndName) [member function]
  10.120 +    cls.add_method('SetDefaultMulticastRoute', 
  10.121 +                   'void', 
  10.122 +                   [param('ns3::Ptr< ns3::Node >', 'n'), param('std::string', 'ndName')])
  10.123 +    ## ipv4-static-routing-helper.h: void ns3::Ipv4StaticRoutingHelper::SetDefaultMulticastRoute(std::string nName, ns3::Ptr<ns3::NetDevice> nd) [member function]
  10.124 +    cls.add_method('SetDefaultMulticastRoute', 
  10.125 +                   'void', 
  10.126 +                   [param('std::string', 'nName'), param('ns3::Ptr< ns3::NetDevice >', 'nd')])
  10.127 +    ## ipv4-static-routing-helper.h: void ns3::Ipv4StaticRoutingHelper::SetDefaultMulticastRoute(std::string nName, std::string ndName) [member function]
  10.128 +    cls.add_method('SetDefaultMulticastRoute', 
  10.129 +                   'void', 
  10.130 +                   [param('std::string', 'nName'), param('std::string', 'ndName')])
  10.131 +    return
  10.132 +
  10.133  def register_Ns3MobilityHelper_methods(root_module, cls):
  10.134      ## mobility-helper.h: ns3::MobilityHelper::MobilityHelper(ns3::MobilityHelper const & arg0) [copy constructor]
  10.135      cls.add_constructor([param('ns3::MobilityHelper const &', 'arg0')])
  10.136 @@ -885,53 +943,6 @@
  10.137                     [param('std::string', 'hubName'), param('ns3::NodeContainer', 'spokes'), param('ns3::NetDeviceContainer &', 'hubDevices'), param('ns3::NetDeviceContainer &', 'spokeDevices')])
  10.138      return
  10.139  
  10.140 -def register_Ns3StaticMulticastRouteHelper_methods(root_module, cls):
  10.141 -    ## static-multicast-route-helper.h: ns3::StaticMulticastRouteHelper::StaticMulticastRouteHelper(ns3::StaticMulticastRouteHelper const & arg0) [copy constructor]
  10.142 -    cls.add_constructor([param('ns3::StaticMulticastRouteHelper const &', 'arg0')])
  10.143 -    ## static-multicast-route-helper.h: ns3::StaticMulticastRouteHelper::StaticMulticastRouteHelper() [constructor]
  10.144 -    cls.add_constructor([])
  10.145 -    ## static-multicast-route-helper.h: void ns3::StaticMulticastRouteHelper::AddMulticastRoute(ns3::Ptr<ns3::Node> n, ns3::Ipv4Address source, ns3::Ipv4Address group, ns3::Ptr<ns3::NetDevice> input, ns3::NetDeviceContainer output) [member function]
  10.146 -    cls.add_method('AddMulticastRoute', 
  10.147 -                   'void', 
  10.148 -                   [param('ns3::Ptr< ns3::Node >', 'n'), param('ns3::Ipv4Address', 'source'), param('ns3::Ipv4Address', 'group'), param('ns3::Ptr< ns3::NetDevice >', 'input'), param('ns3::NetDeviceContainer', 'output')])
  10.149 -    ## static-multicast-route-helper.h: void ns3::StaticMulticastRouteHelper::AddMulticastRoute(std::string n, ns3::Ipv4Address source, ns3::Ipv4Address group, ns3::Ptr<ns3::NetDevice> input, ns3::NetDeviceContainer output) [member function]
  10.150 -    cls.add_method('AddMulticastRoute', 
  10.151 -                   'void', 
  10.152 -                   [param('std::string', 'n'), param('ns3::Ipv4Address', 'source'), param('ns3::Ipv4Address', 'group'), param('ns3::Ptr< ns3::NetDevice >', 'input'), param('ns3::NetDeviceContainer', 'output')])
  10.153 -    ## static-multicast-route-helper.h: void ns3::StaticMulticastRouteHelper::AddMulticastRoute(ns3::Ptr<ns3::Node> n, ns3::Ipv4Address source, ns3::Ipv4Address group, std::string inputName, ns3::NetDeviceContainer output) [member function]
  10.154 -    cls.add_method('AddMulticastRoute', 
  10.155 -                   'void', 
  10.156 -                   [param('ns3::Ptr< ns3::Node >', 'n'), param('ns3::Ipv4Address', 'source'), param('ns3::Ipv4Address', 'group'), param('std::string', 'inputName'), param('ns3::NetDeviceContainer', 'output')])
  10.157 -    ## static-multicast-route-helper.h: void ns3::StaticMulticastRouteHelper::AddMulticastRoute(std::string nName, ns3::Ipv4Address source, ns3::Ipv4Address group, std::string inputName, ns3::NetDeviceContainer output) [member function]
  10.158 -    cls.add_method('AddMulticastRoute', 
  10.159 -                   'void', 
  10.160 -                   [param('std::string', 'nName'), param('ns3::Ipv4Address', 'source'), param('ns3::Ipv4Address', 'group'), param('std::string', 'inputName'), param('ns3::NetDeviceContainer', 'output')])
  10.161 -    ## static-multicast-route-helper.h: void ns3::StaticMulticastRouteHelper::SetDefaultMulticastRoute(ns3::Ptr<ns3::Node> n, ns3::Ptr<ns3::NetDevice> nd) [member function]
  10.162 -    cls.add_method('SetDefaultMulticastRoute', 
  10.163 -                   'void', 
  10.164 -                   [param('ns3::Ptr< ns3::Node >', 'n'), param('ns3::Ptr< ns3::NetDevice >', 'nd')])
  10.165 -    ## static-multicast-route-helper.h: void ns3::StaticMulticastRouteHelper::SetDefaultMulticastRoute(ns3::Ptr<ns3::Node> n, std::string ndName) [member function]
  10.166 -    cls.add_method('SetDefaultMulticastRoute', 
  10.167 -                   'void', 
  10.168 -                   [param('ns3::Ptr< ns3::Node >', 'n'), param('std::string', 'ndName')])
  10.169 -    ## static-multicast-route-helper.h: void ns3::StaticMulticastRouteHelper::SetDefaultMulticastRoute(std::string nName, ns3::Ptr<ns3::NetDevice> nd) [member function]
  10.170 -    cls.add_method('SetDefaultMulticastRoute', 
  10.171 -                   'void', 
  10.172 -                   [param('std::string', 'nName'), param('ns3::Ptr< ns3::NetDevice >', 'nd')])
  10.173 -    ## static-multicast-route-helper.h: void ns3::StaticMulticastRouteHelper::SetDefaultMulticastRoute(std::string nName, std::string ndName) [member function]
  10.174 -    cls.add_method('SetDefaultMulticastRoute', 
  10.175 -                   'void', 
  10.176 -                   [param('std::string', 'nName'), param('std::string', 'ndName')])
  10.177 -    ## static-multicast-route-helper.h: void ns3::StaticMulticastRouteHelper::JoinMulticastGroup(ns3::Ptr<ns3::Node> n, ns3::Ipv4Address source, ns3::Ipv4Address group) [member function]
  10.178 -    cls.add_method('JoinMulticastGroup', 
  10.179 -                   'void', 
  10.180 -                   [param('ns3::Ptr< ns3::Node >', 'n'), param('ns3::Ipv4Address', 'source'), param('ns3::Ipv4Address', 'group')])
  10.181 -    ## static-multicast-route-helper.h: void ns3::StaticMulticastRouteHelper::JoinMulticastGroup(std::string nName, ns3::Ipv4Address source, ns3::Ipv4Address group) [member function]
  10.182 -    cls.add_method('JoinMulticastGroup', 
  10.183 -                   'void', 
  10.184 -                   [param('std::string', 'nName'), param('ns3::Ipv4Address', 'source'), param('ns3::Ipv4Address', 'group')])
  10.185 -    return
  10.186 -
  10.187  def register_Ns3TapBridgeHelper_methods(root_module, cls):
  10.188      ## tap-bridge-helper.h: ns3::TapBridgeHelper::TapBridgeHelper(ns3::TapBridgeHelper const & arg0) [copy constructor]
  10.189      cls.add_constructor([param('ns3::TapBridgeHelper const &', 'arg0')])
  10.190 @@ -1264,6 +1275,7 @@
  10.191      module = root_module
  10.192      register_functions_ns3_Config(module.get_submodule('Config'), root_module)
  10.193      register_functions_ns3_TimeStepPrecision(module.get_submodule('TimeStepPrecision'), root_module)
  10.194 +    register_functions_ns3_addressUtils(module.get_submodule('addressUtils'), root_module)
  10.195      register_functions_ns3_internal(module.get_submodule('internal'), root_module)
  10.196      register_functions_ns3_olsr(module.get_submodule('olsr'), root_module)
  10.197      return
  10.198 @@ -1274,6 +1286,9 @@
  10.199  def register_functions_ns3_TimeStepPrecision(module, root_module):
  10.200      return
  10.201  
  10.202 +def register_functions_ns3_addressUtils(module, root_module):
  10.203 +    return
  10.204 +
  10.205  def register_functions_ns3_internal(module, root_module):
  10.206      return
  10.207  
    11.1 --- a/bindings/python/ns3_module_internet_stack.py	Sat May 30 17:36:50 2009 +0100
    11.2 +++ b/bindings/python/ns3_module_internet_stack.py	Sat May 30 17:37:38 2009 +0100
    11.3 @@ -1,4 +1,4 @@
    11.4 -from pybindgen import Module, FileCodeSink, param, retval, cppclass
    11.5 +from pybindgen import Module, FileCodeSink, param, retval, cppclass, typehandlers
    11.6  
    11.7  def register_types(module):
    11.8      root_module = module.get_root()
    11.9 @@ -23,8 +23,12 @@
   11.10      module.add_enum('Flags_t', ['NONE', 'FIN', 'SYN', 'RST', 'PSH', 'ACK', 'URG'], outer_class=root_module['ns3::TcpHeader'])
   11.11      ## udp-header.h: ns3::UdpHeader [class]
   11.12      module.add_class('UdpHeader', parent=root_module['ns3::Header'])
   11.13 +    ## ipv4-static-routing-impl.h: ns3::Ipv4StaticRoutingImpl [class]
   11.14 +    module.add_class('Ipv4StaticRoutingImpl', parent=root_module['ns3::Ipv4StaticRouting'])
   11.15      ## ipv4-global-routing.h: ns3::Ipv4GlobalRouting [class]
   11.16      module.add_class('Ipv4GlobalRouting', parent=root_module['ns3::Ipv4RoutingProtocol'])
   11.17 +    ## ipv4-list-routing-impl.h: ns3::Ipv4ListRoutingImpl [class]
   11.18 +    module.add_class('Ipv4ListRoutingImpl', parent=root_module['ns3::Ipv4ListRouting'])
   11.19      
   11.20      ## Register a nested module for the namespace Config
   11.21      
   11.22 @@ -38,6 +42,12 @@
   11.23      register_types_ns3_TimeStepPrecision(nested_module)
   11.24      
   11.25      
   11.26 +    ## Register a nested module for the namespace addressUtils
   11.27 +    
   11.28 +    nested_module = module.add_cpp_namespace('addressUtils')
   11.29 +    register_types_ns3_addressUtils(nested_module)
   11.30 +    
   11.31 +    
   11.32      ## Register a nested module for the namespace internal
   11.33      
   11.34      nested_module = module.add_cpp_namespace('internal')
   11.35 @@ -58,6 +68,10 @@
   11.36      root_module = module.get_root()
   11.37      
   11.38  
   11.39 +def register_types_ns3_addressUtils(module):
   11.40 +    root_module = module.get_root()
   11.41 +    
   11.42 +
   11.43  def register_types_ns3_internal(module):
   11.44      root_module = module.get_root()
   11.45      
   11.46 @@ -73,7 +87,9 @@
   11.47      register_Ns3Icmpv4TimeExceeded_methods(root_module, root_module['ns3::Icmpv4TimeExceeded'])
   11.48      register_Ns3TcpHeader_methods(root_module, root_module['ns3::TcpHeader'])
   11.49      register_Ns3UdpHeader_methods(root_module, root_module['ns3::UdpHeader'])
   11.50 +    register_Ns3Ipv4StaticRoutingImpl_methods(root_module, root_module['ns3::Ipv4StaticRoutingImpl'])
   11.51      register_Ns3Ipv4GlobalRouting_methods(root_module, root_module['ns3::Ipv4GlobalRouting'])
   11.52 +    register_Ns3Ipv4ListRoutingImpl_methods(root_module, root_module['ns3::Ipv4ListRoutingImpl'])
   11.53      return
   11.54  
   11.55  def register_Ns3Icmpv4DestinationUnreachable_methods(root_module, cls):
   11.56 @@ -508,6 +524,118 @@
   11.57                     is_const=True)
   11.58      return
   11.59  
   11.60 +def register_Ns3Ipv4StaticRoutingImpl_methods(root_module, cls):
   11.61 +    ## ipv4-static-routing-impl.h: ns3::Ipv4StaticRoutingImpl::Ipv4StaticRoutingImpl(ns3::Ipv4StaticRoutingImpl const & arg0) [copy constructor]
   11.62 +    cls.add_constructor([param('ns3::Ipv4StaticRoutingImpl const &', 'arg0')])
   11.63 +    ## ipv4-static-routing-impl.h: static ns3::TypeId ns3::Ipv4StaticRoutingImpl::GetTypeId() [member function]
   11.64 +    cls.add_method('GetTypeId', 
   11.65 +                   'ns3::TypeId', 
   11.66 +                   [], 
   11.67 +                   is_static=True)
   11.68 +    ## ipv4-static-routing-impl.h: ns3::Ipv4StaticRoutingImpl::Ipv4StaticRoutingImpl() [constructor]
   11.69 +    cls.add_constructor([])
   11.70 +    ## ipv4-static-routing-impl.h: ns3::Ptr<ns3::Ipv4Route> ns3::Ipv4StaticRoutingImpl::RouteOutput(ns3::Ipv4Header const & header, uint32_t oif, ns3::Socket::SocketErrno & sockerr) [member function]
   11.71 +    cls.add_method('RouteOutput', 
   11.72 +                   'ns3::Ptr< ns3::Ipv4Route >', 
   11.73 +                   [param('ns3::Ipv4Header const &', 'header'), param('uint32_t', 'oif'), param('ns3::Socket::SocketErrno &', 'sockerr')], 
   11.74 +                   is_virtual=True)
   11.75 +    ## ipv4-static-routing-impl.h: bool ns3::Ipv4StaticRoutingImpl::RouteInput(ns3::Ptr<ns3::Packet const> p, ns3::Ipv4Header const & header, ns3::Ptr<const ns3::NetDevice> idev, ns3::Callback<void,ns3::Ptr<ns3::Ipv4Route>,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> ucb, ns3::Callback<void,ns3::Ptr<ns3::Ipv4MulticastRoute>,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> mcb, ns3::Callback<void,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,unsigned int,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> lcb, ns3::Callback<void,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> ecb) [member function]
   11.76 +    cls.add_method('RouteInput', 
   11.77 +                   'bool', 
   11.78 +                   [param('ns3::Ptr< ns3::Packet const >', 'p'), param('ns3::Ipv4Header const &', 'header'), param('ns3::Ptr< ns3::NetDevice const >', 'idev'), param('ns3::Callback< void, ns3::Ptr< ns3::Ipv4Route >, ns3::Ptr< ns3::Packet const >, ns3::Ipv4Header const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ucb'), param('ns3::Callback< void, ns3::Ptr< ns3::Ipv4MulticastRoute >, ns3::Ptr< ns3::Packet const >, ns3::Ipv4Header const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'mcb'), param('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::Ipv4Header const &, unsigned int, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'lcb'), param('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::Ipv4Header const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ecb')], 
   11.79 +                   is_virtual=True)
   11.80 +    ## ipv4-static-routing-impl.h: void ns3::Ipv4StaticRoutingImpl::AddHostRouteTo(ns3::Ipv4Address dest, ns3::Ipv4Address nextHop, uint32_t interface) [member function]
   11.81 +    cls.add_method('AddHostRouteTo', 
   11.82 +                   'void', 
   11.83 +                   [param('ns3::Ipv4Address', 'dest'), param('ns3::Ipv4Address', 'nextHop'), param('uint32_t', 'interface')], 
   11.84 +                   is_virtual=True)
   11.85 +    ## ipv4-static-routing-impl.h: void ns3::Ipv4StaticRoutingImpl::AddHostRouteTo(ns3::Ipv4Address dest, uint32_t interface) [member function]
   11.86 +    cls.add_method('AddHostRouteTo', 
   11.87 +                   'void', 
   11.88 +                   [param('ns3::Ipv4Address', 'dest'), param('uint32_t', 'interface')], 
   11.89 +                   is_virtual=True)
   11.90 +    ## ipv4-static-routing-impl.h: void ns3::Ipv4StaticRoutingImpl::AddNetworkRouteTo(ns3::Ipv4Address network, ns3::Ipv4Mask networkMask, ns3::Ipv4Address nextHop, uint32_t interface) [member function]
   11.91 +    cls.add_method('AddNetworkRouteTo', 
   11.92 +                   'void', 
   11.93 +                   [param('ns3::Ipv4Address', 'network'), param('ns3::Ipv4Mask', 'networkMask'), param('ns3::Ipv4Address', 'nextHop'), param('uint32_t', 'interface')], 
   11.94 +                   is_virtual=True)
   11.95 +    ## ipv4-static-routing-impl.h: void ns3::Ipv4StaticRoutingImpl::AddNetworkRouteTo(ns3::Ipv4Address network, ns3::Ipv4Mask networkMask, uint32_t interface) [member function]
   11.96 +    cls.add_method('AddNetworkRouteTo', 
   11.97 +                   'void', 
   11.98 +                   [param('ns3::Ipv4Address', 'network'), param('ns3::Ipv4Mask', 'networkMask'), param('uint32_t', 'interface')], 
   11.99 +                   is_virtual=True)
  11.100 +    ## ipv4-static-routing-impl.h: void ns3::Ipv4StaticRoutingImpl::SetDefaultRoute(ns3::Ipv4Address nextHop, uint32_t interface) [member function]
  11.101 +    cls.add_method('SetDefaultRoute', 
  11.102 +                   'void', 
  11.103 +                   [param('ns3::Ipv4Address', 'nextHop'), param('uint32_t', 'interface')], 
  11.104 +                   is_virtual=True)
  11.105 +    ## ipv4-static-routing-impl.h: uint32_t ns3::Ipv4StaticRoutingImpl::GetNRoutes() [member function]
  11.106 +    cls.add_method('GetNRoutes', 
  11.107 +                   'uint32_t', 
  11.108 +                   [], 
  11.109 +                   is_virtual=True)
  11.110 +    ## ipv4-static-routing-impl.h: ns3::Ipv4RoutingTableEntry ns3::Ipv4StaticRoutingImpl::GetDefaultRoute() [member function]
  11.111 +    cls.add_method('GetDefaultRoute', 
  11.112 +                   'ns3::Ipv4RoutingTableEntry', 
  11.113 +                   [], 
  11.114 +                   is_virtual=True)
  11.115 +    ## ipv4-static-routing-impl.h: ns3::Ipv4RoutingTableEntry ns3::Ipv4StaticRoutingImpl::GetRoute(uint32_t i) [member function]
  11.116 +    cls.add_method('GetRoute', 
  11.117 +                   'ns3::Ipv4RoutingTableEntry', 
  11.118 +                   [param('uint32_t', 'i')], 
  11.119 +                   is_virtual=True)
  11.120 +    ## ipv4-static-routing-impl.h: void ns3::Ipv4StaticRoutingImpl::RemoveRoute(uint32_t i) [member function]
  11.121 +    cls.add_method('RemoveRoute', 
  11.122 +                   'void', 
  11.123 +                   [param('uint32_t', 'i')], 
  11.124 +                   is_virtual=True)
  11.125 +    ## ipv4-static-routing-impl.h: void ns3::Ipv4StaticRoutingImpl::AddMulticastRoute(ns3::Ipv4Address origin, ns3::Ipv4Address group, uint32_t inputInterface, std::vector<unsigned int, std::allocator<unsigned int> > outputInterfaces) [member function]
  11.126 +    cls.add_method('AddMulticastRoute', 
  11.127 +                   'void', 
  11.128 +                   [param('ns3::Ipv4Address', 'origin'), param('ns3::Ipv4Address', 'group'), param('uint32_t', 'inputInterface'), param('std::vector< unsigned int >', 'outputInterfaces')], 
  11.129 +                   is_virtual=True)
  11.130 +    ## ipv4-static-routing-impl.h: void ns3::Ipv4StaticRoutingImpl::SetDefaultMulticastRoute(uint32_t outputInterface) [member function]
  11.131 +    cls.add_method('SetDefaultMulticastRoute', 
  11.132 +                   'void', 
  11.133 +                   [param('uint32_t', 'outputInterface')], 
  11.134 +                   is_virtual=True)
  11.135 +    ## ipv4-static-routing-impl.h: uint32_t ns3::Ipv4StaticRoutingImpl::GetNMulticastRoutes() const [member function]
  11.136 +    cls.add_method('GetNMulticastRoutes', 
  11.137 +                   'uint32_t', 
  11.138 +                   [], 
  11.139 +                   is_const=True, is_virtual=True)
  11.140 +    ## ipv4-static-routing-impl.h: ns3::Ipv4MulticastRoutingTableEntry ns3::Ipv4StaticRoutingImpl::GetMulticastRoute(uint32_t i) const [member function]
  11.141 +    cls.add_method('GetMulticastRoute', 
  11.142 +                   'ns3::Ipv4MulticastRoutingTableEntry', 
  11.143 +                   [param('uint32_t', 'i')], 
  11.144 +                   is_const=True, is_virtual=True)
  11.145 +    ## ipv4-static-routing-impl.h: bool ns3::Ipv4StaticRoutingImpl::RemoveMulticastRoute(ns3::Ipv4Address origin, ns3::Ipv4Address group, uint32_t inputInterface) [member function]
  11.146 +    cls.add_method('RemoveMulticastRoute', 
  11.147 +                   'bool', 
  11.148 +                   [param('ns3::Ipv4Address', 'origin'), param('ns3::Ipv4Address', 'group'), param('uint32_t', 'inputInterface')], 
  11.149 +                   is_virtual=True)
  11.150 +    ## ipv4-static-routing-impl.h: void ns3::Ipv4StaticRoutingImpl::RemoveMulticastRoute(uint32_t index) [member function]
  11.151 +    cls.add_method('RemoveMulticastRoute', 
  11.152 +                   'void', 
  11.153 +                   [param('uint32_t', 'index')], 
  11.154 +                   is_virtual=True)
  11.155 +    ## ipv4-static-routing-impl.h: void ns3::Ipv4StaticRoutingImpl::SetNode(ns3::Ptr<ns3::Node> node) [member function]
  11.156 +    cls.add_method('SetNode', 
  11.157 +                   'void', 
  11.158 +                   [param('ns3::Ptr< ns3::Node >', 'node')], 
  11.159 +                   is_virtual=True)
  11.160 +    ## ipv4-static-routing-impl.h: ns3::Ptr<ns3::Node> ns3::Ipv4StaticRoutingImpl::GetNode() const [member function]
  11.161 +    cls.add_method('GetNode', 
  11.162 +                   'ns3::Ptr< ns3::Node >', 
  11.163 +                   [], 
  11.164 +                   is_const=True, is_virtual=True)
  11.165 +    ## ipv4-static-routing-impl.h: void ns3::Ipv4StaticRoutingImpl::DoDispose() [member function]
  11.166 +    cls.add_method('DoDispose', 
  11.167 +                   'void', 
  11.168 +                   [], 
  11.169 +                   visibility='protected', is_virtual=True)
  11.170 +    return
  11.171 +
  11.172  def register_Ns3Ipv4GlobalRouting_methods(root_module, cls):
  11.173      ## ipv4-global-routing.h: ns3::Ipv4GlobalRouting::Ipv4GlobalRouting(ns3::Ipv4GlobalRouting const & arg0) [copy constructor]
  11.174      cls.add_constructor([param('ns3::Ipv4GlobalRouting const &', 'arg0')])
  11.175 @@ -518,15 +646,15 @@
  11.176                     is_static=True)
  11.177      ## ipv4-global-routing.h: ns3::Ipv4GlobalRouting::Ipv4GlobalRouting() [constructor]
  11.178      cls.add_constructor([])
  11.179 -    ## ipv4-global-routing.h: bool ns3::Ipv4GlobalRouting::RequestRoute(uint32_t interface, ns3::Ipv4Header const & ipHeader, ns3::Ptr<ns3::Packet> packet, ns3::Callback<void,bool,const ns3::Ipv4Route&,ns3::Ptr<ns3::Packet>,const ns3::Ipv4Header&,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> routeReply) [member function]
  11.180 -    cls.add_method('RequestRoute', 
  11.181 +    ## ipv4-global-routing.h: ns3::Ptr<ns3::Ipv4Route> ns3::Ipv4GlobalRouting::RouteOutput(ns3::Ipv4Header const & header, uint32_t oif, ns3::Socket::SocketErrno & sockerr) [member function]
  11.182 +    cls.add_method('RouteOutput', 
  11.183 +                   'ns3::Ptr< ns3::Ipv4Route >', 
  11.184 +                   [param('ns3::Ipv4Header const &', 'header'), param('uint32_t', 'oif'), param('ns3::Socket::SocketErrno &', 'sockerr')], 
  11.185 +                   is_virtual=True)
  11.186 +    ## ipv4-global-routing.h: bool ns3::Ipv4GlobalRouting::RouteInput(ns3::Ptr<ns3::Packet const> p, ns3::Ipv4Header const & header, ns3::Ptr<const ns3::NetDevice> idev, ns3::Callback<void,ns3::Ptr<ns3::Ipv4Route>,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> ucb, ns3::Callback<void,ns3::Ptr<ns3::Ipv4MulticastRoute>,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> mcb, ns3::Callback<void,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,unsigned int,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> lcb, ns3::Callback<void,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> ecb) [member function]
  11.187 +    cls.add_method('RouteInput', 
  11.188                     'bool', 
  11.189 -                   [param('uint32_t', 'interface'), param('ns3::Ipv4Header const &', 'ipHeader'), param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::Callback< void, bool, ns3::Ipv4Route const &, ns3::Ptr< ns3::Packet >, ns3::Ipv4Header const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'routeReply')], 
  11.190 -                   is_virtual=True)
  11.191 -    ## ipv4-global-routing.h: bool ns3::Ipv4GlobalRouting::RequestInterface(ns3::Ipv4Address destination, uint32_t & interface) [member function]
  11.192 -    cls.add_method('RequestInterface', 
  11.193 -                   'bool', 
  11.194 -                   [param('ns3::Ipv4Address', 'destination'), param('uint32_t &', 'interface')], 
  11.195 +                   [param('ns3::Ptr< ns3::Packet const >', 'p'), param('ns3::Ipv4Header const &', 'header'), param('ns3::Ptr< ns3::NetDevice const >', 'idev'), param('ns3::Callback< void, ns3::Ptr< ns3::Ipv4Route >, ns3::Ptr< ns3::Packet const >, ns3::Ipv4Header const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ucb'), param('ns3::Callback< void, ns3::Ptr< ns3::Ipv4MulticastRoute >, ns3::Ptr< ns3::Packet const >, ns3::Ipv4Header const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'mcb'), param('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::Ipv4Header const &, unsigned int, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'lcb'), param('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::Ipv4Header const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ecb')], 
  11.196                     is_virtual=True)
  11.197      ## ipv4-global-routing.h: void ns3::Ipv4GlobalRouting::AddHostRouteTo(ns3::Ipv4Address dest, ns3::Ipv4Address nextHop, uint32_t interface) [member function]
  11.198      cls.add_method('AddHostRouteTo', 
  11.199 @@ -548,14 +676,23 @@
  11.200      cls.add_method('GetNRoutes', 
  11.201                     'uint32_t', 
  11.202                     [])
  11.203 -    ## ipv4-global-routing.h: ns3::Ipv4Route * ns3::Ipv4GlobalRouting::GetRoute(uint32_t i) [member function]
  11.204 +    ## ipv4-global-routing.h: ns3::Ipv4RoutingTableEntry * ns3::Ipv4GlobalRouting::GetRoute(uint32_t i) [member function]
  11.205      cls.add_method('GetRoute', 
  11.206 -                   'ns3::Ipv4Route *', 
  11.207 +                   'ns3::Ipv4RoutingTableEntry *', 
  11.208                     [param('uint32_t', 'i')])
  11.209      ## ipv4-global-routing.h: void ns3::Ipv4GlobalRouting::RemoveRoute(uint32_t i) [member function]
  11.210      cls.add_method('RemoveRoute', 
  11.211                     'void', 
  11.212                     [param('uint32_t', 'i')])
  11.213 +    ## ipv4-global-routing.h: void ns3::Ipv4GlobalRouting::SetNode(ns3::Ptr<ns3::Node> node) [member function]
  11.214 +    cls.add_method('SetNode', 
  11.215 +                   'void', 
  11.216 +                   [param('ns3::Ptr< ns3::Node >', 'node')])
  11.217 +    ## ipv4-global-routing.h: ns3::Ptr<ns3::Node> ns3::Ipv4GlobalRouting::GetNode() const [member function]
  11.218 +    cls.add_method('GetNode', 
  11.219 +                   'ns3::Ptr< ns3::Node >', 
  11.220 +                   [], 
  11.221 +                   is_const=True)
  11.222      ## ipv4-global-routing.h: void ns3::Ipv4GlobalRouting::DoDispose() [member function]
  11.223      cls.add_method('DoDispose', 
  11.224                     'void', 
  11.225 @@ -563,18 +700,67 @@
  11.226                     visibility='protected', is_virtual=True)
  11.227      return
  11.228  
  11.229 +def register_Ns3Ipv4ListRoutingImpl_methods(root_module, cls):
  11.230 +    ## ipv4-list-routing-impl.h: ns3::Ipv4ListRoutingImpl::Ipv4ListRoutingImpl(ns3::Ipv4ListRoutingImpl const & arg0) [copy constructor]
  11.231 +    cls.add_constructor([param('ns3::Ipv4ListRoutingImpl const &', 'arg0')])
  11.232 +    ## ipv4-list-routing-impl.h: static ns3::TypeId ns3::Ipv4ListRoutingImpl::GetTypeId() [member function]
  11.233 +    cls.add_method('GetTypeId', 
  11.234 +                   'ns3::TypeId', 
  11.235 +                   [], 
  11.236 +                   is_static=True)
  11.237 +    ## ipv4-list-routing-impl.h: ns3::Ipv4ListRoutingImpl::Ipv4ListRoutingImpl() [constructor]
  11.238 +    cls.add_constructor([])
  11.239 +    ## ipv4-list-routing-impl.h: ns3::Ptr<ns3::Ipv4Route> ns3::Ipv4ListRoutingImpl::RouteOutput(ns3::Ipv4Header const & header, uint32_t oif, ns3::Socket::SocketErrno & sockerr) [member function]
  11.240 +    cls.add_method('RouteOutput', 
  11.241 +                   'ns3::Ptr< ns3::Ipv4Route >', 
  11.242 +                   [param('ns3::Ipv4Header const &', 'header'), param('uint32_t', 'oif'), param('ns3::Socket::SocketErrno &', 'sockerr')], 
  11.243 +                   is_virtual=True)
  11.244 +    ## ipv4-list-routing-impl.h: bool ns3::Ipv4ListRoutingImpl::RouteInput(ns3::Ptr<ns3::Packet const> p, ns3::Ipv4Header const & header, ns3::Ptr<const ns3::NetDevice> idev, ns3::Callback<void,ns3::Ptr<ns3::Ipv4Route>,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> ucb, ns3::Callback<void,ns3::Ptr<ns3::Ipv4MulticastRoute>,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> mcb, ns3::Callback<void,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,unsigned int,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> lcb, ns3::Callback<void,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> ecb) [member function]
  11.245 +    cls.add_method('RouteInput', 
  11.246 +                   'bool', 
  11.247 +                   [param('ns3::Ptr< ns3::Packet const >', 'p'), param('ns3::Ipv4Header const &', 'header'), param('ns3::Ptr< ns3::NetDevice const >', 'idev'), param('ns3::Callback< void, ns3::Ptr< ns3::Ipv4Route >, ns3::Ptr< ns3::Packet const >, ns3::Ipv4Header const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ucb'), param('ns3::Callback< void, ns3::Ptr< ns3::Ipv4MulticastRoute >, ns3::Ptr< ns3::Packet const >, ns3::Ipv4Header const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'mcb'), param('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::Ipv4Header const &, unsigned int, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'lcb'), param('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::Ipv4Header const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ecb')], 
  11.248 +                   is_virtual=True)
  11.249 +    ## ipv4-list-routing-impl.h: void ns3::Ipv4ListRoutingImpl::AddRoutingProtocol(ns3::Ptr<ns3::Ipv4RoutingProtocol> routingProtocol, int16_t priority) [member function]
  11.250 +    cls.add_method('AddRoutingProtocol', 
  11.251 +                   'void', 
  11.252 +                   [param('ns3::Ptr< ns3::Ipv4RoutingProtocol >', 'routingProtocol'), param('int16_t', 'priority')], 
  11.253 +                   is_virtual=True)
  11.254 +    ## ipv4-list-routing-impl.h: uint32_t ns3::Ipv4ListRoutingImpl::GetNRoutingProtocols() const [member function]
  11.255 +    cls.add_method('GetNRoutingProtocols', 
  11.256 +                   'uint32_t', 
  11.257 +                   [], 
  11.258 +                   is_const=True, is_virtual=True)
  11.259 +    ## ipv4-list-routing-impl.h: ns3::Ptr<ns3::Ipv4RoutingProtocol> ns3::Ipv4ListRoutingImpl::GetRoutingProtocol(uint32_t index, int16_t & priority) const [member function]
  11.260 +    cls.add_method('GetRoutingProtocol', 
  11.261 +                   'ns3::Ptr< ns3::Ipv4RoutingProtocol >', 
  11.262 +                   [param('uint32_t', 'index'), param('int16_t &', 'priority')], 
  11.263 +                   is_const=True, is_virtual=True)
  11.264 +    ## ipv4-list-routing-impl.h: ns3::Ptr<ns3::Ipv4StaticRouting> ns3::Ipv4ListRoutingImpl::GetStaticRouting() const [member function]
  11.265 +    cls.add_method('GetStaticRouting', 
  11.266 +                   'ns3::Ptr< ns3::Ipv4StaticRouting >', 
  11.267 +                   [], 
  11.268 +                   is_const=True, is_virtual=True)
  11.269 +    ## ipv4-list-routing-impl.h: void ns3::Ipv4ListRoutingImpl::SetNode(ns3::Ptr<ns3::Node> node) [member function]
  11.270 +    cls.add_method('SetNode', 
  11.271 +                   'void', 
  11.272 +                   [param('ns3::Ptr< ns3::Node >', 'node')])
  11.273 +    ## ipv4-list-routing-impl.h: ns3::Ptr<ns3::Node> ns3::Ipv4ListRoutingImpl::GetNode() const [member function]
  11.274 +    cls.add_method('GetNode', 
  11.275 +                   'ns3::Ptr< ns3::Node >', 
  11.276 +                   [], 
  11.277 +                   is_const=True)
  11.278 +    ## ipv4-list-routing-impl.h: void ns3::Ipv4ListRoutingImpl::DoDispose() [member function]
  11.279 +    cls.add_method('DoDispose', 
  11.280 +                   'void', 
  11.281 +                   [], 
  11.282 +                   visibility='protected', is_virtual=True)
  11.283 +    return
  11.284 +
  11.285  def register_functions(root_module):
  11.286      module = root_module
  11.287 -    ## internet-stack.h: extern void ns3::AddInternetStack(ns3::Ptr<ns3::Node> node) [free function]
  11.288 -    module.add_function('AddInternetStack', 
  11.289 -                        'void', 
  11.290 -                        [param('ns3::Ptr< ns3::Node >', 'node')])
  11.291 -    ## internet-stack.h: extern void ns3::AddNscInternetStack(ns3::Ptr<ns3::Node> node, std::string const & soname) [free function]
  11.292 -    module.add_function('AddNscInternetStack', 
  11.293 -                        'void', 
  11.294 -                        [param('ns3::Ptr< ns3::Node >', 'node'), param('std::string const &', 'soname')])
  11.295      register_functions_ns3_Config(module.get_submodule('Config'), root_module)
  11.296      register_functions_ns3_TimeStepPrecision(module.get_submodule('TimeStepPrecision'), root_module)
  11.297 +    register_functions_ns3_addressUtils(module.get_submodule('addressUtils'), root_module)
  11.298      register_functions_ns3_internal(module.get_submodule('internal'), root_module)
  11.299      register_functions_ns3_olsr(module.get_submodule('olsr'), root_module)
  11.300      return
  11.301 @@ -585,6 +771,9 @@
  11.302  def register_functions_ns3_TimeStepPrecision(module, root_module):
  11.303      return
  11.304  
  11.305 +def register_functions_ns3_addressUtils(module, root_module):
  11.306 +    return
  11.307 +
  11.308  def register_functions_ns3_internal(module, root_module):
  11.309      return
  11.310  
    12.1 --- a/bindings/python/ns3_module_mobility.py	Sat May 30 17:36:50 2009 +0100
    12.2 +++ b/bindings/python/ns3_module_mobility.py	Sat May 30 17:37:38 2009 +0100
    12.3 @@ -1,4 +1,4 @@
    12.4 -from pybindgen import Module, FileCodeSink, param, retval, cppclass
    12.5 +from pybindgen import Module, FileCodeSink, param, retval, cppclass, typehandlers
    12.6  
    12.7  def register_types(module):
    12.8      root_module = module.get_root()
    12.9 @@ -62,6 +62,12 @@
   12.10      register_types_ns3_TimeStepPrecision(nested_module)
   12.11      
   12.12      
   12.13 +    ## Register a nested module for the namespace addressUtils
   12.14 +    
   12.15 +    nested_module = module.add_cpp_namespace('addressUtils')
   12.16 +    register_types_ns3_addressUtils(nested_module)
   12.17 +    
   12.18 +    
   12.19      ## Register a nested module for the namespace internal
   12.20      
   12.21      nested_module = module.add_cpp_namespace('internal')
   12.22 @@ -82,6 +88,10 @@
   12.23      root_module = module.get_root()
   12.24      
   12.25  
   12.26 +def register_types_ns3_addressUtils(module):
   12.27 +    root_module = module.get_root()
   12.28 +    
   12.29 +
   12.30  def register_types_ns3_internal(module):
   12.31      root_module = module.get_root()
   12.32      
   12.33 @@ -748,6 +758,7 @@
   12.34                          [])
   12.35      register_functions_ns3_Config(module.get_submodule('Config'), root_module)
   12.36      register_functions_ns3_TimeStepPrecision(module.get_submodule('TimeStepPrecision'), root_module)
   12.37 +    register_functions_ns3_addressUtils(module.get_submodule('addressUtils'), root_module)
   12.38      register_functions_ns3_internal(module.get_submodule('internal'), root_module)
   12.39      register_functions_ns3_olsr(module.get_submodule('olsr'), root_module)
   12.40      return
   12.41 @@ -758,6 +769,9 @@
   12.42  def register_functions_ns3_TimeStepPrecision(module, root_module):
   12.43      return
   12.44  
   12.45 +def register_functions_ns3_addressUtils(module, root_module):
   12.46 +    return
   12.47 +
   12.48  def register_functions_ns3_internal(module, root_module):
   12.49      return
   12.50  
    13.1 --- a/bindings/python/ns3_module_node.py	Sat May 30 17:36:50 2009 +0100
    13.2 +++ b/bindings/python/ns3_module_node.py	Sat May 30 17:37:38 2009 +0100
    13.3 @@ -1,4 +1,4 @@
    13.4 -from pybindgen import Module, FileCodeSink, param, retval, cppclass
    13.5 +from pybindgen import Module, FileCodeSink, param, retval, cppclass, typehandlers
    13.6  
    13.7  def register_types(module):
    13.8      root_module = module.get_root()
    13.9 @@ -29,10 +29,10 @@
   13.10      module.add_enum('InterfaceAddressScope_e', ['HOST', 'LINK', 'GLOBAL'], outer_class=root_module['ns3::Ipv4InterfaceAddress'])
   13.11      ## ipv4-address.h: ns3::Ipv4Mask [class]
   13.12      module.add_class('Ipv4Mask')
   13.13 -    ## ipv4-route.h: ns3::Ipv4MulticastRoute [class]
   13.14 -    module.add_class('Ipv4MulticastRoute')
   13.15 -    ## ipv4-route.h: ns3::Ipv4Route [class]
   13.16 -    module.add_class('Ipv4Route')
   13.17 +    ## ipv4-routing-table-entry.h: ns3::Ipv4MulticastRoutingTableEntry [class]
   13.18 +    module.add_class('Ipv4MulticastRoutingTableEntry')
   13.19 +    ## ipv4-routing-table-entry.h: ns3::Ipv4RoutingTableEntry [class]
   13.20 +    module.add_class('Ipv4RoutingTableEntry')
   13.21      ## ipv6-address.h: ns3::Ipv6Address [class]
   13.22      module.add_class('Ipv6Address')
   13.23      ## ipv6-address.h: ns3::Ipv6Address [class]
   13.24 @@ -63,6 +63,10 @@
   13.25      module.add_class('Ipv4MaskChecker', parent=root_module['ns3::AttributeChecker'])
   13.26      ## ipv4-address.h: ns3::Ipv4MaskValue [class]
   13.27      module.add_class('Ipv4MaskValue', parent=root_module['ns3::AttributeValue'])
   13.28 +    ## ipv4-route.h: ns3::Ipv4MulticastRoute [class]
   13.29 +    module.add_class('Ipv4MulticastRoute', parent=root_module['ns3::RefCountBase'])
   13.30 +    ## ipv4-route.h: ns3::Ipv4Route [class]
   13.31 +    module.add_class('Ipv4Route', parent=root_module['ns3::RefCountBase'])
   13.32      ## ipv6-address.h: ns3::Ipv6AddressChecker [class]
   13.33      module.add_class('Ipv6AddressChecker', parent=root_module['ns3::AttributeChecker'])
   13.34      ## ipv6-address.h: ns3::Ipv6AddressValue [class]
   13.35 @@ -123,8 +127,10 @@
   13.36      module.add_class('Ipv4', parent=root_module['ns3::Object'])
   13.37      ## ipv4-raw-socket-factory.h: ns3::Ipv4RawSocketFactory [class]
   13.38      module.add_class('Ipv4RawSocketFactory', parent=root_module['ns3::SocketFactory'])
   13.39 -    ## ipv4.h: ns3::Ipv4RoutingProtocol [class]
   13.40 +    ## ipv4-routing-protocol.h: ns3::Ipv4RoutingProtocol [class]
   13.41      module.add_class('Ipv4RoutingProtocol', parent=root_module['ns3::Object'])
   13.42 +    ## ipv4-static-routing.h: ns3::Ipv4StaticRouting [class]
   13.43 +    module.add_class('Ipv4StaticRouting', parent=root_module['ns3::Ipv4RoutingProtocol'])
   13.44      ## net-device.h: ns3::NetDevice [class]
   13.45      module.add_class('NetDevice', parent=root_module['ns3::Object'])
   13.46      ## net-device.h: ns3::NetDevice::PacketType [enumeration]
   13.47 @@ -137,6 +143,8 @@
   13.48      module.add_class('SimpleChannel', parent=root_module['ns3::Channel'])
   13.49      ## simple-net-device.h: ns3::SimpleNetDevice [class]
   13.50      module.add_class('SimpleNetDevice', parent=root_module['ns3::NetDevice'])
   13.51 +    ## ipv4-list-routing.h: ns3::Ipv4ListRouting [class]
   13.52 +    module.add_class('Ipv4ListRouting', parent=root_module['ns3::Ipv4RoutingProtocol'])
   13.53      module.add_container('ns3::olsr::MprSet', 'ns3::Ipv4Address', container_type='set')
   13.54      module.add_container('std::vector< ns3::Ipv4Address >', 'ns3::Ipv4Address', container_type='vector')
   13.55      
   13.56 @@ -152,6 +160,12 @@
   13.57      register_types_ns3_TimeStepPrecision(nested_module)
   13.58      
   13.59      
   13.60 +    ## Register a nested module for the namespace addressUtils
   13.61 +    
   13.62 +    nested_module = module.add_cpp_namespace('addressUtils')
   13.63 +    register_types_ns3_addressUtils(nested_module)
   13.64 +    
   13.65 +    
   13.66      ## Register a nested module for the namespace internal
   13.67      
   13.68      nested_module = module.add_cpp_namespace('internal')
   13.69 @@ -172,6 +186,10 @@
   13.70      root_module = module.get_root()
   13.71      
   13.72  
   13.73 +def register_types_ns3_addressUtils(module):
   13.74 +    root_module = module.get_root()
   13.75 +    
   13.76 +
   13.77  def register_types_ns3_internal(module):
   13.78      root_module = module.get_root()
   13.79      
   13.80 @@ -188,8 +206,8 @@
   13.81      register_Ns3Ipv4AddressGenerator_methods(root_module, root_module['ns3::Ipv4AddressGenerator'])
   13.82      register_Ns3Ipv4InterfaceAddress_methods(root_module, root_module['ns3::Ipv4InterfaceAddress'])
   13.83      register_Ns3Ipv4Mask_methods(root_module, root_module['ns3::Ipv4Mask'])
   13.84 -    register_Ns3Ipv4MulticastRoute_methods(root_module, root_module['ns3::Ipv4MulticastRoute'])
   13.85 -    register_Ns3Ipv4Route_methods(root_module, root_module['ns3::Ipv4Route'])
   13.86 +    register_Ns3Ipv4MulticastRoutingTableEntry_methods(root_module, root_module['ns3::Ipv4MulticastRoutingTableEntry'])
   13.87 +    register_Ns3Ipv4RoutingTableEntry_methods(root_module, root_module['ns3::Ipv4RoutingTableEntry'])
   13.88      register_Ns3Ipv6Address_methods(root_module, root_module['ns3::Ipv6Address'])
   13.89      register_Ns3Ipv6Prefix_methods(root_module, root_module['ns3::Ipv6Prefix'])
   13.90      register_Ns3Mac48Address_methods(root_module, root_module['ns3::Mac48Address'])
   13.91 @@ -201,6 +219,8 @@
   13.92      register_Ns3Ipv4Header_methods(root_module, root_module['ns3::Ipv4Header'])
   13.93      register_Ns3Ipv4MaskChecker_methods(root_module, root_module['ns3::Ipv4MaskChecker'])
   13.94      register_Ns3Ipv4MaskValue_methods(root_module, root_module['ns3::Ipv4MaskValue'])
   13.95 +    register_Ns3Ipv4MulticastRoute_methods(root_module, root_module['ns3::Ipv4MulticastRoute'])
   13.96 +    register_Ns3Ipv4Route_methods(root_module, root_module['ns3::Ipv4Route'])
   13.97      register_Ns3Ipv6AddressChecker_methods(root_module, root_module['ns3::Ipv6AddressChecker'])
   13.98      register_Ns3Ipv6AddressValue_methods(root_module, root_module['ns3::Ipv6AddressValue'])
   13.99      register_Ns3Ipv6Header_methods(root_module, root_module['ns3::Ipv6Header'])
  13.100 @@ -229,11 +249,13 @@
  13.101      register_Ns3Ipv4_methods(root_module, root_module['ns3::Ipv4'])
  13.102      register_Ns3Ipv4RawSocketFactory_methods(root_module, root_module['ns3::Ipv4RawSocketFactory'])
  13.103      register_Ns3Ipv4RoutingProtocol_methods(root_module, root_module['ns3::Ipv4RoutingProtocol'])
  13.104 +    register_Ns3Ipv4StaticRouting_methods(root_module, root_module['ns3::Ipv4StaticRouting'])
  13.105      register_Ns3NetDevice_methods(root_module, root_module['ns3::NetDevice'])
  13.106      register_Ns3Node_methods(root_module, root_module['ns3::Node'])
  13.107      register_Ns3PacketSocketFactory_methods(root_module, root_module['ns3::PacketSocketFactory'])
  13.108      register_Ns3SimpleChannel_methods(root_module, root_module['ns3::SimpleChannel'])
  13.109      register_Ns3SimpleNetDevice_methods(root_module, root_module['ns3::SimpleNetDevice'])
  13.110 +    register_Ns3Ipv4ListRouting_methods(root_module, root_module['ns3::Ipv4ListRouting'])
  13.111      return
  13.112  
  13.113  def register_Ns3Address_methods(root_module, cls):
  13.114 @@ -664,125 +686,125 @@
  13.115                     [param('uint32_t', 'mask')])
  13.116      return
  13.117  
  13.118 -def register_Ns3Ipv4MulticastRoute_methods(root_module, cls):
  13.119 +def register_Ns3Ipv4MulticastRoutingTableEntry_methods(root_module, cls):
  13.120      cls.add_output_stream_operator()
  13.121 -    ## ipv4-route.h: ns3::Ipv4MulticastRoute::Ipv4MulticastRoute() [constructor]
  13.122 +    ## ipv4-routing-table-entry.h: ns3::Ipv4MulticastRoutingTableEntry::Ipv4MulticastRoutingTableEntry() [constructor]
  13.123      cls.add_constructor([])
  13.124 -    ## ipv4-route.h: ns3::Ipv4MulticastRoute::Ipv4MulticastRoute(ns3::Ipv4MulticastRoute const & route) [copy constructor]
  13.125 -    cls.add_constructor([param('ns3::Ipv4MulticastRoute const &', 'route')])
  13.126 -    ## ipv4-route.h: ns3::Ipv4MulticastRoute::Ipv4MulticastRoute(ns3::Ipv4MulticastRoute const * route) [constructor]
  13.127 -    cls.add_constructor([param('ns3::Ipv4MulticastRoute const *', 'route')])
  13.128 -    ## ipv4-route.h: static ns3::Ipv4MulticastRoute ns3::Ipv4MulticastRoute::CreateMulticastRoute(ns3::Ipv4Address origin, ns3::Ipv4Address group, uint32_t inputInterface, std::vector<unsigned int, std::allocator<unsigned int> > outputInterfaces) [member function]
  13.129 +    ## ipv4-routing-table-entry.h: ns3::Ipv4MulticastRoutingTableEntry::Ipv4MulticastRoutingTableEntry(ns3::Ipv4MulticastRoutingTableEntry const & route) [copy constructor]
  13.130 +    cls.add_constructor([param('ns3::Ipv4MulticastRoutingTableEntry const &', 'route')])
  13.131 +    ## ipv4-routing-table-entry.h: ns3::Ipv4MulticastRoutingTableEntry::Ipv4MulticastRoutingTableEntry(ns3::Ipv4MulticastRoutingTableEntry const * route) [constructor]
  13.132 +    cls.add_constructor([param('ns3::Ipv4MulticastRoutingTableEntry const *', 'route')])
  13.133 +    ## ipv4-routing-table-entry.h: static ns3::Ipv4MulticastRoutingTableEntry ns3::Ipv4MulticastRoutingTableEntry::CreateMulticastRoute(ns3::Ipv4Address origin, ns3::Ipv4Address group, uint32_t inputInterface, std::vector<unsigned int, std::allocator<unsigned int> > outputInterfaces) [member function]
  13.134      cls.add_method('CreateMulticastRoute', 
  13.135 -                   'ns3::Ipv4MulticastRoute', 
  13.136 +                   'ns3::Ipv4MulticastRoutingTableEntry', 
  13.137                     [param('ns3::Ipv4Address', 'origin'), param('ns3::Ipv4Address', 'group'), param('uint32_t', 'inputInterface'), param('std::vector< unsigned int >', 'outputInterfaces')], 
  13.138                     is_static=True)
  13.139 -    ## ipv4-route.h: ns3::Ipv4Address ns3::Ipv4MulticastRoute::GetGroup() const [member function]
  13.140 +    ## ipv4-routing-table-entry.h: ns3::Ipv4Address ns3::Ipv4MulticastRoutingTableEntry::GetGroup() const [member function]
  13.141      cls.add_method('GetGroup', 
  13.142                     'ns3::Ipv4Address', 
  13.143                     [], 
  13.144                     is_const=True)
  13.145 -    ## ipv4-route.h: uint32_t ns3::Ipv4MulticastRoute::GetInputInterface() const [member function]
  13.146 +    ## ipv4-routing-table-entry.h: uint32_t ns3::Ipv4MulticastRoutingTableEntry::GetInputInterface() const [member function]
  13.147      cls.add_method('GetInputInterface', 
  13.148                     'uint32_t', 
  13.149                     [], 
  13.150                     is_const=True)
  13.151 -    ## ipv4-route.h: uint32_t ns3::Ipv4MulticastRoute::GetNOutputInterfaces() const [member function]
  13.152 +    ## ipv4-routing-table-entry.h: uint32_t ns3::Ipv4MulticastRoutingTableEntry::GetNOutputInterfaces() const [member function]
  13.153      cls.add_method('GetNOutputInterfaces', 
  13.154                     'uint32_t', 
  13.155                     [], 
  13.156                     is_const=True)
  13.157 -    ## ipv4-route.h: ns3::Ipv4Address ns3::Ipv4MulticastRoute::GetOrigin() const [member function]
  13.158 +    ## ipv4-routing-table-entry.h: ns3::Ipv4Address ns3::Ipv4MulticastRoutingTableEntry::GetOrigin() const [member function]
  13.159      cls.add_method('GetOrigin', 
  13.160                     'ns3::Ipv4Address', 
  13.161                     [], 
  13.162                     is_const=True)
  13.163 -    ## ipv4-route.h: uint32_t ns3::Ipv4MulticastRoute::GetOutputInterface(uint32_t n) const [member function]
  13.164 +    ## ipv4-routing-table-entry.h: uint32_t ns3::Ipv4MulticastRoutingTableEntry::GetOutputInterface(uint32_t n) const [member function]
  13.165      cls.add_method('GetOutputInterface', 
  13.166                     'uint32_t', 
  13.167                     [param('uint32_t', 'n')], 
  13.168                     is_const=True)
  13.169 -    ## ipv4-route.h: std::vector<unsigned int, std::allocator<unsigned int> > ns3::Ipv4MulticastRoute::GetOutputInterfaces() const [member function]
  13.170 +    ## ipv4-routing-table-entry.h: std::vector<unsigned int, std::allocator<unsigned int> > ns3::Ipv4MulticastRoutingTableEntry::GetOutputInterfaces() const [member function]
  13.171      cls.add_method('GetOutputInterfaces', 
  13.172                     'std::vector< unsigned int >', 
  13.173                     [], 
  13.174                     is_const=True)
  13.175      return
  13.176  
  13.177 -def register_Ns3Ipv4Route_methods(root_module, cls):
  13.178 +def register_Ns3Ipv4RoutingTableEntry_methods(root_module, cls):
  13.179      cls.add_output_stream_operator()
  13.180 -    ## ipv4-route.h: ns3::Ipv4Route::Ipv4Route() [constructor]
  13.181 +    ## ipv4-routing-table-entry.h: ns3::Ipv4RoutingTableEntry::Ipv4RoutingTableEntry() [constructor]
  13.182      cls.add_constructor([])
  13.183 -    ## ipv4-route.h: ns3::Ipv4Route::Ipv4Route(ns3::Ipv4Route const & route) [copy constructor]
  13.184 -    cls.add_constructor([param('ns3::Ipv4Route const &', 'route')])
  13.185 -    ## ipv4-route.h: ns3::Ipv4Route::Ipv4Route(ns3::Ipv4Route const * route) [constructor]
  13.186 -    cls.add_constructor([param('ns3::Ipv4Route const *', 'route')])
  13.187 -    ## ipv4-route.h: static ns3::Ipv4Route ns3::Ipv4Route::CreateDefaultRoute(ns3::Ipv4Address nextHop, uint32_t interface) [member function]
  13.188 +    ## ipv4-routing-table-entry.h: ns3::Ipv4RoutingTableEntry::Ipv4RoutingTableEntry(ns3::Ipv4RoutingTableEntry const & route) [copy constructor]
  13.189 +    cls.add_constructor([param('ns3::Ipv4RoutingTableEntry const &', 'route')])
  13.190 +    ## ipv4-routing-table-entry.h: ns3::Ipv4RoutingTableEntry::Ipv4RoutingTableEntry(ns3::Ipv4RoutingTableEntry const * route) [constructor]
  13.191 +    cls.add_constructor([param('ns3::Ipv4RoutingTableEntry const *', 'route')])
  13.192 +    ## ipv4-routing-table-entry.h: static ns3::Ipv4RoutingTableEntry ns3::Ipv4RoutingTableEntry::CreateDefaultRoute(ns3::Ipv4Address nextHop, uint32_t interface) [member function]
  13.193      cls.add_method('CreateDefaultRoute', 
  13.194 -                   'ns3::Ipv4Route', 
  13.195 +                   'ns3::Ipv4RoutingTableEntry', 
  13.196                     [param('ns3::Ipv4Address', 'nextHop'), param('uint32_t', 'interface')], 
  13.197                     is_static=True)
  13.198 -    ## ipv4-route.h: static ns3::Ipv4Route ns3::Ipv4Route::CreateHostRouteTo(ns3::Ipv4Address dest, ns3::Ipv4Address nextHop, uint32_t interface) [member function]
  13.199 +    ## ipv4-routing-table-entry.h: static ns3::Ipv4RoutingTableEntry ns3::Ipv4RoutingTableEntry::CreateHostRouteTo(ns3::Ipv4Address dest, ns3::Ipv4Address nextHop, uint32_t interface) [member function]
  13.200      cls.add_method('CreateHostRouteTo', 
  13.201 -                   'ns3::Ipv4Route', 
  13.202 +                   'ns3::Ipv4RoutingTableEntry', 
  13.203                     [param('ns3::Ipv4Address', 'dest'), param('ns3::Ipv4Address', 'nextHop'), param('uint32_t', 'interface')], 
  13.204                     is_static=True)
  13.205 -    ## ipv4-route.h: static ns3::Ipv4Route ns3::Ipv4Route::CreateHostRouteTo(ns3::Ipv4Address dest, uint32_t interface) [member function]
  13.206 +    ## ipv4-routing-table-entry.h: static ns3::Ipv4RoutingTableEntry ns3::Ipv4RoutingTableEntry::CreateHostRouteTo(ns3::Ipv4Address dest, uint32_t interface) [member function]
  13.207      cls.add_method('CreateHostRouteTo', 
  13.208 -                   'ns3::Ipv4Route', 
  13.209 +                   'ns3::Ipv4RoutingTableEntry', 
  13.210                     [param('ns3::Ipv4Address', 'dest'), param('uint32_t', 'interface')], 
  13.211                     is_static=True)
  13.212 -    ## ipv4-route.h: static ns3::Ipv4Route ns3::Ipv4Route::CreateNetworkRouteTo(ns3::Ipv4Address network, ns3::Ipv4Mask networkMask, ns3::Ipv4Address nextHop, uint32_t interface) [member function]
  13.213 +    ## ipv4-routing-table-entry.h: static ns3::Ipv4RoutingTableEntry ns3::Ipv4RoutingTableEntry::CreateNetworkRouteTo(ns3::Ipv4Address network, ns3::Ipv4Mask networkMask, ns3::Ipv4Address nextHop, uint32_t interface) [member function]
  13.214      cls.add_method('CreateNetworkRouteTo', 
  13.215 -                   'ns3::Ipv4Route', 
  13.216 +                   'ns3::Ipv4RoutingTableEntry', 
  13.217                     [param('ns3::Ipv4Address', 'network'), param('ns3::Ipv4Mask', 'networkMask'), param('ns3::Ipv4Address', 'nextHop'), param('uint32_t', 'interface')], 
  13.218                     is_static=True)
  13.219 -    ## ipv4-route.h: static ns3::Ipv4Route ns3::Ipv4Route::CreateNetworkRouteTo(ns3::Ipv4Address network, ns3::Ipv4Mask networkMask, uint32_t interface) [member function]
  13.220 +    ## ipv4-routing-table-entry.h: static ns3::Ipv4RoutingTableEntry ns3::Ipv4RoutingTableEntry::CreateNetworkRouteTo(ns3::Ipv4Address network, ns3::Ipv4Mask networkMask, uint32_t interface) [member function]
  13.221      cls.add_method('CreateNetworkRouteTo', 
  13.222 -                   'ns3::Ipv4Route', 
  13.223 +                   'ns3::Ipv4RoutingTableEntry', 
  13.224                     [param('ns3::Ipv4Address', 'network'), param('ns3::Ipv4Mask', 'networkMask'), param('uint32_t', 'interface')], 
  13.225                     is_static=True)
  13.226 -    ## ipv4-route.h: ns3::Ipv4Address ns3::Ipv4Route::GetDest() const [member function]
  13.227 +    ## ipv4-routing-table-entry.h: ns3::Ipv4Address ns3::Ipv4RoutingTableEntry::GetDest() const [member function]
  13.228      cls.add_method('GetDest', 
  13.229                     'ns3::Ipv4Address', 
  13.230                     [], 
  13.231                     is_const=True)
  13.232 -    ## ipv4-route.h: ns3::Ipv4Address ns3::Ipv4Route::GetDestNetwork() const [member function]
  13.233 +    ## ipv4-routing-table-entry.h: ns3::Ipv4Address ns3::Ipv4RoutingTableEntry::GetDestNetwork() const [member function]
  13.234      cls.add_method('GetDestNetwork', 
  13.235                     'ns3::Ipv4Address', 
  13.236                     [], 
  13.237                     is_const=True)
  13.238 -    ## ipv4-route.h: ns3::Ipv4Mask ns3::Ipv4Route::GetDestNetworkMask() const [member function]
  13.239 +    ## ipv4-routing-table-entry.h: ns3::Ipv4Mask ns3::Ipv4RoutingTableEntry::GetDestNetworkMask() const [member function]
  13.240      cls.add_method('GetDestNetworkMask', 
  13.241                     'ns3::Ipv4Mask', 
  13.242                     [], 
  13.243                     is_const=True)
  13.244 -    ## ipv4-route.h: ns3::Ipv4Address ns3::Ipv4Route::GetGateway() const [member function]
  13.245 +    ## ipv4-routing-table-entry.h: ns3::Ipv4Address ns3::Ipv4RoutingTableEntry::GetGateway() const [member function]
  13.246      cls.add_method('GetGateway', 
  13.247                     'ns3::Ipv4Address', 
  13.248                     [], 
  13.249                     is_const=True)
  13.250 -    ## ipv4-route.h: uint32_t ns3::Ipv4Route::GetInterface() const [member function]
  13.251 +    ## ipv4-routing-table-entry.h: uint32_t ns3::Ipv4RoutingTableEntry::GetInterface() const [member function]
  13.252      cls.add_method('GetInterface', 
  13.253                     'uint32_t', 
  13.254                     [], 
  13.255                     is_const=True)
  13.256 -    ## ipv4-route.h: bool ns3::Ipv4Route::IsDefault() const [member function]
  13.257 +    ## ipv4-routing-table-entry.h: bool ns3::Ipv4RoutingTableEntry::IsDefault() const [member function]
  13.258      cls.add_method('IsDefault', 
  13.259                     'bool', 
  13.260                     [], 
  13.261                     is_const=True)
  13.262 -    ## ipv4-route.h: bool ns3::Ipv4Route::IsGateway() const [member function]
  13.263 +    ## ipv4-routing-table-entry.h: bool ns3::Ipv4RoutingTableEntry::IsGateway() const [member function]
  13.264      cls.add_method('IsGateway', 
  13.265                     'bool', 
  13.266                     [], 
  13.267                     is_const=True)
  13.268 -    ## ipv4-route.h: bool ns3::Ipv4Route::IsHost() const [member function]
  13.269 +    ## ipv4-routing-table-entry.h: bool ns3::Ipv4RoutingTableEntry::IsHost() const [member function]
  13.270      cls.add_method('IsHost', 
  13.271                     'bool', 
  13.272                     [], 
  13.273                     is_const=True)
  13.274 -    ## ipv4-route.h: bool ns3::Ipv4Route::IsNetwork() const [member function]
  13.275 +    ## ipv4-routing-table-entry.h: bool ns3::Ipv4RoutingTableEntry::IsNetwork() const [member function]
  13.276      cls.add_method('IsNetwork', 
  13.277                     'bool', 
  13.278                     [], 
  13.279 @@ -1403,6 +1425,97 @@
  13.280                     is_virtual=True)
  13.281      return
  13.282  
  13.283 +def register_Ns3Ipv4MulticastRoute_methods(root_module, cls):
  13.284 +    ## ipv4-route.h: ns3::Ipv4MulticastRoute::MAX_INTERFACES [variable]
  13.285 +    cls.add_static_attribute('MAX_INTERFACES', 'uint32_t const', is_const=True)
  13.286 +    ## ipv4-route.h: ns3::Ipv4MulticastRoute::MAX_TTL [variable]
  13.287 +    cls.add_static_attribute('MAX_TTL', 'uint32_t const', is_const=True)
  13.288 +    ## ipv4-route.h: ns3::Ipv4MulticastRoute::Ipv4MulticastRoute(ns3::Ipv4MulticastRoute const & arg0) [copy constructor]
  13.289 +    cls.add_constructor([param('ns3::Ipv4MulticastRoute const &', 'arg0')])
  13.290 +    ## ipv4-route.h: ns3::Ipv4MulticastRoute::Ipv4MulticastRoute() [constructor]
  13.291 +    cls.add_constructor([])
  13.292 +    ## ipv4-route.h: void ns3::Ipv4MulticastRoute::SetGroup(ns3::Ipv4Address const group) [member function]
  13.293 +    cls.add_method('SetGroup', 
  13.294 +                   'void', 
  13.295 +                   [param('ns3::Ipv4Address const', 'group')])
  13.296 +    ## ipv4-route.h: ns3::Ipv4Address ns3::Ipv4MulticastRoute::GetGroup() const [member function]
  13.297 +    cls.add_method('GetGroup', 
  13.298 +                   'ns3::Ipv4Address', 
  13.299 +                   [], 
  13.300 +                   is_const=True)
  13.301 +    ## ipv4-route.h: void ns3::Ipv4MulticastRoute::SetOrigin(ns3::Ipv4Address const group) [member function]
  13.302 +    cls.add_method('SetOrigin', 
  13.303 +                   'void', 
  13.304 +                   [param('ns3::Ipv4Address const', 'group')])
  13.305 +    ## ipv4-route.h: ns3::Ipv4Address ns3::Ipv4MulticastRoute::GetOrigin() const [member function]
  13.306 +    cls.add_method('GetOrigin', 
  13.307 +                   'ns3::Ipv4Address', 
  13.308 +                   [], 
  13.309 +                   is_const=True)
  13.310 +    ## ipv4-route.h: void ns3::Ipv4MulticastRoute::SetParent(uint32_t iif) [member function]
  13.311 +    cls.add_method('SetParent', 
  13.312 +                   'void', 
  13.313 +                   [param('uint32_t', 'iif')])
  13.314 +    ## ipv4-route.h: uint32_t ns3::Ipv4MulticastRoute::GetParent() const [member function]
  13.315 +    cls.add_method('GetParent', 
  13.316 +                   'uint32_t', 
  13.317 +                   [], 
  13.318 +                   is_const=True)
  13.319 +    ## ipv4-route.h: void ns3::Ipv4MulticastRoute::SetOutputTtl(uint32_t oif, uint32_t ttl) [member function]
  13.320 +    cls.add_method('SetOutputTtl', 
  13.321 +                   'void', 
  13.322 +                   [param('uint32_t', 'oif'), param('uint32_t', 'ttl')])
  13.323 +    ## ipv4-route.h: uint32_t ns3::Ipv4MulticastRoute::GetOutputTtl(uint32_t oif) const [member function]
  13.324 +    cls.add_method('GetOutputTtl', 
  13.325 +                   'uint32_t', 
  13.326 +                   [param('uint32_t', 'oif')], 
  13.327 +                   is_const=True)
  13.328 +    return
  13.329 +
  13.330 +def register_Ns3Ipv4Route_methods(root_module, cls):
  13.331 +    cls.add_output_stream_operator()
  13.332 +    ## ipv4-route.h: ns3::Ipv4Route::Ipv4Route(ns3::Ipv4Route const & arg0) [copy constructor]
  13.333 +    cls.add_constructor([param('ns3::Ipv4Route const &', 'arg0')])
  13.334 +    ## ipv4-route.h: ns3::Ipv4Route::Ipv4Route() [constructor]
  13.335 +    cls.add_constructor([])
  13.336 +    ## ipv4-route.h: ns3::Ipv4Address ns3::Ipv4Route::GetDestination() const [member function]
  13.337 +    cls.add_method('GetDestination', 
  13.338 +                   'ns3::Ipv4Address', 
  13.339 +                   [], 
  13.340 +                   is_const=True)
  13.341 +    ## ipv4-route.h: ns3::Ipv4Address ns3::Ipv4Route::GetGateway() const [member function]
  13.342 +    cls.add_method('GetGateway', 
  13.343 +                   'ns3::Ipv4Address', 
  13.344 +                   [], 
  13.345 +                   is_const=True)
  13.346 +    ## ipv4-route.h: ns3::Ptr<ns3::NetDevice> ns3::Ipv4Route::GetOutputDevice() const [member function]
  13.347 +    cls.add_method('GetOutputDevice', 
  13.348 +                   'ns3::Ptr< ns3::NetDevice >', 
  13.349 +                   [], 
  13.350 +                   is_const=True)
  13.351 +    ## ipv4-route.h: ns3::Ipv4Address ns3::Ipv4Route::GetSource() const [member function]
  13.352 +    cls.add_method('GetSource', 
  13.353 +                   'ns3::Ipv4Address', 
  13.354 +                   [], 
  13.355 +                   is_const=True)
  13.356 +    ## ipv4-route.h: void ns3::Ipv4Route::SetDestination(ns3::Ipv4Address dest) [member function]
  13.357 +    cls.add_method('SetDestination', 
  13.358 +                   'void', 
  13.359 +                   [param('ns3::Ipv4Address', 'dest')])
  13.360 +    ## ipv4-route.h: void ns3::Ipv4Route::SetGateway(ns3::Ipv4Address gw) [member function]
  13.361 +    cls.add_method('SetGateway', 
  13.362 +                   'void', 
  13.363 +                   [param('ns3::Ipv4Address', 'gw')])
  13.364 +    ## ipv4-route.h: void ns3::Ipv4Route::SetOutputDevice(ns3::Ptr<ns3::NetDevice> outputDevice) [member function]
  13.365 +    cls.add_method('SetOutputDevice', 
  13.366 +                   'void', 
  13.367 +                   [param('ns3::Ptr< ns3::NetDevice >', 'outputDevice')])
  13.368 +    ## ipv4-route.h: void ns3::Ipv4Route::SetSource(ns3::Ipv4Address src) [member function]
  13.369 +    cls.add_method('SetSource', 
  13.370 +                   'void', 
  13.371 +                   [param('ns3::Ipv4Address', 'src')])
  13.372 +    return
  13.373 +
  13.374  def register_Ns3Ipv6AddressChecker_methods(root_module, cls):
  13.375      ## ipv6-address.h: ns3::Ipv6AddressChecker::Ipv6AddressChecker(ns3::Ipv6AddressChecker const & arg0) [copy constructor]
  13.376      cls.add_constructor([param('ns3::Ipv6AddressChecker const &', 'arg0')])
  13.377 @@ -2219,6 +2332,16 @@
  13.378                     is_static=True)
  13.379      ## udp-socket.h: ns3::UdpSocket::UdpSocket() [constructor]
  13.380      cls.add_constructor([])
  13.381 +    ## udp-socket.h: int ns3::UdpSocket::MulticastJoinGroup(uint32_t interface, ns3::Address const & groupAddress) [member function]
  13.382 +    cls.add_method('MulticastJoinGroup', 
  13.383 +                   'int', 
  13.384 +                   [param('uint32_t', 'interface'), param('ns3::Address const &', 'groupAddress')], 
  13.385 +                   is_pure_virtual=True, is_virtual=True)
  13.386 +    ## udp-socket.h: int ns3::UdpSocket::MulticastLeaveGroup(uint32_t interface, ns3::Address const & groupAddress) [member function]
  13.387 +    cls.add_method('MulticastLeaveGroup', 
  13.388 +                   'int', 
  13.389 +                   [param('uint32_t', 'interface'), param('ns3::Address const &', 'groupAddress')], 
  13.390 +                   is_pure_virtual=True, is_virtual=True)
  13.391      ## udp-socket.h: void ns3::UdpSocket::SetRcvBufSize(uint32_t size) [member function]
  13.392      cls.add_method('SetRcvBufSize', 
  13.393                     'void', 
  13.394 @@ -2229,24 +2352,44 @@
  13.395                     'uint32_t', 
  13.396                     [], 
  13.397                     is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
  13.398 -    ## udp-socket.h: void ns3::UdpSocket::SetIpTtl(uint32_t ipTtl) [member function]
  13.399 +    ## udp-socket.h: void ns3::UdpSocket::SetIpTtl(uint8_t ipTtl) [member function]
  13.400      cls.add_method('SetIpTtl', 
  13.401                     'void', 
  13.402 -                   [param('uint32_t', 'ipTtl')], 
  13.403 +                   [param('uint8_t', 'ipTtl')], 
  13.404                     is_pure_virtual=True, visibility='private', is_virtual=True)
  13.405 -    ## udp-socket.h: uint32_t ns3::UdpSocket::GetIpTtl() const [member function]
  13.406 +    ## udp-socket.h: uint8_t ns3::UdpSocket::GetIpTtl() const [member function]
  13.407      cls.add_method('GetIpTtl', 
  13.408 -                   'uint32_t', 
  13.409 +                   'uint8_t', 
  13.410                     [], 
  13.411                     is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
  13.412 -    ## udp-socket.h: void ns3::UdpSocket::SetIpMulticastTtl(uint32_t ipTtl) [member function]
  13.413 +    ## udp-socket.h: void ns3::UdpSocket::SetIpMulticastTtl(uint8_t ipTtl) [member function]
  13.414      cls.add_method('SetIpMulticastTtl', 
  13.415                     'void', 
  13.416 -                   [param('uint32_t', 'ipTtl')], 
  13.417 +                   [param('uint8_t', 'ipTtl')], 
  13.418                     is_pure_virtual=True, visibility='private', is_virtual=True)
  13.419 -    ## udp-socket.h: uint32_t ns3::UdpSocket::GetIpMulticastTtl() const [member function]
  13.420 +    ## udp-socket.h: uint8_t ns3::UdpSocket::GetIpMulticastTtl() const [member function]
  13.421      cls.add_method('GetIpMulticastTtl', 
  13.422 -                   'uint32_t', 
  13.423 +                   'uint8_t', 
  13.424 +                   [], 
  13.425 +                   is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
  13.426 +    ## udp-socket.h: void ns3::UdpSocket::SetIpMulticastIf(int32_t ipIf) [member function]
  13.427 +    cls.add_method('SetIpMulticastIf', 
  13.428 +                   'void', 
  13.429 +                   [param('int32_t', 'ipIf')], 
  13.430 +                   is_pure_virtual=True, visibility='private', is_virtual=True)
  13.431 +    ## udp-socket.h: int32_t ns3::UdpSocket::GetIpMulticastIf() const [member function]
  13.432 +    cls.add_method('GetIpMulticastIf', 
  13.433 +                   'int32_t', 
  13.434 +                   [], 
  13.435 +                   is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
  13.436 +    ## udp-socket.h: void ns3::UdpSocket::SetIpMulticastLoop(bool loop) [member function]
  13.437 +    cls.add_method('SetIpMulticastLoop', 
  13.438 +                   'void', 
  13.439 +                   [param('bool', 'loop')], 
  13.440 +                   is_pure_virtual=True, visibility='private', is_virtual=True)
  13.441 +    ## udp-socket.h: bool ns3::UdpSocket::GetIpMulticastLoop() const [member function]
  13.442 +    cls.add_method('GetIpMulticastLoop', 
  13.443 +                   'bool', 
  13.444                     [], 
  13.445                     is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
  13.446      ## udp-socket.h: void ns3::UdpSocket::SetMtuDiscover(bool discover) [member function]
  13.447 @@ -2572,6 +2715,8 @@
  13.448      return
  13.449  
  13.450  def register_Ns3Ipv4_methods(root_module, cls):
  13.451 +    ## ipv4.h: ns3::Ipv4::IF_ANY [variable]
  13.452 +    cls.add_static_attribute('IF_ANY', 'uint32_t const', is_const=True)
  13.453      ## ipv4.h: ns3::Ipv4::Ipv4(ns3::Ipv4 const & arg0) [copy constructor]
  13.454      cls.add_constructor([param('ns3::Ipv4 const &', 'arg0')])
  13.455      ## ipv4.h: static ns3::TypeId ns3::Ipv4::GetTypeId() [member function]
  13.456 @@ -2581,81 +2726,16 @@
  13.457                     is_static=True)
  13.458      ## ipv4.h: ns3::Ipv4::Ipv4() [constructor]
  13.459      cls.add_constructor([])
  13.460 -    ## ipv4.h: void ns3::Ipv4::AddRoutingProtocol(ns3::Ptr<ns3::Ipv4RoutingProtocol> routingProtocol, int16_t priority) [member function]
  13.461 -    cls.add_method('AddRoutingProtocol', 
  13.462 +    ## ipv4.h: void ns3::Ipv4::SetRoutingProtocol(ns3::Ptr<ns3::Ipv4RoutingProtocol> routingProtocol) [member function]
  13.463 +    cls.add_method('SetRoutingProtocol', 
  13.464                     'void', 
  13.465 -                   [param('ns3::Ptr< ns3::Ipv4RoutingProtocol >', 'routingProtocol'), param('int16_t', 'priority')], 
  13.466 +                   [param('ns3::Ptr< ns3::Ipv4RoutingProtocol >', 'routingProtocol')], 
  13.467                     is_pure_virtual=True, is_virtual=True)
  13.468 -    ## ipv4.h: void ns3::Ipv4::AddHostRouteTo(ns3::Ipv4Address dest, ns3::Ipv4Address nextHop, uint32_t interface) [member function]
  13.469 -    cls.add_method('AddHostRouteTo', 
  13.470 -                   'void', 
  13.471 -                   [param('ns3::Ipv4Address', 'dest'), param('ns3::Ipv4Address', 'nextHop'), param('uint32_t', 'interface')], 
  13.472 -                   is_pure_virtual=True, is_virtual=True)
  13.473 -    ## ipv4.h: void ns3::Ipv4::AddHostRouteTo(ns3::Ipv4Address dest, uint32_t interface) [member function]
  13.474 -    cls.add_method('AddHostRouteTo', 
  13.475 -                   'void', 
  13.476 -                   [param('ns3::Ipv4Address', 'dest'), param('uint32_t', 'interface')], 
  13.477 -                   is_pure_virtual=True, is_virtual=True)
  13.478 -    ## ipv4.h: void ns3::Ipv4::AddNetworkRouteTo(ns3::Ipv4Address network, ns3::Ipv4Mask networkMask, ns3::Ipv4Address nextHop, uint32_t interface) [member function]
  13.479 -    cls.add_method('AddNetworkRouteTo', 
  13.480 -                   'void', 
  13.481 -                   [param('ns3::Ipv4Address', 'network'), param('ns3::Ipv4Mask', 'networkMask'), param('ns3::Ipv4Address', 'nextHop'), param('uint32_t', 'interface')], 
  13.482 -                   is_pure_virtual=True, is_virtual=True)
  13.483 -    ## ipv4.h: void ns3::Ipv4::AddNetworkRouteTo(ns3::Ipv4Address network, ns3::Ipv4Mask networkMask, uint32_t interface) [member function]
  13.484 -    cls.add_method('AddNetworkRouteTo', 
  13.485 -                   'void', 
  13.486 -                   [param('ns3::Ipv4Address', 'network'), param('ns3::Ipv4Mask', 'networkMask'), param('uint32_t', 'interface')], 
  13.487 -                   is_pure_virtual=True, is_virtual=True)
  13.488 -    ## ipv4.h: void ns3::Ipv4::SetDefaultRoute(ns3::Ipv4Address nextHop, uint32_t interface) [member function]
  13.489 -    cls.add_method('SetDefaultRoute', 
  13.490 -                   'void', 
  13.491 -                   [param('ns3::Ipv4Address', 'nextHop'), param('uint32_t', 'interface')], 
  13.492 -                   is_pure_virtual=True, is_virtual=True)
  13.493 -    ## ipv4.h: uint32_t ns3::Ipv4::GetNRoutes() [member function]
  13.494 -    cls.add_method('GetNRoutes', 
  13.495 -                   'uint32_t', 
  13.496 -                   [], 
  13.497 -                   is_pure_virtual=True, is_virtual=True)
  13.498 -    ## ipv4.h: ns3::Ipv4Route ns3::Ipv4::GetRoute(uint32_t i) [member function]
  13.499 -    cls.add_method('GetRoute', 
  13.500 -                   'ns3::Ipv4Route', 
  13.501 -                   [param('uint32_t', 'i')], 
  13.502 -                   is_pure_virtual=True, is_virtual=True)
  13.503 -    ## ipv4.h: void ns3::Ipv4::RemoveRoute(uint32_t i) [member function]
  13.504 -    cls.add_method('RemoveRoute', 
  13.505 -                   'void', 
  13.506 -                   [param('uint32_t', 'i')], 
  13.507 -                   is_pure_virtual=True, is_virtual=True)
  13.508 -    ## ipv4.h: void ns3::Ipv4::AddMulticastRoute(ns3::Ipv4Address origin, ns3::Ipv4Address group, uint32_t inputInterface, std::vector<unsigned int, std::allocator<unsigned int> > outputInterfaces) [member function]
  13.509 -    cls.add_method('AddMulticastRoute', 
  13.510 -                   'void', 
  13.511 -                   [param('ns3::Ipv4Address', 'origin'), param('ns3::Ipv4Address', 'group'), param('uint32_t', 'inputInterface'), param('std::vector< unsigned int >', 'outputInterfaces')], 
  13.512 -                   is_pure_virtual=True, is_virtual=True)
  13.513 -    ## ipv4.h: void ns3::Ipv4::RemoveMulticastRoute(ns3::Ipv4Address origin, ns3::Ipv4Address group, uint32_t inputInterface) [member function]
  13.514 -    cls.add_method('RemoveMulticastRoute', 
  13.515 -                   'void', 
  13.516 -                   [param('ns3::Ipv4Address', 'origin'), param('ns3::Ipv4Address', 'group'), param('uint32_t', 'inputInterface')], 
  13.517 -                   is_pure_virtual=True, is_virtual=True)
  13.518 -    ## ipv4.h: void ns3::Ipv4::SetDefaultMulticastRoute(uint32_t outputInterface) [member function]
  13.519 -    cls.add_method('SetDefaultMulticastRoute', 
  13.520 -                   'void', 
  13.521 -                   [param('uint32_t', 'outputInterface')], 
  13.522 -                   is_pure_virtual=True, is_virtual=True)
  13.523 -    ## ipv4.h: uint32_t ns3::Ipv4::GetNMulticastRoutes() const [member function]
  13.524 -    cls.add_method('GetNMulticastRoutes', 
  13.525 -                   'uint32_t', 
  13.526 +    ## ipv4.h: ns3::Ptr<ns3::Ipv4RoutingProtocol> ns3::Ipv4::GetRoutingProtocol() const [member function]
  13.527 +    cls.add_method('GetRoutingProtocol', 
  13.528 +                   'ns3::Ptr< ns3::Ipv4RoutingProtocol >', 
  13.529                     [], 
  13.530                     is_pure_virtual=True, is_const=True, is_virtual=True)
  13.531 -    ## ipv4.h: ns3::Ipv4MulticastRoute ns3::Ipv4::GetMulticastRoute(uint32_t i) const [member function]
  13.532 -    cls.add_method('GetMulticastRoute', 
  13.533 -                   'ns3::Ipv4MulticastRoute', 
  13.534 -                   [param('uint32_t', 'i')], 
  13.535 -                   is_pure_virtual=True, is_const=True, is_virtual=True)
  13.536 -    ## ipv4.h: void ns3::Ipv4::RemoveMulticastRoute(uint32_t i) [member function]
  13.537 -    cls.add_method('RemoveMulticastRoute', 
  13.538 -                   'void', 
  13.539 -                   [param('uint32_t', 'i')], 
  13.540 -                   is_pure_virtual=True, is_virtual=True)
  13.541      ## ipv4.h: uint32_t ns3::Ipv4::AddInterface(ns3::Ptr<ns3::NetDevice> device) [member function]
  13.542      cls.add_method('AddInterface', 
  13.543                     'uint32_t', 
  13.544 @@ -2666,36 +2746,26 @@
  13.545                     'uint32_t', 
  13.546                     [], 
  13.547                     is_pure_virtual=True, is_const=True, is_virtual=True)
  13.548 -    ## ipv4.h: uint32_t ns3::Ipv4::FindInterfaceForAddr(ns3::Ipv4Address addr) const [member function]
  13.549 -    cls.add_method('FindInterfaceForAddr', 
  13.550 -                   'uint32_t', 
  13.551 -                   [param('ns3::Ipv4Address', 'addr')], 
  13.552 +    ## ipv4.h: int32_t ns3::Ipv4::GetInterfaceForAddress(ns3::Ipv4Address address) const [member function]
  13.553 +    cls.add_method('GetInterfaceForAddress', 
  13.554 +                   'int32_t', 
  13.555 +                   [param('ns3::Ipv4Address', 'address')], 
  13.556                     is_pure_virtual=True, is_const=True, is_virtual=True)
  13.557 -    ## ipv4.h: uint32_t ns3::Ipv4::FindInterfaceForAddr(ns3::Ipv4Address addr, ns3::Ipv4Mask mask) const [member function]
  13.558 -    cls.add_method('FindInterfaceForAddr', 
  13.559 -                   'uint32_t', 
  13.560 -                   [param('ns3::Ipv4Address', 'addr'), param('ns3::Ipv4Mask', 'mask')], 
  13.561 +    ## ipv4.h: int32_t ns3::Ipv4::GetInterfaceForPrefix(ns3::Ipv4Address address, ns3::Ipv4Mask mask) const [member function]
  13.562 +    cls.add_method('GetInterfaceForPrefix', 
  13.563 +                   'int32_t', 
  13.564 +                   [param('ns3::Ipv4Address', 'address'), param('ns3::Ipv4Mask', 'mask')], 
  13.565                     is_pure_virtual=True, is_const=True, is_virtual=True)
  13.566 -    ## ipv4.h: int32_t ns3::Ipv4::FindInterfaceForDevice(ns3::Ptr<ns3::NetDevice> nd) const [member function]
  13.567 -    cls.add_method('FindInterfaceForDevice', 
  13.568 -                   'int32_t', 
  13.569 -                   [param('ns3::Ptr< ns3::NetDevice >', 'nd')], 
  13.570 -                   is_pure_virtual=True, is_const=True, is_virtual=True)
  13.571 -    ## ipv4.h: ns3::Ptr<ns3::NetDevice> ns3::Ipv4::GetNetDevice(uint32_t i) [member function]
  13.572 +    ## ipv4.h: ns3::Ptr<ns3::NetDevice> ns3::Ipv4::GetNetDevice(uint32_t interface) [member function]
  13.573      cls.add_method('GetNetDevice', 
  13.574                     'ns3::Ptr< ns3::NetDevice >', 
  13.575 -                   [param('uint32_t', 'i')], 
  13.576 +                   [param('uint32_t', 'interface')], 
  13.577                     is_pure_virtual=True, is_virtual=True)
  13.578 -    ## ipv4.h: void ns3::Ipv4::JoinMulticastGroup(ns3::Ipv4Address origin, ns3::Ipv4Address group) [member function]
  13.579 -    cls.add_method('JoinMulticastGroup', 
  13.580 -                   'void', 
  13.581 -                   [param('ns3::Ipv4Address', 'origin'), param('ns3::Ipv4Address', 'group')], 
  13.582 -                   is_pure_virtual=True, is_virtual=True)
  13.583 -    ## ipv4.h: void ns3::Ipv4::LeaveMulticastGroup(ns3::Ipv4Address origin, ns3::Ipv4Address group) [member function]
  13.584 -    cls.add_method('LeaveMulticastGroup', 
  13.585 -                   'void', 
  13.586 -                   [param('ns3::Ipv4Address', 'origin'), param('ns3::Ipv4Address', 'group')], 
  13.587 -                   is_pure_virtual=True, is_virtual=True)
  13.588 +    ## ipv4.h: int32_t ns3::Ipv4::GetInterfaceForDevice(ns3::Ptr<const ns3::NetDevice> device) const [member function]
  13.589 +    cls.add_method('GetInterfaceForDevice', 
  13.590 +                   'int32_t', 
  13.591 +                   [param('ns3::Ptr< ns3::NetDevice const >', 'device')], 
  13.592 +                   is_pure_virtual=True, is_const=True, is_virtual=True)
  13.593      ## ipv4.h: uint32_t ns3::Ipv4::AddAddress(uint32_t interface, ns3::Ipv4InterfaceAddress address) [member function]
  13.594      cls.add_method('AddAddress', 
  13.595                     'uint32_t', 
  13.596 @@ -2711,51 +2781,46 @@
  13.597                     'ns3::Ipv4InterfaceAddress', 
  13.598                     [param('uint32_t', 'interface'), param('uint32_t', 'addressIndex')], 
  13.599                     is_pure_virtual=True, is_const=True, is_virtual=True)
  13.600 -    ## ipv4.h: void ns3::Ipv4::SetMetric(uint32_t i, uint16_t metric) [member function]
  13.601 +    ## ipv4.h: void ns3::Ipv4::SetMetric(uint32_t interface, uint16_t metric) [member function]
  13.602      cls.add_method('SetMetric', 
  13.603                     'void', 
  13.604 -                   [param('uint32_t', 'i'), param('uint16_t', 'metric')], 
  13.605 +                   [param('uint32_t', 'interface'), param('uint16_t', 'metric')], 
  13.606                     is_pure_virtual=True, is_virtual=True)
  13.607 -    ## ipv4.h: uint16_t ns3::Ipv4::GetMetric(uint32_t i) const [member function]
  13.608 +    ## ipv4.h: uint16_t ns3::Ipv4::GetMetric(uint32_t interface) const [member function]
  13.609      cls.add_method('GetMetric', 
  13.610                     'uint16_t', 
  13.611 -                   [param('uint32_t', 'i')], 
  13.612 +                   [param('uint32_t', 'interface')], 
  13.613                     is_pure_virtual=True, is_const=True, is_virtual=True)
  13.614 -    ## ipv4.h: ns3::Ipv4Address ns3::Ipv4::GetSourceAddress(ns3::Ipv4Address destination) const [member function]
  13.615 -    cls.add_method('GetSourceAddress', 
  13.616 -                   'ns3::Ipv4Address', 
  13.617 -                   [param('ns3::Ipv4Address', 'destination')], 
  13.618 -                   is_pure_virtual=True, is_const=True, is_virtual=True)
  13.619 -    ## ipv4.h: bool ns3::Ipv4::GetInterfaceForDestination(ns3::Ipv4Address dest, uint32_t & interface) const [member function]
  13.620 -    cls.add_method('GetInterfaceForDestination', 
  13.621 -                   'bool', 
  13.622 -                   [param('ns3::Ipv4Address', 'dest'), param('uint32_t &', 'interface')], 
  13.623 -                   is_pure_virtual=True, is_const=True, is_virtual=True)
  13.624 -    ## ipv4.h: uint16_t ns3::Ipv4::GetMtu(uint32_t i) const [member function]
  13.625 +    ## ipv4.h: uint16_t ns3::Ipv4::GetMtu(uint32_t interface) const [member function]
  13.626      cls.add_method('GetMtu', 
  13.627                     'uint16_t', 
  13.628 -                   [param('uint32_t', 'i')], 
  13.629 +                   [param('uint32_t', 'interface')], 
  13.630                     is_pure_virtual=True, is_const=True, is_virtual=True)
  13.631 -    ## ipv4.h: bool ns3::Ipv4::IsUp(uint32_t i) const [member function]
  13.632 +    ## ipv4.h: bool ns3::Ipv4::IsUp(uint32_t interface) const [member function]
  13.633      cls.add_method('IsUp', 
  13.634                     'bool', 
  13.635 -                   [param('uint32_t', 'i')], 
  13.636 +                   [param('uint32_t', 'interface')], 
  13.637                     is_pure_virtual=True, is_const=True, is_virtual=True)
  13.638 -    ## ipv4.h: void ns3::Ipv4::SetUp(uint32_t i) [member function]
  13.639 +    ## ipv4.h: void ns3::Ipv4::SetUp(uint32_t interface) [member function]
  13.640      cls.add_method('SetUp', 
  13.641                     'void', 
  13.642 -                   [param('uint32_t', 'i')], 
  13.643 +                   [param('uint32_t', 'interface')], 
  13.644                     is_pure_virtual=True, is_virtual=True)
  13.645 -    ## ipv4.h: void ns3::Ipv4::SetDown(uint32_t i) [member function]
  13.646 +    ## ipv4.h: void ns3::Ipv4::SetDown(uint32_t interface) [member function]
  13.647      cls.add_method('SetDown', 
  13.648                     'void', 
  13.649 -                   [param('uint32_t', 'i')], 
  13.650 +                   [param('uint32_t', 'interface')], 
  13.651                     is_pure_virtual=True, is_virtual=True)
  13.652 -    ## ipv4.h: uint32_t ns3::Ipv4::GetInterfaceByAddress(ns3::Ipv4Address addr, ns3::Ipv4Mask mask=ns3::Ipv4Mask(((const char*)"255.255.255.255"))) [member function]
  13.653 -    cls.add_method('GetInterfaceByAddress', 
  13.654 -                   'uint32_t', 
  13.655 -                   [param('ns3::Ipv4Address', 'addr'), param('ns3::Ipv4Mask', 'mask', default_value='ns3::Ipv4Mask(((const char*)"255.255.255.255"))')], 
  13.656 -                   is_virtual=True)
  13.657 +    ## ipv4.h: void ns3::Ipv4::SetIpForward(bool forward) [member function]
  13.658 +    cls.add_method('SetIpForward', 
  13.659 +                   'void', 
  13.660 +                   [param('bool', 'forward')], 
  13.661 +                   is_pure_virtual=True, visibility='private', is_virtual=True)
  13.662 +    ## ipv4.h: bool ns3::Ipv4::GetIpForward() const [member function]
  13.663 +    cls.add_method('GetIpForward', 
  13.664 +                   'bool', 
  13.665 +                   [], 
  13.666 +                   is_pure_virtual=True, is_const=True, visibility='private', is_virtual=True)
  13.667      return
  13.668  
  13.669  def register_Ns3Ipv4RawSocketFactory_methods(root_module, cls):
  13.670 @@ -2771,22 +2836,122 @@
  13.671      return
  13.672  
  13.673  def register_Ns3Ipv4RoutingProtocol_methods(root_module, cls):
  13.674 -    ## ipv4.h: ns3::Ipv4RoutingProtocol::INTERFACE_ANY [variable]
  13.675 -    cls.add_static_attribute('INTERFACE_ANY', 'uint32_t const', is_const=True)
  13.676 -    ## ipv4.h: ns3::Ipv4RoutingProtocol::Ipv4RoutingProtocol(ns3::Ipv4RoutingProtocol const & arg0) [copy constructor]
  13.677 +    ## ipv4-routing-protocol.h: ns3::Ipv4RoutingProtocol::Ipv4RoutingProtocol(ns3::Ipv4RoutingProtocol const & arg0) [copy constructor]
  13.678      cls.add_constructor([param('ns3::Ipv4RoutingProtocol const &', 'arg0')])
  13.679 -    ## ipv4.h: ns3::Ipv4RoutingProtocol::Ipv4RoutingProtocol() [constructor]
  13.680 +    ## ipv4-routing-protocol.h: ns3::Ipv4RoutingProtocol::Ipv4RoutingProtocol() [constructor]
  13.681      cls.add_constructor([])
  13.682 -    ## ipv4.h: bool ns3::Ipv4RoutingProtocol::RequestRoute(uint32_t interface, ns3::Ipv4Header const & ipHeader, ns3::Ptr<ns3::Packet> packet, ns3::Callback<void,bool,const ns3::Ipv4Route&,ns3::Ptr<ns3::Packet>,const ns3::Ipv4Header&,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> routeReply) [member function]
  13.683 -    cls.add_method('RequestRoute', 
  13.684 +    ## ipv4-routing-protocol.h: static ns3::TypeId ns3::Ipv4RoutingProtocol::GetTypeId() [member function]
  13.685 +    cls.add_method('GetTypeId', 
  13.686 +                   'ns3::TypeId', 
  13.687 +                   [], 
  13.688 +                   is_static=True)
  13.689 +    ## ipv4-routing-protocol.h: ns3::Ptr<ns3::Ipv4Route> ns3::Ipv4RoutingProtocol::RouteOutput(ns3::Ipv4Header const & header, uint32_t oif, ns3::Socket::SocketErrno & sockerr) [member function]
  13.690 +    cls.add_method('RouteOutput', 
  13.691 +                   'ns3::Ptr< ns3::Ipv4Route >', 
  13.692 +                   [param('ns3::Ipv4Header const &', 'header'), param('uint32_t', 'oif'), param('ns3::Socket::SocketErrno &', 'sockerr')], 
  13.693 +                   is_pure_virtual=True, is_virtual=True)
  13.694 +    ## ipv4-routing-protocol.h: bool ns3::Ipv4RoutingProtocol::RouteInput(ns3::Ptr<ns3::Packet const> p, ns3::Ipv4Header const & header, ns3::Ptr<const ns3::NetDevice> idev, ns3::Callback<void,ns3::Ptr<ns3::Ipv4Route>,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> ucb, ns3::Callback<void,ns3::Ptr<ns3::Ipv4MulticastRoute>,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> mcb, ns3::Callback<void,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,unsigned int,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> lcb, ns3::Callback<void,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> ecb) [member function]
  13.695 +    cls.add_method('RouteInput', 
  13.696                     'bool', 
  13.697 -                   [param('uint32_t', 'interface'), param('ns3::Ipv4Header const &', 'ipHeader'), param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::Callback< void, bool, ns3::Ipv4Route const &, ns3::Ptr< ns3::Packet >, ns3::Ipv4Header const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'routeReply')], 
  13.698 +                   [param('ns3::Ptr< ns3::Packet const >', 'p'), param('ns3::Ipv4Header const &', 'header'), param('ns3::Ptr< ns3::NetDevice const >', 'idev'), param('ns3::Callback< void, ns3::Ptr< ns3::Ipv4Route >, ns3::Ptr< ns3::Packet const >, ns3::Ipv4Header const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ucb'), param('ns3::Callback< void, ns3::Ptr< ns3::Ipv4MulticastRoute >, ns3::Ptr< ns3::Packet const >, ns3::Ipv4Header const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'mcb'), param('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::Ipv4Header const &, unsigned int, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'lcb'), param('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::Ipv4Header const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ecb')], 
  13.699                     is_pure_virtual=True, is_virtual=True)
  13.700 -    ## ipv4.h: bool ns3::Ipv4RoutingProtocol::RequestInterface(ns3::Ipv4Address destination, uint32_t & interface) [member function]
  13.701 -    cls.add_method('RequestInterface', 
  13.702 +    return
  13.703 +
  13.704 +def register_Ns3Ipv4StaticRouting_methods(root_module, cls):
  13.705 +    ## ipv4-static-routing.h: ns3::Ipv4StaticRouting::Ipv4StaticRouting(ns3::Ipv4StaticRouting const & arg0) [copy constructor]
  13.706 +    cls.add_constructor([param('ns3::Ipv4StaticRouting const &', 'arg0')])
  13.707 +    ## ipv4-static-routing.h: ns3::Ipv4StaticRouting::Ipv4StaticRouting() [constructor]
  13.708 +    cls.add_constructor([])
  13.709 +    ## ipv4-static-routing.h: static ns3::TypeId ns3::Ipv4StaticRouting::GetTypeId() [member function]
  13.710 +    cls.add_method('GetTypeId', 
  13.711 +                   'ns3::TypeId', 
  13.712 +                   [], 
  13.713 +                   is_static=True)
  13.714 +    ## ipv4-static-routing.h: void ns3::Ipv4StaticRouting::AddHostRouteTo(ns3::Ipv4Address dest, ns3::Ipv4Address nextHop, uint32_t interface) [member function]
  13.715 +    cls.add_method('AddHostRouteTo', 
  13.716 +                   'void', 
  13.717 +                   [param('ns3::Ipv4Address', 'dest'), param('ns3::Ipv4Address', 'nextHop'), param('uint32_t', 'interface')], 
  13.718 +                   is_pure_virtual=True, is_virtual=True)
  13.719 +    ## ipv4-static-routing.h: void ns3::Ipv4StaticRouting::AddHostRouteTo(ns3::Ipv4Address dest, uint32_t interface) [member function]
  13.720 +    cls.add_method('AddHostRouteTo', 
  13.721 +                   'void', 
  13.722 +                   [param('ns3::Ipv4Address', 'dest'), param('uint32_t', 'interface')], 
  13.723 +                   is_pure_virtual=True, is_virtual=True)
  13.724 +    ## ipv4-static-routing.h: void ns3::Ipv4StaticRouting::AddNetworkRouteTo(ns3::Ipv4Address network, ns3::Ipv4Mask networkMask, ns3::Ipv4Address nextHop, uint32_t interface) [member function]
  13.725 +    cls.add_method('AddNetworkRouteTo', 
  13.726 +                   'void', 
  13.727 +                   [param('ns3::Ipv4Address', 'network'), param('ns3::Ipv4Mask', 'networkMask'), param('ns3::Ipv4Address', 'nextHop'), param('uint32_t', 'interface')], 
  13.728 +                   is_pure_virtual=True, is_virtual=True)
  13.729 +    ## ipv4-static-routing.h: void ns3::Ipv4StaticRouting::AddNetworkRouteTo(ns3::Ipv4Address network, ns3::Ipv4Mask networkMask, uint32_t interface) [member function]
  13.730 +    cls.add_method('AddNetworkRouteTo', 
  13.731 +                   'void', 
  13.732 +                   [param('ns3::Ipv4Address', 'network'), param('ns3::Ipv4Mask', 'networkMask'), param('uint32_t', 'interface')], 
  13.733 +                   is_pure_virtual=True, is_virtual=True)
  13.734 +    ## ipv4-static-routing.h: void ns3::Ipv4StaticRouting::SetDefaultRoute(ns3::Ipv4Address nextHop, uint32_t interface) [member function]
  13.735 +    cls.add_method('SetDefaultRoute', 
  13.736 +                   'void', 
  13.737 +                   [param('ns3::Ipv4Address', 'nextHop'), param('uint32_t', 'interface')], 
  13.738 +                   is_pure_virtual=True, is_virtual=True)
  13.739 +    ## ipv4-static-routing.h: uint32_t ns3::Ipv4StaticRouting::GetNRoutes() [member function]
  13.740 +    cls.add_method('GetNRoutes', 
  13.741 +                   'uint32_t', 
  13.742 +                   [], 
  13.743 +                   is_pure_virtual=True, is_virtual=True)
  13.744 +    ## ipv4-static-routing.h: ns3::Ipv4RoutingTableEntry ns3::Ipv4StaticRouting::GetDefaultRoute() [member function]
  13.745 +    cls.add_method('GetDefaultRoute', 
  13.746 +                   'ns3::Ipv4RoutingTableEntry', 
  13.747 +                   [], 
  13.748 +                   is_pure_virtual=True, is_virtual=True)
  13.749 +    ## ipv4-static-routing.h: ns3::Ipv4RoutingTableEntry ns3::Ipv4StaticRouting::GetRoute(uint32_t i) [member function]
  13.750 +    cls.add_method('GetRoute', 
  13.751 +                   'ns3::Ipv4RoutingTableEntry', 
  13.752 +                   [param('uint32_t', 'i')], 
  13.753 +                   is_pure_virtual=True, is_virtual=True)
  13.754 +    ## ipv4-static-routing.h: void ns3::Ipv4StaticRouting::RemoveRoute(uint32_t i) [member function]
  13.755 +    cls.add_method('RemoveRoute', 
  13.756 +                   'void', 
  13.757 +                   [param('uint32_t', 'i')], 
  13.758 +                   is_pure_virtual=True, is_virtual=True)
  13.759 +    ## ipv4-static-routing.h: void ns3::Ipv4StaticRouting::AddMulticastRoute(ns3::Ipv4Address origin, ns3::Ipv4Address group, uint32_t inputInterface, std::vector<unsigned int, std::allocator<unsigned int> > outputInterfaces) [member function]
  13.760 +    cls.add_method('AddMulticastRoute', 
  13.761 +                   'void', 
  13.762 +                   [param('ns3::Ipv4Address', 'origin'), param('ns3::Ipv4Address', 'group'), param('uint32_t', 'inputInterface'), param('std::vector< unsigned int >', 'outputInterfaces')], 
  13.763 +                   is_pure_virtual=True, is_virtual=True)
  13.764 +    ## ipv4-static-routing.h: void ns3::Ipv4StaticRouting::SetDefaultMulticastRoute(uint32_t outputInterface) [member function]
  13.765 +    cls.add_method('SetDefaultMulticastRoute', 
  13.766 +                   'void', 
  13.767 +                   [param('uint32_t', 'outputInterface')], 
  13.768 +                   is_pure_virtual=True, is_virtual=True)
  13.769 +    ## ipv4-static-routing.h: uint32_t ns3::Ipv4StaticRouting::GetNMulticastRoutes() const [member function]
  13.770 +    cls.add_method('GetNMulticastRoutes', 
  13.771 +                   'uint32_t', 
  13.772 +                   [], 
  13.773 +                   is_pure_virtual=True, is_const=True, is_virtual=True)
  13.774 +    ## ipv4-static-routing.h: ns3::Ipv4MulticastRoutingTableEntry ns3::Ipv4StaticRouting::GetMulticastRoute(uint32_t i) const [member function]
  13.775 +    cls.add_method('GetMulticastRoute', 
  13.776 +                   'ns3::Ipv4MulticastRoutingTableEntry', 
  13.777 +                   [param('uint32_t', 'i')], 
  13.778 +                   is_pure_virtual=True, is_const=True, is_virtual=True)
  13.779 +    ## ipv4-static-routing.h: bool ns3::Ipv4StaticRouting::RemoveMulticastRoute(ns3::Ipv4Address origin, ns3::Ipv4Address group, uint32_t inputInterface) [member function]
  13.780 +    cls.add_method('RemoveMulticastRoute', 
  13.781                     'bool', 
  13.782 -                   [param('ns3::Ipv4Address', 'destination'), param('uint32_t &', 'interface')], 
  13.783 +                   [param('ns3::Ipv4Address', 'origin'), param('ns3::Ipv4Address', 'group'), param('uint32_t', 'inputInterface')], 
  13.784                     is_pure_virtual=True, is_virtual=True)
  13.785 +    ## ipv4-static-routing.h: void ns3::Ipv4StaticRouting::RemoveMulticastRoute(uint32_t index) [member function]
  13.786 +    cls.add_method('RemoveMulticastRoute', 
  13.787 +                   'void', 
  13.788 +                   [param('uint32_t', 'index')], 
  13.789 +                   is_pure_virtual=True, is_virtual=True)
  13.790 +    ## ipv4-static-routing.h: void ns3::Ipv4StaticRouting::SetNode(ns3::Ptr<ns3::Node> node) [member function]
  13.791 +    cls.add_method('SetNode', 
  13.792 +                   'void', 
  13.793 +                   [param('ns3::Ptr< ns3::Node >', 'node')], 
  13.794 +                   is_pure_virtual=True, is_virtual=True)
  13.795 +    ## ipv4-static-routing.h: ns3::Ptr<ns3::Node> ns3::Ipv4StaticRouting::GetNode() const [member function]
  13.796 +    cls.add_method('GetNode', 
  13.797 +                   'ns3::Ptr< ns3::Node >', 
  13.798 +                   [], 
  13.799 +                   is_pure_virtual=True, is_const=True, is_virtual=True)
  13.800      return
  13.801  
  13.802  def register_Ns3NetDevice_methods(root_module, cls):
  13.803 @@ -3177,6 +3342,33 @@
  13.804                     visibility='protected', is_virtual=True)
  13.805      return
  13.806  
  13.807 +def register_Ns3Ipv4ListRouting_methods(root_module, cls):
  13.808 +    ## ipv4-list-routing.h: ns3::Ipv4ListRouting::Ipv4ListRouting(ns3::Ipv4ListRouting const & arg0) [copy constructor]
  13.809 +    cls.add_constructor([param('ns3::Ipv4ListRouting const &', 'arg0')])
  13.810 +    ## ipv4-list-routing.h: ns3::Ipv4ListRouting::Ipv4ListRouting() [constructor]
  13.811 +    cls.add_constructor([])
  13.812 +    ## ipv4-list-routing.h: static ns3::TypeId ns3::Ipv4ListRouting::GetTypeId() [member function]
  13.813 +    cls.add_method('GetTypeId', 
  13.814 +                   'ns3::TypeId', 
  13.815 +                   [], 
  13.816 +                   is_static=True)
  13.817 +    ## ipv4-list-routing.h: void ns3::Ipv4ListRouting::AddRoutingProtocol(ns3::Ptr<ns3::Ipv4RoutingProtocol> routingProtocol, int16_t priority) [member function]
  13.818 +    cls.add_method('AddRoutingProtocol', 
  13.819 +                   'void', 
  13.820 +                   [param('ns3::Ptr< ns3::Ipv4RoutingProtocol >', 'routingProtocol'), param('int16_t', 'priority')], 
  13.821 +                   is_pure_virtual=True, is_virtual=True)
  13.822 +    ## ipv4-list-routing.h: uint32_t ns3::Ipv4ListRouting::GetNRoutingProtocols() const [member function]
  13.823 +    cls.add_method('GetNRoutingProtocols', 
  13.824 +                   'uint32_t', 
  13.825 +                   [], 
  13.826 +                   is_pure_virtual=True, is_const=True, is_virtual=True)
  13.827 +    ## ipv4-list-routing.h: ns3::Ptr<ns3::Ipv4RoutingProtocol> ns3::Ipv4ListRouting::GetRoutingProtocol(uint32_t index, int16_t & priority) const [member function]
  13.828 +    cls.add_method('GetRoutingProtocol', 
  13.829 +                   'ns3::Ptr< ns3::Ipv4RoutingProtocol >', 
  13.830 +                   [param('uint32_t', 'index'), param('int16_t &', 'priority')], 
  13.831 +                   is_pure_virtual=True, is_const=True, is_virtual=True)
  13.832 +    return
  13.833 +
  13.834  def register_functions(root_module):
  13.835      module = root_module
  13.836      ## address.h: extern ns3::Ptr<ns3::AttributeChecker const> ns3::MakeAddressChecker() [free function]
  13.837 @@ -3237,6 +3429,7 @@
  13.838                          [param('ns3::Buffer::Iterator &', 'i'), param('ns3::Mac48Address', 'ad')])
  13.839      register_functions_ns3_Config(module.get_submodule('Config'), root_module)
  13.840      register_functions_ns3_TimeStepPrecision(module.get_submodule('TimeStepPrecision'), root_module)
  13.841 +    register_functions_ns3_addressUtils(module.get_submodule('addressUtils'), root_module)
  13.842      register_functions_ns3_internal(module.get_submodule('internal'), root_module)
  13.843      register_functions_ns3_olsr(module.get_submodule('olsr'), root_module)
  13.844      return
  13.845 @@ -3247,6 +3440,13 @@
  13.846  def register_functions_ns3_TimeStepPrecision(module, root_module):
  13.847      return
  13.848  
  13.849 +def register_functions_ns3_addressUtils(module, root_module):
  13.850 +    ## address-utils.h: extern bool ns3::addressUtils::IsMulticast(ns3::Address const & ad) [free function]
  13.851 +    module.add_function('IsMulticast', 
  13.852 +                        'bool', 
  13.853 +                        [param('ns3::Address const &', 'ad')])
  13.854 +    return
  13.855 +
  13.856  def register_functions_ns3_internal(module, root_module):
  13.857      return
  13.858  
    14.1 --- a/bindings/python/ns3_module_olsr.py	Sat May 30 17:36:50 2009 +0100
    14.2 +++ b/bindings/python/ns3_module_olsr.py	Sat May 30 17:37:38 2009 +0100
    14.3 @@ -1,4 +1,4 @@
    14.4 -from pybindgen import Module, FileCodeSink, param, retval, cppclass
    14.5 +from pybindgen import Module, FileCodeSink, param, retval, cppclass, typehandlers
    14.6  
    14.7  def register_types(module):
    14.8      root_module = module.get_root()
    14.9 @@ -24,6 +24,12 @@
   14.10      register_types_ns3_TimeStepPrecision(nested_module)
   14.11      
   14.12      
   14.13 +    ## Register a nested module for the namespace addressUtils
   14.14 +    
   14.15 +    nested_module = module.add_cpp_namespace('addressUtils')
   14.16 +    register_types_ns3_addressUtils(nested_module)
   14.17 +    
   14.18 +    
   14.19      ## Register a nested module for the namespace internal
   14.20      
   14.21      nested_module = module.add_cpp_namespace('internal')
   14.22 @@ -44,6 +50,10 @@
   14.23      root_module = module.get_root()
   14.24      
   14.25  
   14.26 +def register_types_ns3_addressUtils(module):
   14.27 +    root_module = module.get_root()
   14.28 +    
   14.29 +
   14.30  def register_types_ns3_internal(module):
   14.31      root_module = module.get_root()
   14.32      
   14.33 @@ -91,6 +101,15 @@
   14.34      module.add_class('TwoHopNeighborTuple')
   14.35      module.add_container('std::vector< ns3::olsr::MessageHeader::Hello::LinkMessage >', 'ns3::olsr::MessageHeader::Hello::LinkMessage', container_type='vector')
   14.36      module.add_container('std::vector< ns3::olsr::MessageHeader::Hna::Association >', 'ns3::olsr::MessageHeader::Hna::Association', container_type='vector')
   14.37 +    typehandlers.add_type_alias('std::vector< ns3::olsr::DuplicateTuple, std::allocator< ns3::olsr::DuplicateTuple > >', 'ns3::olsr::DuplicateSet')
   14.38 +    typehandlers.add_type_alias('std::vector< ns3::olsr::TopologyTuple, std::allocator< ns3::olsr::TopologyTuple > >', 'ns3::olsr::TopologySet')
   14.39 +    typehandlers.add_type_alias('std::set< ns3::Ipv4Address, std::less< ns3::Ipv4Address >, std::allocator< ns3::Ipv4Address > >', 'ns3::olsr::MprSet')
   14.40 +    typehandlers.add_type_alias('std::vector< ns3::olsr::MprSelectorTuple, std::allocator< ns3::olsr::MprSelectorTuple > >', 'ns3::olsr::MprSelectorSet')
   14.41 +    typehandlers.add_type_alias('std::vector< ns3::olsr::MessageHeader, std::allocator< ns3::olsr::MessageHeader > >', 'ns3::olsr::MessageList')
   14.42 +    typehandlers.add_type_alias('std::vector< ns3::olsr::IfaceAssocTuple, std::allocator< ns3::olsr::IfaceAssocTuple > >', 'ns3::olsr::IfaceAssocSet')
   14.43 +    typehandlers.add_type_alias('std::vector< ns3::olsr::NeighborTuple, std::allocator< ns3::olsr::NeighborTuple > >', 'ns3::olsr::NeighborSet')
   14.44 +    typehandlers.add_type_alias('std::vector< ns3::olsr::TwoHopNeighborTuple, std::allocator< ns3::olsr::TwoHopNeighborTuple > >', 'ns3::olsr::TwoHopNeighborSet')
   14.45 +    typehandlers.add_type_alias('std::vector< ns3::olsr::LinkTuple, std::allocator< ns3::olsr::LinkTuple > >', 'ns3::olsr::LinkSet')
   14.46  
   14.47  def register_methods(root_module):
   14.48      register_Ns3OlsrState_methods(root_module, root_module['ns3::OlsrState'])
   14.49 @@ -740,15 +759,15 @@
   14.50      cls.add_method('SetMainInterface', 
   14.51                     'void', 
   14.52                     [param('uint32_t', 'interface')])
   14.53 -    ## olsr-routing-protocol.h: bool ns3::olsr::RoutingProtocol::RequestRoute(uint32_t ifIndex, ns3::Ipv4Header const & ipHeader, ns3::Ptr<ns3::Packet> packet, ns3::Callback<void,bool,const ns3::Ipv4Route&,ns3::Ptr<ns3::Packet>,const ns3::Ipv4Header&,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> routeReply) [member function]
   14.54 -    cls.add_method('RequestRoute', 
   14.55 +    ## olsr-routing-protocol.h: ns3::Ptr<ns3::Ipv4Route> ns3::olsr::RoutingProtocol::RouteOutput(ns3::Ipv4Header const & header, uint32_t oif, ns3::Socket::SocketErrno & sockerr) [member function]
   14.56 +    cls.add_method('RouteOutput', 
   14.57 +                   'ns3::Ptr< ns3::Ipv4Route >', 
   14.58 +                   [param('ns3::Ipv4Header const &', 'header'), param('uint32_t', 'oif'), param('ns3::Socket::SocketErrno &', 'sockerr')], 
   14.59 +                   visibility='private', is_virtual=True)
   14.60 +    ## olsr-routing-protocol.h: bool ns3::olsr::RoutingProtocol::RouteInput(ns3::Ptr<ns3::Packet const> p, ns3::Ipv4Header const & header, ns3::Ptr<const ns3::NetDevice> idev, ns3::Callback<void,ns3::Ptr<ns3::Ipv4Route>,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> ucb, ns3::Callback<void,ns3::Ptr<ns3::Ipv4MulticastRoute>,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> mcb, ns3::Callback<void,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,unsigned int,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> lcb, ns3::Callback<void,ns3::Ptr<const ns3::Packet>,const ns3::Ipv4Header&,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty,ns3::empty> ecb) [member function]
   14.61 +    cls.add_method('RouteInput', 
   14.62                     'bool', 
   14.63 -                   [param('uint32_t', 'ifIndex'), param('ns3::Ipv4Header const &', 'ipHeader'), param('ns3::Ptr< ns3::Packet >', 'packet'), param('ns3::Callback< void, bool, ns3::Ipv4Route const &, ns3::Ptr< ns3::Packet >, ns3::Ipv4Header const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'routeReply')], 
   14.64 -                   visibility='private', is_virtual=True)
   14.65 -    ## olsr-routing-protocol.h: bool ns3::olsr::RoutingProtocol::RequestInterface(ns3::Ipv4Address destination, uint32_t & ifIndex) [member function]
   14.66 -    cls.add_method('RequestInterface', 
   14.67 -                   'bool', 
   14.68 -                   [param('ns3::Ipv4Address', 'destination'), param('uint32_t &', 'ifIndex')], 
   14.69 +                   [param('ns3::Ptr< ns3::Packet const >', 'p'), param('ns3::Ipv4Header const &', 'header'), param('ns3::Ptr< ns3::NetDevice const >', 'idev'), param('ns3::Callback< void, ns3::Ptr< ns3::Ipv4Route >, ns3::Ptr< ns3::Packet const >, ns3::Ipv4Header const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ucb'), param('ns3::Callback< void, ns3::Ptr< ns3::Ipv4MulticastRoute >, ns3::Ptr< ns3::Packet const >, ns3::Ipv4Header const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'mcb'), param('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::Ipv4Header const &, unsigned int, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'lcb'), param('ns3::Callback< void, ns3::Ptr< ns3::Packet const >, ns3::Ipv4Header const &, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty, ns3::empty >', 'ecb')], 
   14.70                     visibility='private', is_virtual=True)
   14.71      ## olsr-routing-protocol.h: void ns3::olsr::RoutingProtocol::DoDispose() [member function]
   14.72      cls.add_method('DoDispose', 
   14.73 @@ -808,6 +827,7 @@
   14.74      module = root_module
   14.75      register_functions_ns3_Config(module.get_submodule('Config'), root_module)
   14.76      register_functions_ns3_TimeStepPrecision(module.get_submodule('TimeStepPrecision'), root_module)
   14.77 +    register_functions_ns3_addressUtils(module.get_submodule('addressUtils'), root_module)
   14.78      register_functions_ns3_internal(module.get_submodule('internal'), root_module)
   14.79      register_functions_ns3_olsr(module.get_submodule('olsr'), root_module)
   14.80      return
   14.81 @@ -818,6 +838,9 @@
   14.82  def register_functions_ns3_TimeStepPrecision(module, root_module):
   14.83      return
   14.84  
   14.85 +def register_functions_ns3_addressUtils(module, root_module):
   14.86 +    return
   14.87 +
   14.88  def register_functions_ns3_internal(module, root_module):
   14.89      return
   14.90  
    15.1 --- a/bindings/python/ns3_module_onoff.py	Sat May 30 17:36:50 2009 +0100
    15.2 +++ b/bindings/python/ns3_module_onoff.py	Sat May 30 17:37:38 2009 +0100
    15.3 @@ -1,4 +1,4 @@
    15.4 -from pybindgen import Module, FileCodeSink, param, retval, cppclass
    15.5 +from pybindgen import Module, FileCodeSink, param, retval, cppclass, typehandlers
    15.6  
    15.7  def register_types(module):
    15.8      root_module = module.get_root()
    15.9 @@ -18,6 +18,12 @@
   15.10      register_types_ns3_TimeStepPrecision(nested_module)
   15.11      
   15.12      
   15.13 +    ## Register a nested module for the namespace addressUtils
   15.14 +    
   15.15 +    nested_module = module.add_cpp_namespace('addressUtils')
   15.16 +    register_types_ns3_addressUtils(nested_module)
   15.17 +    
   15.18 +    
   15.19      ## Register a nested module for the namespace internal
   15.20      
   15.21      nested_module = module.add_cpp_namespace('internal')
   15.22 @@ -38,6 +44,10 @@
   15.23      root_module = module.get_root()
   15.24      
   15.25  
   15.26 +def register_types_ns3_addressUtils(module):
   15.27 +    root_module = module.get_root()
   15.28 +    
   15.29 +
   15.30  def register_types_ns3_internal(module):
   15.31      root_module = module.get_root()
   15.32      
   15.33 @@ -85,6 +95,7 @@
   15.34      module = root_module
   15.35      register_functions_ns3_Config(module.get_submodule('Config'), root_module)
   15.36      register_functions_ns3_TimeStepPrecision(module.get_submodule('TimeStepPrecision'), root_module)
   15.37 +    register_functions_ns3_addressUtils(module.get_submodule('addressUtils'), root_module)
   15.38      register_functions_ns3_internal(module.get_submodule('internal'), root_module)
   15.39      register_functions_ns3_olsr(module.get_submodule('olsr'), root_module)
   15.40      return
   15.41 @@ -95,6 +106,9 @@
   15.42  def register_functions_ns3_TimeStepPrecision(module, root_module):
   15.43      return
   15.44  
   15.45 +def register_functions_ns3_addressUtils(module, root_module):
   15.46 +    return
   15.47 +
   15.48  def register_functions_ns3_internal(module, root_module):
   15.49      return
   15.50  
    16.1 --- a/bindings/python/ns3_module_packet_sink.py	Sat May 30 17:36:50 2009 +0100
    16.2 +++ b/bindings/python/ns3_module_packet_sink.py	Sat May 30 17:37:38 2009 +0100
    16.3 @@ -1,4 +1,4 @@
    16.4 -from pybindgen import Module, FileCodeSink, param, retval, cppclass
    16.5 +from pybindgen import Module, FileCodeSink, param, retval, cppclass, typehandlers
    16.6  
    16.7  def register_types(module):
    16.8      root_module = module.get_root()
    16.9 @@ -18,6 +18,12 @@
   16.10      register_types_ns3_TimeStepPrecision(nested_module)
   16.11      
   16.12      
   16.13 +    ## Register a nested module for the namespace addressUtils
   16.14 +    
   16.15 +    nested_module = module.add_cpp_namespace('addressUtils')
   16.16 +    register_types_ns3_addressUtils(nested_module)
   16.17 +    
   16.18 +    
   16.19      ## Register a nested module for the namespace internal
   16.20      
   16.21      nested_module = module.add_cpp_namespace('internal')
   16.22 @@ -38,6 +44,10 @@
   16.23      root_module = module.get_root()
   16.24      
   16.25  
   16.26 +def register_types_ns3_addressUtils(module):
   16.27 +    root_module = module.get_root()
   16.28 +    
   16.29 +
   16.30  def register_types_ns3_internal(module):
   16.31      root_module = module.get_root()
   16.32      
   16.33 @@ -81,6 +91,7 @@
   16.34      module = root_module
   16.35      register_functions_ns3_Config(module.get_submodule('Config'), root_module)
   16.36      register_functions_ns3_TimeStepPrecision(module.get_submodule('TimeStepPrecision'), root_module)
   16.37 +    register_functions_ns3_addressUtils(module.get_submodule('addressUtils'), root_module)
   16.38      register_functions_ns3_internal(module.get_submodule('internal'), root_module)
   16.39      register_functions_ns3_olsr(module.get_submodule('olsr'), root_module)
   16.40      return
   16.41 @@ -91,6 +102,9 @@
   16.42  def register_functions_ns3_TimeStepPrecision(module, root_module):
   16.43      return
   16.44  
   16.45 +def register_functions_ns3_addressUtils(module, root_module):
   16.46 +    return
   16.47 +
   16.48  def register_functions_ns3_internal(module, root_module):
   16.49      return
   16.50  
    17.1 --- a/bindings/python/ns3_module_point_to_point.py	Sat May 30 17:36:50 2009 +0100
    17.2 +++ b/bindings/python/ns3_module_point_to_point.py	Sat May 30 17:37:38 2009 +0100
    17.3 @@ -1,4 +1,4 @@
    17.4 -from pybindgen import Module, FileCodeSink, param, retval, cppclass
    17.5 +from pybindgen import Module, FileCodeSink, param, retval, cppclass, typehandlers
    17.6  
    17.7  def register_types(module):
    17.8      root_module = module.get_root()
    17.9 @@ -22,6 +22,12 @@
   17.10      register_types_ns3_TimeStepPrecision(nested_module)
   17.11      
   17.12      
   17.13 +    ## Register a nested module for the namespace addressUtils
   17.14 +    
   17.15 +    nested_module = module.add_cpp_namespace('addressUtils')
   17.16 +    register_types_ns3_addressUtils(nested_module)
   17.17 +    
   17.18 +    
   17.19      ## Register a nested module for the namespace internal
   17.20      
   17.21      nested_module = module.add_cpp_namespace('internal')
   17.22 @@ -42,6 +48,10 @@
   17.23      root_module = module.get_root()
   17.24      
   17.25  
   17.26 +def register_types_ns3_addressUtils(module):
   17.27 +    root_module = module.get_root()
   17.28 +    
   17.29 +
   17.30  def register_types_ns3_internal(module):
   17.31      root_module = module.get_root()
   17.32      
   17.33 @@ -301,6 +311,7 @@
   17.34      module = root_module
   17.35      register_functions_ns3_Config(module.get_submodule('Config'), root_module)
   17.36      register_functions_ns3_TimeStepPrecision(module.get_submodule('TimeStepPrecision'), root_module)
   17.37 +    register_functions_ns3_addressUtils(module.get_submodule('addressUtils'), root_module)
   17.38      register_functions_ns3_internal(module.get_submodule('internal'), root_module)
   17.39      register_functions_ns3_olsr(module.get_submodule('olsr'), root_module)
   17.40      return
   17.41 @@ -311,6 +322,9 @@
   17.42  def register_functions_ns3_TimeStepPrecision(module, root_module):
   17.43      return
   17.44  
   17.45 +def register_functions_ns3_addressUtils(module, root_module):
   17.46 +    return
   17.47 +
   17.48  def register_functions_ns3_internal(module, root_module):
   17.49      return
   17.50  
    18.1 --- a/bindings/python/ns3_module_simulator.py	Sat May 30 17:36:50 2009 +0100
    18.2 +++ b/bindings/python/ns3_module_simulator.py	Sat May 30 17:37:38 2009 +0100
    18.3 @@ -1,4 +1,4 @@
    18.4 -from pybindgen import Module, FileCodeSink, param, retval, cppclass
    18.5 +from pybindgen import Module, FileCodeSink, param, retval, cppclass, typehandlers
    18.6  
    18.7  def register_types(module):
    18.8      root_module = module.get_root()
    18.9 @@ -61,6 +61,10 @@
   18.10      module.add_class('RealtimeSimulatorImpl', parent=root_module['ns3::SimulatorImpl'])
   18.11      ## realtime-simulator-impl.h: ns3::RealtimeSimulatorImpl::SynchronizationMode [enumeration]
   18.12      module.add_enum('SynchronizationMode', ['SYNC_BEST_EFFORT', 'SYNC_HARD_LIMIT'], outer_class=root_module['ns3::RealtimeSimulatorImpl'])
   18.13 +    typehandlers.add_type_alias('ns3::TimeUnit< 2 >', 'ns3::TimeSquare')
   18.14 +    typehandlers.add_type_alias('ns3::TimeUnit< - 1 >', 'ns3::TimeInvert')
   18.15 +    typehandlers.add_type_alias('ns3::TimeUnit< 0 >', 'ns3::Scalar')
   18.16 +    typehandlers.add_type_alias('ns3::TimeUnit< 1 >', 'ns3::Time')
   18.17      
   18.18      ## Register a nested module for the namespace Config
   18.19      
   18.20 @@ -74,6 +78,12 @@
   18.21      register_types_ns3_TimeStepPrecision(nested_module)
   18.22      
   18.23      
   18.24 +    ## Register a nested module for the namespace addressUtils
   18.25 +    
   18.26 +    nested_module = module.add_cpp_namespace('addressUtils')
   18.27 +    register_types_ns3_addressUtils(nested_module)
   18.28 +    
   18.29 +    
   18.30      ## Register a nested module for the namespace internal
   18.31      
   18.32      nested_module = module.add_cpp_namespace('internal')
   18.33 @@ -96,6 +106,10 @@
   18.34      ## nstime.h: ns3::TimeStepPrecision::precision_t [enumeration]
   18.35      module.add_enum('precision_t', ['S', 'MS', 'US', 'NS', 'PS', 'FS'])
   18.36  
   18.37 +def register_types_ns3_addressUtils(module):
   18.38 +    root_module = module.get_root()
   18.39 +    
   18.40 +
   18.41  def register_types_ns3_internal(module):
   18.42      root_module = module.get_root()
   18.43      
   18.44 @@ -1530,6 +1544,7 @@
   18.45                          [param('uint64_t', 'ts')])
   18.46      register_functions_ns3_Config(module.get_submodule('Config'), root_module)
   18.47      register_functions_ns3_TimeStepPrecision(module.get_submodule('TimeStepPrecision'), root_module)
   18.48 +    register_functions_ns3_addressUtils(module.get_submodule('addressUtils'), root_module)
   18.49      register_functions_ns3_internal(module.get_submodule('internal'), root_module)
   18.50      register_functions_ns3_olsr(module.get_submodule('olsr'), root_module)
   18.51      return
   18.52 @@ -1548,6 +1563,9 @@
   18.53                          [param('ns3::TimeStepPrecision::precision_t', 'precision')])
   18.54      return
   18.55  
   18.56 +def register_functions_ns3_addressUtils(module, root_module):
   18.57 +    return
   18.58 +
   18.59  def register_functions_ns3_internal(module, root_module):
   18.60      return
   18.61  
    19.1 --- a/bindings/python/ns3_module_stats.py	Sat May 30 17:36:50 2009 +0100
    19.2 +++ b/bindings/python/ns3_module_stats.py	Sat May 30 17:37:38 2009 +0100
    19.3 @@ -1,4 +1,4 @@
    19.4 -from pybindgen import Module, FileCodeSink, param, retval, cppclass
    19.5 +from pybindgen import Module, FileCodeSink, param, retval, cppclass, typehandlers
    19.6  
    19.7  def register_types(module):
    19.8      root_module = module.get_root()
    19.9 @@ -25,6 +25,8 @@
   19.10      module.add_class('CounterCalculator', template_parameters=['unsigned int'], parent=root_module['ns3::DataCalculator'])
   19.11      ## packet-data-calculators.h: ns3::PacketCounterCalculator [class]
   19.12      module.add_class('PacketCounterCalculator', parent=root_module['ns3::CounterCalculator< unsigned int >'])
   19.13 +    typehandlers.add_type_alias('std::list< ns3::Ptr< ns3::DataCalculator >, std::allocator< ns3::Ptr< ns3::DataCalculator > > >', 'ns3::DataCalculatorList')
   19.14 +    typehandlers.add_type_alias('std::list< std::pair< std::string, std::string >, std::allocator< std::pair< std::string, std::string > > >', 'ns3::MetadataList')
   19.15      
   19.16      ## Register a nested module for the namespace Config
   19.17      
   19.18 @@ -38,6 +40,12 @@
   19.19      register_types_ns3_TimeStepPrecision(nested_module)
   19.20      
   19.21      
   19.22 +    ## Register a nested module for the namespace addressUtils
   19.23 +    
   19.24 +    nested_module = module.add_cpp_namespace('addressUtils')
   19.25 +    register_types_ns3_addressUtils(nested_module)
   19.26 +    
   19.27 +    
   19.28      ## Register a nested module for the namespace internal
   19.29      
   19.30      nested_module = module.add_cpp_namespace('internal')
   19.31 @@ -58,6 +66,10 @@
   19.32      root_module = module.get_root()
   19.33      
   19.34  
   19.35 +def register_types_ns3_addressUtils(module):
   19.36 +    root_module = module.get_root()
   19.37 +    
   19.38 +
   19.39  def register_types_ns3_internal(module):
   19.40      root_module = module.get_root()
   19.41      
   19.42 @@ -419,6 +431,7 @@
   19.43      module = root_module
   19.44      register_functions_ns3_Config(module.get_submodule('Config'), root_module)
   19.45      register_functions_ns3_TimeStepPrecision(module.get_submodule('TimeStepPrecision'), root_module)
   19.46 +    register_functions_ns3_addressUtils(module.get_submodule('addressUtils'), root_module)
   19.47      register_functions_ns3_internal(module.get_submodule('internal'), root_module)
   19.48      register_functions_ns3_olsr(module.get_submodule('olsr'), root_module)
   19.49      return
   19.50 @@ -429,6 +442,9 @@
   19.51  def register_functions_ns3_TimeStepPrecision(module, root_module):
   19.52      return
   19.53  
   19.54 +def register_functions_ns3_addressUtils(module, root_module):
   19.55 +    return
   19.56 +
   19.57  def register_functions_ns3_internal(module, root_module):
   19.58      return
   19.59  
    20.1 --- a/bindings/python/ns3_module_tap_bridge.py	Sat May 30 17:36:50 2009 +0100
    20.2 +++ b/bindings/python/ns3_module_tap_bridge.py	Sat May 30 17:37:38 2009 +0100
    20.3 @@ -1,4 +1,4 @@
    20.4 -from pybindgen import Module, FileCodeSink, param, retval, cppclass
    20.5 +from pybindgen import Module, FileCodeSink, param, retval, cppclass, typehandlers
    20.6  
    20.7  def register_types(module):
    20.8      root_module = module.get_root()
    20.9 @@ -20,6 +20,12 @@
   20.10      register_types_ns3_TimeStepPrecision(nested_module)
   20.11      
   20.12      
   20.13 +    ## Register a nested module for the namespace addressUtils
   20.14 +    
   20.15 +    nested_module = module.add_cpp_namespace('addressUtils')
   20.16 +    register_types_ns3_addressUtils(nested_module)
   20.17 +    
   20.18 +    
   20.19      ## Register a nested module for the namespace internal
   20.20      
   20.21      nested_module = module.add_cpp_namespace('internal')
   20.22 @@ -40,6 +46,10 @@
   20.23      root_module = module.get_root()
   20.24      
   20.25  
   20.26 +def register_types_ns3_addressUtils(module):
   20.27 +    root_module = module.get_root()
   20.28 +    
   20.29 +
   20.30  def register_types_ns3_internal(module):
   20.31      root_module = module.get_root()
   20.32      
   20.33 @@ -217,6 +227,7 @@
   20.34      module = root_module
   20.35      register_functions_ns3_Config(module.get_submodule('Config'), root_module)
   20.36      register_functions_ns3_TimeStepPrecision(module.get_submodule('TimeStepPrecision'), root_module)
   20.37 +    register_functions_ns3_addressUtils(module.get_submodule('addressUtils'), root_module)
   20.38      register_functions_ns3_internal(module.get_submodule('internal'), root_module)
   20.39      register_functions_ns3_olsr(module.get_submodule('olsr'), root_module)
   20.40      return
   20.41 @@ -227,6 +238,9 @@
   20.42  def register_functions_ns3_TimeStepPrecision(module, root_module):
   20.43      return
   20.44  
   20.45 +def register_functions_ns3_addressUtils(module, root_module):
   20.46 +    return
   20.47 +
   20.48  def register_functions_ns3_internal(module, root_module):
   20.49      return
   20.50  
    21.1 --- a/bindings/python/ns3_module_udp_echo.py	Sat May 30 17:36:50 2009 +0100
    21.2 +++ b/bindings/python/ns3_module_udp_echo.py	Sat May 30 17:37:38 2009 +0100
    21.3 @@ -1,4 +1,4 @@
    21.4 -from pybindgen import Module, FileCodeSink, param, retval, cppclass
    21.5 +from pybindgen import Module, FileCodeSink, param, retval, cppclass, typehandlers
    21.6  
    21.7  def register_types(module):
    21.8      root_module = module.get_root()
    21.9 @@ -20,6 +20,12 @@
   21.10      register_types_ns3_TimeStepPrecision(nested_module)
   21.11      
   21.12      
   21.13 +    ## Register a nested module for the namespace addressUtils
   21.14 +    
   21.15 +    nested_module = module.add_cpp_namespace('addressUtils')
   21.16 +    register_types_ns3_addressUtils(nested_module)
   21.17 +    
   21.18 +    
   21.19      ## Register a nested module for the namespace internal
   21.20      
   21.21      nested_module = module.add_cpp_namespace('internal')
   21.22 @@ -40,6 +46,10 @@
   21.23      root_module = module.get_root()
   21.24      
   21.25  
   21.26 +def register_types_ns3_addressUtils(module):
   21.27 +    root_module = module.get_root()
   21.28 +    
   21.29 +
   21.30  def register_types_ns3_internal(module):
   21.31      root_module = module.get_root()
   21.32      
   21.33 @@ -115,6 +125,7 @@
   21.34      module = root_module
   21.35      register_functions_ns3_Config(module.get_submodule('Config'), root_module)
   21.36      register_functions_ns3_TimeStepPrecision(module.get_submodule('TimeStepPrecision'), root_module)
   21.37 +    register_functions_ns3_addressUtils(module.get_submodule('addressUtils'), root_module)
   21.38      register_functions_ns3_internal(module.get_submodule('internal'), root_module)
   21.39      register_functions_ns3_olsr(module.get_submodule('olsr'), root_module)
   21.40      return
   21.41 @@ -125,6 +136,9 @@
   21.42  def register_functions_ns3_TimeStepPrecision(module, root_module):
   21.43      return
   21.44  
   21.45 +def register_functions_ns3_addressUtils(module, root_module):
   21.46 +    return
   21.47 +
   21.48  def register_functions_ns3_internal(module, root_module):
   21.49      return
   21.50  
    22.1 --- a/bindings/python/ns3_module_v4ping.py	Sat May 30 17:36:50 2009 +0100
    22.2 +++ b/bindings/python/ns3_module_v4ping.py	Sat May 30 17:37:38 2009 +0100
    22.3 @@ -1,4 +1,4 @@
    22.4 -from pybindgen import Module, FileCodeSink, param, retval, cppclass
    22.5 +from pybindgen import Module, FileCodeSink, param, retval, cppclass, typehandlers
    22.6  
    22.7  def register_types(module):
    22.8      root_module = module.get_root()
    22.9 @@ -18,6 +18,12 @@
   22.10      register_types_ns3_TimeStepPrecision(nested_module)
   22.11      
   22.12      
   22.13 +    ## Register a nested module for the namespace addressUtils
   22.14 +    
   22.15 +    nested_module = module.add_cpp_namespace('addressUtils')
   22.16 +    register_types_ns3_addressUtils(nested_module)
   22.17 +    
   22.18 +    
   22.19      ## Register a nested module for the namespace internal
   22.20      
   22.21      nested_module = module.add_cpp_namespace('internal')
   22.22 @@ -38,6 +44,10 @@
   22.23      root_module = module.get_root()
   22.24      
   22.25  
   22.26 +def register_types_ns3_addressUtils(module):
   22.27 +    root_module = module.get_root()
   22.28 +    
   22.29 +
   22.30  def register_types_ns3_internal(module):
   22.31      root_module = module.get_root()
   22.32      
   22.33 @@ -81,6 +91,7 @@
   22.34      module = root_module
   22.35      register_functions_ns3_Config(module.get_submodule('Config'), root_module)
   22.36      register_functions_ns3_TimeStepPrecision(module.get_submodule('TimeStepPrecision'), root_module)
   22.37 +    register_functions_ns3_addressUtils(module.get_submodule('addressUtils'), root_module)
   22.38      register_functions_ns3_internal(module.get_submodule('internal'), root_module)
   22.39      register_functions_ns3_olsr(module.get_submodule('olsr'), root_module)
   22.40      return
   22.41 @@ -91,6 +102,9 @@
   22.42  def register_functions_ns3_TimeStepPrecision(module, root_module):
   22.43      return
   22.44  
   22.45 +def register_functions_ns3_addressUtils(module, root_module):
   22.46 +    return
   22.47 +
   22.48  def register_functions_ns3_internal(module, root_module):
   22.49      return
   22.50  
    23.1 --- a/bindings/python/ns3_module_wifi.py	Sat May 30 17:36:50 2009 +0100
    23.2 +++ b/bindings/python/ns3_module_wifi.py	Sat May 30 17:37:38 2009 +0100
    23.3 @@ -1,4 +1,4 @@
    23.4 -from pybindgen import Module, FileCodeSink, param, retval, cppclass
    23.5 +from pybindgen import Module, FileCodeSink, param, retval, cppclass, typehandlers
    23.6  
    23.7  def register_types(module):
    23.8      root_module = module.get_root()
    23.9 @@ -135,6 +135,7 @@
   23.10      module.add_class('YansWifiChannel', parent=root_module['ns3::WifiChannel'])
   23.11      ## aarf-wifi-manager.h: ns3::AarfWifiManager [class]
   23.12      module.add_class('AarfWifiManager', parent=root_module['ns3::ArfWifiManager'])
   23.13 +    typehandlers.add_type_alias('std::vector< ns3::ThresholdsItem, std::allocator< ns3::ThresholdsItem > >', 'ns3::Thresholds')
   23.14      
   23.15      ## Register a nested module for the namespace Config
   23.16      
   23.17 @@ -148,6 +149,12 @@
   23.18      register_types_ns3_TimeStepPrecision(nested_module)
   23.19      
   23.20      
   23.21 +    ## Register a nested module for the namespace addressUtils
   23.22 +    
   23.23 +    nested_module = module.add_cpp_namespace('addressUtils')
   23.24 +    register_types_ns3_addressUtils(nested_module)
   23.25 +    
   23.26 +    
   23.27      ## Register a nested module for the namespace internal
   23.28      
   23.29      nested_module = module.add_cpp_namespace('internal')
   23.30 @@ -168,6 +175,10 @@
   23.31      root_module = module.get_root()
   23.32      
   23.33  
   23.34 +def register_types_ns3_addressUtils(module):
   23.35 +    root_module = module.get_root()
   23.36 +    
   23.37 +
   23.38  def register_types_ns3_internal(module):
   23.39      root_module = module.get_root()
   23.40      
   23.41 @@ -4181,6 +4192,7 @@
   23.42                          [param('uint8_t', 'tid')])
   23.43      register_functions_ns3_Config(module.get_submodule('Config'), root_module)
   23.44      register_functions_ns3_TimeStepPrecision(module.get_submodule('TimeStepPrecision'), root_module)
   23.45 +    register_functions_ns3_addressUtils(module.get_submodule('addressUtils'), root_module)
   23.46      register_functions_ns3_internal(module.get_submodule('internal'), root_module)
   23.47      register_functions_ns3_olsr(module.get_submodule('olsr'), root_module)
   23.48      return
   23.49 @@ -4191,6 +4203,9 @@
   23.50  def register_functions_ns3_TimeStepPrecision(module, root_module):
   23.51      return
   23.52  
   23.53 +def register_functions_ns3_addressUtils(module, root_module):
   23.54 +    return
   23.55 +
   23.56  def register_functions_ns3_internal(module, root_module):
   23.57      return
   23.58  
    24.1 --- a/bindings/python/ns3modulegen_generated.py	Sat May 30 17:36:50 2009 +0100
    24.2 +++ b/bindings/python/ns3modulegen_generated.py	Sat May 30 17:37:38 2009 +0100
    24.3 @@ -1,4 +1,4 @@
    24.4 -from pybindgen import Module, FileCodeSink, param, retval, cppclass
    24.5 +from pybindgen import Module, FileCodeSink, param, retval, cppclass, typehandlers
    24.6  
    24.7  
    24.8  import pybindgen.settings
    24.9 @@ -288,6 +288,12 @@
   24.10      register_types_ns3_TimeStepPrecision(nested_module)
   24.11      
   24.12      
   24.13 +    ## Register a nested module for the namespace addressUtils
   24.14 +    
   24.15 +    nested_module = module.add_cpp_namespace('addressUtils')
   24.16 +    register_types_ns3_addressUtils(nested_module)
   24.17 +    
   24.18 +    
   24.19      ## Register a nested module for the namespace internal
   24.20      
   24.21      nested_module = module.add_cpp_namespace('internal')
   24.22 @@ -309,6 +315,10 @@
   24.23      root_module = module.get_root()
   24.24      
   24.25  
   24.26 +def register_types_ns3_addressUtils(module):
   24.27 +    root_module = module.get_root()
   24.28 +    
   24.29 +
   24.30  def register_types_ns3_internal(module):
   24.31      root_module = module.get_root()
   24.32      
   24.33 @@ -786,6 +796,7 @@
   24.34      root_module.end_section('ns3_module_helper')
   24.35      register_functions_ns3_Config(module.get_submodule('Config'), root_module)
   24.36      register_functions_ns3_TimeStepPrecision(module.get_submodule('TimeStepPrecision'), root_module)
   24.37 +    register_functions_ns3_addressUtils(module.get_submodule('addressUtils'), root_module)
   24.38      register_functions_ns3_internal(module.get_submodule('internal'), root_module)
   24.39      register_functions_ns3_olsr(module.get_submodule('olsr'), root_module)
   24.40      return
   24.41 @@ -796,6 +807,9 @@
   24.42  def register_functions_ns3_TimeStepPrecision(module, root_module):
   24.43      return
   24.44  
   24.45 +def register_functions_ns3_addressUtils(module, root_module):
   24.46 +    return
   24.47 +
   24.48  def register_functions_ns3_internal(module, root_module):
   24.49      return
   24.50  
    25.1 --- a/bindings/python/wscript	Sat May 30 17:36:50 2009 +0100
    25.2 +++ b/bindings/python/wscript	Sat May 30 17:37:38 2009 +0100
    25.3 @@ -15,7 +15,7 @@
    25.4  import Utils
    25.5  
    25.6  ## https://launchpad.net/pybindgen/
    25.7 -REQUIRED_PYBINDGEN_VERSION = (0, 10, 0, 630)
    25.8 +REQUIRED_PYBINDGEN_VERSION = (0, 10, 0, 640)
    25.9  REQUIRED_PYGCCXML_VERSION = (0, 9, 5)
   25.10  
   25.11  
    26.1 --- a/doc/manual/attributes.texi	Sat May 30 17:36:50 2009 +0100
    26.2 +++ b/doc/manual/attributes.texi	Sat May 30 17:37:38 2009 +0100
    26.3 @@ -207,6 +207,8 @@
    26.4  In the ns-3 attribute system, these value definitions and accessor
    26.5  functions are moved into the TypeId class; e.g.:  
    26.6  @verbatim
    26.7 +NS_OBJECT_ENSURE_REGISTERED (DropTailQueue);
    26.8 +
    26.9  TypeId DropTailQueue::GetTypeId (void) 
   26.10  {
   26.11    static TypeId tid = TypeId ("ns3::DropTailQueue")
   26.12 @@ -239,6 +241,11 @@
   26.13  section, we will provide an example script that shows how users
   26.14  may manipulate these values.
   26.15  
   26.16 +Note that initialization of the attribute relies on the macro
   26.17 +NS_OBJECT_ENSURE_REGISTERED (DropTailQueue) being called; if you leave
   26.18 +this out of your new class implementation, your attributes will not be 
   26.19 +initialized corretly.
   26.20 +
   26.21  @subsection Basic usage
   26.22  
   26.23  Let's look at how a user script might access these values.  
    27.1 --- a/examples/csma-multicast.cc	Sat May 30 17:36:50 2009 +0100
    27.2 +++ b/examples/csma-multicast.cc	Sat May 30 17:37:38 2009 +0100
    27.3 @@ -105,7 +105,7 @@
    27.4    // 2) Set up a default multicast route on the sender n0 
    27.5    // 3) Have node n4 join the multicast group
    27.6    // We have a helper that can help us with static multicast
    27.7 -  StaticMulticastRouteHelper multicast;
    27.8 +  Ipv4StaticRoutingHelper multicast;
    27.9  
   27.10    // 1) Configure a (static) multicast route on node n2 (multicastRouter)
   27.11    Ptr<Node> multicastRouter = c.Get (2);  // The node in question
   27.12 @@ -121,10 +121,6 @@
   27.13    Ptr<NetDevice> senderIf = nd0.Get(0);
   27.14    multicast.SetDefaultMulticastRoute (sender, senderIf);
   27.15  
   27.16 -  // 3) Have node n4 join the multicast group
   27.17 -  Ptr<Node> receiver = c.Get (4);
   27.18 -  multicast.JoinMulticastGroup (receiver, multicastSource, multicastGroup);
   27.19 -  
   27.20    //
   27.21    // Create an OnOff application to send UDP datagrams from node zero to the
   27.22    // multicast group (node four will be listening).
    28.1 --- a/examples/emu-ping.cc	Sat May 30 17:36:50 2009 +0100
    28.2 +++ b/examples/emu-ping.cc	Sat May 30 17:37:38 2009 +0100
    28.3 @@ -55,7 +55,6 @@
    28.4  #include "ns3/core-module.h"
    28.5  #include "ns3/simulator-module.h"
    28.6  #include "ns3/node-module.h"
    28.7 -#include "ns3/internet-stack-module.h"
    28.8  #include "ns3/emu-module.h"
    28.9  #include "ns3/v4ping-module.h"
   28.10  #include "ns3/helper-module.h"
   28.11 @@ -149,7 +148,8 @@
   28.12    // of ARP, IPv4, ICMP, UDP and TCP.
   28.13    //
   28.14    NS_LOG_INFO ("Add Internet Stack");
   28.15 -  AddInternetStack (node);
   28.16 +  InternetStackHelper internetStackHelper;
   28.17 +  internetStackHelper.Install (node);
   28.18  
   28.19    NS_LOG_INFO ("Create IPv4 Interface");
   28.20    Ptr<Ipv4> ipv4 = node->GetObject<Ipv4> ();
   28.21 @@ -175,7 +175,9 @@
   28.22    Ipv4Address gateway ("1.2.3.4");
   28.23    NS_ABORT_MSG_IF (gateway == "1.2.3.4", "You must change the gateway IP address before running this example");
   28.24  
   28.25 -  ipv4->SetDefaultRoute (gateway, interface);
   28.26 +  Ipv4StaticRoutingHelper ipv4RoutingHelper;
   28.27 +  Ptr<Ipv4StaticRouting> staticRouting = ipv4RoutingHelper.GetStaticRouting (ipv4);
   28.28 +  staticRouting->SetDefaultRoute (gateway, interface);
   28.29  
   28.30    //
   28.31    // Create the ping application.  This application knows how to send
    29.1 --- a/examples/static-routing-slash32.cc	Sat May 30 17:36:50 2009 +0100
    29.2 +++ b/examples/static-routing-slash32.cc	Sat May 30 17:37:38 2009 +0100
    29.3 @@ -97,12 +97,14 @@
    29.4    ipv4C->SetMetric (ifIndexC, 1);
    29.5    ipv4C->SetUp (ifIndexC);
    29.6   
    29.7 +  Ipv4StaticRoutingHelper ipv4RoutingHelper;
    29.8    // Create static routes from A to C
    29.9 +  Ptr<Ipv4StaticRouting> staticRoutingA = ipv4RoutingHelper.GetStaticRouting (ipv4A);
   29.10    // The ifIndex for this outbound route is 1; the first p2p link added
   29.11 -  ipv4A->AddHostRouteTo (Ipv4Address ("192.168.1.1"), Ipv4Address ("10.1.1.2"), 1);
   29.12 +  staticRoutingA->AddHostRouteTo (Ipv4Address ("192.168.1.1"), Ipv4Address ("10.1.1.2"), 1);
   29.13 +  Ptr<Ipv4StaticRouting> staticRoutingB = ipv4RoutingHelper.GetStaticRouting (ipv4B);
   29.14    // The ifIndex we want on node B is 2; 0 corresponds to loopback, and 1 to the first point to point link
   29.15 -  ipv4B->AddHostRouteTo (Ipv4Address ("192.168.1.1"), Ipv4Address ("10.1.1.6"), 2);
   29.16 -
   29.17 +  staticRoutingB->AddHostRouteTo (Ipv4Address ("192.168.1.1"), Ipv4Address ("10.1.1.6"), 2);
   29.18    // Create the OnOff application to send UDP datagrams of size
   29.19    // 210 bytes at a rate of 448 Kb/s
   29.20    uint16_t port = 9;   // Discard port (RFC 863)
    30.1 --- a/examples/tcp-nsc-lfn.cc	Sat May 30 17:36:50 2009 +0100
    30.2 +++ b/examples/tcp-nsc-lfn.cc	Sat May 30 17:37:38 2009 +0100
    30.3 @@ -91,7 +91,7 @@
    30.4    InternetStackHelper internet;
    30.5    // The next statement switches the nodes to 'NSC'-Mode.
    30.6    // It disables the native ns-3 TCP model and loads the NSC library.
    30.7 -  internet.SetNscStack (nscStack);
    30.8 +  internet.SetTcp ("ns3::NscTcpL4Protocol","Library",StringValue(nscStack));
    30.9    internet.Install (n);
   30.10  
   30.11    if (tcpCong != "cubic") // make sure we only fail if both --nscstack and --TCP_CONGESTION are used
    31.1 --- a/examples/tcp-nsc-zoo.cc	Sat May 30 17:36:50 2009 +0100
    31.2 +++ b/examples/tcp-nsc-zoo.cc	Sat May 30 17:37:38 2009 +0100
    31.3 @@ -69,7 +69,7 @@
    31.4  
    31.5    InternetStackHelper internetStack;
    31.6  
    31.7 -  internetStack.SetNscStack ("liblinux2.6.26.so");
    31.8 +  internetStack.SetTcp ("ns3::NscTcpL4Protocol","Library",StringValue("liblinux2.6.26.so"));
    31.9    // this switches nodes 0 and 1 to NSCs Linux 2.6.26 stack.
   31.10    internetStack.Install (n.Get(0));
   31.11    internetStack.Install (n.Get(1));
   31.12 @@ -87,7 +87,7 @@
   31.13      {
   31.14        // the next statement doesn't change anything for the nodes 0, 1, and 2; since they
   31.15        // already have a stack assigned.
   31.16 -      internetStack.SetNscStack ("liblinux2.6.18.so");
   31.17 +      internetStack.SetTcp ("ns3::NscTcpL4Protocol","Library",StringValue("liblinux2.6.18.so"));
   31.18        // this switches node 3 to NSCs Linux 2.6.18 stack.
   31.19        internetStack.Install (n.Get(3));
   31.20        // and then agains disables sack/timestamps/wscale on node 3.
    32.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    32.2 +++ b/examples/wifi-clear-channel-cmu.cc	Sat May 30 17:37:38 2009 +0100
    32.3 @@ -0,0 +1,229 @@
    32.4 +/* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
    32.5 +/*
    32.6 + * Copyright (c) 2009 The Boeing Company
    32.7 + *
    32.8 + * This program is free software; you can redistribute it and/or modify
    32.9 + * it under the terms of the GNU General Public License version 2 as
   32.10 + * published by the Free Software Foundation;
   32.11 + *
   32.12 + * This program is distributed in the hope that it will be useful,
   32.13 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
   32.14 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   32.15 + * GNU General Public License for more details.
   32.16 + *
   32.17 + * You should have received a copy of the GNU General Public License
   32.18 + * along with this program; if not, write to the Free Software
   32.19 + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
   32.20 + *
   32.21 + * Author: Guangyu Pei <guangyu.pei@boeing.com>
   32.22 + */
   32.23 +
   32.24 +#include "ns3/core-module.h"
   32.25 +#include "ns3/common-module.h"
   32.26 +#include "ns3/node-module.h"
   32.27 +#include "ns3/helper-module.h"
   32.28 +#include "ns3/mobility-module.h"
   32.29 +#include "ns3/contrib-module.h"
   32.30 +
   32.31 +#include <iostream>
   32.32 +#include <fstream>
   32.33 +#include <vector>
   32.34 +#include <string>
   32.35 +
   32.36 +NS_LOG_COMPONENT_DEFINE ("Main");
   32.37 +
   32.38 +using namespace ns3;
   32.39 +
   32.40 +class Experiment
   32.41 +{
   32.42 +public:
   32.43 +  Experiment ();
   32.44 +  Experiment (std::string name);
   32.45 +  uint32_t Run (const WifiHelper &wifi, const YansWifiPhyHelper &wifiPhy,
   32.46 +                const NqosWifiMacHelper &wifiMac, const YansWifiChannelHelper &wifiChannel);
   32.47 +private:
   32.48 +  void ReceivePacket (Ptr<Socket> socket);
   32.49 +  void SetPosition (Ptr<Node> node, Vector position);
   32.50 +  Vector GetPosition (Ptr<Node> node);
   32.51 +  Ptr<Socket> SetupPacketReceive (Ptr<Node> node);
   32.52 +  void GenerateTraffic (Ptr<Socket> socket, uint32_t pktSize, 
   32.53 +                             uint32_t pktCount, Time pktInterval );
   32.54 +
   32.55 +  uint32_t m_pktsTotal;
   32.56 +  Gnuplot2dDataset m_output;
   32.57 +};
   32.58 +
   32.59 +Experiment::Experiment ()
   32.60 +{}
   32.61 +
   32.62 +Experiment::Experiment (std::string name)
   32.63 +  : m_output (name)
   32.64 +{
   32.65 +  m_output.SetStyle (Gnuplot2dDataset::LINES);
   32.66 +}
   32.67 +
   32.68 +void
   32.69 +Experiment::SetPosition (Ptr<Node> node, Vector position)
   32.70 +{
   32.71 +  Ptr<MobilityModel> mobility = node->GetObject<MobilityModel> ();
   32.72 +  mobility->SetPosition (position);
   32.73 +}
   32.74 +
   32.75 +Vector
   32.76 +Experiment::GetPosition (Ptr<Node> node)
   32.77 +{
   32.78 +  Ptr<MobilityModel> mobility = node->GetObject<MobilityModel> ();
   32.79 +  return mobility->GetPosition ();
   32.80 +}
   32.81 +
   32.82 +void
   32.83 +Experiment::ReceivePacket (Ptr<Socket> socket)
   32.84 +{
   32.85 +  Ptr<Packet> packet;
   32.86 +  while (packet = socket->Recv ())
   32.87 +    {
   32.88 +      m_pktsTotal ++;
   32.89 +    }
   32.90 +}
   32.91 +
   32.92 +Ptr<Socket>
   32.93 +Experiment::SetupPacketReceive (Ptr<Node> node)
   32.94 +{
   32.95 +  TypeId tid = TypeId::LookupByName ("ns3::UdpSocketFactory");
   32.96 +  Ptr<Socket> sink = Socket::CreateSocket (node, tid);
   32.97 +  InetSocketAddress local = InetSocketAddress (Ipv4Address::GetAny (), 80);
   32.98 +  sink->Bind (local);
   32.99 +  sink->SetRecvCallback (MakeCallback (&Experiment::ReceivePacket, this));
  32.100 +  return sink;
  32.101 +}
  32.102 +
  32.103 +void
  32.104 +Experiment::GenerateTraffic (Ptr<Socket> socket, uint32_t pktSize, 
  32.105 +                             uint32_t pktCount, Time pktInterval )
  32.106 +{
  32.107 +  if (pktCount > 0)
  32.108 +    {
  32.109 +      socket->Send (Create<Packet> (pktSize));
  32.110 +      Simulator::Schedule (pktInterval, &Experiment::GenerateTraffic, this, 
  32.111 +                           socket, pktSize,pktCount-1, pktInterval);
  32.112 +    }
  32.113 +  else
  32.114 +    {
  32.115 +      socket->Close ();
  32.116 +    }
  32.117 +}
  32.118 +
  32.119 +uint32_t
  32.120 +Experiment::Run (const WifiHelper &wifi, const YansWifiPhyHelper &wifiPhy,
  32.121 +                 const NqosWifiMacHelper &wifiMac, const YansWifiChannelHelper &wifiChannel)
  32.122 +{
  32.123 +  m_pktsTotal = 0;
  32.124 +
  32.125 +  NodeContainer c;
  32.126 +  c.Create (2);
  32.127 +
  32.128 +  InternetStackHelper internet;
  32.129 +  internet.Install (c);
  32.130 +
  32.131 +  YansWifiPhyHelper phy = wifiPhy;
  32.132 +  phy.SetChannel (wifiChannel.Create ());
  32.133 +
  32.134 +  NqosWifiMacHelper mac = wifiMac;
  32.135 +  NetDeviceContainer devices = wifi.Install (phy, mac, c);
  32.136 +
  32.137 +  MobilityHelper mobility;
  32.138 +  Ptr<ListPositionAllocator> positionAlloc = CreateObject<ListPositionAllocator> ();
  32.139 +  positionAlloc->Add (Vector (0.0, 0.0, 0.0));
  32.140 +  positionAlloc->Add (Vector (5.0, 0.0, 0.0));
  32.141 +  mobility.SetPositionAllocator (positionAlloc);
  32.142 +  mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
  32.143 +  mobility.Install (c);
  32.144 +
  32.145 +  Ipv4AddressHelper ipv4;
  32.146 +  NS_LOG_INFO ("Assign IP Addresses.");
  32.147 +  ipv4.SetBase ("10.1.1.0", "255.255.255.0");
  32.148 +  Ipv4InterfaceContainer i = ipv4.Assign (devices);
  32.149 +
  32.150 +  Ptr<Socket> recvSink = SetupPacketReceive (c.Get (0));
  32.151 +
  32.152 +  TypeId tid = TypeId::LookupByName ("ns3::UdpSocketFactory");
  32.153 +  Ptr<Socket> source = Socket::CreateSocket (c.Get (1), tid);
  32.154 +  InetSocketAddress remote = InetSocketAddress (Ipv4Address ("255.255.255.255"), 80);
  32.155 +  source->Connect (remote);
  32.156 +  uint32_t packetSize = 1014;
  32.157 +  uint32_t maxPacketCount = 200;
  32.158 +  Time interPacketInterval = Seconds (1.);
  32.159 +  Simulator::Schedule (Seconds (1.0), &Experiment::GenerateTraffic, 
  32.160 +                       this, source, packetSize, maxPacketCount,interPacketInterval);
  32.161 +  Simulator::Run ();
  32.162 +
  32.163 +  Simulator::Destroy ();
  32.164 +
  32.165 +  return m_pktsTotal;
  32.166 +}
  32.167 +
  32.168 +int main (int argc, char *argv[])
  32.169 +{
  32.170 +  std::ofstream outfile ("clear-channel.plt");
  32.171 +  std::vector <std::string> modes;
  32.172 +
  32.173 +  modes.push_back ("wifib-1mbs");
  32.174 +  modes.push_back ("wifib-2mbs");
  32.175 +  modes.push_back ("wifib-5.5mbs");
  32.176 +  modes.push_back ("wifib-11mbs");
  32.177 +  // disable fragmentation
  32.178 +  Config::SetDefault ("ns3::WifiRemoteStationManager::FragmentationThreshold", StringValue ("2200"));
  32.179 +  Config::SetDefault ("ns3::WifiRemoteStationManager::RtsCtsThreshold", StringValue ("2200"));
  32.180 +
  32.181 +  CommandLine cmd;
  32.182 +  cmd.Parse (argc, argv);
  32.183 +
  32.184 +  Gnuplot gnuplot = Gnuplot ("clear-channel.eps");
  32.185 +  
  32.186 +  for (uint32_t i = 0; i < modes.size(); i++)
  32.187 +  {
  32.188 +   std::cout << modes[i] << std::endl;
  32.189 +   Gnuplot2dDataset dataset (modes[i]);
  32.190 +
  32.191 +   for (double rss = -102.0; rss <= -80.0; rss += 0.5)
  32.192 +   {
  32.193 +     Experiment experiment;
  32.194 +     dataset.SetStyle (Gnuplot2dDataset::LINES);
  32.195 + 
  32.196 +     WifiHelper wifi;
  32.197 +     NqosWifiMacHelper wifiMac = NqosWifiMacHelper::Default ();
  32.198 +     Config::SetDefault ("ns3::WifiRemoteStationManager::NonUnicastMode", 
  32.199 +                         StringValue (modes[i]));
  32.200 +     wifi.SetRemoteStationManager ("ns3::ConstantRateWifiManager",
  32.201 +                                   "DataMode",StringValue(modes[i]),
  32.202 +                                   "ControlMode",StringValue(modes[i]));
  32.203 +     wifiMac.SetType ("ns3::AdhocWifiMac");
  32.204 + 
  32.205 +     YansWifiPhyHelper wifiPhy = YansWifiPhyHelper::Default ();
  32.206 +     YansWifiChannelHelper wifiChannel ;
  32.207 +     wifiChannel.SetPropagationDelay ("ns3::ConstantSpeedPropagationDelayModel");
  32.208 +     wifiChannel.AddPropagationLoss ("ns3::FixedRssLossModel","Rss",DoubleValue(rss));
  32.209 + 
  32.210 + 
  32.211 +     NS_LOG_DEBUG (modes[i]);
  32.212 +     experiment = Experiment (modes[i]);
  32.213 +     wifiPhy.Set ("Standard", StringValue ("802.11b") );
  32.214 +     wifiPhy.Set ("EnergyDetectionThreshold", DoubleValue (-110.0) );
  32.215 +     wifiPhy.Set ("CcaMode1Threshold", DoubleValue (-110.0) );
  32.216 +     wifiPhy.Set ("TxPowerStart", DoubleValue (15.0) );
  32.217 +     wifiPhy.Set ("RxGain", DoubleValue (0) ); 
  32.218 +     wifiPhy.Set ("RxNoiseFigure", DoubleValue (7) ); 
  32.219 +     uint32_t pktsRecvd = experiment.Run (wifi, wifiPhy, wifiMac, wifiChannel);
  32.220 +     dataset.Add (rss, pktsRecvd);
  32.221 +   }
  32.222 +
  32.223 +   gnuplot.AddDataset (dataset);
  32.224 +  }
  32.225 +  gnuplot.SetTerminal ("postscript eps color enh \"Times-BoldItalic\"");
  32.226 +  gnuplot.SetLegend ("RSS(dBm)", "Number of packets received");
  32.227 +  gnuplot.SetExtra  ("set xrange [-102:-83]");
  32.228 +  gnuplot.GenerateOutput (outfile);
  32.229 +  outfile.close ();
  32.230 +
  32.231 +  return 0;
  32.232 +}
    33.1 --- a/examples/wscript	Sat May 30 17:36:50 2009 +0100
    33.2 +++ b/examples/wscript	Sat May 30 17:37:38 2009 +0100
    33.3 @@ -120,6 +120,10 @@
    33.4                                   ['core', 'simulator', 'mobility', 'wifi'])
    33.5      obj.source = 'wifi-adhoc.cc'
    33.6  
    33.7 +    obj = bld.create_ns3_program('wifi-clear-channel-cmu',
    33.8 +                                 ['core', 'simulator', 'mobility', 'wifi'])
    33.9 +    obj.source = 'wifi-clear-channel-cmu.cc'
   33.10 +
   33.11      obj = bld.create_ns3_program('wifi-ap',
   33.12                                   ['core', 'simulator', 'mobility', 'wifi'])
   33.13      obj.source = 'wifi-ap.cc'
    34.1 --- a/samples/main-propagation-loss.cc	Sat May 30 17:36:50 2009 +0100
    34.2 +++ b/samples/main-propagation-loss.cc	Sat May 30 17:37:38 2009 +0100
    34.3 @@ -1,6 +1,6 @@
    34.4  /* -*-  Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
    34.5  /*
    34.6 - * Copyright (c) 2007 INRIA
    34.7 + * Copyright (c) 2008 Timo Bingmann
    34.8   *
    34.9   * This program is free software; you can redistribute it and/or modify
   34.10   * it under the terms of the GNU General Public License version 2 as
   34.11 @@ -15,45 +15,298 @@
   34.12   * along with this program; if not, write to the Free Software
   34.13   * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
   34.14   *
   34.15 - * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
   34.16 + * Author: Timo Bingmann <timo.bingmann@student.kit.edu>
   34.17   */
   34.18 +
   34.19  #include "ns3/propagation-loss-model.h"
   34.20 +#include "ns3/jakes-propagation-loss-model.h"
   34.21  #include "ns3/constant-position-mobility-model.h"
   34.22 +
   34.23  #include "ns3/config.h"
   34.24  #include "ns3/string.h"
   34.25 +#include "ns3/boolean.h"
   34.26 +#include "ns3/double.h"
   34.27 +#include "ns3/gnuplot.h"
   34.28 +#include "ns3/simulator.h"
   34.29 +
   34.30 +#include <map>
   34.31  
   34.32  using namespace ns3;
   34.33  
   34.34 -static void
   34.35 -PrintOne (double minTxpower, double maxTxpower, double stepTxpower, double min, double max, double step)
   34.36 +/// Round a double number to the given precision. e.g. dround(0.234, 0.1) = 0.2
   34.37 +/// and dround(0.257, 0.1) = 0.3
   34.38 +static double dround(double number, double precision)
   34.39 +{
   34.40 +  number /= precision;
   34.41 +  if (number >= 0)
   34.42 +    {
   34.43 +      number = floor(number + 0.5);
   34.44 +    }
   34.45 +  else
   34.46 +    {
   34.47 +      number = ceil(number - 0.5);
   34.48 +    }
   34.49 +  number *= precision;
   34.50 +  return number;
   34.51 +}
   34.52 +
   34.53 +static Gnuplot
   34.54 +TestDeterministic (Ptr<PropagationLossModel> model)
   34.55  {
   34.56    Ptr<ConstantPositionMobilityModel> a = CreateObject<ConstantPositionMobilityModel> ();
   34.57    Ptr<ConstantPositionMobilityModel> b = CreateObject<ConstantPositionMobilityModel> ();
   34.58 -  Ptr<LogDistancePropagationLossModel> log = CreateObject<LogDistancePropagationLossModel> ();
   34.59  
   34.60 -  Ptr<PropagationLossModel> model = log;
   34.61 +  Gnuplot plot;
   34.62  
   34.63 -  a->SetPosition (Vector (0.0, 0.0, 0.0));
   34.64 -  for (double x = min; x < max; x+= step)
   34.65 -    {
   34.66 -      b->SetPosition (Vector (x, 0.0, 0.0));
   34.67 -      std::cout << x << " ";
   34.68 -      for (double txpower = minTxpower; txpower < maxTxpower; txpower += stepTxpower)
   34.69 -        {
   34.70 -          double rxPowerDbm = model->CalcRxPower (txpower, a, b);
   34.71 -          std::cout << rxPowerDbm << " ";
   34.72 -        }
   34.73 -      std::cout << std::endl;
   34.74 -    }
   34.75 +  plot.AppendExtra("set xlabel 'Distance'");
   34.76 +  plot.AppendExtra("set ylabel 'rxPower (dBm)'");
   34.77 +  plot.AppendExtra("set key top right");
   34.78 +
   34.79 +  double txPowerDbm = +20; // dBm
   34.80 +
   34.81 +  Gnuplot2dDataset dataset;
   34.82 +
   34.83 +  dataset.SetStyle(Gnuplot2dDataset::LINES);
   34.84 +
   34.85 +  {
   34.86 +    a->SetPosition (Vector (0.0, 0.0, 0.0));
   34.87 +
   34.88 +    for (double distance = 0.0; distance < 2500.0; distance += 10.0)
   34.89 +      {
   34.90 +        b->SetPosition (Vector (distance, 0.0, 0.0));
   34.91 +
   34.92 +        // CalcRxPower() returns dBm.
   34.93 +        double rxPowerDbm = model->CalcRxPower (txPowerDbm, a, b);
   34.94 +
   34.95 +        dataset.Add(distance, rxPowerDbm);
   34.96 +
   34.97 +        Simulator::Stop (Seconds (1.0));
   34.98 +        Simulator::Run ();
   34.99 +      }
  34.100 +  }
  34.101 +
  34.102 +  std::ostringstream os;
  34.103 +  os << "txPower " << txPowerDbm << "dBm";
  34.104 +  dataset.SetTitle(os.str());
  34.105 +
  34.106 +  plot.AddDataset(dataset);
  34.107 +
  34.108 +  plot.AddDataset( Gnuplot2dFunction("-94 dBm CSThreshold", "-94.0") );
  34.109 +
  34.110 +  return plot;
  34.111 +}
  34.112 +
  34.113 +static Gnuplot
  34.114 +TestProbabilistic (Ptr<PropagationLossModel> model, unsigned int samples = 100000)
  34.115 +{
  34.116 +  Ptr<ConstantPositionMobilityModel> a = CreateObject<ConstantPositionMobilityModel> ();
  34.117 +  Ptr<ConstantPositionMobilityModel> b = CreateObject<ConstantPositionMobilityModel> ();
  34.118 +
  34.119 +  Gnuplot plot;
  34.120 +
  34.121 +  plot.AppendExtra("set xlabel 'Distance'");
  34.122 +  plot.AppendExtra("set ylabel 'rxPower (dBm)'");
  34.123 +  plot.AppendExtra("set zlabel 'Probability' offset 0,+10");
  34.124 +  plot.AppendExtra("set view 50, 120, 1.0, 1.0");
  34.125 +  plot.AppendExtra("set key top right");
  34.126 +
  34.127 +  plot.AppendExtra("set ticslevel 0");
  34.128 +  plot.AppendExtra("set xtics offset -0.5,0");
  34.129 +  plot.AppendExtra("set ytics offset 0,-0.5");
  34.130 +  plot.AppendExtra("set xrange [100:]");
  34.131 +
  34.132 +  double txPowerDbm = +20; // dBm
  34.133 +
  34.134 +  Gnuplot3dDataset dataset;
  34.135 +
  34.136 +  dataset.SetStyle("with linespoints");
  34.137 +  dataset.SetExtra("pointtype 3 pointsize 0.5");
  34.138 +  
  34.139 +  typedef std::map<double, unsigned int> rxPowerMapType;
  34.140 +
  34.141 +  // Take given number of samples from CalcRxPower() and show probability
  34.142 +  // density for discrete distances.
  34.143 +  {
  34.144 +    a->SetPosition (Vector (0.0, 0.0, 0.0));
  34.145 +
  34.146 +    for (double distance = 100.0; distance < 2500.0; distance += 100.0)
  34.147 +      {
  34.148 +        b->SetPosition (Vector (distance, 0.0, 0.0));
  34.149 +
  34.150 +        rxPowerMapType rxPowerMap;
  34.151 +
  34.152 +        for (unsigned int samp = 0; samp < samples; ++samp)
  34.153 +          {
  34.154 +            // CalcRxPower() returns dBm.
  34.155 +            double rxPowerDbm = model->CalcRxPower (txPowerDbm, a, b);
  34.156 +            rxPowerDbm = dround(rxPowerDbm, 1.0);
  34.157 +
  34.158 +            rxPowerMap[ rxPowerDbm ] ++;
  34.159 +
  34.160 +            Simulator::Stop (Seconds (0.01));
  34.161 +            Simulator::Run ();
  34.162 +          }
  34.163 +
  34.164 +        for (rxPowerMapType::const_iterator i = rxPowerMap.begin();
  34.165 +             i != rxPowerMap.end(); ++i)
  34.166 +          {
  34.167 +            dataset.Add(distance, i->first, (double)i->second / (double)samples);
  34.168 +          }
  34.169 +        dataset.AddEmptyLine();
  34.170 +      }
  34.171 +  }
  34.172 +
  34.173 +  std::ostringstream os;
  34.174 +  os << "txPower " << txPowerDbm << "dBm";
  34.175 +  dataset.SetTitle(os.str());
  34.176 +
  34.177 +  plot.AddDataset(dataset);
  34.178 +
  34.179 +  return plot;
  34.180 +}
  34.181 +
  34.182 +static Gnuplot
  34.183 +TestDeterministicByTime (Ptr<PropagationLossModel> model,
  34.184 +                         Time timeStep = Seconds(0.001),
  34.185 +                         Time timeTotal = Seconds(1.0),
  34.186 +                         double distance = 100.0)
  34.187 +{
  34.188 +  Ptr<ConstantPositionMobilityModel> a = CreateObject<ConstantPositionMobilityModel> ();
  34.189 +  Ptr<ConstantPositionMobilityModel> b = CreateObject<ConstantPositionMobilityModel> ();
  34.190 +
  34.191 +  Gnuplot plot;
  34.192 +
  34.193 +  plot.AppendExtra("set xlabel 'Time (s)'");
  34.194 +  plot.AppendExtra("set ylabel 'rxPower (dBm)'");
  34.195 +  plot.AppendExtra("set key center right");
  34.196 +
  34.197 +  double txPowerDbm = +20; // dBm
  34.198 +
  34.199 +  Gnuplot2dDataset dataset;
  34.200 +
  34.201 +  dataset.SetStyle(Gnuplot2dDataset::LINES);
  34.202 +
  34.203 +  {
  34.204 +    a->SetPosition (Vector (0.0, 0.0, 0.0));
  34.205 +    b->SetPosition (Vector (distance, 0.0, 0.0));
  34.206 +
  34.207 +    Time start = Simulator::Now();
  34.208 +    while( Simulator::Now() < start + timeTotal )
  34.209 +      {
  34.210 +        // CalcRxPower() returns dBm.
  34.211 +        double rxPowerDbm = model->CalcRxPower (txPowerDbm, a, b);
  34.212 +
  34.213 +        Time elapsed = Simulator::Now() - start;
  34.214 +        dataset.Add(elapsed.GetSeconds(), rxPowerDbm);
  34.215 +
  34.216 +        Simulator::Stop (timeStep);
  34.217 +        Simulator::Run ();
  34.218 +      }
  34.219 +  }
  34.220 +
  34.221 +  std::ostringstream os;
  34.222 +  os << "txPower " << txPowerDbm << "dBm";
  34.223 +  dataset.SetTitle(os.str());
  34.224 +
  34.225 +  plot.AddDataset(dataset);
  34.226 +
  34.227 +  plot.AddDataset( Gnuplot2dFunction("-94 dBm CSThreshold", "-94.0") );
  34.228 +
  34.229 +  return plot;
  34.230  }
  34.231  
  34.232  int main (int argc, char *argv[])
  34.233  {
  34.234 +  GnuplotCollection gnuplots("main-propagation-loss.pdf");
  34.235  
  34.236 -  Config::SetDefault ("ns3::LogDistancePropagationLossModel::ReferenceDistance", StringValue ("1.0"));
  34.237 -  Config::SetDefault ("ns3::LogDistancePropagationLossModel::Exponent", StringValue ("4"));
  34.238 +  {
  34.239 +    Ptr<FriisPropagationLossModel> friis = CreateObject<FriisPropagationLossModel> ();
  34.240  
  34.241 -  PrintOne (-10, 20, 5, 0, 10000, 2);
  34.242 +    Gnuplot plot = TestDeterministic(friis);
  34.243 +    plot.SetTitle("ns3::FriisPropagationLossModel (Default Parameters)");
  34.244 +    gnuplots.AddPlot(plot);
  34.245 +  }
  34.246 +
  34.247 +  {
  34.248 +    Ptr<LogDistancePropagationLossModel> log = CreateObject<LogDistancePropagationLossModel> ();
  34.249 +    log->SetAttribute("Exponent", DoubleValue (2.5));
  34.250 +
  34.251 +    Gnuplot plot = TestDeterministic(log);
  34.252 +    plot.SetTitle("ns3::LogDistancePropagationLossModel (Exponent = 2.5)");
  34.253 +    gnuplots.AddPlot(plot);
  34.254 +  }
  34.255 +
  34.256 +  {
  34.257 +    Ptr<RandomPropagationLossModel> random = CreateObject<RandomPropagationLossModel> ();
  34.258 +    random->SetAttribute("Variable", RandomVariableValue(ExponentialVariable(50.0)));
  34.259 +
  34.260 +    Gnuplot plot = TestDeterministic(random);
  34.261 +    plot.SetTitle("ns3::RandomPropagationLossModel with Exponential Distribution");
  34.262 +    gnuplots.AddPlot(plot);
  34.263 +  }
  34.264 +
  34.265 +  {
  34.266 +    Ptr<JakesPropagationLossModel> jakes = CreateObject<JakesPropagationLossModel> ();
  34.267 +
  34.268 +    // doppler frequency shift for 5.15 GHz at 100 km/h
  34.269 +    jakes->SetAttribute("DopplerFreq", DoubleValue(477.9));
  34.270 +
  34.271 +    Gnuplot plot = TestDeterministicByTime (jakes, Seconds(0.001), Seconds(1.0));
  34.272 +    plot.SetTitle("ns3::JakesPropagationLossModel (with 477.9 Hz shift and 1 millisec resolution)");
  34.273 +    gnuplots.AddPlot(plot);
  34.274 +  }
  34.275 +
  34.276 +  {
  34.277 +    Ptr<JakesPropagationLossModel> jakes = CreateObject<JakesPropagationLossModel> ();
  34.278 +
  34.279 +    // doppler frequency shift for 5.15 GHz at 100 km/h
  34.280 +    jakes->SetAttribute("DopplerFreq", DoubleValue(477.9));
  34.281 +
  34.282 +    Gnuplot plot = TestDeterministicByTime (jakes, Seconds(0.0001), Seconds(0.1));
  34.283 +    plot.SetTitle("ns3::JakesPropagationLossModel (with 477.9 Hz shift and 0.1 millisec resolution)");
  34.284 +    gnuplots.AddPlot(plot);
  34.285 +  }
  34.286 +
  34.287 +  {
  34.288 +    Ptr<ThreeLogDistancePropagationLossModel> log3 = CreateObject<ThreeLogDistancePropagationLossModel> ();
  34.289 +
  34.290 +    Gnuplot plot = TestDeterministic(log3);
  34.291 +    plot.SetTitle("ns3::ThreeLogDistancePropagationLossModel (Defaults)");
  34.292 +    gnuplots.AddPlot(plot);
  34.293 +  }
  34.294 +
  34.295 +  {
  34.296 +    Ptr<ThreeLogDistancePropagationLossModel> log3 = CreateObject<ThreeLogDistancePropagationLossModel> ();
  34.297 +    // more prominent example values:
  34.298 +    log3->SetAttribute("Exponent0", DoubleValue(1.0));
  34.299 +    log3->SetAttribute("Exponent1", DoubleValue(3.0));
  34.300 +    log3->SetAttribute("Exponent2", DoubleValue(10.0));
  34.301 +
  34.302 +    Gnuplot plot = TestDeterministic(log3);
  34.303 +    plot.SetTitle("ns3::ThreeLogDistancePropagationLossModel (Exponents 1.0, 3.0 and 10.0)");
  34.304 +    gnuplots.AddPlot(plot);
  34.305 +  }
  34.306 +
  34.307 +  {
  34.308 +    Ptr<NakagamiPropagationLossModel> nak = CreateObject<NakagamiPropagationLossModel> ();
  34.309 +
  34.310 +    Gnuplot plot = TestProbabilistic(nak);
  34.311 +    plot.SetTitle("ns3::NakagamiPropagationLossModel (Default Parameters)");
  34.312 +    gnuplots.AddPlot(plot);
  34.313 +  }
  34.314 +
  34.315 +  {
  34.316 +    Ptr<ThreeLogDistancePropagationLossModel> log3 = CreateObject<ThreeLogDistancePropagationLossModel> ();
  34.317 +
  34.318 +    Ptr<NakagamiPropagationLossModel> nak = CreateObject<NakagamiPropagationLossModel> ();
  34.319 +    log3->SetNext(nak);
  34.320 +
  34.321 +    Gnuplot plot = TestProbabilistic(log3);
  34.322 +    plot.SetTitle("ns3::ThreeLogDistancePropagationLossModel and ns3::NakagamiPropagationLossModel (Default Parameters)");
  34.323 +    gnuplots.AddPlot(plot);
  34.324 +  }
  34.325 +
  34.326 +  gnuplots.GenerateOutput(std::cout);
  34.327  
  34.328    return 0;
  34.329  }
    35.1 --- a/src/applications/packet-sink/packet-sink.cc	Sat May 30 17:36:50 2009 +0100
    35.2 +++ b/src/applications/packet-sink/packet-sink.cc	Sat May 30 17:37:38 2009 +0100
    35.3 @@ -18,10 +18,12 @@
    35.4   * Author:  Tom Henderson (tomhend@u.washington.edu)
    35.5   */
    35.6  #include "ns3/address.h"
    35.7 +#include "ns3/address-utils.h"
    35.8  #include "ns3/log.h"
    35.9  #include "ns3/inet-socket-address.h"
   35.10  #include "ns3/node.h"
   35.11  #include "ns3/socket.h"
   35.12 +#include "ns3/udp-socket.h"
   35.13  #include "ns3/simulator.h"
   35.14  #include "ns3/socket-factory.h"
   35.15  #include "ns3/packet.h"
   35.16 @@ -88,6 +90,19 @@
   35.17        m_socket = Socket::CreateSocket (GetNode(), m_tid);
   35.18        m_socket->Bind (m_local);
   35.19        m_socket->Listen ();
   35.20 +      if (addressUtils::IsMulticast (m_local))
   35.21 +        {
   35.22 +          Ptr<UdpSocket> udpSocket = DynamicCast<UdpSocket> (m_socket);
   35.23 +          if (udpSocket)
   35.24 +            {
   35.25 +              // equivalent to setsockopt (MCAST_JOIN_GROUP)
   35.26 +              udpSocket->MulticastJoinGroup (0, m_local);
   35.27 +            }
   35.28 +          else
   35.29 +            {
   35.30 +              NS_FATAL_ERROR ("Error: joining multicast on a non-UDP socket");
   35.31 +            }
   35.32 +        }
   35.33      }
   35.34  
   35.35    m_socket->SetRecvCallback (MakeCallback(&PacketSink::HandleRead, this));
    36.1 --- a/src/applications/udp-echo/udp-echo-server.cc	Sat May 30 17:36:50 2009 +0100
    36.2 +++ b/src/applications/udp-echo/udp-echo-server.cc	Sat May 30 17:37:38 2009 +0100
    36.3 @@ -18,9 +18,11 @@
    36.4  
    36.5  #include "ns3/log.h"
    36.6  #include "ns3/ipv4-address.h"
    36.7 +#include "ns3/address-utils.h"
    36.8  #include "ns3/nstime.h"
    36.9  #include "ns3/inet-socket-address.h"
   36.10  #include "ns3/socket.h"
   36.11 +#include "ns3/udp-socket.h"
   36.12  #include "ns3/simulator.h"
   36.13  #include "ns3/socket-factory.h"
   36.14  #include "ns3/packet.h"
   36.15 @@ -76,6 +78,19 @@
   36.16        m_socket = Socket::CreateSocket (GetNode(), tid);
   36.17        InetSocketAddress local = InetSocketAddress (Ipv4Address::GetAny (), m_port);
   36.18        m_socket->Bind (local);
   36.19 +      if (addressUtils::IsMulticast (m_local))
   36.20 +        {
   36.21 +          Ptr<UdpSocket> udpSocket = DynamicCast<UdpSocket> (m_socket);
   36.22 +          if (udpSocket)
   36.23 +            {
   36.24 +              // equivalent to setsockopt (MCAST_JOIN_GROUP)
   36.25 +              udpSocket->MulticastJoinGroup (0, m_local);
   36.26 +            }
   36.27 +          else
   36.28 +            {
   36.29 +              NS_FATAL_ERROR ("Error: joining multicast on a non-UDP socket");
   36.30 +            }
   36.31 +        }
   36.32      }
   36.33  
   36.34    m_socket->SetRecvCallback(MakeCallback(&UdpEchoServer::HandleRead, this));
    37.1 --- a/src/core/object.cc	Sat May 30 17:36:50 2009 +0100
    37.2 +++ b/src/core/object.cc	Sat May 30 17:37:38 2009 +0100
    37.3 @@ -160,6 +160,24 @@
    37.4    other->m_next = next;
    37.5    NS_ASSERT (CheckLoose ());
    37.6    NS_ASSERT (o->CheckLoose ());
    37.7 +  // call NotifyNewAggregate in the listed chain
    37.8 +  Object *currentObject = this;
    37.9 +  do 
   37.10 +    {
   37.11 +      // the NotifyNewAggregate of the current object implementation
   37.12 +      // should be called on the next object in the linked chain
   37.13 +      currentObject->NotifyNewAggregate ();
   37.14 +      currentObject = currentObject->m_next;
   37.15 +    } while (currentObject != this);
   37.16 +}
   37.17 +/**
   37.18 + * This function must be implemented in the stack that needs to notify
   37.19 + * other stacks connected to the node of their presence in the node.
   37.20 + */
   37.21 +void
   37.22 +Object::NotifyNewAggregate ()
   37.23 +{
   37.24 +
   37.25  }
   37.26  
   37.27  Object::AggregateIterator 
    38.1 --- a/src/core/object.h	Sat May 30 17:36:50 2009 +0100
    38.2 +++ b/src/core/object.h	Sat May 30 17:37:38 2009 +0100
    38.3 @@ -160,6 +160,13 @@
    38.4    AggregateIterator GetAggregateIterator (void) const;
    38.5  
    38.6  protected:
    38.7 + /**
    38.8 +  * This function is called by the AggregateObject on all the objects connected in the listed chain.
    38.9 +  * This way the new object aggregated will be used if needed by the NotifyNewAggregate corresponding
   38.10 +  * to each object connected in the listed chain. It should be implemented by objects needing an
   38.11 +  * additional/special behavior when aggregated to another object.
   38.12 +  */
   38.13 +  virtual void NotifyNewAggregate ();
   38.14    /**
   38.15     * This method is called by Object::Dispose or by the object's 
   38.16     * destructor, whichever comes first.
    39.1 --- a/src/devices/emu/emu-net-device.cc	Sat May 30 17:36:50 2009 +0100
    39.2 +++ b/src/devices/emu/emu-net-device.cc	Sat May 30 17:37:38 2009 +0100
    39.3 @@ -173,7 +173,9 @@
    39.4    m_sock (-1),
    39.5    m_readThread (0),
    39.6    m_ifIndex (std::numeric_limits<uint32_t>::max ()),  // absurdly large value
    39.7 -  m_sll_ifindex (-1)
    39.8 +  m_sll_ifindex (-1),
    39.9 +  m_isBroadcast (true),
   39.10 +  m_isMulticast (false)
   39.11  {
   39.12    NS_LOG_FUNCTION (this);
   39.13    Start (m_tStart);
   39.14 @@ -293,7 +295,19 @@
   39.15      {
   39.16        NS_FATAL_ERROR ("EmuNetDevice::StartDevice(): " << m_deviceName << " is not in promiscuous mode");
   39.17      }
   39.18 -
   39.19 +  if ((ifr.ifr_flags & IFF_BROADCAST) != IFF_BROADCAST)
   39.20 +    {
   39.21 +      // We default m_isBroadcast to true but turn it off here if not
   39.22 +      // supported, because in the common case, overlying IP code will 
   39.23 +      // assert during configuration time if this is false, before this
   39.24 +      // method has a chance to set it during runtime
   39.25 +      m_isBroadcast = false;
   39.26 +    }
   39.27 +  if ((ifr.ifr_flags & IFF_MULTICAST) == IFF_MULTICAST)
   39.28 +    {
   39.29 +      // This one is OK to enable at runtime
   39.30 +      m_isMulticast = true;
   39.31 +    }
   39.32    //
   39.33    // Now spin up a read thread to read packets.
   39.34    //
   39.35 @@ -918,7 +932,7 @@
   39.36  bool 
   39.37  EmuNetDevice::IsBroadcast (void) const
   39.38  {
   39.39 -  return true;
   39.40 +  return m_isBroadcast;
   39.41  }
   39.42  
   39.43  Address
   39.44 @@ -930,7 +944,7 @@
   39.45  bool 
   39.46  EmuNetDevice::IsMulticast (void) const
   39.47  {
   39.48 -  return false;
   39.49 +  return m_isMulticast;
   39.50  }
   39.51  
   39.52    Address 
    40.1 --- a/src/devices/emu/emu-net-device.h	Sat May 30 17:36:50 2009 +0100
    40.2 +++ b/src/devices/emu/emu-net-device.h	Sat May 30 17:37:38 2009 +0100
    40.3 @@ -453,6 +453,18 @@
    40.4    bool m_linkUp;
    40.5  
    40.6    /**
    40.7 +   * Flag indicating whether or not the underlying net device supports 
    40.8 +   * broadcast.
    40.9 +   */
   40.10 +  bool m_isBroadcast;
   40.11 +
   40.12 +  /**
   40.13 +   * Flag indicating whether or not the underlying net device supports
   40.14 +   * multicast.
   40.15 +   */
   40.16 +  bool m_isMulticast;
   40.17 +
   40.18 +  /**
   40.19     * Callback to fire if the link changes state (up or down).
   40.20     */
   40.21    Callback<void> m_linkChangeCallback;
    41.1 --- a/src/devices/tap-bridge/tap-bridge.cc	Sat May 30 17:36:50 2009 +0100
    41.2 +++ b/src/devices/tap-bridge/tap-bridge.cc	Sat May 30 17:37:38 2009 +0100
    41.3 @@ -342,7 +342,7 @@
    41.4        Ptr<NetDevice> nd = GetBridgedNetDevice ();
    41.5        Ptr<Node> n = nd->GetNode ();
    41.6        Ptr<Ipv4> ipv4 = n->GetObject<Ipv4> ();
    41.7 -      uint32_t index = ipv4->FindInterfaceForDevice (nd);
    41.8 +      uint32_t index = ipv4->GetInterfaceForDevice (nd);
    41.9        if (ipv4->GetNAddresses (index) > 1)
   41.10          {
   41.11            NS_LOG_WARN ("Underlying bridged NetDevice has multiple IP addresses; using first one.");
    42.1 --- a/src/devices/wifi/adhoc-wifi-mac.cc	Sat May 30 17:36:50 2009 +0100
    42.2 +++ b/src/devices/wifi/adhoc-wifi-mac.cc	Sat May 30 17:37:38 2009 +0100
    42.3 @@ -98,7 +98,6 @@
    42.4  AdhocWifiMac::SetEifsNoDifs (Time eifsNoDifs)
    42.5  {
    42.6    m_dcfManager->SetEifsNoDifs (eifsNoDifs);
    42.7 -  m_eifsNoDifs = eifsNoDifs;
    42.8  }
    42.9  void 
   42.10  AdhocWifiMac::SetAckTimeout (Time ackTimeout)
   42.11 @@ -128,7 +127,7 @@
   42.12  Time 
   42.13  AdhocWifiMac::GetEifsNoDifs (void) const
   42.14  {
   42.15 -  return m_eifsNoDifs;
   42.16 +  return m_dcfManager->GetEifsNoDifs ();
   42.17  }
   42.18  Time 
   42.19  AdhocWifiMac::GetAckTimeout (void) const
   42.20 @@ -241,7 +240,7 @@
   42.21  }
   42.22  
   42.23  void 
   42.24 -AdhocWifiMac::ForwardUp (Ptr<Packet> packet, WifiMacHeader const *hdr)
   42.25 +AdhocWifiMac::ForwardUp (Ptr<Packet> packet, const WifiMacHeader *hdr)
   42.26  {
   42.27    NS_LOG_DEBUG ("received size="<<packet->GetSize ()<<", from="<<hdr->GetAddr2 ());
   42.28    m_upCallback (packet, hdr->GetAddr2 (), hdr->GetAddr1 ());
    43.1 --- a/src/devices/wifi/adhoc-wifi-mac.h	Sat May 30 17:36:50 2009 +0100
    43.2 +++ b/src/devices/wifi/adhoc-wifi-mac.h	Sat May 30 17:37:38 2009 +0100
    43.3 @@ -83,7 +83,7 @@
    43.4    // inherited from Object base class.
    43.5    virtual void DoDispose (void);
    43.6    /* invoked by the MacLows. */
    43.7 -  void ForwardUp (Ptr<Packet> packet, WifiMacHeader const*hdr);
    43.8 +  void ForwardUp (Ptr<Packet> packet, const WifiMacHeader *hdr);
    43.9    AdhocWifiMac (const AdhocWifiMac & ctor_arg);
   43.10    AdhocWifiMac &operator = (const AdhocWifiMac &o);
   43.11    Ptr<DcaTxop> GetDcaTxop(void) const;
   43.12 @@ -97,7 +97,6 @@
   43.13    MacRxMiddle *m_rxMiddle;
   43.14    Ptr<MacLow> m_low;
   43.15    Ssid m_ssid;
   43.16 -  Time m_eifsNoDifs;
   43.17  };
   43.18  
   43.19  } // namespace ns3
    44.1 --- a/src/devices/wifi/dca-txop.cc	Sat May 30 17:36:50 2009 +0100
    44.2 +++ b/src/devices/wifi/dca-txop.cc	Sat May 30 17:37:38 2009 +0100
    44.3 @@ -232,7 +232,7 @@
    44.4  }
    44.5  
    44.6  void 
    44.7 -DcaTxop::Queue (Ptr<const Packet> packet, WifiMacHeader const &hdr)
    44.8 +DcaTxop::Queue (Ptr<const Packet> packet, const WifiMacHeader &hdr)
    44.9  {
   44.10    NS_LOG_FUNCTION (this << packet << &hdr);
   44.11    WifiMacTrailer fcs;
    45.1 --- a/src/devices/wifi/dca-txop.h	Sat May 30 17:36:50 2009 +0100
    45.2 +++ b/src/devices/wifi/dca-txop.h	Sat May 30 17:37:38 2009 +0100
    45.3 @@ -67,8 +67,8 @@
    45.4  public:
    45.5    static TypeId GetTypeId (void);
    45.6  
    45.7 -  typedef Callback <void, WifiMacHeader const&> TxOk;
    45.8 -  typedef Callback <void, WifiMacHeader const&> TxFailed;
    45.9 +  typedef Callback <void, const WifiMacHeader&> TxOk;
   45.10 +  typedef Callback <void, const WifiMacHeader&> TxFailed;
   45.11  
   45.12    DcaTxop ();
   45.13    ~DcaTxop ();
   45.14 @@ -104,7 +104,7 @@
   45.15     * Store the packet in the internal queue until it
   45.16     * can be sent safely.
   45.17     */
   45.18 -  void Queue (Ptr<const Packet> packet, WifiMacHeader const &hdr);
   45.19 +  void Queue (Ptr<const Packet> packet, const WifiMacHeader &hdr);
   45.20  
   45.21  private:
   45.22    class TransmissionListener;
    46.1 --- a/src/devices/wifi/dcf-manager.cc	Sat May 30 17:36:50 2009 +0100
    46.2 +++ b/src/devices/wifi/dcf-manager.cc	Sat May 30 17:37:38 2009 +0100
    46.3 @@ -261,6 +261,11 @@
    46.4  {
    46.5    m_eifsNoDifs = eifsNoDifs;
    46.6  }
    46.7 +Time
    46.8 +DcfManager::GetEifsNoDifs () const
    46.9 +{
   46.10 +  return m_eifsNoDifs;
   46.11 +}
   46.12  
   46.13  void 
   46.14  DcfManager::Add (DcfState *dcf)
    47.1 --- a/src/devices/wifi/dcf-manager.h	Sat May 30 17:36:50 2009 +0100
    47.2 +++ b/src/devices/wifi/dcf-manager.h	Sat May 30 17:37:38 2009 +0100
    47.3 @@ -169,6 +169,11 @@
    47.4    void SetEifsNoDifs (Time eifsNoDifs);
    47.5  
    47.6    /**
    47.7 +   * \return value set previously using SetEifsNoDifs.
    47.8 +   */
    47.9 +  Time GetEifsNoDifs () const;
   47.10 +
   47.11 +  /**
   47.12     * \param dcf a new DcfState.
   47.13     *
   47.14     * The DcfManager does not take ownership of this pointer so, the callee
    48.1 --- a/src/devices/wifi/interference-helper.cc	Sat May 30 17:36:50 2009 +0100
    48.2 +++ b/src/devices/wifi/interference-helper.cc	Sat May 30 17:37:38 2009 +0100
    48.3 @@ -123,7 +123,7 @@
    48.4   ****************************************************************/
    48.5  
    48.6  InterferenceHelper::InterferenceHelper ()
    48.7 -  : m_80211a (false),
    48.8 +  : m_80211_standard (WIFI_PHY_STANDARD_80211a),
    48.9      m_errorRateModel (0)
   48.10  {}
   48.11  InterferenceHelper::~InterferenceHelper ()
   48.12 @@ -227,12 +227,25 @@
   48.13  Time
   48.14  InterferenceHelper::CalculateTxDuration (uint32_t size, WifiMode payloadMode, WifiPreamble preamble) const
   48.15  {
   48.16 -  NS_ASSERT (m_80211a);
   48.17    uint64_t delay = 0;
   48.18 -  delay += m_plcpLongPreambleDelayUs;
   48.19 -  // symbol duration is 4us
   48.20 -  delay += 4;
   48.21 -  delay += lrint (ceil ((size * 8.0 + 16.0 + 6.0) / payloadMode.GetDataRate () / 4e-6) * 4);
   48.22 +  switch (m_80211_standard) 
   48.23 +  {
   48.24 +    case WIFI_PHY_STANDARD_80211a:
   48.25 +    case WIFI_PHY_STANDARD_holland:
   48.26 +      delay += m_plcpLongPreambleDelayUs;
   48.27 +      // symbol duration is 4us
   48.28 +      delay += 4;
   48.29 +      delay += lrint (ceil ((size * 8.0 + 16.0 + 6.0) / payloadMode.GetDataRate () / 4e-6) * 4);
   48.30 +      break;
   48.31 +    case WIFI_PHY_STANDARD_80211b:
   48.32 +      delay += m_plcpLongPreambleDelayUs;
   48.33 +      delay += lrint (ceil ((size * 8.0 + 48.0) / payloadMode.GetDataRate () / 4e-6) * 4);
   48.34 +      break;
   48.35 +    default:
   48.36 +     NS_ASSERT (false);
   48.37 +     break;
   48.38 +  }
   48.39 +
   48.40    return MicroSeconds (delay);
   48.41  }
   48.42  
   48.43 @@ -240,7 +253,7 @@
   48.44  InterferenceHelper::Configure80211aParameters (void)
   48.45  {
   48.46    NS_LOG_FUNCTION (this);
   48.47 -  m_80211a = true;
   48.48 +  m_80211_standard = WIFI_PHY_STANDARD_80211a;
   48.49    m_plcpLongPreambleDelayUs = 16;
   48.50    m_plcpShortPreambleDelayUs = 16;
   48.51    m_longPlcpHeaderMode = WifiPhy::Get6mba ();
   48.52 @@ -250,6 +263,20 @@
   48.53    m_maxPacketDuration = CalculateTxDuration (4095, WifiPhy::Get6mba (), WIFI_PREAMBLE_LONG);
   48.54  }
   48.55  
   48.56 +void
   48.57 +InterferenceHelper::Configure80211bParameters (void)
   48.58 +{ 
   48.59 +  NS_LOG_FUNCTION (this);
   48.60 +  m_80211_standard = WIFI_PHY_STANDARD_80211b;
   48.61 +  m_plcpLongPreambleDelayUs = 144;
   48.62 +  m_plcpShortPreambleDelayUs = 144; // fixed preamable for 802.11b
   48.63 +  m_longPlcpHeaderMode = WifiPhy::Get1mbb ();
   48.64 +  m_shortPlcpHeaderMode = WifiPhy::Get1mbb ();
   48.65 +  // PLCP Header: signal 8, service 8, length 16, CRC 16 bits
   48.66 +  m_plcpHeaderLength = 8 + 8 + 16 + 16;
   48.67 +  m_maxPacketDuration = CalculateTxDuration (4095, WifiPhy::Get1mbb (), WIFI_PREAMBLE_LONG);
   48.68 +}
   48.69 +
   48.70  void 
   48.71  InterferenceHelper::AppendEvent (Ptr<InterferenceHelper::Event> event)
   48.72  {
    49.1 --- a/src/devices/wifi/interference-helper.h	Sat May 30 17:36:50 2009 +0100
    49.2 +++ b/src/devices/wifi/interference-helper.h	Sat May 30 17:37:38 2009 +0100
    49.3 @@ -25,6 +25,7 @@
    49.4  #include <list>
    49.5  #include "wifi-mode.h"
    49.6  #include "wifi-preamble.h"
    49.7 +#include "wifi-phy-standard.h"
    49.8  #include "ns3/nstime.h"
    49.9  #include "ns3/ref-count-base.h"
   49.10  
   49.11 @@ -69,6 +70,7 @@
   49.12    ~InterferenceHelper ();
   49.13  
   49.14    void Configure80211aParameters (void);
   49.15 +  void Configure80211bParameters (void);
   49.16    void SetNoiseFigure (double value);
   49.17    void SetErrorRateModel (Ptr<ErrorRateModel> rate);
   49.18  
   49.19 @@ -120,7 +122,7 @@
   49.20    Time m_maxPacketDuration;
   49.21    double m_noiseFigure; /**< noise figure (linear) */
   49.22    Events m_events;
   49.23 -  bool m_80211a;
   49.24 +  enum WifiPhyStandard m_80211_standard;
   49.25    Ptr<ErrorRateModel> m_errorRateModel;
   49.26  };
   49.27  
    50.1 --- a/src/devices/wifi/jakes-propagation-loss-model.cc	Sat May 30 17:36:50 2009 +0100
    50.2 +++ b/src/devices/wifi/jakes-propagation-loss-model.cc	Sat May 30 17:37:38 2009 +0100
    50.3 @@ -127,7 +127,7 @@
    50.4  
    50.5  NS_OBJECT_ENSURE_REGISTERED (JakesPropagationLossModel);
    50.6  
    50.7 -const double JakesPropagationLossModel::PI = 3.1415;
    50.8 +const double JakesPropagationLossModel::PI = 3.14159265358979323846;
    50.9  
   50.10  TypeId
   50.11  JakesPropagationLossModel::GetTypeId (void)
    51.1 --- a/src/devices/wifi/msdu-aggregator.cc	Sat May 30 17:36:50 2009 +0100
    51.2 +++ b/src/devices/wifi/msdu-aggregator.cc	Sat May 30 17:37:38 2009 +0100
    51.3 @@ -59,7 +59,7 @@
    51.4       
    51.5       padding = (4 - ((hdr.GetLength () + 14) %4 )) % 4;
    51.6    
    51.7 -     if (padding > 0)
    51.8 +     if (padding > 0 && deserialized < maxSize)
    51.9         {
   51.10           aggregatedPacket->RemoveAtStart (padding);
   51.11           deserialized += padding;
    52.1 --- a/src/devices/wifi/msdu-standard-aggregator.cc	Sat May 30 17:36:50 2009 +0100
    52.2 +++ b/src/devices/wifi/msdu-standard-aggregator.cc	Sat May 30 17:37:38 2009 +0100
    52.3 @@ -57,19 +57,20 @@
    52.4    Ptr<Packet> currentPacket;
    52.5    AmsduSubframeHeader currentHdr;
    52.6  
    52.7 -  uint32_t padding = CalculatePadding (packet);
    52.8 +  uint32_t padding = CalculatePadding (aggregatedPacket);
    52.9    uint32_t actualSize = aggregatedPacket->GetSize ();
   52.10                            
   52.11    if ((14 + packet->GetSize () + actualSize + padding) <= m_maxAmsduLength)
   52.12      {
   52.13 +      if (padding)
   52.14 +        {
   52.15 +          aggregatedPacket->AddPaddingAtEnd (padding);
   52.16 +        }
   52.17        currentHdr.SetDestinationAddr (dest);
   52.18        currentHdr.SetSourceAddr (src);
   52.19        currentHdr.SetLength (packet->GetSize ());
   52.20        currentPacket = packet->Copy ();
   52.21 -      if (padding)
   52.22 -        {
   52.23 -          currentPacket->AddPaddingAtEnd (padding);
   52.24 -        }
   52.25 +      
   52.26        currentPacket->AddHeader (currentHdr);
   52.27        aggregatedPacket->AddAtEnd (currentPacket);
   52.28        return true;
   52.29 @@ -80,7 +81,7 @@
   52.30  uint32_t
   52.31  MsduStandardAggregator::CalculatePadding (Ptr<const Packet> packet)
   52.32  {
   52.33 -  return (4 - ((packet->GetSize() + 14) %4 )) % 4;
   52.34 +  return (4 - (packet->GetSize() %4 )) % 4;
   52.35  }
   52.36  
   52.37  }  //namespace ns3
    53.1 --- a/src/devices/wifi/msdu-standard-aggregator.h	Sat May 30 17:36:50 2009 +0100
    53.2 +++ b/src/devices/wifi/msdu-standard-aggregator.h	Sat May 30 17:37:38 2009 +0100
    53.3 @@ -43,7 +43,8 @@
    53.4    virtual bool Aggregate (Ptr<const Packet> packet, Ptr<Packet> aggregatedPacket,
    53.5                            Mac48Address src, Mac48Address dest);
    53.6  private:
    53.7 -  /*  Calculates how much padding must be added to the end of packet.
    53.8 +  /*  Calculates how much padding must be added to the end of aggregated packet,
    53.9 +      after that a new packet is added.
   53.10        Each A-MSDU subframe is padded so that its length is multiple of 4 octects.
   53.11     */
   53.12    uint32_t CalculatePadding (Ptr<const Packet> packet);
    54.1 --- a/src/devices/wifi/nqap-wifi-mac.cc	Sat May 30 17:36:50 2009 +0100
    54.2 +++ b/src/devices/wifi/nqap-wifi-mac.cc	Sat May 30 17:37:38 2009 +0100
    54.3 @@ -152,7 +152,6 @@
    54.4  {
    54.5    NS_LOG_FUNCTION (this << eifsNoDifs);
    54.6    m_dcfManager->SetEifsNoDifs (eifsNoDifs);
    54.7 -  m_eifsNoDifs = eifsNoDifs;
    54.8  }
    54.9  void 
   54.10  NqapWifiMac::SetAckTimeout (Time ackTimeout)
   54.11 @@ -182,7 +181,7 @@
   54.12  Time 
   54.13  NqapWifiMac::GetEifsNoDifs (void) const
   54.14  {
   54.15 -  return m_eifsNoDifs;
   54.16 +  return m_dcfManager->GetEifsNoDifs ();
   54.17  }
   54.18  Time 
   54.19  NqapWifiMac::GetAckTimeout (void) const
    55.1 --- a/src/devices/wifi/nqap-wifi-mac.h	Sat May 30 17:36:50 2009 +0100
    55.2 +++ b/src/devices/wifi/nqap-wifi-mac.h	Sat May 30 17:37:38 2009 +0100
    55.3 @@ -129,7 +129,6 @@
    55.4    Ptr<MacLow> m_low;
    55.5    Ssid m_ssid;
    55.6    EventId m_beaconEvent;
    55.7 -  Time m_eifsNoDifs;
    55.8  };
    55.9  
   55.10  } // namespace ns3
    56.1 --- a/src/devices/wifi/nqsta-wifi-mac.cc	Sat May 30 17:36:50 2009 +0100
    56.2 +++ b/src/devices/wifi/nqsta-wifi-mac.cc	Sat May 30 17:37:38 2009 +0100
    56.3 @@ -156,7 +156,6 @@
    56.4  {
    56.5    NS_LOG_FUNCTION (this << eifsNoDifs);
    56.6    m_dcfManager->SetEifsNoDifs (eifsNoDifs);
    56.7 -  m_eifsNoDifs = eifsNoDifs;
    56.8  }
    56.9  void 
   56.10  NqstaWifiMac::SetAckTimeout (Time ackTimeout)
   56.11 @@ -186,7 +185,7 @@
   56.12  Time 
   56.13  NqstaWifiMac::GetEifsNoDifs (void) const