ns-2 Full-TCP and Wireless

This is a hack to allow the use of Full-TCP in wireless simulations using DSDV routing. The basic problem is that the IP header is added at the wireless network layer and also accounted for at the Full-TCP transport layer. This code just checks a flag to see if the IP header should be added at the network layer.

To use this, just add Agent/DSDV set fulltcp_ 1 to your TCL script (before you do node-config) once you've made the following changes to the ns source and re-compiled.

Files Changed

  • dsdv/dsdv.cc
  • dsdv/dsdv.h
  • tcl/mobility/dsdv.tcl

    Note: These diffs are based on the ns-2.29 release.

    dsdv/dsdv.cc

    Index: dsdv.cc
    *** dsdv.cc     13 Jul 2005 03:51:24 -0000      1.25
    --- dsdv.cc     7 Mar 2006 15:26:16 -0000
    ***************
    *** 1009,1015 ****
          /*
           * Add the IP Header
           */
    !     cmh->size() += IP_HDR_LEN;    
          iph->ttl_ = IP_DEF_TTL;
        }
        /*
    --- 1009,1017 ----
          /*
           * Add the IP Header
           */
    !         if (!fulltcp_) {
    !                 cmh->size() += IP_HDR_LEN;    
    !         }
          iph->ttl_ = IP_DEF_TTL;
        }
        /*
    ***************
    *** 1080,1086 ****
        periodic_callback_ (0), be_random_ (1), 
        use_mac_ (0), verbose_ (1), trace_wst_ (0), lasttup_ (-10), 
        alpha_ (0.875),  wst0_ (6), perup_ (15), 
    !   min_update_periods_ (3)     // constants
       {
        table_ = new RoutingTable ();
        helper_ = new DSDV_Helper (this);
    --- 1082,1088 ----
        periodic_callback_ (0), be_random_ (1), 
        use_mac_ (0), verbose_ (1), trace_wst_ (0), lasttup_ (-10), 
        alpha_ (0.875),  wst0_ (6), perup_ (15), 
    !   min_update_periods_ (3), fulltcp_(0)        // constants
       {
        table_ = new RoutingTable ();
        helper_ = new DSDV_Helper (this);
    ***************
    *** 1095,1100 ****
    --- 1097,1104 ----
        bind ("min_update_periods_", &min_update_periods_);
        bind ("verbose_", &verbose_);
        bind ("trace_wst_", &trace_wst_);
    +   // MCW  2006Feb02
    +   bind ("fulltcp_", &fulltcp_);
        //DEBUG
        address = 0;
    
    dsdv/dsdv.h
    Index: dsdv.h
    *** dsdv.h      20 Aug 1999 18:03:16 -0000      1.6
    --- dsdv.h      7 Mar 2006 15:16:21 -0000
    ***************
    *** 137,142 ****
    --- 137,145 ----
        int    min_update_periods_;    // 3 we must hear an update from a neighbor
        // every min_update_periods or we declare
        // them unreachable
    + 
    +       // MCW 2006Feb02
    +       int fulltcp_;
        
        void output_rte(const char *prefix, rtable_ent *prte, DSDV_Agent *a);
    
    tcl/mobility/dsdv.tcl
    Index: dsdv.tcl
    *** dsdv.tcl    23 Dec 2003 17:36:35 -0000      1.14
    --- dsdv.tcl    7 Mar 2006 15:18:37 -0000
    *** 49,54 ****
    --- 49,57 ----
      Agent/DSDV set verbose_      0        ;# 
      Agent/DSDV set trace_wst_    0        ;# 
      
    + # MCW  2006Feb02
    + Agent/DSDV set fulltcp_ 0
    + 
      set opt(ragent)               Agent/DSDV
      set opt(pos)          NONE                    ;# Box or NONE
    

    Michele C. Weigle