Main Page | Namespace List | Class Hierarchy | Alphabetical List | Compound List | File List | Compound Members | File Members

fsm.cc

Go to the documentation of this file.
00001 /* -*-  Mode:C++; c-basic-offset:8; tab-width:8; indent-tabs-mode:t -*- */
00002 /* fsm.cc
00003  * Copyright (C) 1999 by USC/ISI
00004  * All rights reserved.
00005  *
00006  * Redistribution and use in source and binary forms are permitted
00007  * provided that the above copyright notice and this paragraph are
00008  * duplicated in all such forms and that any documentation, advertising
00009  * materials, and other materials related to such distribution and use
00010  * acknowledge that the software was developed by the University of
00011  * Southern California, Information Sciences Institute.  The name of the
00012  * University may not be used to endorse or promote products derived from
00013  * this software without specific prior written permission.
00014  * 
00015  * THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED
00016  * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
00017  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
00018  * 
00019  * Contributed by Polly Huang (USC/ISI), http://www-scf.usc.edu/~bhuang
00020  * 
00021  * @(#) $Header: /nfs/jade/vint/CVSROOT/ns-2/common/fsm.cc,v 1.11 2001/08/23 23:31:13 johnh Exp $ (LBL)
00022  */
00023 
00024 /*
00025  * The contents of this file are described in the paper:
00026  *   Polly Huang and John Heidemann.
00027  *     Capturing TCP Burstiness in Light-weight Simulations.
00028  *     In Proceedings of the SCS Conference on Communication Networks and Distributed Systems Modeling and Simulation, pp. 90-96.
00029  *     Phoenix, Arizona, USA, USC/Information Sciences Institute, Society for Computer Simulation.
00030  *     January, 2001.
00031  *     <http://www.isi.edu/~johnh/PAPERS/Huang01a.html>.
00032  *
00033  * (Although this code talks about FSMs or Finite-State Machines,
00034  * the paper uses the term FSA or Finite-State Automoton.)
00035  */
00036 
00037 #include "fsm.h"
00038 #include <assert.h>
00039 
00040 
00041 #ifndef MAX
00042 #define MAX(a, b)  (((a) > (b)) ? (a) : (b))
00043 #endif
00044 #ifndef MIN
00045 #define MIN(a, b)  (((a) < (b)) ? (a) : (b))
00046 #endif
00047 
00048 
00049 FSM* FSM::instance_;
00050 TahoeAckFSM* TahoeAckFSM::instance_;
00051 RenoAckFSM* RenoAckFSM::instance_;
00052 TahoeDelAckFSM* TahoeDelAckFSM::instance_;
00053 RenoDelAckFSM* RenoDelAckFSM::instance_;
00054 
00055 
00056 
00057 void
00058 FSMState::number_all()
00059 {
00060         if (processed())
00061                 return;
00062         static int next_i = 0;
00063         print_i_ = ++next_i;
00064         //
00065         int i;
00066         for (i = 0; i < 17; i++)
00067                 if (drop_[i])
00068                         drop_[i]->number_all();
00069 }
00070 
00071 void
00072 FSMState::reset_all_processed()
00073 {
00074         if (print_i_ == 0)
00075                 number_all();
00076         // requires a full traversal always to work
00077         if (!processed())
00078                 return;
00079         print_i_ = -print_i_;
00080         int i;
00081         for (i = 0; i < 17; i++)
00082                 if (drop_[i])
00083                         drop_[i]->reset_all_processed();
00084 }
00085 
00086 void
00087 FSMState::print_all(int level)
00088 {
00089         if (processed())
00090                 return;
00091 
00092         const int SPACES_PER_LEVEL = 2;
00093         printf("#%-2d %*s %d:\n", print_i_, level * SPACES_PER_LEVEL + 1, " ", batch_size_);
00094         int i;
00095         for (i = 0; i <= batch_size_; i++) {
00096                 static char *delay_names[] = {"done", "error", "RTT", "timeout" };
00097                 assert(transition_[i] >= -1 && transition_[i] <= TIMEOUT);
00098                 printf("   %*s %d %s -> #%d\n", level * SPACES_PER_LEVEL + 3, " ",
00099                        i,
00100                        delay_names[transition_[i]+1],
00101                        drop_[i] ? drop_[i]->print_i_ : 0);
00102                 if (drop_[i])
00103                         drop_[i]->print_all(level + 1);
00104         };
00105 }
00106 
00107 static void
00108 report_stat_terminus(int desired_pkts,  // # needed
00109                           int pkts,             // # got so far
00110                           int rtts,             // # of rtt events
00111                           int timeouts,         // # of to events
00112                           int ps,               // # of times taken a prob. p event (pkt received OK)
00113                           int qs,               // # of times taken a prob. q event (pkt dropped OK)
00114                           int num_states,       // size of the stack
00115                           int num_state_names,
00116                      FSMState **states,
00117                      char *state_names)
00118 {
00119         // print states and probability
00120         printf("%s: p^%d*q^%d, %d rtt, %d timeouts, %d states:",
00121                (pkts > desired_pkts ? "exceeded-pkts" :
00122                 (pkts == desired_pkts ? "desired_pkts" : "unimplemented-qs")),
00123                ps, qs,
00124                rtts, timeouts,
00125                num_states);
00126         char ch = ' ';
00127         int i;
00128         for (i = 0; i < num_states; i++) {
00129                 printf ("%c#%d", ch, states[i]->print_i_);
00130                 ch = ',';
00131         };
00132         printf(" [%.*s]\n", num_state_names, state_names);
00133 }
00134 
00135 /*
00136  * FSMState::print_all_stats:
00137  * Walk through the tcp state table exhaustively.
00138  * Recurse to handle errors.
00139  * Very hairy.
00140  * johnh.
00141  */
00142 void
00143 FSMState::print_all_stats(int desired_pkts_total,       // # needed
00144                           int pkts,             // # got so far
00145                           int rtts,             // # of rtt events
00146                           int timeouts,         // # of to events
00147                           int ps,               // # of times taken a prob. p event (pkt received OK)
00148                           int qs,               // # of times taken a prob. q event (pkt dropped OK)
00149                           int num_states,       // size of the stack
00150                           int num_state_names)
00151 {
00152         int i;
00153 #define LARGER_NUMBER_OF_STATES 31   // was 17
00154         static FSMState *states[LARGER_NUMBER_OF_STATES];
00155         static char state_names[LARGER_NUMBER_OF_STATES*4]; // xxx: this is just some random big size :-(
00156 
00157         if (pkts >= desired_pkts_total || qs > 5) {
00158                 // done; print states and probability
00159                 // (give up when we're where we want to be [good],
00160                 // or we've taken too many losses [to prevent recursion])
00161                 report_stat_terminus(desired_pkts_total, pkts, rtts, timeouts, ps, qs, num_states, num_state_names, states, state_names);
00162                 return;
00163         };
00164 
00165         // remember us!
00166         states[num_states] = this;
00167         num_states++;
00168 
00169 
00170         // xxx: doesn't handle TCP tail behavior
00171 
00172         //
00173         // first, consider the no-loss case
00174         //
00175         int desired_pkts_remaining = desired_pkts_total - pkts;
00176         int desired_pkts_this_round = MIN(desired_pkts_remaining, batch_size_);
00177         for (i = 0; i< desired_pkts_this_round; i++)
00178                 state_names[num_state_names + i] = 's';
00179         if (desired_pkts_remaining > desired_pkts_this_round) {
00180                 // more to do?  take a rtt hit and keep going
00181                 state_names[num_state_names + desired_pkts_this_round] = '.';
00182                 drop_[0]->print_all_stats(desired_pkts_total,
00183                                           pkts + desired_pkts_this_round,
00184                                           rtts + 1, timeouts,
00185                                           ps + desired_pkts_this_round, qs,
00186                                           num_states,
00187                                           num_state_names + desired_pkts_this_round + 1);
00188         } else {
00189                 // no more to do... report out
00190                 report_stat_terminus(desired_pkts_total,
00191                                      pkts + desired_pkts_this_round,
00192                                      rtts, timeouts,
00193                                      ps + desired_pkts_this_round, qs,
00194                                      num_states,
00195                                      num_state_names + desired_pkts_this_round,
00196                                      states,
00197                                      state_names);
00198         };
00199 
00200         //
00201         // now consider losses
00202         //
00203         int desired_pkts_with_loss = MAX(desired_pkts_this_round - 1, 0);
00204         // loop through losing the i'th packet for all possible i's.
00205         // Can't loop through more than we could have sent.
00206         for (i = 1; i <= desired_pkts_this_round; i++) {
00207                 // keep track of sending patterns
00208                 if (i > 1)
00209                         state_names[num_state_names + i - 2] = 's';
00210                 state_names[num_state_names + i - 1] = 'd';
00211                 state_names[num_state_names + desired_pkts_this_round] = (transition_[i] == RTT ? '.' : '-');
00212                 // can we even have any?
00213                 if (qs) {
00214                         // not if we already had one!
00215                         report_stat_terminus(desired_pkts_total,
00216                                              pkts + i - 1,
00217                                              rtts, timeouts,
00218                                              ps + i - 1, qs + 1,
00219                                              num_states,
00220                                              num_state_names + i,
00221                                              states,
00222                                              state_names);
00223                 } else {
00224                         // recurse... assume the rest made it
00225                         drop_[i]->print_all_stats(desired_pkts_total, pkts + desired_pkts_with_loss,
00226                                           rtts + (transition_[i] == RTT ? 1 : 0),
00227                                           timeouts + (transition_[i] == TIMEOUT ? 1 : 0),
00228                                           ps + desired_pkts_with_loss, qs + 1,
00229                                           num_states,
00230                                           num_state_names + desired_pkts_this_round + 1);
00231                         // 2nd drop somewhere in this round?
00232                         int remaining_pkts_this_round = desired_pkts_this_round - i;
00233                         if (qs == 0 && remaining_pkts_this_round > 0) {
00234                                 // yes, generate the probs
00235                                 int j;
00236                                 for (j = i+1; j <= desired_pkts_this_round; j++) {
00237                                         if (j > i+1)
00238                                                 state_names[num_state_names + j - 1] = 's';
00239                                         state_names[num_state_names + j] = 'd';
00240                                         report_stat_terminus(desired_pkts_total,
00241                                                              pkts + j - 2,
00242                                                              rtts, timeouts,
00243                                                              ps + j - 2, qs + 2,
00244                                                              num_states,
00245                                                              num_state_names + j,
00246                                                              states,
00247                                                              state_names);
00248                                 };
00249                         };
00250                 };
00251         };
00252 }
00253 
00254 
00255 void
00256 FSM::print_FSM(FSMState* state)
00257 {
00258 #if 0
00259         int i;
00260 
00261         if (state != NULL) {
00262                 for (i=0; i<17; i++) {
00263                         if (state->drop_[i] != NULL) {
00264                                 if (i==0) 
00265                                         printf("%d->(%d) ", state->transition_[i], state->drop_[i]->batch_size_);
00266                                 else
00267                                         printf("\n%d->(%d) ", state->transition_[i], state->drop_[i]->batch_size_);
00268                                 print_FSM(state->drop_[i]);
00269                         }
00270                 }
00271         }
00272 #else /* ! 0 */
00273         state->reset_all_processed();
00274         state->print_all(0);
00275 #endif /* 0 */
00276 }
00277 
00278 void
00279 FSM::print_FSM_stats(FSMState* state, int n)
00280 {
00281         state->reset_all_processed();
00282         state->print_all_stats(n);
00283         fflush(stdout);
00284 }
00285 
00286 static class TahoeAckFSMClass : public TclClass {
00287 public:
00288         TahoeAckFSMClass() : TclClass("FSM/TahoeAck") {}
00289         TclObject* create(int , const char*const*) {
00290                 return (new TahoeAckFSM);
00291         }
00292 } class_tahoeackfsm;
00293 
00294 static class RenoAckFSMClass : public TclClass {
00295 public:
00296         RenoAckFSMClass() : TclClass("FSM/RenoAck") {}
00297         TclObject* create(int , const char*const*) {
00298                 return (new RenoAckFSM);
00299         }
00300 } class_renoackfsm;
00301 
00302 static class TahoeDelAckFSMClass : public TclClass {
00303 public:
00304         TahoeDelAckFSMClass() : TclClass("FSM/TahoeDelAck") {}
00305         TclObject* create(int , const char*const*) {
00306                 return (new TahoeDelAckFSM);
00307         }
00308 } class_tahoedelackfsm;
00309 
00310 static class RenoDelAckFSMClass : public TclClass {
00311 public:
00312         RenoDelAckFSMClass() : TclClass("FSM/RenoDelAck") {}
00313         TclObject* create(int , const char*const*) {
00314                 return (new RenoDelAckFSM);
00315         }
00316 } class_renodelackfsm;
00317 
00318 
00319 // ***********************************************
00320 // Tahoe-Ack TCP Connection Finite State Machine *
00321 // ***********************************************
00322 TahoeAckFSM::TahoeAckFSM() : FSM(), start_state_(NULL) 
00323 {
00324         int i;
00325         FSMState* tmp;
00326 
00327 
00328         instance_ = this;
00329         // (wnd, ssh) == (1, 20)
00330         start_state_ = new FSMState;
00331         //printf("creating Tahoe Ack FSM\n"); 
00332         for (i=0; i<17; i++) {
00333                 start_state_->drop_[i] = NULL;
00334                 start_state_->transition_[i] = -1;
00335         }
00336         start_state_->batch_size_ = 1;
00337 
00338         // (wnd, ssh) == (2, 20)
00339         tmp = new FSMState;
00340         for (i=0; i<17; i++) {
00341                 tmp->drop_[i] = NULL;
00342                 tmp->transition_[i] = -1;
00343         }
00344         tmp->batch_size_ = 2;
00345         start_state_->drop_[0] = tmp;
00346         start_state_->transition_[0] = RTT;
00347 
00348         tmp = new FSMState;
00349         for (i=0; i<17; i++) {
00350                 tmp->drop_[i] = NULL;
00351                 tmp->transition_[i] = -1;
00352         }
00353         tmp->batch_size_ = 2;
00354         start_state_->drop_[0]->drop_[2] = tmp;
00355         start_state_->drop_[0]->transition_[2] = RTT;
00356 
00357         // (wnd, ssh) == (4, 20)
00358         tmp = new FSMState;
00359         for (i=0; i<17; i++) {
00360                 tmp->drop_[i] = NULL;
00361                 tmp->transition_[i] = -1;
00362         }
00363         tmp->batch_size_ = 4;
00364         start_state_->drop_[0]->drop_[0] = tmp;
00365         start_state_->drop_[0]->transition_[0] = RTT;
00366 
00367         tmp = new FSMState;
00368         for (i=0; i<17; i++) {
00369                 tmp->drop_[i] = NULL;
00370                 tmp->transition_[i] = -1;
00371         }
00372         tmp->batch_size_ = 2;
00373         start_state_->drop_[0]->drop_[0]->drop_[2] = tmp;
00374         start_state_->drop_[0]->drop_[0]->transition_[2] = RTT;
00375 
00376         tmp = new FSMState;
00377         for (i=0; i<17; i++) {
00378                 tmp->drop_[i] = NULL;
00379                 tmp->transition_[i] = -1;
00380         }
00381         tmp->batch_size_ = 4;
00382         start_state_->drop_[0]->drop_[0]->drop_[3] = tmp;
00383         start_state_->drop_[0]->drop_[0]->transition_[3] = RTT;
00384 
00385         tmp = new FSMState;
00386         for (i=0; i<17; i++) {
00387                 tmp->drop_[i] = NULL;
00388                 tmp->transition_[i] = -1;
00389         }
00390         tmp->batch_size_ = 6;
00391         start_state_->drop_[0]->drop_[0]->drop_[4] = tmp;
00392         start_state_->drop_[0]->drop_[0]->transition_[4] = RTT;
00393 
00394         //(wnd, ssh) == (8, 20)
00395         tmp = new FSMState;
00396         for (i=0; i<17; i++) {
00397                 tmp->drop_[i] = NULL;
00398                 tmp->transition_[i] = -1;
00399         }
00400         tmp->batch_size_ = 8;
00401         start_state_->drop_[0]->drop_[0]->drop_[0] = tmp;
00402         start_state_->drop_[0]->drop_[0]->transition_[0] = RTT;
00403 
00404         tmp = new FSMState;
00405         for (i=0; i<17; i++) {
00406                 tmp->drop_[i] = NULL;
00407                 tmp->transition_[i] = -1;
00408         }
00409         tmp->batch_size_ = 2;
00410         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[2] = tmp;
00411         start_state_->drop_[0]->drop_[0]->drop_[0]->transition_[2] = RTT;
00412 
00413         tmp = new FSMState;
00414         for (i=0; i<17; i++) {
00415                 tmp->drop_[i] = NULL;
00416                 tmp->transition_[i] = -1;
00417         }
00418         tmp->batch_size_ = 4;
00419         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[3] = tmp;
00420         start_state_->drop_[0]->drop_[0]->drop_[0]->transition_[3] = RTT;
00421 
00422         tmp = new FSMState;
00423         for (i=0; i<17; i++) {
00424                 tmp->drop_[i] = NULL;
00425                 tmp->transition_[i] = -1;
00426         }
00427         tmp->batch_size_ = 6;
00428         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[4] = tmp;
00429         start_state_->drop_[0]->drop_[0]->drop_[0]->transition_[4] = RTT;
00430 
00431         tmp = new FSMState;
00432         for (i=0; i<17; i++) {
00433                 tmp->drop_[i] = NULL;
00434                 tmp->transition_[i] = -1;
00435         }
00436         tmp->batch_size_ = 8;
00437         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[5] = tmp;
00438         start_state_->drop_[0]->drop_[0]->drop_[0]->transition_[5] = RTT;
00439 
00440         tmp = new FSMState;
00441         for (i=0; i<17; i++) {
00442                 tmp->drop_[i] = NULL;
00443                 tmp->transition_[i] = -1;
00444         }
00445         tmp->batch_size_ = 10;
00446         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[6] = tmp;
00447         start_state_->drop_[0]->drop_[0]->drop_[0]->transition_[6] = RTT;
00448 
00449         tmp = new FSMState;
00450         for (i=0; i<17; i++) {
00451                 tmp->drop_[i] = NULL;
00452                 tmp->transition_[i] = -1;
00453         }
00454         tmp->batch_size_ = 12;
00455         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[7] = tmp;
00456         start_state_->drop_[0]->drop_[0]->drop_[0]->transition_[7] = RTT;
00457 
00458         tmp = new FSMState;
00459         for (i=0; i<17; i++) {
00460                 tmp->drop_[i] = NULL;
00461                 tmp->transition_[i] = -1;
00462         }
00463         tmp->batch_size_ = 14;
00464         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[8] = tmp;
00465         start_state_->drop_[0]->drop_[0]->drop_[0]->transition_[8] = RTT;
00466 
00467         //(wnd, ssh) == (16, 20)
00468         tmp = new FSMState;
00469         for (i=0; i<17; i++) {
00470                 tmp->drop_[i] = NULL;
00471                 tmp->transition_[i] = -1;
00472         }
00473         tmp->batch_size_ = 16;
00474         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0] = tmp;
00475         start_state_->drop_[0]->drop_[0]->drop_[0]->transition_[0] = RTT;
00476 
00477         tmp = new FSMState;
00478         for (i=0; i<17; i++) {
00479                 tmp->drop_[i] = NULL;
00480                 tmp->transition_[i] = -1;
00481         }
00482         tmp->batch_size_ = 1;
00483         for (i=1; i<17; i++) start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[i] = tmp;
00484         for (i=1; i<14; i++)
00485                 start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->transition_[i] = RTT;
00486         for (i=14; i<17; i++)
00487                 start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->transition_[i] = TIMEOUT;
00488 
00489 
00490         //(wnd, ssh) == (1, 2), timeout
00491         tmp = new FSMState;
00492         for (i=0; i<17; i++) {
00493                 tmp->drop_[i] = NULL;
00494                 tmp->transition_[i] = -1;
00495         }
00496         tmp->batch_size_ = 1;
00497         start_state_->drop_[1] = tmp;
00498         start_state_->transition_[1] = TIMEOUT;
00499         start_state_->drop_[0]->drop_[1] = tmp;
00500         start_state_->drop_[0]->transition_[1] = TIMEOUT;
00501         start_state_->drop_[0]->drop_[2]->drop_[0] = tmp;
00502         start_state_->drop_[0]->drop_[2]->transition_[0] = TIMEOUT;
00503         start_state_->drop_[0]->drop_[0]->drop_[1] = tmp;
00504         start_state_->drop_[0]->drop_[0]->transition_[1] = RTT;
00505         start_state_->drop_[0]->drop_[0]->drop_[2]->drop_[0] = tmp;
00506         start_state_->drop_[0]->drop_[0]->drop_[2]->transition_[0] = RTT;
00507 
00508         //(wnd, ssh) == (2, 2)
00509         tmp = new FSMState;
00510         for (i=0; i<17; i++) {
00511                 tmp->drop_[i] = NULL;
00512                 tmp->transition_[i] = -1;
00513         }
00514         tmp->batch_size_ = 2;
00515         start_state_->drop_[1]->drop_[0] = tmp;
00516         start_state_->drop_[1]->transition_[0] = RTT;
00517 
00518         //(wnd, ssh) == (2.5, 2)
00519         tmp = new FSMState;
00520         for (i=0; i<17; i++) {
00521                 tmp->drop_[i] = NULL;
00522                 tmp->transition_[i] = -1;
00523         }
00524         tmp->batch_size_ = 2;
00525         start_state_->drop_[1]->drop_[0]->drop_[0] = tmp;
00526         start_state_->drop_[1]->drop_[0]->transition_[0] = RTT;
00527 
00528         //(wnd, ssh) == (3, 2)
00529         tmp = new FSMState;
00530         for (i=0; i<17; i++) {
00531                 tmp->drop_[i] = NULL;
00532                 tmp->transition_[i] = -1;
00533         }
00534         tmp->batch_size_ = 3;
00535         start_state_->drop_[1]->drop_[0]->drop_[0]->drop_[0] = tmp;
00536         start_state_->drop_[1]->drop_[0]->drop_[0]->transition_[0] = RTT;
00537 
00538         //(wnd, ssh) == (4, 2)
00539         tmp = new FSMState;
00540         for (i=0; i<17; i++) {
00541                 tmp->drop_[i] = NULL;
00542                 tmp->transition_[i] = -1;
00543         }
00544         tmp->batch_size_ = 4;
00545         start_state_->drop_[1]->drop_[0]->drop_[0]->drop_[0]->drop_[0] = tmp;
00546         start_state_->drop_[1]->drop_[0]->drop_[0]->drop_[0]->transition_[0] = RTT;
00547 
00548         //(wnd, ssh) == (5, 2)
00549         tmp = new FSMState;
00550         for (i=0; i<17; i++) {
00551                 tmp->drop_[i] = NULL;
00552                 tmp->transition_[i] = -1;
00553         }
00554         tmp->batch_size_ = 5;
00555         start_state_->drop_[1]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0] = tmp;
00556         start_state_->drop_[1]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->transition_[0] = RTT;
00557 
00558         //(wnd, ssh) == (6, 2)
00559         tmp = new FSMState;
00560         for (i=0; i<17; i++) {
00561                 tmp->drop_[i] = NULL;
00562                 tmp->transition_[i] = -1;
00563         }
00564         tmp->batch_size_ = 6;
00565         start_state_->drop_[1]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0] = tmp;
00566         start_state_->drop_[1]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->transition_[0] = RTT;
00567 
00568         //(wnd, ssh) == (7, 2)
00569         tmp = new FSMState;
00570         for (i=0; i<17; i++) {
00571                 tmp->drop_[i] = NULL;
00572                 tmp->transition_[i] = -1;
00573         }
00574         tmp->batch_size_ = 7;
00575         start_state_->drop_[1]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0] = tmp;
00576         start_state_->drop_[1]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->transition_[0] = RTT;
00577 
00578         //(wnd, ssh) == (7, 2)
00579         tmp = new FSMState;
00580         for (i=0; i<17; i++) {
00581                 tmp->drop_[i] = NULL;
00582                 tmp->transition_[i] = -1;
00583         }
00584         tmp->batch_size_ = 7;
00585         start_state_->drop_[1]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0] = tmp;
00586         start_state_->drop_[1]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->transition_[0] = RTT;
00587 
00588 
00589         //(wnd, ssh) == (1, 3)
00590         tmp = new FSMState;
00591         for (i=0; i<17; i++) {
00592                 tmp->drop_[i] = NULL;
00593                 tmp->transition_[i] = -1;
00594         }
00595         tmp->batch_size_ = 1;
00596         start_state_->drop_[0]->drop_[0]->drop_[3]->drop_[0] = tmp;
00597         start_state_->drop_[0]->drop_[0]->drop_[3]->transition_[0] = RTT;
00598         start_state_->drop_[0]->drop_[0]->drop_[4]->drop_[0] = tmp;
00599         start_state_->drop_[0]->drop_[0]->drop_[4]->transition_[0] = RTT;
00600 
00601         tmp = new FSMState;
00602         for (i=0; i<17; i++) {
00603                 tmp->drop_[i] = NULL;
00604                 tmp->transition_[i] = -1;
00605         }
00606         tmp->batch_size_ = 2;
00607         start_state_->drop_[0]->drop_[0]->drop_[3]->drop_[0]->drop_[0] = tmp;
00608         start_state_->drop_[0]->drop_[0]->drop_[3]->drop_[0]->transition_[0] = RTT;
00609 
00610         tmp = new FSMState;
00611         for (i=0; i<17; i++) {
00612                 tmp->drop_[i] = NULL;
00613                 tmp->transition_[i] = -1;
00614         }
00615         tmp->batch_size_ = 3;
00616         start_state_->drop_[0]->drop_[0]->drop_[3]->drop_[0]->drop_[0]->drop_[0] = tmp;
00617         start_state_->drop_[0]->drop_[0]->drop_[3]->drop_[0]->drop_[0]->transition_[0] = RTT;
00618 
00619         tmp = new FSMState;
00620         for (i=0; i<17; i++) {
00621                 tmp->drop_[i] = NULL;
00622                 tmp->transition_[i] = -1;
00623         }
00624         tmp->batch_size_ = 4;
00625         start_state_->drop_[0]->drop_[0]->drop_[3]->drop_[0]->drop_[0]->drop_[0]->drop_[0] = tmp;
00626         start_state_->drop_[0]->drop_[0]->drop_[3]->drop_[0]->drop_[0]->drop_[0]->transition_[0] = RTT;
00627 
00628         tmp = new FSMState;
00629         for (i=0; i<17; i++) {
00630                 tmp->drop_[i] = NULL;
00631                 tmp->transition_[i] = -1;
00632         }
00633         tmp->batch_size_ = 5;
00634         start_state_->drop_[0]->drop_[0]->drop_[3]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0] = tmp;
00635         start_state_->drop_[0]->drop_[0]->drop_[3]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->transition_[0] = RTT;
00636 
00637         tmp = new FSMState;
00638         for (i=0; i<17; i++) {
00639                 tmp->drop_[i] = NULL;
00640                 tmp->transition_[i] = -1;
00641         }
00642         tmp->batch_size_ = 5;
00643         start_state_->drop_[0]->drop_[0]->drop_[3]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0] = tmp;
00644         start_state_->drop_[0]->drop_[0]->drop_[3]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->transition_[0] = RTT;
00645 
00646         tmp = new FSMState;
00647         for (i=0; i<17; i++) {
00648                 tmp->drop_[i] = NULL;
00649                 tmp->transition_[i] = -1;
00650         }
00651         tmp->batch_size_ = 6;
00652         start_state_->drop_[0]->drop_[0]->drop_[3]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0] = tmp;
00653         start_state_->drop_[0]->drop_[0]->drop_[3]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->transition_[0] = RTT;
00654 
00655         //(wnd, ssh) == (1, 4)
00656         tmp = new FSMState;
00657         for (i=0; i<17; i++) {
00658                 tmp->drop_[i] = NULL;
00659                 tmp->transition_[i] = -1;
00660         }
00661         tmp->batch_size_ = 1;
00662         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[1] = tmp;
00663         start_state_->drop_[0]->drop_[0]->drop_[0]->transition_[1] = RTT;
00664         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[2]->drop_[0] = tmp;
00665         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[2]->transition_[0] = 0;
00666 
00667         tmp = new FSMState;
00668         for (i=0; i<17; i++) {
00669                 tmp->drop_[i] = NULL;
00670                 tmp->transition_[i] = -1;
00671         }
00672         tmp->batch_size_ = 2;
00673         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[1]->drop_[0] = tmp;
00674         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[1]->transition_[0] = RTT;
00675 
00676 
00677         tmp = new FSMState;
00678         for (i=0; i<17; i++) {
00679                 tmp->drop_[i] = NULL;
00680                 tmp->transition_[i] = -1;
00681         }
00682         tmp->batch_size_ = 4;
00683         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[1]->drop_[0]->drop_[0] = tmp;
00684         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[1]->drop_[0]->transition_[0] = RTT;
00685 
00686         tmp = new FSMState;
00687         for (i=0; i<17; i++) {
00688                 tmp->drop_[i] = NULL;
00689                 tmp->transition_[i] = -1;
00690         }
00691         tmp->batch_size_ = 4;
00692         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[1]->drop_[0]->drop_[0]->drop_[0] = tmp;
00693         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[1]->drop_[0]->drop_[0]->transition_[0] = RTT;
00694 
00695         tmp = new FSMState;
00696         for (i=0; i<17; i++) {
00697                 tmp->drop_[i] = NULL;
00698                 tmp->transition_[i] = -1;
00699         }
00700         tmp->batch_size_ = 5;
00701         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[1]->drop_[0]->drop_[0]->drop_[0]->drop_[0] = tmp;
00702         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[1]->drop_[0]->drop_[0]->drop_[0]->transition_[0] = RTT;
00703 
00704         tmp = new FSMState;
00705         for (i=0; i<17; i++) {
00706                 tmp->drop_[i] = NULL;
00707                 tmp->transition_[i] = -1;
00708         }
00709         tmp->batch_size_ = 6;
00710         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[1]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0] = tmp;
00711         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[1]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->transition_[0] = RTT;
00712 
00713         //(wnd, ssh) == (1, 5)  
00714         tmp = new FSMState;
00715         for (i=0; i<17; i++) {
00716                 tmp->drop_[i] = NULL;
00717                 tmp->transition_[i] = -1;
00718         }
00719         tmp->batch_size_ = 1;
00720         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[3]->drop_[0] = tmp;
00721         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[3]->transition_[0] = 0;
00722         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[4]->drop_[0] = tmp;
00723         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[4]->transition_[0] = 0;
00724 
00725         tmp = new FSMState;
00726         for (i=0; i<17; i++) {
00727                 tmp->drop_[i] = NULL;
00728                 tmp->transition_[i] = -1;
00729         }
00730         tmp->batch_size_ = 2;
00731         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[3]->drop_[0]->drop_[0] = tmp;
00732         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[3]->drop_[0]->transition_[0] = RTT;
00733 
00734         tmp = new FSMState;
00735         for (i=0; i<17; i++) {
00736                 tmp->drop_[i] = NULL;
00737                 tmp->transition_[i] = -1;
00738         }
00739         tmp->batch_size_ = 4;
00740         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[3]->drop_[0]->drop_[0]->drop_[0] = tmp;
00741         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[3]->drop_[0]->drop_[0]->transition_[0] = RTT;
00742 
00743         tmp = new FSMState;
00744         for (i=0; i<17; i++) {
00745                 tmp->drop_[i] = NULL;
00746                 tmp->transition_[i] = -1;
00747         }
00748         tmp->batch_size_ = 5;
00749         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[3]->drop_[0]->drop_[0]->drop_[0]->drop_[0] = tmp;
00750         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[3]->drop_[0]->drop_[0]->drop_[0]->transition_[0] = RTT;
00751 
00752         tmp = new FSMState;
00753         for (i=0; i<17; i++) {
00754                 tmp->drop_[i] = NULL;
00755                 tmp->transition_[i] = -1;
00756         }
00757         tmp->batch_size_ = 6;
00758         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[3]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0] = tmp;
00759         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[3]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->transition_[0] = RTT;
00760 
00761         //(wnd, ssh) == (1, 6)
00762         tmp = new FSMState;
00763         for (i=0; i<17; i++) {
00764                 tmp->drop_[i] = NULL;
00765                 tmp->transition_[i] = -1;
00766         }
00767         tmp->batch_size_ = 1;
00768         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[5]->drop_[0] = tmp;
00769         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[5]->transition_[0] = 0;
00770         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[6]->drop_[0] = tmp;
00771         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[6]->transition_[0] = RTT;
00772 
00773         tmp = new FSMState;
00774         for (i=0; i<17; i++) {
00775                 tmp->drop_[i] = NULL;
00776                 tmp->transition_[i] = -1;
00777         }
00778         tmp->batch_size_ = 2;
00779         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[5]->drop_[0]->drop_[0] = tmp;
00780         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[5]->drop_[0]->transition_[0] = RTT;
00781 
00782         tmp = new FSMState;
00783         for (i=0; i<17; i++) {
00784                 tmp->drop_[i] = NULL;
00785                 tmp->transition_[i] = -1;
00786         }
00787         tmp->batch_size_ = 4;
00788         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[5]->drop_[0]->drop_[0]->drop_[0] = tmp;
00789         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[5]->drop_[0]->drop_[0]->transition_[0] = RTT;
00790 
00791         tmp = new FSMState;
00792         for (i=0; i<17; i++) {
00793                 tmp->drop_[i] = NULL;
00794                 tmp->transition_[i] = -1;
00795         }
00796         tmp->batch_size_ = 6;
00797         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[5]->drop_[0]->drop_[0]->drop_[0]->drop_[0] = tmp;
00798         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[5]->drop_[0]->drop_[0]->drop_[0]->transition_[0] = RTT;
00799 
00800         //(wnd, ssh) == (1, 7)
00801         tmp = new FSMState;
00802         for (i=0; i<17; i++) {
00803                 tmp->drop_[i] = NULL;
00804                 tmp->transition_[i] = -1;
00805         }
00806         tmp->batch_size_ = 1;
00807         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[7]->drop_[0] = tmp;
00808         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[7]->transition_[0] = RTT;
00809         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[8]->drop_[0] = tmp;
00810         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[8]->transition_[0] = RTT;
00811 
00812         tmp = new FSMState;
00813         for (i=0; i<17; i++) {
00814                 tmp->drop_[i] = NULL;
00815                 tmp->transition_[i] = -1;
00816         }
00817         tmp->batch_size_ = 2;
00818         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[7]->drop_[0]->drop_[0] = tmp;
00819         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[7]->drop_[0]->transition_[0] = RTT;
00820 
00821         tmp = new FSMState;
00822         for (i=0; i<17; i++) {
00823                 tmp->drop_[i] = NULL;
00824                 tmp->transition_[i] = -1;
00825         }
00826         tmp->batch_size_ = 4;
00827         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[7]->drop_[0]->drop_[0]->drop_[0] = tmp;
00828         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[7]->drop_[0]->drop_[0]->transition_[0] = RTT;
00829 
00830         //print_FSM(start_state_);
00831         //printf("\n");
00832 }
00833 
00834 // **********************************************
00835 // Reno-ACK TCP Connection Finite State Machine *
00836 // **********************************************
00837 RenoAckFSM::RenoAckFSM() : FSM(), start_state_(NULL) 
00838 {
00839         int i;
00840         FSMState* tmp;
00841         //printf("creating Reno Ack FSM\n");
00842 
00843         instance_ = this;
00844         // (wnd, ssh) == (1, 20)
00845         start_state_ = new FSMState;
00846         for (i=0; i<17; i++) {
00847                 start_state_->drop_[i] = NULL;
00848                 start_state_->transition_[i] = -1;
00849         }
00850         start_state_->batch_size_ = 1;
00851 
00852         // (wnd, ssh) == (2, 20)
00853         tmp = new FSMState;
00854         for (i=0; i<17; i++) {
00855                 tmp->drop_[i] = NULL;
00856                 tmp->transition_[i] = -1;
00857         }
00858         tmp->batch_size_ = 2;
00859         start_state_->drop_[0] = tmp;
00860         start_state_->transition_[0] = RTT;
00861 
00862         tmp = new FSMState;
00863         for (i=0; i<17; i++) {
00864                 tmp->drop_[i] = NULL;
00865                 tmp->transition_[i] = -1;
00866         }
00867         tmp->batch_size_ = 2;
00868         start_state_->drop_[0]->drop_[2] = tmp;
00869         start_state_->drop_[0]->transition_[2] = RTT;
00870 
00871         // (wnd, ssh) == (4, 20)
00872         tmp = new FSMState;
00873         for (i=0; i<17; i++) {
00874                 tmp->drop_[i] = NULL;
00875                 tmp->transition_[i] = -1;
00876         }
00877         tmp->batch_size_ = 4;
00878         start_state_->drop_[0]->drop_[0] = tmp;
00879         start_state_->drop_[0]->transition_[0] = RTT;
00880 
00881         tmp = new FSMState;
00882         for (i=0; i<17; i++) {
00883                 tmp->drop_[i] = NULL;
00884                 tmp->transition_[i] = -1;
00885         }
00886         tmp->batch_size_ = 2;
00887         start_state_->drop_[0]->drop_[0]->drop_[2] = tmp;
00888         start_state_->drop_[0]->drop_[0]->transition_[2] = RTT;
00889 
00890         tmp = new FSMState;
00891         for (i=0; i<17; i++) {
00892                 tmp->drop_[i] = NULL;
00893                 tmp->transition_[i] = -1;
00894         }
00895         tmp->batch_size_ = 4;
00896         start_state_->drop_[0]->drop_[0]->drop_[3] = tmp;
00897         start_state_->drop_[0]->drop_[0]->transition_[3] = RTT;
00898 
00899         tmp = new FSMState;
00900         for (i=0; i<17; i++) {
00901                 tmp->drop_[i] = NULL;
00902                 tmp->transition_[i] = -1;
00903         }
00904         tmp->batch_size_ = 6;
00905         start_state_->drop_[0]->drop_[0]->drop_[4] = tmp;
00906         start_state_->drop_[0]->drop_[0]->transition_[4] = RTT;
00907 
00908         //(wnd, ssh) == (8, 20)
00909         tmp = new FSMState;
00910         for (i=0; i<17; i++) {
00911                 tmp->drop_[i] = NULL;
00912                 tmp->transition_[i] = -1;
00913         }
00914         tmp->batch_size_ = 8;
00915         start_state_->drop_[0]->drop_[0]->drop_[0] = tmp;
00916         start_state_->drop_[0]->drop_[0]->transition_[0] = RTT;
00917 
00918         tmp = new FSMState;
00919         for (i=0; i<17; i++) {
00920                 tmp->drop_[i] = NULL;
00921                 tmp->transition_[i] = -1;
00922         }
00923         tmp->batch_size_ = 4;
00924         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[3] = tmp;
00925         start_state_->drop_[0]->drop_[0]->drop_[0]->transition_[3] = RTT;
00926 
00927         tmp = new FSMState;
00928         for (i=0; i<17; i++) {
00929                 tmp->drop_[i] = NULL;
00930                 tmp->transition_[i] = -1;
00931         }
00932         tmp->batch_size_ = 6;
00933         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[4] = tmp;
00934         start_state_->drop_[0]->drop_[0]->drop_[0]->transition_[4] = RTT;
00935 
00936         tmp = new FSMState;
00937         for (i=0; i<17; i++) {
00938                 tmp->drop_[i] = NULL;
00939                 tmp->transition_[i] = -1;
00940         }
00941         tmp->batch_size_ = 8;
00942         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[5] = tmp;
00943         start_state_->drop_[0]->drop_[0]->drop_[0]->transition_[5] = RTT;
00944 
00945         tmp = new FSMState;
00946         for (i=0; i<17; i++) {
00947                 tmp->drop_[i] = NULL;
00948                 tmp->transition_[i] = -1;
00949         }
00950         tmp->batch_size_ = 10;
00951         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[6] = tmp;
00952         start_state_->drop_[0]->drop_[0]->drop_[0]->transition_[6] = RTT;
00953 
00954 
00955         tmp = new FSMState;
00956         for (i=0; i<17; i++) {
00957                 tmp->drop_[i] = NULL;
00958                 tmp->transition_[i] = -1;
00959         }
00960         tmp->batch_size_ = 6;
00961         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[6]->drop_[0] = tmp;
00962         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[6]->transition_[0] = RTT;
00963 
00964         tmp = new FSMState;
00965         for (i=0; i<17; i++) {
00966                 tmp->drop_[i] = NULL;
00967                 tmp->transition_[i] = -1;
00968         }
00969         tmp->batch_size_ = 12;
00970         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[7] = tmp;
00971         start_state_->drop_[0]->drop_[0]->drop_[0]->transition_[7] = RTT;
00972 
00973         tmp = new FSMState;
00974         for (i=0; i<17; i++) {
00975                 tmp->drop_[i] = NULL;
00976                 tmp->transition_[i] = -1;
00977         }
00978         tmp->batch_size_ = 14;
00979         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[8] = tmp;
00980         start_state_->drop_[0]->drop_[0]->drop_[0]->transition_[8] = RTT;
00981 
00982         //(wnd, ssh) == (16, 20)
00983         tmp = new FSMState;
00984         for (i=0; i<17; i++) {
00985                 tmp->drop_[i] = NULL;
00986                 tmp->transition_[i] = -1;
00987         }
00988         tmp->batch_size_ = 16;
00989         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0] = tmp;
00990         start_state_->drop_[0]->drop_[0]->drop_[0]->transition_[0] = RTT;
00991 
00992         tmp = new FSMState;
00993         for (i=0; i<17; i++) {
00994                 tmp->drop_[i] = NULL;
00995                 tmp->transition_[i] = -1;
00996         }
00997         tmp->batch_size_ = 1;
00998         for (i=1; i<17; i++) start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[i] = tmp;
00999         for (i=1; i<14; i++)
01000                 start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->transition_[i] = RTT;
01001         for (i=14; i<17; i++)
01002                 start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->transition_[i] = TIMEOUT;
01003 
01004         //(wnd, ssh) == (1, 2), timeout
01005         tmp = new FSMState;
01006         for (i=0; i<17; i++) {
01007                 tmp->drop_[i] = NULL;
01008                 tmp->transition_[i] = -1;
01009         }
01010         tmp->batch_size_ = 1;
01011         start_state_->drop_[1] = tmp;
01012         start_state_->transition_[1] = TIMEOUT;
01013         start_state_->drop_[0]->drop_[1] = tmp;
01014         start_state_->drop_[0]->transition_[1] = TIMEOUT;
01015         start_state_->drop_[0]->drop_[2]->drop_[0] = tmp;
01016         start_state_->drop_[0]->drop_[2]->transition_[0] = TIMEOUT;
01017 
01018         //(wnd, ssh) == (2, 2)
01019         tmp = new FSMState;
01020         for (i=0; i<17; i++) {
01021                 tmp->drop_[i] = NULL;
01022                 tmp->transition_[i] = -1;
01023         }
01024         tmp->batch_size_ = 2;
01025         start_state_->drop_[1]->drop_[0] = tmp;
01026         start_state_->drop_[1]->transition_[0] = RTT;
01027         start_state_->drop_[0]->drop_[0]->drop_[1] = tmp;
01028         start_state_->drop_[0]->drop_[0]->transition_[1] = RTT;
01029         start_state_->drop_[0]->drop_[0]->drop_[2]->drop_[0] = tmp;
01030         start_state_->drop_[0]->drop_[0]->drop_[2]->transition_[0] = RTT;
01031 
01032         //(wnd, ssh) == (2.5, 2)
01033         tmp = new FSMState;
01034         for (i=0; i<17; i++) {
01035                 tmp->drop_[i] = NULL;
01036                 tmp->transition_[i] = -1;
01037         }
01038         tmp->batch_size_ = 2;
01039         start_state_->drop_[1]->drop_[0]->drop_[0] = tmp;
01040         start_state_->drop_[1]->drop_[0]->transition_[0] = RTT;
01041 
01042         //(wnd, ssh) == (3, 2)
01043         tmp = new FSMState;
01044         for (i=0; i<17; i++) {
01045                 tmp->drop_[i] = NULL;
01046                 tmp->transition_[i] = -1;
01047         }
01048         tmp->batch_size_ = 3;
01049         start_state_->drop_[1]->drop_[0]->drop_[0]->drop_[0] = tmp;
01050         start_state_->drop_[1]->drop_[0]->drop_[0]->transition_[0] = RTT;
01051 
01052         //(wnd, ssh) == (4, 2)
01053         tmp = new FSMState;
01054         for (i=0; i<17; i++) {
01055                 tmp->drop_[i] = NULL;
01056                 tmp->transition_[i] = -1;
01057         }
01058         tmp->batch_size_ = 4;
01059         start_state_->drop_[1]->drop_[0]->drop_[0]->drop_[0]->drop_[0] = tmp;
01060         start_state_->drop_[1]->drop_[0]->drop_[0]->drop_[0]->transition_[0] = RTT;
01061 
01062         //(wnd, ssh) == (5, 2)
01063         tmp = new FSMState;
01064         for (i=0; i<17; i++) {
01065                 tmp->drop_[i] = NULL;
01066                 tmp->transition_[i] = -1;
01067         }
01068         tmp->batch_size_ = 5;
01069         start_state_->drop_[1]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0] = tmp;
01070         start_state_->drop_[1]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->transition_[0] = RTT;
01071 
01072         //(wnd, ssh) == (6, 2)
01073         tmp = new FSMState;
01074         for (i=0; i<17; i++) {
01075                 tmp->drop_[i] = NULL;
01076                 tmp->transition_[i] = -1;
01077         }
01078         tmp->batch_size_ = 6;
01079         start_state_->drop_[1]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0] = tmp;
01080         start_state_->drop_[1]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->transition_[0] = RTT;
01081 
01082         //(wnd, ssh) == (7, 2)
01083         tmp = new FSMState;
01084         for (i=0; i<17; i++) {
01085                 tmp->drop_[i] = NULL;
01086                 tmp->transition_[i] = -1;
01087         }
01088         tmp->batch_size_ = 7;
01089         start_state_->drop_[1]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0] = tmp;
01090         start_state_->drop_[1]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->transition_[0] = RTT;
01091 
01092         //(wnd, ssh) == (7.5, 2)
01093         tmp = new FSMState;
01094         for (i=0; i<17; i++) {
01095                 tmp->drop_[i] = NULL;
01096                 tmp->transition_[i] = -1;
01097         }
01098         tmp->batch_size_ = 7;
01099         start_state_->drop_[1]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0] = tmp;
01100         start_state_->drop_[1]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->transition_[0] = RTT;
01101 
01102 
01103         //(wnd, ssh) == (3, 3)
01104         tmp = new FSMState;
01105         for (i=0; i<17; i++) {
01106                 tmp->drop_[i] = NULL;
01107                 tmp->transition_[i] = -1;
01108         }
01109         tmp->batch_size_ = 3;
01110         start_state_->drop_[0]->drop_[0]->drop_[3]->drop_[0] = tmp;
01111         start_state_->drop_[0]->drop_[0]->drop_[3]->transition_[0] = RTT;
01112         start_state_->drop_[0]->drop_[0]->drop_[4]->drop_[0] = tmp;
01113         start_state_->drop_[0]->drop_[0]->drop_[4]->transition_[0] = RTT;
01114 
01115         tmp = new FSMState;
01116         for (i=0; i<17; i++) {
01117                 tmp->drop_[i] = NULL;
01118                 tmp->transition_[i] = -1;
01119         }
01120         tmp->batch_size_ = 3;
01121         start_state_->drop_[0]->drop_[0]->drop_[3]->drop_[0]->drop_[0] = tmp;
01122         start_state_->drop_[0]->drop_[0]->drop_[3]->drop_[0]->transition_[0] = RTT;
01123 
01124         tmp = new FSMState;
01125         for (i=0; i<17; i++) {
01126                 tmp->drop_[i] = NULL;
01127                 tmp->transition_[i] = -1;
01128         }
01129         tmp->batch_size_ = 4;
01130         start_state_->drop_[0]->drop_[0]->drop_[3]->drop_[0]->drop_[0]->drop_[0] = tmp;
01131         start_state_->drop_[0]->drop_[0]->drop_[3]->drop_[0]->drop_[0]->transition_[0] = RTT;
01132 
01133         tmp = new FSMState;
01134         for (i=0; i<17; i++) {
01135                 tmp->drop_[i] = NULL;
01136                 tmp->transition_[i] = -1;
01137         }
01138         tmp->batch_size_ = 5;
01139         start_state_->drop_[0]->drop_[0]->drop_[3]->drop_[0]->drop_[0]->drop_[0]->drop_[0] = tmp;
01140         start_state_->drop_[0]->drop_[0]->drop_[3]->drop_[0]->drop_[0]->drop_[0]->transition_[0] = RTT;
01141 
01142         tmp = new FSMState;
01143         for (i=0; i<17; i++) {
01144                 tmp->drop_[i] = NULL;
01145                 tmp->transition_[i] = -1;
01146         }
01147         tmp->batch_size_ = 6;
01148         start_state_->drop_[0]->drop_[0]->drop_[3]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0] = tmp;
01149         start_state_->drop_[0]->drop_[0]->drop_[3]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->transition_[0] = RTT;
01150 
01151 
01152 
01153         //(wnd, ssh) == (4, 4)
01154         tmp = new FSMState;
01155         for (i=0; i<17; i++) {
01156                 tmp->drop_[i] = NULL;
01157                 tmp->transition_[i] = -1;
01158         }
01159         tmp->batch_size_ = 4;
01160         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[1] = tmp;
01161         start_state_->drop_[0]->drop_[0]->drop_[0]->transition_[1] = RTT;
01162         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[2] = tmp;
01163         start_state_->drop_[0]->drop_[0]->drop_[0]->transition_[2] = RTT;
01164 
01165         tmp = new FSMState;
01166         for (i=0; i<17; i++) {
01167                 tmp->drop_[i] = NULL;
01168                 tmp->transition_[i] = -1;
01169         }
01170         tmp->batch_size_ = 4;
01171         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[1]->drop_[0] = tmp;
01172         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[1]->transition_[0] = RTT;
01173 
01174 
01175         tmp = new FSMState;
01176         for (i=0; i<17; i++) {
01177                 tmp->drop_[i] = NULL;
01178                 tmp->transition_[i] = -1;
01179         }
01180         tmp->batch_size_ = 5;
01181         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[1]->drop_[0]->drop_[0] = tmp;
01182         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[1]->drop_[0]->transition_[0] = RTT;
01183 
01184         tmp = new FSMState;
01185         for (i=0; i<17; i++) {
01186                 tmp->drop_[i] = NULL;
01187                 tmp->transition_[i] = -1;
01188         }
01189         tmp->batch_size_ = 6;
01190         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[1]->drop_[0]->drop_[0]->drop_[0] = tmp;
01191         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[1]->drop_[0]->drop_[0]->transition_[0] = RTT;
01192 
01193 
01194         //(wnd, ssh) == (5, 5)  
01195         tmp = new FSMState;
01196         for (i=0; i<17; i++) {
01197                 tmp->drop_[i] = NULL;
01198                 tmp->transition_[i] = -1;
01199         }
01200         tmp->batch_size_ = 1;
01201         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[3]->drop_[0] = tmp;
01202         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[3]->transition_[0] = 0;
01203         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[4]->drop_[0] = tmp;
01204         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[4]->transition_[0] = 0;
01205 
01206         tmp = new FSMState;
01207         for (i=0; i<17; i++) {
01208                 tmp->drop_[i] = NULL;
01209                 tmp->transition_[i] = -1;
01210         }
01211         tmp->batch_size_ = 5;
01212         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[3]->drop_[0]->drop_[0] = tmp;
01213         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[3]->drop_[0]->transition_[0] = RTT;
01214 
01215         tmp = new FSMState;
01216         for (i=0; i<17; i++) {
01217                 tmp->drop_[i] = NULL;
01218                 tmp->transition_[i] = -1;
01219         }
01220         tmp->batch_size_ = 6;
01221         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[3]->drop_[0]->drop_[0]->drop_[0] = tmp;
01222         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[3]->drop_[0]->drop_[0]->transition_[0] = RTT;
01223 
01224         tmp = new FSMState;
01225         for (i=0; i<17; i++) {
01226                 tmp->drop_[i] = NULL;
01227                 tmp->transition_[i] = -1;
01228         }
01229         tmp->batch_size_ = 7;
01230         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[3]->drop_[0]->drop_[0]->drop_[0]->drop_[0] = tmp;
01231         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[3]->drop_[0]->drop_[0]->drop_[0]->transition_[0] = RTT;
01232 
01233         //(wnd, ssh) == (6, 6)
01234         tmp = new FSMState;
01235         for (i=0; i<17; i++) {
01236                 tmp->drop_[i] = NULL;
01237                 tmp->transition_[i] = -1;
01238         }
01239         tmp->batch_size_ = 1;
01240         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[5]->drop_[0] = tmp;
01241         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[5]->transition_[0] = 0;
01242 
01243         tmp = new FSMState;
01244         for (i=0; i<17; i++) {
01245                 tmp->drop_[i] = NULL;
01246                 tmp->transition_[i] = -1;
01247         }
01248         tmp->batch_size_ = 6;
01249         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[5]->drop_[0]->drop_[0] = tmp;
01250         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[5]->drop_[0]->transition_[0] = RTT;
01251         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[6]->drop_[0]->drop_[0] = tmp;
01252         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[6]->drop_[0]->transition_[0] = RTT;
01253 
01254         tmp = new FSMState;
01255         for (i=0; i<17; i++) {
01256                 tmp->drop_[i] = NULL;
01257                 tmp->transition_[i] = -1;
01258         }
01259         tmp->batch_size_ = 7;
01260         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[5]->drop_[0]->drop_[0]->drop_[0] = tmp;
01261         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[5]->drop_[0]->drop_[0]->transition_[0] = RTT;
01262 
01263         //(wnd, ssh) == (7, 7)
01264         tmp = new FSMState;
01265         for (i=0; i<17; i++) {
01266                 tmp->drop_[i] = NULL;
01267                 tmp->transition_[i] = -1;
01268         }
01269         tmp->batch_size_ = 7;
01270         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[7]->drop_[0] = tmp;
01271         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[7]->transition_[0] = RTT;
01272         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[8]->drop_[0] = tmp;
01273         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[8]->transition_[0] = RTT;
01274 
01275         //print_FSM(start_state_);
01276         //printf("\n");
01277 
01278 }
01279 
01280 // *****************************************************
01281 // Tahoe-Delay Ack TCP Connection Finite State Machine *
01282 // *****************************************************
01283 TahoeDelAckFSM::TahoeDelAckFSM() : FSM(), start_state_(NULL) 
01284 {
01285         int i;
01286         FSMState* tmp;
01287         //printf("creating Tahoe DelAck FSM\n");
01288 
01289         instance_ = this;
01290         // (wnd, ssh) == (1, 20)
01291         start_state_ = new FSMState;
01292         for (i=0; i<17; i++) {
01293                 start_state_->drop_[i] = NULL;
01294                 start_state_->transition_[i] = -1;
01295         }
01296         start_state_->batch_size_ = 1;
01297 
01298         // (wnd, ssh) == (2, 20)
01299         tmp = new FSMState;
01300         for (i=0; i<17; i++) {
01301                 tmp->drop_[i] = NULL;
01302                 tmp->transition_[i] = -1;
01303         }
01304         tmp->batch_size_ = 2;
01305         start_state_->drop_[0] = tmp;
01306         start_state_->transition_[0] = RTT;
01307 
01308         tmp = new FSMState;
01309         for (i=0; i<17; i++) {
01310                 tmp->drop_[i] = NULL;
01311                 tmp->transition_[i] = -1;
01312         }
01313         tmp->batch_size_ = 2;
01314         start_state_->drop_[0]->drop_[2] = tmp;
01315         start_state_->drop_[0]->transition_[2] = RTT;
01316 
01317         // (wnd, ssh) == (3, 20)
01318         tmp = new FSMState;
01319         for (i=0; i<17; i++) {
01320                 tmp->drop_[i] = NULL;
01321                 tmp->transition_[i] = -1;
01322         }
01323         tmp->batch_size_ = 3;
01324         start_state_->drop_[0]->drop_[0] = tmp;
01325         start_state_->drop_[0]->transition_[0] = RTT;
01326 
01327         tmp = new FSMState;
01328         for (i=0; i<17; i++) {
01329                 tmp->drop_[i] = NULL;
01330                 tmp->transition_[i] = -1;
01331         }
01332         tmp->batch_size_ = 2;
01333         start_state_->drop_[0]->drop_[0]->drop_[2] = tmp;
01334         start_state_->drop_[0]->drop_[0]->transition_[2] = RTT;
01335 
01336         tmp = new FSMState;
01337         for (i=0; i<17; i++) {
01338                 tmp->drop_[i] = NULL;
01339                 tmp->transition_[i] = -1;
01340         }
01341         tmp->batch_size_ = 3;
01342         start_state_->drop_[0]->drop_[0]->drop_[3] = tmp;
01343         start_state_->drop_[0]->drop_[0]->transition_[3] = RTT;
01344 
01345         //(wnd, ssh) == (5, 20)
01346         tmp = new FSMState;
01347         for (i=0; i<17; i++) {
01348                 tmp->drop_[i] = NULL;
01349                 tmp->transition_[i] = -1;
01350         }
01351         tmp->batch_size_ = 5;
01352         start_state_->drop_[0]->drop_[0]->drop_[0] = tmp;
01353         start_state_->drop_[0]->drop_[0]->transition_[0] = RTT;
01354 
01355         tmp = new FSMState;
01356         for (i=0; i<17; i++) {
01357                 tmp->drop_[i] = NULL;
01358                 tmp->transition_[i] = -1;
01359         }
01360         tmp->batch_size_ = 2;
01361         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[2] = tmp;
01362         start_state_->drop_[0]->drop_[0]->drop_[0]->transition_[2] = RTT;
01363 
01364         tmp = new FSMState;
01365         for (i=0; i<17; i++) {
01366                 tmp->drop_[i] = NULL;
01367                 tmp->transition_[i] = -1;
01368         }
01369         tmp->batch_size_ = 3;
01370         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[3] = tmp;
01371         start_state_->drop_[0]->drop_[0]->drop_[0]->transition_[3] = RTT;
01372 
01373         tmp = new FSMState;
01374         for (i=0; i<17; i++) {
01375                 tmp->drop_[i] = NULL;
01376                 tmp->transition_[i] = -1;
01377         }
01378         tmp->batch_size_ = 5;
01379         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[4] = tmp;
01380         start_state_->drop_[0]->drop_[0]->drop_[0]->transition_[4] = RTT;
01381 
01382         tmp = new FSMState;
01383         for (i=0; i<17; i++) {
01384                 tmp->drop_[i] = NULL;
01385                 tmp->transition_[i] = -1;
01386         }
01387         tmp->batch_size_ = 6;
01388         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[5] = tmp;
01389         start_state_->drop_[0]->drop_[0]->drop_[0]->transition_[5] = RTT;
01390 
01391         //(wnd, ssh) == (8, 20)
01392         tmp = new FSMState;
01393         for (i=0; i<17; i++) {
01394                 tmp->drop_[i] = NULL;
01395                 tmp->transition_[i] = -1;
01396         }
01397         tmp->batch_size_ = 8;
01398         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0] = tmp;
01399         start_state_->drop_[0]->drop_[0]->drop_[0]->transition_[0] = RTT;
01400 
01401         tmp = new FSMState;
01402         for (i=0; i<17; i++) {
01403                 tmp->drop_[i] = NULL;
01404                 tmp->transition_[i] = -1;
01405         }
01406         tmp->batch_size_ = 2;
01407         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[2] = tmp;
01408         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->transition_[2] = RTT;
01409 
01410         tmp = new FSMState;
01411         for (i=0; i<17; i++) {
01412                 tmp->drop_[i] = NULL;
01413                 tmp->transition_[i] = -1;
01414         }
01415         tmp->batch_size_ = 3;
01416         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[3] = tmp;
01417         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->transition_[3] = RTT;
01418 
01419         tmp = new FSMState;
01420         for (i=0; i<17; i++) {
01421                 tmp->drop_[i] = NULL;
01422                 tmp->transition_[i] = -1;
01423         }
01424         tmp->batch_size_ = 5;
01425         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[4] = tmp;
01426         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->transition_[4] = RTT;
01427 
01428         tmp = new FSMState;
01429         for (i=0; i<17; i++) {
01430                 tmp->drop_[i] = NULL;
01431                 tmp->transition_[i] = -1;
01432         }
01433         tmp->batch_size_ = 6;
01434         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[5] = tmp;
01435         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->transition_[5] = RTT;
01436 
01437         tmp = new FSMState;
01438         for (i=0; i<17; i++) {
01439                 tmp->drop_[i] = NULL;
01440                 tmp->transition_[i] = -1;
01441         }
01442         tmp->batch_size_ = 8;
01443         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[6] = tmp;
01444         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->transition_[6] = RTT;
01445 
01446         tmp = new FSMState;
01447         for (i=0; i<17; i++) {
01448                 tmp->drop_[i] = NULL;
01449                 tmp->transition_[i] = -1;
01450         }
01451         tmp->batch_size_ = 9;
01452         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[7] = tmp;
01453         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->transition_[7] = RTT;
01454 
01455         tmp = new FSMState;
01456         for (i=0; i<17; i++) {
01457                 tmp->drop_[i] = NULL;
01458                 tmp->transition_[i] = -1;
01459         }
01460         tmp->batch_size_ = 11;
01461         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[8] = tmp;
01462         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->transition_[8] = RTT;
01463 
01464         //(wnd, ssh) == (12, 20)
01465         tmp = new FSMState;
01466         for (i=0; i<17; i++) {
01467                 tmp->drop_[i] = NULL;
01468                 tmp->transition_[i] = -1;
01469         }
01470         tmp->batch_size_ = 12;
01471         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0] = tmp;
01472         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->transition_[0] = RTT;
01473 
01474         tmp = new FSMState;
01475         for (i=0; i<17; i++) {
01476                 tmp->drop_[i] = NULL;
01477                 tmp->transition_[i] = -1;
01478         }
01479         tmp->batch_size_ = 1;
01480         for (i=1; i<13; i++) start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[i] = tmp;
01481         for (i=1; i<10; i++)
01482                 start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->transition_[i] = RTT;
01483         for (i=10; i<13; i++)
01484                 start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->transition_[i] = TIMEOUT;
01485 
01486 
01487         //(wnd, ssh) == (1, 2), timeout
01488         tmp = new FSMState;
01489         for (i=0; i<17; i++) {
01490                 tmp->drop_[i] = NULL;
01491                 tmp->transition_[i] = -1;
01492         }
01493         tmp->batch_size_ = 1;
01494         start_state_->drop_[1] = tmp;
01495         start_state_->transition_[1] = TIMEOUT;
01496         start_state_->drop_[0]->drop_[1] = tmp;
01497         start_state_->drop_[0]->transition_[1] = TIMEOUT;
01498         start_state_->drop_[0]->drop_[2]->drop_[0] = tmp;
01499         start_state_->drop_[0]->drop_[2]->transition_[0] = TIMEOUT;
01500 
01501         start_state_->drop_[0]->drop_[0]->drop_[1] = tmp;
01502         start_state_->drop_[0]->drop_[0]->transition_[1] = TIMEOUT;
01503         start_state_->drop_[0]->drop_[0]->drop_[2]->drop_[0] = tmp;
01504         start_state_->drop_[0]->drop_[0]->drop_[2]->transition_[0] = RTT;
01505         start_state_->drop_[0]->drop_[0]->drop_[3]->drop_[0] = tmp;
01506         start_state_->drop_[0]->drop_[0]->drop_[3]->transition_[0] = RTT;
01507 
01508         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[1] = tmp;
01509         start_state_->drop_[0]->drop_[0]->drop_[0]->transition_[1] = RTT;
01510 
01511         //(wnd, ssh) == (2, 2)
01512         tmp = new FSMState;
01513         for (i=0; i<17; i++) {
01514                 tmp->drop_[i] = NULL;
01515                 tmp->transition_[i] = -1;
01516         }
01517         tmp->batch_size_ = 2;
01518         start_state_->drop_[1]->drop_[0] = tmp;
01519         start_state_->drop_[1]->transition_[0] = RTT;
01520 
01521         //(wnd, ssh) == (2.5, 2)
01522         tmp = new FSMState;
01523         for (i=0; i<17; i++) {
01524                 tmp->drop_[i] = NULL;
01525                 tmp->transition_[i] = -1;
01526         }
01527         tmp->batch_size_ = 2;
01528         start_state_->drop_[1]->drop_[0]->drop_[0] = tmp;
01529         start_state_->drop_[1]->drop_[0]->transition_[0] = RTT;
01530 
01531         //(wnd, ssh) == (2.9, 2)
01532         tmp = new FSMState;
01533         for (i=0; i<17; i++) {
01534                 tmp->drop_[i] = NULL;
01535                 tmp->transition_[i] = -1;
01536         }
01537         tmp->batch_size_ = 2;
01538         start_state_->drop_[1]->drop_[0]->drop_[0]->drop_[0] = tmp;
01539         start_state_->drop_[1]->drop_[0]->drop_[0]->transition_[0] = RTT;
01540 
01541         //(wnd, ssh) == (3, 2)
01542         tmp = new FSMState;
01543         for (i=0; i<17; i++) {
01544                 tmp->drop_[i] = NULL;
01545                 tmp->transition_[i] = -1;
01546         }
01547         tmp->batch_size_ = 3;
01548         start_state_->drop_[1]->drop_[0]->drop_[0]->drop_[0]->drop_[0] = tmp;
01549         start_state_->drop_[1]->drop_[0]->drop_[0]->drop_[0]->transition_[0] = RTT;
01550 
01551         //(wnd, ssh) == (3.3, 2)
01552         tmp = new FSMState;
01553         for (i=0; i<17; i++) {
01554                 tmp->drop_[i] = NULL;
01555                 tmp->transition_[i] = -1;
01556         }
01557         tmp->batch_size_ = 3;
01558         start_state_->drop_[1]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0] = tmp;
01559         start_state_->drop_[1]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->transition_[0] = RTT;
01560 
01561         //(wnd, ssh) == (4, 2)
01562         tmp = new FSMState;
01563         for (i=0; i<17; i++) {
01564                 tmp->drop_[i] = NULL;
01565                 tmp->transition_[i] = -1;
01566         }
01567         tmp->batch_size_ = 4;
01568         start_state_->drop_[1]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0] = tmp;
01569         start_state_->drop_[1]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->transition_[0] = RTT;
01570 
01571         //(wnd, ssh) == (4.7, 2)
01572         tmp = new FSMState;
01573         for (i=0; i<17; i++) {
01574                 tmp->drop_[i] = NULL;
01575                 tmp->transition_[i] = -1;
01576         }
01577         tmp->batch_size_ = 4;
01578         start_state_->drop_[1]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0] = tmp;
01579         start_state_->drop_[1]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->transition_[0] = RTT;
01580 
01581         //(wnd, ssh) == (5, 2)
01582         tmp = new FSMState;
01583         for (i=0; i<17; i++) {
01584                 tmp->drop_[i] = NULL;
01585                 tmp->transition_[i] = -1;
01586         }
01587         tmp->batch_size_ = 5;
01588         start_state_->drop_[1]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0] = tmp;
01589         start_state_->drop_[1]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->transition_[0] = RTT;
01590 
01591         //(wnd, ssh) == (6, 2)
01592         tmp = new FSMState;
01593         for (i=0; i<17; i++) {
01594                 tmp->drop_[i] = NULL;
01595                 tmp->transition_[i] = -1;
01596         }
01597         tmp->batch_size_ = 6;
01598         start_state_->drop_[1]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0] = tmp;
01599         start_state_->drop_[1]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->transition_[0] = RTT;
01600 
01601 
01602         //(wnd, ssh) == (1, 3)
01603         tmp = new FSMState;
01604         for (i=0; i<17; i++) {
01605                 tmp->drop_[i] = NULL;
01606                 tmp->transition_[i] = -1;
01607         }
01608         tmp->batch_size_ = 1;
01609         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[2]->drop_[0] = tmp;
01610         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[2]->transition_[0] = RTT;
01611         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[3]->drop_[0] = tmp;
01612         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[3]->transition_[0] = RTT;
01613         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[4]->drop_[0] = tmp;
01614         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[4]->transition_[0] = RTT;
01615         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[5]->drop_[0] = tmp;
01616         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[5]->transition_[0] = RTT;
01617 
01618         tmp = new FSMState;
01619         for (i=0; i<17; i++) {
01620                 tmp->drop_[i] = NULL;
01621                 tmp->transition_[i] = -1;
01622         }
01623         tmp->batch_size_ = 2;
01624         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[3]->drop_[0]->drop_[0] = tmp;
01625         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[3]->drop_[0]->transition_[0] = RTT;
01626 
01627         tmp = new FSMState;
01628         for (i=0; i<17; i++) {
01629                 tmp->drop_[i] = NULL;
01630                 tmp->transition_[i] = -1;
01631         }
01632         tmp->batch_size_ = 3;
01633         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[3]->drop_[0]->drop_[0]->drop_[0] = tmp;
01634         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[3]->drop_[0]->drop_[0]->transition_[0] = RTT;
01635 
01636         tmp = new FSMState;
01637         for (i=0; i<17; i++) {
01638                 tmp->drop_[i] = NULL;
01639                 tmp->transition_[i] = -1;
01640         }
01641         tmp->batch_size_ = 3;
01642         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[3]->drop_[0]->drop_[0]->drop_[0]->drop_[0] = tmp;
01643         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[3]->drop_[0]->drop_[0]->drop_[0]->transition_[0] = RTT;
01644 
01645         tmp = new FSMState;
01646         for (i=0; i<17; i++) {
01647                 tmp->drop_[i] = NULL;
01648                 tmp->transition_[i] = -1;
01649         }
01650         tmp->batch_size_ = 4;
01651         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[3]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0] = tmp;
01652         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[3]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->transition_[0] = RTT;
01653 
01654         tmp = new FSMState;
01655         for (i=0; i<17; i++) {
01656                 tmp->drop_[i] = NULL;
01657                 tmp->transition_[i] = -1;
01658         }
01659         tmp->batch_size_ = 4;
01660         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[3]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0] = tmp;
01661         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[3]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->transition_[0] = RTT;
01662 
01663         tmp = new FSMState;
01664         for (i=0; i<17; i++) {
01665                 tmp->drop_[i] = NULL;
01666                 tmp->transition_[i] = -1;
01667         }
01668         tmp->batch_size_ = 5;
01669         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[3]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0] = tmp;
01670         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[3]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->transition_[0] = RTT;
01671 
01672         //(wnd, ssh) == (1, 4)
01673         tmp = new FSMState;
01674         for (i=0; i<17; i++) {
01675                 tmp->drop_[i] = NULL;
01676                 tmp->transition_[i] = -1;
01677         }
01678         tmp->batch_size_ = 1;
01679         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[1] = tmp;
01680         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->transition_[1] = RTT;
01681         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[2]->drop_[0] = tmp;
01682         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[2]->transition_[0] = 0;
01683         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[3]->drop_[0] = tmp;
01684         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[3]->transition_[0] = 0;
01685 
01686         tmp = new FSMState;
01687         for (i=0; i<17; i++) {
01688                 tmp->drop_[i] = NULL;
01689                 tmp->transition_[i] = -1;
01690         }
01691         tmp->batch_size_ = 2;
01692         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[1]->drop_[0] = tmp;
01693         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[1]->transition_[0] = RTT;
01694 
01695 
01696         tmp = new FSMState;
01697         for (i=0; i<17; i++) {
01698                 tmp->drop_[i] = NULL;
01699                 tmp->transition_[i] = -1;
01700         }
01701         tmp->batch_size_ = 3;
01702         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[1]->drop_[0]->drop_[0] = tmp;
01703         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[1]->drop_[0]->transition_[0] = RTT;
01704 
01705         tmp = new FSMState;
01706         for (i=0; i<17; i++) {
01707                 tmp->drop_[i] = NULL;
01708                 tmp->transition_[i] = -1;
01709         }
01710         tmp->batch_size_ = 4;
01711         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[1]->drop_[0]->drop_[0]->drop_[0] = tmp;
01712         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[1]->drop_[0]->drop_[0]->transition_[0] = RTT;
01713 
01714         tmp = new FSMState;
01715         for (i=0; i<17; i++) {
01716                 tmp->drop_[i] = NULL;
01717                 tmp->transition_[i] = -1;
01718         }
01719         tmp->batch_size_ = 4;
01720         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[1]->drop_[0]->drop_[0]->drop_[0]->drop_[0] = tmp;
01721         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[1]->drop_[0]->drop_[0]->drop_[0]->transition_[0] = RTT;
01722 
01723 
01724         //(wnd, ssh) == (1, 5)  
01725         tmp = new FSMState;
01726         for (i=0; i<17; i++) {
01727                 tmp->drop_[i] = NULL;
01728                 tmp->transition_[i] = -1;
01729         }
01730         tmp->batch_size_ = 1;
01731         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[4]->drop_[0] = tmp;
01732         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[4]->transition_[0] = 0;
01733         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[5]->drop_[0] = tmp;
01734         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[5]->transition_[0] = 0;
01735         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[6]->drop_[0] = tmp;
01736         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[6]->transition_[0] = RTT;
01737         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[7]->drop_[0] = tmp;
01738         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[7]->transition_[0] = RTT;
01739 
01740 
01741         tmp = new FSMState;
01742         for (i=0; i<17; i++) {
01743                 tmp->drop_[i] = NULL;
01744                 tmp->transition_[i] = -1;
01745         }
01746         tmp->batch_size_ = 2;
01747         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[4]->drop_[0]->drop_[0] = tmp;
01748         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[4]->drop_[0]->transition_[0] = RTT;
01749 
01750         tmp = new FSMState;
01751         for (i=0; i<17; i++) {
01752                 tmp->drop_[i] = NULL;
01753                 tmp->transition_[i] = -1;
01754         }
01755         tmp->batch_size_ = 3;
01756         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[4]->drop_[0]->drop_[0]->drop_[0] = tmp;
01757         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[4]->drop_[0]->drop_[0]->transition_[0] = RTT;
01758 
01759         tmp = new FSMState;
01760         for (i=0; i<17; i++) {
01761                 tmp->drop_[i] = NULL;
01762                 tmp->transition_[i] = -1;
01763         }
01764         tmp->batch_size_ = 5;
01765         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[4]->drop_[0]->drop_[0]->drop_[0]->drop_[0] = tmp;
01766         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[4]->drop_[0]->drop_[0]->drop_[0]->transition_[0] = RTT;
01767 
01768 
01769         //(wnd, ssh) == (1, 6)
01770         tmp = new FSMState;
01771         for (i=0; i<17; i++) {
01772                 tmp->drop_[i] = NULL;
01773                 tmp->transition_[i] = -1;
01774         }
01775         tmp->batch_size_ = 1;
01776         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[8]->drop_[0] = tmp;
01777         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[8]->transition_[0] = RTT;
01778 
01779         tmp = new FSMState;
01780         for (i=0; i<17; i++) {
01781                 tmp->drop_[i] = NULL;
01782                 tmp->transition_[i] = -1;
01783         }
01784         tmp->batch_size_ = 2;
01785         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[8]->drop_[0]->drop_[0] = tmp;
01786         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[8]->drop_[0]->transition_[0] = RTT;
01787 
01788 
01789         //print_FSM(start_state_);
01790         //printf("\n");
01791 }
01792 
01793 // ****************************************************
01794 // Reno-Delay Ack TCP Connection Finite State Machine *
01795 // ****************************************************
01796 RenoDelAckFSM::RenoDelAckFSM() : FSM(), start_state_(NULL) 
01797 {
01798         int i;
01799         FSMState* tmp;
01800         //printf("creating Reno DelAck FSM\n");
01801 
01802         instance_ = this;
01803         // (wnd, ssh) == (1, 20)
01804         start_state_ = new FSMState;
01805         for (i=0; i<17; i++) {
01806                 start_state_->drop_[i] = NULL;
01807                 start_state_->transition_[i] = -1;
01808         }
01809         start_state_->batch_size_ = 1;
01810 
01811         // (wnd, ssh) == (2, 20)
01812         tmp = new FSMState;
01813         for (i=0; i<17; i++) {
01814                 tmp->drop_[i] = NULL;
01815                 tmp->transition_[i] = -1;
01816         }
01817         tmp->batch_size_ = 2;
01818         start_state_->drop_[0] = tmp;
01819         start_state_->transition_[0] = RTT;
01820 
01821         tmp = new FSMState;
01822         for (i=0; i<17; i++) {
01823                 tmp->drop_[i] = NULL;
01824                 tmp->transition_[i] = -1;
01825         }
01826         tmp->batch_size_ = 2;
01827         start_state_->drop_[0]->drop_[2] = tmp;
01828         start_state_->drop_[0]->transition_[2] = RTT;
01829 
01830         // (wnd, ssh) == (3, 20)
01831         tmp = new FSMState;
01832         for (i=0; i<17; i++) {
01833                 tmp->drop_[i] = NULL;
01834                 tmp->transition_[i] = -1;
01835         }
01836         tmp->batch_size_ = 3;
01837         start_state_->drop_[0]->drop_[0] = tmp;
01838         start_state_->drop_[0]->transition_[0] = RTT;
01839 
01840         tmp = new FSMState;
01841         for (i=0; i<17; i++) {
01842                 tmp->drop_[i] = NULL;
01843                 tmp->transition_[i] = -1;
01844         }
01845         tmp->batch_size_ = 2;
01846         start_state_->drop_[0]->drop_[0]->drop_[2] = tmp;
01847         start_state_->drop_[0]->drop_[0]->transition_[2] = RTT;
01848 
01849         tmp = new FSMState;
01850         for (i=0; i<17; i++) {
01851                 tmp->drop_[i] = NULL;
01852                 tmp->transition_[i] = -1;
01853         }
01854         tmp->batch_size_ = 3;
01855         start_state_->drop_[0]->drop_[0]->drop_[3] = tmp;
01856         start_state_->drop_[0]->drop_[0]->transition_[3] = RTT;
01857 
01858         //(wnd, ssh) == (5, 20)
01859         tmp = new FSMState;
01860         for (i=0; i<17; i++) {
01861                 tmp->drop_[i] = NULL;
01862                 tmp->transition_[i] = -1;
01863         }
01864         tmp->batch_size_ = 5;
01865         start_state_->drop_[0]->drop_[0]->drop_[0] = tmp;
01866         start_state_->drop_[0]->drop_[0]->transition_[0] = RTT;
01867 
01868         tmp = new FSMState;
01869         for (i=0; i<17; i++) {
01870                 tmp->drop_[i] = NULL;
01871                 tmp->transition_[i] = -1;
01872         }
01873         tmp->batch_size_ = 2;
01874         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[2] = tmp;
01875         start_state_->drop_[0]->drop_[0]->drop_[0]->transition_[2] = RTT;
01876 
01877         tmp = new FSMState;
01878         for (i=0; i<17; i++) {
01879                 tmp->drop_[i] = NULL;
01880                 tmp->transition_[i] = -1;
01881         }
01882         tmp->batch_size_ = 3;
01883         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[3] = tmp;
01884         start_state_->drop_[0]->drop_[0]->drop_[0]->transition_[3] = RTT;
01885 
01886         tmp = new FSMState;
01887         for (i=0; i<17; i++) {
01888                 tmp->drop_[i] = NULL;
01889                 tmp->transition_[i] = -1;
01890         }
01891         tmp->batch_size_ = 5;
01892         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[4] = tmp;
01893         start_state_->drop_[0]->drop_[0]->drop_[0]->transition_[4] = RTT;
01894 
01895         tmp = new FSMState;
01896         for (i=0; i<17; i++) {
01897                 tmp->drop_[i] = NULL;
01898                 tmp->transition_[i] = -1;
01899         }
01900         tmp->batch_size_ = 6;
01901         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[5] = tmp;
01902         start_state_->drop_[0]->drop_[0]->drop_[0]->transition_[5] = RTT;
01903 
01904         tmp = new FSMState;
01905         for (i=0; i<17; i++) {
01906                 tmp->drop_[i] = NULL;
01907                 tmp->transition_[i] = -1;
01908         }
01909         tmp->batch_size_ = 2;
01910         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[2]->drop_[0] = tmp;
01911         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[2]->transition_[0] = RTT;
01912         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[4]->drop_[0] = tmp;
01913         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[4]->transition_[0] = RTT;
01914 
01915         tmp = new FSMState;
01916         for (i=0; i<17; i++) {
01917                 tmp->drop_[i] = NULL;
01918                 tmp->transition_[i] = -1;
01919         }
01920         tmp->batch_size_ = 3;
01921         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[3]->drop_[0] = tmp;
01922         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[3]->transition_[0] = RTT;
01923         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[5]->drop_[0] = tmp;
01924         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[5]->transition_[0] = RTT;
01925 
01926         //(wnd, ssh) == (8, 20)
01927         tmp = new FSMState;
01928         for (i=0; i<17; i++) {
01929                 tmp->drop_[i] = NULL;
01930                 tmp->transition_[i] = -1;
01931         }
01932         tmp->batch_size_ = 8;
01933         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0] = tmp;
01934         start_state_->drop_[0]->drop_[0]->drop_[0]->transition_[0] = RTT;
01935 
01936         tmp = new FSMState;
01937         for (i=0; i<17; i++) {
01938                 tmp->drop_[i] = NULL;
01939                 tmp->transition_[i] = -1;
01940         }
01941         tmp->batch_size_ = 3;
01942         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[2] = tmp;
01943         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->transition_[2] = RTT;
01944 
01945         tmp = new FSMState;
01946         for (i=0; i<17; i++) {
01947                 tmp->drop_[i] = NULL;
01948                 tmp->transition_[i] = -1;
01949         }
01950         tmp->batch_size_ = 4;
01951         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[3] = tmp;
01952         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->transition_[3] = RTT;
01953 
01954         tmp = new FSMState;
01955         for (i=0; i<17; i++) {
01956                 tmp->drop_[i] = NULL;
01957                 tmp->transition_[i] = -1;
01958         }
01959         tmp->batch_size_ = 4;
01960         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[2]->drop_[0] = tmp;
01961         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[2]->transition_[0] = RTT;
01962         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[3]->drop_[0] = tmp;
01963         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[3]->transition_[0] = RTT;
01964 
01965 
01966         tmp = new FSMState;
01967         for (i=0; i<17; i++) {
01968                 tmp->drop_[i] = NULL;
01969                 tmp->transition_[i] = -1;
01970         }
01971         tmp->batch_size_ = 1;
01972         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[4] = tmp;
01973         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->transition_[4] = RTT;
01974 
01975         tmp = new FSMState;
01976         for (i=0; i<17; i++) {
01977                 tmp->drop_[i] = NULL;
01978                 tmp->transition_[i] = -1;
01979         }
01980         tmp->batch_size_ = 2;
01981         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[5] = tmp;
01982         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->transition_[5] = RTT;
01983 
01984         tmp = new FSMState;
01985         for (i=0; i<17; i++) {
01986                 tmp->drop_[i] = NULL;
01987                 tmp->transition_[i] = -1;
01988         }
01989         tmp->batch_size_ = 8;
01990         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[6] = tmp;
01991         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->transition_[6] = RTT;
01992 
01993         tmp = new FSMState;
01994         for (i=0; i<17; i++) {
01995                 tmp->drop_[i] = NULL;
01996                 tmp->transition_[i] = -1;
01997         }
01998         tmp->batch_size_ = 9;
01999         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[7] = tmp;
02000         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->transition_[7] = RTT;
02001 
02002         tmp = new FSMState;
02003         for (i=0; i<17; i++) {
02004                 tmp->drop_[i] = NULL;
02005                 tmp->transition_[i] = -1;
02006         }
02007         tmp->batch_size_ = 11;
02008         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[8] = tmp;
02009         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->transition_[8] = RTT;
02010 
02011         //(wnd, ssh) == (12, 20)
02012         tmp = new FSMState;
02013         for (i=0; i<17; i++) {
02014                 tmp->drop_[i] = NULL;
02015                 tmp->transition_[i] = -1;
02016         }
02017         tmp->batch_size_ = 12;
02018         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0] = tmp;
02019         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->transition_[0] = RTT;
02020 
02021         tmp = new FSMState;
02022         for (i=0; i<17; i++) {
02023                 tmp->drop_[i] = NULL;
02024                 tmp->transition_[i] = -1;
02025         }
02026         tmp->batch_size_ = 1;
02027         for (i=1; i<13; i++) start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[i] = tmp;
02028         for (i=1; i<10; i++)
02029                 start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->transition_[i] = RTT;
02030         for (i=10; i<13; i++)
02031                 start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->transition_[i] = TIMEOUT;
02032 
02033 
02034         //(wnd, ssh) == (1, 2), timeout
02035         tmp = new FSMState;
02036         for (i=0; i<17; i++) {
02037                 tmp->drop_[i] = NULL;
02038                 tmp->transition_[i] = -1;
02039         }
02040         tmp->batch_size_ = 1;
02041         start_state_->drop_[1] = tmp;
02042         start_state_->transition_[1] = TIMEOUT;
02043         start_state_->drop_[0]->drop_[1] = tmp;
02044         start_state_->drop_[0]->transition_[1] = TIMEOUT;
02045         start_state_->drop_[0]->drop_[2]->drop_[0] = tmp;
02046         start_state_->drop_[0]->drop_[2]->transition_[0] = TIMEOUT;
02047 
02048         start_state_->drop_[0]->drop_[0]->drop_[1] = tmp;
02049         start_state_->drop_[0]->drop_[0]->transition_[1] = TIMEOUT;
02050         start_state_->drop_[0]->drop_[0]->drop_[2]->drop_[0] = tmp;
02051         start_state_->drop_[0]->drop_[0]->drop_[2]->transition_[0] = TIMEOUT;
02052 
02053         //(wnd, ssh) == (2, 2)
02054         tmp = new FSMState;
02055         for (i=0; i<17; i++) {
02056                 tmp->drop_[i] = NULL;
02057                 tmp->transition_[i] = -1;
02058         }
02059         tmp->batch_size_ = 2;
02060         start_state_->drop_[1]->drop_[0] = tmp;
02061         start_state_->drop_[1]->transition_[0] = RTT;
02062 
02063         //(wnd, ssh) == (2.5, 2)
02064         tmp = new FSMState;
02065         for (i=0; i<17; i++) {
02066                 tmp->drop_[i] = NULL;
02067                 tmp->transition_[i] = -1;
02068         }
02069         tmp->batch_size_ = 2;
02070         start_state_->drop_[1]->drop_[0]->drop_[0] = tmp;
02071         start_state_->drop_[1]->drop_[0]->transition_[0] = RTT;
02072 
02073         //(wnd, ssh) == (2.9, 2)
02074         tmp = new FSMState;
02075         for (i=0; i<17; i++) {
02076                 tmp->drop_[i] = NULL;
02077                 tmp->transition_[i] = -1;
02078         }
02079         tmp->batch_size_ = 2;
02080         start_state_->drop_[1]->drop_[0]->drop_[0]->drop_[0] = tmp;
02081         start_state_->drop_[1]->drop_[0]->drop_[0]->transition_[0] = RTT;
02082 
02083         //(wnd, ssh) == (3, 2)
02084         tmp = new FSMState;
02085         for (i=0; i<17; i++) {
02086                 tmp->drop_[i] = NULL;
02087                 tmp->transition_[i] = -1;
02088         }
02089         tmp->batch_size_ = 3;
02090         start_state_->drop_[1]->drop_[0]->drop_[0]->drop_[0]->drop_[0] = tmp;
02091         start_state_->drop_[1]->drop_[0]->drop_[0]->drop_[0]->transition_[0] = RTT;
02092 
02093         //(wnd, ssh) == (3.3, 2)
02094         tmp = new FSMState;
02095         for (i=0; i<17; i++) {
02096                 tmp->drop_[i] = NULL;
02097                 tmp->transition_[i] = -1;
02098         }
02099         tmp->batch_size_ = 3;
02100         start_state_->drop_[1]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0] = tmp;
02101         start_state_->drop_[1]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->transition_[0] = RTT;
02102 
02103         //(wnd, ssh) == (4, 2)
02104         tmp = new FSMState;
02105         for (i=0; i<17; i++) {
02106                 tmp->drop_[i] = NULL;
02107                 tmp->transition_[i] = -1;
02108         }
02109         tmp->batch_size_ = 4;
02110         start_state_->drop_[1]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0] = tmp;
02111         start_state_->drop_[1]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->transition_[0] = RTT;
02112 
02113         //(wnd, ssh) == (4.7, 2)
02114         tmp = new FSMState;
02115         for (i=0; i<17; i++) {
02116                 tmp->drop_[i] = NULL;
02117                 tmp->transition_[i] = -1;
02118         }
02119         tmp->batch_size_ = 4;
02120         start_state_->drop_[1]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0] = tmp;
02121         start_state_->drop_[1]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->transition_[0] = RTT;
02122 
02123         //(wnd, ssh) == (5, 2)
02124         tmp = new FSMState;
02125         for (i=0; i<17; i++) {
02126                 tmp->drop_[i] = NULL;
02127                 tmp->transition_[i] = -1;
02128         }
02129         tmp->batch_size_ = 5;
02130         start_state_->drop_[1]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0] = tmp;
02131         start_state_->drop_[1]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->transition_[0] = RTT;
02132 
02133         //(wnd, ssh) == (6, 2)
02134         tmp = new FSMState;
02135         for (i=0; i<17; i++) {
02136                 tmp->drop_[i] = NULL;
02137                 tmp->transition_[i] = -1;
02138         }
02139         tmp->batch_size_ = 6;
02140         start_state_->drop_[1]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0] = tmp;
02141         start_state_->drop_[1]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->transition_[0] = RTT;
02142 
02143 
02144         //(wnd, ssh) == (2, 2), rtt
02145         tmp = new FSMState;
02146         for (i=0; i<17; i++) {
02147                 tmp->drop_[i] = NULL;
02148                 tmp->transition_[i] = -1;
02149         }
02150         tmp->batch_size_ = 2;
02151         start_state_->drop_[0]->drop_[0]->drop_[3]->drop_[0] = tmp;
02152         start_state_->drop_[0]->drop_[0]->drop_[3]->transition_[0] = RTT;
02153         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[1] = tmp;
02154         start_state_->drop_[0]->drop_[0]->drop_[0]->transition_[1] = RTT;
02155 
02156         //(wnd, ssh) == (2.5, 2)
02157         tmp = new FSMState;
02158         for (i=0; i<17; i++) {
02159                 tmp->drop_[i] = NULL;
02160                 tmp->transition_[i] = -1;
02161         }
02162         tmp->batch_size_ = 2;
02163         start_state_->drop_[0]->drop_[0]->drop_[3]->drop_[0]->drop_[0] = tmp;
02164         start_state_->drop_[0]->drop_[0]->drop_[3]->drop_[0]->transition_[0] = RTT;
02165 
02166         //(wnd, ssh) == (3, 2)
02167         tmp = new FSMState;
02168         for (i=0; i<17; i++) {
02169                 tmp->drop_[i] = NULL;
02170                 tmp->transition_[i] = -1;
02171         }
02172         tmp->batch_size_ = 3;
02173         start_state_->drop_[0]->drop_[0]->drop_[3]->drop_[0]->drop_[0]->drop_[0] = tmp;
02174         start_state_->drop_[0]->drop_[0]->drop_[3]->drop_[0]->drop_[0]->transition_[0] = RTT;
02175 
02176         //(wnd, ssh) == (4, 2)
02177         tmp = new FSMState;
02178         for (i=0; i<17; i++) {
02179                 tmp->drop_[i] = NULL;
02180                 tmp->transition_[i] = -1;
02181         }
02182         tmp->batch_size_ = 4;
02183         start_state_->drop_[0]->drop_[0]->drop_[3]->drop_[0]->drop_[0]->drop_[0]->drop_[0] = tmp;
02184         start_state_->drop_[0]->drop_[0]->drop_[3]->drop_[0]->drop_[0]->drop_[0]->transition_[0] = RTT;
02185 
02186         //(wnd, ssh) == (4.3, 2)
02187         tmp = new FSMState;
02188         for (i=0; i<17; i++) {
02189                 tmp->drop_[i] = NULL;
02190                 tmp->transition_[i] = -1;
02191         }
02192         tmp->batch_size_ = 4;
02193         start_state_->drop_[0]->drop_[0]->drop_[3]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0] = tmp;
02194         start_state_->drop_[0]->drop_[0]->drop_[3]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->transition_[0] = RTT;
02195 
02196         //(wnd, ssh) == (4.7, 2)
02197         tmp = new FSMState;
02198         for (i=0; i<17; i++) {
02199                 tmp->drop_[i] = NULL;
02200                 tmp->transition_[i] = -1;
02201         }
02202         tmp->batch_size_ = 4;
02203         start_state_->drop_[0]->drop_[0]->drop_[3]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0] = tmp;
02204         start_state_->drop_[0]->drop_[0]->drop_[3]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->transition_[0] = RTT;
02205 
02206         //(wnd, ssh) == (5, 2)
02207         tmp = new FSMState;
02208         for (i=0; i<17; i++) {
02209                 tmp->drop_[i] = NULL;
02210                 tmp->transition_[i] = -1;
02211         }
02212         tmp->batch_size_ = 5;
02213         start_state_->drop_[0]->drop_[0]->drop_[3]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0] = tmp;
02214         start_state_->drop_[0]->drop_[0]->drop_[3]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->transition_[0] = RTT;
02215 
02216 
02217         //(wnd, ssh) == (3.3, 3)
02218         tmp = new FSMState;
02219         for (i=0; i<17; i++) {
02220                 tmp->drop_[i] = NULL;
02221                 tmp->transition_[i] = -1;
02222         }
02223         tmp->batch_size_ = 3;
02224         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[2]->drop_[0]->drop_[0] = tmp;
02225         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[2]->drop_[0]->transition_[0] = RTT;
02226         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[3]->drop_[0]->drop_[0] = tmp;
02227         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[3]->drop_[0]->transition_[0] = RTT;
02228 
02229         tmp = new FSMState;
02230         for (i=0; i<17; i++) {
02231                 tmp->drop_[i] = NULL;
02232                 tmp->transition_[i] = -1;
02233         }
02234         tmp->batch_size_ = 4;
02235         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[2]->drop_[0]->drop_[0]->drop_[0] = tmp;
02236         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[2]->drop_[0]->drop_[0]->transition_[0] = RTT;
02237 
02238         tmp = new FSMState;
02239         for (i=0; i<17; i++) {
02240                 tmp->drop_[i] = NULL;
02241                 tmp->transition_[i] = -1;
02242         }
02243         tmp->batch_size_ = 4;
02244         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[2]->drop_[0]->drop_[0]->drop_[0]->drop_[0] = tmp;
02245         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[2]->drop_[0]->drop_[0]->drop_[0]->transition_[0] = RTT;
02246 
02247         tmp = new FSMState;
02248         for (i=0; i<17; i++) {
02249                 tmp->drop_[i] = NULL;
02250                 tmp->transition_[i] = -1;
02251         }
02252         tmp->batch_size_ = 5;
02253         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[2]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0] = tmp;
02254         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[2]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->transition_[0] = RTT;
02255 
02256         tmp = new FSMState;
02257         for (i=0; i<17; i++) {
02258                 tmp->drop_[i] = NULL;
02259                 tmp->transition_[i] = -1;
02260         }
02261         tmp->batch_size_ = 5;
02262         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[2]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0] = tmp;
02263         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[2]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->transition_[0] = RTT;
02264 
02265         //(wnd, ssh) == (4, 4)
02266         tmp = new FSMState;
02267         for (i=0; i<17; i++) {
02268                 tmp->drop_[i] = NULL;
02269                 tmp->transition_[i] = -1;
02270         }
02271         tmp->batch_size_ = 4;
02272         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[1] = tmp;
02273         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->transition_[1] = RTT;
02274 
02275         tmp = new FSMState;
02276         for (i=0; i<17; i++) {
02277                 tmp->drop_[i] = NULL;
02278                 tmp->transition_[i] = -1;
02279         }
02280         tmp->batch_size_ = 4;
02281         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[1]->drop_[0] = tmp;
02282         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[1]->transition_[0] = RTT;
02283         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[2]->drop_[0]->drop_[0] = tmp;
02284         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[2]->drop_[0]->transition_[0] = RTT;
02285 
02286 
02287         tmp = new FSMState;
02288         for (i=0; i<17; i++) {
02289                 tmp->drop_[i] = NULL;
02290                 tmp->transition_[i] = -1;
02291         }
02292         tmp->batch_size_ = 5;
02293         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[1]->drop_[0]->drop_[0] = tmp;
02294         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[1]->drop_[0]->transition_[0] = RTT;
02295 
02296 
02297         //(wnd, ssh) == (5, 5)  
02298         tmp = new FSMState;
02299         for (i=0; i<17; i++) {
02300                 tmp->drop_[i] = NULL;
02301                 tmp->transition_[i] = -1;
02302         }
02303         tmp->batch_size_ = 5;
02304         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[4]->drop_[0] = tmp;
02305         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[4]->transition_[0] = 0;
02306         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[5]->drop_[0] = tmp;
02307         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[5]->transition_[0] = 0;
02308         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[6]->drop_[0] = tmp;
02309         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[6]->transition_[0] = RTT;
02310         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[7]->drop_[0] = tmp;
02311         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[7]->transition_[0] = RTT;
02312 
02313 
02314         tmp = new FSMState;
02315         for (i=0; i<17; i++) {
02316                 tmp->drop_[i] = NULL;
02317                 tmp->transition_[i] = -1;
02318         }
02319         tmp->batch_size_ = 5;
02320         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[4]->drop_[0]->drop_[0] = tmp;
02321         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[4]->drop_[0]->transition_[0] = RTT;
02322 
02323         tmp = new FSMState;
02324         for (i=0; i<17; i++) {
02325                 tmp->drop_[i] = NULL;
02326                 tmp->transition_[i] = -1;
02327         }
02328         tmp->batch_size_ = 5;
02329         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[4]->drop_[0]->drop_[0]->drop_[0] = tmp;
02330         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[4]->drop_[0]->drop_[0]->transition_[0] = RTT;
02331 
02332         //(wnd, ssh) == (6, 6)
02333         tmp = new FSMState;
02334         for (i=0; i<17; i++) {
02335                 tmp->drop_[i] = NULL;
02336                 tmp->transition_[i] = -1;
02337         }
02338         tmp->batch_size_ = 6;
02339         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[8]->drop_[0] = tmp;
02340         start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[8]->transition_[0] = RTT;
02341 
02342         //print_FSM(start_state_);
02343         //printf("\n");
02344 }
02345 

Generated on Tue Apr 20 12:14:17 2004 for NS2.26SourcesOriginal by doxygen 1.3.3