next up previous contents index
Next: 6.4 Proposed roadmap Up: 6. ns-3 routing Previous: 6.2 RouteManager   Contents   Index

6.3 Node routing interface

//
// Interface for static routing
// - interface class patterned after route(8) (Linux man page)
// - the two main operations are "add" and "del"
//
// route [-v] [-A family] add [-net|-host] target [netmask Nm] [gw Gw] 
// [metric N] [mss M] [window W] [irtt I] [reject] [mod] [dyn] 
// [reinstate] [[dev] If]
//
// route [-v] [-A family] del [-net|-host] target [gw Gw] [netmask Nm] 
// [metric N] [[dev] If] 
//

class Ipv4RouteMetrics
{
  // This will be a class to allow to pass route metrics across the API,
  // such as "metric", "mss", "window", "irtt", "flags (mod, dyn, reinstate)
}

class Ipv4RouteObject;  // analogous to routing struct in kernel that holds
                        // state for the route; used to fetch at the API

class Ipv4Route : public Object
{
public:
  static const InterfaceId iid;

  virtual void AddHostRoute (Ipv4Address target, 
                             Ipv4Mask netmask, 
                             Ipv4Address gateway) = 0;

  virtual void AddHostRoute (Ipv4Address target, 
                             Ipv4Mask netmask, 
                             uint32_t interface) = 0;

  virtual void AddNetworkRoute (Ipv4Address target, 
                                Ipv4Mask netmask, 
                                Ipv4Address gateway) = 0;

  virtual void AddNetworkRoute (Ipv4Address target, 
                                Ipv4Mask netmask, 
                                uint32_t interface) = 0;

  // Define future variants of the above that allow an Ipv4RouteMetrics to
  // also be passed

  virtual void AddDefaultRoute (Ipv4Address gateway) = 0; 

  virtual void AddDefaultRoute (Ipv4Address gateway,
                                uint32_t interface) = 0; 


  virtual void DelHostRoute (Ipv4Address target) = 0;

  virtual void DelHostRoute (Ipv4Address target, 
                             Ipv4Mask netmask, 
                             Ipv4Address gateway) = 0;

  virtual void DelHostRoute (Ipv4Address target, 
                             Ipv4Mask netmask, 
                             uint32_t interface) = 0;

  virtual void DelNetworkRoute (Ipv4Address target,
                                Ipv4Mask netmask) = 0;

  virtual void DelNetworkRoute (Ipv4Address target, 
                                Ipv4Mask netmask, 
                                Ipv4Address gateway) = 0;

  virtual void DelNetworkRoute (Ipv4Address target, 
                                Ipv4Mask netmask, 
                                uint32_t interface) = 0;

  virtual void DelDefaultRoute (void) = 0;

  virtual void DelInterfaceRoutes (uint32_t interface) = 0;
  
  /**
   * \returns the number of entries in the routing table.
   */
  virtual uint32_t GetNRoutes (void) = 0;
  /**
   * \param i index of route to return
   * \returns the route whose index is i
   */
  virtual Ipv4RouteObject *GetRoute (uint32_t i) = 0;



Tom Henderson 2007-06-17