/* -*- Mode:C++; c-basic-offset:8; tab-width:8; indent-tabs-mode:t -*- */
/*
* Copyright (C) 1999 by the University of Southern California
* $Id: fsm.cc,v 1.12 2005/08/25 18:58:02 johnh Exp $
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License,
* version 2, as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
*
*
* The copyright of this module includes the following
* linking-with-specific-other-licenses addition:
*
* In addition, as a special exception, the copyright holders of
* this module give you permission to combine (via static or
* dynamic linking) this module with free software programs or
* libraries that are released under the GNU LGPL and with code
* included in the standard release of ns-2 under the Apache 2.0
* license or under otherwise-compatible licenses with advertising
* requirements (or modified versions of such code, with unchanged
* license). You may copy and distribute such a system following the
* terms of the GNU GPL for this module and the licenses of the
* other code concerned, provided that you include the source code of
* that other code when and as the GNU GPL requires distribution of
* source code.
*
* Note that people who make modified versions of this module
* are not obligated to grant this special exception for their
* modified versions; it is their choice whether to do so. The GNU
* General Public License gives permission to release a modified
* version without this exception; this exception also makes it
* possible to release a modified version which carries forward this
* exception.
*
*/
/*
* Contributed by Polly Huang (USC/ISI), http://www-scf.usc.edu/~bhuang
*
* @(#) $Header: /nfs/jade/vint/CVSROOT/ns-2/common/fsm.cc,v 1.12 2005/08/25 18:58:02 johnh Exp $ (LBL)
*/
/*
* The contents of this file are described in the paper:
* Polly Huang and John Heidemann.
* Capturing TCP Burstiness in Light-weight Simulations.
* In Proceedings of the SCS Conference on Communication Networks and Distributed Systems Modeling and Simulation, pp. 90-96.
* Phoenix, Arizona, USA, USC/Information Sciences Institute, Society for Computer Simulation.
* January, 2001.
* <http://www.isi.edu/~johnh/PAPERS/Huang01a.html>.
*
* (Although this code talks about FSMs or Finite-State Machines,
* the paper uses the term FSA or Finite-State Automoton.)
*/
#include "fsm.h"
#include <assert.h>
#ifndef MAX
#define MAX(a, b) (((a) > (b)) ? (a) : (b))
#endif
#ifndef MIN
#define MIN(a, b) (((a) < (b)) ? (a) : (b))
#endif
FSM* FSM::instance_;
TahoeAckFSM* TahoeAckFSM::instance_;
RenoAckFSM* RenoAckFSM::instance_;
TahoeDelAckFSM* TahoeDelAckFSM::instance_;
RenoDelAckFSM* RenoDelAckFSM::instance_;
void
FSMState::number_all()
{
if (processed())
return;
static int next_i = 0;
print_i_ = ++next_i;
//
int i;
for (i = 0; i < 17; i++)
if (drop_[i])
drop_[i]->number_all();
}
void
FSMState::reset_all_processed()
{
if (print_i_ == 0)
number_all();
// requires a full traversal always to work
if (!processed())
return;
print_i_ = -print_i_;
int i;
for (i = 0; i < 17; i++)
if (drop_[i])
drop_[i]->reset_all_processed();
}
void
FSMState::print_all(int level)
{
if (processed())
return;
const int SPACES_PER_LEVEL = 2;
printf("#%-2d %*s %d:\n", print_i_, level * SPACES_PER_LEVEL + 1, " ", batch_size_);
int i;
for (i = 0; i <= batch_size_; i++) {
static char *delay_names[] = {"done", "error", "RTT", "timeout" };
assert(transition_[i] >= -1 && transition_[i] <= TIMEOUT);
printf(" %*s %d %s -> #%d\n", level * SPACES_PER_LEVEL + 3, " ",
i,
delay_names[transition_[i]+1],
drop_[i] ? drop_[i]->print_i_ : 0);
if (drop_[i])
drop_[i]->print_all(level + 1);
};
}
static void
report_stat_terminus(int desired_pkts, // # needed
int pkts, // # got so far
int rtts, // # of rtt events
int timeouts, // # of to events
int ps, // # of times taken a prob. p event (pkt received OK)
int qs, // # of times taken a prob. q event (pkt dropped OK)
int num_states, // size of the stack
int num_state_names,
FSMState **states,
char *state_names)
{
// print states and probability
printf("%s: p^%d*q^%d, %d rtt, %d timeouts, %d states:",
(pkts > desired_pkts ? "exceeded-pkts" :
(pkts == desired_pkts ? "desired_pkts" : "unimplemented-qs")),
ps, qs,
rtts, timeouts,
num_states);
char ch = ' ';
int i;
for (i = 0; i < num_states; i++) {
printf ("%c#%d", ch, states[i]->print_i_);
ch = ',';
};
printf(" [%.*s]\n", num_state_names, state_names);
}
/*
* FSMState::print_all_stats:
* Walk through the tcp state table exhaustively.
* Recurse to handle errors.
* Very hairy.
* johnh.
*/
void
FSMState::print_all_stats(int desired_pkts_total, // # needed
int pkts, // # got so far
int rtts, // # of rtt events
int timeouts, // # of to events
int ps, // # of times taken a prob. p event (pkt received OK)
int qs, // # of times taken a prob. q event (pkt dropped OK)
int num_states, // size of the stack
int num_state_names)
{
int i;
#define LARGER_NUMBER_OF_STATES 31 // was 17
static FSMState *states[LARGER_NUMBER_OF_STATES];
static char state_names[LARGER_NUMBER_OF_STATES*4]; // xxx: this is just some random big size :-(
if (pkts >= desired_pkts_total || qs > 5) {
// done; print states and probability
// (give up when we're where we want to be [good],
// or we've taken too many losses [to prevent recursion])
report_stat_terminus(desired_pkts_total, pkts, rtts, timeouts, ps, qs, num_states, num_state_names, states, state_names);
return;
};
// remember us!
states[num_states] = this;
num_states++;
// xxx: doesn't handle TCP tail behavior
//
// first, consider the no-loss case
//
int desired_pkts_remaining = desired_pkts_total - pkts;
int desired_pkts_this_round = MIN(desired_pkts_remaining, batch_size_);
for (i = 0; i< desired_pkts_this_round; i++)
state_names[num_state_names + i] = 's';
if (desired_pkts_remaining > desired_pkts_this_round) {
// more to do? take a rtt hit and keep going
state_names[num_state_names + desired_pkts_this_round] = '.';
drop_[0]->print_all_stats(desired_pkts_total,
pkts + desired_pkts_this_round,
rtts + 1, timeouts,
ps + desired_pkts_this_round, qs,
num_states,
num_state_names + desired_pkts_this_round + 1);
} else {
// no more to do... report out
report_stat_terminus(desired_pkts_total,
pkts + desired_pkts_this_round,
rtts, timeouts,
ps + desired_pkts_this_round, qs,
num_states,
num_state_names + desired_pkts_this_round,
states,
state_names);
};
//
// now consider losses
//
int desired_pkts_with_loss = MAX(desired_pkts_this_round - 1, 0);
// loop through losing the i'th packet for all possible i's.
// Can't loop through more than we could have sent.
for (i = 1; i <= desired_pkts_this_round; i++) {
// keep track of sending patterns
if (i > 1)
state_names[num_state_names + i - 2] = 's';
state_names[num_state_names + i - 1] = 'd';
state_names[num_state_names + desired_pkts_this_round] = (transition_[i] == RTT ? '.' : '-');
// can we even have any?
if (qs) {
// not if we already had one!
report_stat_terminus(desired_pkts_total,
pkts + i - 1,
rtts, timeouts,
ps + i - 1, qs + 1,
num_states,
num_state_names + i,
states,
state_names);
} else {
// recurse... assume the rest made it
drop_[i]->print_all_stats(desired_pkts_total, pkts + desired_pkts_with_loss,
rtts + (transition_[i] == RTT ? 1 : 0),
timeouts + (transition_[i] == TIMEOUT ? 1 : 0),
ps + desired_pkts_with_loss, qs + 1,
num_states,
num_state_names + desired_pkts_this_round + 1);
// 2nd drop somewhere in this round?
int remaining_pkts_this_round = desired_pkts_this_round - i;
if (qs == 0 && remaining_pkts_this_round > 0) {
// yes, generate the probs
int j;
for (j = i+1; j <= desired_pkts_this_round; j++) {
if (j > i+1)
state_names[num_state_names + j - 1] = 's';
state_names[num_state_names + j] = 'd';
report_stat_terminus(desired_pkts_total,
pkts + j - 2,
rtts, timeouts,
ps + j - 2, qs + 2,
num_states,
num_state_names + j,
states,
state_names);
};
};
};
};
}
void
FSM::print_FSM(FSMState* state)
{
#if 0
int i;
if (state != NULL) {
for (i=0; i<17; i++) {
if (state->drop_[i] != NULL) {
if (i==0)
printf("%d->(%d) ", state->transition_[i], state->drop_[i]->batch_size_);
else
printf("\n%d->(%d) ", state->transition_[i], state->drop_[i]->batch_size_);
print_FSM(state->drop_[i]);
}
}
}
#else /* ! 0 */
state->reset_all_processed();
state->print_all(0);
#endif /* 0 */
}
void
FSM::print_FSM_stats(FSMState* state, int n)
{
state->reset_all_processed();
state->print_all_stats(n);
fflush(stdout);
}
static class TahoeAckFSMClass : public TclClass {
public:
TahoeAckFSMClass() : TclClass("FSM/TahoeAck") {}
TclObject* create(int , const char*const*) {
return (new TahoeAckFSM);
}
} class_tahoeackfsm;
static class RenoAckFSMClass : public TclClass {
public:
RenoAckFSMClass() : TclClass("FSM/RenoAck") {}
TclObject* create(int , const char*const*) {
return (new RenoAckFSM);
}
} class_renoackfsm;
static class TahoeDelAckFSMClass : public TclClass {
public:
TahoeDelAckFSMClass() : TclClass("FSM/TahoeDelAck") {}
TclObject* create(int , const char*const*) {
return (new TahoeDelAckFSM);
}
} class_tahoedelackfsm;
static class RenoDelAckFSMClass : public TclClass {
public:
RenoDelAckFSMClass() : TclClass("FSM/RenoDelAck") {}
TclObject* create(int , const char*const*) {
return (new RenoDelAckFSM);
}
} class_renodelackfsm;
// ***********************************************
// Tahoe-Ack TCP Connection Finite State Machine *
// ***********************************************
TahoeAckFSM::TahoeAckFSM() : FSM(), start_state_(NULL)
{
int i;
FSMState* tmp;
instance_ = this;
// (wnd, ssh) == (1, 20)
start_state_ = new FSMState;
//printf("creating Tahoe Ack FSM\n");
for (i=0; i<17; i++) {
start_state_->drop_[i] = NULL;
start_state_->transition_[i] = -1;
}
start_state_->batch_size_ = 1;
// (wnd, ssh) == (2, 20)
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 2;
start_state_->drop_[0] = tmp;
start_state_->transition_[0] = RTT;
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 2;
start_state_->drop_[0]->drop_[2] = tmp;
start_state_->drop_[0]->transition_[2] = RTT;
// (wnd, ssh) == (4, 20)
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 4;
start_state_->drop_[0]->drop_[0] = tmp;
start_state_->drop_[0]->transition_[0] = RTT;
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 2;
start_state_->drop_[0]->drop_[0]->drop_[2] = tmp;
start_state_->drop_[0]->drop_[0]->transition_[2] = RTT;
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 4;
start_state_->drop_[0]->drop_[0]->drop_[3] = tmp;
start_state_->drop_[0]->drop_[0]->transition_[3] = RTT;
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 6;
start_state_->drop_[0]->drop_[0]->drop_[4] = tmp;
start_state_->drop_[0]->drop_[0]->transition_[4] = RTT;
//(wnd, ssh) == (8, 20)
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 8;
start_state_->drop_[0]->drop_[0]->drop_[0] = tmp;
start_state_->drop_[0]->drop_[0]->transition_[0] = RTT;
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 2;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[2] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->transition_[2] = RTT;
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 4;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[3] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->transition_[3] = RTT;
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 6;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[4] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->transition_[4] = RTT;
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 8;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[5] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->transition_[5] = RTT;
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 10;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[6] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->transition_[6] = RTT;
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 12;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[7] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->transition_[7] = RTT;
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 14;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[8] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->transition_[8] = RTT;
//(wnd, ssh) == (16, 20)
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 16;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->transition_[0] = RTT;
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 1;
for (i=1; i<17; i++) start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[i] = tmp;
for (i=1; i<14; i++)
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->transition_[i] = RTT;
for (i=14; i<17; i++)
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->transition_[i] = TIMEOUT;
//(wnd, ssh) == (1, 2), timeout
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 1;
start_state_->drop_[1] = tmp;
start_state_->transition_[1] = TIMEOUT;
start_state_->drop_[0]->drop_[1] = tmp;
start_state_->drop_[0]->transition_[1] = TIMEOUT;
start_state_->drop_[0]->drop_[2]->drop_[0] = tmp;
start_state_->drop_[0]->drop_[2]->transition_[0] = TIMEOUT;
start_state_->drop_[0]->drop_[0]->drop_[1] = tmp;
start_state_->drop_[0]->drop_[0]->transition_[1] = RTT;
start_state_->drop_[0]->drop_[0]->drop_[2]->drop_[0] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[2]->transition_[0] = RTT;
//(wnd, ssh) == (2, 2)
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 2;
start_state_->drop_[1]->drop_[0] = tmp;
start_state_->drop_[1]->transition_[0] = RTT;
//(wnd, ssh) == (2.5, 2)
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 2;
start_state_->drop_[1]->drop_[0]->drop_[0] = tmp;
start_state_->drop_[1]->drop_[0]->transition_[0] = RTT;
//(wnd, ssh) == (3, 2)
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 3;
start_state_->drop_[1]->drop_[0]->drop_[0]->drop_[0] = tmp;
start_state_->drop_[1]->drop_[0]->drop_[0]->transition_[0] = RTT;
//(wnd, ssh) == (4, 2)
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 4;
start_state_->drop_[1]->drop_[0]->drop_[0]->drop_[0]->drop_[0] = tmp;
start_state_->drop_[1]->drop_[0]->drop_[0]->drop_[0]->transition_[0] = RTT;
//(wnd, ssh) == (5, 2)
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 5;
start_state_->drop_[1]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0] = tmp;
start_state_->drop_[1]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->transition_[0] = RTT;
//(wnd, ssh) == (6, 2)
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 6;
start_state_->drop_[1]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0] = tmp;
start_state_->drop_[1]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->transition_[0] = RTT;
//(wnd, ssh) == (7, 2)
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 7;
start_state_->drop_[1]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0] = tmp;
start_state_->drop_[1]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->transition_[0] = RTT;
//(wnd, ssh) == (7, 2)
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 7;
start_state_->drop_[1]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0] = tmp;
start_state_->drop_[1]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->transition_[0] = RTT;
//(wnd, ssh) == (1, 3)
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 1;
start_state_->drop_[0]->drop_[0]->drop_[3]->drop_[0] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[3]->transition_[0] = RTT;
start_state_->drop_[0]->drop_[0]->drop_[4]->drop_[0] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[4]->transition_[0] = RTT;
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 2;
start_state_->drop_[0]->drop_[0]->drop_[3]->drop_[0]->drop_[0] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[3]->drop_[0]->transition_[0] = RTT;
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 3;
start_state_->drop_[0]->drop_[0]->drop_[3]->drop_[0]->drop_[0]->drop_[0] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[3]->drop_[0]->drop_[0]->transition_[0] = RTT;
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 4;
start_state_->drop_[0]->drop_[0]->drop_[3]->drop_[0]->drop_[0]->drop_[0]->drop_[0] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[3]->drop_[0]->drop_[0]->drop_[0]->transition_[0] = RTT;
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 5;
start_state_->drop_[0]->drop_[0]->drop_[3]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[3]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->transition_[0] = RTT;
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 5;
start_state_->drop_[0]->drop_[0]->drop_[3]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[3]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->transition_[0] = RTT;
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 6;
start_state_->drop_[0]->drop_[0]->drop_[3]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[3]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->transition_[0] = RTT;
//(wnd, ssh) == (1, 4)
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 1;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[1] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->transition_[1] = RTT;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[2]->drop_[0] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[2]->transition_[0] = 0;
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 2;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[1]->drop_[0] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[1]->transition_[0] = RTT;
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 4;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[1]->drop_[0]->drop_[0] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[1]->drop_[0]->transition_[0] = RTT;
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 4;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[1]->drop_[0]->drop_[0]->drop_[0] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[1]->drop_[0]->drop_[0]->transition_[0] = RTT;
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 5;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[1]->drop_[0]->drop_[0]->drop_[0]->drop_[0] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[1]->drop_[0]->drop_[0]->drop_[0]->transition_[0] = RTT;
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 6;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[1]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[1]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->transition_[0] = RTT;
//(wnd, ssh) == (1, 5)
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 1;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[3]->drop_[0] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[3]->transition_[0] = 0;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[4]->drop_[0] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[4]->transition_[0] = 0;
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 2;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[3]->drop_[0]->drop_[0] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[3]->drop_[0]->transition_[0] = RTT;
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 4;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[3]->drop_[0]->drop_[0]->drop_[0] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[3]->drop_[0]->drop_[0]->transition_[0] = RTT;
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 5;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[3]->drop_[0]->drop_[0]->drop_[0]->drop_[0] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[3]->drop_[0]->drop_[0]->drop_[0]->transition_[0] = RTT;
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 6;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[3]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[3]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->transition_[0] = RTT;
//(wnd, ssh) == (1, 6)
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 1;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[5]->drop_[0] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[5]->transition_[0] = 0;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[6]->drop_[0] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[6]->transition_[0] = RTT;
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 2;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[5]->drop_[0]->drop_[0] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[5]->drop_[0]->transition_[0] = RTT;
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 4;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[5]->drop_[0]->drop_[0]->drop_[0] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[5]->drop_[0]->drop_[0]->transition_[0] = RTT;
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 6;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[5]->drop_[0]->drop_[0]->drop_[0]->drop_[0] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[5]->drop_[0]->drop_[0]->drop_[0]->transition_[0] = RTT;
//(wnd, ssh) == (1, 7)
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 1;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[7]->drop_[0] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[7]->transition_[0] = RTT;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[8]->drop_[0] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[8]->transition_[0] = RTT;
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 2;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[7]->drop_[0]->drop_[0] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[7]->drop_[0]->transition_[0] = RTT;
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 4;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[7]->drop_[0]->drop_[0]->drop_[0] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[7]->drop_[0]->drop_[0]->transition_[0] = RTT;
//print_FSM(start_state_);
//printf("\n");
}
// **********************************************
// Reno-ACK TCP Connection Finite State Machine *
// **********************************************
RenoAckFSM::RenoAckFSM() : FSM(), start_state_(NULL)
{
int i;
FSMState* tmp;
//printf("creating Reno Ack FSM\n");
instance_ = this;
// (wnd, ssh) == (1, 20)
start_state_ = new FSMState;
for (i=0; i<17; i++) {
start_state_->drop_[i] = NULL;
start_state_->transition_[i] = -1;
}
start_state_->batch_size_ = 1;
// (wnd, ssh) == (2, 20)
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 2;
start_state_->drop_[0] = tmp;
start_state_->transition_[0] = RTT;
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 2;
start_state_->drop_[0]->drop_[2] = tmp;
start_state_->drop_[0]->transition_[2] = RTT;
// (wnd, ssh) == (4, 20)
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 4;
start_state_->drop_[0]->drop_[0] = tmp;
start_state_->drop_[0]->transition_[0] = RTT;
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 2;
start_state_->drop_[0]->drop_[0]->drop_[2] = tmp;
start_state_->drop_[0]->drop_[0]->transition_[2] = RTT;
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 4;
start_state_->drop_[0]->drop_[0]->drop_[3] = tmp;
start_state_->drop_[0]->drop_[0]->transition_[3] = RTT;
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 6;
start_state_->drop_[0]->drop_[0]->drop_[4] = tmp;
start_state_->drop_[0]->drop_[0]->transition_[4] = RTT;
//(wnd, ssh) == (8, 20)
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 8;
start_state_->drop_[0]->drop_[0]->drop_[0] = tmp;
start_state_->drop_[0]->drop_[0]->transition_[0] = RTT;
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 4;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[3] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->transition_[3] = RTT;
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 6;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[4] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->transition_[4] = RTT;
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 8;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[5] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->transition_[5] = RTT;
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 10;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[6] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->transition_[6] = RTT;
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 6;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[6]->drop_[0] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[6]->transition_[0] = RTT;
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 12;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[7] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->transition_[7] = RTT;
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 14;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[8] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->transition_[8] = RTT;
//(wnd, ssh) == (16, 20)
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 16;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->transition_[0] = RTT;
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 1;
for (i=1; i<17; i++) start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[i] = tmp;
for (i=1; i<14; i++)
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->transition_[i] = RTT;
for (i=14; i<17; i++)
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->transition_[i] = TIMEOUT;
//(wnd, ssh) == (1, 2), timeout
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 1;
start_state_->drop_[1] = tmp;
start_state_->transition_[1] = TIMEOUT;
start_state_->drop_[0]->drop_[1] = tmp;
start_state_->drop_[0]->transition_[1] = TIMEOUT;
start_state_->drop_[0]->drop_[2]->drop_[0] = tmp;
start_state_->drop_[0]->drop_[2]->transition_[0] = TIMEOUT;
//(wnd, ssh) == (2, 2)
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 2;
start_state_->drop_[1]->drop_[0] = tmp;
start_state_->drop_[1]->transition_[0] = RTT;
start_state_->drop_[0]->drop_[0]->drop_[1] = tmp;
start_state_->drop_[0]->drop_[0]->transition_[1] = RTT;
start_state_->drop_[0]->drop_[0]->drop_[2]->drop_[0] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[2]->transition_[0] = RTT;
//(wnd, ssh) == (2.5, 2)
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 2;
start_state_->drop_[1]->drop_[0]->drop_[0] = tmp;
start_state_->drop_[1]->drop_[0]->transition_[0] = RTT;
//(wnd, ssh) == (3, 2)
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 3;
start_state_->drop_[1]->drop_[0]->drop_[0]->drop_[0] = tmp;
start_state_->drop_[1]->drop_[0]->drop_[0]->transition_[0] = RTT;
//(wnd, ssh) == (4, 2)
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 4;
start_state_->drop_[1]->drop_[0]->drop_[0]->drop_[0]->drop_[0] = tmp;
start_state_->drop_[1]->drop_[0]->drop_[0]->drop_[0]->transition_[0] = RTT;
//(wnd, ssh) == (5, 2)
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 5;
start_state_->drop_[1]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0] = tmp;
start_state_->drop_[1]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->transition_[0] = RTT;
//(wnd, ssh) == (6, 2)
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 6;
start_state_->drop_[1]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0] = tmp;
start_state_->drop_[1]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->transition_[0] = RTT;
//(wnd, ssh) == (7, 2)
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 7;
start_state_->drop_[1]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0] = tmp;
start_state_->drop_[1]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->transition_[0] = RTT;
//(wnd, ssh) == (7.5, 2)
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 7;
start_state_->drop_[1]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0] = tmp;
start_state_->drop_[1]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->transition_[0] = RTT;
//(wnd, ssh) == (3, 3)
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 3;
start_state_->drop_[0]->drop_[0]->drop_[3]->drop_[0] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[3]->transition_[0] = RTT;
start_state_->drop_[0]->drop_[0]->drop_[4]->drop_[0] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[4]->transition_[0] = RTT;
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 3;
start_state_->drop_[0]->drop_[0]->drop_[3]->drop_[0]->drop_[0] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[3]->drop_[0]->transition_[0] = RTT;
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 4;
start_state_->drop_[0]->drop_[0]->drop_[3]->drop_[0]->drop_[0]->drop_[0] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[3]->drop_[0]->drop_[0]->transition_[0] = RTT;
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 5;
start_state_->drop_[0]->drop_[0]->drop_[3]->drop_[0]->drop_[0]->drop_[0]->drop_[0] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[3]->drop_[0]->drop_[0]->drop_[0]->transition_[0] = RTT;
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 6;
start_state_->drop_[0]->drop_[0]->drop_[3]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[3]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->transition_[0] = RTT;
//(wnd, ssh) == (4, 4)
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 4;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[1] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->transition_[1] = RTT;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[2] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->transition_[2] = RTT;
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 4;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[1]->drop_[0] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[1]->transition_[0] = RTT;
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 5;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[1]->drop_[0]->drop_[0] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[1]->drop_[0]->transition_[0] = RTT;
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 6;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[1]->drop_[0]->drop_[0]->drop_[0] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[1]->drop_[0]->drop_[0]->transition_[0] = RTT;
//(wnd, ssh) == (5, 5)
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 1;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[3]->drop_[0] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[3]->transition_[0] = 0;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[4]->drop_[0] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[4]->transition_[0] = 0;
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 5;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[3]->drop_[0]->drop_[0] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[3]->drop_[0]->transition_[0] = RTT;
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 6;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[3]->drop_[0]->drop_[0]->drop_[0] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[3]->drop_[0]->drop_[0]->transition_[0] = RTT;
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 7;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[3]->drop_[0]->drop_[0]->drop_[0]->drop_[0] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[3]->drop_[0]->drop_[0]->drop_[0]->transition_[0] = RTT;
//(wnd, ssh) == (6, 6)
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 1;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[5]->drop_[0] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[5]->transition_[0] = 0;
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 6;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[5]->drop_[0]->drop_[0] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[5]->drop_[0]->transition_[0] = RTT;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[6]->drop_[0]->drop_[0] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[6]->drop_[0]->transition_[0] = RTT;
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 7;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[5]->drop_[0]->drop_[0]->drop_[0] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[5]->drop_[0]->drop_[0]->transition_[0] = RTT;
//(wnd, ssh) == (7, 7)
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 7;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[7]->drop_[0] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[7]->transition_[0] = RTT;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[8]->drop_[0] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[8]->transition_[0] = RTT;
//print_FSM(start_state_);
//printf("\n");
}
// *****************************************************
// Tahoe-Delay Ack TCP Connection Finite State Machine *
// *****************************************************
TahoeDelAckFSM::TahoeDelAckFSM() : FSM(), start_state_(NULL)
{
int i;
FSMState* tmp;
//printf("creating Tahoe DelAck FSM\n");
instance_ = this;
// (wnd, ssh) == (1, 20)
start_state_ = new FSMState;
for (i=0; i<17; i++) {
start_state_->drop_[i] = NULL;
start_state_->transition_[i] = -1;
}
start_state_->batch_size_ = 1;
// (wnd, ssh) == (2, 20)
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 2;
start_state_->drop_[0] = tmp;
start_state_->transition_[0] = RTT;
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 2;
start_state_->drop_[0]->drop_[2] = tmp;
start_state_->drop_[0]->transition_[2] = RTT;
// (wnd, ssh) == (3, 20)
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 3;
start_state_->drop_[0]->drop_[0] = tmp;
start_state_->drop_[0]->transition_[0] = RTT;
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 2;
start_state_->drop_[0]->drop_[0]->drop_[2] = tmp;
start_state_->drop_[0]->drop_[0]->transition_[2] = RTT;
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 3;
start_state_->drop_[0]->drop_[0]->drop_[3] = tmp;
start_state_->drop_[0]->drop_[0]->transition_[3] = RTT;
//(wnd, ssh) == (5, 20)
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 5;
start_state_->drop_[0]->drop_[0]->drop_[0] = tmp;
start_state_->drop_[0]->drop_[0]->transition_[0] = RTT;
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 2;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[2] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->transition_[2] = RTT;
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 3;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[3] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->transition_[3] = RTT;
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 5;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[4] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->transition_[4] = RTT;
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 6;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[5] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->transition_[5] = RTT;
//(wnd, ssh) == (8, 20)
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 8;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->transition_[0] = RTT;
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 2;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[2] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->transition_[2] = RTT;
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 3;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[3] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->transition_[3] = RTT;
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 5;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[4] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->transition_[4] = RTT;
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 6;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[5] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->transition_[5] = RTT;
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 8;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[6] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->transition_[6] = RTT;
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 9;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[7] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->transition_[7] = RTT;
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 11;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[8] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->transition_[8] = RTT;
//(wnd, ssh) == (12, 20)
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 12;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->transition_[0] = RTT;
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 1;
for (i=1; i<13; i++) start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[i] = tmp;
for (i=1; i<10; i++)
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->transition_[i] = RTT;
for (i=10; i<13; i++)
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->transition_[i] = TIMEOUT;
//(wnd, ssh) == (1, 2), timeout
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 1;
start_state_->drop_[1] = tmp;
start_state_->transition_[1] = TIMEOUT;
start_state_->drop_[0]->drop_[1] = tmp;
start_state_->drop_[0]->transition_[1] = TIMEOUT;
start_state_->drop_[0]->drop_[2]->drop_[0] = tmp;
start_state_->drop_[0]->drop_[2]->transition_[0] = TIMEOUT;
start_state_->drop_[0]->drop_[0]->drop_[1] = tmp;
start_state_->drop_[0]->drop_[0]->transition_[1] = TIMEOUT;
start_state_->drop_[0]->drop_[0]->drop_[2]->drop_[0] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[2]->transition_[0] = RTT;
start_state_->drop_[0]->drop_[0]->drop_[3]->drop_[0] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[3]->transition_[0] = RTT;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[1] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->transition_[1] = RTT;
//(wnd, ssh) == (2, 2)
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 2;
start_state_->drop_[1]->drop_[0] = tmp;
start_state_->drop_[1]->transition_[0] = RTT;
//(wnd, ssh) == (2.5, 2)
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 2;
start_state_->drop_[1]->drop_[0]->drop_[0] = tmp;
start_state_->drop_[1]->drop_[0]->transition_[0] = RTT;
//(wnd, ssh) == (2.9, 2)
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 2;
start_state_->drop_[1]->drop_[0]->drop_[0]->drop_[0] = tmp;
start_state_->drop_[1]->drop_[0]->drop_[0]->transition_[0] = RTT;
//(wnd, ssh) == (3, 2)
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 3;
start_state_->drop_[1]->drop_[0]->drop_[0]->drop_[0]->drop_[0] = tmp;
start_state_->drop_[1]->drop_[0]->drop_[0]->drop_[0]->transition_[0] = RTT;
//(wnd, ssh) == (3.3, 2)
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 3;
start_state_->drop_[1]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0] = tmp;
start_state_->drop_[1]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->transition_[0] = RTT;
//(wnd, ssh) == (4, 2)
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 4;
start_state_->drop_[1]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0] = tmp;
start_state_->drop_[1]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->transition_[0] = RTT;
//(wnd, ssh) == (4.7, 2)
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 4;
start_state_->drop_[1]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0] = tmp;
start_state_->drop_[1]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->transition_[0] = RTT;
//(wnd, ssh) == (5, 2)
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 5;
start_state_->drop_[1]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0] = tmp;
start_state_->drop_[1]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->transition_[0] = RTT;
//(wnd, ssh) == (6, 2)
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 6;
start_state_->drop_[1]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0] = tmp;
start_state_->drop_[1]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->transition_[0] = RTT;
//(wnd, ssh) == (1, 3)
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 1;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[2]->drop_[0] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[2]->transition_[0] = RTT;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[3]->drop_[0] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[3]->transition_[0] = RTT;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[4]->drop_[0] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[4]->transition_[0] = RTT;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[5]->drop_[0] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[5]->transition_[0] = RTT;
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 2;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[3]->drop_[0]->drop_[0] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[3]->drop_[0]->transition_[0] = RTT;
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 3;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[3]->drop_[0]->drop_[0]->drop_[0] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[3]->drop_[0]->drop_[0]->transition_[0] = RTT;
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 3;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[3]->drop_[0]->drop_[0]->drop_[0]->drop_[0] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[3]->drop_[0]->drop_[0]->drop_[0]->transition_[0] = RTT;
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 4;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[3]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[3]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->transition_[0] = RTT;
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 4;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[3]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[3]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->transition_[0] = RTT;
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 5;
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;
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;
//(wnd, ssh) == (1, 4)
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 1;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[1] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->transition_[1] = RTT;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[2]->drop_[0] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[2]->transition_[0] = 0;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[3]->drop_[0] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[3]->transition_[0] = 0;
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 2;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[1]->drop_[0] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[1]->transition_[0] = RTT;
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 3;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[1]->drop_[0]->drop_[0] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[1]->drop_[0]->transition_[0] = RTT;
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 4;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[1]->drop_[0]->drop_[0]->drop_[0] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[1]->drop_[0]->drop_[0]->transition_[0] = RTT;
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 4;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[1]->drop_[0]->drop_[0]->drop_[0]->drop_[0] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[1]->drop_[0]->drop_[0]->drop_[0]->transition_[0] = RTT;
//(wnd, ssh) == (1, 5)
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 1;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[4]->drop_[0] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[4]->transition_[0] = 0;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[5]->drop_[0] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[5]->transition_[0] = 0;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[6]->drop_[0] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[6]->transition_[0] = RTT;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[7]->drop_[0] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[7]->transition_[0] = RTT;
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 2;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[4]->drop_[0]->drop_[0] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[4]->drop_[0]->transition_[0] = RTT;
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 3;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[4]->drop_[0]->drop_[0]->drop_[0] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[4]->drop_[0]->drop_[0]->transition_[0] = RTT;
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 5;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[4]->drop_[0]->drop_[0]->drop_[0]->drop_[0] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[4]->drop_[0]->drop_[0]->drop_[0]->transition_[0] = RTT;
//(wnd, ssh) == (1, 6)
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 1;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[8]->drop_[0] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[8]->transition_[0] = RTT;
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 2;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[8]->drop_[0]->drop_[0] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[8]->drop_[0]->transition_[0] = RTT;
//print_FSM(start_state_);
//printf("\n");
}
// ****************************************************
// Reno-Delay Ack TCP Connection Finite State Machine *
// ****************************************************
RenoDelAckFSM::RenoDelAckFSM() : FSM(), start_state_(NULL)
{
int i;
FSMState* tmp;
//printf("creating Reno DelAck FSM\n");
instance_ = this;
// (wnd, ssh) == (1, 20)
start_state_ = new FSMState;
for (i=0; i<17; i++) {
start_state_->drop_[i] = NULL;
start_state_->transition_[i] = -1;
}
start_state_->batch_size_ = 1;
// (wnd, ssh) == (2, 20)
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 2;
start_state_->drop_[0] = tmp;
start_state_->transition_[0] = RTT;
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 2;
start_state_->drop_[0]->drop_[2] = tmp;
start_state_->drop_[0]->transition_[2] = RTT;
// (wnd, ssh) == (3, 20)
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 3;
start_state_->drop_[0]->drop_[0] = tmp;
start_state_->drop_[0]->transition_[0] = RTT;
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 2;
start_state_->drop_[0]->drop_[0]->drop_[2] = tmp;
start_state_->drop_[0]->drop_[0]->transition_[2] = RTT;
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 3;
start_state_->drop_[0]->drop_[0]->drop_[3] = tmp;
start_state_->drop_[0]->drop_[0]->transition_[3] = RTT;
//(wnd, ssh) == (5, 20)
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 5;
start_state_->drop_[0]->drop_[0]->drop_[0] = tmp;
start_state_->drop_[0]->drop_[0]->transition_[0] = RTT;
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 2;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[2] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->transition_[2] = RTT;
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 3;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[3] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->transition_[3] = RTT;
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 5;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[4] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->transition_[4] = RTT;
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 6;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[5] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->transition_[5] = RTT;
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 2;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[2]->drop_[0] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[2]->transition_[0] = RTT;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[4]->drop_[0] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[4]->transition_[0] = RTT;
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 3;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[3]->drop_[0] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[3]->transition_[0] = RTT;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[5]->drop_[0] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[5]->transition_[0] = RTT;
//(wnd, ssh) == (8, 20)
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 8;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->transition_[0] = RTT;
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 3;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[2] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->transition_[2] = RTT;
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 4;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[3] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->transition_[3] = RTT;
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 4;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[2]->drop_[0] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[2]->transition_[0] = RTT;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[3]->drop_[0] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[3]->transition_[0] = RTT;
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 1;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[4] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->transition_[4] = RTT;
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 2;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[5] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->transition_[5] = RTT;
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 8;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[6] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->transition_[6] = RTT;
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 9;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[7] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->transition_[7] = RTT;
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 11;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[8] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->transition_[8] = RTT;
//(wnd, ssh) == (12, 20)
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 12;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->transition_[0] = RTT;
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 1;
for (i=1; i<13; i++) start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[i] = tmp;
for (i=1; i<10; i++)
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->transition_[i] = RTT;
for (i=10; i<13; i++)
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->transition_[i] = TIMEOUT;
//(wnd, ssh) == (1, 2), timeout
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 1;
start_state_->drop_[1] = tmp;
start_state_->transition_[1] = TIMEOUT;
start_state_->drop_[0]->drop_[1] = tmp;
start_state_->drop_[0]->transition_[1] = TIMEOUT;
start_state_->drop_[0]->drop_[2]->drop_[0] = tmp;
start_state_->drop_[0]->drop_[2]->transition_[0] = TIMEOUT;
start_state_->drop_[0]->drop_[0]->drop_[1] = tmp;
start_state_->drop_[0]->drop_[0]->transition_[1] = TIMEOUT;
start_state_->drop_[0]->drop_[0]->drop_[2]->drop_[0] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[2]->transition_[0] = TIMEOUT;
//(wnd, ssh) == (2, 2)
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 2;
start_state_->drop_[1]->drop_[0] = tmp;
start_state_->drop_[1]->transition_[0] = RTT;
//(wnd, ssh) == (2.5, 2)
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 2;
start_state_->drop_[1]->drop_[0]->drop_[0] = tmp;
start_state_->drop_[1]->drop_[0]->transition_[0] = RTT;
//(wnd, ssh) == (2.9, 2)
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 2;
start_state_->drop_[1]->drop_[0]->drop_[0]->drop_[0] = tmp;
start_state_->drop_[1]->drop_[0]->drop_[0]->transition_[0] = RTT;
//(wnd, ssh) == (3, 2)
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 3;
start_state_->drop_[1]->drop_[0]->drop_[0]->drop_[0]->drop_[0] = tmp;
start_state_->drop_[1]->drop_[0]->drop_[0]->drop_[0]->transition_[0] = RTT;
//(wnd, ssh) == (3.3, 2)
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 3;
start_state_->drop_[1]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0] = tmp;
start_state_->drop_[1]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->transition_[0] = RTT;
//(wnd, ssh) == (4, 2)
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 4;
start_state_->drop_[1]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0] = tmp;
start_state_->drop_[1]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->transition_[0] = RTT;
//(wnd, ssh) == (4.7, 2)
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 4;
start_state_->drop_[1]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0] = tmp;
start_state_->drop_[1]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->transition_[0] = RTT;
//(wnd, ssh) == (5, 2)
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 5;
start_state_->drop_[1]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0] = tmp;
start_state_->drop_[1]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->transition_[0] = RTT;
//(wnd, ssh) == (6, 2)
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 6;
start_state_->drop_[1]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0] = tmp;
start_state_->drop_[1]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->transition_[0] = RTT;
//(wnd, ssh) == (2, 2), rtt
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 2;
start_state_->drop_[0]->drop_[0]->drop_[3]->drop_[0] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[3]->transition_[0] = RTT;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[1] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->transition_[1] = RTT;
//(wnd, ssh) == (2.5, 2)
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 2;
start_state_->drop_[0]->drop_[0]->drop_[3]->drop_[0]->drop_[0] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[3]->drop_[0]->transition_[0] = RTT;
//(wnd, ssh) == (3, 2)
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 3;
start_state_->drop_[0]->drop_[0]->drop_[3]->drop_[0]->drop_[0]->drop_[0] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[3]->drop_[0]->drop_[0]->transition_[0] = RTT;
//(wnd, ssh) == (4, 2)
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 4;
start_state_->drop_[0]->drop_[0]->drop_[3]->drop_[0]->drop_[0]->drop_[0]->drop_[0] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[3]->drop_[0]->drop_[0]->drop_[0]->transition_[0] = RTT;
//(wnd, ssh) == (4.3, 2)
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 4;
start_state_->drop_[0]->drop_[0]->drop_[3]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[3]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->transition_[0] = RTT;
//(wnd, ssh) == (4.7, 2)
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 4;
start_state_->drop_[0]->drop_[0]->drop_[3]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[3]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->transition_[0] = RTT;
//(wnd, ssh) == (5, 2)
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 5;
start_state_->drop_[0]->drop_[0]->drop_[3]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[3]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->transition_[0] = RTT;
//(wnd, ssh) == (3.3, 3)
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 3;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[2]->drop_[0]->drop_[0] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[2]->drop_[0]->transition_[0] = RTT;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[3]->drop_[0]->drop_[0] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[3]->drop_[0]->transition_[0] = RTT;
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 4;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[2]->drop_[0]->drop_[0]->drop_[0] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[2]->drop_[0]->drop_[0]->transition_[0] = RTT;
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 4;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[2]->drop_[0]->drop_[0]->drop_[0]->drop_[0] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[2]->drop_[0]->drop_[0]->drop_[0]->transition_[0] = RTT;
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 5;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[2]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[2]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->transition_[0] = RTT;
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 5;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[2]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[2]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[0]->transition_[0] = RTT;
//(wnd, ssh) == (4, 4)
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 4;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[1] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->transition_[1] = RTT;
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 4;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[1]->drop_[0] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[1]->transition_[0] = RTT;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[2]->drop_[0]->drop_[0] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[2]->drop_[0]->transition_[0] = RTT;
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 5;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[1]->drop_[0]->drop_[0] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[1]->drop_[0]->transition_[0] = RTT;
//(wnd, ssh) == (5, 5)
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 5;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[4]->drop_[0] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[4]->transition_[0] = 0;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[5]->drop_[0] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[5]->transition_[0] = 0;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[6]->drop_[0] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[6]->transition_[0] = RTT;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[7]->drop_[0] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[7]->transition_[0] = RTT;
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 5;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[4]->drop_[0]->drop_[0] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[4]->drop_[0]->transition_[0] = RTT;
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 5;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[4]->drop_[0]->drop_[0]->drop_[0] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[4]->drop_[0]->drop_[0]->transition_[0] = RTT;
//(wnd, ssh) == (6, 6)
tmp = new FSMState;
for (i=0; i<17; i++) {
tmp->drop_[i] = NULL;
tmp->transition_[i] = -1;
}
tmp->batch_size_ = 6;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[8]->drop_[0] = tmp;
start_state_->drop_[0]->drop_[0]->drop_[0]->drop_[0]->drop_[8]->transition_[0] = RTT;
//print_FSM(start_state_);
//printf("\n");
}
syntax highlighted by Code2HTML, v. 0.9.1