Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code | Sign in
(793)

Unified Diff: ns-3.13/error-models.patch

Issue 6201059: New IEEE 802.11 indoor wireless channel models for ns-3
Patch Set: Created 11 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Please Sign in to add in-line comments.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ns-3.13/README ('k') | ns-3.13/scratch/error-model-test.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ns-3.13/error-models.patch
diff --git a/ns-3.13/error-models.patch b/ns-3.13/error-models.patch
new file mode 100644
index 0000000000000000000000000000000000000000..6a8dfb95db95dda14c81ab5d49b6ad0d39f51e9c
--- /dev/null
+++ b/ns-3.13/error-models.patch
@@ -0,0 +1,9576 @@
+diff -uprNB ns-3.13/scratch/error-model-test.cc b/scratch/error-model-test.cc
+--- ns-3.13/scratch/error-model-test.cc 1970-01-01 01:00:00.000000000 +0100
++++ b/scratch/error-model-test.cc 2012-04-17 11:35:07.000000000 +0200
+@@ -0,0 +1,1047 @@
++/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
++/*
++ * Copyright (c) 2011 Universidad de Cantabria
++ *
++ * 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
++ *
++ * Author: David Gómez Fernández <dgomez@tlmat.unican.es>
++ * Ramón Agüero Calvo <ramon@tlmat.unican.es>
++ */
++
++#include "ns3/core-module.h"
++#include "ns3/mobility-module.h"
++#include "ns3/applications-module.h"
++
++#include "ns3/wifi-helper.h"
++#include "ns3/yans-wifi-helper.h"
++#include "ns3/inet-socket-address.h"
++#include "ns3/internet-stack-helper.h"
++#include "ns3/ipv4-address-helper.h"
++#include "ns3/wifi-module.h"
++#include "ns3/propagation-loss-model.h"
++
++#include "ns3/aodv-routing-protocol.h"
++
++#include "ns3/ar-model.h"
++#include "ns3/hidden-markov-error-model.h"
++
++#include "ns3/socket.h"
++#include <ns3/node-list.h>
++
++#include "ns3/wifi-mac-header.h"
++#include "ns3/llc-snap-header.h"
++#include "ns3/ipv4-header.h"
++#include "ns3/tcp-header.h"
++#include "ns3/udp-header.h"
++
++#include <iostream>
++#include <fstream>
++#include <vector>
++#include <string>
++#include <stdio.h>
++
++#include "scratch-logging.h"
++//#include "experiment.h"
++
++NS_LOG_COMPONENT_DEFINE("TcpErrorModelTest");
++
++using namespace std;
++using namespace ns3;
++
++std::string ConvertMacToString(Mac48Address mac);
++std::string getcwd();
++
++enum ChannelMode_t {
++ HIDDEN_MARKOV_ERROR_MODEL,
++ BURSTY_ERROR_AUTO_REGRESSIVE_MODEL,
++ NIST_ERROR_RATE_MODEL
++};
++
++enum TransportProtocol_t {
++ TCP_PROTOCOL,
++ UDP_PROTOCOL
++};
++
++class Experiment {
++public:
++ Experiment ();
++ ~Experiment ();
++
++ u_int32_t GetPacketCounter() const;
++ void SetPacketCounter(u_int32_t packetCounter);
++ u_int32_t GetPktsCorrect() const;
++ void SetPktsCorrect(u_int32_t pktsCorrect);
++ u_int32_t GetPktsReceived() const;
++ void SetPktsReceived(u_int32_t pktsReceived);
++ u_int32_t GetPktsTransmitted () const;
++
++ void SetTransportProtocol (TransportProtocol_t protocol);
++ TransportProtocol_t GetTransportProtocol () const;
++
++ Ptr<Socket> SetupPacketReceive(Ptr<Node> node);
++ void GenerateTraffic(Ptr<Socket> socket, uint32_t pktSize,
++ uint32_t pktCount, Time pktInterval);
++ //Tracing
++ void PhyRxOkTrace (std::string context, Ptr<const Packet> packet, double snr, WifiMode mode, enum WifiPreamble preamble);
++ void PhyRxErrorTrace (std::string context, Ptr<const Packet> packet, double snr);
++
++ //BEAR Callback integration
++ void HmmRxTrace (Ptr<Packet> packet, Time timestamp, bool error, u_int16_t state);
++ void BearRxTrace (Ptr<Packet> packet, Time timestamp, bool error, double propagation, double slowFading, double fastFading);
++
++ //Upper Layer parser
++ packetInfo_t ParsePacket (Ptr<const Packet> packet);
++
++ void OpenTraceFile (string fileName, ChannelMode_t channelModel);
++ void CloseTraceFile ();
++
++ void TraceToFile (string line);
++
++
++private:
++ fstream m_file;
++
++ void ReceivePacket(Ptr<Socket> socket);
++ void SetPosition(Ptr<Node> node, Vector position);
++ Vector GetPosition(Ptr<Node> node);
++ u_int32_t m_pktsReceived;
++ u_int32_t m_pktsCorrect;
++ u_int32_t m_packetCounter;
++
++ u_int32_t m_packetsTransmitted;
++
++ TransportProtocol_t m_protocol;
++};
++
++
++Experiment::Experiment(): m_pktsReceived (0),
++ m_pktsCorrect (0),
++ m_packetCounter (0),
++ m_packetsTransmitted (0)
++{}
++
++Experiment::~Experiment()
++{}
++
++
++void Experiment::SetPosition(Ptr<Node> node, Vector position) {
++ Ptr<MobilityModel> mobility = node->GetObject<MobilityModel>();
++ mobility->SetPosition(position);
++}
++Vector Experiment::GetPosition(Ptr<Node> node) {
++ Ptr<MobilityModel> mobility = node->GetObject<MobilityModel>();
++ return mobility->GetPosition();
++}
++void Experiment::ReceivePacket(Ptr<Socket> socket) {
++ Ptr<Packet> packet;
++ while (packet = socket->Recv()) {
++ // m_pktsReceived++;
++ }
++}
++
++Ptr<Socket> Experiment::SetupPacketReceive(Ptr<Node> node) {
++
++ TypeId tid = TypeId::LookupByName("ns3::TcpSocketFactory");
++
++ if (m_protocol == UDP_PROTOCOL)
++ tid = TypeId::LookupByName("ns3::UdpSocketFactory");
++ Ptr<Socket> sink = Socket::CreateSocket(node, tid);
++ InetSocketAddress local = InetSocketAddress(Ipv4Address::GetAny(), 80);
++ sink->Bind(local);
++ sink->SetRecvCallback(MakeCallback(&Experiment::ReceivePacket, this));
++ return sink;
++}
++void Experiment::GenerateTraffic(Ptr<Socket> socket, uint32_t pktSize,
++ uint32_t pktCount, Time pktInterval) {
++ m_packetCounter --;
++ if (m_packetCounter > 0) {
++ socket->Send(Create<Packet>(pktSize));
++ Simulator::Schedule(pktInterval, &Experiment::GenerateTraffic, this,
++ socket, pktSize, pktCount - 1, pktInterval);
++ } else {
++ socket->Close();
++ }
++ m_packetsTransmitted ++;
++}
++
++u_int32_t Experiment::GetPacketCounter () const
++{
++ return m_packetCounter;
++}
++
++void Experiment::SetPacketCounter (u_int32_t packetCounter)
++{
++ this->m_packetCounter = packetCounter;
++}
++
++u_int32_t Experiment::GetPktsCorrect () const
++{
++ return m_pktsCorrect;
++}
++
++void Experiment::SetPktsCorrect (u_int32_t pktsCorrect)
++{
++ this->m_pktsCorrect = pktsCorrect;
++}
++
++u_int32_t Experiment::GetPktsReceived () const
++{
++ return m_pktsReceived;
++}
++
++void Experiment::SetPktsReceived(u_int32_t pktsReceived)
++{
++ this->m_pktsReceived = pktsReceived;
++}
++
++u_int32_t Experiment::GetPktsTransmitted() const
++{
++ return m_packetsTransmitted;
++}
++
++void Experiment::SetTransportProtocol(TransportProtocol_t protocol)
++{
++ m_protocol = protocol;
++}
++
++TransportProtocol_t Experiment::GetTransportProtocol () const
++{
++ return m_protocol;
++}
++
++//// Trace data frames and their corresponding ACKs
++
++void Experiment::PhyRxOkTrace(std::string context, Ptr<const Packet> packet, double snr, WifiMode mode, enum WifiPreamble preamble)
++{
++
++ ///////////////////////////////////////////////////////
++ NS_LOG_FUNCTION_NOARGS();
++ WifiMacHeader hdr;
++ packetInfo_t packetInfo;
++ char line [255];
++ bool dataOrAck;
++
++ //Ip addresses variables needed for Ipv4Address to String conversion
++ u_int8_t source [4];
++ u_int8_t destination [4];
++ char sourceChar [32];
++ char destChar [32];
++
++ packet->PeekHeader (hdr); //Don't forget to uncomment
++ packetInfo = ParsePacket(packet);
++
++ switch (packetInfo.type)
++ {
++ case TCP_DATA:
++ if (m_protocol == TCP_PROTOCOL)
++ {
++ m_pktsCorrect ++;
++ m_pktsReceived ++;
++
++ //Get the MAC and IP Addresses
++ packetInfo.ipv4Hdr.GetSource().Serialize(source); //Get a string from Ipv4Address
++ packetInfo.ipv4Hdr.GetDestination().Serialize(destination);
++ sprintf(sourceChar, "%d.%d.%d.%d", source[0], source[1], source[2], source[3]);
++ sprintf(destChar, "%d.%d.%d.%d", destination[0], destination[1], destination[2], destination[3]);
++
++ sprintf (line, "%16f %16d %20s %20s %16d %16d %16d %16d %16d %16f", \
++ Simulator::Now().GetSeconds(), true, sourceChar, \
++ destChar, packetInfo.wifiHdr.IsRetry(), \
++ packetInfo.payloadLength, \
++ packetInfo.wifiHdr.GetSequenceNumber(), \
++ packetInfo.tcpHdr.GetSequenceNumber().GetValue(), \
++ packetInfo.tcpHdr.GetAckNumber().GetValue(), \
++ snr);
++ TraceToFile(line);
++ }
++ break;
++ case UDP_DATA:
++ if (m_protocol == UDP_PROTOCOL)
++ {
++ //Distinguish between data or ACK
++ if (hdr.IsData())
++ dataOrAck = false;
++ else if (hdr.IsAck())
++ dataOrAck = true;
++
++ sprintf(line, "%10f %10d %20s %20s %10s %8d %8d %10f", \
++ Simulator::Now().GetSeconds(), \
++ true, \
++ ConvertMacToString(hdr.GetAddr2()).c_str(), \
++ ConvertMacToString(hdr.GetAddr1()).c_str(), \
++ dataOrAck ? "ACK" : "DATA", \
++ packet->GetSize(), \
++ hdr.GetSequenceNumber(), \
++ snr);
++ m_pktsCorrect ++;
++ m_pktsReceived ++;
++
++ TraceToFile(line);
++ }
++ break;
++ default:
++ NS_LOG_ERROR("Unknown packet type --> " << packetInfo.type);
++ break;
++ }
++
++
++ ////////////////////////////////////
++
++}
++
++void Experiment::PhyRxErrorTrace (std::string context, Ptr<const Packet> packet, double snr)
++{
++ ///////////////////////////////////////////////////////
++ NS_LOG_FUNCTION_NOARGS();
++ WifiMacHeader hdr;
++ packetInfo_t packetInfo;
++ char line [255];
++ bool dataOrAck;
++
++ //Ip addresses variables needed for Ipv4Address to String conversion
++ u_int8_t source [4];
++ u_int8_t destination [4];
++ char sourceChar [32];
++ char destChar [32];
++
++ packet->PeekHeader (hdr); //Don't forget to uncomment
++ packetInfo = ParsePacket(packet);
++
++ switch (packetInfo.type)
++ {
++ case TCP_DATA:
++ if (m_protocol == TCP_PROTOCOL)
++ {
++ m_pktsReceived ++;
++
++ //Get the MAC and IP Addresses
++ packetInfo.ipv4Hdr.GetSource().Serialize(source); //Get a string from Ipv4Address
++ packetInfo.ipv4Hdr.GetDestination().Serialize(destination);
++ sprintf(sourceChar, "%d.%d.%d.%d", source[0], source[1], source[2], source[3]);
++ sprintf(destChar, "%d.%d.%d.%d", destination[0], destination[1], destination[2], destination[3]);
++
++ sprintf (line, "%16f %16d %20s %20s %16d %16d %16d %16d %16d %16f", \
++ Simulator::Now().GetSeconds(), false, sourceChar, \
++ destChar, packetInfo.wifiHdr.IsRetry(), \
++ packetInfo.payloadLength, \
++ packetInfo.wifiHdr.GetSequenceNumber(), \
++ packetInfo.tcpHdr.GetSequenceNumber().GetValue(), \
++ packetInfo.tcpHdr.GetAckNumber().GetValue(), \
++ snr);
++ TraceToFile(line);
++ }
++
++ break;
++ case UDP_DATA:
++ if (m_protocol == UDP_PROTOCOL)
++ {
++ //Distinguish between data or ACK
++ if (hdr.IsData())
++ dataOrAck = false;
++ else if (hdr.IsAck())
++ dataOrAck = true;
++
++ sprintf(line, "%10f %10d %20s %20s %10s %8d %8d %10f", \
++ Simulator::Now().GetSeconds(), \
++ false, \
++ ConvertMacToString(hdr.GetAddr2()).c_str(), \
++ ConvertMacToString(hdr.GetAddr1()).c_str(), \
++ dataOrAck ? "ACK" : "DATA", \
++ packet->GetSize(), \
++ hdr.GetSequenceNumber(), \
++ snr);
++ m_pktsReceived ++;
++ TraceToFile(line);
++
++ }
++ break;
++ default:
++ NS_LOG_ERROR("Unknown packet type --> " << packetInfo.type);
++ break;
++ }
++
++
++ ////////////////////////////////////
++
++}
++
++packetInfo_t Experiment::ParsePacket (Ptr<const Packet> packet)
++{
++ NS_LOG_FUNCTION(packet);
++
++ packetInfo_t packetInfo;
++ Ptr<Packet> pktCopy = packet->Copy();
++
++ pktCopy->RemoveHeader(packetInfo.wifiHdr);
++
++ if (packetInfo.wifiHdr.IsData())
++ {
++ pktCopy->RemoveHeader(packetInfo.llcHdr);
++ switch (packetInfo.llcHdr.GetType())
++ {
++ case 0x0806: //ARP
++ packetInfo.type = ARP_PACKET;
++ break;
++ case 0x0800: //IP packet
++ pktCopy->RemoveHeader(packetInfo.ipv4Hdr);
++ switch (packetInfo.ipv4Hdr.GetProtocol())
++ {
++ case 6: //TCP
++ pktCopy->RemoveHeader(packetInfo.tcpHdr);
++ packetInfo.type = TCP_DATA;
++
++ break;
++ case 17: //UDP
++ pktCopy->RemoveHeader(packetInfo.udpHdr);
++ packetInfo.type = UDP_DATA;
++ break;
++ default:
++ NS_LOG_ERROR ("Protocol not implemented yet (IP) --> " << packetInfo.llcHdr.GetType());
++ break;
++ }
++ break;
++ default:
++ NS_LOG_ERROR ("Protocol not implemented yet (LLC) --> " << packetInfo.llcHdr.GetType());
++ break;
++ }
++ }
++ else if (packetInfo.wifiHdr.IsAck())
++ {
++ packetInfo.type = IEEE_80211_ACK;
++ }
++ else // 802.11 Control/Management frame
++ {
++ packetInfo.type = IEEE_80211_NODATA;
++ }
++
++ packetInfo.payloadLength = pktCopy->GetSize() - 4; //Last four bytes are used for tagging
++
++ return packetInfo;
++}
++
++void Experiment::BearRxTrace(Ptr<Packet> packet, Time timestamp, bool error, double propagation, double slowFading, double fastFading)
++{
++ NS_LOG_FUNCTION_NOARGS();
++ WifiMacHeader hdr;
++ packetInfo_t packetInfo;
++ char line [255];
++ bool dataOrAck; //Value used for UDP tracing
++
++ //Ip addresses variables needed for Ipv4Address to String conversion
++ u_int8_t source [4];
++ u_int8_t destination [4];
++ char sourceChar [32];
++ char destChar [32];
++
++ packet->PeekHeader (hdr); //Don't forget to uncomment
++ packetInfo = ParsePacket(packet);
++
++ switch (packetInfo.type)
++ {
++
++ case TCP_DATA:
++ if (m_protocol == TCP_PROTOCOL)
++ {
++ if (error == 0)
++ {
++ m_pktsCorrect ++;
++ m_pktsReceived ++;
++ }
++ else
++ {
++ m_pktsReceived ++;
++ }
++
++ //Get the MAC and IP Addresses
++ packetInfo.ipv4Hdr.GetSource().Serialize(source); //Get a string from Ipv4Address
++ packetInfo.ipv4Hdr.GetDestination().Serialize(destination);
++ sprintf(sourceChar, "%d.%d.%d.%d", source[0], source[1], source[2], source[3]);
++ sprintf(destChar, "%d.%d.%d.%d", destination[0], destination[1], destination[2], destination[3]);
++
++ sprintf (line, "%16f %16d %20s %20s %16d %16d %16d %16d %16d %16f", \
++ Simulator::Now().GetSeconds(), !error, sourceChar, \
++ destChar, packetInfo.wifiHdr.IsRetry(), \
++ packetInfo.payloadLength, \
++ packetInfo.wifiHdr.GetSequenceNumber(), \
++ packetInfo.tcpHdr.GetSequenceNumber().GetValue(), \
++ packetInfo.tcpHdr.GetAckNumber().GetValue(), \
++ propagation + slowFading + fastFading);
++
++ TraceToFile(line);
++ }
++ break;
++ case UDP_DATA:
++ if (m_protocol == UDP_PROTOCOL)
++ {
++ if (error == 0)
++ {
++ m_pktsCorrect ++;
++ m_pktsReceived ++;
++ }
++ else
++ {
++ m_pktsReceived ++;
++ }
++ //Distinguish between data or ACK
++ if (hdr.IsData())
++ dataOrAck = false;
++ else if (hdr.IsAck()) //
++ dataOrAck = true;
++
++ sprintf(line, "%10f %10d %20s %20s %10s %8d %8d %12f %12f %12f", \
++ timestamp.GetSeconds(), \
++ !error, \
++ ConvertMacToString(hdr.GetAddr2()).c_str(), \
++ ConvertMacToString(hdr.GetAddr1()).c_str(), \
++ dataOrAck ? "ACK" : "DATA", \
++ packet->GetSize(), \
++ hdr.GetSequenceNumber(), \
++ propagation, \
++ slowFading, \
++ fastFading \
++ );
++ TraceToFile(line);
++ }
++ break;
++ default:
++ NS_LOG_ERROR("Unknown packet type --> " << packetInfo.type);
++ break;
++ }
++
++
++
++}
++
++void Experiment::HmmRxTrace(Ptr<Packet> packet, Time timestamp, bool error, u_int16_t state)
++{
++ NS_LOG_FUNCTION_NOARGS();
++ WifiMacHeader hdr;
++ packetInfo_t packetInfo;
++ char line [255];
++ bool dataOrAck; //Value used for UDP tracing
++
++ //Ip addresses variables needed for Ipv4Address to String conversion
++ u_int8_t source [4];
++ u_int8_t destination [4];
++ char sourceChar [32];
++ char destChar [32];
++
++ packet->PeekHeader (hdr); //Don't forget to uncomment
++ packetInfo = ParsePacket(packet);
++
++ switch (packetInfo.type)
++ {
++ case TCP_DATA:
++ if (m_protocol == TCP_PROTOCOL)
++ {
++ if (error == 0)
++ {
++ m_pktsCorrect ++;
++ m_pktsReceived ++;
++ }
++ else
++ {
++ m_pktsReceived ++;
++ }
++
++ //Get the MAC and IP Addresses
++ packetInfo.ipv4Hdr.GetSource().Serialize(source); //Get a string from Ipv4Address
++ packetInfo.ipv4Hdr.GetDestination().Serialize(destination);
++ sprintf(sourceChar, "%d.%d.%d.%d", source[0], source[1], source[2], source[3]);
++ sprintf(destChar, "%d.%d.%d.%d", destination[0], destination[1], destination[2], destination[3]);
++
++ sprintf (line, "%16f %16d %20s %20s %16d %16d %16d %16d %16d %16d", \
++ Simulator::Now().GetSeconds(), !error, sourceChar, \
++ destChar, packetInfo.wifiHdr.IsRetry(), \
++ packetInfo.payloadLength, \
++ packetInfo.wifiHdr.GetSequenceNumber(), \
++ packetInfo.tcpHdr.GetSequenceNumber().GetValue(), \
++ packetInfo.tcpHdr.GetAckNumber().GetValue(), \
++ state);
++ TraceToFile(line);
++ }
++ break;
++ case UDP_DATA:
++ if (m_protocol == UDP_PROTOCOL)
++ {
++ if (error == 0)
++ {
++ m_pktsCorrect ++;
++ m_pktsReceived ++;
++ }
++ else
++ {
++ m_pktsReceived ++;
++ }
++ //Distinguish between data or ACK
++ if (hdr.IsData())
++ dataOrAck = false;
++ else if (hdr.IsAck())
++ dataOrAck = true;
++ sprintf(line, "%10f %10d %20s %20s %10s %8d %8d %8d", \
++ timestamp.GetSeconds(), \
++ !error, \
++ ConvertMacToString(hdr.GetAddr2()).c_str(), \
++ ConvertMacToString(hdr.GetAddr1()).c_str(), \
++ dataOrAck ? "ACK" : "DATA", \
++ packet->GetSize(), \
++ hdr.GetSequenceNumber(), \
++ state);
++ TraceToFile(line);
++ }
++ break;
++ default:
++ NS_LOG_ERROR("Unknown packet type --> " << packetInfo.type);
++ break;
++ }
++
++
++}
++
++
++void Experiment::OpenTraceFile (string fileName, ChannelMode_t channelModel = BURSTY_ERROR_AUTO_REGRESSIVE_MODEL)
++{
++ string path = getcwd() + "/traces/" + fileName;
++ char title [255];
++ string lastField; //Channel Model Dependent field (trace field)
++ NS_LOG_DEBUG(path);
++ m_file.open(path.c_str(), fstream::out);
++
++ //Split into TCP and UDP simulations
++ switch (m_protocol)
++ {
++ case TCP_PROTOCOL:
++ if (channelModel == HIDDEN_MARKOV_ERROR_MODEL)
++ lastField = "State";
++ else
++ lastField = "SNR (dB)";
++
++ sprintf (title, "%16s %16s %20s %20s %16s %16s %16s %16s %16s %16s", \
++ "Time", "CRC", "Source", "Destination", "802.11 RETX", \
++ "Length","SeqNum", "TCP SeqNum", "TCP AckNum", \
++ lastField.c_str());
++ break;
++
++ case UDP_PROTOCOL:
++ switch (channelModel)
++ {
++ case BURSTY_ERROR_AUTO_REGRESSIVE_MODEL:
++ sprintf(title, "%10s %10s %20s %20s %10s %8s %8s %12s %12s %12s", \
++ "Time", "CRC", "SRC", "DST", "DATA/ACK", "Length", "SeqNum", \
++ "Propagation","Slow Fading", "Fast Fading");
++ break;
++ case HIDDEN_MARKOV_ERROR_MODEL:
++ sprintf(title, "%10s %10s %20s %20s %10s %8s %8s %8s", \
++ "Time", "CRC", "SRC", "DST", "DATA/ACK", "Length", "SeqNum", \
++ "State");
++ break;
++ case NIST_ERROR_RATE_MODEL:
++ sprintf(title, "%10s %10s %20s %20s %10s %8s %8s %10s", \
++ "Time", "CRC", "SRC", "DST", "DATA/ACK", "Length", "SeqNum", "SNR (dB)");
++ break;
++ }
++
++ break;
++ default:
++ NS_LOG_ERROR("Cannot open a trace file because transport protocol is not correct");
++ }
++
++ m_file << title << endl;
++}
++
++void Experiment::CloseTraceFile()
++{
++ NS_LOG_FUNCTION_NOARGS();
++ if (m_file.is_open())
++ m_file.close();
++ else
++ NS_LOG_ERROR("Open file not found");
++}
++
++void Experiment::TraceToFile(string line)
++{
++ NS_LOG_DEBUG(line);
++ m_file << line << endl;
++}
++
++
++
++std::string getcwd() {
++ char buf[FILENAME_MAX];
++ char* succ = getcwd(buf, FILENAME_MAX);
++ if (succ)
++ return std::string(succ);
++ return ""; // raise a flag, throw an exception, ...
++}
++
++std::string ConvertMacToString(Mac48Address mac)
++{
++ NS_LOG_FUNCTION(mac);
++ u_int8_t temp[6];
++ char result[24];
++ mac.CopyTo(temp);
++
++ sprintf(result,"%02X:%02X:%02X:%02X:%02X:%02X", temp[0], temp[1], temp[2], temp[3], temp[4], temp[5] );
++
++ return std::string(result);
++}
++
++////////////////////////////////////////////////////////////////////////////////////
++/////////////////////////////// MAIN ///////////////////////////////////////
++////////////////////////////////////////////////////////////////////////////////////
++
++int main (int argc, char *argv[])
++{
++ //Logging
++ EnableLogging();
++
++
++ //Variable initialization
++ // Hidden Markov Model Coefficient file
++ string transitionFileHmm = "HMM_4states/HMM_03_TR_1.txt" ;
++ string emissionFileHmm = "HMM_4states/HMM_03_EMIS_1.txt" ;
++
++ string hmmChannel = "Good";
++
++ //BEAR model Coefficients file
++ string arModelCoefficientsFile = "coefsAR.cfg";
++
++ //Parameter to switch among the different channel models
++ string channelModel = "Bear";
++
++ //Transport protocol
++ string transportProtocol = "TCP";
++ TransportProtocol_t protocol;
++
++ //Random variable generation (Random seed)
++ SeedManager::SetSeed(1);
++
++ //Trace file name
++ u_int16_t scenario = 1; //Scenario number --> Used for trace file naming (see documentation to get the model particular parameters)
++ string outputChannelTypeFileName;
++ string outputFileName = "TCP";
++ ChannelMode_t enumChannelModel;
++
++ //Simulation parameters
++ float distance = 20; //Distance between nodes
++
++
++ u_int32_t numPackets = 10000;
++ u_int32_t packetLength = 1460;
++ uint64_t interPacketTime = 1000000;
++ u_int32_t run = 1;
++ u_int32_t runCounter;
++ u_int32_t runOffset = 0;
++
++ //Command parsing
++ CommandLine cmd;
++
++ //Error model parameters
++ cmd.AddValue ("ChannelModel", "Channel model to insert into the nodes", channelModel );
++ //BEAR model
++ cmd.AddValue ("ArModelCoefficientFile", "File name which contains the AR model coefficients", arModelCoefficientsFile);
++
++ //Hidden Markov Error Model parameters
++ cmd.AddValue ("HmmChannel", "Type of HMM channel: Good, Average or bad", hmmChannel);
++ cmd.AddValue ("TransitionFileHmm", "HMM transition file name (from configs file)", transitionFileHmm);
++ cmd.AddValue ("EmissionFileHmm", "HMM emission file name (from configs file)", emissionFileHmm);
++
++ //Simulation-related parameters
++ cmd.AddValue ("Run", "Number of simulations to run", run);
++ cmd.AddValue ("RunOffset", "Offset introduced at the SeedManager and the file naming counter", runOffset);
++ cmd.AddValue ("Scenario", "Type of analysis (channel model coefficients and conditions)", scenario);
++ cmd.AddValue ("NumPackets", "Total number of packets sent in the simulation", numPackets);
++ cmd.AddValue ("PacketLength", "Number of bytes in each packet", packetLength);
++ cmd.AddValue ("InterPacketTime", "Time (in microseconds) between two consecutive packets (application level)", interPacketTime);
++ cmd.AddValue ("OutputChannelTypeFileName", "File name to store the output trace", outputChannelTypeFileName);
++ cmd.AddValue ("Distance", "Distance (in meters) between nodes", distance);
++ cmd.AddValue ("TransportProtocol", "TCP or UDP" , transportProtocol);
++
++ cmd.Parse (argc, argv);
++
++ //Default attributes initialization
++ //Wifi attributes
++ Config::SetDefault ("ns3::WifiRemoteStationManager::NonUnicastMode",StringValue ("DsssRate2Mbps"));
++ // Config::SetDefault ("ns3::WifiRemoteStationManager::RtsCtsThreshold", StringValue ("2200")); //Disable RTS/CTS transmission
++ Config::SetDefault ("ns3::WifiRemoteStationManager::FragmentationThreshold", StringValue ("2200")); //Disable fragmentation
++ Config::SetDefault ("ns3::ConstantRateWifiManager::DataMode", StringValue ("DsssRate11Mbps"));
++ Config::SetDefault ("ns3::ConstantRateWifiManager::ControlMode", StringValue ("DsssRate11Mbps")); //WiFi Buffer Size
++ Config::SetDefault ("ns3::WifiMacQueue::MaxPacketNumber", UintegerValue (900000000));
++ Config::SetDefault ("ns3::WifiRemoteStationManager::MaxSlrc", UintegerValue (4));
++ Config::SetDefault ("ns3::WifiNetDevice::Mtu", UintegerValue (1512));
++
++ //HiddenErrorMarkov model attributes
++ Config::SetDefault ("ns3::HiddenMarkovErrorModel::TransitionMatrixFileName", StringValue (transitionFileHmm));
++ Config::SetDefault ("ns3::HiddenMarkovErrorModel::EmissionMatrixFileName", StringValue (emissionFileHmm));
++
++ GlobalValue::Bind ("ChecksumEnabled", BooleanValue (true));
++
++ if (transportProtocol == "TCP")
++ protocol = TCP_PROTOCOL;
++ else if (transportProtocol == "UDP")
++ protocol = UDP_PROTOCOL;
++ else
++ NS_LOG_ERROR("Transport Protocol undefined");
++
++ if (channelModel == "SWEEP")
++ distance = 72;
++
++ if ((scenario < 1) || (scenario > 6))
++ {
++ NS_LOG_ERROR("HMM configuration et not supported");
++ return -1;
++ }
++
++ /////////-----------------------MAIN LOOP-----------------------/////////
++
++ for (runCounter = 1; runCounter <= run; runCounter ++)
++ {
++ Experiment exp_;
++ exp_.SetTransportProtocol(protocol);
++ //Create the nodes
++ NodeContainer wifiNodes;
++ wifiNodes.Create(2);
++
++ //Prepare the Wifi NetDevices
++ YansWifiPhyHelper wifiPhy = YansWifiPhyHelper::Default(); //Don't remove (Necessary at YansWifiPhy::EndReceive)
++ YansWifiChannelHelper wifiChannel;
++
++ //Change the seed for each simulation run
++ SeedManager::SetRun(runCounter + runOffset);
++
++ //Channel model initialization
++ // BEAR model = ArModel (Propagation Loss Model) + BurstyErrorModel (Error Model)
++
++ if (channelModel == "Bear")
++ {
++ outputChannelTypeFileName = "Bear";
++ enumChannelModel = BURSTY_ERROR_AUTO_REGRESSIVE_MODEL;
++
++ //Set the propagation delay model
++ wifiChannel.SetPropagationDelay("ns3::ConstantSpeedPropagationDelayModel");
++ //Set the propagation loss model
++ wifiChannel.AddPropagationLoss("ns3::ArModel");
++ Ptr<ArModel> arBaseModel = CreateObject<ArModel> ();
++ wifiChannel.AddPropagationLoss(arBaseModel);
++ //Set the error model
++ Ptr<BurstyErrorModel> errorModel = CreateObject<BurstyErrorModel> (); //Manual BEAR model instance
++ wifiPhy.SetErrorModel(errorModel);
++ arBaseModel->SetErrorModel(errorModel); // Bursty error model is closely linked to the AR propagation loss model
++
++ //Callback
++ errorModel->SetRxCallback (MakeCallback (&Experiment::BearRxTrace, &exp_));
++ }
++
++ // HiddenMarkovErrorModel --> Does not take into account the SNR, hence the propagation loss model is not relevant
++ else if (channelModel == "HMM")
++ {
++ //Prepare the coefficients files according to the channel type
++ if (hmmChannel == "Good")
++ {
++ sprintf((char *) transitionFileHmm.c_str(), "HMM_4states/HMM_12_TR_%1d.txt", scenario);
++ sprintf((char *) emissionFileHmm.c_str(), "HMM_4states/HMM_12_EMIS_%1d.txt", scenario);
++
++ }
++ else if (hmmChannel == "Average")
++ {
++ sprintf((char *) transitionFileHmm.c_str(), "HMM_4states/HMM_09_TR_%1d.txt", scenario);
++ sprintf((char *) emissionFileHmm.c_str(), "HMM_4states/HMM_09_EMIS_%1d.txt", scenario);
++ }
++ else if (hmmChannel == "Bad")
++ {
++ sprintf((char *) transitionFileHmm.c_str(), "HMM_4states/HMM_05_TR_%1d.txt", scenario);
++ sprintf((char *) emissionFileHmm.c_str(), "HMM_4states/HMM_05_EMIS_%1d.txt", scenario);
++ }
++ else
++ {
++ NS_LOG_UNCOND ("HMM Channel Model not valid... Exiting");
++ return -1;
++ }
++
++ outputChannelTypeFileName = "HMM_" + hmmChannel;
++ enumChannelModel = HIDDEN_MARKOV_ERROR_MODEL;
++
++ //Set the propagation delay model
++ wifiChannel.SetPropagationDelay ("ns3::ConstantSpeedPropagationDelayModel");
++ //Set the propagation loss model
++ wifiChannel.AddPropagationLoss ("ns3::SimplePropagationLossModel", "MaxDistance", DoubleValue(200.0));
++
++ //Set the error model
++ Ptr<HiddenMarkovErrorModel> errorModel = CreateObject<HiddenMarkovErrorModel> ();
++ errorModel->SetTransitionMatrixFileName(transitionFileHmm);
++ errorModel->SetEmissionMatrixFileName(emissionFileHmm);
++ errorModel->GetCoefficients();
++
++ wifiPhy.SetErrorModel(errorModel);
++
++ //Callback
++ errorModel->SetRxCallback(MakeCallback(&Experiment::HmmRxTrace, &exp_));
++ }
++
++ //NS-3 Legacy error decision model --> LogDistancePropagationLossModel + NistErrorRateModel
++ else if (channelModel == "NIST")
++ {
++ outputChannelTypeFileName = "NIST";
++ enumChannelModel = NIST_ERROR_RATE_MODEL;
++// distance = 89.6; //Distance value which FER yields approximately 0.5
++ distance = 80; //FER ~ 0.16
++
++ //Set the propagation delay model
++ wifiChannel.SetPropagationDelay("ns3::ConstantSpeedPropagationDelayModel");
++ //Set the propagation loss model
++ wifiChannel.AddPropagationLoss("ns3::LogDistancePropagationLossModel");
++ wifiChannel.AddPropagationLoss("ns3::RandomPropagationLossModel", "Variable", RandomVariableValue (NormalVariable (0.0, 2.8)));
++
++ wifiPhy.SetErrorRateModel("ns3::YansErrorRateModel");
++ }
++
++ //Make a sweep in order to fully characterize the throughput vs FER curve shape in a memoryless channel
++ else if (channelModel == "SWEEP")
++ {
++ if ((int) runCounter % 5 == 0)
++ distance += 0.5 ;
++
++ outputChannelTypeFileName = "SWEEP";
++ enumChannelModel = NIST_ERROR_RATE_MODEL;
++ // distance = 89.6; //Distance value which FER yields approximately 0.5
++// distance = 80; //FER ~ 0.16
++
++ //Set the propagation delay model
++ wifiChannel.SetPropagationDelay("ns3::ConstantSpeedPropagationDelayModel");
++ //Set the propagation loss model
++ wifiChannel.AddPropagationLoss("ns3::LogDistancePropagationLossModel");
++// wifiChannel.AddPropagationLoss("ns3::RandomPropagationLossModel", "Variable", RandomVariableValue (NormalVariable (0.0, 2.8)));
++ wifiPhy.SetErrorRateModel("ns3::YansErrorRateModel");
++
++ }
++
++ wifiPhy.SetChannel (wifiChannel.Create());
++ WifiHelper wifi = WifiHelper::Default();
++ wifi.SetStandard (WIFI_PHY_STANDARD_80211b);
++ wifi.SetRemoteStationManager ("ns3::ConstantRateWifiManager");
++ NqosWifiMacHelper wifiMac = NqosWifiMacHelper::Default();
++
++ NetDeviceContainer wifiDevices = wifi.Install(wifiPhy, wifiMac, wifiNodes);
++
++ //Node mobility configuration
++ MobilityHelper mobility;
++ Ptr<ListPositionAllocator> positionAlloc = CreateObject<ListPositionAllocator>();
++ positionAlloc->Add(Vector(0.0, 0.0, 0.0));
++ positionAlloc->Add(Vector(distance, 0.0, 0.0));
++ mobility.SetPositionAllocator(positionAlloc);
++ mobility.SetMobilityModel("ns3::ConstantPositionMobilityModel");
++ mobility.Install (wifiNodes);
++
++ //Set the upper layers (default configuration)
++ InternetStackHelper internet;
++
++ // Sysctl option configuration
++ if (transportProtocol == "TCP")
++ {
++ internet.SetTcp ("ns3::NscTcpL4Protocol","Library",StringValue ("liblinux2.6.26.so"));
++ Config::Set ("/NodeList/3/$ns3::Ns3NscStack<linux2.6.26>/net.inet.tcp.mssdflt", StringValue ("1460"));
++ Config::SetDefault ("ns3::TcpSocket::SegmentSize", UintegerValue (1460));
++ // Config::Set ("/NodeList/3/$ns3::Ns3NscStack<linux2.6.26>/net.ipv4.tcp_sack", StringValue ("0"));
++ // Config::Set ("/NodeList/3/$ns3::Ns3NscStack<linux2.6.26>/net.ipv4.tcp_timestamps", StringValue ("0"));
++ // Config::Set ("/NodeList/3/$ns3::Ns3NscStack<linux2.6.26>/net.ipv4.tcp_window_scaling", StringValue ("0"));
++
++ //TCP parameter set
++ Config::SetDefault ("ns3::TcpSocket::SegmentSize", UintegerValue (1460));
++ Config::SetDefault ("ns3::TcpSocket::RcvBufSize", UintegerValue (90000000));
++ Config::SetDefault ("ns3::TcpSocket::SndBufSize", UintegerValue (90000000));
++
++ outputFileName= "TCP";
++
++ // Config::SetDefault("ns3::TcpL4Protocol::SocketType", StringValue("ns3::TcpNewReno"));
++ // Config::SetDefault("ns3::TcpL4Protocol::SocketType", StringValue("ns3::TcpReno"));
++ }
++ else if (transportProtocol == "UDP")
++ {
++ outputFileName = "UDP";
++ Config::SetDefault ("ns3::UdpSocket::RcvBufSize", UintegerValue (90000000));
++ }
++
++ internet.Install (wifiNodes);
++
++ //New TCP simulation model (Application changes)
++ //Define IP level
++ Ipv4AddressHelper ipv4;
++ NS_LOG_INFO("Assign IP Addresses.");
++ ipv4.SetBase("10.1.1.0", "255.255.255.0");
++ Ipv4InterfaceContainer ipInterfaceContainer = ipv4.Assign(wifiDevices);
++
++
++ uint16_t port = 50000; // Server Port
++
++ OnOffHelper onoff ("ns3::TcpSocketFactory", Address (InetSocketAddress (Ipv4Address ("10.1.1.1"), port))); //OnOffHelper instance
++
++ //If UDP-based simulation, establish UDP at the OnOffHelper object
++ if (transportProtocol == "UDP")
++ onoff.SetAttribute("Protocol", StringValue ("ns3::UdpSocketFactory"));
++
++ onoff.SetAttribute ("OnTime", RandomVariableValue (ConstantVariable (1)));
++ onoff.SetAttribute ("OffTime", RandomVariableValue (ConstantVariable (0)));
++ onoff.SetAttribute ("DataRate", StringValue ("11Mbps"));
++ onoff.SetAttribute ("PacketSize", UintegerValue (packetLength));
++ onoff.SetAttribute ("MaxBytes", UintegerValue (packetLength * numPackets));
++ // onoff.SetAttribute ("Tx", MakeTraceSourceAccessor (&OnOffApplication::m_txTrace));
++
++ ApplicationContainer app = onoff.Install (wifiNodes.Get(1)); //install the onoff aplication in the AP node
++ // Start the application
++ app.Start (Seconds (1.0));
++ app.Stop (Seconds (10000.0));
++
++ // Create a packet sink to receive these packets in the Station node
++ PacketSinkHelper sink ("ns3::TcpSocketFactory", Address (InetSocketAddress (Ipv4Address::GetAny (), port)));
++ //If UDP-based simulation, establish UDP at the OnOffHelper object
++ if (transportProtocol == "UDP")
++ sink.SetAttribute("Protocol", StringValue("ns3::UdpSocketFactory"));
++
++ app = sink.Install (wifiNodes.Get(0));
++ app.Start (Seconds (0.0));
++ app.Stop (Seconds (11000.0));
++
++ //End new simulation scheme
++ ////////////////////
++
++ //Tracing connectors
++ if (enumChannelModel == NIST_ERROR_RATE_MODEL) //Frame reception tracing for
++ {
++ Config::Connect ("/NodeList/*/DeviceList/*/Phy/State/RxOk", MakeCallback (&Experiment::PhyRxOkTrace, &exp_));
++ Config::Connect ("/NodeList/*/DeviceList/*/Phy/State/RxError", MakeCallback (&Experiment::PhyRxErrorTrace, &exp_));
++ }
++
++ //Connect to the error models
++ wifiPhy.EnablePcap (outputChannelTypeFileName, wifiNodes, true);
++ wifiPhy.EnableAscii("Prueba", wifiNodes);
++
++
++ //TCP trace file
++ char temp[128];
++ sprintf(temp,"%s_%s_%02d_%03d.tr", outputFileName.c_str(), outputChannelTypeFileName.c_str(), scenario, runCounter + runOffset);
++ exp_.OpenTraceFile(temp, enumChannelModel);
++
++ Simulator::Stop(Seconds(11010));
++
++ Simulator::Run();
++ Simulator::Destroy();
++
++ //Print statistics
++ NS_LOG_UNCOND("Run " << runCounter + runOffset << " FER = " << exp_.GetPktsReceived() - exp_.GetPktsCorrect() << "/" \
++ << exp_.GetPktsReceived() << " = " << \
++ ((double) exp_.GetPktsReceived() - (double) exp_.GetPktsCorrect())/(double)exp_.GetPktsReceived());
++ exp_.CloseTraceFile();
++ }
++}
++
+diff -uprNB ns-3.13/scratch/scratch-logging.h b/scratch/scratch-logging.h
+--- ns-3.13/scratch/scratch-logging.h 1970-01-01 01:00:00.000000000 +0100
++++ b/scratch/scratch-logging.h 2012-04-16 11:50:12.000000000 +0200
+@@ -0,0 +1,88 @@
++/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
++/*
++ * Copyright (c) 2011 Universidad de Cantabria
++ *
++ * 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
++ *
++ * Author: David Gómez Fernández <dgomez@tlmat.unican.es>
++ * Ramón Agüero Calvo <ramon@tlmat.unican.es>
++ */
++
++#ifndef SCRATCH_LOGGING_H_
++#define SCRATCH_LOGGING_H_
++
++
++namespace ns3 {
++
++void EnableLogging () {
++// LOGGING --> Uncomment desired files to show log messages
++// -- Physical layer
++// LogComponentEnable("WifiPhy", LOG_ALL);
++// LogComponentEnable("YansWifiPhy",LOG_DEBUG);
++// LogComponentEnable("YansWifiChannel", LOG_DEBUG);
++// LogComponentEnable("YansWifiHelper", LOG_ALL);
++// LogComponentEnable("PropagationLossModel", LOG_DEBUG);
++// LogComponentEnable("WifiPhyStateHelper", LOG_LEVEL);
++// LogComponentEnable("HiddenMarkovErrorModel", LOG_LOGIC);
++// -- Link Level
++// LogComponentEnable("MacLow", LOG_FUNCTION);
++// LogComponentEnable("WifiMacQueue", LOG_FUNCTION);
++// LogComponentEnable("WifiMacQueue", LOG_ALL);
++// LogComponentEnable("DcaTxop", LOG_FUNCTION);
++// LogComponentEnable("DcfManager", LOG_FUNCTION);
++// LogComponentEnable("RegularWifiMac",LOG_FUNCTION);
++// LogComponentEnable("RegularWifiMac",LOG_ALL);
++// LogComponentEnable("StaWifiMac",LOG_FUNCTION);
++// LogComponentEnable("AdhocWifiMac",LOG_ALL);
++// LogComponentEnable("WifiNetDevice", LOG_ALL);
++// -- Network layer
++// LogComponentEnable("Ipv4L3Protocol", LOG_LOGIC);
++// -- Transport layer
++// LogComponentEnable("UdpSocket", LOG_ALL);
++// LogComponentEnable("UdpSocketImpl", LOG_ALL);
++// -- Propagation Loss Models
++// LogComponentEnable("PropagationLossModel", LOG_ALL);
++// -- Error Models
++// LogComponentEnable("ErrorModel", LOG_DEBUG);
++// LogComponentEnable("HiddenMarkovErrorModel", LOG_INFO);
++// LogComponentEnable("ArModel", LOG_ALL);
++// LogComponentEnable("ArModel", LOG_LOGIC);
++// -- Test unit
++// LogComponentEnable("Experiment", LOG_DEBUG);
++
++// -- Other levels
++// LogComponentEnable("Socket", LOG_ALL);
++// LogComponentEnable("PacketSocket", LOG_ALL);
++// LogComponentEnable("UdpSocketImpl", LOG_ALL);
++// LogComponentEnable("TcpSocketBase", LOG_ALL);
++// LogComponentEnable("TcpReno", LOG_ALL);
++// LogComponentEnable("TcpNewReno", LOG_ALL);
++// LogComponentEnable("UdpSocketImpl", LOG_LOGIC);
++
++// -- Routing
++// LogComponentEnable("Ipv4StaticRouting", LOG_ALL);
++
++// --Application
++// LogComponentEnable ("TcpSocket", LOG_ALL);
++// LogComponentEnable ("OnOffApplication", LOG_ALL);
++// LogComponentEnable ("PacketSink", LOG_ALL);
++// LogComponentEnable ("TcpL4Protocol", LOG_ALL);
++// LogComponentEnable ("UdpL4Protocol", LOG_ALL);
++// LogComponentEnable ("Ipv4L3Protocol", LOG_ALL);
++
++}
++
++
++} //namespace ns3
++#endif /* SCRATCH_LOGGING_H_ */
+diff -uprNB ns-3.13/scratch/wscript b/scratch/wscript
+--- ns-3.13/scratch/wscript 1970-01-01 01:00:00.000000000 +0100
++++ b/scratch/wscript 2012-04-17 09:07:35.000000000 +0200
+@@ -0,0 +1,12 @@
++## -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*-
++
++def build(bld):
++ env = bld.env_of_name('default')
++ if not env['ENABLE_EXAMPLES']:
++ return;
++
++ obj = bld.create_ns3_program('error-model-test', ['core', 'mobility', 'wifi', 'applications', 'config-store', 'tools', 'visualizer'])
++ obj.source = 'error-model-test.cc'
++
++
++
+Binary files ns-3.13/src/aodv/bindings/callbacks_list.pyc and b/src/aodv/bindings/callbacks_list.pyc differ
+Binary files ns-3.13/src/aodv/bindings/modulegen__gcc_LP64.pyc and b/src/aodv/bindings/modulegen__gcc_LP64.pyc differ
+Binary files ns-3.13/src/applications/bindings/callbacks_list.pyc and b/src/applications/bindings/callbacks_list.pyc differ
+Binary files ns-3.13/src/applications/bindings/modulegen_customizations.pyc and b/src/applications/bindings/modulegen_customizations.pyc differ
+Binary files ns-3.13/src/applications/bindings/modulegen__gcc_LP64.pyc and b/src/applications/bindings/modulegen__gcc_LP64.pyc differ
+diff -uprNB ns-3.13/src/ar-model/configs/coefsAR.cfg b/src/ar-model/configs/coefsAR.cfg
+--- ns-3.13/src/ar-model/configs/coefsAR.cfg 1970-01-01 01:00:00.000000000 +0100
++++ b/src/ar-model/configs/coefsAR.cfg 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,10 @@
++1 1.000000 -0.999648
++2 1.000000 -1.121964 0.122359
++3 1.000000 -1.106437 -0.020017 0.126898
++4 1.000000 -1.093542 -0.022050 0.014469 0.101614
++5 1.000000 -1.082369 -0.020460 0.012044 -0.018622 0.109951
++6 1.000000 -1.074329 -0.021821 0.012925 -0.020118 0.030797 0.073131
++7 1.000000 -1.068405 -0.019327 0.011296 -0.019072 0.029029 -0.013886 0.080996
++8 1.000000 -1.063919 -0.020096 0.012904 -0.020128 0.029655 -0.014956 0.021812 0.055395
++9 1.000000 -1.060767 -0.018855 0.012053 -0.018441 0.028510 -0.014222 0.020669 -0.005139 0.056897
++10 1.000000 -1.057755 -0.019127 0.013147 -0.019194 0.030019 -0.015198 0.021307 -0.006137 0.000750 0.052930
+diff -uprNB ns-3.13/src/ar-model/examples/error-model-test.cc b/src/ar-model/examples/error-model-test.cc
+--- ns-3.13/src/ar-model/examples/error-model-test.cc 1970-01-01 01:00:00.000000000 +0100
++++ b/src/ar-model/examples/error-model-test.cc 2012-04-12 10:29:47.000000000 +0200
+@@ -0,0 +1,1051 @@
++/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
++/*
++ * Copyright (c) 2011 Universidad de Cantabria
++ *
++ * 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
++ *
++ * Author: David Gómez Fernández <dgomez@tlmat.unican.es>
++ * Ramón Agüero Calvo <ramon@tlmat.unican.es>
++ */
++
++#include "ns3/core-module.h"
++#include "ns3/mobility-module.h"
++#include "ns3/applications-module.h"
++
++#include "ns3/wifi-helper.h"
++#include "ns3/yans-wifi-helper.h"
++#include "ns3/inet-socket-address.h"
++#include "ns3/internet-stack-helper.h"
++#include "ns3/ipv4-address-helper.h"
++#include "ns3/wifi-module.h"
++#include "ns3/propagation-loss-model.h"
++
++#include "ns3/aodv-routing-protocol.h"
++
++#include "ns3/ar-model.h"
++#include "ns3/hidden-markov-error-model.h"
++
++#include "ns3/socket.h"
++#include <ns3/node-list.h>
++
++#include "ns3/wifi-mac-header.h"
++#include "ns3/llc-snap-header.h"
++#include "ns3/ipv4-header.h"
++#include "ns3/tcp-header.h"
++#include "ns3/udp-header.h"
++
++#include <iostream>
++#include <fstream>
++#include <vector>
++#include <string>
++#include <stdio.h>
++
++#include "scratch-logging.h"
++//#include "experiment.h"
++
++
++NS_LOG_COMPONENT_DEFINE("TcpErrorModelTest");
++
++using namespace std;
++using namespace ns3;
++
++std::string ConvertMacToString(Mac48Address mac);
++std::string getcwd();
++
++enum ChannelMode_t {
++ HIDDEN_MARKOV_ERROR_MODEL,
++ BURSTY_ERROR_AUTO_REGRESSIVE_MODEL,
++ NIST_ERROR_RATE_MODEL
++};
++
++enum TransportProtocol_t {
++ TCP_PROTOCOL,
++ UDP_PROTOCOL
++};
++
++
++class Experiment {
++public:
++ Experiment ();
++ ~Experiment ();
++
++ u_int32_t GetPacketCounter() const;
++ void SetPacketCounter(u_int32_t packetCounter);
++ u_int32_t GetPktsCorrect() const;
++ void SetPktsCorrect(u_int32_t pktsCorrect);
++ u_int32_t GetPktsReceived() const;
++ void SetPktsReceived(u_int32_t pktsReceived);
++ u_int32_t GetPktsTransmitted () const;
++
++ void SetTransportProtocol (TransportProtocol_t protocol);
++ TransportProtocol_t GetTransportProtocol () const;
++
++ Ptr<Socket> SetupPacketReceive(Ptr<Node> node);
++ void GenerateTraffic(Ptr<Socket> socket, uint32_t pktSize,
++ uint32_t pktCount, Time pktInterval);
++ //Tracing
++ void PhyRxOkTrace (std::string context, Ptr<const Packet> packet, double snr, WifiMode mode, enum WifiPreamble preamble);
++ void PhyRxErrorTrace (std::string context, Ptr<const Packet> packet, double snr);
++
++ //BEAR Callback integration
++ void HmmRxTrace (Ptr<Packet> packet, Time timestamp, bool error, u_int16_t state);
++ void BearRxTrace (Ptr<Packet> packet, Time timestamp, bool error, double propagation, double slowFading, double fastFading);
++
++ //Upper Layer parser
++ packetInfo_t ParsePacket (Ptr<const Packet> packet);
++
++ void OpenTraceFile (string fileName, ChannelMode_t channelModel);
++ void CloseTraceFile ();
++
++ void TraceToFile (string line);
++
++
++private:
++ fstream m_file;
++
++ void ReceivePacket(Ptr<Socket> socket);
++ void SetPosition(Ptr<Node> node, Vector position);
++ Vector GetPosition(Ptr<Node> node);
++ u_int32_t m_pktsReceived;
++ u_int32_t m_pktsCorrect;
++ u_int32_t m_packetCounter;
++
++ u_int32_t m_packetsTransmitted;
++
++ TransportProtocol_t m_protocol;
++};
++
++
++Experiment::Experiment(): m_pktsReceived (0),
++ m_pktsCorrect (0),
++ m_packetCounter (0),
++ m_packetsTransmitted (0)
++{}
++
++Experiment::~Experiment()
++{}
++
++
++void Experiment::SetPosition(Ptr<Node> node, Vector position) {
++ Ptr<MobilityModel> mobility = node->GetObject<MobilityModel>();
++ mobility->SetPosition(position);
++}
++Vector Experiment::GetPosition(Ptr<Node> node) {
++ Ptr<MobilityModel> mobility = node->GetObject<MobilityModel>();
++ return mobility->GetPosition();
++}
++void Experiment::ReceivePacket(Ptr<Socket> socket) {
++ Ptr<Packet> packet;
++ while (packet = socket->Recv()) {
++ // m_pktsReceived++;
++ }
++}
++
++Ptr<Socket> Experiment::SetupPacketReceive(Ptr<Node> node) {
++
++ TypeId tid = TypeId::LookupByName("ns3::TcpSocketFactory");
++
++ if (m_protocol == UDP_PROTOCOL)
++ tid = TypeId::LookupByName("ns3::UdpSocketFactory");
++ Ptr<Socket> sink = Socket::CreateSocket(node, tid);
++ InetSocketAddress local = InetSocketAddress(Ipv4Address::GetAny(), 80);
++ sink->Bind(local);
++ sink->SetRecvCallback(MakeCallback(&Experiment::ReceivePacket, this));
++ return sink;
++}
++void Experiment::GenerateTraffic(Ptr<Socket> socket, uint32_t pktSize,
++ uint32_t pktCount, Time pktInterval) {
++ m_packetCounter --;
++ if (m_packetCounter > 0) {
++ socket->Send(Create<Packet>(pktSize));
++ Simulator::Schedule(pktInterval, &Experiment::GenerateTraffic, this,
++ socket, pktSize, pktCount - 1, pktInterval);
++ } else {
++ socket->Close();
++ }
++ m_packetsTransmitted ++;
++}
++
++u_int32_t Experiment::GetPacketCounter () const
++{
++ return m_packetCounter;
++}
++
++void Experiment::SetPacketCounter (u_int32_t packetCounter)
++{
++ this->m_packetCounter = packetCounter;
++}
++
++u_int32_t Experiment::GetPktsCorrect () const
++{
++ return m_pktsCorrect;
++}
++
++void Experiment::SetPktsCorrect (u_int32_t pktsCorrect)
++{
++ this->m_pktsCorrect = pktsCorrect;
++}
++
++u_int32_t Experiment::GetPktsReceived () const
++{
++ return m_pktsReceived;
++}
++
++void Experiment::SetPktsReceived(u_int32_t pktsReceived)
++{
++ this->m_pktsReceived = pktsReceived;
++}
++
++u_int32_t Experiment::GetPktsTransmitted() const
++{
++ return m_packetsTransmitted;
++}
++
++void Experiment::SetTransportProtocol(TransportProtocol_t protocol)
++{
++ m_protocol = protocol;
++}
++
++TransportProtocol_t Experiment::GetTransportProtocol () const
++{
++ return m_protocol;
++}
++
++//// Trace data frames and their corresponding ACKs
++
++void Experiment::PhyRxOkTrace(std::string context, Ptr<const Packet> packet, double snr, WifiMode mode, enum WifiPreamble preamble)
++{
++
++ ///////////////////////////////////////////////////////
++ NS_LOG_FUNCTION_NOARGS();
++ WifiMacHeader hdr;
++ packetInfo_t packetInfo;
++ char line [255];
++ bool dataOrAck;
++
++ //Ip addresses variables needed for Ipv4Address to String conversion
++ u_int8_t source [4];
++ u_int8_t destination [4];
++ char sourceChar [32];
++ char destChar [32];
++
++ packet->PeekHeader (hdr); //Don't forget to uncomment
++ packetInfo = ParsePacket(packet);
++
++ switch (packetInfo.type)
++ {
++ case TCP_DATA:
++ if (m_protocol == TCP_PROTOCOL)
++ {
++ m_pktsCorrect ++;
++ m_pktsReceived ++;
++
++ //Get the MAC and IP Addresses
++ packetInfo.ipv4Hdr.GetSource().Serialize(source); //Get a string from Ipv4Address
++ packetInfo.ipv4Hdr.GetDestination().Serialize(destination);
++ sprintf(sourceChar, "%d.%d.%d.%d", source[0], source[1], source[2], source[3]);
++ sprintf(destChar, "%d.%d.%d.%d", destination[0], destination[1], destination[2], destination[3]);
++
++ sprintf (line, "%16f %16d %20s %20s %16d %16d %16d %16d %16d %16f", \
++ Simulator::Now().GetSeconds(), true, sourceChar, \
++ destChar, packetInfo.wifiHdr.IsRetry(), \
++ packetInfo.payloadLength, \
++ packetInfo.wifiHdr.GetSequenceNumber(), \
++ packetInfo.tcpHdr.GetSequenceNumber().GetValue(), \
++ packetInfo.tcpHdr.GetAckNumber().GetValue(), \
++ snr);
++ TraceToFile(line);
++ }
++ break;
++ case UDP_DATA:
++ if (m_protocol == UDP_PROTOCOL)
++ {
++ //Distinguish between data or ACK
++ if (hdr.IsData())
++ dataOrAck = false;
++ else if (hdr.IsAck())
++ dataOrAck = true;
++
++ sprintf(line, "%10f %10d %20s %20s %10s %8d %8d %10f", \
++ Simulator::Now().GetSeconds(), \
++ true, \
++ ConvertMacToString(hdr.GetAddr2()).c_str(), \
++ ConvertMacToString(hdr.GetAddr1()).c_str(), \
++ dataOrAck ? "ACK" : "DATA", \
++ packet->GetSize(), \
++ hdr.GetSequenceNumber(), \
++ snr);
++ m_pktsCorrect ++;
++ m_pktsReceived ++;
++
++ TraceToFile(line);
++ }
++ break;
++ default:
++ NS_LOG_ERROR("Unknown packet type --> " << packetInfo.type);
++ break;
++ }
++
++
++ ////////////////////////////////////
++
++}
++
++void Experiment::PhyRxErrorTrace (std::string context, Ptr<const Packet> packet, double snr)
++{
++ ///////////////////////////////////////////////////////
++ NS_LOG_FUNCTION_NOARGS();
++ WifiMacHeader hdr;
++ packetInfo_t packetInfo;
++ char line [255];
++ bool dataOrAck;
++
++ //Ip addresses variables needed for Ipv4Address to String conversion
++ u_int8_t source [4];
++ u_int8_t destination [4];
++ char sourceChar [32];
++ char destChar [32];
++
++ packet->PeekHeader (hdr); //Don't forget to uncomment
++ packetInfo = ParsePacket(packet);
++
++ switch (packetInfo.type)
++ {
++ case TCP_DATA:
++ if (m_protocol == TCP_PROTOCOL)
++ {
++ m_pktsReceived ++;
++
++ //Get the MAC and IP Addresses
++ packetInfo.ipv4Hdr.GetSource().Serialize(source); //Get a string from Ipv4Address
++ packetInfo.ipv4Hdr.GetDestination().Serialize(destination);
++ sprintf(sourceChar, "%d.%d.%d.%d", source[0], source[1], source[2], source[3]);
++ sprintf(destChar, "%d.%d.%d.%d", destination[0], destination[1], destination[2], destination[3]);
++
++ sprintf (line, "%16f %16d %20s %20s %16d %16d %16d %16d %16d %16f", \
++ Simulator::Now().GetSeconds(), false, sourceChar, \
++ destChar, packetInfo.wifiHdr.IsRetry(), \
++ packetInfo.payloadLength, \
++ packetInfo.wifiHdr.GetSequenceNumber(), \
++ packetInfo.tcpHdr.GetSequenceNumber().GetValue(), \
++ packetInfo.tcpHdr.GetAckNumber().GetValue(), \
++ snr);
++ TraceToFile(line);
++ }
++
++ break;
++ case UDP_DATA:
++ if (m_protocol == UDP_PROTOCOL)
++ {
++ //Distinguish between data or ACK
++ if (hdr.IsData())
++ dataOrAck = false;
++ else if (hdr.IsAck())
++ dataOrAck = true;
++
++ sprintf(line, "%10f %10d %20s %20s %10s %8d %8d %10f", \
++ Simulator::Now().GetSeconds(), \
++ false, \
++ ConvertMacToString(hdr.GetAddr2()).c_str(), \
++ ConvertMacToString(hdr.GetAddr1()).c_str(), \
++ dataOrAck ? "ACK" : "DATA", \
++ packet->GetSize(), \
++ hdr.GetSequenceNumber(), \
++ snr);
++ m_pktsReceived ++;
++ TraceToFile(line);
++
++ }
++ break;
++ default:
++ NS_LOG_ERROR("Unknown packet type --> " << packetInfo.type);
++ break;
++ }
++
++
++ ////////////////////////////////////
++
++}
++
++packetInfo_t Experiment::ParsePacket (Ptr<const Packet> packet)
++{
++ NS_LOG_FUNCTION(packet);
++
++ packetInfo_t packetInfo;
++ Ptr<Packet> pktCopy = packet->Copy();
++
++ pktCopy->RemoveHeader(packetInfo.wifiHdr);
++
++ if (packetInfo.wifiHdr.IsData())
++ {
++ pktCopy->RemoveHeader(packetInfo.llcHdr);
++ switch (packetInfo.llcHdr.GetType())
++ {
++ case 0x0806: //ARP
++ packetInfo.type = ARP_PACKET;
++ break;
++ case 0x0800: //IP packet
++ pktCopy->RemoveHeader(packetInfo.ipv4Hdr);
++ switch (packetInfo.ipv4Hdr.GetProtocol())
++ {
++ case 6: //TCP
++ pktCopy->RemoveHeader(packetInfo.tcpHdr);
++ packetInfo.type = TCP_DATA;
++
++ break;
++ case 17: //UDP
++ pktCopy->RemoveHeader(packetInfo.udpHdr);
++ packetInfo.type = UDP_DATA;
++ break;
++ default:
++ NS_LOG_ERROR ("Protocol not implemented yet (IP) --> " << packetInfo.llcHdr.GetType());
++ break;
++ }
++ break;
++ default:
++ NS_LOG_ERROR ("Protocol not implemented yet (LLC) --> " << packetInfo.llcHdr.GetType());
++ break;
++ }
++ }
++ else if (packetInfo.wifiHdr.IsAck())
++ {
++ packetInfo.type = IEEE_80211_ACK;
++ }
++ else // 802.11 Control/Management frame
++ {
++ packetInfo.type = IEEE_80211_NODATA;
++ }
++
++ packetInfo.payloadLength = pktCopy->GetSize() - 4; //Last four bytes are used for tagging
++
++ return packetInfo;
++}
++
++void Experiment::BearRxTrace(Ptr<Packet> packet, Time timestamp, bool error, double propagation, double slowFading, double fastFading)
++{
++ NS_LOG_FUNCTION_NOARGS();
++ WifiMacHeader hdr;
++ packetInfo_t packetInfo;
++ char line [255];
++ bool dataOrAck; //Value used for UDP tracing
++
++ //Ip addresses variables needed for Ipv4Address to String conversion
++ u_int8_t source [4];
++ u_int8_t destination [4];
++ char sourceChar [32];
++ char destChar [32];
++
++ packet->PeekHeader (hdr); //Don't forget to uncomment
++ packetInfo = ParsePacket(packet);
++
++ switch (packetInfo.type)
++ {
++
++ case TCP_DATA:
++ if (m_protocol == TCP_PROTOCOL)
++ {
++ if (error == 0)
++ {
++ m_pktsCorrect ++;
++ m_pktsReceived ++;
++ }
++ else
++ {
++ m_pktsReceived ++;
++ }
++
++ //Get the MAC and IP Addresses
++ packetInfo.ipv4Hdr.GetSource().Serialize(source); //Get a string from Ipv4Address
++ packetInfo.ipv4Hdr.GetDestination().Serialize(destination);
++ sprintf(sourceChar, "%d.%d.%d.%d", source[0], source[1], source[2], source[3]);
++ sprintf(destChar, "%d.%d.%d.%d", destination[0], destination[1], destination[2], destination[3]);
++
++ sprintf (line, "%16f %16d %20s %20s %16d %16d %16d %16d %16d %16f", \
++ Simulator::Now().GetSeconds(), !error, sourceChar, \
++ destChar, packetInfo.wifiHdr.IsRetry(), \
++ packetInfo.payloadLength, \
++ packetInfo.wifiHdr.GetSequenceNumber(), \
++ packetInfo.tcpHdr.GetSequenceNumber().GetValue(), \
++ packetInfo.tcpHdr.GetAckNumber().GetValue(), \
++ propagation + slowFading + fastFading);
++
++ TraceToFile(line);
++ }
++ break;
++ case UDP_DATA:
++ if (m_protocol == UDP_PROTOCOL)
++ {
++ if (error == 0)
++ {
++ m_pktsCorrect ++;
++ m_pktsReceived ++;
++ }
++ else
++ {
++ m_pktsReceived ++;
++ }
++ //Distinguish between data or ACK
++ if (hdr.IsData())
++ dataOrAck = false;
++ else if (hdr.IsAck()) //
++ dataOrAck = true;
++
++ sprintf(line, "%10f %10d %20s %20s %10s %8d %8d %12f %12f %12f", \
++ timestamp.GetSeconds(), \
++ !error, \
++ ConvertMacToString(hdr.GetAddr2()).c_str(), \
++ ConvertMacToString(hdr.GetAddr1()).c_str(), \
++ dataOrAck ? "ACK" : "DATA", \
++ packet->GetSize(), \
++ hdr.GetSequenceNumber(), \
++ propagation, \
++ slowFading, \
++ fastFading \
++ );
++ TraceToFile(line);
++ }
++ break;
++ default:
++ NS_LOG_ERROR("Unknown packet type --> " << packetInfo.type);
++ break;
++ }
++
++
++
++}
++
++void Experiment::HmmRxTrace(Ptr<Packet> packet, Time timestamp, bool error, u_int16_t state)
++{
++ NS_LOG_FUNCTION_NOARGS();
++ WifiMacHeader hdr;
++ packetInfo_t packetInfo;
++ char line [255];
++ bool dataOrAck; //Value used for UDP tracing
++
++ //Ip addresses variables needed for Ipv4Address to String conversion
++ u_int8_t source [4];
++ u_int8_t destination [4];
++ char sourceChar [32];
++ char destChar [32];
++
++ packet->PeekHeader (hdr); //Don't forget to uncomment
++ packetInfo = ParsePacket(packet);
++
++ switch (packetInfo.type)
++ {
++ case TCP_DATA:
++ if (m_protocol == TCP_PROTOCOL)
++ {
++ if (error == 0)
++ {
++ m_pktsCorrect ++;
++ m_pktsReceived ++;
++ }
++ else
++ {
++ m_pktsReceived ++;
++ }
++
++ //Get the MAC and IP Addresses
++ packetInfo.ipv4Hdr.GetSource().Serialize(source); //Get a string from Ipv4Address
++ packetInfo.ipv4Hdr.GetDestination().Serialize(destination);
++ sprintf(sourceChar, "%d.%d.%d.%d", source[0], source[1], source[2], source[3]);
++ sprintf(destChar, "%d.%d.%d.%d", destination[0], destination[1], destination[2], destination[3]);
++
++ sprintf (line, "%16f %16d %20s %20s %16d %16d %16d %16d %16d %16d", \
++ Simulator::Now().GetSeconds(), !error, sourceChar, \
++ destChar, packetInfo.wifiHdr.IsRetry(), \
++ packetInfo.payloadLength, \
++ packetInfo.wifiHdr.GetSequenceNumber(), \
++ packetInfo.tcpHdr.GetSequenceNumber().GetValue(), \
++ packetInfo.tcpHdr.GetAckNumber().GetValue(), \
++ state);
++ TraceToFile(line);
++ }
++ break;
++ case UDP_DATA:
++ if (m_protocol == UDP_PROTOCOL)
++ {
++ if (error == 0)
++ {
++ m_pktsCorrect ++;
++ m_pktsReceived ++;
++ }
++ else
++ {
++ m_pktsReceived ++;
++ }
++ //Distinguish between data or ACK
++ if (hdr.IsData())
++ dataOrAck = false;
++ else if (hdr.IsAck())
++ dataOrAck = true;
++ sprintf(line, "%10f %10d %20s %20s %10s %8d %8d %8d", \
++ timestamp.GetSeconds(), \
++ !error, \
++ ConvertMacToString(hdr.GetAddr2()).c_str(), \
++ ConvertMacToString(hdr.GetAddr1()).c_str(), \
++ dataOrAck ? "ACK" : "DATA", \
++ packet->GetSize(), \
++ hdr.GetSequenceNumber(), \
++ state);
++ TraceToFile(line);
++ }
++ break;
++ default:
++ NS_LOG_ERROR("Unknown packet type --> " << packetInfo.type);
++ break;
++ }
++
++
++}
++
++
++void Experiment::OpenTraceFile (string fileName, ChannelMode_t channelModel = BURSTY_ERROR_AUTO_REGRESSIVE_MODEL)
++{
++ string path = getcwd() + "/traces/" + fileName;
++ char title [255];
++ string lastField; //Channel Model Dependent field (trace field)
++ NS_LOG_DEBUG(path);
++ m_file.open(path.c_str(), fstream::out);
++
++ //Split into TCP and UDP simulations
++ switch (m_protocol)
++ {
++ case TCP_PROTOCOL:
++ if (channelModel == HIDDEN_MARKOV_ERROR_MODEL)
++ lastField = "State";
++ else
++ lastField = "SNR (dB)";
++
++ sprintf (title, "%16s %16s %20s %20s %16s %16s %16s %16s %16s %16s", \
++ "Time", "CRC", "Source", "Destination", "802.11 RETX", \
++ "Length","SeqNum", "TCP SeqNum", "TCP AckNum", \
++ lastField.c_str());
++ break;
++
++ case UDP_PROTOCOL:
++ switch (channelModel)
++ {
++ case BURSTY_ERROR_AUTO_REGRESSIVE_MODEL:
++ sprintf(title, "%10s %10s %20s %20s %10s %8s %8s %12s %12s %12s", \
++ "Time", "CRC", "SRC", "DST", "DATA/ACK", "Length", "SeqNum", \
++ "Propagation","Slow Fading", "Fast Fading");
++ break;
++ case HIDDEN_MARKOV_ERROR_MODEL:
++ sprintf(title, "%10s %10s %20s %20s %10s %8s %8s %8s", \
++ "Time", "CRC", "SRC", "DST", "DATA/ACK", "Length", "SeqNum", \
++ "State");
++ break;
++ case NIST_ERROR_RATE_MODEL:
++ sprintf(title, "%10s %10s %20s %20s %10s %8s %8s %10s", \
++ "Time", "CRC", "SRC", "DST", "DATA/ACK", "Length", "SeqNum", "SNR (dB)");
++ break;
++ }
++
++ break;
++ default:
++ NS_LOG_ERROR("Cannot open a trace file because transport protocol is not correct");
++ }
++
++ m_file << title << endl;
++}
++
++void Experiment::CloseTraceFile()
++{
++ NS_LOG_FUNCTION_NOARGS();
++ if (m_file.is_open())
++ m_file.close();
++ else
++ NS_LOG_ERROR("Open file not found");
++}
++
++void Experiment::TraceToFile(string line)
++{
++ NS_LOG_DEBUG(line);
++ m_file << line << endl;
++}
++
++
++
++std::string getcwd() {
++ char buf[FILENAME_MAX];
++ char* succ = getcwd(buf, FILENAME_MAX);
++ if (succ)
++ return std::string(succ);
++ return ""; // raise a flag, throw an exception, ...
++}
++
++std::string ConvertMacToString(Mac48Address mac)
++{
++ NS_LOG_FUNCTION(mac);
++ u_int8_t temp[6];
++ char result[24];
++ mac.CopyTo(temp);
++
++ sprintf(result,"%02X:%02X:%02X:%02X:%02X:%02X", temp[0], temp[1], temp[2], temp[3], temp[4], temp[5] );
++
++ return std::string(result);
++}
++
++////////////////////////////////////////////////////////////////////////////////////
++/////////////////////////////// MAIN ///////////////////////////////////////
++////////////////////////////////////////////////////////////////////////////////////
++
++int main (int argc, char *argv[])
++{
++ //Logging
++ EnableLogging();
++
++
++ //Variable initialization
++ // Hidden Markov Model Coefficient file
++ string transitionFileHmm = "HMM_4states/HMM_03_TR_1.txt" ;
++ string emissionFileHmm = "HMM_4states/HMM_03_EMIS_1.txt" ;
++
++ string hmmChannel = "Good";
++
++ //BEAR model Coefficients file
++ string arModelCoefficientsFile = "coefsAR.cfg";
++
++ //Parameter to switch among the different channel models
++ string channelModel = "Bear";
++
++ //Transport protocol
++ string transportProtocol = "TCP";
++ TransportProtocol_t protocol;
++
++ //Random variable generation (Random seed)
++ SeedManager::SetSeed(1);
++
++ //Trace file name
++ u_int16_t scenario = 1; //Scenario number --> Used for trace file naming (see documentation to get the model particular parameters)
++ string outputChannelTypeFileName;
++ string outputFileName = "TCP";
++ ChannelMode_t enumChannelModel;
++
++ //Simulation parameters
++ float distance = 20; //Distance between nodes
++
++
++ u_int32_t numPackets = 10000;
++ u_int32_t packetLength = 1460;
++ uint64_t interPacketTime = 1000000;
++ u_int32_t run = 1;
++ u_int32_t runCounter;
++ u_int32_t runOffset = 0;
++
++ //Command parsing
++ CommandLine cmd;
++
++ //Error model parameters
++ cmd.AddValue ("ChannelModel", "Channel model to insert into the nodes", channelModel );
++ //BEAR model
++ cmd.AddValue ("ArModelCoefficientFile", "File name which contains the AR model coefficients", arModelCoefficientsFile);
++
++ //Hidden Markov Error Model parameters
++ cmd.AddValue ("HmmChannel", "Type of HMM channel: Good, Average or bad", hmmChannel);
++ cmd.AddValue ("TransitionFileHmm", "HMM transition file name (from configs file)", transitionFileHmm);
++ cmd.AddValue ("EmissionFileHmm", "HMM emission file name (from configs file)", emissionFileHmm);
++
++ //Simulation-related parameters
++ cmd.AddValue ("Run", "Number of simulations to run", run);
++ cmd.AddValue ("RunOffset", "Offset introduced at the SeedManager and the file naming counter", runOffset);
++ cmd.AddValue ("Scenario", "Type of analysis (channel model coefficients and conditions)", scenario);
++ cmd.AddValue ("NumPackets", "Total number of packets sent in the simulation", numPackets);
++ cmd.AddValue ("PacketLength", "Number of bytes in each packet", packetLength);
++ cmd.AddValue ("InterPacketTime", "Time (in microseconds) between two consecutive packets (application level)", interPacketTime);
++ cmd.AddValue ("OutputChannelTypeFileName", "File name to store the output trace", outputChannelTypeFileName);
++ cmd.AddValue ("Distance", "Distance (in meters) between nodes", distance);
++ cmd.AddValue ("TransportProtocol", "TCP or UDP" , transportProtocol);
++
++ cmd.Parse (argc, argv);
++
++ //Default attributes initialization
++ //Wifi attributes
++ Config::SetDefault ("ns3::WifiRemoteStationManager::NonUnicastMode",StringValue ("DsssRate2Mbps"));
++ // Config::SetDefault ("ns3::WifiRemoteStationManager::RtsCtsThreshold", StringValue ("2200")); //Disable RTS/CTS transmission
++ Config::SetDefault ("ns3::WifiRemoteStationManager::FragmentationThreshold", StringValue ("2200")); //Disable fragmentation
++ Config::SetDefault ("ns3::ConstantRateWifiManager::DataMode", StringValue ("DsssRate11Mbps"));
++ Config::SetDefault ("ns3::ConstantRateWifiManager::ControlMode", StringValue ("DsssRate11Mbps")); //WiFi Buffer Size
++ Config::SetDefault ("ns3::WifiMacQueue::MaxPacketNumber", UintegerValue (900000000));
++ Config::SetDefault ("ns3::WifiRemoteStationManager::MaxSlrc", UintegerValue (4));
++ Config::SetDefault ("ns3::WifiNetDevice::Mtu", UintegerValue (1512));
++
++ //HiddenErrorMarkov model attributes
++ Config::SetDefault ("ns3::HiddenMarkovErrorModel::TransitionMatrixFileName", StringValue (transitionFileHmm));
++ Config::SetDefault ("ns3::HiddenMarkovErrorModel::EmissionMatrixFileName", StringValue (emissionFileHmm));
++
++ GlobalValue::Bind ("ChecksumEnabled", BooleanValue (true));
++
++ if (transportProtocol == "TCP")
++ protocol = TCP_PROTOCOL;
++ else if (transportProtocol == "UDP")
++ protocol = UDP_PROTOCOL;
++ else
++ NS_LOG_ERROR("Transport Protocol undefined");
++
++ if (channelModel == "SWEEP")
++ distance = 72;
++
++ if ((scenario < 1) || (scenario > 6))
++ {
++ NS_LOG_ERROR("HMM configuration et not supported");
++ return -1;
++ }
++
++ /////////-----------------------MAIN LOOP-----------------------/////////
++
++ for (runCounter = 1; runCounter <= run; runCounter ++)
++ {
++ Experiment exp_;
++ exp_.SetTransportProtocol(protocol);
++ //Create the nodes
++ NodeContainer wifiNodes;
++ wifiNodes.Create(2);
++
++ //Prepare the Wifi NetDevices
++ YansWifiPhyHelper wifiPhy = YansWifiPhyHelper::Default(); //Don't remove (Necessary at YansWifiPhy::EndReceive)
++ YansWifiChannelHelper wifiChannel;
++
++ //Change the seed for each simulation run
++ SeedManager::SetRun(runCounter + runOffset);
++
++ //Channel model initialization
++ // BEAR model = ArModel (Propagation Loss Model) + BurstyErrorModel (Error Model)
++
++ if (channelModel == "Bear")
++ {
++ outputChannelTypeFileName = "Bear";
++ enumChannelModel = BURSTY_ERROR_AUTO_REGRESSIVE_MODEL;
++
++ //Set the propagation delay model
++ wifiChannel.SetPropagationDelay("ns3::ConstantSpeedPropagationDelayModel");
++ //Set the propagation loss model
++ wifiChannel.AddPropagationLoss("ns3::ArModel");
++ Ptr<ArModel> arBaseModel = CreateObject<ArModel> ();
++ wifiChannel.AddPropagationLoss(arBaseModel);
++ //Set the error model
++ Ptr<BurstyErrorModel> errorModel = CreateObject<BurstyErrorModel> (); //Manual BEAR model instance
++ wifiPhy.SetErrorModel(errorModel);
++ arBaseModel->SetErrorModel(errorModel); // Bursty error model is closely linked to the AR propagation loss model
++
++ //Callback
++ errorModel->SetRxCallback (MakeCallback (&Experiment::BearRxTrace, &exp_));
++ }
++
++ // HiddenMarkovErrorModel --> Does not take into account the SNR, hence the propagation loss model is not relevant
++ else if (channelModel == "HMM")
++ {
++ //Prepare the coefficients files according to the channel type
++ if (hmmChannel == "Good")
++ {
++ sprintf((char *) transitionFileHmm.c_str(), "HMM_4states/HMM_12_TR_%1d.txt", scenario);
++ sprintf((char *) emissionFileHmm.c_str(), "HMM_4states/HMM_12_EMIS_%1d.txt", scenario);
++
++ }
++ else if (hmmChannel == "Average")
++ {
++ sprintf((char *) transitionFileHmm.c_str(), "HMM_4states/HMM_09_TR_%1d.txt", scenario);
++ sprintf((char *) emissionFileHmm.c_str(), "HMM_4states/HMM_09_EMIS_%1d.txt", scenario);
++ }
++ else if (hmmChannel == "Bad")
++ {
++ sprintf((char *) transitionFileHmm.c_str(), "HMM_4states/HMM_05_TR_%1d.txt", scenario);
++ sprintf((char *) emissionFileHmm.c_str(), "HMM_4states/HMM_05_EMIS_%1d.txt", scenario);
++ }
++ else
++ {
++ NS_LOG_UNCOND ("HMM Channel Model not valid... Exiting");
++ return -1;
++ }
++
++ outputChannelTypeFileName = "HMM_" + hmmChannel;
++ enumChannelModel = HIDDEN_MARKOV_ERROR_MODEL;
++
++ //Set the propagation delay model
++ wifiChannel.SetPropagationDelay ("ns3::ConstantSpeedPropagationDelayModel");
++ //Set the propagation loss model
++ wifiChannel.AddPropagationLoss ("ns3::SimplePropagationLossModel", "MaxDistance", DoubleValue(200.0));
++
++ //Set the error model
++ Ptr<HiddenMarkovErrorModel> errorModel = CreateObject<HiddenMarkovErrorModel> ();
++ errorModel->SetTransitionMatrixFileName(transitionFileHmm);
++ errorModel->SetEmissionMatrixFileName(emissionFileHmm);
++ errorModel->GetCoefficients();
++
++ wifiPhy.SetErrorModel(errorModel);
++
++ //Callback
++ errorModel->SetRxCallback(MakeCallback(&Experiment::HmmRxTrace, &exp_));
++ }
++
++ //NS-3 Legacy error decision model --> LogDistancePropagationLossModel + NistErrorRateModel
++ else if (channelModel == "NIST")
++ {
++ outputChannelTypeFileName = "NIST";
++ enumChannelModel = NIST_ERROR_RATE_MODEL;
++// distance = 89.6; //Distance value which FER yields approximately 0.5
++ distance = 80; //FER ~ 0.16
++
++ //Set the propagation delay model
++ wifiChannel.SetPropagationDelay("ns3::ConstantSpeedPropagationDelayModel");
++ //Set the propagation loss model
++ wifiChannel.AddPropagationLoss("ns3::LogDistancePropagationLossModel");
++ wifiChannel.AddPropagationLoss("ns3::RandomPropagationLossModel", "Variable", RandomVariableValue (NormalVariable (0.0, 2.8)));
++
++ wifiPhy.SetErrorRateModel("ns3::YansErrorRateModel");
++ }
++
++ //Make a sweep in order to fully characterize the throughput vs FER curve shape in a memoryless channel
++ else if (channelModel == "SWEEP")
++ {
++ if ((int) runCounter % 5 == 0)
++ distance += 0.5 ;
++
++ outputChannelTypeFileName = "SWEEP";
++ enumChannelModel = NIST_ERROR_RATE_MODEL;
++ // distance = 89.6; //Distance value which FER yields approximately 0.5
++// distance = 80; //FER ~ 0.16
++
++ //Set the propagation delay model
++ wifiChannel.SetPropagationDelay("ns3::ConstantSpeedPropagationDelayModel");
++ //Set the propagation loss model
++ wifiChannel.AddPropagationLoss("ns3::LogDistancePropagationLossModel");
++// wifiChannel.AddPropagationLoss("ns3::RandomPropagationLossModel", "Variable", RandomVariableValue (NormalVariable (0.0, 2.8)));
++ wifiPhy.SetErrorRateModel("ns3::YansErrorRateModel");
++
++ }
++
++ wifiPhy.SetChannel (wifiChannel.Create());
++ WifiHelper wifi = WifiHelper::Default();
++ wifi.SetStandard (WIFI_PHY_STANDARD_80211b);
++ wifi.SetRemoteStationManager ("ns3::ConstantRateWifiManager");
++ NqosWifiMacHelper wifiMac = NqosWifiMacHelper::Default();
++
++ NetDeviceContainer wifiDevices = wifi.Install(wifiPhy, wifiMac, wifiNodes);
++
++ //Node mobility configuration
++ MobilityHelper mobility;
++ Ptr<ListPositionAllocator> positionAlloc = CreateObject<ListPositionAllocator>();
++ positionAlloc->Add(Vector(0.0, 0.0, 0.0));
++ positionAlloc->Add(Vector(distance, 0.0, 0.0));
++ mobility.SetPositionAllocator(positionAlloc);
++ mobility.SetMobilityModel("ns3::ConstantPositionMobilityModel");
++ mobility.Install (wifiNodes);
++
++ //Set the upper layers (default configuration)
++ InternetStackHelper internet;
++
++ // Sysctl option configuration
++ if (transportProtocol == "TCP")
++ {
++ internet.SetTcp ("ns3::NscTcpL4Protocol","Library",StringValue ("liblinux2.6.26.so"));
++ Config::Set ("/NodeList/3/$ns3::Ns3NscStack<linux2.6.26>/net.inet.tcp.mssdflt", StringValue ("1460"));
++ Config::SetDefault ("ns3::TcpSocket::SegmentSize", UintegerValue (1460));
++ // Config::Set ("/NodeList/3/$ns3::Ns3NscStack<linux2.6.26>/net.ipv4.tcp_sack", StringValue ("0"));
++ // Config::Set ("/NodeList/3/$ns3::Ns3NscStack<linux2.6.26>/net.ipv4.tcp_timestamps", StringValue ("0"));
++ // Config::Set ("/NodeList/3/$ns3::Ns3NscStack<linux2.6.26>/net.ipv4.tcp_window_scaling", StringValue ("0"));
++
++ //TCP parameter set
++ Config::SetDefault ("ns3::TcpSocket::SegmentSize", UintegerValue (1460));
++ Config::SetDefault ("ns3::TcpSocket::RcvBufSize", UintegerValue (90000000));
++ Config::SetDefault ("ns3::TcpSocket::SndBufSize", UintegerValue (90000000));
++
++ outputFileName= "TCP";
++
++ // Config::SetDefault("ns3::TcpL4Protocol::SocketType", StringValue("ns3::TcpNewReno"));
++ // Config::SetDefault("ns3::TcpL4Protocol::SocketType", StringValue("ns3::TcpReno"));
++ }
++ else if (transportProtocol == "UDP")
++ {
++ outputFileName = "UDP";
++ Config::SetDefault ("ns3::UdpSocket::RcvBufSize", UintegerValue (90000000));
++ }
++
++ internet.Install (wifiNodes);
++
++ //New TCP simulation model (Application changes)
++ //Define IP level
++ Ipv4AddressHelper ipv4;
++ NS_LOG_INFO("Assign IP Addresses.");
++ ipv4.SetBase("10.1.1.0", "255.255.255.0");
++ Ipv4InterfaceContainer ipInterfaceContainer = ipv4.Assign(wifiDevices);
++
++
++ uint16_t port = 50000; // Server Port
++
++ OnOffHelper onoff ("ns3::TcpSocketFactory", Address (InetSocketAddress (Ipv4Address ("10.1.1.1"), port))); //OnOffHelper instance
++
++ //If UDP-based simulation, establish UDP at the OnOffHelper object
++ if (transportProtocol == "UDP")
++ onoff.SetAttribute("Protocol", StringValue ("ns3::UdpSocketFactory"));
++
++ onoff.SetAttribute ("OnTime", RandomVariableValue (ConstantVariable (1)));
++ onoff.SetAttribute ("OffTime", RandomVariableValue (ConstantVariable (0)));
++ onoff.SetAttribute ("DataRate", StringValue ("11Mbps"));
++ onoff.SetAttribute ("PacketSize", UintegerValue (packetLength));
++ onoff.SetAttribute ("MaxBytes", UintegerValue (packetLength * numPackets));
++ // onoff.SetAttribute ("Tx", MakeTraceSourceAccessor (&OnOffApplication::m_txTrace));
++
++ ApplicationContainer app = onoff.Install (wifiNodes.Get(1)); //install the onoff aplication in the AP node
++ // Start the application
++ app.Start (Seconds (1.0));
++ app.Stop (Seconds (10000.0));
++
++ // Create a packet sink to receive these packets in the Station node
++ PacketSinkHelper sink ("ns3::TcpSocketFactory", Address (InetSocketAddress (Ipv4Address::GetAny (), port)));
++ //If UDP-based simulation, establish UDP at the OnOffHelper object
++ if (transportProtocol == "UDP")
++ sink.SetAttribute("Protocol", StringValue("ns3::UdpSocketFactory"));
++
++
++
++ app = sink.Install (wifiNodes.Get(0));
++ app.Start (Seconds (0.0));
++ app.Stop (Seconds (11000.0));
++
++ //End new simulation scheme
++ ////////////////////
++
++ //Tracing connectors
++ if (enumChannelModel == NIST_ERROR_RATE_MODEL) //Frame reception tracing for
++ {
++ Config::Connect ("/NodeList/*/DeviceList/*/Phy/State/RxOk", MakeCallback (&Experiment::PhyRxOkTrace, &exp_));
++ Config::Connect ("/NodeList/*/DeviceList/*/Phy/State/RxError", MakeCallback (&Experiment::PhyRxErrorTrace, &exp_));
++ }
++
++ //Connect to the error models
++ wifiPhy.EnablePcap (outputChannelTypeFileName, wifiNodes, true);
++ wifiPhy.EnableAscii("Prueba", wifiNodes);
++
++
++ //TCP trace file
++ char temp[128];
++ sprintf(temp,"%s_%s_%02d_%03d.tr", outputFileName.c_str(), outputChannelTypeFileName.c_str(), scenario, runCounter + runOffset);
++ exp_.OpenTraceFile(temp, enumChannelModel);
++
++ Simulator::Stop(Seconds(11010));
++
++ Simulator::Run();
++ Simulator::Destroy();
++
++ //Print statistics
++ NS_LOG_UNCOND("Run " << runCounter + runOffset << " FER = " << exp_.GetPktsReceived() - exp_.GetPktsCorrect() << "/" \
++ << exp_.GetPktsReceived() << " = " << \
++ ((double) exp_.GetPktsReceived() - (double) exp_.GetPktsCorrect())/(double)exp_.GetPktsReceived());
++ exp_.CloseTraceFile();
++ }
++}
++
+diff -uprNB ns-3.13/src/ar-model/model/ar-model.cc b/src/ar-model/model/ar-model.cc
+--- ns-3.13/src/ar-model/model/ar-model.cc 1970-01-01 01:00:00.000000000 +0100
++++ b/src/ar-model/model/ar-model.cc 2012-04-16 11:50:12.000000000 +0200
+@@ -0,0 +1,955 @@
++/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
++/*
++ * Copyright (c) 2011 Universidad de Cantabria
++ *
++ * 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
++ *
++ * Author: David Gómez Fernández <dgomez@tlmat.unican.es>
++ * Ramón Agüero Calvo <ramon@tlmat.unican.es>
++ */
++
++#include <math.h>
++#include <fstream>
++#include <stdio.h>
++
++#include <ns3/node.h>
++#include <ns3/node-list.h>
++#include "ns3/simulator.h"
++#include "ns3/packet.h"
++#include "ns3/assert.h"
++#include "ns3/log.h"
++#include "ns3/boolean.h"
++#include "ns3/enum.h"
++#include "ns3/double.h"
++#include "ns3/integer.h"
++#include "ns3/string.h"
++#include "ns3/wifi-mac-header.h"
++#include "ns3/yans-wifi-phy.h"
++#include "ns3/trace-source-accessor.h"
++
++#include "ar-model.h"
++
++const bool g_debug = false; //Temporal solution (only for debugging)
++
++using namespace std;
++using namespace ns3;
++
++NS_LOG_COMPONENT_DEFINE ("ArModel");
++
++u_int32_t ChannelKey::GetRx () const
++{
++ return m_rx;
++}
++
++u_int32_t ChannelKey::GetTx () const
++{
++ return m_tx;
++}
++
++void ChannelKey::SetRx (u_int32_t rx)
++{
++ m_rx = rx;
++}
++
++void ChannelKey::SetTx (u_int32_t tx)
++{
++ m_tx = tx;
++}
++
++
++NS_OBJECT_ENSURE_REGISTERED (ArChannelEntry);
++
++ArChannelEntry::ArChannelEntry()
++{
++ NS_LOG_FUNCTION (this);
++}
++
++ArChannelEntry::ArChannelEntry(int order, double coherenceTime): m_order (order), m_coherenceTime (coherenceTime)
++{
++ NS_LOG_FUNCTION ("AR filter order " << order << " -- Coherence Time" << coherenceTime);
++}
++
++ArChannelEntry::~ArChannelEntry()
++{
++ NS_LOG_FUNCTION (this);
++}
++
++u_int32_t ArChannelEntry::GetRx () const
++{
++ return m_rx;
++}
++
++u_int32_t ArChannelEntry::GetTx () const
++{
++ return m_tx;
++}
++
++void ArChannelEntry::SetRx (u_int32_t rx)
++{
++ m_rx = rx;
++}
++
++void ArChannelEntry::SetTx (u_int32_t tx)
++{
++ m_tx = tx;
++}
++
++void ArChannelEntry::UpdateSnr (double snr)
++{
++ NS_LOG_FUNCTION (this);
++
++ struct prevValues_t newSample;
++ double newTimeout;
++ newSample.time = Simulator::Now();
++
++ //If the vector is empty, set the timer with the arrival of the first frame
++ if (!m_previousSnr.size())
++ {
++ m_coherenceTimeout = Simulator::Schedule(MilliSeconds(m_coherenceTime), &ArChannelEntry::HandleCoherenceTimeout, this);
++ NS_LOG_DEBUG("Timeout established at " << Simulator::Now().GetSeconds() + m_coherenceTime/1e3);
++ }
++ //If the vector is full (already holds AR model order values), we do erase the oldest one (the first one), and push back the newest one
++ //at the end of the vector. It is worth highlighting, that if there is an active timer
++ if(m_previousSnr.size() && m_previousSnr.size() == ((unsigned) m_order)) {
++ m_previousSnr.erase(m_previousSnr.begin());
++ if (m_coherenceTimeout.IsRunning())
++ {
++ m_coherenceTimeout.Cancel();
++ //Update the new timer
++ newTimeout = GetNextTimeout();
++ m_coherenceTimeout = Simulator::Schedule(MilliSeconds(newTimeout), &ArChannelEntry::HandleCoherenceTimeout, this);
++ }
++
++ //Option not tested yet
++// else
++// {
++// newTimeout = GetNextTimeout();
++// m_coherenceTimeout = Simulator::Schedule(MilliSeconds(newTimeout), &ArChannelEntry::HandleCoherenceTimeout, this);
++// }
++ }
++
++ newSample.snr = snr;
++
++ m_previousSnr.push_back(newSample);
++ DisplaySnrQueue();
++}
++
++int ArChannelEntry::GetPreviousSnr(vector<double> &previousSnr)
++{
++ NS_LOG_FUNCTION_NOARGS();
++ int i;
++
++ for(i = 0 ; i < (int) m_previousSnr.size() ; i++) {
++ previousSnr.push_back(m_previousSnr[i].snr);
++ }
++
++ return ((int) m_previousSnr.size());
++}
++
++double ArChannelEntry::GetNextTimeout()
++{
++ NS_LOG_FUNCTION(this);
++ double timeout, currentTime, firstArrival;
++
++ if(m_previousSnr.size())
++ {
++ firstArrival = m_previousSnr[0].time.GetMilliSeconds();
++ currentTime = Simulator::Now().GetMilliSeconds();
++ timeout = m_coherenceTime - (currentTime - firstArrival);
++
++ NS_LOG_DEBUG ("Getting next timeout = " << m_coherenceTime << " - " << "(" \
++ << currentTime << " - " << firstArrival << ") = " << timeout << " --> " << Simulator::Now().GetSeconds() + timeout/1e3);
++ //Maximum precision 1 msec
++ if(timeout < 1)
++ timeout = 1;
++
++ } else {
++ timeout = 0.0;
++ }
++
++ NS_LOG_DEBUG("Introducing a new timeout in " << timeout << " milliseconds");
++
++ return timeout;
++}
++
++void ArChannelEntry::HandleCoherenceTimeout()
++{
++ NS_LOG_FUNCTION(Simulator::Now().GetSeconds());
++
++// DisplaySnrQueue();
++
++ if(m_previousSnr.size())
++ {
++ m_previousSnr.erase(m_previousSnr.begin());
++ m_coherenceTimeout = Simulator::Schedule(MilliSeconds(GetNextTimeout()), &ArChannelEntry::HandleCoherenceTimeout, this);
++ }
++ else
++ NS_LOG_ERROR("There are not buffered samples");
++
++// DisplaySnrQueue();
++}
++
++void ArChannelEntry::DisplaySnrQueue()
++{
++ NS_LOG_FUNCTION(Simulator::Now().GetSeconds());
++ u_int8_t i;
++ char message[256];
++
++ for (i=0; i < m_previousSnr.size(); i++)
++ {
++ sprintf(message, "%3d SNR = %2.6f Time = %4.5f", i, m_previousSnr[i].snr, m_previousSnr[i].time.GetSeconds());
++ NS_LOG_DEBUG(message);
++ }
++}
++
++NS_OBJECT_ENSURE_REGISTERED (ArModel);
++
++TypeId
++ArModel::GetTypeId(void) {
++ static TypeId tid = TypeId ("ns3::ArModel")
++ .SetParent<PropagationLossModel> ()
++ .AddConstructor<ArModel> ()
++ .AddAttribute ("RanVar",
++ "Random variable which determine a packet to be successfully received or not",
++ RandomVariableValue (UniformVariable (0.0, 1.0)),
++ MakeRandomVariableAccessor (&ArModel::m_ranvar),
++ MakeRandomVariableChecker ())
++ .AddAttribute("ArFilterOrder",
++ "Order of the Auto Regressive Filter",
++ IntegerValue(4),
++ MakeIntegerAccessor (&ArModel::m_order),
++ MakeIntegerChecker<int> ())
++ .AddAttribute("NoiseLevel",
++ "Total noise power level (W)",
++ DoubleValue(1.082e-6),
++ MakeDoubleAccessor(&ArModel::m_noise),
++ MakeDoubleChecker<double> ())
++ .AddAttribute("ArFilterVariance",
++ "AR model variance",
++ DoubleValue(0.005),
++ MakeDoubleAccessor(&ArModel::m_variance),
++ MakeDoubleChecker <double> ())
++ .AddAttribute("StandardDeviation",
++ "AR model standard deviation (dB)",
++ DoubleValue(2.6),
++ MakeDoubleAccessor(&ArModel::m_stdDevDb),
++ MakeDoubleChecker<double> ())
++ .AddAttribute("FastFadingVariance",
++ "Variance that model the Gaussian model inherent to Fast Fading",
++ DoubleValue(2.8),
++// DoubleValue (1.67),
++ MakeDoubleAccessor(&ArModel::m_ffVariance),
++ MakeDoubleChecker<double> ())
++ .AddAttribute("CoherenceTime",
++ "Channel propagation coherence time (in milliseconds)",
++ DoubleValue(5000.0),
++ MakeDoubleAccessor(&ArModel::m_coherenceTime),
++ MakeDoubleChecker<double> ())
++ .AddAttribute("CoefficientsFile",
++ "Name of the file that contains the AR model coefficients",
++ StringValue("coefsAR.cfg"),
++ MakeStringAccessor (&ArModel::m_coefficientsFile),
++ MakeStringChecker ())
++ ;
++ return tid;
++}
++
++ArModel::ArModel() : m_order (3),
++ m_variance(0.005),
++ m_ffVariance (2.8),
++// m_ffVariance (1.67),
++ m_stdDevDb (2.6),
++ m_ranvar (UniformVariable (0.0, 1.0))
++{
++ NS_LOG_FUNCTION(m_noise);
++ GetCoefficients("coefsAR.cfg");
++
++ int totalNodes;
++ int i, j;
++
++ ChannelKey key(0,0);
++ ChannelKey keyAux(0,0);
++ Ptr<ArChannelEntry> channel;
++
++ channelSetIter_t iter;
++
++ //Private variable initialization
++ m_symmetry = true;
++ m_coherenceTime = 10000.0;
++
++ //// Input noise value
++ // m_noise = 1.082e-6; //SNR = 10 dB @ 10 meters between nodes
++ // m_noise = 5.42338e-7; //SNR = 13 dB @ 10 meters between nodes
++ // m_noise = 9.14617e-9; //SNR = 15 dB @ 10 meters between nodes
++ // m_noise = 1.082e-9; //SNR = 20 dB @ 10 meters between node
++
++ //Default Propagation Loss
++ Ptr<FriisPropagationLossModel> aux = CreateObject <FriisPropagationLossModel>();
++ m_propagationLoss = aux;
++
++
++ //Create the map which contains the scenario snapshot
++ totalNodes = NodeList().GetNNodes();
++
++ for( i = 0 ; i < totalNodes ; i ++ ) {
++ for( j = 0; j < totalNodes ; j ++) {
++ if( j != i ) {
++ key.SetTx(i);
++ key.SetRx(j);
++
++ if(m_symmetry == 1) {
++ if(i < j) {
++ channel = CreateObject<ArChannelEntry> (m_order, m_coherenceTime);
++ channel->SetTx(i);
++ channel->SetRx(j);
++
++ } else {
++ keyAux.SetTx(j);
++ keyAux.SetRx(i);
++ iter = m_channelSetMap.find(keyAux);
++ if(iter != m_channelSetMap.end())
++ channel = iter->second;
++ }
++ }
++ else {
++ channel = CreateObject<ArChannelEntry> (m_order, m_coherenceTime);
++ channel->SetTx(i);
++ channel->SetRx(j);
++
++ }
++ //Timer handling -- Work in progress (Port from Ramon's Timer class)
++ m_channelSetMap.insert(pair<ChannelKey, Ptr<ArChannelEntry> > (key, channel));
++ }
++ }
++ }
++}
++
++ArModel::~ArModel ()
++{
++ NS_LOG_FUNCTION(this);
++ if (m_arCoefficientsMap.size() > 0)
++ m_arCoefficientsMap.clear();
++ if (m_channelSetMap.size() > 0)
++ m_channelSetMap.clear();
++}
++
++void ArModel::SetPropagationLoss (std::string type,
++ std::string n0, const AttributeValue &v0,
++ std::string n1, const AttributeValue &v1,
++ std::string n2, const AttributeValue &v2,
++ std::string n3, const AttributeValue &v3,
++ std::string n4, const AttributeValue &v4,
++ std::string n5, const AttributeValue &v5,
++ std::string n6, const AttributeValue &v6,
++ std::string n7, const AttributeValue &v7)
++{
++ NS_LOG_FUNCTION(this);
++ ObjectFactory factory;
++ factory.SetTypeId (type);
++ factory.Set (n0, v0);
++ factory.Set (n1, v1);
++ factory.Set (n2, v2);
++ factory.Set (n3, v3);
++ factory.Set (n4, v4);
++ factory.Set (n5, v5);
++ factory.Set (n6, v6);
++ factory.Set (n7, v7);
++ m_propagationLoss = factory.Create<PropagationLossModel> ();
++}
++
++void ArModel::SetPropagationLoss (Ptr<PropagationLossModel> loss)
++{
++ NS_LOG_FUNCTION(this);
++ m_propagationLoss = loss;
++}
++
++void ArModel::SetErrorModel(Ptr<BurstyErrorModel> error)
++{
++ NS_LOG_FUNCTION(this);
++ m_errorModel= error;
++}
++
++Ptr<BurstyErrorModel> ArModel::GetErrorModel()
++{
++ NS_LOG_FUNCTION(this);
++ return m_errorModel;
++}
++
++bool ArModel::GetCoefficients (string fileName)
++{
++ NS_LOG_FUNCTION (fileName);
++
++ fstream arCoefficientsFile;
++ int currentCoefficientNumber, i, j;
++ char line[256];
++ double arCurrentCoefficient;
++ string arCoefficientFilePath;
++ vector<double> arCoefficientsVector;
++
++ coefSetIter_t iter; //Only for debugging
++
++ //File handling
++ arCoefficientFilePath = GetCwd() + "/src/network/utils/configs/" + fileName;
++ arCoefficientsFile.open((const char *) arCoefficientFilePath.c_str(), ios::in);
++
++ if (arCoefficientsFile)
++ {
++ while(arCoefficientsFile.getline(line, 256)) {
++ currentCoefficientNumber = atoi(line); // This is the current number of coeficients
++ j = 0;
++ for( i=0 ; i <= currentCoefficientNumber ; i++) {
++ // We need to go to the next coefficient
++ while(line[j] != ' ' && line[j] != '\t') {
++ j++;
++ }
++ while(line[j] == ' ' || line[j] == '\t') {
++ j++;
++ }
++ arCurrentCoefficient = atof(line + j);
++ arCoefficientsVector.push_back(arCurrentCoefficient);
++ }
++
++ m_arCoefficientsMap.insert(pair<int,vector<double> > (currentCoefficientNumber,arCoefficientsVector));
++ arCoefficientsVector.clear();
++ }
++ }
++ else
++ {
++ NS_LOG_ERROR("File (AR model) " << arCoefficientFilePath << " not found: Please fix");
++ return false;
++ }
++
++ //DEBUGGING
++ #ifdef NS3_LOG_ENABLE
++ if (g_debug)
++ {
++ //Print the m_transitionMatrix map
++ printf ("---AR Coefficients Vector---\n");
++ for (iter = m_arCoefficientsMap.begin(); iter != m_arCoefficientsMap.end(); iter ++ )
++ {
++ printf ("KEY %2d - ", iter->first);
++ for (i = 0; i < (int) (iter->second).size(); i++)
++ {
++ printf ("%1.8f ", (iter->second)[i]);
++ }
++ printf ("\n");
++ }
++ }
++
++ #endif //NS3_LOG_ENABLE
++
++ arCoefficientsFile.close();
++
++ return true;
++}
++
++double ArModel::DoCalcRxPower (double txPowerDbm, Ptr<MobilityModel> a, Ptr<MobilityModel> b) const
++{
++ NS_LOG_FUNCTION("---------NEW PACKET---------" << Simulator::Now().GetSeconds());
++ double rxPowerDbm;
++ double arOutput;
++ double fastFadingRandomValue;
++ double snr;
++ NormalVariable fastFading (0.0, m_ffVariance);
++
++ rxPowerDbm = m_propagationLoss->CalcRxPower(txPowerDbm, a, b);
++
++ //Calculate the SNR
++// snr = rxPowerDbm - 10 * log10(m_noise);
++ //Force the channel to get a fixed SNR
++ snr = 10.0;
++
++ /* Then we calculate the AR model output */
++ arOutput = GetCurrentArValue (a, b);
++
++ /* We also calculate the fast fading value */
++ if(m_order) {
++ fastFadingRandomValue = fastFading.GetValue();
++ } else {
++ fastFadingRandomValue = 0;
++ }
++
++ NS_LOG_DEBUG("Received packet (SNR = " << snr << " dB) : TX power (" << txPowerDbm << " dBm) RX power (" << rxPowerDbm << \
++ " dBm) + AR Output (" << arOutput << ") + Fast Fading (" << fastFadingRandomValue << ")");
++
++ if (m_errorModel)
++ {
++ m_errorModel->SetUnwrappedSnr(snr, arOutput, fastFadingRandomValue);
++ }
++ else
++ NS_LOG_WARN("No Bursty Error Model found");
++
++ return rxPowerDbm;
++}
++
++double ArModel::GetArCoefficient(int key, int vectorPosition) const
++{
++
++ double arCoefficient;
++ coefSetIter_t iter = m_arCoefficientsMap.find(key);
++ if(iter != m_arCoefficientsMap.end())
++ {
++ if (vectorPosition < (signed) iter->second.size())
++ arCoefficient = (iter->second) [vectorPosition];
++ }
++ else {
++ NS_LOG_ERROR ("AR coefficient not found");
++ arCoefficient = 0.0;
++ }
++
++// NS_LOG_FUNCTION(key << vectorPosition << arCoefficient);
++
++ return arCoefficient;
++}
++
++
++double ArModel::GetCurrentArValue (Ptr<MobilityModel> sender, Ptr<MobilityModel> receiver) const
++{
++
++ bool txFound = false;
++ bool rxFound = false;
++ ChannelKey key;
++ channelSetIter_t channelKeyIter;
++ Ptr<ArChannelEntry> channel;
++ u_int32_t i;
++ int currentSize;
++ double currentSnr;
++ vector<double> previousSNR;
++ NormalVariable randomArNoise (0.0, pow(m_stdDevDb,2));
++ NormalVariable randomNoise (0.0, m_variance);
++
++ //We need to get the transmitter and the receiver -- Pending work --> Search a smart solution
++ for (i=0;i < NodeList().GetNNodes(); i ++)
++ {
++ Ptr<MobilityModel> temp = (NodeList().GetNode(i))->GetObject<MobilityModel> ();
++ if ((temp == sender) && (txFound == false))
++ {
++ txFound = true;
++ key.SetTx (i);
++ }
++ if ((temp == receiver) && (rxFound == false))
++ {
++ rxFound = true;
++ key.SetRx (i);
++ }
++ }
++
++ NS_LOG_FUNCTION (key.GetTx() << key.GetRx());
++
++ channelKeyIter = m_channelSetMap.find(key);
++
++ if (channelKeyIter != m_channelSetMap.end())
++ channel = channelKeyIter->second;
++ else
++ channel = 0;
++
++ //If there is a channel defined, get the current SNR value
++ if (channel != 0)
++ {
++ currentSize = channel->GetPreviousSnr(previousSNR);
++ //If we have any packet buffered, use the Yule-Walker expression
++ if (currentSize && m_order)
++ {
++ currentSnr = randomNoise.GetValue();
++ #ifdef NS3_LOG_ENABLE
++ if (g_debug)
++ {
++ printf("Slow fading: SV[i] = ");
++ }
++ #endif //NS3_LOG_ENABLE
++ if (currentSize < m_order)
++ {
++
++ for (i=0; i < (unsigned) currentSize; i++)
++ {
++ currentSnr -= previousSNR[i] * GetArCoefficient(currentSize, currentSize -i);
++ #ifdef NS3_LOG_ENABLE
++ if (g_debug)
++ {
++ printf("a [%d,%d] (%f) * SV [i-%d] (%f) ", currentSize , currentSize - i, GetArCoefficient(currentSize, currentSize -i), \
++ currentSize - i, previousSNR[i] );
++ if ( i != (unsigned) currentSize - 1)
++ printf("+ ");
++ }
++ #endif //NS3_LOG_ENABLE
++
++ }
++ #ifdef NS3_LOG_ENABLE
++ if (g_debug)
++ printf(" = %f\n", currentSnr);
++ #endif //NS3_LOG_ENABLE
++ }
++ else
++ {
++ for (i=0; i < (unsigned) currentSize; i++)
++ {
++ currentSnr -= previousSNR[i] * GetArCoefficient(m_order, currentSize -i);
++ #ifdef NS3_LOG_ENABLE
++ if (g_debug)
++ {
++ printf("a [%d,%d] (%f) * SV [i-%d] (%f) ", m_order , currentSize - i, GetArCoefficient(m_order, currentSize -i), \
++ currentSize - i, previousSNR[i] );
++ if ( i != (unsigned) currentSize - 1)
++ printf("+ ");
++ }
++ #endif //NS3_LOG_ENABLE
++
++ }
++ #ifdef NS3_LOG_ENABLE
++ if (g_debug)
++ printf(" = %f\n", currentSnr);
++ #endif //NS3_LOG_ENABLE
++ }
++ }
++
++
++ //When we have an empty queue (currentSize == 0) -> We set the Slow Varying value
++ //as a random number (Normal Variable with average centered at 0.0 and a variance
++ //equal to m_stdDevDb
++ else
++ {
++ currentSnr = randomArNoise.GetValue();
++ if (g_debug)
++ printf("Slow fading: SV[i] = %f\n", currentSnr);
++ }
++
++ if (m_order)
++ channel->UpdateSnr(currentSnr);
++ }
++ else
++ NS_LOG_ERROR("AR propagation loss model does not know the current tx/rx pair" << key.GetTx() << "/" << key.GetRx() );
++
++ return currentSnr;
++}
++
++
++std::string ArModel::GetCwd () {
++ NS_LOG_FUNCTION_NOARGS();
++ char buf[FILENAME_MAX];
++ char* succ = getcwd(buf, FILENAME_MAX);
++ if (succ)
++ return std::string(succ);
++ return ""; // raise a flag, throw an exception, ...
++}
++
++NS_OBJECT_ENSURE_REGISTERED (BurstyErrorModel);
++
++TypeId
++BurstyErrorModel::GetTypeId(void) {
++ static TypeId tid = TypeId ("ns3::BurstyErrorModel")
++ .SetParent<ErrorModel> ()
++ .AddConstructor<BurstyErrorModel> ()
++ .AddAttribute("BearModel",
++ "Flag to decide the error model decider to use",
++ EnumValue(BEAR_MODEL),
++ MakeEnumAccessor(&BurstyErrorModel::m_arModel),
++ MakeEnumChecker(NO_ERROR_MODEL, "NO_ERROR_MODEL",
++ BEAR_MODEL, "BEAR_MODEL",
++ SHADOWING_MODEL, "SHADOWING_MODEL"))
++ .AddAttribute ("RanVar",
++ "Random variable which determine a packet to be successfully received or not",
++ RandomVariableValue (UniformVariable (0.0, 1.0)),
++ MakeRandomVariableAccessor (&BurstyErrorModel::m_ranvar),
++ MakeRandomVariableChecker ())
++ .AddTraceSource ("BearRxTrace",
++ "Packet tracing",
++ MakeTraceSourceAccessor (&BurstyErrorModel::m_rxTrace))
++ ;
++ return tid;
++}
++
++BurstyErrorModel::BurstyErrorModel()
++{
++ NS_LOG_FUNCTION_NOARGS();
++
++ m_arModel = BEAR_MODEL;
++
++ burstyErrorModelParams_t dataLogParams = {1.24, 0.366, 6.88, 3, 16};
++ burstyErrorModelParams_t ackLogParams = {1.00, 0.886, 6.88, 0, 13};
++ burstyErrorModelParams_t bcastCtrlLogParams = {1.9, 0.6, 0.0, 0, 10};
++ m_dataLogParams = dataLogParams;
++ m_ackLogParams = ackLogParams;
++ m_bcastCtrlLogParams = bcastCtrlLogParams;
++}
++
++BurstyErrorModel::~BurstyErrorModel()
++{
++ NS_LOG_FUNCTION_NOARGS();
++}
++
++void BurstyErrorModel::SetRxCallback(BearRxCallback_t callback)
++{
++ NS_LOG_FUNCTION_NOARGS();
++ m_rxCallback = callback;
++}
++
++bool BurstyErrorModel::DoCorrupt(Ptr<Packet> packet)
++{
++ NS_LOG_FUNCTION(m_unwrappedSnr.totalSnr);
++
++ bool rxError;
++ packetInfo_t packetInfo = ParsePacket(packet);
++
++ //Decide whether the frame is correct or not according to the frame type (data, TCP or broadcast/control)
++ if ((packetInfo.type == UDP_DATA || packetInfo.type == TCP_DATA) && (packetInfo.payloadLength > 4)) //Discard ACKs TCP
++ {
++ rxError = CorruptDataFrame(packet);
++ }
++ else if (packetInfo.type == TCP_DATA && packetInfo.payloadLength < 4 \
++ && (!(packetInfo.tcpHdr.GetFlags() & 0x02) && !(packetInfo.tcpHdr.GetFlags() & 0x01))) //TCP ACK particular logistic function
++ {
++ rxError = CorruptAckFrame(packet);
++
++ }
++ else if (packetInfo.wifiHdr.IsCtl() || packetInfo.wifiHdr.IsMgt() || \
++ (packetInfo.wifiHdr.GetAddr1()).IsBroadcast() || \
++ packetInfo.ipv4Hdr.GetDestination().IsBroadcast())
++ rxError = CorruptBcastCtrlFrame(packet);
++ else
++ rxError = false;
++
++ //Tracing and callbacks
++ m_rxTrace (packet, Simulator::Now(), rxError, m_unwrappedSnr.propagationSnr, m_unwrappedSnr.slowFading, m_unwrappedSnr.fastFading);
++
++ if (!m_rxCallback.IsNull ())
++ {
++ m_rxCallback (packet, Simulator::Now(), rxError, m_unwrappedSnr.propagationSnr, m_unwrappedSnr.slowFading, m_unwrappedSnr.fastFading);
++ }
++ return rxError;
++}
++
++bool BurstyErrorModel::CorruptDataFrame(Ptr<Packet>)
++{
++ NS_LOG_FUNCTION_NOARGS();
++ double fer;
++ double value;
++ bool error;
++
++ //Reception decision
++ switch (m_arModel) {
++
++ case NO_ERROR_MODEL:
++ fer = 0.0;
++ break;
++ case BEAR_MODEL:
++ fer = GetBearFer(&m_dataLogParams);
++ break;
++ case SHADOWING_MODEL:
++ if (m_unwrappedSnr.totalSnr < 9)
++ fer = 1.0;
++ else
++ fer = 0.0;
++ break;
++
++ default:
++ NS_LOG_ERROR("Error model not found... Please fix");
++ fer = 0.0;
++ break;
++ }
++ //Use a random value to decide if the frame is received correctly
++ value = m_ranvar.GetValue();
++ NS_LOG_DEBUG ("Random value (" << value << ") < FER (" << fer << ")");
++ if (value < fer)
++ {
++ NS_LOG_LOGIC("CORRUPT!!");
++ error = true;
++ }
++ else
++ {
++ NS_LOG_LOGIC("CORRECT!!");
++ error = false;
++ }
++ return error;
++}
++
++bool BurstyErrorModel::CorruptAckFrame(Ptr<Packet>)
++{
++ NS_LOG_FUNCTION_NOARGS();
++ double fer;
++// double value;
++ bool error;
++
++ //Reception decision
++ switch (m_arModel) {
++
++ case NO_ERROR_MODEL:
++ fer = 0.0;
++ break;
++ case BEAR_MODEL:
++// fer = GetBearFer(&m_ackLogParams);
++ fer = 0.0; //Test version --> All ACK (TCP) are received correctly
++
++ break;
++ case SHADOWING_MODEL:
++ if (m_unwrappedSnr.totalSnr < 8)
++ fer = 1.0;
++ else
++ fer = 0.0;
++ break;
++
++ default:
++ NS_LOG_ERROR("Error model not found... Please fix");
++ fer = 0.0;
++ break;
++ }
++ //Use a random value to decide if the frame is received correctly
++// value = m_ranvar.GetValue();
++// NS_LOG_UNCOND ("Random value (" << value << ") < FER (" << fer << ")");
++
++ //Force ACK to be correct
++// return false;
++
++ if (m_ranvar.GetValue() < fer)
++ error = true;
++ else
++ error = false;
++
++ return error;
++}
++
++bool BurstyErrorModel::CorruptBcastCtrlFrame(Ptr<Packet>)
++{
++ NS_LOG_FUNCTION_NOARGS();
++ double fer;
++ double value;
++ bool error;
++ //Reception decision
++ switch (m_arModel) {
++
++ case NO_ERROR_MODEL:
++ fer = 0.0;
++ break;
++ case BEAR_MODEL:
++ fer = GetBearFer(&m_bcastCtrlLogParams);
++ break;
++ case SHADOWING_MODEL:
++ if (m_unwrappedSnr.totalSnr < 1.7)
++ fer = 1.0;
++ else
++ fer = 0.0;
++ break;
++
++ default:
++ NS_LOG_ERROR("Error model not found... Please fix");
++ fer = 0.0;
++ break;
++ }
++ //Use a random value to decide if the frame is received correctly
++ value = m_ranvar.GetValue();
++ NS_LOG_DEBUG ("Random value (" << value << ") < FER (" << fer << ")");
++
++ //// In order not to get an ARP message lost which cut the measurement out, force the broadcast frames to be correct
++ return false;
++
++ if (m_ranvar.GetValue() < fer)
++ error = true;
++ else
++ error = false;
++
++ return error;
++}
++
++double BurstyErrorModel::GetBearFer(burstyErrorModelParams_t *params)
++{
++ NS_LOG_FUNCTION_NOARGS();
++ double fer;
++
++ if (m_unwrappedSnr.totalSnr < params->lowThreshold)
++ fer = 1;
++ else if (m_unwrappedSnr.totalSnr < params->highThreshold)
++ {
++ fer = params->a / (1 + exp(params->b * (m_unwrappedSnr.totalSnr - params->c)));
++ NS_LOG_DEBUG ("FER = " << params->a << " / (1 + e^(" << params->b << "* (" << m_unwrappedSnr.totalSnr << \
++ " - " << params->c << "))) = " << fer);
++ }
++ else
++ fer = 0;
++ return fer;
++}
++
++void BurstyErrorModel::DoReset()
++{
++ NS_LOG_FUNCTION_NOARGS();
++}
++
++void BurstyErrorModel::SetUnwrappedSnr(double propagationSnr, double slowFadingComponent, double fastFadingComponent)
++{
++ NS_LOG_FUNCTION(propagationSnr << slowFadingComponent << fastFadingComponent);
++ m_unwrappedSnr.propagationSnr = propagationSnr;
++ m_unwrappedSnr.slowFading = slowFadingComponent;
++ m_unwrappedSnr.fastFading = fastFadingComponent;
++
++ m_unwrappedSnr.totalSnr = propagationSnr + slowFadingComponent + fastFadingComponent;
++ //Do not allow non-positive SNRs
++ if (m_unwrappedSnr.totalSnr < 0)
++ m_unwrappedSnr.totalSnr = 0;
++}
++
++packetInfo_t BurstyErrorModel::ParsePacket (Ptr<Packet> packet)
++{
++ NS_LOG_FUNCTION(packet);
++
++ packetInfo_t packetInfo;
++ Ptr<Packet> pktCopy = packet->Copy();
++
++ pktCopy->RemoveHeader(packetInfo.wifiHdr);
++
++ if (packetInfo.wifiHdr.IsData())
++ {
++ pktCopy->RemoveHeader(packetInfo.llcHdr);
++ switch (packetInfo.llcHdr.GetType())
++ {
++ case 0x0806: //ARP
++ packetInfo.type = ARP_PACKET;
++ break;
++ case 0x0800: //IP packet
++ pktCopy->RemoveHeader(packetInfo.ipv4Hdr);
++ switch (packetInfo.ipv4Hdr.GetProtocol())
++ {
++ case 6: //TCP
++ pktCopy->RemoveHeader(packetInfo.tcpHdr);
++ packetInfo.type = TCP_DATA;
++ break;
++ case 17: //UDP
++ pktCopy->RemoveHeader(packetInfo.udpHdr);
++ packetInfo.type = UDP_DATA;
++ break;
++ default:
++ NS_LOG_ERROR ("Protocol not implemented yet (IP header) --> " << packetInfo.ipv4Hdr.GetProtocol());
++ break;
++ }
++ break;
++ default:
++ NS_LOG_ERROR ("Protocol not implemented yet (LLC header) --> " << packetInfo.llcHdr.GetType());
++ break;
++ }
++ }
++ else if (packetInfo.wifiHdr.IsAck())
++ {
++ packetInfo.type = IEEE_80211_ACK;
++ }
++ else // 802.11 Control/Management frame
++ {
++ packetInfo.type = IEEE_80211_NODATA;
++ }
++
++ packetInfo.payloadLength = pktCopy->GetSize() - 4; //Last four bytes are used for tagging
++
++ return packetInfo;
++}
++
++
++
++
++
+diff -uprNB ns-3.13/src/ar-model/model/ar-model.h b/src/ar-model/model/ar-model.h
+--- ns-3.13/src/ar-model/model/ar-model.h 1970-01-01 01:00:00.000000000 +0100
++++ b/src/ar-model/model/ar-model.h 2012-04-16 11:50:12.000000000 +0200
+@@ -0,0 +1,433 @@
++/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
++/*
++ * Copyright (c) 2011 Universidad de Cantabria
++ *
++ * 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
++ *
++ * Author: David Gómez Fernández <dgomez@tlmat.unican.es>
++ * Ramón Agüero Calvo <ramon@tlmat.unican.es>
++ */
++
++#ifndef AR_MODEL_H_
++#define AR_MODEL_H_
++
++#include <string>
++#include <vector>
++#include <map>
++#include <unistd.h>
++
++#include "ns3/object.h"
++#include "ns3/random-variable.h"
++
++//AR model will play the role as the derived classes of both Error and Propagation Loss models
++#include "ns3/error-model.h"
++#include "ns3/mobility-model.h"
++#include "ns3/propagation-loss-model.h"
++
++#include "ns3/event-id.h"
++
++//Needed to parse the packet content (BurstyErrorModel::ParsePacket)
++#include "ns3/wifi-mac-header.h"
++#include "ns3/llc-snap-header.h"
++#include "ns3/ipv4-header.h"
++#include "ns3/tcp-header.h"
++#include "ns3/udp-header.h"
++
++//Tracing
++#include "ns3/traced-value.h"
++#include "ns3/traced-callback.h"
++
++using namespace std;
++namespace ns3 {
++
++class Packet;
++class BurstyErrorModel;
++typedef int32_t nsaddr_t;
++
++struct prevValues_t {
++ double snr;
++ Time time;
++};
++
++typedef struct {
++ double propagationSnr;
++ double slowFading;
++ double fastFading;
++ double totalSnr;
++} snrComposition_t;
++
++class ChannelKey {
++public:
++ ChannelKey() {}
++ ChannelKey (nsaddr_t tx, nsaddr_t rx) : m_tx(tx), m_rx(rx) {}
++ virtual ~ChannelKey () {}
++
++ bool operator < (const ChannelKey& key) const {
++ if(m_tx < key.m_tx) {
++ return true;
++ } else if(m_tx == key.m_tx) {
++ return(m_rx < key.m_rx);
++ } else {
++ return false;
++ }
++ }
++
++ u_int32_t GetRx () const;
++ u_int32_t GetTx () const;
++ void SetRx (u_int32_t rx);
++ void SetTx (u_int32_t tx);
++
++private:
++ int m_tx;
++ int m_rx;
++};
++
++class ArChannelEntry: public Object {
++public:
++ /**
++ * Constructor
++ */
++ ArChannelEntry ();
++ /**
++ * \param order Auto Regressive filter order
++ * \
++ */
++ ArChannelEntry (int order, double coherenceTime);
++
++ /**
++ * Destructor
++ */
++ ~ArChannelEntry ();
++ /**
++ * When a new frame arrives, we need to update the vector that contains the AR order previous frames information; furthermore, we must
++ * update the ArChannelEntry oldest received frame timeout
++ * \param snr SNR read from the physical layer
++ * \param order Order of the AR filter
++ */
++ void UpdateSnr (double snr);
++
++ /**
++ * \param previousSnr Vector which will hold the SNR values (window)
++ * \returns The size of the input vector
++ */
++ int GetPreviousSnr (vector<double> &previousSnr);
++
++ /**
++ * \param coherenceTime Channel coherence
++ * \returns The instant the next timeout should be invoked
++ */
++ double GetNextTimeout();
++ /**
++ * \brief Handle the timeout event when the coherence timer expires
++ */
++ void HandleCoherenceTimeout ();
++
++ u_int32_t GetRx () const;
++ u_int32_t GetTx () const;
++ void SetRx (u_int32_t rx);
++ void SetTx (u_int32_t tx);
++
++ /**
++ * \brief Print the captured packet queue (AR model window)
++ */
++ void DisplaySnrQueue (void);
++
++private:
++
++ u_int32_t m_tx;
++ u_int32_t m_rx;
++
++ //Vector that stores the SNR and the timestamp of the overheard packets (Size set by the AR filter order)
++ vector<struct prevValues_t> m_previousSnr;
++
++ //One timer per ChannelEntry object
++ EventId m_coherenceTimeout;
++
++ int m_order;
++ double m_coherenceTime;
++};
++
++
++class ArModel: public PropagationLossModel
++{
++public:
++ /**
++ * Attribute handler
++ */
++ static TypeId GetTypeId (void);
++ /**
++ * Default constructor
++ */
++ ArModel ();
++
++ /**
++ * Default destructor
++ */
++ virtual ~ArModel ();
++
++ /**
++ * \param name the name of the model to set
++ * \param n0 the name of the attribute to set
++ * \param v0 the value of the attribute to set
++ * \param n1 the name of the attribute to set
++ * \param v1 the value of the attribute to set
++ * \param n2 the name of the attribute to set
++ * \param v2 the value of the attribute to set
++ * \param n3 the name of the attribute to set
++ * \param v3 the value of the attribute to set
++ * \param n4 the name of the attribute to set
++ * \param v4 the value of the attribute to set
++ * \param n5 the name of the attribute to set
++ * \param v5 the value of the attribute to set
++ * \param n6 the name of the attribute to set
++ * \param v6 the value of the attribute to set
++ * \param n7 the name of the attribute to set
++ * \param v7 the value of the attribute to set
++ *
++ * Configure a propagation delay for this channel.
++ */
++ void SetPropagationLoss (std::string name,
++ std::string n0 = "", const AttributeValue &v0 = EmptyAttributeValue (),
++ std::string n1 = "", const AttributeValue &v1 = EmptyAttributeValue (),
++ std::string n2 = "", const AttributeValue &v2 = EmptyAttributeValue (),
++ std::string n3 = "", const AttributeValue &v3 = EmptyAttributeValue (),
++ std::string n4 = "", const AttributeValue &v4 = EmptyAttributeValue (),
++ std::string n5 = "", const AttributeValue &v5 = EmptyAttributeValue (),
++ std::string n6 = "", const AttributeValue &v6 = EmptyAttributeValue (),
++ std::string n7 = "", const AttributeValue &v7 = EmptyAttributeValue ());
++
++ /**
++ * \brief Set the propagation loss model
++ * \param loss Pointer to the propagation loss model to set
++ */
++ void SetPropagationLoss (Ptr<PropagationLossModel> loss);
++
++ /**
++ * \brief Set the error model
++ * \param error Pointer to the error model to set
++ */
++ void SetErrorModel (Ptr<BurstyErrorModel> error);
++
++ /**
++ * \returns The Bursty error model linked to this class
++ */
++ Ptr<BurstyErrorModel> GetErrorModel ();
++ /**
++ * \param fileName Name of the file which holds the AR filter coefficient
++ */
++ bool GetCoefficients (string fileName);
++
++ /**
++ * \param key AR coefficient set map key value
++ * \param vectorPosition The position in which stays the desired coefficient
++ * \returns AR coefficient
++ */
++ double GetArCoefficient (int key, int vectorPosition) const;
++
++ /**
++ * \brief
++ * \param tx Transmitter index
++ * \param rx Reveiver index
++ * \returns Auto Regressive filter obtained value (dB)
++ */
++ double GetCurrentArValue (Ptr<MobilityModel> sender, Ptr<MobilityModel> receiver) const;
++
++private:
++
++
++ //PropagationLossModel virtual (abstract) method --> Equivalent to ns-2 arModel::Pr (PacketStamp *t_, PacketStamp *r_, WirelessPhy *ifp_)
++ virtual double DoCalcRxPower (double txPowerDbm,
++ Ptr<MobilityModel> a,
++ Ptr<MobilityModel> b) const;
++
++ /* AR mode parameters */
++ int m_order; /* Order of the AR filter */
++ double m_variance; /* Input noise variance */
++
++ double m_ffVariance; /* Fast Fading variance */
++
++ double m_coherenceTime; /* Coherence time */
++ bool m_symmetry; /* Am I using symmetry? */
++
++ /* Other parameters of the channel */
++ double m_pathLossExp; /* path loss exponent */
++ double m_stdDevDb; /* standard deviation (dB) */
++
++ double m_noise; /* Noise Power used to model the SNR */
++
++ RandomVariable m_ranvar;
++
++ /* All the channels (one per tx/rx pair) */
++ typedef map<ChannelKey, Ptr <ArChannelEntry> > channelSet_t;
++ typedef channelSet_t::const_iterator channelSetIter_t;
++
++ channelSet_t m_channelSetMap;
++
++ /* The coeficients of the AR model */
++ typedef map<int, vector<double> > coefSet_t;
++ typedef coefSet_t::const_iterator coefSetIter_t;
++
++ coefSet_t m_arCoefficientsMap;
++
++ //Generic propagation model
++ Ptr<PropagationLossModel> m_propagationLoss;
++
++ //BEAR model
++ Ptr<BurstyErrorModel> m_errorModel;
++
++ //Coefficient file name
++ string m_coefficientsFile;
++
++protected:
++ /**
++ * \return The current path (in string format)
++ */
++ static std::string GetCwd ();
++
++};
++
++//Error model selection
++typedef enum {
++ NO_ERROR_MODEL,
++ BEAR_MODEL,
++ SHADOWING_MODEL
++} errorModelOption_t;
++
++//Parameter to carry out the error decision
++typedef struct {
++ double a;
++ double b;
++ double c;
++ int lowThreshold;
++ int highThreshold;
++} burstyErrorModelParams_t;
++
++enum PacketType{
++ IEEE_80211_ACK,
++ IEEE_80211_NODATA,
++ ARP_PACKET,
++ UDP_DATA,
++ TCP_DATA
++};
++
++typedef struct {
++ WifiMacHeader wifiHdr;
++ LlcSnapHeader llcHdr;
++ Ipv4Header ipv4Hdr;
++ TcpHeader tcpHdr;
++ UdpHeader udpHdr;
++ u_int16_t payloadLength;
++ PacketType type;
++
++} packetInfo_t;
++
++class BurstyErrorModel: public ErrorModel
++{
++public:
++ /**
++ * arg1: packet received successfully
++ * arg2: packet timestamp
++ * arg3: Boolean that represents whether a packet has been succesfully received or not
++ * arg4: snr (global) of packet
++ * arg5: snr due to the AR model (Slow fading)
++ * arg6: Fast Fading related SNR
++ */
++ typedef Callback<void,Ptr<Packet>, Time, bool, double, double, double> BearRxCallback_t;
++
++ /**
++ * Attribute handler
++ */
++ static TypeId GetTypeId (void);
++ /**
++ * Default constructor
++ */
++ BurstyErrorModel ();
++ /**
++ * Default destructor
++ */
++ virtual ~BurstyErrorModel ();
++ /**
++ * \brief Apply a logistic function to decide whether a data frame is correct or not
++ * \param packet The packet received
++ * \returns True if the packet is corrupted
++ */
++ bool CorruptDataFrame (Ptr<Packet> packet);
++ /**
++ * \brief Apply a logistic function to decide whether an ack (TCP) frame is correct or not
++ * \param packet The packet received
++ * \returns True if the packet is corrupted
++ */
++ bool CorruptAckFrame (Ptr<Packet> packet);
++ /**
++ * \brief Apply a logistic function to decide whether a broadcast/control/management frame is correct or not
++ * \param packet The packet received
++ * \returns True if the packet is corrupted
++ */
++ bool CorruptBcastCtrlFrame (Ptr<Packet> packet);
++
++ /**
++ * \brief Use the logistic function to obtain the FER
++ * \param params Struct that holds the logistic function parameters
++ * \returns The FER value
++ */
++ double GetBearFer (burstyErrorModelParams_t *params);
++
++ /**
++ * \param rxComponent Value obtained from the propagation loss model
++ * \param slowFadingComponent Auto regressive component that tries to emulate the Slow Fading wireless channel behaviour
++ * \param fastFadingComponent Random value which represent Fast Fading
++ */
++ void SetUnwrappedSnr (double propagationSnr, double slowFadingComponent, double fastFadingComponent);
++
++ //Callback invoked when a packet is received by the error model object
++ void SetRxCallback (BearRxCallback_t callback);
++
++ /**
++ * \param packet Packet received by the node
++ * \returns Struct which contains the info relative to the packet
++ */
++ packetInfo_t ParsePacket (Ptr<Packet> packet);
++
++private:
++ //ErrorModel virtual (abstract) methods
++ virtual bool DoCorrupt (Ptr<Packet>);
++ virtual void DoReset (void);
++
++ RandomVariable m_ranvar;
++
++ //Logistic function configuration parameters
++ burstyErrorModelParams_t m_dataLogParams;
++ burstyErrorModelParams_t m_ackLogParams;
++ burstyErrorModelParams_t m_bcastCtrlLogParams;
++
++ //Choose among the different options (0- No model, 1- BEAR model, 2- Shadowing model)
++ errorModelOption_t m_arModel;
++
++ snrComposition_t m_unwrappedSnr;
++
++ // Tracing
++ /**
++ * The trace source fired when a packet ends the reception process from
++ * the medium.
++ *
++ * \see class CallBackTraceSource
++ */
++ TracedCallback<Ptr<const Packet>, Time, bool, double, double, double> m_rxTrace;
++ BearRxCallback_t m_rxCallback;
++
++};
++
++
++} //namespace ns3
++#endif /* AR_MODEL_H_ */
+diff -uprNB ns-3.13/src/ar-model/waf b/src/ar-model/waf
+--- ns-3.13/src/ar-model/waf 1970-01-01 01:00:00.000000000 +0100
++++ b/src/ar-model/waf 2011-12-23 22:09:34.000000000 +0100
+@@ -0,0 +1 @@
++exec "`dirname "$0"`"/../../waf "$@"
+\ No newline at end of file
+diff -uprNB ns-3.13/src/ar-model/wscript b/src/ar-model/wscript
+--- ns-3.13/src/ar-model/wscript 1970-01-01 01:00:00.000000000 +0100
++++ b/src/ar-model/wscript 2012-04-30 19:02:04.000000000 +0200
+@@ -0,0 +1,28 @@
++## -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*-
++
++def build(bld):
++ obj = bld.create_ns3_module('ar-model', ['core','wifi','network','internet','propagation'])
++ obj.source = [
++ 'model/ar-model.cc'
++ ]
++
++ obj_test = bld.create_ns3_module_test_library('ar-model')
++ obj_test.source = [
++ ]
++
++ headers = bld.new_task_gen(features=['ns3header'])
++ headers.module = 'ar-model'
++ headers.source = [
++ 'model/ar-model.h'
++ ]
++
++#if bld.env['ENABLE_GSL']:
++# obj.use.extend(['GSL', 'GSLCBLAS', 'M'])
++# obj_test.use.extend(['GSL', 'GSLCBLAS', 'M'])
++
++#if (bld.env['ENABLE_EXAMPLES']):
++# bld.add_subdirs('examples')
++
++#bld.ns3_python_bindings()
++
++
+Binary files ns-3.13/src/bridge/bindings/callbacks_list.pyc and b/src/bridge/bindings/callbacks_list.pyc differ
+Binary files ns-3.13/src/bridge/bindings/modulegen__gcc_LP64.pyc and b/src/bridge/bindings/modulegen__gcc_LP64.pyc differ
+Binary files ns-3.13/src/config-store/bindings/callbacks_list.pyc and b/src/config-store/bindings/callbacks_list.pyc differ
+Binary files ns-3.13/src/config-store/bindings/modulegen_customizations.pyc and b/src/config-store/bindings/modulegen_customizations.pyc differ
+Binary files ns-3.13/src/config-store/bindings/modulegen__gcc_LP64.pyc and b/src/config-store/bindings/modulegen__gcc_LP64.pyc differ
+Binary files ns-3.13/src/core/bindings/callbacks_list.pyc and b/src/core/bindings/callbacks_list.pyc differ
+Binary files ns-3.13/src/core/bindings/modulegen_customizations.pyc and b/src/core/bindings/modulegen_customizations.pyc differ
+Binary files ns-3.13/src/core/bindings/modulegen__gcc_LP64.pyc and b/src/core/bindings/modulegen__gcc_LP64.pyc differ
+Binary files ns-3.13/src/csma/bindings/callbacks_list.pyc and b/src/csma/bindings/callbacks_list.pyc differ
+Binary files ns-3.13/src/csma/bindings/modulegen__gcc_LP64.pyc and b/src/csma/bindings/modulegen__gcc_LP64.pyc differ
+Binary files ns-3.13/src/dsdv/bindings/callbacks_list.pyc and b/src/dsdv/bindings/callbacks_list.pyc differ
+Binary files ns-3.13/src/dsdv/bindings/modulegen__gcc_LP64.pyc and b/src/dsdv/bindings/modulegen__gcc_LP64.pyc differ
+Binary files ns-3.13/src/emu/bindings/callbacks_list.pyc and b/src/emu/bindings/callbacks_list.pyc differ
+Binary files ns-3.13/src/emu/bindings/modulegen_customizations.pyc and b/src/emu/bindings/modulegen_customizations.pyc differ
+Binary files ns-3.13/src/emu/bindings/modulegen__gcc_LP64.pyc and b/src/emu/bindings/modulegen__gcc_LP64.pyc differ
+Binary files ns-3.13/src/energy/bindings/callbacks_list.pyc and b/src/energy/bindings/callbacks_list.pyc differ
+Binary files ns-3.13/src/energy/bindings/modulegen__gcc_LP64.pyc and b/src/energy/bindings/modulegen__gcc_LP64.pyc differ
+Binary files ns-3.13/src/flow-monitor/bindings/callbacks_list.pyc and b/src/flow-monitor/bindings/callbacks_list.pyc differ
+Binary files ns-3.13/src/flow-monitor/bindings/modulegen__gcc_LP64.pyc and b/src/flow-monitor/bindings/modulegen__gcc_LP64.pyc differ
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_16states/HMM_05_EMIS_1.txt b/src/hidden-markov-error-model/configs/HMM_16states/HMM_05_EMIS_1.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_16states/HMM_05_EMIS_1.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_16states/HMM_05_EMIS_1.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,16 @@
++1.000000 0.000000
++0.907866 0.092134
++0.949584 0.050416
++0.991529 0.008471
++0.952190 0.047810
++0.757302 0.242698
++0.865381 0.134619
++0.511230 0.488770
++0.000000 1.000000
++0.123017 0.876983
++0.028815 0.971185
++0.000000 1.000000
++0.001688 0.998312
++0.057188 0.942812
++0.001049 0.998951
++0.001638 0.998362
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_16states/HMM_05_TR_1.txt b/src/hidden-markov-error-model/configs/HMM_16states/HMM_05_TR_1.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_16states/HMM_05_TR_1.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_16states/HMM_05_TR_1.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,17 @@
++16
++0.986590 0.013410 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
++0.405460 0.000002 0.594538 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
++0.000000 0.204189 0.008364 0.787446 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
++0.000000 0.000000 0.105633 0.830920 0.063447 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
++0.000000 0.000000 0.000000 0.159663 0.061536 0.778801 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
++0.000000 0.000000 0.000000 0.000000 0.471413 0.399575 0.129012 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
++0.000000 0.000000 0.000000 0.000000 0.000000 0.380004 0.001163 0.618833 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
++0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.156345 0.398559 0.445096 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
++0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.762173 0.079143 0.158684 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
++0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.074751 0.727129 0.198120 0.000000 0.000000 0.000000 0.000000 0.000000
++0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.621902 0.308740 0.069359 0.000000 0.000000 0.000000 0.000000
++0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.048405 0.791386 0.160209 0.000000 0.000000 0.000000
++0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.310899 0.672090 0.017011 0.000000 0.000000
++0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.008608 0.990207 0.001184 0.000000
++0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.005832 0.687207 0.306961
++0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.125996 0.874004
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_16states/HMM_07_EMIS_1.txt b/src/hidden-markov-error-model/configs/HMM_16states/HMM_07_EMIS_1.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_16states/HMM_07_EMIS_1.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_16states/HMM_07_EMIS_1.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,16 @@
++1.000000 0.000000
++0.000403 0.999597
++1.000000 0.000000
++1.000000 0.000000
++0.998944 0.001056
++0.642183 0.357817
++0.608924 0.391076
++0.365539 0.634461
++0.297332 0.702668
++0.202242 0.797758
++0.182143 0.817857
++0.153194 0.846806
++0.123824 0.876176
++0.172356 0.827644
++0.069549 0.930451
++0.000783 0.999217
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_16states/HMM_07_TR_1.txt b/src/hidden-markov-error-model/configs/HMM_16states/HMM_07_TR_1.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_16states/HMM_07_TR_1.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_16states/HMM_07_TR_1.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,17 @@
++16
++0.647274 0.352726 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
++0.237512 0.223270 0.539218 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
++0.000000 0.002989 0.979007 0.018004 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
++0.000000 0.000000 0.029215 0.721750 0.249035 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
++0.000000 0.000000 0.000000 0.234171 0.169896 0.595933 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
++0.000000 0.000000 0.000000 0.000000 0.337136 0.601506 0.061358 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
++0.000000 0.000000 0.000000 0.000000 0.000000 0.052692 0.359510 0.587798 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
++0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.330470 0.541741 0.127788 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
++0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.319827 0.398819 0.281355 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
++0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.168587 0.712203 0.119210 0.000000 0.000000 0.000000 0.000000 0.000000
++0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.298236 0.489778 0.211986 0.000000 0.000000 0.000000 0.000000
++0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.077230 0.751234 0.171536 0.000000 0.000000 0.000000
++0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.390421 0.559013 0.050565 0.000000 0.000000
++0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.061582 0.487140 0.451278 0.000000
++0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.121439 0.606898 0.271663
++0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.200574 0.799426
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_16states/HMM_09_EMIS_1.txt b/src/hidden-markov-error-model/configs/HMM_16states/HMM_09_EMIS_1.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_16states/HMM_09_EMIS_1.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_16states/HMM_09_EMIS_1.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,16 @@
++1.000000 0.000000
++0.905258 0.094742
++0.726755 0.273245
++1.000000 0.000000
++0.995205 0.004795
++0.361380 0.638620
++0.997753 0.002247
++0.445821 0.554179
++0.000000 1.000000
++0.999940 0.000060
++0.000000 1.000000
++0.169432 0.830568
++0.000483 0.999517
++0.000000 1.000000
++0.000004 0.999996
++0.009604 0.990396
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_16states/HMM_09_TR_1.txt b/src/hidden-markov-error-model/configs/HMM_16states/HMM_09_TR_1.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_16states/HMM_09_TR_1.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_16states/HMM_09_TR_1.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,17 @@
++16
++0.932777 0.067223 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
++0.749783 0.000009 0.250208 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
++0.000000 0.194541 0.000157 0.805303 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
++0.000000 0.000000 0.370826 0.137560 0.491614 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
++0.000000 0.000000 0.000000 0.628274 0.090475 0.281251 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
++0.000000 0.000000 0.000000 0.000000 0.336381 0.431350 0.232269 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
++0.000000 0.000000 0.000000 0.000000 0.000000 0.365050 0.091726 0.543224 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
++0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.242807 0.465648 0.291545 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
++0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.573958 0.177507 0.248535 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
++0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.175650 0.634713 0.189637 0.000000 0.000000 0.000000 0.000000 0.000000
++0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.050319 0.214913 0.734768 0.000000 0.000000 0.000000 0.000000
++0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.318928 0.524213 0.156859 0.000000 0.000000 0.000000
++0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.592322 0.291818 0.115860 0.000000 0.000000
++0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.056726 0.771544 0.171730 0.000000
++0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.112821 0.683063 0.204116
++0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.168550 0.831450
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_16states/HMM_12_EMIS_1.txt b/src/hidden-markov-error-model/configs/HMM_16states/HMM_12_EMIS_1.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_16states/HMM_12_EMIS_1.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_16states/HMM_12_EMIS_1.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,16 @@
++1.000000 0.000000
++0.340218 0.659782
++0.648892 0.351108
++0.878008 0.121992
++0.231267 0.768733
++0.000362 0.999638
++0.581619 0.418381
++0.000001 0.999999
++0.481435 0.518565
++0.054215 0.945785
++0.000000 1.000000
++0.016029 0.983971
++0.011953 0.988047
++0.000000 1.000000
++0.000880 0.999120
++0.002111 0.997889
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_16states/HMM_12_TR_1.txt b/src/hidden-markov-error-model/configs/HMM_16states/HMM_12_TR_1.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_16states/HMM_12_TR_1.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_16states/HMM_12_TR_1.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,17 @@
++16
++0.967694 0.032306 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
++0.575550 0.000000 0.424450 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
++0.000000 0.073443 0.000110 0.926448 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
++0.000000 0.000000 0.167472 0.706125 0.126404 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
++0.000000 0.000000 0.000000 0.778885 0.000000 0.221115 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
++0.000000 0.000000 0.000000 0.000000 0.203018 0.100047 0.696935 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
++0.000000 0.000000 0.000000 0.000000 0.000000 0.114997 0.644634 0.240369 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
++0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.585812 0.322129 0.092058 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
++0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.080460 0.002351 0.917189 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
++0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.156829 0.814422 0.028749 0.000000 0.000000 0.000000 0.000000 0.000000
++0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.250701 0.285288 0.464011 0.000000 0.000000 0.000000 0.000000
++0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.042496 0.781932 0.175572 0.000000 0.000000 0.000000
++0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.208301 0.790529 0.001169 0.000000 0.000000
++0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.038112 0.782506 0.179381 0.000000
++0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.008524 0.697452 0.294024
++0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.140410 0.859590
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_16states/HMM_all_EMIS.txt b/src/hidden-markov-error-model/configs/HMM_16states/HMM_all_EMIS.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_16states/HMM_all_EMIS.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_16states/HMM_all_EMIS.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,68 @@
++1.000000 0.000000
++0.907866 0.092134
++0.949584 0.050416
++0.991529 0.008471
++0.952190 0.047810
++0.757302 0.242698
++0.865381 0.134619
++0.511230 0.488770
++0.000000 1.000000
++0.123017 0.876983
++0.028815 0.971185
++0.000000 1.000000
++0.001688 0.998312
++0.057188 0.942812
++0.001049 0.998951
++0.001638 0.998362
++%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
++1.000000 0.000000
++0.000403 0.999597
++1.000000 0.000000
++1.000000 0.000000
++0.998944 0.001056
++0.642183 0.357817
++0.608924 0.391076
++0.365539 0.634461
++0.297332 0.702668
++0.202242 0.797758
++0.182143 0.817857
++0.153194 0.846806
++0.123824 0.876176
++0.172356 0.827644
++0.069549 0.930451
++0.000783 0.999217
++%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
++1.000000 0.000000
++0.905258 0.094742
++0.726755 0.273245
++1.000000 0.000000
++0.995205 0.004795
++0.361380 0.638620
++0.997753 0.002247
++0.445821 0.554179
++0.000000 1.000000
++0.999940 0.000060
++0.000000 1.000000
++0.169432 0.830568
++0.000483 0.999517
++0.000000 1.000000
++0.000004 0.999996
++0.009604 0.990396
++%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
++1.000000 0.000000
++0.340218 0.659782
++0.648892 0.351108
++0.878008 0.121992
++0.231267 0.768733
++0.000362 0.999638
++0.581619 0.418381
++0.000001 0.999999
++0.481435 0.518565
++0.054215 0.945785
++0.000000 1.000000
++0.016029 0.983971
++0.011953 0.988047
++0.000000 1.000000
++0.000880 0.999120
++0.002111 0.997889
++%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_16states/HMM_all_TR.txt b/src/hidden-markov-error-model/configs/HMM_16states/HMM_all_TR.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_16states/HMM_all_TR.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_16states/HMM_all_TR.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,68 @@
++0.986590 0.013410 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
++0.405460 0.000002 0.594538 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
++0.000000 0.204189 0.008364 0.787446 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
++0.000000 0.000000 0.105633 0.830920 0.063447 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
++0.000000 0.000000 0.000000 0.159663 0.061536 0.778801 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
++0.000000 0.000000 0.000000 0.000000 0.471413 0.399575 0.129012 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
++0.000000 0.000000 0.000000 0.000000 0.000000 0.380004 0.001163 0.618833 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
++0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.156345 0.398559 0.445096 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
++0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.762173 0.079143 0.158684 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
++0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.074751 0.727129 0.198120 0.000000 0.000000 0.000000 0.000000 0.000000
++0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.621902 0.308740 0.069359 0.000000 0.000000 0.000000 0.000000
++0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.048405 0.791386 0.160209 0.000000 0.000000 0.000000
++0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.310899 0.672090 0.017011 0.000000 0.000000
++0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.008608 0.990207 0.001184 0.000000
++0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.005832 0.687207 0.306961
++0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.125996 0.874004
++%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
++0.647274 0.352726 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
++0.237512 0.223270 0.539218 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
++0.000000 0.002989 0.979007 0.018004 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
++0.000000 0.000000 0.029215 0.721750 0.249035 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
++0.000000 0.000000 0.000000 0.234171 0.169896 0.595933 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
++0.000000 0.000000 0.000000 0.000000 0.337136 0.601506 0.061358 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
++0.000000 0.000000 0.000000 0.000000 0.000000 0.052692 0.359510 0.587798 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
++0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.330470 0.541741 0.127788 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
++0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.319827 0.398819 0.281355 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
++0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.168587 0.712203 0.119210 0.000000 0.000000 0.000000 0.000000 0.000000
++0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.298236 0.489778 0.211986 0.000000 0.000000 0.000000 0.000000
++0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.077230 0.751234 0.171536 0.000000 0.000000 0.000000
++0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.390421 0.559013 0.050565 0.000000 0.000000
++0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.061582 0.487140 0.451278 0.000000
++0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.121439 0.606898 0.271663
++0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.200574 0.799426
++%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
++0.932777 0.067223 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
++0.749783 0.000009 0.250208 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
++0.000000 0.194541 0.000157 0.805303 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
++0.000000 0.000000 0.370826 0.137560 0.491614 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
++0.000000 0.000000 0.000000 0.628274 0.090475 0.281251 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
++0.000000 0.000000 0.000000 0.000000 0.336381 0.431350 0.232269 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
++0.000000 0.000000 0.000000 0.000000 0.000000 0.365050 0.091726 0.543224 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
++0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.242807 0.465648 0.291545 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
++0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.573958 0.177507 0.248535 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
++0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.175650 0.634713 0.189637 0.000000 0.000000 0.000000 0.000000 0.000000
++0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.050319 0.214913 0.734768 0.000000 0.000000 0.000000 0.000000
++0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.318928 0.524213 0.156859 0.000000 0.000000 0.000000
++0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.592322 0.291818 0.115860 0.000000 0.000000
++0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.056726 0.771544 0.171730 0.000000
++0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.112821 0.683063 0.204116
++0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.168550 0.831450
++%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
++0.967694 0.032306 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
++0.575550 0.000000 0.424450 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
++0.000000 0.073443 0.000110 0.926448 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
++0.000000 0.000000 0.167472 0.706125 0.126404 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
++0.000000 0.000000 0.000000 0.778885 0.000000 0.221115 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
++0.000000 0.000000 0.000000 0.000000 0.203018 0.100047 0.696935 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
++0.000000 0.000000 0.000000 0.000000 0.000000 0.114997 0.644634 0.240369 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
++0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.585812 0.322129 0.092058 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
++0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.080460 0.002351 0.917189 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
++0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.156829 0.814422 0.028749 0.000000 0.000000 0.000000 0.000000 0.000000
++0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.250701 0.285288 0.464011 0.000000 0.000000 0.000000 0.000000
++0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.042496 0.781932 0.175572 0.000000 0.000000 0.000000
++0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.208301 0.790529 0.001169 0.000000 0.000000
++0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.038112 0.782506 0.179381 0.000000
++0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.008524 0.697452 0.294024
++0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.140410 0.859590
++%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_01_EMIS_1.txt b/src/hidden-markov-error-model/configs/HMM_3states/HMM_01_EMIS_1.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_01_EMIS_1.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_3states/HMM_01_EMIS_1.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,3 @@
++0.990911 0.009089
++0.628239 0.371761
++0.061126 0.938874
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_01_EMIS_2.txt b/src/hidden-markov-error-model/configs/HMM_3states/HMM_01_EMIS_2.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_01_EMIS_2.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_3states/HMM_01_EMIS_2.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,3 @@
++0.990911 0.009089
++0.628239 0.371761
++0.061126 0.938874
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_01_EMIS_3.txt b/src/hidden-markov-error-model/configs/HMM_3states/HMM_01_EMIS_3.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_01_EMIS_3.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_3states/HMM_01_EMIS_3.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,3 @@
++1.000000 0.000000
++0.642084 0.357916
++0.000000 1.000000
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_01_EMIS_4.txt b/src/hidden-markov-error-model/configs/HMM_3states/HMM_01_EMIS_4.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_01_EMIS_4.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_3states/HMM_01_EMIS_4.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,3 @@
++1.000000 0.000000
++0.642084 0.357916
++0.000000 1.000000
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_01_TR_1.txt b/src/hidden-markov-error-model/configs/HMM_3states/HMM_01_TR_1.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_01_TR_1.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_3states/HMM_01_TR_1.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++3
++0.996310 0.003690 0.000000
++0.014602 0.976775 0.008623
++0.000000 0.012377 0.987623
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_01_TR_2.txt b/src/hidden-markov-error-model/configs/HMM_3states/HMM_01_TR_2.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_01_TR_2.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_3states/HMM_01_TR_2.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++3
++0.996310 0.003690 0.000000
++0.014602 0.976775 0.008623
++0.000000 0.012377 0.987623
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_01_TR_3.txt b/src/hidden-markov-error-model/configs/HMM_3states/HMM_01_TR_3.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_01_TR_3.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_3states/HMM_01_TR_3.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++3
++0.989342 0.010658 0.000000
++0.031859 0.941837 0.026303
++0.000000 0.055371 0.944629
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_01_TR_4.txt b/src/hidden-markov-error-model/configs/HMM_3states/HMM_01_TR_4.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_01_TR_4.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_3states/HMM_01_TR_4.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++3
++0.989342 0.010658 0.000000
++0.031859 0.941837 0.026304
++0.000000 0.055371 0.944629
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_02_EMIS_1.txt b/src/hidden-markov-error-model/configs/HMM_3states/HMM_02_EMIS_1.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_02_EMIS_1.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_3states/HMM_02_EMIS_1.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,3 @@
++0.973790 0.026210
++0.717441 0.282559
++0.218268 0.781732
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_02_EMIS_2.txt b/src/hidden-markov-error-model/configs/HMM_3states/HMM_02_EMIS_2.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_02_EMIS_2.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_3states/HMM_02_EMIS_2.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,3 @@
++0.973790 0.026210
++0.717441 0.282559
++0.218269 0.781731
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_02_EMIS_3.txt b/src/hidden-markov-error-model/configs/HMM_3states/HMM_02_EMIS_3.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_02_EMIS_3.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_3states/HMM_02_EMIS_3.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,3 @@
++1.000000 0.000000
++0.636816 0.363184
++0.000000 1.000000
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_02_EMIS_4.txt b/src/hidden-markov-error-model/configs/HMM_3states/HMM_02_EMIS_4.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_02_EMIS_4.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_3states/HMM_02_EMIS_4.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,3 @@
++1.000000 0.000000
++0.636816 0.363184
++0.000000 1.000000
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_02_TR_1.txt b/src/hidden-markov-error-model/configs/HMM_3states/HMM_02_TR_1.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_02_TR_1.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_3states/HMM_02_TR_1.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++3
++0.994945 0.005055 0.000000
++0.005880 0.989451 0.004668
++0.000000 0.006901 0.993099
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_02_TR_2.txt b/src/hidden-markov-error-model/configs/HMM_3states/HMM_02_TR_2.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_02_TR_2.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_3states/HMM_02_TR_2.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++3
++0.994945 0.005055 0.000000
++0.005880 0.989451 0.004668
++0.000000 0.006901 0.993099
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_02_TR_3.txt b/src/hidden-markov-error-model/configs/HMM_3states/HMM_02_TR_3.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_02_TR_3.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_3states/HMM_02_TR_3.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++3
++0.965212 0.034788 0.000000
++0.029234 0.936945 0.033820
++0.000000 0.137831 0.862169
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_02_TR_4.txt b/src/hidden-markov-error-model/configs/HMM_3states/HMM_02_TR_4.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_02_TR_4.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_3states/HMM_02_TR_4.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++3
++0.965212 0.034788 0.000000
++0.029234 0.936946 0.033820
++0.000000 0.137831 0.862169
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_03_EMIS_1.txt b/src/hidden-markov-error-model/configs/HMM_3states/HMM_03_EMIS_1.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_03_EMIS_1.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_3states/HMM_03_EMIS_1.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,3 @@
++0.988660 0.011340
++0.657350 0.342650
++0.110296 0.889704
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_03_EMIS_2.txt b/src/hidden-markov-error-model/configs/HMM_3states/HMM_03_EMIS_2.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_03_EMIS_2.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_3states/HMM_03_EMIS_2.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,3 @@
++0.988846 0.011154
++0.656305 0.343695
++0.108690 0.891310
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_03_EMIS_3.txt b/src/hidden-markov-error-model/configs/HMM_3states/HMM_03_EMIS_3.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_03_EMIS_3.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_3states/HMM_03_EMIS_3.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,3 @@
++1.000000 0.000000
++0.579857 0.420143
++0.000000 1.000000
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_03_EMIS_4.txt b/src/hidden-markov-error-model/configs/HMM_3states/HMM_03_EMIS_4.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_03_EMIS_4.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_3states/HMM_03_EMIS_4.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,3 @@
++1.000000 0.000000
++0.579857 0.420143
++0.000000 1.000000
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_03_TR_1.txt b/src/hidden-markov-error-model/configs/HMM_3states/HMM_03_TR_1.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_03_TR_1.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_3states/HMM_03_TR_1.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++3
++0.989083 0.010552 0.000365
++0.017212 0.971639 0.011149
++0.000851 0.012259 0.986890
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_03_TR_2.txt b/src/hidden-markov-error-model/configs/HMM_3states/HMM_03_TR_2.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_03_TR_2.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_3states/HMM_03_TR_2.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++3
++0.988834 0.011166 0.000000
++0.018226 0.969790 0.011984
++0.000000 0.013544 0.986456
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_03_TR_3.txt b/src/hidden-markov-error-model/configs/HMM_3states/HMM_03_TR_3.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_03_TR_3.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_3states/HMM_03_TR_3.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++3
++0.974639 0.025361 0.000000
++0.033856 0.925457 0.040686
++0.000000 0.081142 0.918858
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_03_TR_4.txt b/src/hidden-markov-error-model/configs/HMM_3states/HMM_03_TR_4.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_03_TR_4.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_3states/HMM_03_TR_4.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++3
++0.974639 0.025361 0.000000
++0.033856 0.925457 0.040686
++0.000000 0.081142 0.918858
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_04_EMIS_1.txt b/src/hidden-markov-error-model/configs/HMM_3states/HMM_04_EMIS_1.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_04_EMIS_1.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_3states/HMM_04_EMIS_1.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,3 @@
++0.992461 0.007539
++0.679821 0.320179
++0.175179 0.824821
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_04_EMIS_2.txt b/src/hidden-markov-error-model/configs/HMM_3states/HMM_04_EMIS_2.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_04_EMIS_2.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_3states/HMM_04_EMIS_2.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,3 @@
++0.992461 0.007539
++0.679822 0.320178
++0.175179 0.824821
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_04_EMIS_3.txt b/src/hidden-markov-error-model/configs/HMM_3states/HMM_04_EMIS_3.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_04_EMIS_3.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_3states/HMM_04_EMIS_3.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,3 @@
++1.000000 0.000000
++0.550594 0.449406
++0.000000 1.000000
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_04_EMIS_4.txt b/src/hidden-markov-error-model/configs/HMM_3states/HMM_04_EMIS_4.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_04_EMIS_4.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_3states/HMM_04_EMIS_4.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,3 @@
++1.000000 0.000000
++0.550594 0.449406
++0.000000 1.000000
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_04_TR_1.txt b/src/hidden-markov-error-model/configs/HMM_3states/HMM_04_TR_1.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_04_TR_1.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_3states/HMM_04_TR_1.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++3
++0.997768 0.002232 0.000000
++0.000852 0.994363 0.004785
++0.000000 0.004660 0.995340
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_04_TR_2.txt b/src/hidden-markov-error-model/configs/HMM_3states/HMM_04_TR_2.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_04_TR_2.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_3states/HMM_04_TR_2.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++3
++0.997768 0.002232 0.000000
++0.000852 0.994363 0.004785
++0.000000 0.004660 0.995340
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_04_TR_3.txt b/src/hidden-markov-error-model/configs/HMM_3states/HMM_04_TR_3.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_04_TR_3.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_3states/HMM_04_TR_3.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++3
++0.967921 0.032079 0.000000
++0.013193 0.934539 0.052269
++0.000000 0.128428 0.871572
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_04_TR_4.txt b/src/hidden-markov-error-model/configs/HMM_3states/HMM_04_TR_4.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_04_TR_4.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_3states/HMM_04_TR_4.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++3
++0.967921 0.032079 0.000000
++0.013192 0.934539 0.052269
++0.000000 0.128428 0.871572
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_05_EMIS_1.txt b/src/hidden-markov-error-model/configs/HMM_3states/HMM_05_EMIS_1.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_05_EMIS_1.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_3states/HMM_05_EMIS_1.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,3 @@
++0.974580 0.025420
++0.447547 0.552453
++0.051359 0.948641
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_05_EMIS_2.txt b/src/hidden-markov-error-model/configs/HMM_3states/HMM_05_EMIS_2.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_05_EMIS_2.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_3states/HMM_05_EMIS_2.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,3 @@
++0.976548 0.023452
++0.448245 0.551755
++0.048922 0.951078
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_05_EMIS_3.txt b/src/hidden-markov-error-model/configs/HMM_3states/HMM_05_EMIS_3.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_05_EMIS_3.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_3states/HMM_05_EMIS_3.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,3 @@
++1.000000 0.000000
++0.417564 0.582436
++0.000000 1.000000
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_05_EMIS_4.txt b/src/hidden-markov-error-model/configs/HMM_3states/HMM_05_EMIS_4.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_05_EMIS_4.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_3states/HMM_05_EMIS_4.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,3 @@
++1.000000 0.000000
++0.417564 0.582436
++0.000000 1.000000
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_05_TR_1.txt b/src/hidden-markov-error-model/configs/HMM_3states/HMM_05_TR_1.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_05_TR_1.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_3states/HMM_05_TR_1.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++3
++0.986960 0.011111 0.001929
++0.021356 0.956045 0.022599
++0.002461 0.012202 0.985337
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_05_TR_2.txt b/src/hidden-markov-error-model/configs/HMM_3states/HMM_05_TR_2.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_05_TR_2.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_3states/HMM_05_TR_2.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++3
++0.985815 0.014185 0.000000
++0.026747 0.944854 0.028399
++0.000000 0.016571 0.983429
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_05_TR_3.txt b/src/hidden-markov-error-model/configs/HMM_3states/HMM_05_TR_3.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_05_TR_3.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_3states/HMM_05_TR_3.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++3
++0.967996 0.032004 0.000000
++0.039632 0.908572 0.051797
++0.000000 0.053471 0.946529
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_05_TR_4.txt b/src/hidden-markov-error-model/configs/HMM_3states/HMM_05_TR_4.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_05_TR_4.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_3states/HMM_05_TR_4.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++3
++0.967996 0.032004 0.000000
++0.039632 0.908572 0.051796
++0.000000 0.053471 0.946529
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_06_EMIS_1.txt b/src/hidden-markov-error-model/configs/HMM_3states/HMM_06_EMIS_1.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_06_EMIS_1.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_3states/HMM_06_EMIS_1.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,3 @@
++0.954706 0.045294
++0.565102 0.434898
++0.165550 0.834450
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_06_EMIS_2.txt b/src/hidden-markov-error-model/configs/HMM_3states/HMM_06_EMIS_2.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_06_EMIS_2.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_3states/HMM_06_EMIS_2.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,3 @@
++0.954170 0.045830
++0.562041 0.437959
++0.164162 0.835838
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_06_EMIS_3.txt b/src/hidden-markov-error-model/configs/HMM_3states/HMM_06_EMIS_3.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_06_EMIS_3.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_3states/HMM_06_EMIS_3.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,3 @@
++1.000000 0.000000
++0.467294 0.532706
++0.000000 1.000000
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_06_EMIS_4.txt b/src/hidden-markov-error-model/configs/HMM_3states/HMM_06_EMIS_4.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_06_EMIS_4.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_3states/HMM_06_EMIS_4.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,3 @@
++1.000000 0.000000
++0.467294 0.532706
++0.000000 1.000000
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_06_TR_1.txt b/src/hidden-markov-error-model/configs/HMM_3states/HMM_06_TR_1.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_06_TR_1.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_3states/HMM_06_TR_1.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++3
++0.986421 0.012770 0.000809
++0.008484 0.977286 0.014230
++0.000000 0.010544 0.989456
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_06_TR_2.txt b/src/hidden-markov-error-model/configs/HMM_3states/HMM_06_TR_2.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_06_TR_2.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_3states/HMM_06_TR_2.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++3
++0.986187 0.013813 0.000000
++0.008621 0.976536 0.014843
++0.000000 0.010766 0.989234
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_06_TR_3.txt b/src/hidden-markov-error-model/configs/HMM_3states/HMM_06_TR_3.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_06_TR_3.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_3states/HMM_06_TR_3.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++3
++0.949172 0.050828 0.000000
++0.017156 0.930517 0.052327
++0.000000 0.131579 0.868421
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_06_TR_4.txt b/src/hidden-markov-error-model/configs/HMM_3states/HMM_06_TR_4.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_06_TR_4.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_3states/HMM_06_TR_4.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++3
++0.949172 0.050828 0.000000
++0.017156 0.930517 0.052327
++0.000000 0.131578 0.868422
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_07_EMIS_1.txt b/src/hidden-markov-error-model/configs/HMM_3states/HMM_07_EMIS_1.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_07_EMIS_1.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_3states/HMM_07_EMIS_1.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,3 @@
++0.921924 0.078076
++0.368743 0.631257
++0.062447 0.937553
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_07_EMIS_2.txt b/src/hidden-markov-error-model/configs/HMM_3states/HMM_07_EMIS_2.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_07_EMIS_2.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_3states/HMM_07_EMIS_2.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,3 @@
++0.922140 0.077860
++0.368706 0.631294
++0.062396 0.937604
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_07_EMIS_3.txt b/src/hidden-markov-error-model/configs/HMM_3states/HMM_07_EMIS_3.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_07_EMIS_3.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_3states/HMM_07_EMIS_3.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,3 @@
++1.000000 0.000000
++0.363165 0.636835
++0.000000 1.000000
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_07_EMIS_4.txt b/src/hidden-markov-error-model/configs/HMM_3states/HMM_07_EMIS_4.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_07_EMIS_4.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_3states/HMM_07_EMIS_4.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,3 @@
++1.000000 0.000000
++0.363166 0.636834
++0.000000 1.000000
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_07_TR_1.txt b/src/hidden-markov-error-model/configs/HMM_3states/HMM_07_TR_1.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_07_TR_1.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_3states/HMM_07_TR_1.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++3
++0.979900 0.019785 0.000315
++0.009122 0.982647 0.008231
++0.000000 0.007079 0.992921
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_07_TR_2.txt b/src/hidden-markov-error-model/configs/HMM_3states/HMM_07_TR_2.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_07_TR_2.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_3states/HMM_07_TR_2.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++3
++0.979789 0.020211 0.000000
++0.009163 0.982421 0.008416
++0.000000 0.007120 0.992880
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_07_TR_3.txt b/src/hidden-markov-error-model/configs/HMM_3states/HMM_07_TR_3.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_07_TR_3.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_3states/HMM_07_TR_3.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++3
++0.932439 0.067561 0.000000
++0.019030 0.938524 0.042446
++0.000000 0.063233 0.936767
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_07_TR_4.txt b/src/hidden-markov-error-model/configs/HMM_3states/HMM_07_TR_4.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_07_TR_4.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_3states/HMM_07_TR_4.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++3
++0.932439 0.067561 0.000000
++0.019030 0.938523 0.042446
++0.000000 0.063233 0.936767
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_08_EMIS_1.txt b/src/hidden-markov-error-model/configs/HMM_3states/HMM_08_EMIS_1.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_08_EMIS_1.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_3states/HMM_08_EMIS_1.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,3 @@
++0.922048 0.077952
++0.403322 0.596678
++0.027489 0.972511
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_08_EMIS_2.txt b/src/hidden-markov-error-model/configs/HMM_3states/HMM_08_EMIS_2.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_08_EMIS_2.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_3states/HMM_08_EMIS_2.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,3 @@
++0.922117 0.077883
++0.403127 0.596873
++0.027459 0.972541
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_08_EMIS_3.txt b/src/hidden-markov-error-model/configs/HMM_3states/HMM_08_EMIS_3.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_08_EMIS_3.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_3states/HMM_08_EMIS_3.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,3 @@
++1.000000 0.000000
++0.415443 0.584557
++0.000000 1.000000
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_08_EMIS_4.txt b/src/hidden-markov-error-model/configs/HMM_3states/HMM_08_EMIS_4.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_08_EMIS_4.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_3states/HMM_08_EMIS_4.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,3 @@
++1.000000 0.000000
++0.415443 0.584557
++0.000000 1.000000
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_08_TR_1.txt b/src/hidden-markov-error-model/configs/HMM_3states/HMM_08_TR_1.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_08_TR_1.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_3states/HMM_08_TR_1.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++3
++0.987452 0.012548 0.000000
++0.008914 0.983970 0.007116
++0.000069 0.003241 0.996690
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_08_TR_2.txt b/src/hidden-markov-error-model/configs/HMM_3states/HMM_08_TR_2.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_08_TR_2.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_3states/HMM_08_TR_2.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++3
++0.987364 0.012636 0.000000
++0.009119 0.983738 0.007142
++0.000000 0.003325 0.996675
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_08_TR_3.txt b/src/hidden-markov-error-model/configs/HMM_3states/HMM_08_TR_3.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_08_TR_3.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_3states/HMM_08_TR_3.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++3
++0.940206 0.059794 0.000000
++0.025264 0.936326 0.038410
++0.000000 0.027894 0.972106
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_08_TR_4.txt b/src/hidden-markov-error-model/configs/HMM_3states/HMM_08_TR_4.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_08_TR_4.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_3states/HMM_08_TR_4.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++3
++0.940206 0.059794 0.000000
++0.025264 0.936326 0.038410
++0.000000 0.027894 0.972106
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_09_EMIS_1.txt b/src/hidden-markov-error-model/configs/HMM_3states/HMM_09_EMIS_1.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_09_EMIS_1.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_3states/HMM_09_EMIS_1.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,3 @@
++0.972535 0.027465
++0.502620 0.497380
++0.035681 0.964319
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_09_EMIS_2.txt b/src/hidden-markov-error-model/configs/HMM_3states/HMM_09_EMIS_2.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_09_EMIS_2.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_3states/HMM_09_EMIS_2.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,3 @@
++0.972535 0.027465
++0.502620 0.497380
++0.035681 0.964319
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_09_EMIS_3.txt b/src/hidden-markov-error-model/configs/HMM_3states/HMM_09_EMIS_3.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_09_EMIS_3.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_3states/HMM_09_EMIS_3.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,3 @@
++1.000000 0.000000
++0.304348 0.695652
++0.000000 1.000000
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_09_EMIS_4.txt b/src/hidden-markov-error-model/configs/HMM_3states/HMM_09_EMIS_4.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_09_EMIS_4.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_3states/HMM_09_EMIS_4.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,3 @@
++1.000000 0.000000
++0.304348 0.695652
++0.000000 1.000000
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_09_TR_1.txt b/src/hidden-markov-error-model/configs/HMM_3states/HMM_09_TR_1.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_09_TR_1.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_3states/HMM_09_TR_1.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++3
++0.987897 0.012103 0.000000
++0.018910 0.951249 0.029841
++0.000000 0.005931 0.994069
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_09_TR_2.txt b/src/hidden-markov-error-model/configs/HMM_3states/HMM_09_TR_2.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_09_TR_2.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_3states/HMM_09_TR_2.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++3
++0.987897 0.012103 0.000000
++0.018910 0.951249 0.029841
++0.000000 0.005931 0.994069
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_09_TR_3.txt b/src/hidden-markov-error-model/configs/HMM_3states/HMM_09_TR_3.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_09_TR_3.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_3states/HMM_09_TR_3.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++3
++0.955146 0.044854 0.000000
++0.036119 0.914600 0.049281
++0.000000 0.025299 0.974701
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_09_TR_4.txt b/src/hidden-markov-error-model/configs/HMM_3states/HMM_09_TR_4.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_09_TR_4.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_3states/HMM_09_TR_4.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++3
++0.955146 0.044854 0.000000
++0.036119 0.914600 0.049281
++0.000000 0.025299 0.974701
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_10_EMIS_1.txt b/src/hidden-markov-error-model/configs/HMM_3states/HMM_10_EMIS_1.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_10_EMIS_1.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_3states/HMM_10_EMIS_1.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,3 @@
++0.948522 0.051478
++0.421207 0.578793
++0.042250 0.957750
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_10_EMIS_2.txt b/src/hidden-markov-error-model/configs/HMM_3states/HMM_10_EMIS_2.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_10_EMIS_2.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_3states/HMM_10_EMIS_2.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,3 @@
++0.948653 0.051347
++0.421104 0.578896
++0.042224 0.957776
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_10_EMIS_3.txt b/src/hidden-markov-error-model/configs/HMM_3states/HMM_10_EMIS_3.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_10_EMIS_3.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_3states/HMM_10_EMIS_3.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,3 @@
++1.000000 0.000000
++0.364514 0.635486
++0.000000 1.000000
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_10_EMIS_4.txt b/src/hidden-markov-error-model/configs/HMM_3states/HMM_10_EMIS_4.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_10_EMIS_4.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_3states/HMM_10_EMIS_4.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,3 @@
++1.000000 0.000000
++0.364514 0.635486
++0.000000 1.000000
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_10_TR_1.txt b/src/hidden-markov-error-model/configs/HMM_3states/HMM_10_TR_1.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_10_TR_1.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_3states/HMM_10_TR_1.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++3
++0.982743 0.017257 0.000000
++0.006646 0.985366 0.007988
++0.000062 0.004002 0.995936
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_10_TR_2.txt b/src/hidden-markov-error-model/configs/HMM_3states/HMM_10_TR_2.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_10_TR_2.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_3states/HMM_10_TR_2.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++3
++0.982564 0.017436 0.000000
++0.006838 0.985129 0.008033
++0.000000 0.004088 0.995912
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_10_TR_3.txt b/src/hidden-markov-error-model/configs/HMM_3states/HMM_10_TR_3.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_10_TR_3.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_3states/HMM_10_TR_3.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++3
++0.939128 0.060872 0.000000
++0.016663 0.942919 0.040418
++0.000000 0.036082 0.963918
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_10_TR_4.txt b/src/hidden-markov-error-model/configs/HMM_3states/HMM_10_TR_4.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_10_TR_4.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_3states/HMM_10_TR_4.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++3
++0.939128 0.060872 0.000000
++0.016663 0.942919 0.040418
++0.000000 0.036082 0.963918
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_11_EMIS_1.txt b/src/hidden-markov-error-model/configs/HMM_3states/HMM_11_EMIS_1.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_11_EMIS_1.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_3states/HMM_11_EMIS_1.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,3 @@
++0.985144 0.014856
++0.378924 0.621076
++0.021840 0.978160
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_11_EMIS_2.txt b/src/hidden-markov-error-model/configs/HMM_3states/HMM_11_EMIS_2.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_11_EMIS_2.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_3states/HMM_11_EMIS_2.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,3 @@
++0.985144 0.014856
++0.378923 0.621077
++0.021840 0.978160
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_11_EMIS_3.txt b/src/hidden-markov-error-model/configs/HMM_3states/HMM_11_EMIS_3.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_11_EMIS_3.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_3states/HMM_11_EMIS_3.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,3 @@
++1.000000 0.000000
++0.349469 0.650531
++0.000000 1.000000
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_11_EMIS_4.txt b/src/hidden-markov-error-model/configs/HMM_3states/HMM_11_EMIS_4.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_11_EMIS_4.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_3states/HMM_11_EMIS_4.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,3 @@
++1.000000 0.000000
++0.349469 0.650531
++0.000000 1.000000
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_11_TR_1.txt b/src/hidden-markov-error-model/configs/HMM_3states/HMM_11_TR_1.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_11_TR_1.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_3states/HMM_11_TR_1.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++3
++0.980337 0.019663 0.000000
++0.008927 0.979374 0.011699
++0.000000 0.005991 0.994009
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_11_TR_2.txt b/src/hidden-markov-error-model/configs/HMM_3states/HMM_11_TR_2.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_11_TR_2.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_3states/HMM_11_TR_2.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++3
++0.980337 0.019663 0.000000
++0.008927 0.979374 0.011699
++0.000000 0.005991 0.994009
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_11_TR_3.txt b/src/hidden-markov-error-model/configs/HMM_3states/HMM_11_TR_3.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_11_TR_3.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_3states/HMM_11_TR_3.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++3
++0.969623 0.030377 0.000000
++0.010890 0.958489 0.030621
++0.000000 0.022207 0.977793
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_11_TR_4.txt b/src/hidden-markov-error-model/configs/HMM_3states/HMM_11_TR_4.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_11_TR_4.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_3states/HMM_11_TR_4.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++3
++0.969623 0.030377 0.000000
++0.010890 0.958489 0.030621
++0.000000 0.022207 0.977793
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_12_EMIS_1.txt b/src/hidden-markov-error-model/configs/HMM_3states/HMM_12_EMIS_1.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_12_EMIS_1.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_3states/HMM_12_EMIS_1.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,3 @@
++0.861650 0.138350
++0.288541 0.711459
++0.015807 0.984193
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_12_EMIS_2.txt b/src/hidden-markov-error-model/configs/HMM_3states/HMM_12_EMIS_2.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_12_EMIS_2.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_3states/HMM_12_EMIS_2.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,3 @@
++0.861707 0.138293
++0.287841 0.712159
++0.015772 0.984228
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_12_EMIS_3.txt b/src/hidden-markov-error-model/configs/HMM_3states/HMM_12_EMIS_3.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_12_EMIS_3.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_3states/HMM_12_EMIS_3.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,3 @@
++1.000000 0.000000
++0.292262 0.707738
++0.000000 1.000000
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_12_EMIS_4.txt b/src/hidden-markov-error-model/configs/HMM_3states/HMM_12_EMIS_4.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_12_EMIS_4.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_3states/HMM_12_EMIS_4.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,3 @@
++1.000000 0.000000
++0.292262 0.707738
++0.000000 1.000000
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_12_TR_1.txt b/src/hidden-markov-error-model/configs/HMM_3states/HMM_12_TR_1.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_12_TR_1.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_3states/HMM_12_TR_1.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++3
++0.986907 0.012570 0.000523
++0.007934 0.979285 0.012781
++0.000000 0.003230 0.996770
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_12_TR_2.txt b/src/hidden-markov-error-model/configs/HMM_3states/HMM_12_TR_2.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_12_TR_2.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_3states/HMM_12_TR_2.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++3
++0.986757 0.013243 0.000000
++0.008025 0.978790 0.013185
++0.000000 0.003255 0.996745
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_12_TR_3.txt b/src/hidden-markov-error-model/configs/HMM_3states/HMM_12_TR_3.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_12_TR_3.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_3states/HMM_12_TR_3.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++3
++0.895254 0.104746 0.000000
++0.031235 0.926214 0.042551
++0.000000 0.018005 0.981995
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_12_TR_4.txt b/src/hidden-markov-error-model/configs/HMM_3states/HMM_12_TR_4.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_12_TR_4.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_3states/HMM_12_TR_4.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++3
++0.895254 0.104746 0.000000
++0.031235 0.926214 0.042551
++0.000000 0.018005 0.981995
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_13_EMIS_1.txt b/src/hidden-markov-error-model/configs/HMM_3states/HMM_13_EMIS_1.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_13_EMIS_1.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_3states/HMM_13_EMIS_1.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,3 @@
++0.986293 0.013707
++0.363488 0.636512
++0.011466 0.988534
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_13_EMIS_2.txt b/src/hidden-markov-error-model/configs/HMM_3states/HMM_13_EMIS_2.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_13_EMIS_2.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_3states/HMM_13_EMIS_2.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,3 @@
++0.986293 0.013707
++0.363488 0.636512
++0.011466 0.988534
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_13_EMIS_3.txt b/src/hidden-markov-error-model/configs/HMM_3states/HMM_13_EMIS_3.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_13_EMIS_3.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_3states/HMM_13_EMIS_3.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,3 @@
++1.000000 0.000000
++0.201756 0.798244
++0.000000 1.000000
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_13_EMIS_4.txt b/src/hidden-markov-error-model/configs/HMM_3states/HMM_13_EMIS_4.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_13_EMIS_4.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_3states/HMM_13_EMIS_4.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,3 @@
++1.000000 0.000000
++0.201756 0.798244
++0.000000 1.000000
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_13_TR_1.txt b/src/hidden-markov-error-model/configs/HMM_3states/HMM_13_TR_1.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_13_TR_1.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_3states/HMM_13_TR_1.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++3
++0.949604 0.050396 0.000000
++0.052688 0.898749 0.048563
++0.000000 0.002072 0.997928
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_13_TR_2.txt b/src/hidden-markov-error-model/configs/HMM_3states/HMM_13_TR_2.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_13_TR_2.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_3states/HMM_13_TR_2.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++3
++0.949604 0.050396 0.000000
++0.052688 0.898749 0.048563
++0.000000 0.002072 0.997928
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_13_TR_3.txt b/src/hidden-markov-error-model/configs/HMM_3states/HMM_13_TR_3.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_13_TR_3.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_3states/HMM_13_TR_3.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++3
++0.933257 0.066743 0.000000
++0.026331 0.841862 0.131807
++0.000000 0.017806 0.982194
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_13_TR_4.txt b/src/hidden-markov-error-model/configs/HMM_3states/HMM_13_TR_4.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_13_TR_4.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_3states/HMM_13_TR_4.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++3
++0.933257 0.066743 0.000000
++0.026331 0.841862 0.131807
++0.000000 0.017806 0.982194
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_14_EMIS_1.txt b/src/hidden-markov-error-model/configs/HMM_3states/HMM_14_EMIS_1.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_14_EMIS_1.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_3states/HMM_14_EMIS_1.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,3 @@
++0.703156 0.296844
++0.002900 0.997100
++0.000000 1.000000
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_14_EMIS_2.txt b/src/hidden-markov-error-model/configs/HMM_3states/HMM_14_EMIS_2.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_14_EMIS_2.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_3states/HMM_14_EMIS_2.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,3 @@
++0.702773 0.297227
++0.002605 0.997395
++0.000004 0.999996
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_14_EMIS_3.txt b/src/hidden-markov-error-model/configs/HMM_3states/HMM_14_EMIS_3.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_14_EMIS_3.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_3states/HMM_14_EMIS_3.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,3 @@
++1.000000 0.000000
++0.322135 0.677865
++0.000000 1.000000
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_14_EMIS_4.txt b/src/hidden-markov-error-model/configs/HMM_3states/HMM_14_EMIS_4.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_14_EMIS_4.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_3states/HMM_14_EMIS_4.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,3 @@
++1.000000 0.000000
++0.322136 0.677864
++0.000000 1.000000
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_14_TR_1.txt b/src/hidden-markov-error-model/configs/HMM_3states/HMM_14_TR_1.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_14_TR_1.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_3states/HMM_14_TR_1.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++3
++0.947536 0.051615 0.000850
++0.003402 0.501052 0.495547
++0.000041 0.173865 0.826094
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_14_TR_2.txt b/src/hidden-markov-error-model/configs/HMM_3states/HMM_14_TR_2.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_14_TR_2.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_3states/HMM_14_TR_2.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++3
++0.947601 0.052399 0.000000
++0.003185 0.473131 0.523684
++0.000000 0.210623 0.789377
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_14_TR_3.txt b/src/hidden-markov-error-model/configs/HMM_3states/HMM_14_TR_3.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_14_TR_3.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_3states/HMM_14_TR_3.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++3
++0.820026 0.179974 0.000000
++0.076076 0.845763 0.078161
++0.000000 0.001361 0.998639
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_14_TR_4.txt b/src/hidden-markov-error-model/configs/HMM_3states/HMM_14_TR_4.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_14_TR_4.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_3states/HMM_14_TR_4.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++3
++0.820026 0.179974 0.000000
++0.076076 0.845763 0.078161
++0.000000 0.001361 0.998639
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_15_EMIS_1.txt b/src/hidden-markov-error-model/configs/HMM_3states/HMM_15_EMIS_1.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_15_EMIS_1.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_3states/HMM_15_EMIS_1.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,3 @@
++0.181287 0.818713
++0.008422 0.991578
++0.001430 0.998570
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_15_EMIS_2.txt b/src/hidden-markov-error-model/configs/HMM_3states/HMM_15_EMIS_2.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_15_EMIS_2.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_3states/HMM_15_EMIS_2.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,3 @@
++0.180868 0.819132
++0.006511 0.993489
++0.001917 0.998083
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_15_EMIS_3.txt b/src/hidden-markov-error-model/configs/HMM_3states/HMM_15_EMIS_3.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_15_EMIS_3.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_3states/HMM_15_EMIS_3.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,3 @@
++1.000000 0.000000
++0.067790 0.932210
++0.000000 1.000000
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_15_EMIS_4.txt b/src/hidden-markov-error-model/configs/HMM_3states/HMM_15_EMIS_4.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_15_EMIS_4.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_3states/HMM_15_EMIS_4.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,3 @@
++1.000000 0.000000
++0.067790 0.932210
++0.000000 1.000000
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_15_TR_1.txt b/src/hidden-markov-error-model/configs/HMM_3states/HMM_15_TR_1.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_15_TR_1.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_3states/HMM_15_TR_1.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++3
++0.986413 0.004542 0.009044
++0.002155 0.481460 0.516385
++0.000173 0.181349 0.818478
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_15_TR_2.txt b/src/hidden-markov-error-model/configs/HMM_3states/HMM_15_TR_2.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_15_TR_2.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_3states/HMM_15_TR_2.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++3
++0.986416 0.013584 0.000000
++0.002403 0.461981 0.535616
++0.000000 0.215417 0.784583
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_15_TR_3.txt b/src/hidden-markov-error-model/configs/HMM_3states/HMM_15_TR_3.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_15_TR_3.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_3states/HMM_15_TR_3.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++3
++0.523453 0.476547 0.000000
++0.018706 0.955683 0.025612
++0.000000 0.003425 0.996575
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_15_TR_4.txt b/src/hidden-markov-error-model/configs/HMM_3states/HMM_15_TR_4.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_15_TR_4.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_3states/HMM_15_TR_4.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++3
++0.523454 0.476546 0.000000
++0.018706 0.955683 0.025612
++0.000000 0.003425 0.996575
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_all_EMIS.txt b/src/hidden-markov-error-model/configs/HMM_3states/HMM_all_EMIS.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_all_EMIS.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_3states/HMM_all_EMIS.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,61 @@
++ Caso 1 Caso 2 Caso 3 Caso 4
++ 0.990911 0.009089 # 0.990911 0.009089 # 1.000000 0.000000 # 1.000000 0.000000
++1 0.628239 0.371761 # 0.628239 0.371761 # 0.642084 0.357916 # 0.642084 0.357916
++ 0.061126 0.938874 # 0.061126 0.938874 # 0.000000 1.000000 # 0.000000 1.000000
++ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
++ 0.973790 0.026210 # 0.973790 0.026210 # 1.000000 0.000000 # 1.000000 0.000000
++2 0.717441 0.282559 # 0.717441 0.282559 # 0.636816 0.363184 # 0.636816 0.363184
++ 0.218268 0.781732 # 0.218269 0.781731 # 0.000000 1.000000 # 0.000000 1.000000
++ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
++ 0.988660 0.011340 # 0.988846 0.011154 # 1.000000 0.000000 # 1.000000 0.000000
++3 0.657350 0.342650 # 0.656305 0.343695 # 0.579857 0.420143 # 0.579857 0.420143
++ 0.110296 0.889704 # 0.108690 0.891310 # 0.000000 1.000000 # 0.000000 1.000000
++ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
++ 0.992461 0.007539 # 0.992461 0.007539 # 1.000000 0.000000 # 1.000000 0.000000
++4 0.679821 0.320179 # 0.679822 0.320178 # 0.550594 0.449406 # 0.550594 0.449406
++ 0.175179 0.824821 # 0.175179 0.824821 # 0.000000 1.000000 # 0.000000 1.000000
++ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
++ 0.974580 0.025420 # 0.976548 0.023452 # 1.000000 0.000000 # 1.000000 0.000000
++5 0.447547 0.552453 # 0.448245 0.551755 # 0.417564 0.582436 # 0.417564 0.582436
++ 0.051359 0.948641 # 0.048922 0.951078 # 0.000000 1.000000 # 0.000000 1.000000
++ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
++ 0.954706 0.045294 # 0.954170 0.045830 # 1.000000 0.000000 # 1.000000 0.000000
++6 0.565102 0.434898 # 0.562041 0.437959 # 0.467294 0.532706 # 0.467294 0.532706
++ 0.165550 0.834450 # 0.164162 0.835838 # 0.000000 1.000000 # 0.000000 1.000000
++ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
++ 0.921924 0.078076 # 0.922140 0.077860 # 1.000000 0.000000 # 1.000000 0.000000
++7 0.368743 0.631257 # 0.368706 0.631294 # 0.363165 0.636835 # 0.363166 0.636834
++ 0.062447 0.937553 # 0.062396 0.937604 # 0.000000 1.000000 # 0.000000 1.000000
++ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
++ 0.922048 0.077952 # 0.922117 0.077883 # 1.000000 0.000000 # 1.000000 0.000000
++8 0.403322 0.596678 # 0.403127 0.596873 # 0.415443 0.584557 # 0.415443 0.584557
++ 0.027489 0.972511 # 0.027459 0.972541 # 0.000000 1.000000 # 0.000000 1.000000
++ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
++ 0.972535 0.027465 # 0.972535 0.027465 # 1.000000 0.000000 # 1.000000 0.000000
++9 0.502620 0.497380 # 0.502620 0.497380 # 0.304348 0.695652 # 0.304348 0.695652
++ 0.035681 0.964319 # 0.035681 0.964319 # 0.000000 1.000000 # 0.000000 1.000000
++ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
++ 0.948522 0.051478 # 0.948653 0.051347 # 1.000000 0.000000 # 1.000000 0.000000
++10 0.421207 0.578793 # 0.421104 0.578896 # 0.364514 0.635486 # 0.364514 0.635486
++ 0.042250 0.957750 # 0.042224 0.957776 # 0.000000 1.000000 # 0.000000 1.000000
++ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
++ 0.985144 0.014856 # 0.985144 0.014856 # 1.000000 0.000000 # 1.000000 0.000000
++11 0.378924 0.621076 # 0.378923 0.621077 # 0.349469 0.650531 # 0.349469 0.650531
++ 0.021840 0.978160 # 0.021840 0.978160 # 0.000000 1.000000 # 0.000000 1.000000
++ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
++ 0.861650 0.138350 # 0.861707 0.138293 # 1.000000 0.000000 # 1.000000 0.000000
++12 0.288541 0.711459 # 0.287841 0.712159 # 0.292262 0.707738 # 0.292262 0.707738
++ 0.015807 0.984193 # 0.015772 0.984228 # 0.000000 1.000000 # 0.000000 1.000000
++ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
++ 0.986293 0.013707 # 0.986293 0.013707 # 1.000000 0.000000 # 1.000000 0.000000
++13 0.363488 0.636512 # 0.363488 0.636512 # 0.201756 0.798244 # 0.201756 0.798244
++ 0.011466 0.988534 # 0.011466 0.988534 # 0.000000 1.000000 # 0.000000 1.000000
++ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
++ 0.703156 0.296844 # 0.702773 0.297227 # 1.000000 0.000000 # 1.000000 0.000000
++14 0.002900 0.997100 # 0.002605 0.997395 # 0.322135 0.677865 # 0.322136 0.677864
++ 0.000000 1.000000 # 0.000004 0.999996 # 0.000000 1.000000 # 0.000000 1.000000
++ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
++ 0.181287 0.818713 # 0.180868 0.819132 # 1.000000 0.000000 # 1.000000 0.000000
++15 0.008422 0.991578 # 0.006511 0.993489 # 0.067790 0.932210 # 0.067790 0.932210
++ 0.001430 0.998570 # 0.001917 0.998083 # 0.000000 1.000000 # 0.000000 1.000000
++ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ No newline at end of file
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_all_TR.txt b/src/hidden-markov-error-model/configs/HMM_3states/HMM_all_TR.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/HMM_all_TR.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_3states/HMM_all_TR.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,61 @@
++ Caso 1 Caso 2 Caso 3 Caso 4
++ 0.996310 0.003690 0.000000 # 0.996310 0.003690 0.000000 # 0.989342 0.010658 0.000000 # 0.989342 0.010658 0.000000
++1 0.014602 0.976775 0.008623 # 0.014602 0.976775 0.008623 # 0.031859 0.941837 0.026303 # 0.031859 0.941837 0.026304
++ 0.000000 0.012377 0.987623 # 0.000000 0.012377 0.987623 # 0.000000 0.055371 0.944629 # 0.000000 0.055371 0.944629
++ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
++ 0.994945 0.005055 0.000000 # 0.994945 0.005055 0.000000 # 0.965212 0.034788 0.000000 # 0.965212 0.034788 0.000000
++2 0.005880 0.989451 0.004668 # 0.005880 0.989451 0.004668 # 0.029234 0.936945 0.033820 # 0.029234 0.936946 0.033820
++ 0.000000 0.006901 0.993099 # 0.000000 0.006901 0.993099 # 0.000000 0.137831 0.862169 # 0.000000 0.137831 0.862169
++ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
++ 0.989083 0.010552 0.000365 # 0.988834 0.011166 0.000000 # 0.974639 0.025361 0.000000 # 0.974639 0.025361 0.000000
++3 0.017212 0.971639 0.011149 # 0.018226 0.969790 0.011984 # 0.033856 0.925457 0.040686 # 0.033856 0.925457 0.040686
++ 0.000851 0.012259 0.986890 # 0.000000 0.013544 0.986456 # 0.000000 0.081142 0.918858 # 0.000000 0.081142 0.918858
++ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
++ 0.997768 0.002232 0.000000 # 0.997768 0.002232 0.000000 # 0.967921 0.032079 0.000000 # 0.967921 0.032079 0.000000
++4 0.000852 0.994363 0.004785 # 0.000852 0.994363 0.004785 # 0.013193 0.934539 0.052269 # 0.013192 0.934539 0.052269
++ 0.000000 0.004660 0.995340 # 0.000000 0.004660 0.995340 # 0.000000 0.128428 0.871572 # 0.000000 0.128428 0.871572
++ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
++ 0.986960 0.011111 0.001929 # 0.985815 0.014185 0.000000 # 0.967996 0.032004 0.000000 # 0.967996 0.032004 0.000000
++5 0.021356 0.956045 0.022599 # 0.026747 0.944854 0.028399 # 0.039632 0.908572 0.051797 # 0.039632 0.908572 0.051796
++ 0.002461 0.012202 0.985337 # 0.000000 0.016571 0.983429 # 0.000000 0.053471 0.946529 # 0.000000 0.053471 0.946529
++ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
++ 0.986421 0.012770 0.000809 # 0.986187 0.013813 0.000000 # 0.949172 0.050828 0.000000 # 0.949172 0.050828 0.000000
++6 0.008484 0.977286 0.014230 # 0.008621 0.976536 0.014843 # 0.017156 0.930517 0.052327 # 0.017156 0.930517 0.052327
++ 0.000000 0.010544 0.989456 # 0.000000 0.010766 0.989234 # 0.000000 0.131579 0.868421 # 0.000000 0.131578 0.868422
++ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
++ 0.979900 0.019785 0.000315 # 0.979789 0.020211 0.000000 # 0.932439 0.067561 0.000000 # 0.932439 0.067561 0.000000
++7 0.009122 0.982647 0.008231 # 0.009163 0.982421 0.008416 # 0.019030 0.938524 0.042446 # 0.019030 0.938523 0.042446
++ 0.000000 0.007079 0.992921 # 0.000000 0.007120 0.992880 # 0.000000 0.063233 0.936767 # 0.000000 0.063233 0.936767
++ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
++ 0.987452 0.012548 0.000000 # 0.987364 0.012636 0.000000 # 0.940206 0.059794 0.000000 # 0.940206 0.059794 0.000000
++8 0.008914 0.983970 0.007116 # 0.009119 0.983738 0.007142 # 0.025264 0.936326 0.038410 # 0.025264 0.936326 0.038410
++ 0.000069 0.003241 0.996690 # 0.000000 0.003325 0.996675 # 0.000000 0.027894 0.972106 # 0.000000 0.027894 0.972106
++ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
++ 0.987897 0.012103 0.000000 # 0.987897 0.012103 0.000000 # 0.955146 0.044854 0.000000 # 0.955146 0.044854 0.000000
++9 0.018910 0.951249 0.029841 # 0.018910 0.951249 0.029841 # 0.036119 0.914600 0.049281 # 0.036119 0.914600 0.049281
++ 0.000000 0.005931 0.994069 # 0.000000 0.005931 0.994069 # 0.000000 0.025299 0.974701 # 0.000000 0.025299 0.974701
++ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
++ 0.982743 0.017257 0.000000 # 0.982564 0.017436 0.000000 # 0.939128 0.060872 0.000000 # 0.939128 0.060872 0.000000
++10 0.006646 0.985366 0.007988 # 0.006838 0.985129 0.008033 # 0.016663 0.942919 0.040418 # 0.016663 0.942919 0.040418
++ 0.000062 0.004002 0.995936 # 0.000000 0.004088 0.995912 # 0.000000 0.036082 0.963918 # 0.000000 0.036082 0.963918
++ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
++ 0.980337 0.019663 0.000000 # 0.980337 0.019663 0.000000 # 0.969623 0.030377 0.000000 # 0.969623 0.030377 0.000000
++11 0.008927 0.979374 0.011699 # 0.008927 0.979374 0.011699 # 0.010890 0.958489 0.030621 # 0.010890 0.958489 0.030621
++ 0.000000 0.005991 0.994009 # 0.000000 0.005991 0.994009 # 0.000000 0.022207 0.977793 # 0.000000 0.022207 0.977793
++ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
++ 0.986907 0.012570 0.000523 # 0.986757 0.013243 0.000000 # 0.895254 0.104746 0.000000 # 0.895254 0.104746 0.000000
++12 0.007934 0.979285 0.012781 # 0.008025 0.978790 0.013185 # 0.031235 0.926214 0.042551 # 0.031235 0.926214 0.042551
++ 0.000000 0.003230 0.996770 # 0.000000 0.003255 0.996745 # 0.000000 0.018005 0.981995 # 0.000000 0.018005 0.981995
++ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
++ 0.949604 0.050396 0.000000 # 0.949604 0.050396 0.000000 # 0.933257 0.066743 0.000000 # 0.933257 0.066743 0.000000
++13 0.052688 0.898749 0.048563 # 0.052688 0.898749 0.048563 # 0.026331 0.841862 0.131807 # 0.026331 0.841862 0.131807
++ 0.000000 0.002072 0.997928 # 0.000000 0.002072 0.997928 # 0.000000 0.017806 0.982194 # 0.000000 0.017806 0.982194
++ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
++ 0.947536 0.051615 0.000850 # 0.947601 0.052399 0.000000 # 0.820026 0.179974 0.000000 # 0.820026 0.179974 0.000000
++14 0.003402 0.501052 0.495547 # 0.003185 0.473131 0.523684 # 0.076076 0.845763 0.078161 # 0.076076 0.845763 0.078161
++ 0.000041 0.173865 0.826094 # 0.000000 0.210623 0.789377 # 0.000000 0.001361 0.998639 # 0.000000 0.001361 0.998639
++ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
++ 0.986413 0.004542 0.009044 # 0.986416 0.013584 0.000000 # 0.523453 0.476547 0.000000 # 0.523454 0.476546 0.000000
++15 0.002155 0.481460 0.516385 # 0.002403 0.461981 0.535616 # 0.018706 0.955683 0.025612 # 0.018706 0.955683 0.025612
++ 0.000173 0.181349 0.818478 # 0.000000 0.215417 0.784583 # 0.000000 0.003425 0.996575 # 0.000000 0.003425 0.996575
++ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\ No newline at end of file
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/README.txt b/src/hidden-markov-error-model/configs/HMM_3states/README.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_3states/README.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_3states/README.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++HMM_*_EMIS_1.txt && HMM_*_TR_1.txt ==> Libertad total
++HMM_*_EMIS_2.txt && HMM_*_TR_2.txt ==> Nacimiento y muerte
++HMM_*_EMIS_3.txt && HMM_*_TR_3.txt ==> Limitación en la decisión
++HMM_*_EMIS_4.txt && HMM_*_TR_4.txt ==> Combinación
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_01_EMIS_1.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_01_EMIS_1.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_01_EMIS_1.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_01_EMIS_1.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++0.998042 0.001958
++0.874341 0.125659
++0.414555 0.585445
++0.026164 0.973836
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_01_EMIS_2.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_01_EMIS_2.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_01_EMIS_2.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_01_EMIS_2.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++0.998042 0.001958
++0.874341 0.125659
++0.414555 0.585445
++0.026164 0.973836
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_01_EMIS_3.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_01_EMIS_3.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_01_EMIS_3.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_01_EMIS_3.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++0.998041 0.001959
++0.873557 0.126443
++0.413547 0.586453
++0.026065 0.973935
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_01_EMIS_4.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_01_EMIS_4.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_01_EMIS_4.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_01_EMIS_4.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++1.000000 0.000000
++0.867910 0.132090
++0.352773 0.647227
++0.000000 1.000000
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_01_EMIS_5.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_01_EMIS_5.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_01_EMIS_5.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_01_EMIS_5.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++1.000000 0.000000
++0.867910 0.132090
++0.352773 0.647227
++0.000000 1.000000
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_01_EMIS_6.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_01_EMIS_6.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_01_EMIS_6.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_01_EMIS_6.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++1.000000 0.000000
++0.867910 0.132090
++0.352772 0.647228
++0.000000 1.000000
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_01_TR_1.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_01_TR_1.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_01_TR_1.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_01_TR_1.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,5 @@
++4
++0.995890 0.003984 0.000126 0.000000
++0.013525 0.972895 0.013581 0.000000
++0.000000 0.021509 0.969506 0.008985
++0.000000 0.000000 0.010866 0.989134
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_01_TR_2.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_01_TR_2.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_01_TR_2.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_01_TR_2.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,5 @@
++4
++0.995890 0.003984 0.000126 0.000000
++0.013525 0.972895 0.013581 0.000000
++0.000000 0.021509 0.969506 0.008985
++0.000000 0.000000 0.010866 0.989134
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_01_TR_3.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_01_TR_3.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_01_TR_3.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_01_TR_3.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,5 @@
++4
++0.995853 0.004147 0.000000 0.000000
++0.013633 0.972446 0.013921 0.000000
++0.000000 0.021477 0.969530 0.008992
++0.000000 0.000000 0.010854 0.989146
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_01_TR_4.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_01_TR_4.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_01_TR_4.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_01_TR_4.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,5 @@
++4
++0.993854 0.006146 0.000000 0.000000
++0.017786 0.970203 0.012011 0.000000
++0.000000 0.018842 0.969656 0.011502
++0.000000 0.000000 0.019144 0.980856
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_01_TR_5.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_01_TR_5.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_01_TR_5.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_01_TR_5.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,5 @@
++4
++0.993854 0.006146 0.000000 0.000000
++0.017786 0.970203 0.012011 0.000000
++0.000000 0.018842 0.969656 0.011502
++0.000000 0.000000 0.019144 0.980856
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_01_TR_6.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_01_TR_6.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_01_TR_6.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_01_TR_6.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,5 @@
++4
++0.993854 0.006146 0.000000 0.000000
++0.017786 0.970203 0.012012 0.000000
++0.000000 0.018842 0.969656 0.011502
++0.000000 0.000000 0.019144 0.980856
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_02_EMIS_1.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_02_EMIS_1.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_02_EMIS_1.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_02_EMIS_1.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++0.987482 0.012518
++0.840788 0.159212
++0.551777 0.448223
++0.170548 0.829452
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_02_EMIS_2.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_02_EMIS_2.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_02_EMIS_2.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_02_EMIS_2.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++0.987482 0.012518
++0.840787 0.159213
++0.551777 0.448223
++0.170548 0.829452
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_02_EMIS_3.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_02_EMIS_3.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_02_EMIS_3.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_02_EMIS_3.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++0.987731 0.012269
++0.844548 0.155452
++0.556750 0.443250
++0.169916 0.830084
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_02_EMIS_4.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_02_EMIS_4.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_02_EMIS_4.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_02_EMIS_4.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++1.000000 0.000000
++0.792679 0.207321
++0.343881 0.656119
++0.000000 1.000000
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_02_EMIS_5.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_02_EMIS_5.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_02_EMIS_5.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_02_EMIS_5.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++1.000000 0.000000
++0.792679 0.207321
++0.343881 0.656119
++0.000000 1.000000
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_02_EMIS_6.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_02_EMIS_6.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_02_EMIS_6.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_02_EMIS_6.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++1.000000 0.000000
++0.792679 0.207321
++0.343881 0.656119
++0.000000 1.000000
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_02_TR_1.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_02_TR_1.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_02_TR_1.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_02_TR_1.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,5 @@
++4
++0.995926 0.003873 0.000202 0.000000
++0.004163 0.989694 0.005843 0.000299
++0.000126 0.007740 0.987142 0.004992
++0.000000 0.001349 0.004598 0.994053
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_02_TR_2.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_02_TR_2.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_02_TR_2.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_02_TR_2.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,5 @@
++4
++0.995926 0.003873 0.000202 0.000000
++0.004163 0.989694 0.005843 0.000299
++0.000126 0.007740 0.987142 0.004992
++0.000000 0.001349 0.004598 0.994053
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_02_TR_3.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_02_TR_3.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_02_TR_3.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_02_TR_3.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,5 @@
++4
++0.995931 0.004069 0.000000 0.000000
++0.004078 0.989180 0.006578 0.000164
++0.000259 0.008947 0.985323 0.005470
++0.000000 0.000000 0.006456 0.993544
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_02_TR_4.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_02_TR_4.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_02_TR_4.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_02_TR_4.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,5 @@
++4
++0.983235 0.016765 0.000000 0.000000
++0.012130 0.984373 0.003497 0.000000
++0.000000 0.006229 0.974222 0.019548
++0.000000 0.000000 0.076845 0.923155
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_02_TR_5.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_02_TR_5.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_02_TR_5.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_02_TR_5.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,5 @@
++4
++0.983235 0.016765 0.000000 0.000000
++0.012130 0.984373 0.003497 0.000000
++0.000000 0.006229 0.974222 0.019548
++0.000000 0.000000 0.076844 0.923156
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_02_TR_6.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_02_TR_6.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_02_TR_6.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_02_TR_6.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,5 @@
++4
++0.983235 0.016765 0.000000 0.000000
++0.012130 0.984373 0.003497 0.000000
++0.000000 0.006229 0.974222 0.019548
++0.000000 0.000000 0.076845 0.923155
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_03_EMIS_1.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_03_EMIS_1.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_03_EMIS_1.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_03_EMIS_1.txt 2012-04-11 12:16:28.000000000 +0200
+@@ -0,0 +1,4 @@
++ 0.9981 0.0019
++ 0.8487 0.1513
++ 0.4031 0.5969
++ 0.0635 0.9365
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_03_EMIS_2.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_03_EMIS_2.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_03_EMIS_2.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_03_EMIS_2.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++0.997869 0.002131
++0.847321 0.152679
++0.414124 0.585876
++0.067332 0.932668
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_03_EMIS_3.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_03_EMIS_3.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_03_EMIS_3.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_03_EMIS_3.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++0.997984 0.002016
++0.846865 0.153135
++0.402769 0.597231
++0.063616 0.936384
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_03_EMIS_4.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_03_EMIS_4.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_03_EMIS_4.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_03_EMIS_4.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++1.000000 0.000000
++0.798658 0.201342
++0.282286 0.717714
++0.000000 1.000000
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_03_EMIS_5.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_03_EMIS_5.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_03_EMIS_5.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_03_EMIS_5.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++1.000000 0.000000
++0.798657 0.201343
++0.282286 0.717714
++0.000000 1.000000
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_03_EMIS_6.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_03_EMIS_6.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_03_EMIS_6.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_03_EMIS_6.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++1.000000 0.000000
++0.798543 0.201457
++0.280281 0.719719
++0.000000 1.000000
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_03_TR_1.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_03_TR_1.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_03_TR_1.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_03_TR_1.txt 2012-04-11 12:17:14.000000000 +0200
+@@ -0,0 +1,5 @@
++4
++0.9935 0.0065 0.0000 0.0000
++0.0082 0.9722 0.0195 0.0000
++0.0000 0.0296 0.9547 0.0156
++0.0000 0.0000 0.0151 0.9849
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_03_TR_2.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_03_TR_2.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_03_TR_2.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_03_TR_2.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,5 @@
++4
++0.993664 0.005179 0.001157 0.000000
++0.007522 0.975453 0.016889 0.000136
++0.001114 0.025204 0.958373 0.015308
++0.000000 0.001628 0.012690 0.985682
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_03_TR_3.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_03_TR_3.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_03_TR_3.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_03_TR_3.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,5 @@
++4
++0.993494 0.006506 0.000000 0.000000
++0.007769 0.973039 0.018866 0.000326
++0.000803 0.028362 0.955708 0.015127
++0.000000 0.000000 0.015016 0.984984
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_03_TR_4.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_03_TR_4.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_03_TR_4.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_03_TR_4.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,5 @@
++4
++0.989283 0.009966 0.000751 0.000000
++0.012851 0.974998 0.012151 0.000000
++0.000411 0.018041 0.957214 0.024333
++0.000000 0.000000 0.046183 0.953817
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_03_TR_5.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_03_TR_5.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_03_TR_5.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_03_TR_5.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,5 @@
++4
++0.989283 0.009966 0.000751 0.000000
++0.012851 0.974998 0.012151 0.000000
++0.000411 0.018041 0.957214 0.024334
++0.000000 0.000000 0.046183 0.953817
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_03_TR_6.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_03_TR_6.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_03_TR_6.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_03_TR_6.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,5 @@
++4
++0.989225 0.010775 0.000000 0.000000
++0.012983 0.973653 0.013364 0.000000
++0.000204 0.018779 0.956872 0.024144
++0.000000 0.000000 0.045932 0.954068
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_04_EMIS_1.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_04_EMIS_1.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_04_EMIS_1.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_04_EMIS_1.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++0.994496 0.005504
++0.739671 0.260329
++0.390116 0.609884
++0.116046 0.883954
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_04_EMIS_2.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_04_EMIS_2.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_04_EMIS_2.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_04_EMIS_2.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++0.994496 0.005504
++0.739671 0.260329
++0.390116 0.609884
++0.116046 0.883954
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_04_EMIS_3.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_04_EMIS_3.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_04_EMIS_3.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_04_EMIS_3.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++0.994436 0.005564
++0.737707 0.262293
++0.388729 0.611271
++0.115935 0.884065
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_04_EMIS_4.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_04_EMIS_4.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_04_EMIS_4.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_04_EMIS_4.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++1.000000 0.000000
++0.706417 0.293583
++0.254199 0.745801
++0.000000 1.000000
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_04_EMIS_5.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_04_EMIS_5.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_04_EMIS_5.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_04_EMIS_5.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++1.000000 0.000000
++0.706417 0.293583
++0.254200 0.745800
++0.000000 1.000000
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_04_EMIS_6.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_04_EMIS_6.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_04_EMIS_6.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_04_EMIS_6.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++1.000000 0.000000
++0.706417 0.293583
++0.254199 0.745801
++0.000000 1.000000
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_04_TR_1.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_04_TR_1.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_04_TR_1.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_04_TR_1.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,5 @@
++4
++0.997999 0.001406 0.000596 0.000000
++0.000931 0.993213 0.005856 0.000000
++0.000000 0.008393 0.988560 0.003046
++0.000000 0.000000 0.002283 0.997717
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_04_TR_2.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_04_TR_2.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_04_TR_2.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_04_TR_2.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,5 @@
++4
++0.997999 0.001406 0.000596 0.000000
++0.000931 0.993213 0.005856 0.000000
++0.000000 0.008393 0.988560 0.003046
++0.000000 0.000000 0.002283 0.997717
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_04_TR_3.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_04_TR_3.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_04_TR_3.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_04_TR_3.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,5 @@
++4
++0.997972 0.002028 0.000000 0.000000
++0.000939 0.993091 0.005970 0.000000
++0.000000 0.008233 0.988698 0.003070
++0.000000 0.000000 0.002281 0.997719
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_04_TR_4.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_04_TR_4.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_04_TR_4.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_04_TR_4.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,5 @@
++4
++0.994840 0.005160 0.000000 0.000000
++0.002036 0.993518 0.004445 0.000000
++0.000000 0.004979 0.967285 0.027736
++0.000000 0.000000 0.093249 0.906751
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_04_TR_5.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_04_TR_5.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_04_TR_5.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_04_TR_5.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,5 @@
++4
++0.994840 0.005160 0.000000 0.000000
++0.002036 0.993518 0.004445 0.000000
++0.000000 0.004979 0.967285 0.027736
++0.000000 0.000000 0.093249 0.906751
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_04_TR_6.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_04_TR_6.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_04_TR_6.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_04_TR_6.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,5 @@
++4
++0.994840 0.005160 0.000000 0.000000
++0.002036 0.993518 0.004445 0.000000
++0.000000 0.004979 0.967285 0.027736
++0.000000 0.000000 0.093249 0.906751
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_05_EMIS_1.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_05_EMIS_1.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_05_EMIS_1.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_05_EMIS_1.txt 2012-04-11 13:15:53.000000000 +0200
+@@ -0,0 +1,4 @@
++1.0000 0.0000
++0.7949 0.2051
++0.2190 0.7810
++0.0000 1.0000
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_05_EMIS_2.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_05_EMIS_2.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_05_EMIS_2.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_05_EMIS_2.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++0.994221 0.005779
++0.791285 0.208715
++0.259785 0.740215
++0.024869 0.975131
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_05_EMIS_3.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_05_EMIS_3.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_05_EMIS_3.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_05_EMIS_3.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++0.994479 0.005521
++0.792197 0.207803
++0.252393 0.747607
++0.022515 0.977485
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_05_EMIS_4.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_05_EMIS_4.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_05_EMIS_4.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_05_EMIS_4.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++1.000000 0.000000
++0.785948 0.214052
++0.222132 0.777868
++0.000000 1.000000
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_05_EMIS_5.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_05_EMIS_5.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_05_EMIS_5.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_05_EMIS_5.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++1.000000 0.000000
++0.795611 0.204389
++0.222316 0.777684
++0.000000 1.000000
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_05_EMIS_6.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_05_EMIS_6.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_05_EMIS_6.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_05_EMIS_6.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++1.000000 0.000000
++0.793626 0.206374
++0.220239 0.779761
++0.000000 1.000000
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_05_TR_1.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_05_TR_1.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_05_TR_1.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_05_TR_1.txt 2012-04-11 13:16:32.000000000 +0200
+@@ -0,0 +1,5 @@
++4
++0.9802 0.0198 0.0000 0.0000
++0.0332 0.9354 0.0314 0.0000
++0.0000 0.0196 0.9554 0.0250
++0.0000 0.0000 0.0336 0.9664
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_05_TR_2.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_05_TR_2.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_05_TR_2.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_05_TR_2.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,5 @@
++4
++0.986315 0.012132 0.001553 0.000000
++0.025537 0.945272 0.023413 0.005777
++0.001443 0.015974 0.968606 0.013977
++0.000000 0.003701 0.011267 0.985033
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_05_TR_3.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_05_TR_3.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_05_TR_3.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_05_TR_3.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,5 @@
++4
++0.985989 0.014011 0.000000 0.000000
++0.024382 0.941662 0.028433 0.005524
++0.002343 0.020057 0.963398 0.014202
++0.000000 0.000000 0.015953 0.984047
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_05_TR_4.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_05_TR_4.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_05_TR_4.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_05_TR_4.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,5 @@
++4
++0.979504 0.019032 0.000001 0.001462
++0.033739 0.938752 0.027509 0.000000
++0.000951 0.016808 0.958272 0.023969
++0.000789 0.000000 0.032638 0.966572
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_05_TR_5.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_05_TR_5.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_05_TR_5.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_05_TR_5.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,5 @@
++4
++0.980563 0.018361 0.001076 0.000000
++0.031675 0.939973 0.027078 0.001274
++0.000814 0.017785 0.956897 0.024505
++0.000000 0.000082 0.033501 0.966416
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_05_TR_6.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_05_TR_6.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_05_TR_6.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_05_TR_6.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,5 @@
++4
++0.980239 0.019761 0.000000 0.000000
++0.032594 0.936713 0.028935 0.001758
++0.000482 0.018626 0.956979 0.023914
++0.000000 0.000000 0.033293 0.966707
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_06_EMIS_1.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_06_EMIS_1.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_06_EMIS_1.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_06_EMIS_1.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++0.984115 0.015885
++0.744450 0.255550
++0.348918 0.651082
++0.110405 0.889595
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_06_EMIS_2.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_06_EMIS_2.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_06_EMIS_2.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_06_EMIS_2.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++0.984226 0.015774
++0.746125 0.253875
++0.348906 0.651094
++0.109723 0.890277
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_06_EMIS_3.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_06_EMIS_3.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_06_EMIS_3.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_06_EMIS_3.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++0.985123 0.014877
++0.752346 0.247654
++0.353051 0.646949
++0.110518 0.889482
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_06_EMIS_4.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_06_EMIS_4.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_06_EMIS_4.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_06_EMIS_4.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++1.000000 0.000000
++0.683686 0.316314
++0.255351 0.744649
++0.000000 1.000000
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_06_EMIS_5.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_06_EMIS_5.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_06_EMIS_5.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_06_EMIS_5.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++1.000000 0.000000
++0.683686 0.316314
++0.255351 0.744649
++0.000000 1.000000
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_06_EMIS_6.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_06_EMIS_6.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_06_EMIS_6.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_06_EMIS_6.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++1.000000 0.000000
++0.683775 0.316225
++0.255237 0.744763
++0.000000 1.000000
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_06_TR_1.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_06_TR_1.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_06_TR_1.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_06_TR_1.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,5 @@
++4
++0.988854 0.009481 0.000836 0.000829
++0.007578 0.973684 0.018738 0.000000
++0.000000 0.011064 0.983127 0.005809
++0.000000 0.000793 0.007130 0.992078
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_06_TR_2.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_06_TR_2.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_06_TR_2.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_06_TR_2.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,5 @@
++4
++0.989091 0.009342 0.001567 0.000000
++0.007366 0.973631 0.019004 0.000000
++0.000000 0.011190 0.982608 0.006202
++0.000000 0.000706 0.007358 0.991936
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_06_TR_3.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_06_TR_3.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_06_TR_3.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_06_TR_3.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,5 @@
++4
++0.989178 0.010822 0.000000 0.000000
++0.007150 0.972399 0.020448 0.000002
++0.000000 0.011932 0.981350 0.006718
++0.000000 0.000000 0.008604 0.991396
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_06_TR_4.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_06_TR_4.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_06_TR_4.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_06_TR_4.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,5 @@
++4
++0.973760 0.025883 0.000357 0.000000
++0.012927 0.971603 0.015470 0.000000
++0.000000 0.009794 0.974358 0.015848
++0.000000 0.000000 0.073705 0.926295
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_06_TR_5.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_06_TR_5.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_06_TR_5.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_06_TR_5.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,5 @@
++4
++0.973760 0.025883 0.000357 0.000000
++0.012927 0.971603 0.015470 0.000000
++0.000000 0.009794 0.974358 0.015848
++0.000000 0.000000 0.073705 0.926295
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_06_TR_6.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_06_TR_6.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_06_TR_6.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_06_TR_6.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,5 @@
++4
++0.973724 0.026276 0.000000 0.000000
++0.012925 0.971363 0.015711 0.000000
++0.000000 0.009842 0.974326 0.015832
++0.000000 0.000000 0.073670 0.926330
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_07_EMIS_1.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_07_EMIS_1.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_07_EMIS_1.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_07_EMIS_1.txt 2012-04-12 17:07:26.000000000 +0200
+@@ -0,0 +1,4 @@
++ 0.9863 0.0137
++ 0.6241 0.3759
++ 0.2490 0.7510
++ 0.0483 0.9517
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_07_EMIS_2.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_07_EMIS_2.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_07_EMIS_2.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_07_EMIS_2.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++0.986399 0.013601
++0.624707 0.375293
++0.249518 0.750482
++0.048400 0.951600
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_07_EMIS_3.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_07_EMIS_3.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_07_EMIS_3.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_07_EMIS_3.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++0.986399 0.013601
++0.624707 0.375293
++0.249518 0.750482
++0.048400 0.951600
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_07_EMIS_4.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_07_EMIS_4.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_07_EMIS_4.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_07_EMIS_4.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++1.000000 0.000000
++0.513923 0.486077
++0.163501 0.836499
++0.000000 1.000000
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_07_EMIS_5.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_07_EMIS_5.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_07_EMIS_5.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_07_EMIS_5.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++1.000000 0.000000
++0.513698 0.486302
++0.163121 0.836879
++0.000000 1.000000
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_07_EMIS_6.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_07_EMIS_6.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_07_EMIS_6.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_07_EMIS_6.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++1.000000 0.000000
++0.513698 0.486302
++0.163121 0.836879
++0.000000 1.000000
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_07_TR_1.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_07_TR_1.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_07_TR_1.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_07_TR_1.txt 2012-04-12 17:12:23.000000000 +0200
+@@ -0,0 +1,5 @@
++4
++0.9687 0.0313 0.0000 0.0000
++0.0199 0.9480 0.0321 0.0000
++0.0000 0.0165 0.9787 0.0048
++0.0000 0.0000 0.0044 0.9956
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_07_TR_2.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_07_TR_2.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_07_TR_2.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_07_TR_2.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,5 @@
++4
++0.968648 0.031352 0.000000 0.000000
++0.019922 0.948024 0.031714 0.000340
++0.000000 0.016448 0.978987 0.004565
++0.000000 0.000000 0.004407 0.995593
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_07_TR_3.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_07_TR_3.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_07_TR_3.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_07_TR_3.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,5 @@
++4
++0.968648 0.031352 0.000000 0.000000
++0.019922 0.948024 0.031714 0.000340
++0.000000 0.016448 0.978987 0.004565
++0.000000 0.000000 0.004407 0.995593
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_07_TR_4.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_07_TR_4.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_07_TR_4.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_07_TR_4.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,5 @@
++4
++0.949802 0.050198 0.000000 0.000000
++0.021790 0.961174 0.017036 0.000000
++0.000000 0.011818 0.965631 0.022552
++0.000092 0.000000 0.043674 0.956234
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_07_TR_5.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_07_TR_5.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_07_TR_5.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_07_TR_5.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,5 @@
++4
++0.949721 0.050279 0.000000 0.000000
++0.021878 0.961057 0.017064 0.000000
++0.000000 0.011886 0.965738 0.022376
++0.000000 0.000000 0.043589 0.956411
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_07_TR_6.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_07_TR_6.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_07_TR_6.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_07_TR_6.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,5 @@
++4
++0.949721 0.050279 0.000000 0.000000
++0.021878 0.961057 0.017064 0.000000
++0.000000 0.011886 0.965738 0.022376
++0.000000 0.000000 0.043589 0.956411
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_08_EMIS_1.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_08_EMIS_1.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_08_EMIS_1.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_08_EMIS_1.txt 2012-04-13 10:24:18.000000000 +0200
+@@ -0,0 +1,4 @@
++0.9637 0.0363
++0.5701 0.4299
++0.1799 0.8201
++0.0148 0.9852
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_08_EMIS_2.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_08_EMIS_2.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_08_EMIS_2.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_08_EMIS_2.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++0.963087 0.036913
++0.565046 0.434954
++0.175517 0.824483
++0.014865 0.985135
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_08_EMIS_3.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_08_EMIS_3.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_08_EMIS_3.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_08_EMIS_3.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++0.963276 0.036724
++0.568927 0.431073
++0.183428 0.816572
++0.015065 0.984935
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_08_EMIS_4.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_08_EMIS_4.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_08_EMIS_4.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_08_EMIS_4.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++1.000000 0.000000
++0.594628 0.405372
++0.141368 0.858632
++0.000000 1.000000
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_08_EMIS_5.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_08_EMIS_5.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_08_EMIS_5.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_08_EMIS_5.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++1.000000 0.000000
++0.593902 0.406098
++0.141195 0.858805
++0.000000 1.000000
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_08_EMIS_6.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_08_EMIS_6.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_08_EMIS_6.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_08_EMIS_6.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++1.000000 0.000000
++0.593902 0.406098
++0.141196 0.858804
++0.000000 1.000000
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_08_TR_1.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_08_TR_1.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_08_TR_1.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_08_TR_1.txt 2012-04-13 11:00:30.000000000 +0200
+@@ -0,0 +1,5 @@
++4
++0.9865 0.0135 0.0000 0.0000
++0.0098 0.9801 0.0101 0.0000
++0.0000 0.0097 0.9853 0.0050
++0.0000 0.0000 0.0021 0.9979
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_08_TR_2.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_08_TR_2.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_08_TR_2.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_08_TR_2.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,5 @@
++4
++0.986363 0.013637 0.000000 0.000000
++0.009785 0.980778 0.008638 0.000799
++0.000000 0.007836 0.988698 0.003466
++0.000000 0.000602 0.001139 0.998258
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_08_TR_3.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_08_TR_3.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_08_TR_3.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_08_TR_3.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,5 @@
++4
++0.986474 0.013526 0.000000 0.000000
++0.009067 0.981430 0.008660 0.000843
++0.000808 0.008292 0.986702 0.004198
++0.000000 0.000000 0.002054 0.997946
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_08_TR_4.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_08_TR_4.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_08_TR_4.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_08_TR_4.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,5 @@
++4
++0.966025 0.033975 0.000000 0.000000
++0.016354 0.975086 0.008560 0.000000
++0.000000 0.006997 0.968978 0.024025
++0.000184 0.000000 0.017514 0.982301
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_08_TR_5.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_08_TR_5.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_08_TR_5.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_08_TR_5.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,5 @@
++4
++0.965607 0.034393 0.000000 0.000000
++0.016747 0.974626 0.008627 0.000000
++0.000124 0.007184 0.968430 0.024261
++0.000000 0.000000 0.017855 0.982145
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_08_TR_6.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_08_TR_6.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_08_TR_6.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_08_TR_6.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,5 @@
++4
++0.965607 0.034393 0.000000 0.000000
++0.016747 0.974626 0.008627 0.000000
++0.000124 0.007184 0.968430 0.024261
++0.000000 0.000000 0.017855 0.982145
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_09_EMIS_1.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_09_EMIS_1.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_09_EMIS_1.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_09_EMIS_1.txt 2012-04-11 09:47:15.000000000 +0200
+@@ -0,0 +1,4 @@
++0.9820 0.0180
++0.6431 0.3569
++0.1219 0.8781
++0.0054 0.9946
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_09_EMIS_2.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_09_EMIS_2.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_09_EMIS_2.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_09_EMIS_2.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++0.981766 0.018234
++0.637950 0.362050
++0.122409 0.877591
++0.005951 0.994049
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_09_EMIS_3.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_09_EMIS_3.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_09_EMIS_3.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_09_EMIS_3.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++0.981938 0.018062
++0.641092 0.358908
++0.121998 0.878002
++0.005592 0.994408
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_09_EMIS_4.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_09_EMIS_4.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_09_EMIS_4.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_09_EMIS_4.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++1.000000 0.000000
++0.678549 0.321451
++0.116320 0.883680
++0.000000 1.000000
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_09_EMIS_5.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_09_EMIS_5.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_09_EMIS_5.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_09_EMIS_5.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++1.000000 0.000000
++0.678550 0.321450
++0.116320 0.883680
++0.000000 1.000000
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_09_EMIS_6.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_09_EMIS_6.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_09_EMIS_6.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_09_EMIS_6.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++1.000000 0.000000
++0.678550 0.321450
++0.116320 0.883680
++0.000000 1.000000
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_09_TR_1.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_09_TR_1.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_09_TR_1.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_09_TR_1.txt 2012-04-11 09:48:32.000000000 +0200
+@@ -0,0 +1,5 @@
++4
++0.9879 0.0121 0.0000 0.0000
++0.0206 0.9518 0.0276 0.0000
++0.0000 0.0109 0.9749 0.0142
++0.0000 0.0000 0.0090 0.9910
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_09_TR_2.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_09_TR_2.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_09_TR_2.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_09_TR_2.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,5 @@
++4
++0.987950 0.012050 0.000000 0.000000
++0.020526 0.952590 0.023914 0.002970
++0.000000 0.009787 0.978082 0.012131
++0.000000 0.000697 0.007445 0.991857
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_09_TR_3.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_09_TR_3.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_09_TR_3.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_09_TR_3.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,5 @@
++4
++0.987943 0.012057 0.000000 0.000000
++0.020565 0.952197 0.024648 0.002590
++0.000000 0.010837 0.976493 0.012669
++0.000000 0.000000 0.008581 0.991419
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_09_TR_4.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_09_TR_4.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_09_TR_4.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_09_TR_4.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,5 @@
++4
++0.973444 0.026556 0.000000 0.000000
++0.036048 0.940513 0.023439 0.000000
++0.000000 0.009273 0.972700 0.018028
++0.000000 0.000000 0.014422 0.985578
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_09_TR_5.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_09_TR_5.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_09_TR_5.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_09_TR_5.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,5 @@
++4
++0.973444 0.026556 0.000000 0.000000
++0.036048 0.940513 0.023438 0.000001
++0.000000 0.009273 0.972699 0.018028
++0.000000 0.000000 0.014422 0.985578
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_09_TR_6.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_09_TR_6.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_09_TR_6.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_09_TR_6.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,5 @@
++4
++0.973444 0.026556 0.000000 0.000000
++0.036048 0.940513 0.023439 0.000000
++0.000000 0.009273 0.972699 0.018028
++0.000000 0.000000 0.014422 0.985578
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_10_EMIS_1.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_10_EMIS_1.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_10_EMIS_1.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_10_EMIS_1.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++0.980153 0.019847
++0.554091 0.445909
++0.207780 0.792220
++0.023396 0.976604
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_10_EMIS_2.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_10_EMIS_2.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_10_EMIS_2.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_10_EMIS_2.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++0.979364 0.020636
++0.550015 0.449985
++0.202525 0.797475
++0.023070 0.976930
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_10_EMIS_3.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_10_EMIS_3.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_10_EMIS_3.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_10_EMIS_3.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++0.979364 0.020636
++0.550015 0.449985
++0.202524 0.797476
++0.023070 0.976930
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_10_EMIS_4.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_10_EMIS_4.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_10_EMIS_4.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_10_EMIS_4.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++1.000000 0.000000
++0.517759 0.482241
++0.123055 0.876945
++0.000000 1.000000
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_10_EMIS_5.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_10_EMIS_5.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_10_EMIS_5.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_10_EMIS_5.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++1.000000 0.000000
++0.516651 0.483349
++0.121851 0.878149
++0.000000 1.000000
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_10_EMIS_6.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_10_EMIS_6.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_10_EMIS_6.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_10_EMIS_6.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++1.000000 0.000000
++0.516651 0.483349
++0.121851 0.878149
++0.000000 1.000000
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_10_TR_1.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_10_TR_1.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_10_TR_1.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_10_TR_1.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,5 @@
++4
++0.980040 0.019960 0.000000 0.000000
++0.009361 0.979632 0.011007 0.000000
++0.000000 0.008546 0.981238 0.010216
++0.000159 0.000000 0.004893 0.994948
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_10_TR_2.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_10_TR_2.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_10_TR_2.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_10_TR_2.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,5 @@
++4
++0.979815 0.020185 0.000000 0.000000
++0.009597 0.979440 0.010963 0.000000
++0.000171 0.008715 0.981153 0.009962
++0.000000 0.000000 0.005002 0.994998
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_10_TR_3.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_10_TR_3.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_10_TR_3.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_10_TR_3.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,5 @@
++4
++0.979815 0.020185 0.000000 0.000000
++0.009597 0.979440 0.010963 0.000000
++0.000171 0.008715 0.981153 0.009962
++0.000000 0.000000 0.005002 0.994998
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_10_TR_4.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_10_TR_4.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_10_TR_4.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_10_TR_4.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,5 @@
++4
++0.966883 0.033117 0.000000 0.000000
++0.011895 0.980390 0.007715 0.000000
++0.000000 0.004925 0.981967 0.013108
++0.000223 0.000000 0.015750 0.984028
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_10_TR_5.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_10_TR_5.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_10_TR_5.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_10_TR_5.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,5 @@
++4
++0.966393 0.033607 0.000000 0.000000
++0.012180 0.980067 0.007753 0.000000
++0.000119 0.004997 0.982130 0.012754
++0.000000 0.000000 0.015748 0.984252
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_10_TR_6.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_10_TR_6.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_10_TR_6.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_10_TR_6.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,5 @@
++4
++0.966393 0.033607 0.000000 0.000000
++0.012180 0.980067 0.007753 0.000000
++0.000119 0.004997 0.982130 0.012754
++0.000000 0.000000 0.015748 0.984252
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_11_EMIS_1.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_11_EMIS_1.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_11_EMIS_1.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_11_EMIS_1.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++0.993385 0.006615
++0.535542 0.464458
++0.145505 0.854495
++0.008291 0.991709
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_11_EMIS_2.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_11_EMIS_2.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_11_EMIS_2.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_11_EMIS_2.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++0.993385 0.006615
++0.535542 0.464458
++0.145505 0.854495
++0.008291 0.991709
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_11_EMIS_3.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_11_EMIS_3.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_11_EMIS_3.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_11_EMIS_3.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++0.993099 0.006901
++0.537868 0.462132
++0.148514 0.851486
++0.008378 0.991622
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_11_EMIS_4.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_11_EMIS_4.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_11_EMIS_4.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_11_EMIS_4.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++1.000000 0.000000
++0.523164 0.476836
++0.116409 0.883591
++0.000000 1.000000
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_11_EMIS_5.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_11_EMIS_5.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_11_EMIS_5.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_11_EMIS_5.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++1.000000 0.000000
++0.523165 0.476835
++0.116409 0.883591
++0.000000 1.000000
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_11_EMIS_6.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_11_EMIS_6.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_11_EMIS_6.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_11_EMIS_6.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++1.000000 0.000000
++0.523164 0.476836
++0.116409 0.883591
++0.000000 1.000000
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_11_TR_1.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_11_TR_1.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_11_TR_1.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_11_TR_1.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,5 @@
++4
++0.983183 0.016817 0.000000 0.000000
++0.011386 0.959825 0.028789 0.000000
++0.000000 0.020296 0.970255 0.009449
++0.000000 0.000000 0.005172 0.994828
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_11_TR_2.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_11_TR_2.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_11_TR_2.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_11_TR_2.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,5 @@
++4
++0.983183 0.016817 0.000000 0.000000
++0.011386 0.959825 0.028789 0.000000
++0.000000 0.020296 0.970255 0.009449
++0.000000 0.000000 0.005172 0.994828
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_11_TR_3.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_11_TR_3.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_11_TR_3.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_11_TR_3.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,5 @@
++4
++0.983728 0.016272 0.000000 0.000000
++0.008868 0.963058 0.028074 0.000000
++0.001642 0.017698 0.971219 0.009441
++0.000000 0.000000 0.005179 0.994821
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_11_TR_4.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_11_TR_4.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_11_TR_4.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_11_TR_4.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,5 @@
++4
++0.978772 0.021228 0.000000 0.000000
++0.012616 0.962855 0.024528 0.000000
++0.000000 0.015986 0.969384 0.014630
++0.000000 0.000000 0.011572 0.988428
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_11_TR_5.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_11_TR_5.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_11_TR_5.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_11_TR_5.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,5 @@
++4
++0.978772 0.021228 0.000000 0.000000
++0.012616 0.962855 0.024528 0.000000
++0.000000 0.015986 0.969384 0.014630
++0.000000 0.000000 0.011572 0.988428
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_11_TR_6.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_11_TR_6.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_11_TR_6.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_11_TR_6.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,5 @@
++4
++0.978772 0.021228 0.000000 0.000000
++0.012616 0.962855 0.024528 0.000000
++0.000000 0.015986 0.969384 0.014630
++0.000000 0.000000 0.011572 0.988428
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_12_EMIS_1.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_12_EMIS_1.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_12_EMIS_1.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_12_EMIS_1.txt 2012-04-11 10:29:02.000000000 +0200
+@@ -0,0 +1,4 @@
++0.8888 0.1112
++0.4100 0.5900
++0.0757 0.9243
++0.0044 0.9956
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_12_EMIS_2.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_12_EMIS_2.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_12_EMIS_2.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_12_EMIS_2.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++0.861761 0.138239
++0.288898 0.711102
++0.029434 0.970566
++0.011455 0.988545
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_12_EMIS_3.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_12_EMIS_3.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_12_EMIS_3.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_12_EMIS_3.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++0.862017 0.137983
++0.288797 0.711203
++0.037516 0.962484
++0.010802 0.989198
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_12_EMIS_4.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_12_EMIS_4.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_12_EMIS_4.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_12_EMIS_4.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++1.000000 0.000000
++0.541908 0.458092
++0.089061 0.910939
++0.000000 1.000000
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_12_EMIS_5.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_12_EMIS_5.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_12_EMIS_5.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_12_EMIS_5.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++1.000000 0.000000
++0.541310 0.458690
++0.089430 0.910570
++0.000000 1.000000
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_12_EMIS_6.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_12_EMIS_6.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_12_EMIS_6.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_12_EMIS_6.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++1.000000 0.000000
++0.538096 0.461904
++0.088676 0.911324
++0.000000 1.000000
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_12_TR_1.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_12_TR_1.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_12_TR_1.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_12_TR_1.txt 2012-04-11 10:28:21.000000000 +0200
+@@ -0,0 +1,5 @@
++4
++0.9861 0.0139 0.0000 0.0000
++0.0112 0.9744 0.0144 0.0000
++0.0000 0.0057 0.9887 0.0056
++0.0000 0.0000 0.0031 0.9969
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_12_TR_2.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_12_TR_2.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_12_TR_2.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_12_TR_2.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,5 @@
++4
++0.986896 0.012567 0.000537 0.000000
++0.007966 0.979055 0.012583 0.000396
++0.000000 0.012626 0.556373 0.431001
++0.000000 0.000106 0.145597 0.854298
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_12_TR_3.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_12_TR_3.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_12_TR_3.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_12_TR_3.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,5 @@
++4
++0.986728 0.013272 0.000000 0.000000
++0.008096 0.978353 0.013444 0.000107
++0.000000 0.016492 0.597659 0.385849
++0.000000 0.000000 0.096958 0.903042
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_12_TR_4.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_12_TR_4.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_12_TR_4.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_12_TR_4.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,5 @@
++4
++0.936349 0.062103 0.000000 0.001548
++0.026279 0.962904 0.010817 0.000000
++0.000000 0.004550 0.983471 0.011979
++0.000000 0.000000 0.008361 0.991639
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_12_TR_5.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_12_TR_5.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_12_TR_5.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_12_TR_5.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,5 @@
++4
++0.935706 0.062076 0.002218 0.000000
++0.026763 0.962672 0.010565 0.000000
++0.000000 0.004562 0.982864 0.012574
++0.000000 0.000000 0.008545 0.991455
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_12_TR_6.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_12_TR_6.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_12_TR_6.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_12_TR_6.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,5 @@
++4
++0.934619 0.065381 0.000000 0.000000
++0.027355 0.961030 0.011611 0.000004
++0.000000 0.004614 0.982922 0.012464
++0.000000 0.000000 0.008504 0.991496
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_13_EMIS_1.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_13_EMIS_1.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_13_EMIS_1.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_13_EMIS_1.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++0.986717 0.013283
++0.402670 0.597330
++0.015303 0.984697
++0.010372 0.989628
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_13_EMIS_2.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_13_EMIS_2.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_13_EMIS_2.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_13_EMIS_2.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++0.986720 0.013280
++0.402802 0.597198
++0.015920 0.984080
++0.010426 0.989574
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_13_EMIS_3.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_13_EMIS_3.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_13_EMIS_3.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_13_EMIS_3.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++0.986013 0.013987
++0.377978 0.622022
++0.017277 0.982723
++0.010220 0.989780
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_13_EMIS_4.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_13_EMIS_4.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_13_EMIS_4.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_13_EMIS_4.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++1.000000 0.000000
++0.427649 0.572351
++0.038345 0.961655
++0.000000 1.000000
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_13_EMIS_5.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_13_EMIS_5.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_13_EMIS_5.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_13_EMIS_5.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++1.000000 0.000000
++0.427101 0.572899
++0.042474 0.957526
++0.000000 1.000000
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_13_EMIS_6.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_13_EMIS_6.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_13_EMIS_6.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_13_EMIS_6.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++1.000000 0.000000
++0.406127 0.593873
++0.053007 0.946993
++0.000000 1.000000
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_13_TR_1.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_13_TR_1.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_13_TR_1.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_13_TR_1.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,5 @@
++4
++0.953774 0.040055 0.001314 0.004857
++0.043320 0.916013 0.031897 0.008770
++0.000987 0.004140 0.550473 0.444401
++0.000013 0.000408 0.198552 0.801027
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_13_TR_2.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_13_TR_2.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_13_TR_2.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_13_TR_2.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,5 @@
++4
++0.953780 0.039999 0.006220 0.000000
++0.043302 0.915980 0.032617 0.008100
++0.001175 0.004865 0.529543 0.464417
++0.000000 0.000350 0.170196 0.829454
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_13_TR_3.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_13_TR_3.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_13_TR_3.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_13_TR_3.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,5 @@
++4
++0.952145 0.047855 0.000000 0.000000
++0.044060 0.908319 0.035418 0.012204
++0.001488 0.008084 0.497853 0.492575
++0.000000 0.000000 0.127563 0.872437
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_13_TR_4.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_13_TR_4.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_13_TR_4.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_13_TR_4.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,5 @@
++4
++0.942532 0.050730 0.000000 0.006738
++0.054379 0.906873 0.038655 0.000093
++0.000848 0.004819 0.407234 0.587100
++0.000000 0.000007 0.274177 0.725815
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_13_TR_5.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_13_TR_5.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_13_TR_5.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_13_TR_5.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,5 @@
++4
++0.942495 0.050806 0.006700 0.000000
++0.054416 0.906653 0.038812 0.000119
++0.000935 0.005353 0.346148 0.647564
++0.000000 0.000010 0.260991 0.738998
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_13_TR_6.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_13_TR_6.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_13_TR_6.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_13_TR_6.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,5 @@
++4
++0.940781 0.059219 0.000000 0.000000
++0.055047 0.898755 0.022754 0.023444
++0.001108 0.007296 0.205563 0.786033
++0.000000 0.000000 0.230032 0.769968
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_14_EMIS_1.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_14_EMIS_1.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_14_EMIS_1.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_14_EMIS_1.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++0.758891 0.241109
++0.021746 0.978254
++0.000000 1.000000
++0.000000 1.000000
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_14_EMIS_2.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_14_EMIS_2.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_14_EMIS_2.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_14_EMIS_2.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++0.758891 0.241109
++0.021746 0.978254
++0.000000 1.000000
++0.000000 1.000000
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_14_EMIS_3.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_14_EMIS_3.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_14_EMIS_3.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_14_EMIS_3.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++0.752618 0.247382
++0.015569 0.984431
++0.000000 1.000000
++0.000000 1.000000
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_14_EMIS_4.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_14_EMIS_4.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_14_EMIS_4.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_14_EMIS_4.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++1.000000 0.000000
++0.337478 0.662522
++0.001447 0.998553
++0.000000 1.000000
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_14_EMIS_5.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_14_EMIS_5.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_14_EMIS_5.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_14_EMIS_5.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++1.000000 0.000000
++0.337479 0.662521
++0.001694 0.998306
++0.000000 1.000000
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_14_EMIS_6.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_14_EMIS_6.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_14_EMIS_6.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_14_EMIS_6.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++1.000000 0.000000
++0.336356 0.663644
++0.002284 0.997716
++0.000000 1.000000
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_14_TR_1.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_14_TR_1.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_14_TR_1.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_14_TR_1.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,5 @@
++4
++0.947108 0.035043 0.012111 0.005738
++0.012550 0.985315 0.001107 0.001028
++0.000000 0.000653 0.545651 0.453696
++0.000000 0.000266 0.199173 0.800561
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_14_TR_2.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_14_TR_2.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_14_TR_2.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_14_TR_2.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,5 @@
++4
++0.947108 0.035037 0.017854 0.000000
++0.012550 0.985315 0.001067 0.001068
++0.000000 0.000727 0.520916 0.478357
++0.000000 0.000261 0.171750 0.827988
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_14_TR_3.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_14_TR_3.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_14_TR_3.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_14_TR_3.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,5 @@
++4
++0.945044 0.054956 0.000000 0.000000
++0.010908 0.983701 0.002667 0.002723
++0.000000 0.002047 0.475427 0.522525
++0.000000 0.000000 0.130850 0.869150
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_14_TR_4.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_14_TR_4.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_14_TR_4.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_14_TR_4.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,5 @@
++4
++0.820210 0.178628 0.000620 0.000542
++0.080110 0.860711 0.034629 0.024551
++0.000000 0.002264 0.486210 0.511526
++0.000000 0.000509 0.163119 0.836372
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_14_TR_5.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_14_TR_5.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_14_TR_5.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_14_TR_5.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,5 @@
++4
++0.820195 0.178662 0.001143 0.000000
++0.080133 0.860644 0.034988 0.024235
++0.000000 0.002670 0.462064 0.535266
++0.000000 0.000481 0.139558 0.859961
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_14_TR_6.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_14_TR_6.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_14_TR_6.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_14_TR_6.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,5 @@
++4
++0.819757 0.180243 0.000000 0.000000
++0.080574 0.859213 0.045173 0.015041
++0.000000 0.006099 0.424060 0.569841
++0.000000 0.000000 0.104208 0.895792
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_15_EMIS_1.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_15_EMIS_1.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_15_EMIS_1.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_15_EMIS_1.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++0.294028 0.705972
++0.024326 0.975674
++0.003311 0.996689
++0.000136 0.999864
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_15_EMIS_2.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_15_EMIS_2.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_15_EMIS_2.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_15_EMIS_2.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++0.294026 0.705974
++0.024318 0.975682
++0.003866 0.996134
++0.000115 0.999885
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_15_EMIS_3.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_15_EMIS_3.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_15_EMIS_3.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_15_EMIS_3.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++0.293442 0.706558
++0.022754 0.977246
++0.003851 0.996149
++0.000223 0.999777
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_15_EMIS_4.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_15_EMIS_4.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_15_EMIS_4.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_15_EMIS_4.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++1.000000 0.000000
++0.087557 0.912443
++0.011134 0.988866
++0.000000 1.000000
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_15_EMIS_5.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_15_EMIS_5.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_15_EMIS_5.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_15_EMIS_5.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++1.000000 0.000000
++0.087050 0.912950
++0.012707 0.987293
++0.000000 1.000000
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_15_EMIS_6.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_15_EMIS_6.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_15_EMIS_6.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_15_EMIS_6.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,4 @@
++1.000000 0.000000
++0.084782 0.915218
++0.016305 0.983695
++0.000000 1.000000
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_15_TR_1.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_15_TR_1.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_15_TR_1.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_15_TR_1.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,5 @@
++4
++0.977767 0.017013 0.002873 0.002347
++0.002561 0.994980 0.001569 0.000891
++0.000263 0.001055 0.550150 0.448533
++0.000015 0.000255 0.189445 0.810285
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_15_TR_2.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_15_TR_2.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_15_TR_2.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_15_TR_2.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,5 @@
++4
++0.977766 0.017015 0.005219 0.000000
++0.002561 0.994984 0.001539 0.000916
++0.000345 0.001204 0.530769 0.467682
++0.000000 0.000244 0.162100 0.837656
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_15_TR_3.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_15_TR_3.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_15_TR_3.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_15_TR_3.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,5 @@
++4
++0.977209 0.022791 0.000000 0.000000
++0.002530 0.994125 0.001545 0.001799
++0.000381 0.002931 0.486358 0.510329
++0.000000 0.000000 0.128671 0.871329
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_15_TR_4.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_15_TR_4.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_15_TR_4.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_15_TR_4.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,5 @@
++4
++0.505631 0.476765 0.000000 0.017604
++0.037979 0.951250 0.008253 0.002518
++0.000000 0.002777 0.497578 0.499645
++0.000000 0.000014 0.169472 0.830515
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_15_TR_5.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_15_TR_5.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_15_TR_5.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_15_TR_5.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,5 @@
++4
++0.505431 0.480847 0.013722 0.000000
++0.037918 0.950965 0.008590 0.002527
++0.000000 0.003222 0.477164 0.519613
++0.000000 0.000008 0.147810 0.852182
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_15_TR_6.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_15_TR_6.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_15_TR_6.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_15_TR_6.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,5 @@
++4
++0.502365 0.497635 0.000000 0.000000
++0.038215 0.949488 0.009589 0.002708
++0.000000 0.004309 0.441494 0.554197
++0.000000 0.000000 0.114732 0.885268
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_all_EMIS.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_all_EMIS.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_all_EMIS.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_all_EMIS.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,76 @@
++ Caso 1 Caso 2A Caso 2B Caso 3 Caso 4 - 2A Caso 4 - 2B
++1 0.998042 0.001958 # 0.998042 0.001958 # 0.998041 0.001959 # 1.000000 0.000000 # 1.000000 0.000000 # 1.000000 0.000000
++ 0.874341 0.125659 # 0.874341 0.125659 # 0.873557 0.126443 # 0.867910 0.132090 # 0.867910 0.132090 # 0.867910 0.132090
++ 0.414555 0.585445 # 0.414555 0.585445 # 0.413547 0.586453 # 0.352773 0.647227 # 0.352773 0.647227 # 0.352772 0.647228
++ 0.026164 0.973836 # 0.026164 0.973836 # 0.026065 0.973935 # 0.000000 1.000000 # 0.000000 1.000000 # 0.000000 1.000000
++ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
++2 0.987482 0.012518 # 0.987482 0.012518 # 0.987731 0.012269 # 1.000000 0.000000 # 1.000000 0.000000 # 1.000000 0.000000
++ 0.840788 0.159212 # 0.840787 0.159213 # 0.844548 0.155452 # 0.792679 0.207321 # 0.792679 0.207321 # 0.792679 0.207321
++ 0.551777 0.448223 # 0.551777 0.448223 # 0.556750 0.443250 # 0.343881 0.656119 # 0.343881 0.656119 # 0.343881 0.656119
++ 0.170548 0.829452 # 0.170548 0.829452 # 0.169916 0.830084 # 0.000000 1.000000 # 0.000000 1.000000 # 0.000000 1.000000
++ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
++3 0.997910 0.002090 # 0.997869 0.002131 # 0.997984 0.002016 # 1.000000 0.000000 # 1.000000 0.000000 # 1.000000 0.000000
++ 0.849461 0.150539 # 0.847321 0.152679 # 0.846865 0.153135 # 0.798658 0.201342 # 0.798657 0.201343 # 0.798543 0.201457
++ 0.421274 0.578726 # 0.414124 0.585876 # 0.402769 0.597231 # 0.282286 0.717714 # 0.282286 0.717714 # 0.280281 0.719719
++ 0.070398 0.929602 # 0.067332 0.932668 # 0.063616 0.936384 # 0.000000 1.000000 # 0.000000 1.000000 # 0.000000 1.000000
++ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
++4 0.994496 0.005504 # 0.994496 0.005504 # 0.994436 0.005564 # 1.000000 0.000000 # 1.000000 0.000000 # 1.000000 0.000000
++ 0.739671 0.260329 # 0.739671 0.260329 # 0.737707 0.262293 # 0.706417 0.293583 # 0.706417 0.293583 # 0.706417 0.293583
++ 0.390116 0.609884 # 0.390116 0.609884 # 0.388729 0.611271 # 0.254199 0.745801 # 0.254200 0.745800 # 0.254199 0.745801
++ 0.116046 0.883954 # 0.116046 0.883954 # 0.115935 0.884065 # 0.000000 1.000000 # 0.000000 1.000000 # 0.000000 1.000000
++ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
++5 0.993080 0.006920 # 0.994221 0.005779 # 0.994479 0.005521 # 1.000000 0.000000 # 1.000000 0.000000 # 1.000000 0.000000
++ 0.772560 0.227440 # 0.791285 0.208715 # 0.792197 0.207803 # 0.785948 0.214052 # 0.795611 0.204389 # 0.793626 0.206374
++ 0.256170 0.743830 # 0.259785 0.740215 # 0.252393 0.747607 # 0.222132 0.777868 # 0.222316 0.777684 # 0.220239 0.779761
++ 0.024979 0.975021 # 0.024869 0.975131 # 0.022515 0.977485 # 0.000000 1.000000 # 0.000000 1.000000 # 0.000000 1.000000
++ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
++6 0.984115 0.015885 # 0.984226 0.015774 # 0.985123 0.014877 # 1.000000 0.000000 # 1.000000 0.000000 # 1.000000 0.000000
++ 0.744450 0.255550 # 0.746125 0.253875 # 0.752346 0.247654 # 0.683686 0.316314 # 0.683686 0.316314 # 0.683775 0.316225
++ 0.348918 0.651082 # 0.348906 0.651094 # 0.353051 0.646949 # 0.255351 0.744649 # 0.255351 0.744649 # 0.255237 0.744763
++ 0.110405 0.889595 # 0.109723 0.890277 # 0.110518 0.889482 # 0.000000 1.000000 # 0.000000 1.000000 # 0.000000 1.000000
++ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
++7 0.986341 0.013659 # 0.986399 0.013601 # 0.986399 0.013601 # 1.000000 0.000000 # 1.000000 0.000000 # 1.000000 0.000000
++ 0.624363 0.375637 # 0.624707 0.375293 # 0.624707 0.375293 # 0.513923 0.486077 # 0.513698 0.486302 # 0.513698 0.486302
++ 0.249070 0.750930 # 0.249518 0.750482 # 0.249518 0.750482 # 0.163501 0.836499 # 0.163121 0.836879 # 0.163121 0.836879
++ 0.048323 0.951677 # 0.048400 0.951600 # 0.048400 0.951600 # 0.000000 1.000000 # 0.000000 1.000000 # 0.000000 1.000000
++ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
++8 0.963217 0.036783 # 0.963087 0.036913 # 0.963276 0.036724 # 1.000000 0.000000 # 1.000000 0.000000 # 1.000000 0.000000
++ 0.566250 0.433750 # 0.565046 0.434954 # 0.568927 0.431073 # 0.594628 0.405372 # 0.593902 0.406098 # 0.593902 0.406098
++ 0.176231 0.823769 # 0.175517 0.824483 # 0.183428 0.816572 # 0.141368 0.858632 # 0.141195 0.858805 # 0.141196 0.858804
++ 0.014858 0.985142 # 0.014865 0.985135 # 0.015065 0.984935 # 0.000000 1.000000 # 0.000000 1.000000 # 0.000000 1.000000
++ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
++9 0.981766 0.018234 # 0.981766 0.018234 # 0.981938 0.018062 # 1.000000 0.000000 # 1.000000 0.000000 # 1.000000 0.000000
++ 0.637950 0.362050 # 0.637950 0.362050 # 0.641092 0.358908 # 0.678549 0.321451 # 0.678550 0.321450 # 0.678550 0.321450
++ 0.122409 0.877591 # 0.122409 0.877591 # 0.121998 0.878002 # 0.116320 0.883680 # 0.116320 0.883680 # 0.116320 0.883680
++ 0.005951 0.994049 # 0.005951 0.994049 # 0.005592 0.994408 # 0.000000 1.000000 # 0.000000 1.000000 # 0.000000 1.000000
++ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
++10 0.980153 0.019847 # 0.979364 0.020636 # 0.979364 0.020636 # 1.000000 0.000000 # 1.000000 0.000000 # 1.000000 0.000000
++ 0.554091 0.445909 # 0.550015 0.449985 # 0.550015 0.449985 # 0.517759 0.482241 # 0.516651 0.483349 # 0.516651 0.483349
++ 0.207780 0.792220 # 0.202525 0.797475 # 0.202524 0.797476 # 0.123055 0.876945 # 0.121851 0.878149 # 0.121851 0.878149
++ 0.023396 0.976604 # 0.023070 0.976930 # 0.023070 0.976930 # 0.000000 1.000000 # 0.000000 1.000000 # 0.000000 1.000000
++ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
++11 0.993385 0.006615 # 0.993385 0.006615 # 0.993099 0.006901 # 1.000000 0.000000 # 1.000000 0.000000 # 1.000000 0.000000
++ 0.535542 0.464458 # 0.535542 0.464458 # 0.537868 0.462132 # 0.523164 0.476836 # 0.523165 0.476835 # 0.523164 0.476836
++ 0.145505 0.854495 # 0.145505 0.854495 # 0.148514 0.851486 # 0.116409 0.883591 # 0.116409 0.883591 # 0.116409 0.883591
++ 0.008291 0.991709 # 0.008291 0.991709 # 0.008378 0.991622 # 0.000000 1.000000 # 0.000000 1.000000 # 0.000000 1.000000
++ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
++12 0.861739 0.138261 # 0.861761 0.138239 # 0.862017 0.137983 # 1.000000 0.000000 # 1.000000 0.000000 # 1.000000 0.000000
++ 0.288812 0.711188 # 0.288898 0.711102 # 0.288797 0.711203 # 0.541908 0.458092 # 0.541310 0.458690 # 0.538096 0.461904
++ 0.027587 0.972413 # 0.029434 0.970566 # 0.037516 0.962484 # 0.089061 0.910939 # 0.089430 0.910570 # 0.088676 0.911324
++ 0.011131 0.988869 # 0.011455 0.988545 # 0.010802 0.989198 # 0.000000 1.000000 # 0.000000 1.000000 # 0.000000 1.000000
++ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
++13 0.986717 0.013283 # 0.986720 0.013280 # 0.986013 0.013987 # 1.000000 0.000000 # 1.000000 0.000000 # 1.000000 0.000000
++ 0.402670 0.597330 # 0.402802 0.597198 # 0.377978 0.622022 # 0.427649 0.572351 # 0.427101 0.572899 # 0.406127 0.593873
++ 0.015303 0.984697 # 0.015920 0.984080 # 0.017277 0.982723 # 0.038345 0.961655 # 0.042474 0.957526 # 0.053007 0.946993
++ 0.010372 0.989628 # 0.010426 0.989574 # 0.010220 0.989780 # 0.000000 1.000000 # 0.000000 1.000000 # 0.000000 1.000000
++ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
++14 0.758891 0.241109 # 0.758891 0.241109 # 0.752618 0.247382 # 1.000000 0.000000 # 1.000000 0.000000 # 1.000000 0.000000
++ 0.021746 0.978254 # 0.021746 0.978254 # 0.015569 0.984431 # 0.337478 0.662522 # 0.337479 0.662521 # 0.336356 0.663644
++ 0.000000 1.000000 # 0.000000 1.000000 # 0.000000 1.000000 # 0.001447 0.998553 # 0.001694 0.998306 # 0.002284 0.997716
++ 0.000000 1.000000 # 0.000000 1.000000 # 0.000000 1.000000 # 0.000000 1.000000 # 0.000000 1.000000 # 0.000000 1.000000
++ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
++15 0.294028 0.705972 # 0.294026 0.705974 # 0.293442 0.706558 # 1.000000 0.000000 # 1.000000 0.000000 # 1.000000 0.000000
++ 0.024326 0.975674 # 0.024318 0.975682 # 0.022754 0.977246 # 0.087557 0.912443 # 0.087050 0.912950 # 0.084782 0.915218
++ 0.003311 0.996689 # 0.003866 0.996134 # 0.003851 0.996149 # 0.011134 0.988866 # 0.012707 0.987293 # 0.016305 0.983695
++ 0.000136 0.999864 # 0.000115 0.999885 # 0.000223 0.999777 # 0.000000 1.000000 # 0.000000 1.000000 # 0.000000 1.000000
++ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_all_TR.txt b/src/hidden-markov-error-model/configs/HMM_4states/HMM_all_TR.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/HMM_all_TR.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/HMM_all_TR.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,76 @@
++ Caso 1 Caso 2A Caso 2B Caso 3 Caso 4 - 2A Caso 4 - 2B
++1 0.995890 0.003984 0.000126 0.000000 # 0.995890 0.003984 0.000126 0.000000 # 0.995853 0.004147 0.000000 0.000000 # 0.993854 0.006146 0.000000 0.000000 # 0.993854 0.006146 0.000000 0.000000 # 0.993854 0.006146 0.000000 0.000000
++ 0.013525 0.972895 0.013581 0.000000 # 0.013525 0.972895 0.013581 0.000000 # 0.013633 0.972446 0.013921 0.000000 # 0.017786 0.970203 0.012011 0.000000 # 0.017786 0.970203 0.012011 0.000000 # 0.017786 0.970203 0.012012 0.000000
++ 0.000000 0.021509 0.969506 0.008985 # 0.000000 0.021509 0.969506 0.008985 # 0.000000 0.021477 0.969530 0.008992 # 0.000000 0.018842 0.969656 0.011502 # 0.000000 0.018842 0.969656 0.011502 # 0.000000 0.018842 0.969656 0.011502
++ 0.000000 0.000000 0.010866 0.989134 # 0.000000 0.000000 0.010866 0.989134 # 0.000000 0.000000 0.010854 0.989146 # 0.000000 0.000000 0.019144 0.980856 # 0.000000 0.000000 0.019144 0.980856 # 0.000000 0.000000 0.019144 0.980856
++ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
++2 0.995926 0.003873 0.000202 0.000000 # 0.995926 0.003873 0.000202 0.000000 # 0.995931 0.004069 0.000000 0.000000 # 0.983235 0.016765 0.000000 0.000000 # 0.983235 0.016765 0.000000 0.000000 # 0.983235 0.016765 0.000000 0.000000
++ 0.004163 0.989694 0.005843 0.000299 # 0.004163 0.989694 0.005843 0.000299 # 0.004078 0.989180 0.006578 0.000164 # 0.012130 0.984373 0.003497 0.000000 # 0.012130 0.984373 0.003497 0.000000 # 0.012130 0.984373 0.003497 0.000000
++ 0.000126 0.007740 0.987142 0.004992 # 0.000126 0.007740 0.987142 0.004992 # 0.000259 0.008947 0.985323 0.005470 # 0.000000 0.006229 0.974222 0.019548 # 0.000000 0.006229 0.974222 0.019548 # 0.000000 0.006229 0.974222 0.019548
++ 0.000000 0.001349 0.004598 0.994053 # 0.000000 0.001349 0.004598 0.994053 # 0.000000 0.000000 0.006456 0.993544 # 0.000000 0.000000 0.076845 0.923155 # 0.000000 0.000000 0.076844 0.923156 # 0.000000 0.000000 0.076845 0.923155
++ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
++3 0.993699 0.005286 0.000649 0.000366 # 0.993664 0.005179 0.001157 0.000000 # 0.993494 0.006506 0.000000 0.000000 # 0.989283 0.009966 0.000751 0.000000 # 0.989283 0.009966 0.000751 0.000000 # 0.989225 0.010775 0.000000 0.000000
++ 0.007593 0.975150 0.017257 0.000000 # 0.007522 0.975453 0.016889 0.000136 # 0.007769 0.973039 0.018866 0.000326 # 0.012851 0.974998 0.012151 0.000000 # 0.012851 0.974998 0.012151 0.000000 # 0.012983 0.973653 0.013364 0.000000
++ 0.000003 0.025998 0.959316 0.014683 # 0.001114 0.025204 0.958373 0.015308 # 0.000803 0.028362 0.955708 0.015127 # 0.000411 0.018041 0.957214 0.024333 # 0.000411 0.018041 0.957214 0.024334 # 0.000204 0.018779 0.956872 0.024144
++ 0.000839 0.001288 0.011673 0.986200 # 0.000000 0.001628 0.012690 0.985682 # 0.000000 0.000000 0.015016 0.984984 # 0.000000 0.000000 0.046183 0.953817 # 0.000000 0.000000 0.046183 0.953817 # 0.000000 0.000000 0.045932 0.954068
++ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
++4 0.997999 0.001406 0.000596 0.000000 # 0.997999 0.001406 0.000596 0.000000 # 0.997972 0.002028 0.000000 0.000000 # 0.994840 0.005160 0.000000 0.000000 # 0.994840 0.005160 0.000000 0.000000 # 0.994840 0.005160 0.000000 0.000000
++ 0.000931 0.993213 0.005856 0.000000 # 0.000931 0.993213 0.005856 0.000000 # 0.000939 0.993091 0.005970 0.000000 # 0.002036 0.993518 0.004445 0.000000 # 0.002036 0.993518 0.004445 0.000000 # 0.002036 0.993518 0.004445 0.000000
++ 0.000000 0.008393 0.988560 0.003046 # 0.000000 0.008393 0.988560 0.003046 # 0.000000 0.008233 0.988698 0.003070 # 0.000000 0.004979 0.967285 0.027736 # 0.000000 0.004979 0.967285 0.027736 # 0.000000 0.004979 0.967285 0.027736
++ 0.000000 0.000000 0.002283 0.997717 # 0.000000 0.000000 0.002283 0.997717 # 0.000000 0.000000 0.002281 0.997719 # 0.000000 0.000000 0.093249 0.906751 # 0.000000 0.000000 0.093249 0.906751 # 0.000000 0.000000 0.093249 0.906751
++ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
++5 0.985814 0.011143 0.000460 0.002582 # 0.986315 0.012132 0.001553 0.000000 # 0.985989 0.014011 0.000000 0.000000 # 0.979504 0.019032 0.000001 0.001462 # 0.980563 0.018361 0.001076 0.000000 # 0.980239 0.019761 0.000000 0.000000
++ 0.024629 0.949383 0.025988 0.000000 # 0.025537 0.945272 0.023413 0.005777 # 0.024382 0.941662 0.028433 0.005524 # 0.033739 0.938752 0.027509 0.000000 # 0.031675 0.939973 0.027078 0.001274 # 0.032594 0.936713 0.028935 0.001758
++ 0.002508 0.014474 0.969050 0.013967 # 0.001443 0.015974 0.968606 0.013977 # 0.002343 0.020057 0.963398 0.014202 # 0.000951 0.016808 0.958272 0.023969 # 0.000814 0.017785 0.956897 0.024505 # 0.000482 0.018626 0.956979 0.023914
++ 0.001744 0.001473 0.011636 0.985146 # 0.000000 0.003701 0.011267 0.985033 # 0.000000 0.000000 0.015953 0.984047 # 0.000789 0.000000 0.032638 0.966572 # 0.000000 0.000082 0.033501 0.966416 # 0.000000 0.000000 0.033293 0.966707
++ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
++6 0.988854 0.009481 0.000836 0.000829 # 0.989091 0.009342 0.001567 0.000000 # 0.989178 0.010822 0.000000 0.000000 # 0.973760 0.025883 0.000357 0.000000 # 0.973760 0.025883 0.000357 0.000000 # 0.973724 0.026276 0.000000 0.000000
++ 0.007578 0.973684 0.018738 0.000000 # 0.007366 0.973631 0.019004 0.000000 # 0.007150 0.972399 0.020448 0.000002 # 0.012927 0.971603 0.015470 0.000000 # 0.012927 0.971603 0.015470 0.000000 # 0.012925 0.971363 0.015711 0.000000
++ 0.000000 0.011064 0.983127 0.005809 # 0.000000 0.011190 0.982608 0.006202 # 0.000000 0.011932 0.981350 0.006718 # 0.000000 0.009794 0.974358 0.015848 # 0.000000 0.009794 0.974358 0.015848 # 0.000000 0.009842 0.974326 0.015832
++ 0.000000 0.000793 0.007130 0.992078 # 0.000000 0.000706 0.007358 0.991936 # 0.000000 0.000000 0.008604 0.991396 # 0.000000 0.000000 0.073705 0.926295 # 0.000000 0.000000 0.073705 0.926295 # 0.000000 0.000000 0.073670 0.926330
++ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
++7 0.968653 0.031347 0.000000 0.000000 # 0.968648 0.031352 0.000000 0.000000 # 0.968648 0.031352 0.000000 0.000000 # 0.949802 0.050198 0.000000 0.000000 # 0.949721 0.050279 0.000000 0.000000 # 0.949721 0.050279 0.000000 0.000000
++ 0.019903 0.947939 0.032158 0.000000 # 0.019922 0.948024 0.031714 0.000340 # 0.019922 0.948024 0.031714 0.000340 # 0.021790 0.961174 0.017036 0.000000 # 0.021878 0.961057 0.017064 0.000000 # 0.021878 0.961057 0.017064 0.000000
++ 0.000000 0.016518 0.978722 0.004760 # 0.000000 0.016448 0.978987 0.004565 # 0.000000 0.016448 0.978987 0.004565 # 0.000000 0.011818 0.965631 0.022552 # 0.000000 0.011886 0.965738 0.022376 # 0.000000 0.011886 0.965738 0.022376
++ 0.000000 0.000000 0.004434 0.995566 # 0.000000 0.000000 0.004407 0.995593 # 0.000000 0.000000 0.004407 0.995593 # 0.000092 0.000000 0.043674 0.956234 # 0.000000 0.000000 0.043589 0.956411 # 0.000000 0.000000 0.043589 0.956411
++ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
++8 0.986604 0.013396 0.000000 0.000000 # 0.986363 0.013637 0.000000 0.000000 # 0.986474 0.013526 0.000000 0.000000 # 0.966025 0.033975 0.000000 0.000000 # 0.965607 0.034393 0.000000 0.000000 # 0.965607 0.034393 0.000000 0.000000
++ 0.009233 0.981332 0.008644 0.000791 # 0.009785 0.980778 0.008638 0.000799 # 0.009067 0.981430 0.008660 0.000843 # 0.016354 0.975086 0.008560 0.000000 # 0.016747 0.974626 0.008627 0.000000 # 0.016747 0.974626 0.008627 0.000000
++ 0.000000 0.007959 0.988513 0.003529 # 0.000000 0.007836 0.988698 0.003466 # 0.000808 0.008292 0.986702 0.004198 # 0.000000 0.006997 0.968978 0.024025 # 0.000124 0.007184 0.968430 0.024261 # 0.000124 0.007184 0.968430 0.024261
++ 0.000164 0.000375 0.001228 0.998233 # 0.000000 0.000602 0.001139 0.998258 # 0.000000 0.000000 0.002054 0.997946 # 0.000184 0.000000 0.017514 0.982301 # 0.000000 0.000000 0.017855 0.982145 # 0.000000 0.000000 0.017855 0.982145
++ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
++9 0.987950 0.012050 0.000000 0.000000 # 0.987950 0.012050 0.000000 0.000000 # 0.987943 0.012057 0.000000 0.000000 # 0.973444 0.026556 0.000000 0.000000 # 0.973444 0.026556 0.000000 0.000000 # 0.973444 0.026556 0.000000 0.000000
++ 0.020526 0.952590 0.023914 0.002970 # 0.020526 0.952590 0.023914 0.002970 # 0.020565 0.952197 0.024648 0.002590 # 0.036048 0.940513 0.023439 0.000000 # 0.036048 0.940513 0.023438 0.000001 # 0.036048 0.940513 0.023439 0.000000
++ 0.000000 0.009787 0.978082 0.012131 # 0.000000 0.009787 0.978082 0.012131 # 0.000000 0.010837 0.976493 0.012669 # 0.000000 0.009273 0.972700 0.018028 # 0.000000 0.009273 0.972699 0.018028 # 0.000000 0.009273 0.972699 0.018028
++ 0.000000 0.000697 0.007445 0.991857 # 0.000000 0.000697 0.007445 0.991857 # 0.000000 0.000000 0.008581 0.991419 # 0.000000 0.000000 0.014422 0.985578 # 0.000000 0.000000 0.014422 0.985578 # 0.000000 0.000000 0.014422 0.985578
++ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
++10 0.980040 0.019960 0.000000 0.000000 # 0.979815 0.020185 0.000000 0.000000 # 0.979815 0.020185 0.000000 0.000000 # 0.966883 0.033117 0.000000 0.000000 # 0.966393 0.033607 0.000000 0.000000 # 0.966393 0.033607 0.000000 0.000000
++ 0.009361 0.979632 0.011007 0.000000 # 0.009597 0.979440 0.010963 0.000000 # 0.009597 0.979440 0.010963 0.000000 # 0.011895 0.980390 0.007715 0.000000 # 0.012180 0.980067 0.007753 0.000000 # 0.012180 0.980067 0.007753 0.000000
++ 0.000000 0.008546 0.981238 0.010216 # 0.000171 0.008715 0.981153 0.009962 # 0.000171 0.008715 0.981153 0.009962 # 0.000000 0.004925 0.981967 0.013108 # 0.000119 0.004997 0.982130 0.012754 # 0.000119 0.004997 0.982130 0.012754
++ 0.000159 0.000000 0.004893 0.994948 # 0.000000 0.000000 0.005002 0.994998 # 0.000000 0.000000 0.005002 0.994998 # 0.000223 0.000000 0.015750 0.984028 # 0.000000 0.000000 0.015748 0.984252 # 0.000000 0.000000 0.015748 0.984252
++ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
++11 0.983183 0.016817 0.000000 0.000000 # 0.983183 0.016817 0.000000 0.000000 # 0.983728 0.016272 0.000000 0.000000 # 0.978772 0.021228 0.000000 0.000000 # 0.978772 0.021228 0.000000 0.000000 # 0.978772 0.021228 0.000000 0.000000
++ 0.011386 0.959825 0.028789 0.000000 # 0.011386 0.959825 0.028789 0.000000 # 0.008868 0.963058 0.028074 0.000000 # 0.012616 0.962855 0.024528 0.000000 # 0.012616 0.962855 0.024528 0.000000 # 0.012616 0.962855 0.024528 0.000000
++ 0.000000 0.020296 0.970255 0.009449 # 0.000000 0.020296 0.970255 0.009449 # 0.001642 0.017698 0.971219 0.009441 # 0.000000 0.015986 0.969384 0.014630 # 0.000000 0.015986 0.969384 0.014630 # 0.000000 0.015986 0.969384 0.014630
++ 0.000000 0.000000 0.005172 0.994828 # 0.000000 0.000000 0.005172 0.994828 # 0.000000 0.000000 0.005179 0.994821 # 0.000000 0.000000 0.011572 0.988428 # 0.000000 0.000000 0.011572 0.988428 # 0.000000 0.000000 0.011572 0.988428
++ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
++12 0.986898 0.012572 0.000000 0.000530 # 0.986896 0.012567 0.000537 0.000000 # 0.986728 0.013272 0.000000 0.000000 # 0.936349 0.062103 0.000000 0.001548 # 0.935706 0.062076 0.002218 0.000000 # 0.934619 0.065381 0.000000 0.000000
++ 0.007959 0.979122 0.012315 0.000604 # 0.007966 0.979055 0.012583 0.000396 # 0.008096 0.978353 0.013444 0.000107 # 0.026279 0.962904 0.010817 0.000000 # 0.026763 0.962672 0.010565 0.000000 # 0.027355 0.961030 0.011611 0.000004
++ 0.000000 0.010681 0.563790 0.425529 # 0.000000 0.012626 0.556373 0.431001 # 0.000000 0.016492 0.597659 0.385849 # 0.000000 0.004550 0.983471 0.011979 # 0.000000 0.004562 0.982864 0.012574 # 0.000000 0.004614 0.982922 0.012464
++ 0.000000 0.000170 0.176835 0.822995 # 0.000000 0.000106 0.145597 0.854298 # 0.000000 0.000000 0.096958 0.903042 # 0.000000 0.000000 0.008361 0.991639 # 0.000000 0.000000 0.008545 0.991455 # 0.000000 0.000000 0.008504 0.991496
++ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
++13 0.953774 0.040055 0.001314 0.004857 # 0.953780 0.039999 0.006220 0.000000 # 0.952145 0.047855 0.000000 0.000000 # 0.942532 0.050730 0.000000 0.006738 # 0.942495 0.050806 0.006700 0.000000 # 0.940781 0.059219 0.000000 0.000000
++ 0.043320 0.916013 0.031897 0.008770 # 0.043302 0.915980 0.032617 0.008100 # 0.044060 0.908319 0.035418 0.012204 # 0.054379 0.906873 0.038655 0.000093 # 0.054416 0.906653 0.038812 0.000119 # 0.055047 0.898755 0.022754 0.023444
++ 0.000987 0.004140 0.550473 0.444401 # 0.001175 0.004865 0.529543 0.464417 # 0.001488 0.008084 0.497853 0.492575 # 0.000848 0.004819 0.407234 0.587100 # 0.000935 0.005353 0.346148 0.647564 # 0.001108 0.007296 0.205563 0.786033
++ 0.000013 0.000408 0.198552 0.801027 # 0.000000 0.000350 0.170196 0.829454 # 0.000000 0.000000 0.127563 0.872437 # 0.000000 0.000007 0.274177 0.725815 # 0.000000 0.000010 0.260991 0.738998 # 0.000000 0.000000 0.230032 0.769968
++ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
++14 0.947108 0.035043 0.012111 0.005738 # 0.947108 0.035037 0.017854 0.000000 # 0.945044 0.054956 0.000000 0.000000 # 0.820210 0.178628 0.000620 0.000542 # 0.820195 0.178662 0.001143 0.000000 # 0.819757 0.180243 0.000000 0.000000
++ 0.012550 0.985315 0.001107 0.001028 # 0.012550 0.985315 0.001067 0.001068 # 0.010908 0.983701 0.002667 0.002723 # 0.080110 0.860711 0.034629 0.024551 # 0.080133 0.860644 0.034988 0.024235 # 0.080574 0.859213 0.045173 0.015041
++ 0.000000 0.000653 0.545651 0.453696 # 0.000000 0.000727 0.520916 0.478357 # 0.000000 0.002047 0.475427 0.522525 # 0.000000 0.002264 0.486210 0.511526 # 0.000000 0.002670 0.462064 0.535266 # 0.000000 0.006099 0.424060 0.569841
++ 0.000000 0.000266 0.199173 0.800561 # 0.000000 0.000261 0.171750 0.827988 # 0.000000 0.000000 0.130850 0.869150 # 0.000000 0.000509 0.163119 0.836372 # 0.000000 0.000481 0.139558 0.859961 # 0.000000 0.000000 0.104208 0.895792
++ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
++15 0.977767 0.017013 0.002873 0.002347 # 0.977766 0.017015 0.005219 0.000000 # 0.977209 0.022791 0.000000 0.000000 # 0.505631 0.476765 0.000000 0.017604 # 0.505431 0.480847 0.013722 0.000000 # 0.502365 0.497635 0.000000 0.000000
++ 0.002561 0.994980 0.001569 0.000891 # 0.002561 0.994984 0.001539 0.000916 # 0.002530 0.994125 0.001545 0.001799 # 0.037979 0.951250 0.008253 0.002518 # 0.037918 0.950965 0.008590 0.002527 # 0.038215 0.949488 0.009589 0.002708
++ 0.000263 0.001055 0.550150 0.448533 # 0.000345 0.001204 0.530769 0.467682 # 0.000381 0.002931 0.486358 0.510329 # 0.000000 0.002777 0.497578 0.499645 # 0.000000 0.003222 0.477164 0.519613 # 0.000000 0.004309 0.441494 0.554197
++ 0.000015 0.000255 0.189445 0.810285 # 0.000000 0.000244 0.162100 0.837656 # 0.000000 0.000000 0.128671 0.871329 # 0.000000 0.000014 0.169472 0.830515 # 0.000000 0.000008 0.147810 0.852182 # 0.000000 0.000000 0.114732 0.885268
++ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/README.txt b/src/hidden-markov-error-model/configs/HMM_4states/README.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_4states/README.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_4states/README.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,3 @@
++HMM_01_EMIS_1.txt && HMM_01_TR_1.txt --> Caso de libertad total
++HMM_01_EMIS_2.txt && HMM_01_TR_2.txt --> Caso de libertad total
++
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_8states/HMM_05_EMIS_1.txt b/src/hidden-markov-error-model/configs/HMM_8states/HMM_05_EMIS_1.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_8states/HMM_05_EMIS_1.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_8states/HMM_05_EMIS_1.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,8 @@
++1.000000 0.000000
++0.778672 0.221328
++0.990820 0.009180
++0.801295 0.198705
++0.339537 0.660463
++0.076543 0.923457
++0.000012 0.999988
++0.006242 0.993758
+\ No newline at end of file
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_8states/HMM_05_TR_1.txt b/src/hidden-markov-error-model/configs/HMM_8states/HMM_05_TR_1.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_8states/HMM_05_TR_1.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_8states/HMM_05_TR_1.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,9 @@
++8
++0.989965 0.010035 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
++0.276105 0.000000 0.723895 0.000000 0.000000 0.000000 0.000000 0.000000
++0.000000 0.033085 0.917546 0.049369 0.000000 0.000000 0.000000 0.000000
++0.000000 0.000000 0.052967 0.900295 0.046738 0.000000 0.000000 0.000000
++0.000000 0.000000 0.000000 0.035086 0.926561 0.038353 0.000000 0.000000
++0.000000 0.000000 0.000000 0.000000 0.030556 0.960626 0.008819 0.000000
++0.000000 0.000000 0.000000 0.000000 0.000000 0.054714 0.695952 0.249334
++0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.089019 0.910981
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_8states/HMM_07_EMIS_1.txt b/src/hidden-markov-error-model/configs/HMM_8states/HMM_07_EMIS_1.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_8states/HMM_07_EMIS_1.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_8states/HMM_07_EMIS_1.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,8 @@
++0.997390 0.002610
++0.928653 0.071347
++0.658585 0.341415
++0.444537 0.555463
++0.202381 0.797619
++0.152999 0.847001
++0.130557 0.869443
++0.006989 0.993011
+\ No newline at end of file
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_8states/HMM_07_TR_1.txt b/src/hidden-markov-error-model/configs/HMM_8states/HMM_07_TR_1.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_8states/HMM_07_TR_1.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_8states/HMM_07_TR_1.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,9 @@
++8
++0.977116 0.022884 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
++0.023341 0.819370 0.157289 0.000000 0.000000 0.000000 0.000000 0.000000
++0.000000 0.172486 0.763738 0.063777 0.000000 0.000000 0.000000 0.000000
++0.000000 0.000000 0.018291 0.941470 0.040239 0.000000 0.000000 0.000000
++0.000000 0.000000 0.000000 0.058352 0.921761 0.019887 0.000000 0.000000
++0.000000 0.000000 0.000000 0.000000 0.019525 0.967251 0.013224 0.000000
++0.000000 0.000000 0.000000 0.000000 0.000000 0.020594 0.690303 0.289103
++0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.116809 0.883191
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_8states/HMM_09_EMIS_1.txt b/src/hidden-markov-error-model/configs/HMM_8states/HMM_09_EMIS_1.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_8states/HMM_09_EMIS_1.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_8states/HMM_09_EMIS_1.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,8 @@
++1.000000 0.000000
++0.529995 0.470005
++0.916067 0.083933
++0.577996 0.422004
++0.469006 0.530994
++0.103897 0.896103
++0.016017 0.983983
++0.000042 0.999958
+\ No newline at end of file
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_8states/HMM_09_TR_1.txt b/src/hidden-markov-error-model/configs/HMM_8states/HMM_09_TR_1.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_8states/HMM_09_TR_1.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_8states/HMM_09_TR_1.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,9 @@
++8
++0.973856 0.026144 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
++0.475171 0.000001 0.524828 0.000000 0.000000 0.000000 0.000000 0.000000
++0.000000 0.070352 0.861296 0.068352 0.000000 0.000000 0.000000 0.000000
++0.000000 0.000000 0.085522 0.811393 0.103086 0.000000 0.000000 0.000000
++0.000000 0.000000 0.000000 0.097063 0.822990 0.079947 0.000000 0.000000
++0.000000 0.000000 0.000000 0.000000 0.014464 0.971163 0.014373 0.000000
++0.000000 0.000000 0.000000 0.000000 0.000000 0.030500 0.673251 0.296249
++0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.134157 0.865843
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_8states/HMM_12_EMIS_1.txt b/src/hidden-markov-error-model/configs/HMM_8states/HMM_12_EMIS_1.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_8states/HMM_12_EMIS_1.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_8states/HMM_12_EMIS_1.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,8 @@
++0.987982 0.012018
++0.797022 0.202978
++0.430918 0.569082
++0.167089 0.832911
++0.035343 0.964657
++0.002521 0.997479
++0.001187 0.998813
++0.001983 0.998017
+\ No newline at end of file
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_8states/HMM_12_TR_1.txt b/src/hidden-markov-error-model/configs/HMM_8states/HMM_12_TR_1.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_8states/HMM_12_TR_1.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_8states/HMM_12_TR_1.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,9 @@
++8
++0.986006 0.013994 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
++0.006170 0.975115 0.018715 0.000000 0.000000 0.000000 0.000000 0.000000
++0.000000 0.014960 0.964312 0.020728 0.000000 0.000000 0.000000 0.000000
++0.000000 0.000000 0.013713 0.961675 0.024612 0.000000 0.000000 0.000000
++0.000000 0.000000 0.000000 0.010624 0.981400 0.007975 0.000000 0.000000
++0.000000 0.000000 0.000000 0.000000 0.011279 0.988084 0.000638 0.000000
++0.000000 0.000000 0.000000 0.000000 0.000000 0.001531 0.694920 0.303549
++0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.130666 0.869334
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_8states/HMM_all_EMIS.txt b/src/hidden-markov-error-model/configs/HMM_8states/HMM_all_EMIS.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_8states/HMM_all_EMIS.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_8states/HMM_all_EMIS.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,36 @@
++1.000000 0.000000
++0.778672 0.221328
++0.990820 0.009180
++0.801295 0.198705
++0.339537 0.660463
++0.076543 0.923457
++0.000012 0.999988
++0.006242 0.993758
++%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
++0.997390 0.002610
++0.928653 0.071347
++0.658585 0.341415
++0.444537 0.555463
++0.202381 0.797619
++0.152999 0.847001
++0.130557 0.869443
++0.006989 0.993011
++%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
++1.000000 0.000000
++0.529995 0.470005
++0.916067 0.083933
++0.577996 0.422004
++0.469006 0.530994
++0.103897 0.896103
++0.016017 0.983983
++0.000042 0.999958
++%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
++0.987982 0.012018
++0.797022 0.202978
++0.430918 0.569082
++0.167089 0.832911
++0.035343 0.964657
++0.002521 0.997479
++0.001187 0.998813
++0.001983 0.998017
++%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+diff -uprNB ns-3.13/src/hidden-markov-error-model/configs/HMM_8states/HMM_all_TR.txt b/src/hidden-markov-error-model/configs/HMM_8states/HMM_all_TR.txt
+--- ns-3.13/src/hidden-markov-error-model/configs/HMM_8states/HMM_all_TR.txt 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/configs/HMM_8states/HMM_all_TR.txt 2011-10-12 10:34:12.000000000 +0200
+@@ -0,0 +1,36 @@
++0.989965 0.010035 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
++0.276105 0.000000 0.723895 0.000000 0.000000 0.000000 0.000000 0.000000
++0.000000 0.033085 0.917546 0.049369 0.000000 0.000000 0.000000 0.000000
++0.000000 0.000000 0.052967 0.900295 0.046738 0.000000 0.000000 0.000000
++0.000000 0.000000 0.000000 0.035086 0.926561 0.038353 0.000000 0.000000
++0.000000 0.000000 0.000000 0.000000 0.030556 0.960626 0.008819 0.000000
++0.000000 0.000000 0.000000 0.000000 0.000000 0.054714 0.695952 0.249334
++0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.089019 0.910981
++%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
++0.977116 0.022884 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
++0.023341 0.819370 0.157289 0.000000 0.000000 0.000000 0.000000 0.000000
++0.000000 0.172486 0.763738 0.063777 0.000000 0.000000 0.000000 0.000000
++0.000000 0.000000 0.018291 0.941470 0.040239 0.000000 0.000000 0.000000
++0.000000 0.000000 0.000000 0.058352 0.921761 0.019887 0.000000 0.000000
++0.000000 0.000000 0.000000 0.000000 0.019525 0.967251 0.013224 0.000000
++0.000000 0.000000 0.000000 0.000000 0.000000 0.020594 0.690303 0.289103
++0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.116809 0.883191
++%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
++0.973856 0.026144 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
++0.475171 0.000001 0.524828 0.000000 0.000000 0.000000 0.000000 0.000000
++0.000000 0.070352 0.861296 0.068352 0.000000 0.000000 0.000000 0.000000
++0.000000 0.000000 0.085522 0.811393 0.103086 0.000000 0.000000 0.000000
++0.000000 0.000000 0.000000 0.097063 0.822990 0.079947 0.000000 0.000000
++0.000000 0.000000 0.000000 0.000000 0.014464 0.971163 0.014373 0.000000
++0.000000 0.000000 0.000000 0.000000 0.000000 0.030500 0.673251 0.296249
++0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.134157 0.865843
++%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
++0.986006 0.013994 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000
++0.006170 0.975115 0.018715 0.000000 0.000000 0.000000 0.000000 0.000000
++0.000000 0.014960 0.964312 0.020728 0.000000 0.000000 0.000000 0.000000
++0.000000 0.000000 0.013713 0.961675 0.024612 0.000000 0.000000 0.000000
++0.000000 0.000000 0.000000 0.010624 0.981400 0.007975 0.000000 0.000000
++0.000000 0.000000 0.000000 0.000000 0.011279 0.988084 0.000638 0.000000
++0.000000 0.000000 0.000000 0.000000 0.000000 0.001531 0.694920 0.303549
++0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 0.130666 0.869334
++%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+diff -uprNB ns-3.13/src/hidden-markov-error-model/examples/tcp-error-model-test.cc b/src/hidden-markov-error-model/examples/tcp-error-model-test.cc
+--- ns-3.13/src/hidden-markov-error-model/examples/tcp-error-model-test.cc 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/examples/tcp-error-model-test.cc 2012-04-17 11:35:07.000000000 +0200
+@@ -0,0 +1,1047 @@
++/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
++/*
++ * Copyright (c) 2011 Universidad de Cantabria
++ *
++ * 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
++ *
++ * Author: David Gómez Fernández <dgomez@tlmat.unican.es>
++ * Ramón Agüero Calvo <ramon@tlmat.unican.es>
++ */
++
++#include "ns3/core-module.h"
++#include "ns3/mobility-module.h"
++#include "ns3/applications-module.h"
++
++#include "ns3/wifi-helper.h"
++#include "ns3/yans-wifi-helper.h"
++#include "ns3/inet-socket-address.h"
++#include "ns3/internet-stack-helper.h"
++#include "ns3/ipv4-address-helper.h"
++#include "ns3/wifi-module.h"
++#include "ns3/propagation-loss-model.h"
++
++#include "ns3/aodv-routing-protocol.h"
++
++#include "ns3/ar-model.h"
++#include "ns3/hidden-markov-error-model.h"
++
++#include "ns3/socket.h"
++#include <ns3/node-list.h>
++
++#include "ns3/wifi-mac-header.h"
++#include "ns3/llc-snap-header.h"
++#include "ns3/ipv4-header.h"
++#include "ns3/tcp-header.h"
++#include "ns3/udp-header.h"
++
++#include <iostream>
++#include <fstream>
++#include <vector>
++#include <string>
++#include <stdio.h>
++
++#include "scratch-logging.h"
++//#include "experiment.h"
++
++NS_LOG_COMPONENT_DEFINE("TcpErrorModelTest");
++
++using namespace std;
++using namespace ns3;
++
++std::string ConvertMacToString(Mac48Address mac);
++std::string getcwd();
++
++enum ChannelMode_t {
++ HIDDEN_MARKOV_ERROR_MODEL,
++ BURSTY_ERROR_AUTO_REGRESSIVE_MODEL,
++ NIST_ERROR_RATE_MODEL
++};
++
++enum TransportProtocol_t {
++ TCP_PROTOCOL,
++ UDP_PROTOCOL
++};
++
++class Experiment {
++public:
++ Experiment ();
++ ~Experiment ();
++
++ u_int32_t GetPacketCounter() const;
++ void SetPacketCounter(u_int32_t packetCounter);
++ u_int32_t GetPktsCorrect() const;
++ void SetPktsCorrect(u_int32_t pktsCorrect);
++ u_int32_t GetPktsReceived() const;
++ void SetPktsReceived(u_int32_t pktsReceived);
++ u_int32_t GetPktsTransmitted () const;
++
++ void SetTransportProtocol (TransportProtocol_t protocol);
++ TransportProtocol_t GetTransportProtocol () const;
++
++ Ptr<Socket> SetupPacketReceive(Ptr<Node> node);
++ void GenerateTraffic(Ptr<Socket> socket, uint32_t pktSize,
++ uint32_t pktCount, Time pktInterval);
++ //Tracing
++ void PhyRxOkTrace (std::string context, Ptr<const Packet> packet, double snr, WifiMode mode, enum WifiPreamble preamble);
++ void PhyRxErrorTrace (std::string context, Ptr<const Packet> packet, double snr);
++
++ //BEAR Callback integration
++ void HmmRxTrace (Ptr<Packet> packet, Time timestamp, bool error, u_int16_t state);
++ void BearRxTrace (Ptr<Packet> packet, Time timestamp, bool error, double propagation, double slowFading, double fastFading);
++
++ //Upper Layer parser
++ packetInfo_t ParsePacket (Ptr<const Packet> packet);
++
++ void OpenTraceFile (string fileName, ChannelMode_t channelModel);
++ void CloseTraceFile ();
++
++ void TraceToFile (string line);
++
++
++private:
++ fstream m_file;
++
++ void ReceivePacket(Ptr<Socket> socket);
++ void SetPosition(Ptr<Node> node, Vector position);
++ Vector GetPosition(Ptr<Node> node);
++ u_int32_t m_pktsReceived;
++ u_int32_t m_pktsCorrect;
++ u_int32_t m_packetCounter;
++
++ u_int32_t m_packetsTransmitted;
++
++ TransportProtocol_t m_protocol;
++};
++
++
++Experiment::Experiment(): m_pktsReceived (0),
++ m_pktsCorrect (0),
++ m_packetCounter (0),
++ m_packetsTransmitted (0)
++{}
++
++Experiment::~Experiment()
++{}
++
++
++void Experiment::SetPosition(Ptr<Node> node, Vector position) {
++ Ptr<MobilityModel> mobility = node->GetObject<MobilityModel>();
++ mobility->SetPosition(position);
++}
++Vector Experiment::GetPosition(Ptr<Node> node) {
++ Ptr<MobilityModel> mobility = node->GetObject<MobilityModel>();
++ return mobility->GetPosition();
++}
++void Experiment::ReceivePacket(Ptr<Socket> socket) {
++ Ptr<Packet> packet;
++ while (packet = socket->Recv()) {
++ // m_pktsReceived++;
++ }
++}
++
++Ptr<Socket> Experiment::SetupPacketReceive(Ptr<Node> node) {
++
++ TypeId tid = TypeId::LookupByName("ns3::TcpSocketFactory");
++
++ if (m_protocol == UDP_PROTOCOL)
++ tid = TypeId::LookupByName("ns3::UdpSocketFactory");
++ Ptr<Socket> sink = Socket::CreateSocket(node, tid);
++ InetSocketAddress local = InetSocketAddress(Ipv4Address::GetAny(), 80);
++ sink->Bind(local);
++ sink->SetRecvCallback(MakeCallback(&Experiment::ReceivePacket, this));
++ return sink;
++}
++void Experiment::GenerateTraffic(Ptr<Socket> socket, uint32_t pktSize,
++ uint32_t pktCount, Time pktInterval) {
++ m_packetCounter --;
++ if (m_packetCounter > 0) {
++ socket->Send(Create<Packet>(pktSize));
++ Simulator::Schedule(pktInterval, &Experiment::GenerateTraffic, this,
++ socket, pktSize, pktCount - 1, pktInterval);
++ } else {
++ socket->Close();
++ }
++ m_packetsTransmitted ++;
++}
++
++u_int32_t Experiment::GetPacketCounter () const
++{
++ return m_packetCounter;
++}
++
++void Experiment::SetPacketCounter (u_int32_t packetCounter)
++{
++ this->m_packetCounter = packetCounter;
++}
++
++u_int32_t Experiment::GetPktsCorrect () const
++{
++ return m_pktsCorrect;
++}
++
++void Experiment::SetPktsCorrect (u_int32_t pktsCorrect)
++{
++ this->m_pktsCorrect = pktsCorrect;
++}
++
++u_int32_t Experiment::GetPktsReceived () const
++{
++ return m_pktsReceived;
++}
++
++void Experiment::SetPktsReceived(u_int32_t pktsReceived)
++{
++ this->m_pktsReceived = pktsReceived;
++}
++
++u_int32_t Experiment::GetPktsTransmitted() const
++{
++ return m_packetsTransmitted;
++}
++
++void Experiment::SetTransportProtocol(TransportProtocol_t protocol)
++{
++ m_protocol = protocol;
++}
++
++TransportProtocol_t Experiment::GetTransportProtocol () const
++{
++ return m_protocol;
++}
++
++//// Trace data frames and their corresponding ACKs
++
++void Experiment::PhyRxOkTrace(std::string context, Ptr<const Packet> packet, double snr, WifiMode mode, enum WifiPreamble preamble)
++{
++
++ ///////////////////////////////////////////////////////
++ NS_LOG_FUNCTION_NOARGS();
++ WifiMacHeader hdr;
++ packetInfo_t packetInfo;
++ char line [255];
++ bool dataOrAck;
++
++ //Ip addresses variables needed for Ipv4Address to String conversion
++ u_int8_t source [4];
++ u_int8_t destination [4];
++ char sourceChar [32];
++ char destChar [32];
++
++ packet->PeekHeader (hdr); //Don't forget to uncomment
++ packetInfo = ParsePacket(packet);
++
++ switch (packetInfo.type)
++ {
++ case TCP_DATA:
++ if (m_protocol == TCP_PROTOCOL)
++ {
++ m_pktsCorrect ++;
++ m_pktsReceived ++;
++
++ //Get the MAC and IP Addresses
++ packetInfo.ipv4Hdr.GetSource().Serialize(source); //Get a string from Ipv4Address
++ packetInfo.ipv4Hdr.GetDestination().Serialize(destination);
++ sprintf(sourceChar, "%d.%d.%d.%d", source[0], source[1], source[2], source[3]);
++ sprintf(destChar, "%d.%d.%d.%d", destination[0], destination[1], destination[2], destination[3]);
++
++ sprintf (line, "%16f %16d %20s %20s %16d %16d %16d %16d %16d %16f", \
++ Simulator::Now().GetSeconds(), true, sourceChar, \
++ destChar, packetInfo.wifiHdr.IsRetry(), \
++ packetInfo.payloadLength, \
++ packetInfo.wifiHdr.GetSequenceNumber(), \
++ packetInfo.tcpHdr.GetSequenceNumber().GetValue(), \
++ packetInfo.tcpHdr.GetAckNumber().GetValue(), \
++ snr);
++ TraceToFile(line);
++ }
++ break;
++ case UDP_DATA:
++ if (m_protocol == UDP_PROTOCOL)
++ {
++ //Distinguish between data or ACK
++ if (hdr.IsData())
++ dataOrAck = false;
++ else if (hdr.IsAck())
++ dataOrAck = true;
++
++ sprintf(line, "%10f %10d %20s %20s %10s %8d %8d %10f", \
++ Simulator::Now().GetSeconds(), \
++ true, \
++ ConvertMacToString(hdr.GetAddr2()).c_str(), \
++ ConvertMacToString(hdr.GetAddr1()).c_str(), \
++ dataOrAck ? "ACK" : "DATA", \
++ packet->GetSize(), \
++ hdr.GetSequenceNumber(), \
++ snr);
++ m_pktsCorrect ++;
++ m_pktsReceived ++;
++
++ TraceToFile(line);
++ }
++ break;
++ default:
++ NS_LOG_ERROR("Unknown packet type --> " << packetInfo.type);
++ break;
++ }
++
++
++ ////////////////////////////////////
++
++}
++
++void Experiment::PhyRxErrorTrace (std::string context, Ptr<const Packet> packet, double snr)
++{
++ ///////////////////////////////////////////////////////
++ NS_LOG_FUNCTION_NOARGS();
++ WifiMacHeader hdr;
++ packetInfo_t packetInfo;
++ char line [255];
++ bool dataOrAck;
++
++ //Ip addresses variables needed for Ipv4Address to String conversion
++ u_int8_t source [4];
++ u_int8_t destination [4];
++ char sourceChar [32];
++ char destChar [32];
++
++ packet->PeekHeader (hdr); //Don't forget to uncomment
++ packetInfo = ParsePacket(packet);
++
++ switch (packetInfo.type)
++ {
++ case TCP_DATA:
++ if (m_protocol == TCP_PROTOCOL)
++ {
++ m_pktsReceived ++;
++
++ //Get the MAC and IP Addresses
++ packetInfo.ipv4Hdr.GetSource().Serialize(source); //Get a string from Ipv4Address
++ packetInfo.ipv4Hdr.GetDestination().Serialize(destination);
++ sprintf(sourceChar, "%d.%d.%d.%d", source[0], source[1], source[2], source[3]);
++ sprintf(destChar, "%d.%d.%d.%d", destination[0], destination[1], destination[2], destination[3]);
++
++ sprintf (line, "%16f %16d %20s %20s %16d %16d %16d %16d %16d %16f", \
++ Simulator::Now().GetSeconds(), false, sourceChar, \
++ destChar, packetInfo.wifiHdr.IsRetry(), \
++ packetInfo.payloadLength, \
++ packetInfo.wifiHdr.GetSequenceNumber(), \
++ packetInfo.tcpHdr.GetSequenceNumber().GetValue(), \
++ packetInfo.tcpHdr.GetAckNumber().GetValue(), \
++ snr);
++ TraceToFile(line);
++ }
++
++ break;
++ case UDP_DATA:
++ if (m_protocol == UDP_PROTOCOL)
++ {
++ //Distinguish between data or ACK
++ if (hdr.IsData())
++ dataOrAck = false;
++ else if (hdr.IsAck())
++ dataOrAck = true;
++
++ sprintf(line, "%10f %10d %20s %20s %10s %8d %8d %10f", \
++ Simulator::Now().GetSeconds(), \
++ false, \
++ ConvertMacToString(hdr.GetAddr2()).c_str(), \
++ ConvertMacToString(hdr.GetAddr1()).c_str(), \
++ dataOrAck ? "ACK" : "DATA", \
++ packet->GetSize(), \
++ hdr.GetSequenceNumber(), \
++ snr);
++ m_pktsReceived ++;
++ TraceToFile(line);
++
++ }
++ break;
++ default:
++ NS_LOG_ERROR("Unknown packet type --> " << packetInfo.type);
++ break;
++ }
++
++
++ ////////////////////////////////////
++
++}
++
++packetInfo_t Experiment::ParsePacket (Ptr<const Packet> packet)
++{
++ NS_LOG_FUNCTION(packet);
++
++ packetInfo_t packetInfo;
++ Ptr<Packet> pktCopy = packet->Copy();
++
++ pktCopy->RemoveHeader(packetInfo.wifiHdr);
++
++ if (packetInfo.wifiHdr.IsData())
++ {
++ pktCopy->RemoveHeader(packetInfo.llcHdr);
++ switch (packetInfo.llcHdr.GetType())
++ {
++ case 0x0806: //ARP
++ packetInfo.type = ARP_PACKET;
++ break;
++ case 0x0800: //IP packet
++ pktCopy->RemoveHeader(packetInfo.ipv4Hdr);
++ switch (packetInfo.ipv4Hdr.GetProtocol())
++ {
++ case 6: //TCP
++ pktCopy->RemoveHeader(packetInfo.tcpHdr);
++ packetInfo.type = TCP_DATA;
++
++ break;
++ case 17: //UDP
++ pktCopy->RemoveHeader(packetInfo.udpHdr);
++ packetInfo.type = UDP_DATA;
++ break;
++ default:
++ NS_LOG_ERROR ("Protocol not implemented yet (IP) --> " << packetInfo.llcHdr.GetType());
++ break;
++ }
++ break;
++ default:
++ NS_LOG_ERROR ("Protocol not implemented yet (LLC) --> " << packetInfo.llcHdr.GetType());
++ break;
++ }
++ }
++ else if (packetInfo.wifiHdr.IsAck())
++ {
++ packetInfo.type = IEEE_80211_ACK;
++ }
++ else // 802.11 Control/Management frame
++ {
++ packetInfo.type = IEEE_80211_NODATA;
++ }
++
++ packetInfo.payloadLength = pktCopy->GetSize() - 4; //Last four bytes are used for tagging
++
++ return packetInfo;
++}
++
++void Experiment::BearRxTrace(Ptr<Packet> packet, Time timestamp, bool error, double propagation, double slowFading, double fastFading)
++{
++ NS_LOG_FUNCTION_NOARGS();
++ WifiMacHeader hdr;
++ packetInfo_t packetInfo;
++ char line [255];
++ bool dataOrAck; //Value used for UDP tracing
++
++ //Ip addresses variables needed for Ipv4Address to String conversion
++ u_int8_t source [4];
++ u_int8_t destination [4];
++ char sourceChar [32];
++ char destChar [32];
++
++ packet->PeekHeader (hdr); //Don't forget to uncomment
++ packetInfo = ParsePacket(packet);
++
++ switch (packetInfo.type)
++ {
++
++ case TCP_DATA:
++ if (m_protocol == TCP_PROTOCOL)
++ {
++ if (error == 0)
++ {
++ m_pktsCorrect ++;
++ m_pktsReceived ++;
++ }
++ else
++ {
++ m_pktsReceived ++;
++ }
++
++ //Get the MAC and IP Addresses
++ packetInfo.ipv4Hdr.GetSource().Serialize(source); //Get a string from Ipv4Address
++ packetInfo.ipv4Hdr.GetDestination().Serialize(destination);
++ sprintf(sourceChar, "%d.%d.%d.%d", source[0], source[1], source[2], source[3]);
++ sprintf(destChar, "%d.%d.%d.%d", destination[0], destination[1], destination[2], destination[3]);
++
++ sprintf (line, "%16f %16d %20s %20s %16d %16d %16d %16d %16d %16f", \
++ Simulator::Now().GetSeconds(), !error, sourceChar, \
++ destChar, packetInfo.wifiHdr.IsRetry(), \
++ packetInfo.payloadLength, \
++ packetInfo.wifiHdr.GetSequenceNumber(), \
++ packetInfo.tcpHdr.GetSequenceNumber().GetValue(), \
++ packetInfo.tcpHdr.GetAckNumber().GetValue(), \
++ propagation + slowFading + fastFading);
++
++ TraceToFile(line);
++ }
++ break;
++ case UDP_DATA:
++ if (m_protocol == UDP_PROTOCOL)
++ {
++ if (error == 0)
++ {
++ m_pktsCorrect ++;
++ m_pktsReceived ++;
++ }
++ else
++ {
++ m_pktsReceived ++;
++ }
++ //Distinguish between data or ACK
++ if (hdr.IsData())
++ dataOrAck = false;
++ else if (hdr.IsAck()) //
++ dataOrAck = true;
++
++ sprintf(line, "%10f %10d %20s %20s %10s %8d %8d %12f %12f %12f", \
++ timestamp.GetSeconds(), \
++ !error, \
++ ConvertMacToString(hdr.GetAddr2()).c_str(), \
++ ConvertMacToString(hdr.GetAddr1()).c_str(), \
++ dataOrAck ? "ACK" : "DATA", \
++ packet->GetSize(), \
++ hdr.GetSequenceNumber(), \
++ propagation, \
++ slowFading, \
++ fastFading \
++ );
++ TraceToFile(line);
++ }
++ break;
++ default:
++ NS_LOG_ERROR("Unknown packet type --> " << packetInfo.type);
++ break;
++ }
++
++
++
++}
++
++void Experiment::HmmRxTrace(Ptr<Packet> packet, Time timestamp, bool error, u_int16_t state)
++{
++ NS_LOG_FUNCTION_NOARGS();
++ WifiMacHeader hdr;
++ packetInfo_t packetInfo;
++ char line [255];
++ bool dataOrAck; //Value used for UDP tracing
++
++ //Ip addresses variables needed for Ipv4Address to String conversion
++ u_int8_t source [4];
++ u_int8_t destination [4];
++ char sourceChar [32];
++ char destChar [32];
++
++ packet->PeekHeader (hdr); //Don't forget to uncomment
++ packetInfo = ParsePacket(packet);
++
++ switch (packetInfo.type)
++ {
++ case TCP_DATA:
++ if (m_protocol == TCP_PROTOCOL)
++ {
++ if (error == 0)
++ {
++ m_pktsCorrect ++;
++ m_pktsReceived ++;
++ }
++ else
++ {
++ m_pktsReceived ++;
++ }
++
++ //Get the MAC and IP Addresses
++ packetInfo.ipv4Hdr.GetSource().Serialize(source); //Get a string from Ipv4Address
++ packetInfo.ipv4Hdr.GetDestination().Serialize(destination);
++ sprintf(sourceChar, "%d.%d.%d.%d", source[0], source[1], source[2], source[3]);
++ sprintf(destChar, "%d.%d.%d.%d", destination[0], destination[1], destination[2], destination[3]);
++
++ sprintf (line, "%16f %16d %20s %20s %16d %16d %16d %16d %16d %16d", \
++ Simulator::Now().GetSeconds(), !error, sourceChar, \
++ destChar, packetInfo.wifiHdr.IsRetry(), \
++ packetInfo.payloadLength, \
++ packetInfo.wifiHdr.GetSequenceNumber(), \
++ packetInfo.tcpHdr.GetSequenceNumber().GetValue(), \
++ packetInfo.tcpHdr.GetAckNumber().GetValue(), \
++ state);
++ TraceToFile(line);
++ }
++ break;
++ case UDP_DATA:
++ if (m_protocol == UDP_PROTOCOL)
++ {
++ if (error == 0)
++ {
++ m_pktsCorrect ++;
++ m_pktsReceived ++;
++ }
++ else
++ {
++ m_pktsReceived ++;
++ }
++ //Distinguish between data or ACK
++ if (hdr.IsData())
++ dataOrAck = false;
++ else if (hdr.IsAck())
++ dataOrAck = true;
++ sprintf(line, "%10f %10d %20s %20s %10s %8d %8d %8d", \
++ timestamp.GetSeconds(), \
++ !error, \
++ ConvertMacToString(hdr.GetAddr2()).c_str(), \
++ ConvertMacToString(hdr.GetAddr1()).c_str(), \
++ dataOrAck ? "ACK" : "DATA", \
++ packet->GetSize(), \
++ hdr.GetSequenceNumber(), \
++ state);
++ TraceToFile(line);
++ }
++ break;
++ default:
++ NS_LOG_ERROR("Unknown packet type --> " << packetInfo.type);
++ break;
++ }
++
++
++}
++
++
++void Experiment::OpenTraceFile (string fileName, ChannelMode_t channelModel = BURSTY_ERROR_AUTO_REGRESSIVE_MODEL)
++{
++ string path = getcwd() + "/traces/" + fileName;
++ char title [255];
++ string lastField; //Channel Model Dependent field (trace field)
++ NS_LOG_DEBUG(path);
++ m_file.open(path.c_str(), fstream::out);
++
++ //Split into TCP and UDP simulations
++ switch (m_protocol)
++ {
++ case TCP_PROTOCOL:
++ if (channelModel == HIDDEN_MARKOV_ERROR_MODEL)
++ lastField = "State";
++ else
++ lastField = "SNR (dB)";
++
++ sprintf (title, "%16s %16s %20s %20s %16s %16s %16s %16s %16s %16s", \
++ "Time", "CRC", "Source", "Destination", "802.11 RETX", \
++ "Length","SeqNum", "TCP SeqNum", "TCP AckNum", \
++ lastField.c_str());
++ break;
++
++ case UDP_PROTOCOL:
++ switch (channelModel)
++ {
++ case BURSTY_ERROR_AUTO_REGRESSIVE_MODEL:
++ sprintf(title, "%10s %10s %20s %20s %10s %8s %8s %12s %12s %12s", \
++ "Time", "CRC", "SRC", "DST", "DATA/ACK", "Length", "SeqNum", \
++ "Propagation","Slow Fading", "Fast Fading");
++ break;
++ case HIDDEN_MARKOV_ERROR_MODEL:
++ sprintf(title, "%10s %10s %20s %20s %10s %8s %8s %8s", \
++ "Time", "CRC", "SRC", "DST", "DATA/ACK", "Length", "SeqNum", \
++ "State");
++ break;
++ case NIST_ERROR_RATE_MODEL:
++ sprintf(title, "%10s %10s %20s %20s %10s %8s %8s %10s", \
++ "Time", "CRC", "SRC", "DST", "DATA/ACK", "Length", "SeqNum", "SNR (dB)");
++ break;
++ }
++
++ break;
++ default:
++ NS_LOG_ERROR("Cannot open a trace file because transport protocol is not correct");
++ }
++
++ m_file << title << endl;
++}
++
++void Experiment::CloseTraceFile()
++{
++ NS_LOG_FUNCTION_NOARGS();
++ if (m_file.is_open())
++ m_file.close();
++ else
++ NS_LOG_ERROR("Open file not found");
++}
++
++void Experiment::TraceToFile(string line)
++{
++ NS_LOG_DEBUG(line);
++ m_file << line << endl;
++}
++
++
++
++std::string getcwd() {
++ char buf[FILENAME_MAX];
++ char* succ = getcwd(buf, FILENAME_MAX);
++ if (succ)
++ return std::string(succ);
++ return ""; // raise a flag, throw an exception, ...
++}
++
++std::string ConvertMacToString(Mac48Address mac)
++{
++ NS_LOG_FUNCTION(mac);
++ u_int8_t temp[6];
++ char result[24];
++ mac.CopyTo(temp);
++
++ sprintf(result,"%02X:%02X:%02X:%02X:%02X:%02X", temp[0], temp[1], temp[2], temp[3], temp[4], temp[5] );
++
++ return std::string(result);
++}
++
++////////////////////////////////////////////////////////////////////////////////////
++/////////////////////////////// MAIN ///////////////////////////////////////
++////////////////////////////////////////////////////////////////////////////////////
++
++int main (int argc, char *argv[])
++{
++ //Logging
++ EnableLogging();
++
++
++ //Variable initialization
++ // Hidden Markov Model Coefficient file
++ string transitionFileHmm = "HMM_4states/HMM_03_TR_1.txt" ;
++ string emissionFileHmm = "HMM_4states/HMM_03_EMIS_1.txt" ;
++
++ string hmmChannel = "Good";
++
++ //BEAR model Coefficients file
++ string arModelCoefficientsFile = "coefsAR.cfg";
++
++ //Parameter to switch among the different channel models
++ string channelModel = "Bear";
++
++ //Transport protocol
++ string transportProtocol = "TCP";
++ TransportProtocol_t protocol;
++
++ //Random variable generation (Random seed)
++ SeedManager::SetSeed(1);
++
++ //Trace file name
++ u_int16_t scenario = 1; //Scenario number --> Used for trace file naming (see documentation to get the model particular parameters)
++ string outputChannelTypeFileName;
++ string outputFileName = "TCP";
++ ChannelMode_t enumChannelModel;
++
++ //Simulation parameters
++ float distance = 20; //Distance between nodes
++
++
++ u_int32_t numPackets = 10000;
++ u_int32_t packetLength = 1460;
++ uint64_t interPacketTime = 1000000;
++ u_int32_t run = 1;
++ u_int32_t runCounter;
++ u_int32_t runOffset = 0;
++
++ //Command parsing
++ CommandLine cmd;
++
++ //Error model parameters
++ cmd.AddValue ("ChannelModel", "Channel model to insert into the nodes", channelModel );
++ //BEAR model
++ cmd.AddValue ("ArModelCoefficientFile", "File name which contains the AR model coefficients", arModelCoefficientsFile);
++
++ //Hidden Markov Error Model parameters
++ cmd.AddValue ("HmmChannel", "Type of HMM channel: Good, Average or bad", hmmChannel);
++ cmd.AddValue ("TransitionFileHmm", "HMM transition file name (from configs file)", transitionFileHmm);
++ cmd.AddValue ("EmissionFileHmm", "HMM emission file name (from configs file)", emissionFileHmm);
++
++ //Simulation-related parameters
++ cmd.AddValue ("Run", "Number of simulations to run", run);
++ cmd.AddValue ("RunOffset", "Offset introduced at the SeedManager and the file naming counter", runOffset);
++ cmd.AddValue ("Scenario", "Type of analysis (channel model coefficients and conditions)", scenario);
++ cmd.AddValue ("NumPackets", "Total number of packets sent in the simulation", numPackets);
++ cmd.AddValue ("PacketLength", "Number of bytes in each packet", packetLength);
++ cmd.AddValue ("InterPacketTime", "Time (in microseconds) between two consecutive packets (application level)", interPacketTime);
++ cmd.AddValue ("OutputChannelTypeFileName", "File name to store the output trace", outputChannelTypeFileName);
++ cmd.AddValue ("Distance", "Distance (in meters) between nodes", distance);
++ cmd.AddValue ("TransportProtocol", "TCP or UDP" , transportProtocol);
++
++ cmd.Parse (argc, argv);
++
++ //Default attributes initialization
++ //Wifi attributes
++ Config::SetDefault ("ns3::WifiRemoteStationManager::NonUnicastMode",StringValue ("DsssRate2Mbps"));
++ // Config::SetDefault ("ns3::WifiRemoteStationManager::RtsCtsThreshold", StringValue ("2200")); //Disable RTS/CTS transmission
++ Config::SetDefault ("ns3::WifiRemoteStationManager::FragmentationThreshold", StringValue ("2200")); //Disable fragmentation
++ Config::SetDefault ("ns3::ConstantRateWifiManager::DataMode", StringValue ("DsssRate11Mbps"));
++ Config::SetDefault ("ns3::ConstantRateWifiManager::ControlMode", StringValue ("DsssRate11Mbps")); //WiFi Buffer Size
++ Config::SetDefault ("ns3::WifiMacQueue::MaxPacketNumber", UintegerValue (900000000));
++ Config::SetDefault ("ns3::WifiRemoteStationManager::MaxSlrc", UintegerValue (4));
++ Config::SetDefault ("ns3::WifiNetDevice::Mtu", UintegerValue (1512));
++
++ //HiddenErrorMarkov model attributes
++ Config::SetDefault ("ns3::HiddenMarkovErrorModel::TransitionMatrixFileName", StringValue (transitionFileHmm));
++ Config::SetDefault ("ns3::HiddenMarkovErrorModel::EmissionMatrixFileName", StringValue (emissionFileHmm));
++
++ GlobalValue::Bind ("ChecksumEnabled", BooleanValue (true));
++
++ if (transportProtocol == "TCP")
++ protocol = TCP_PROTOCOL;
++ else if (transportProtocol == "UDP")
++ protocol = UDP_PROTOCOL;
++ else
++ NS_LOG_ERROR("Transport Protocol undefined");
++
++ if (channelModel == "SWEEP")
++ distance = 72;
++
++ if ((scenario < 1) || (scenario > 6))
++ {
++ NS_LOG_ERROR("HMM configuration et not supported");
++ return -1;
++ }
++
++ /////////-----------------------MAIN LOOP-----------------------/////////
++
++ for (runCounter = 1; runCounter <= run; runCounter ++)
++ {
++ Experiment exp_;
++ exp_.SetTransportProtocol(protocol);
++ //Create the nodes
++ NodeContainer wifiNodes;
++ wifiNodes.Create(2);
++
++ //Prepare the Wifi NetDevices
++ YansWifiPhyHelper wifiPhy = YansWifiPhyHelper::Default(); //Don't remove (Necessary at YansWifiPhy::EndReceive)
++ YansWifiChannelHelper wifiChannel;
++
++ //Change the seed for each simulation run
++ SeedManager::SetRun(runCounter + runOffset);
++
++ //Channel model initialization
++ // BEAR model = ArModel (Propagation Loss Model) + BurstyErrorModel (Error Model)
++
++ if (channelModel == "Bear")
++ {
++ outputChannelTypeFileName = "Bear";
++ enumChannelModel = BURSTY_ERROR_AUTO_REGRESSIVE_MODEL;
++
++ //Set the propagation delay model
++ wifiChannel.SetPropagationDelay("ns3::ConstantSpeedPropagationDelayModel");
++ //Set the propagation loss model
++ wifiChannel.AddPropagationLoss("ns3::ArModel");
++ Ptr<ArModel> arBaseModel = CreateObject<ArModel> ();
++ wifiChannel.AddPropagationLoss(arBaseModel);
++ //Set the error model
++ Ptr<BurstyErrorModel> errorModel = CreateObject<BurstyErrorModel> (); //Manual BEAR model instance
++ wifiPhy.SetErrorModel(errorModel);
++ arBaseModel->SetErrorModel(errorModel); // Bursty error model is closely linked to the AR propagation loss model
++
++ //Callback
++ errorModel->SetRxCallback (MakeCallback (&Experiment::BearRxTrace, &exp_));
++ }
++
++ // HiddenMarkovErrorModel --> Does not take into account the SNR, hence the propagation loss model is not relevant
++ else if (channelModel == "HMM")
++ {
++ //Prepare the coefficients files according to the channel type
++ if (hmmChannel == "Good")
++ {
++ sprintf((char *) transitionFileHmm.c_str(), "HMM_4states/HMM_12_TR_%1d.txt", scenario);
++ sprintf((char *) emissionFileHmm.c_str(), "HMM_4states/HMM_12_EMIS_%1d.txt", scenario);
++
++ }
++ else if (hmmChannel == "Average")
++ {
++ sprintf((char *) transitionFileHmm.c_str(), "HMM_4states/HMM_09_TR_%1d.txt", scenario);
++ sprintf((char *) emissionFileHmm.c_str(), "HMM_4states/HMM_09_EMIS_%1d.txt", scenario);
++ }
++ else if (hmmChannel == "Bad")
++ {
++ sprintf((char *) transitionFileHmm.c_str(), "HMM_4states/HMM_05_TR_%1d.txt", scenario);
++ sprintf((char *) emissionFileHmm.c_str(), "HMM_4states/HMM_05_EMIS_%1d.txt", scenario);
++ }
++ else
++ {
++ NS_LOG_UNCOND ("HMM Channel Model not valid... Exiting");
++ return -1;
++ }
++
++ outputChannelTypeFileName = "HMM_" + hmmChannel;
++ enumChannelModel = HIDDEN_MARKOV_ERROR_MODEL;
++
++ //Set the propagation delay model
++ wifiChannel.SetPropagationDelay ("ns3::ConstantSpeedPropagationDelayModel");
++ //Set the propagation loss model
++ wifiChannel.AddPropagationLoss ("ns3::SimplePropagationLossModel", "MaxDistance", DoubleValue(200.0));
++
++ //Set the error model
++ Ptr<HiddenMarkovErrorModel> errorModel = CreateObject<HiddenMarkovErrorModel> ();
++ errorModel->SetTransitionMatrixFileName(transitionFileHmm);
++ errorModel->SetEmissionMatrixFileName(emissionFileHmm);
++ errorModel->GetCoefficients();
++
++ wifiPhy.SetErrorModel(errorModel);
++
++ //Callback
++ errorModel->SetRxCallback(MakeCallback(&Experiment::HmmRxTrace, &exp_));
++ }
++
++ //NS-3 Legacy error decision model --> LogDistancePropagationLossModel + NistErrorRateModel
++ else if (channelModel == "NIST")
++ {
++ outputChannelTypeFileName = "NIST";
++ enumChannelModel = NIST_ERROR_RATE_MODEL;
++// distance = 89.6; //Distance value which FER yields approximately 0.5
++ distance = 80; //FER ~ 0.16
++
++ //Set the propagation delay model
++ wifiChannel.SetPropagationDelay("ns3::ConstantSpeedPropagationDelayModel");
++ //Set the propagation loss model
++ wifiChannel.AddPropagationLoss("ns3::LogDistancePropagationLossModel");
++ wifiChannel.AddPropagationLoss("ns3::RandomPropagationLossModel", "Variable", RandomVariableValue (NormalVariable (0.0, 2.8)));
++
++ wifiPhy.SetErrorRateModel("ns3::YansErrorRateModel");
++ }
++
++ //Make a sweep in order to fully characterize the throughput vs FER curve shape in a memoryless channel
++ else if (channelModel == "SWEEP")
++ {
++ if ((int) runCounter % 5 == 0)
++ distance += 0.5 ;
++
++ outputChannelTypeFileName = "SWEEP";
++ enumChannelModel = NIST_ERROR_RATE_MODEL;
++ // distance = 89.6; //Distance value which FER yields approximately 0.5
++// distance = 80; //FER ~ 0.16
++
++ //Set the propagation delay model
++ wifiChannel.SetPropagationDelay("ns3::ConstantSpeedPropagationDelayModel");
++ //Set the propagation loss model
++ wifiChannel.AddPropagationLoss("ns3::LogDistancePropagationLossModel");
++// wifiChannel.AddPropagationLoss("ns3::RandomPropagationLossModel", "Variable", RandomVariableValue (NormalVariable (0.0, 2.8)));
++ wifiPhy.SetErrorRateModel("ns3::YansErrorRateModel");
++
++ }
++
++ wifiPhy.SetChannel (wifiChannel.Create());
++ WifiHelper wifi = WifiHelper::Default();
++ wifi.SetStandard (WIFI_PHY_STANDARD_80211b);
++ wifi.SetRemoteStationManager ("ns3::ConstantRateWifiManager");
++ NqosWifiMacHelper wifiMac = NqosWifiMacHelper::Default();
++
++ NetDeviceContainer wifiDevices = wifi.Install(wifiPhy, wifiMac, wifiNodes);
++
++ //Node mobility configuration
++ MobilityHelper mobility;
++ Ptr<ListPositionAllocator> positionAlloc = CreateObject<ListPositionAllocator>();
++ positionAlloc->Add(Vector(0.0, 0.0, 0.0));
++ positionAlloc->Add(Vector(distance, 0.0, 0.0));
++ mobility.SetPositionAllocator(positionAlloc);
++ mobility.SetMobilityModel("ns3::ConstantPositionMobilityModel");
++ mobility.Install (wifiNodes);
++
++ //Set the upper layers (default configuration)
++ InternetStackHelper internet;
++
++ // Sysctl option configuration
++ if (transportProtocol == "TCP")
++ {
++ internet.SetTcp ("ns3::NscTcpL4Protocol","Library",StringValue ("liblinux2.6.26.so"));
++ Config::Set ("/NodeList/3/$ns3::Ns3NscStack<linux2.6.26>/net.inet.tcp.mssdflt", StringValue ("1460"));
++ Config::SetDefault ("ns3::TcpSocket::SegmentSize", UintegerValue (1460));
++ // Config::Set ("/NodeList/3/$ns3::Ns3NscStack<linux2.6.26>/net.ipv4.tcp_sack", StringValue ("0"));
++ // Config::Set ("/NodeList/3/$ns3::Ns3NscStack<linux2.6.26>/net.ipv4.tcp_timestamps", StringValue ("0"));
++ // Config::Set ("/NodeList/3/$ns3::Ns3NscStack<linux2.6.26>/net.ipv4.tcp_window_scaling", StringValue ("0"));
++
++ //TCP parameter set
++ Config::SetDefault ("ns3::TcpSocket::SegmentSize", UintegerValue (1460));
++ Config::SetDefault ("ns3::TcpSocket::RcvBufSize", UintegerValue (90000000));
++ Config::SetDefault ("ns3::TcpSocket::SndBufSize", UintegerValue (90000000));
++
++ outputFileName= "TCP";
++
++ // Config::SetDefault("ns3::TcpL4Protocol::SocketType", StringValue("ns3::TcpNewReno"));
++ // Config::SetDefault("ns3::TcpL4Protocol::SocketType", StringValue("ns3::TcpReno"));
++ }
++ else if (transportProtocol == "UDP")
++ {
++ outputFileName = "UDP";
++ Config::SetDefault ("ns3::UdpSocket::RcvBufSize", UintegerValue (90000000));
++ }
++
++ internet.Install (wifiNodes);
++
++ //New TCP simulation model (Application changes)
++ //Define IP level
++ Ipv4AddressHelper ipv4;
++ NS_LOG_INFO("Assign IP Addresses.");
++ ipv4.SetBase("10.1.1.0", "255.255.255.0");
++ Ipv4InterfaceContainer ipInterfaceContainer = ipv4.Assign(wifiDevices);
++
++
++ uint16_t port = 50000; // Server Port
++
++ OnOffHelper onoff ("ns3::TcpSocketFactory", Address (InetSocketAddress (Ipv4Address ("10.1.1.1"), port))); //OnOffHelper instance
++
++ //If UDP-based simulation, establish UDP at the OnOffHelper object
++ if (transportProtocol == "UDP")
++ onoff.SetAttribute("Protocol", StringValue ("ns3::UdpSocketFactory"));
++
++ onoff.SetAttribute ("OnTime", RandomVariableValue (ConstantVariable (1)));
++ onoff.SetAttribute ("OffTime", RandomVariableValue (ConstantVariable (0)));
++ onoff.SetAttribute ("DataRate", StringValue ("11Mbps"));
++ onoff.SetAttribute ("PacketSize", UintegerValue (packetLength));
++ onoff.SetAttribute ("MaxBytes", UintegerValue (packetLength * numPackets));
++ // onoff.SetAttribute ("Tx", MakeTraceSourceAccessor (&OnOffApplication::m_txTrace));
++
++ ApplicationContainer app = onoff.Install (wifiNodes.Get(1)); //install the onoff aplication in the AP node
++ // Start the application
++ app.Start (Seconds (1.0));
++ app.Stop (Seconds (10000.0));
++
++ // Create a packet sink to receive these packets in the Station node
++ PacketSinkHelper sink ("ns3::TcpSocketFactory", Address (InetSocketAddress (Ipv4Address::GetAny (), port)));
++ //If UDP-based simulation, establish UDP at the OnOffHelper object
++ if (transportProtocol == "UDP")
++ sink.SetAttribute("Protocol", StringValue("ns3::UdpSocketFactory"));
++
++ app = sink.Install (wifiNodes.Get(0));
++ app.Start (Seconds (0.0));
++ app.Stop (Seconds (11000.0));
++
++ //End new simulation scheme
++ ////////////////////
++
++ //Tracing connectors
++ if (enumChannelModel == NIST_ERROR_RATE_MODEL) //Frame reception tracing for
++ {
++ Config::Connect ("/NodeList/*/DeviceList/*/Phy/State/RxOk", MakeCallback (&Experiment::PhyRxOkTrace, &exp_));
++ Config::Connect ("/NodeList/*/DeviceList/*/Phy/State/RxError", MakeCallback (&Experiment::PhyRxErrorTrace, &exp_));
++ }
++
++ //Connect to the error models
++ wifiPhy.EnablePcap (outputChannelTypeFileName, wifiNodes, true);
++ wifiPhy.EnableAscii("Prueba", wifiNodes);
++
++
++ //TCP trace file
++ char temp[128];
++ sprintf(temp,"%s_%s_%02d_%03d.tr", outputFileName.c_str(), outputChannelTypeFileName.c_str(), scenario, runCounter + runOffset);
++ exp_.OpenTraceFile(temp, enumChannelModel);
++
++ Simulator::Stop(Seconds(11010));
++
++ Simulator::Run();
++ Simulator::Destroy();
++
++ //Print statistics
++ NS_LOG_UNCOND("Run " << runCounter + runOffset << " FER = " << exp_.GetPktsReceived() - exp_.GetPktsCorrect() << "/" \
++ << exp_.GetPktsReceived() << " = " << \
++ ((double) exp_.GetPktsReceived() - (double) exp_.GetPktsCorrect())/(double)exp_.GetPktsReceived());
++ exp_.CloseTraceFile();
++ }
++}
++
+diff -uprNB ns-3.13/src/hidden-markov-error-model/model/hidden-markov-error-model.cc b/src/hidden-markov-error-model/model/hidden-markov-error-model.cc
+--- ns-3.13/src/hidden-markov-error-model/model/hidden-markov-error-model.cc 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/model/hidden-markov-error-model.cc 2012-04-17 11:35:07.000000000 +0200
+@@ -0,0 +1,565 @@
++/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
++/*
++ * Copyright (c) 2011 Universidad de Cantabria
++ *
++ * 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
++ *
++ * Author: David Gómez Fernández <dgomez@tlmat.unican.es>
++ * Ramón Agüero Calvo <ramon@tlmat.unican.es>
++ */
++
++#include <math.h>
++#include <fstream>
++
++#include "ns3/simulator.h"
++#include "ns3/packet.h"
++#include "ns3/assert.h"
++#include "ns3/log.h"
++#include "ns3/boolean.h"
++#include "ns3/enum.h"
++#include "ns3/double.h"
++#include "ns3/integer.h"
++#include "ns3/string.h"
++
++#include "ns3/hidden-markov-error-model.h"
++
++using namespace std;
++using namespace ns3;
++
++NS_LOG_COMPONENT_DEFINE("HiddenMarkovErrorModel");
++NS_OBJECT_ENSURE_REGISTERED (HiddenMarkovErrorModel);
++
++const bool g_debug = false; //Temporal solution (only for debugging)
++
++TypeId
++HiddenMarkovErrorModel::GetTypeId(void) {
++ static TypeId tid = TypeId ("ns3::HiddenMarkovErrorModel")
++ .SetParent<ErrorModel> ()
++ .AddConstructor<HiddenMarkovErrorModel> ()
++ .AddAttribute ("RanVar",
++ "Random variable which determine a packet to be successfully received or not",
++ RandomVariableValue (UniformVariable (0.0, 1.0)),
++ MakeRandomVariableAccessor (&HiddenMarkovErrorModel::m_ranvar),
++ MakeRandomVariableChecker ())
++ .AddAttribute ("AverageFrameDuration",
++ "Average time (in microseconds) between two consecutive frames (used to model the exponential interarrival process)",
++ DoubleValue (2000.0),
++ MakeDoubleAccessor (&HiddenMarkovErrorModel::m_averageInterFrameDuration),
++ MakeDoubleChecker<double> ())
++ .AddAttribute("InitialState",
++ "Initial simulation state (Default 0)",
++ IntegerValue(0),
++ MakeIntegerAccessor(&HiddenMarkovErrorModel::m_currentState),
++ MakeIntegerChecker<int>())
++ .AddAttribute ("HiddenStates",
++ "Number of hidden states at the Markov's chain",
++ IntegerValue (2),
++ MakeIntegerAccessor (&HiddenMarkovErrorModel::m_hiddenStates),
++ MakeIntegerChecker<int> ())
++ .AddAttribute ("ErrorUnit",
++ "Type of simulation (frames or time)",
++ EnumValue (EU_TIME),
++ MakeEnumAccessor (&HiddenMarkovErrorModel::m_unit),
++ MakeEnumChecker (EU_BYTE, "EU_BYTE",
++ EU_PKT, "EU_PKT",
++ EU_BIT, "EU_BIT",
++ EU_TIME, "EU_TIME"))
++ .AddAttribute("TransitionMatrixFileName",
++ "Name of the file which contains the transition matrix (proprietary format)",
++ StringValue("HMM_16states/HMM_09_TR_1.txt"),
++ MakeStringAccessor(&HiddenMarkovErrorModel::m_transitionMatrixFileName),
++ MakeStringChecker())
++ .AddAttribute("EmissionMatrixFileName",
++ "Name of the file which contains the emission matrix (proprietary format)",
++ StringValue("HMM_16states/HMM_09_EMIS_1.txt"),
++ MakeStringAccessor(&HiddenMarkovErrorModel::m_emissionMatrixFileName),
++ MakeStringChecker())
++ .AddTraceSource ("HiddenMarkovErrorModelRxTrace",
++ "Packet tracing",
++ MakeTraceSourceAccessor (&HiddenMarkovErrorModel::m_rxTrace))
++ ;
++ return tid;
++}
++
++HiddenMarkovErrorModel::HiddenMarkovErrorModel() : m_currentState (0),
++ m_started(false)
++{
++ NS_LOG_FUNCTION_NOARGS();
++// m_hiddenStates = 2;
++// m_unit = EU_TIME;
++// m_averageInterFrameDuration = 2000; //Inter-frame average duration (microseconds)
++// m_ranvar = UniformVariable(0.0, 1.0);
++//
++// m_transitionMatrixFileName = "HMM_16states/HMM_09_TR_1.txt";
++// m_emissionMatrixFileName = "HMM_16states/HMM_09_EMIS_1.txt";
++ //Read coefficients files and load the corresponding parameters
++// GetCoefficients();
++}
++
++HiddenMarkovErrorModel::~HiddenMarkovErrorModel()
++{
++ NS_LOG_FUNCTION_NOARGS();
++ if (m_transitionMatrix.size() > 0)
++ m_transitionMatrix.clear();
++ if (m_emissionMatrix.size() > 0)
++ m_emissionMatrix.clear();
++ if (m_meanDurationVector.size() > 0)
++ m_meanDurationVector.clear();
++}
++
++
++void HiddenMarkovErrorModel::SetTransitionMatrixFileName (string transitionMatrixFileName)
++{
++ NS_LOG_FUNCTION_NOARGS();
++ m_transitionMatrixFileName = transitionMatrixFileName;
++}
++
++string HiddenMarkovErrorModel::GetTransitionMatrixFileName (void) const
++{
++ NS_LOG_FUNCTION_NOARGS();
++ return m_transitionMatrixFileName;
++}
++
++void HiddenMarkovErrorModel::SetEmissionMatrixFileName (string emissionMatrixFileName)
++{
++ NS_LOG_FUNCTION_NOARGS();
++ m_emissionMatrixFileName = emissionMatrixFileName;
++}
++
++string HiddenMarkovErrorModel::GetEmissionMatrixFileName (void) const
++{
++ NS_LOG_FUNCTION_NOARGS();
++ return m_emissionMatrixFileName;
++}
++
++u_int8_t HiddenMarkovErrorModel::GetHiddenStates() const
++{
++ NS_LOG_FUNCTION_NOARGS();
++ return m_hiddenStates;
++}
++
++void HiddenMarkovErrorModel::SetHiddenStates(u_int8_t hiddenStates)
++{
++ NS_LOG_FUNCTION_NOARGS();
++ this->m_hiddenStates = hiddenStates;
++}
++
++double HiddenMarkovErrorModel::GetAverageFrameDuration() const
++{
++ NS_LOG_FUNCTION_NOARGS();
++ return m_averageInterFrameDuration;
++}
++
++void HiddenMarkovErrorModel::SetAverageFrameDuration(double averageFrameDuration)
++{
++ NS_LOG_FUNCTION_NOARGS();
++ this->m_averageInterFrameDuration = averageFrameDuration;
++}
++
++ErrorUnit HiddenMarkovErrorModel::GetUnit() const
++{
++ return m_unit;
++}
++
++void HiddenMarkovErrorModel::SetUnit(ErrorUnit unit)
++{
++ this->m_unit = unit;
++}
++
++int HiddenMarkovErrorModel::GetCurrentState() const
++{
++ return m_currentState;
++}
++
++void HiddenMarkovErrorModel::SetCurrentState(int state)
++{
++ this->m_currentState = state;
++}
++
++
++void HiddenMarkovErrorModel::Enable()
++{
++ NS_LOG_FUNCTION_NOARGS ();
++ m_enable = true;
++}
++
++void HiddenMarkovErrorModel::Disable()
++{
++ NS_LOG_FUNCTION_NOARGS ();
++ m_enable = false;
++}
++
++bool HiddenMarkovErrorModel::IsEnabled() const
++{
++ NS_LOG_FUNCTION_NOARGS ();
++ return m_enable;
++}
++
++std::string HiddenMarkovErrorModel::GetCwd() {
++ NS_LOG_FUNCTION_NOARGS();
++ char buf[FILENAME_MAX];
++ char* succ = getcwd(buf, FILENAME_MAX);
++ if (succ)
++ return std::string(succ);
++ return ""; // raise a flag, throw an exception, ...
++}
++
++bool HiddenMarkovErrorModel::GetCoefficients ()
++{
++ NS_LOG_FUNCTION(m_transitionMatrixFileName << m_emissionMatrixFileName);
++
++ string transitionMatrixPath;
++ string emissionMatrixPath;
++
++ fstream transitionMatrixFile;
++ fstream emissionMatrixFile;
++ char line[256];
++
++ int rowNumber,i,j; //Auxiliar counters
++ double coefficient;
++ vector<double> CoefficientsVector;
++
++ //If invoked in a second time), flush the previous maps content
++ if (m_transitionMatrix.size())
++ m_transitionMatrix.clear();
++ if (m_emissionMatrix.size())
++ m_emissionMatrix.clear();
++ if (m_meanDurationVector.size())
++ m_meanDurationVector.clear();
++
++ coefSetIter_t iter_;
++
++ transitionMatrixPath = GetCwd() + "/src/hidden-markov-error-model/configs/" + m_transitionMatrixFileName;
++ emissionMatrixPath = GetCwd() + "/src/hidden-markov-error-model/configs/" + m_emissionMatrixFileName;
++
++ transitionMatrixFile.open((const char *) transitionMatrixPath.c_str(), ios::in);
++ emissionMatrixFile.open((const char *) emissionMatrixPath.c_str(), ios::in);
++
++ rowNumber = 0;
++
++ if (transitionMatrixFile) {
++ while (transitionMatrixFile.getline(line, 256)) {
++ if (rowNumber == 0) { //First item in file--> Number of states in the Hidden Markov Chain
++ m_states = atoi(line);
++ } else { //Rest of values are the coefficient of the channel model
++ j = 0;
++ for (i = 0; i < m_states; i++) {
++ //First value at position '0'
++ if (i == 0) {
++ coefficient = atof(line);
++ CoefficientsVector.push_back(coefficient);
++ j++;
++ } else {
++ while (line[j] != ' ' && line[j] != '\t') { //Look for "white" spaces between Coefficients
++ j++;
++ }
++ coefficient = atof(line + j);
++ j++;
++ CoefficientsVector.push_back(coefficient);
++ }
++ }
++ m_transitionMatrix.insert(pair<int, vector <double> > (rowNumber - 1, CoefficientsVector)); //rowNumber shifted 1 position
++ CoefficientsVector.clear();
++
++ //As seen in the analytical studio, the probability to hold on the same state is calculated as follows:
++ //N_i = 1 / (1 - a_ii)
++
++ m_meanDurationVector.push_back (1 / (1 - (m_transitionMatrix[rowNumber - 1][rowNumber -1 ])));
++ }
++ rowNumber++;
++ }
++ }
++
++ else {
++ NS_LOG_ERROR("File (HMM)" << transitionMatrixPath << " not found: Please fix");
++ return false;
++ }
++
++ //Reset the rowNumber counter
++ rowNumber = 0;
++
++ if (emissionMatrixFile) {
++ while (emissionMatrixFile.getline(line, 256)) {
++ j = 0;
++ for (i = 0; i < m_hiddenStates; i++) {
++ //First value at position '0'
++ if (i == 0) {
++ coefficient = atof(line);
++ CoefficientsVector.push_back(coefficient);
++ j++;
++ } else {
++ while (line[j] != ' ' && line[j] != '\t') { //Look for "white" spaces between Coefficients
++ j++;
++ }
++ coefficient = atof(line + j);
++ j++;
++ CoefficientsVector.push_back(coefficient);
++ }
++ }
++ m_emissionMatrix.insert(pair<int, vector <double> > ((int) rowNumber, CoefficientsVector));
++ CoefficientsVector.clear();
++ rowNumber ++;
++
++ }
++ } else {
++ NS_LOG_ERROR("File (HMM)" << emissionMatrixPath << " not found: Please fix");
++ return false;
++ }
++
++ //DEBUGGING
++#ifdef NS3_LOG_ENABLE
++ if(g_debug)
++ {
++
++ //Print the m_transitionMatrix map
++ printf("---Transition Matrix---\n");
++ for (iter_ = m_transitionMatrix.begin(); iter_ != m_transitionMatrix.end(); iter_ ++ )
++ {
++ for (i = 0; i < (int) (iter_->second).size(); i++)
++ {
++ printf("%f ", (iter_->second)[i]);
++ }
++ printf("\n");
++ }
++
++ //Print the m_emissionMatrix map
++ printf("---Emission Matrix---\n");
++ for (iter_ = m_emissionMatrix.begin(); iter_ != m_emissionMatrix.end();
++ iter_++) {
++ for (i = 0; i < (int) (iter_->second).size(); i++) {
++ printf("%f ", (iter_->second)[i]);
++ }
++ printf("\n");
++ }
++
++
++ //Print the m_meanDurationVector
++ printf("---Mean Duration within each state (in frames)---\n");
++ for (j = 0; j < (int) m_meanDurationVector.size(); j++ )
++ {
++ printf("%f\n", m_meanDurationVector[j]);
++ }
++ }
++
++#endif //NS3_LOG_ENABLE
++
++ transitionMatrixFile.close();
++ emissionMatrixFile.close();
++
++ return true;
++}
++
++bool HiddenMarkovErrorModel::DoCorrupt(Ptr<Packet> packet)
++{
++ NS_LOG_FUNCTION(this);
++ bool corruptedPacket;
++ WifiMacHeader hdr;
++ LlcSnapHeader llcHdr;
++ Ipv4Header ipv4Hdr;
++ UdpHeader udpHdr;
++ TcpHeader tcpHdr;
++
++ Ptr<Packet> pktCopy = packet->Copy();
++
++ pktCopy->RemoveHeader(hdr);
++
++ //In a time-based simulation, start the timers with the first reception
++ if (m_started == false && m_unit == EU_TIME)
++ {
++ m_started = true;
++ InitializeTimer();
++ NS_LOG_DEBUG("Timer initialized");
++ }
++
++ //Decide whether the frame is correct or not according to the frame type (data, TCP or broadcast/control)
++ //Force packet with length < 128 to be always correct
++ if (hdr.IsData() && !hdr.GetAddr1().IsBroadcast())
++ {
++ //We have split the packet decision into the following three conditions:
++ // - ARP frames --> Always correct
++ // - TCP ACK --> Always correct
++ // - Data frames --> Legacy HMM decision process
++ pktCopy->RemoveHeader(llcHdr);
++
++ switch (llcHdr.GetType())
++ {
++ case 0x0806: //ARP
++ corruptedPacket = false;
++ break;
++ case 0x0800: //IP packet
++ pktCopy->RemoveHeader(ipv4Hdr);
++ switch (ipv4Hdr.GetProtocol())
++ {
++ case 6: //TCP
++ pktCopy->RemoveHeader(tcpHdr);
++
++ //Data segments --> To be errored
++ if (pktCopy->GetSize() > 4)
++ corruptedPacket = Decide ();
++ else
++ corruptedPacket = false;
++ break;
++ case 17: //UDP
++ corruptedPacket = Decide();
++ break;
++ default:
++ NS_LOG_ERROR ("Protocol not implemented yet (IP) --> " << ipv4Hdr.GetProtocol());
++ break;
++ }
++ break;
++ default:
++ NS_LOG_ERROR ("Protocol not implemented yet (LLC) --> " << llcHdr.GetType());
++ break;
++ }
++ }
++
++ //Force 802.11 ACKs, broadcast and control/management frames to be correct
++ else if (hdr.IsAck())
++ {
++ corruptedPacket = false;
++
++ }
++ else if (hdr.IsCtl() || hdr.IsMgt() || (hdr.GetAddr1()).IsBroadcast())
++ {
++ corruptedPacket = false;
++ }
++ else
++ {
++ corruptedPacket = false;
++ }
++
++ //Packet-based simulation--> Change state attempt
++ if (m_unit != EU_TIME)
++ ChangeState();
++
++ //Tracing and callbacks
++ m_rxTrace (packet, Simulator::Now(),corruptedPacket, m_currentState);
++ if (!m_rxCallback.IsNull())
++ m_rxCallback (packet, Simulator::Now(),corruptedPacket, m_currentState);
++
++ return corruptedPacket;
++}
++
++bool HiddenMarkovErrorModel::Decide ()
++{
++ NS_LOG_FUNCTION_NOARGS ();
++ bool corruptedPacket;
++ //Two posibilities:
++ //Time --> Check into the emission matrix (current state)
++ //Frames --> The same criteria as the time-based one and a possible state change
++ if (m_ranvar.GetValue() < (m_emissionMatrix[m_currentState])[0]) //First column in emission matrix --> Error probability (state i)
++ {
++ NS_LOG_LOGIC("CORRUPT! (" << this << ") (" << Simulator::Now().GetSeconds() << ") State: " << m_currentState);
++ corruptedPacket = true; //Frame received with errors
++ }
++ else
++ {
++ NS_LOG_LOGIC("CORRECT! (" << this << ") (" << Simulator::Now().GetSeconds() << ") State: " << m_currentState);
++ corruptedPacket = false; //Frame received successfully
++ }
++
++ return corruptedPacket;
++}
++
++void HiddenMarkovErrorModel::DoReset (void)
++{
++ NS_LOG_FUNCTION_NOARGS();
++ m_currentState = 0;
++}
++
++bool HiddenMarkovErrorModel::ChangeState(void) {
++ NS_LOG_FUNCTION("Object" << this << "State" << m_currentState << "Time" << Simulator::Now().GetSeconds());
++ u_int16_t i, maxState;
++ double transitionProbability, max;
++ max = -1;
++ for (i = 0; (int) i < (m_transitionMatrix[m_currentState]).size(); i++) {
++ transitionProbability = (m_transitionMatrix[m_currentState])[i] * m_ranvar.GetValue();
++ //Different possibilities, depending on the type of simulation chosen:
++ //EU_TIME: One call to this method brings about necessarily a state change (called after every average state stay duration)
++ //Otherwise: As called at each frame reception, it may hold the same state
++ if (m_unit == EU_TIME) //&& (transitionProbability > max) && (i != m_currentState)) //Time-based --> MUST change state
++ {
++ if ((transitionProbability > max) && (i != m_currentState)) {
++ max = transitionProbability;
++ maxState = i;
++ }
++ } else {
++ if (transitionProbability > max) {
++ max = transitionProbability;
++ maxState = i;
++ }
++ }
++ }
++ //Did actually make a state change??
++ if (m_currentState != maxState) {
++ NS_LOG_DEBUG( "(" << m_currentState << ") --> (" << maxState << ") (" << this << ")" );
++ m_currentState = maxState;
++ return true;
++ }
++ return false;
++}
++
++void HiddenMarkovErrorModel::InitializeTimer()
++{
++ NS_LOG_FUNCTION(this);
++ double nextTimeout;
++ double nextTimeoutMeanValue;
++
++ //Set the next timeout
++ nextTimeoutMeanValue = m_meanDurationVector[m_currentState] * m_averageInterFrameDuration;
++ ExponentialVariable expVar(nextTimeoutMeanValue);
++ nextTimeout = expVar.GetValue();
++
++ NS_LOG_INFO("(" << Simulator::Now().GetSeconds() << ") - Next timeout " << nextTimeoutMeanValue \
++ << " --> " << nextTimeout << " (" << m_currentState << ")");
++ Simulator::Schedule(MicroSeconds(nextTimeout),&HiddenMarkovErrorModel::TimerHandler, this);
++}
++
++void HiddenMarkovErrorModel::TimerHandler()
++{
++ NS_LOG_FUNCTION(this << Simulator::Now().GetSeconds());
++ double nextTimeout;
++ double nextTimeoutMeanValue;
++
++ //Once the timeout is reached, check if the states changes
++
++ //Set the next timeout
++ nextTimeoutMeanValue = m_meanDurationVector[m_currentState] * m_averageInterFrameDuration;
++ ExponentialVariable expVar(nextTimeoutMeanValue);
++ nextTimeout = expVar.GetValue();
++
++ ChangeState();
++ NS_LOG_INFO("(" << Simulator::Now().GetSeconds() << ") - Next timeout " << nextTimeoutMeanValue \
++ << " --> " << nextTimeout << " (" << m_currentState << ")");
++ Simulator::Schedule(MicroSeconds(nextTimeout),&HiddenMarkovErrorModel::TimerHandler, this);
++}
++
++void HiddenMarkovErrorModel::SetRxCallback(HiddenMarkovErrorModelRxCallback_t callback)
++{
++ NS_LOG_FUNCTION_NOARGS();
++ m_rxCallback = callback;
++}
++
++
++
++
++
++
++
++
++
++
++
++
++
+diff -uprNB ns-3.13/src/hidden-markov-error-model/model/hidden-markov-error-model.h b/src/hidden-markov-error-model/model/hidden-markov-error-model.h
+--- ns-3.13/src/hidden-markov-error-model/model/hidden-markov-error-model.h 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/model/hidden-markov-error-model.h 2012-04-16 11:50:12.000000000 +0200
+@@ -0,0 +1,204 @@
++/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
++/*
++ * Copyright (c) 2011 Universidad de Cantabria
++ *
++ * 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
++ *
++ * Author: David Gómez Fernández <dgomez@tlmat.unican.es>
++ * Ramón Agüero Calvo <ramon@tlmat.unican.es>
++ */
++
++#ifndef HIDDEN_MARKOV_ERROR_MODEL_H_
++#define HIDDEN_MARKOV_ERROR_MODEL_H_
++
++#include "ns3/object.h"
++#include "ns3/random-variable.h"
++#include "ns3/error-model.h"
++#include <map>
++#include <unistd.h>
++
++#include "ns3/wifi-mac-header.h"
++#include "ns3/llc-snap-header.h"
++#include "ns3/ipv4-header.h"
++#include "ns3/tcp-header.h"
++#include "ns3/udp-header.h"
++
++//Tracing
++#include "ns3/traced-value.h"
++#include "ns3/traced-callback.h"
++
++
++using namespace std;
++
++namespace ns3 {
++
++class Packet;
++
++/**
++ * \brief Error model based on a Hidden Markov Chain, with N states and M observables. This model can work in either frames
++ * or time simulations
++ *
++ */
++
++class HiddenMarkovErrorModel: public ErrorModel {
++public:
++ /**
++ * arg1: packet received successfully
++ * arg2: packet timestamp
++ * arg3: Boolean that represents whether a packet has been succesfully received or not
++ * arg4: snr (global) of packet
++ * arg5: snr due to the AR model (Slow fading)
++ * arg6: Fast Fading related SNR
++ */
++ typedef Callback<void,Ptr<Packet>, Time, bool, u_int16_t> HiddenMarkovErrorModelRxCallback_t;
++ /**
++ * Attribute handler
++ */
++ static TypeId GetTypeId (void);
++ /**
++ * Default constructor
++ */
++ HiddenMarkovErrorModel ();
++ /**
++ * Default destructor
++ */
++ virtual ~HiddenMarkovErrorModel ();
++ /**
++ * \returns The number of hidden states in the Markov Chain
++ */
++ u_int8_t GetHiddenStates () const;
++ /**
++ * \param hiddenStates The number of observables within each state at the Markov chain
++ */
++ void SetHiddenStates (u_int8_t hiddenStates);
++
++ double GetAverageFrameDuration () const;
++ void SetAverageFrameDuration (double averageFrameDuration);
++
++ /**
++ * \returns The simulation unit (Time or frames)
++ */
++ ErrorUnit GetUnit () const;
++ /**
++ * \param unit Enum value that represent the type of simulation to be run
++ */
++ void SetUnit (ErrorUnit unit);
++ /**
++ * \returns The current state at the Markov chain
++ */
++ int GetCurrentState () const;
++ /**
++ * \params state Desired state to set up into the model
++ */
++ void SetCurrentState (int state);
++ /**
++ * \params Transition matrix file name (default path not necessary)
++ */
++ void SetTransitionMatrixFileName (string transitionMatrixFileName);
++ /**
++ * \returns The name of the file which holds the transition matrix
++ */
++ string GetTransitionMatrixFileName (void) const;
++ /**
++ * \params Transition matrix file name (default path not necessary)
++ */
++ void SetEmissionMatrixFileName (string emissionMatrixFileName);
++ /**
++ * \returns The name of the file which holds the transition matrix
++ */
++ string GetEmissionMatrixFileName (void) const;
++ /**
++ * Enable the error model
++ */
++ void Enable (void);
++ /**
++ * Disable the error model
++ */
++ void Disable (void);
++ /**
++ * \returns true if error model is enabled; false otherwise
++ */
++ bool IsEnabled (void) const;
++ /**
++ * \returns true if the state is actually changed after the execution of the method
++ */
++ bool ChangeState (void);
++ /**
++ * Methods that handles the timers (only in time-based simulations);
++ */
++ void InitializeTimer (void);
++ void TimerHandler (void);
++
++ //Callback invoked when a packet is received by the error model object
++ void SetRxCallback (HiddenMarkovErrorModelRxCallback_t callback);
++
++ /**
++ * \returns -1 if an error happened during the file extraction, 0 otherwise
++ * \params
++ */
++ bool GetCoefficients ();
++
++ /**
++ * \returns Whether a frame is received correctly or not
++ */
++ bool Decide();
++
++private:
++
++ virtual bool DoCorrupt (Ptr<Packet>);
++ virtual void DoReset (void);
++
++ RandomVariable m_ranvar; //Decide whether the error model is enabled
++ double m_averageInterFrameDuration; //Average time between two consecutive frames (depends on the physical layer)
++ ErrorUnit m_unit; //Time/frames based simulations
++
++ int m_currentState; //Current position into the chain model
++ double m_transitionStateTimer; //When time-based simulation, this value handles the scheduler timing
++ int m_states; //N
++ int m_hiddenStates; //M (Typically, M=2: 0- Correct reception, 1- Error)
++
++ bool m_enable; //Flag to allow the error model execution
++ bool m_started; //For time-based simulation, starts when the node receives its first packet
++
++ /* The Coefficients of the HiddenMarkovErrorModel */
++ typedef map<int, vector<double> > coefSet_t;
++ typedef coefSet_t::iterator coefSetIter_t;
++
++ coefSet_t m_transitionMatrix; //Transition probabilities among the states (NxN)
++ coefSet_t m_emissionMatrix; //Output observables (Errored, correct) (NxM)
++ vector <double> m_meanDurationVector; //Mean duration (in frames) within each state (Nx1)
++
++ string m_transitionMatrixFileName;
++ string m_emissionMatrixFileName;
++
++ // Tracing
++ /**
++ * The trace source fired when a packet ends the reception process from
++ * the medium.
++ *
++ * \see class CallBackTraceSource
++ */
++ TracedCallback<Ptr<const Packet>, Time, bool, u_int16_t> m_rxTrace;
++ HiddenMarkovErrorModelRxCallback_t m_rxCallback;
++
++protected:
++ /**
++ * \return The current path (in string format)
++ */
++ static std::string GetCwd ();
++
++};
++
++} ////namespace ns3
++#endif /* HIDDEN_MARKOV_ERROR_MODEL_H_ */
+diff -uprNB ns-3.13/src/hidden-markov-error-model/waf b/src/hidden-markov-error-model/waf
+--- ns-3.13/src/hidden-markov-error-model/waf 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/waf 2011-12-23 22:09:34.000000000 +0100
+@@ -0,0 +1 @@
++exec "`dirname "$0"`"/../../waf "$@"
+\ No newline at end of file
+diff -uprNB ns-3.13/src/hidden-markov-error-model/wscript b/src/hidden-markov-error-model/wscript
+--- ns-3.13/src/hidden-markov-error-model/wscript 1970-01-01 01:00:00.000000000 +0100
++++ b/src/hidden-markov-error-model/wscript 2012-04-30 19:02:18.000000000 +0200
+@@ -0,0 +1,29 @@
++## -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*-
++
++def build(bld):
++ obj = bld.create_ns3_module('hidden-markov-error-model', ['core','wifi','network','internet','propagation'])
++ obj.source = [
++ 'model/hidden-markov-error-model.cc'
++ ]
++
++ obj_test = bld.create_ns3_module_test_library('hidden-markov-error-model')
++ obj_test.source = [
++ ]
++
++
++ headers = bld.new_task_gen(features=['ns3header'])
++ headers.module = 'hidden-markov-error-model'
++ headers.source = [
++ 'model/hidden-markov-error-model.h'
++ ]
++
++
++
++#if bld.env['ENABLE_GSL']:
++# obj.use.extend(['GSL', 'GSLCBLAS', 'M'])
++# obj_test.use.extend(['GSL', 'GSLCBLAS', 'M'])
++
++#if (bld.env['ENABLE_EXAMPLES']):
++# bld.add_subdirs('examples')
++
++#bld.ns3_python_bindings()
+Binary files ns-3.13/src/internet/bindings/callbacks_list.pyc and b/src/internet/bindings/callbacks_list.pyc differ
+Binary files ns-3.13/src/internet/bindings/modulegen__gcc_LP64.pyc and b/src/internet/bindings/modulegen__gcc_LP64.pyc differ
+Binary files ns-3.13/src/lte/bindings/callbacks_list.pyc and b/src/lte/bindings/callbacks_list.pyc differ
+Binary files ns-3.13/src/lte/bindings/modulegen__gcc_LP64.pyc and b/src/lte/bindings/modulegen__gcc_LP64.pyc differ
+Binary files ns-3.13/src/mesh/bindings/callbacks_list.pyc and b/src/mesh/bindings/callbacks_list.pyc differ
+Binary files ns-3.13/src/mesh/bindings/modulegen__gcc_LP64.pyc and b/src/mesh/bindings/modulegen__gcc_LP64.pyc differ
+Binary files ns-3.13/src/mobility/bindings/callbacks_list.pyc and b/src/mobility/bindings/callbacks_list.pyc differ
+Binary files ns-3.13/src/mobility/bindings/modulegen__gcc_LP64.pyc and b/src/mobility/bindings/modulegen__gcc_LP64.pyc differ
+Binary files ns-3.13/src/mpi/bindings/callbacks_list.pyc and b/src/mpi/bindings/callbacks_list.pyc differ
+Binary files ns-3.13/src/mpi/bindings/modulegen__gcc_LP64.pyc and b/src/mpi/bindings/modulegen__gcc_LP64.pyc differ
+Binary files ns-3.13/src/netanim/bindings/callbacks_list.pyc and b/src/netanim/bindings/callbacks_list.pyc differ
+Binary files ns-3.13/src/netanim/bindings/modulegen__gcc_LP64.pyc and b/src/netanim/bindings/modulegen__gcc_LP64.pyc differ
+Binary files ns-3.13/src/network/bindings/callbacks_list.pyc and b/src/network/bindings/callbacks_list.pyc differ
+Binary files ns-3.13/src/network/bindings/modulegen__gcc_LP64.pyc and b/src/network/bindings/modulegen__gcc_LP64.pyc differ
+diff -uprNB ns-3.13/src/network/utils/error-model.cc b/src/network/utils/error-model.cc
+--- ns-3.13/src/network/utils/error-model.cc 2011-12-23 22:09:34.000000000 +0100
++++ b/src/network/utils/error-model.cc 2012-04-30 18:06:02.000000000 +0200
+@@ -19,6 +19,9 @@
+ * This code has been ported from ns-2 (queue/errmodel.{cc,h}
+ */
+
++
++#include <stdio.h>
++
+ #include <math.h>
+
+ #include "error-model.h"
+diff -uprNB ns-3.13/src/network/utils/error-model.h b/src/network/utils/error-model.h
+--- ns-3.13/src/network/utils/error-model.h 2011-12-23 22:09:34.000000000 +0100
++++ b/src/network/utils/error-model.h 2012-03-11 23:20:30.000000000 +0100
+@@ -116,7 +116,8 @@ enum ErrorUnit
+ {
+ EU_BIT,
+ EU_BYTE,
+- EU_PKT
++ EU_PKT,
++ EU_TIME
+ };
+
+ /**
+diff -uprNB ns-3.13/src/network/wscript b/src/network/wscript
+--- ns-3.13/src/network/wscript 2011-12-23 22:09:34.000000000 +0100
++++ b/src/network/wscript 2012-04-30 19:01:35.000000000 +0200
+@@ -67,7 +67,7 @@ def build(bld):
+ 'test/sequence-number-test-suite.cc',
+ ]
+
+- headers = bld.new_task_gen(features=['ns3header'])
++ headers = bld.new_task_gen(features=['ns3header'])
+ headers.module = 'network'
+ headers.source = [
+ 'model/address.h',
+Binary files ns-3.13/src/nix-vector-routing/bindings/callbacks_list.pyc and b/src/nix-vector-routing/bindings/callbacks_list.pyc differ
+Binary files ns-3.13/src/nix-vector-routing/bindings/modulegen__gcc_LP64.pyc and b/src/nix-vector-routing/bindings/modulegen__gcc_LP64.pyc differ
+Binary files ns-3.13/src/olsr/bindings/callbacks_list.pyc and b/src/olsr/bindings/callbacks_list.pyc differ
+Binary files ns-3.13/src/olsr/bindings/modulegen__gcc_LP64.pyc and b/src/olsr/bindings/modulegen__gcc_LP64.pyc differ
+Binary files ns-3.13/src/point-to-point/bindings/callbacks_list.pyc and b/src/point-to-point/bindings/callbacks_list.pyc differ
+Binary files ns-3.13/src/point-to-point/bindings/modulegen_customizations.pyc and b/src/point-to-point/bindings/modulegen_customizations.pyc differ
+Binary files ns-3.13/src/point-to-point/bindings/modulegen__gcc_LP64.pyc and b/src/point-to-point/bindings/modulegen__gcc_LP64.pyc differ
+Binary files ns-3.13/src/point-to-point-layout/bindings/callbacks_list.pyc and b/src/point-to-point-layout/bindings/callbacks_list.pyc differ
+Binary files ns-3.13/src/point-to-point-layout/bindings/modulegen__gcc_LP64.pyc and b/src/point-to-point-layout/bindings/modulegen__gcc_LP64.pyc differ
+Binary files ns-3.13/src/propagation/bindings/callbacks_list.pyc and b/src/propagation/bindings/callbacks_list.pyc differ
+Binary files ns-3.13/src/propagation/bindings/modulegen_customizations.pyc and b/src/propagation/bindings/modulegen_customizations.pyc differ
+Binary files ns-3.13/src/propagation/bindings/modulegen__gcc_LP64.pyc and b/src/propagation/bindings/modulegen__gcc_LP64.pyc differ
+diff -uprNB ns-3.13/src/propagation/model/propagation-loss-model.cc b/src/propagation/model/propagation-loss-model.cc
+--- ns-3.13/src/propagation/model/propagation-loss-model.cc 2011-12-23 22:09:34.000000000 +0100
++++ b/src/propagation/model/propagation-loss-model.cc 2012-04-30 19:03:03.000000000 +0200
+@@ -834,6 +834,121 @@ RangePropagationLossModel::DoCalcRxPower
+ }
+ }
+
+-// ------------------------------------------------------------------------- //
++//////////////// SimplePropagationLossModel (authors: David Gómez Fernández / Ramón Agüero Calvo) //////////////////
+
++
++NS_OBJECT_ENSURE_REGISTERED (SimplePropagationLossModel);
++
++TypeId
++SimplePropagationLossModel::GetTypeId(void) {
++ static TypeId tid = TypeId ("ns3::SimplePropagationLossModel")
++ .SetParent<PropagationLossModel> ()
++ .AddConstructor<SimplePropagationLossModel> ()
++
++ .AddAttribute("MaxDistance",
++ "The distance from which all packets will be errored (FER = 1)",
++ DoubleValue(15.0),
++ MakeDoubleAccessor(&SimplePropagationLossModel::m_maxDistance),
++ MakeDoubleChecker<double> ())
++
++ .AddAttribute("Alpha", "Determines the distance (in meters) from which the transmission is set over an error-prone channel",
++ DoubleValue(0.5),
++ MakeDoubleAccessor(&SimplePropagationLossModel::m_alpha),
++ MakeDoubleChecker<double> ())
++
++ .AddAttribute("Beta", "Exponential parameter (1 for a linear behavior)",
++ DoubleValue(1.0),
++ MakeDoubleAccessor(&SimplePropagationLossModel::m_beta),
++ MakeDoubleChecker<double> ())
++
++ .AddAttribute ("RanVar", "Random variable which determine a packet to be successfully received or not.",
++ RandomVariableValue (UniformVariable (0.0, 1.0)),
++ MakeRandomVariableAccessor (&SimplePropagationLossModel::m_ranvar),
++ MakeRandomVariableChecker ())
++
++ ;
++ return tid;
++}
++
++SimplePropagationLossModel::SimplePropagationLossModel ()
++{
++ NS_LOG_FUNCTION_NOARGS ();
++}
++
++SimplePropagationLossModel::~SimplePropagationLossModel ()
++{
++ NS_LOG_FUNCTION_NOARGS ();
++}
++
++float SimplePropagationLossModel::GetAlpha() const
++{
++ NS_LOG_FUNCTION_NOARGS ();
++ return m_alpha;
++}
++
++void SimplePropagationLossModel::SetAlpha(float alpha)
++{
++ NS_LOG_FUNCTION_NOARGS ();
++ m_alpha = alpha;
++}
++
++float SimplePropagationLossModel::GetBeta() const
++{
++ NS_LOG_FUNCTION_NOARGS ();
++ return m_beta;
++}
++
++void SimplePropagationLossModel::SetBeta(float beta)
++{
++ NS_LOG_FUNCTION_NOARGS ();
++ m_beta = beta;
++}
++
++float SimplePropagationLossModel::GetMaxDistance(void) const
++{
++ NS_LOG_FUNCTION_NOARGS ();
++ return m_maxDistance;
++}
++
++void SimplePropagationLossModel::SetMaxDistance(float maxDistance)
++{
++ NS_LOG_FUNCTION_NOARGS ();
++ m_maxDistance = maxDistance;
++}
++
++double SimplePropagationLossModel::DoCalcRxPower(double txPowerDbm, Ptr<MobilityModel> a,
++ Ptr<MobilityModel> b) const
++{
++ NS_LOG_FUNCTION(this);
++ double distance = a->GetDistanceFrom (b);
++ double fer;
++
++ NS_ASSERT (distance >= 0);
++ if (distance < m_alpha * m_maxDistance)
++ {
++ fer = 0;
++ }
++ else if (distance < m_maxDistance)
++ {
++ fer = 1 - ((1 - pow((distance / m_maxDistance), m_beta))/ (1 - pow(m_alpha, m_beta)));
++ }
++ else
++ {
++ fer = 1;
++ }
++
++ NS_ASSERT(fer<=1);
++ NS_LOG_DEBUG ("FER =" << fer << " Distance = " << distance << " Max_distance = " << m_maxDistance << " Alpha = " << m_alpha << " Beta = " << m_beta);
++
++ if(m_ranvar.GetValue() <= fer)
++ {
++ NS_LOG_DEBUG("Frame error");
++ return -10000;
++ }
++ else
++ {
++ NS_LOG_DEBUG("Frame OK");
++ return txPowerDbm;
++ }
++}
+ } // namespace ns3
+diff -uprNB ns-3.13/src/propagation/model/propagation-loss-model.h b/src/propagation/model/propagation-loss-model.h
+--- ns-3.13/src/propagation/model/propagation-loss-model.h 2011-12-23 22:09:34.000000000 +0100
++++ b/src/propagation/model/propagation-loss-model.h 2012-04-30 19:03:14.000000000 +0200
+@@ -563,6 +563,82 @@ private:
+ double m_range;
+ };
+
++
++////////////////// SimplePropagationLossModel (authors: David Gómez Fernández / Ramón Agüero Calvo) //////////////////
++
++/**
++ * \brief Naive propagation model which depends exclusively on the distance between the source and the destination
++ * (shortest distance - linear path).
++ *
++ * This model corresponds with a deterministic channel model behavior, where all packets arrive
++ * correctly to the receiver if the distance between the two nodes are smaller than a preset value.
++ * Once this value is reached, the error rate begins to increase (following a beta-dependent decreasing
++ * factor), according to the following expression:
++ *
++ * / 1, if 0 <= x < alpha * d_max
++ * |
++ * | 1 - (x/(d_max))^beta
++ * 1 - FER = < ------------------------ , if alpha * d_max <= x <= d_max
++ * | 1 - alpha^beta
++ * |
++ * \ 0, if d_max < x
++ *
++ * Receivers beyond MaxRange receive at power -1000 dBm (effectively zero).
++ *
++ *
++ */
++
++class SimplePropagationLossModel: public PropagationLossModel
++{
++public:
++ static TypeId GetTypeId(void);
++
++ SimplePropagationLossModel();
++ virtual ~SimplePropagationLossModel();
++
++
++ /**
++ * \param alpha the exponential parameter applied in the expression
++ */
++ void SetAlpha(float alpha);
++ /**
++ * \returns the exponential parameter (alpha) to be used in the model
++ */
++ float GetAlpha(void) const;
++ /**
++ * \param beta the exponential parameter applied in the expression
++ */
++ void SetBeta(float beta);
++ /**
++ * \returns the exponential parameter (beta) to be used in the model
++ */
++ float GetBeta(void) const;
++ /**
++ * \param alpha the exponential parameter applied in the expression
++ */
++ void SetMaxDistance(float maxDistance);
++ /**
++ * \returns the maximum distance for a wireless transmission in the model. From this distance, FER = 1
++ */
++ float GetMaxDistance(void) const;
++
++
++
++private:
++ SimplePropagationLossModel (const SimplePropagationLossModel& o);
++ SimplePropagationLossModel & operator=(const SimplePropagationLossModel& o);
++ virtual double DoCalcRxPower(double txPowerDbm, Ptr<MobilityModel> a,
++ Ptr<MobilityModel> b) const;
++
++ //class specific parameters
++ float m_maxDistance;
++ float m_alpha;
++ float m_beta;
++ RandomVariable m_ranvar;
++
++};
++
++
+ } // namespace ns3
+
+ #endif /* PROPAGATION_LOSS_MODEL_H */
+Binary files ns-3.13/src/spectrum/bindings/callbacks_list.pyc and b/src/spectrum/bindings/callbacks_list.pyc differ
+Binary files ns-3.13/src/spectrum/bindings/modulegen__gcc_LP64.pyc and b/src/spectrum/bindings/modulegen__gcc_LP64.pyc differ
+Binary files ns-3.13/src/stats/bindings/callbacks_list.pyc and b/src/stats/bindings/callbacks_list.pyc differ
+Binary files ns-3.13/src/stats/bindings/modulegen_customizations.pyc and b/src/stats/bindings/modulegen_customizations.pyc differ
+Binary files ns-3.13/src/stats/bindings/modulegen__gcc_LP64.pyc and b/src/stats/bindings/modulegen__gcc_LP64.pyc differ
+Binary files ns-3.13/src/tap-bridge/bindings/callbacks_list.pyc and b/src/tap-bridge/bindings/callbacks_list.pyc differ
+Binary files ns-3.13/src/tap-bridge/bindings/modulegen_customizations.pyc and b/src/tap-bridge/bindings/modulegen_customizations.pyc differ
+Binary files ns-3.13/src/tap-bridge/bindings/modulegen__gcc_LP64.pyc and b/src/tap-bridge/bindings/modulegen__gcc_LP64.pyc differ
+Binary files ns-3.13/src/tools/bindings/callbacks_list.pyc and b/src/tools/bindings/callbacks_list.pyc differ
+Binary files ns-3.13/src/tools/bindings/modulegen__gcc_LP64.pyc and b/src/tools/bindings/modulegen__gcc_LP64.pyc differ
+Binary files ns-3.13/src/topology-read/bindings/callbacks_list.pyc and b/src/topology-read/bindings/callbacks_list.pyc differ
+Binary files ns-3.13/src/topology-read/bindings/modulegen__gcc_LP64.pyc and b/src/topology-read/bindings/modulegen__gcc_LP64.pyc differ
+Binary files ns-3.13/src/uan/bindings/callbacks_list.pyc and b/src/uan/bindings/callbacks_list.pyc differ
+Binary files ns-3.13/src/uan/bindings/modulegen__gcc_LP64.pyc and b/src/uan/bindings/modulegen__gcc_LP64.pyc differ
+Binary files ns-3.13/src/visualizer/bindings/callbacks_list.pyc and b/src/visualizer/bindings/callbacks_list.pyc differ
+Binary files ns-3.13/src/visualizer/bindings/modulegen__gcc_LP64.pyc and b/src/visualizer/bindings/modulegen__gcc_LP64.pyc differ
+Binary files ns-3.13/src/wifi/bindings/callbacks_list.pyc and b/src/wifi/bindings/callbacks_list.pyc differ
+Binary files ns-3.13/src/wifi/bindings/modulegen_customizations.pyc and b/src/wifi/bindings/modulegen_customizations.pyc differ
+Binary files ns-3.13/src/wifi/bindings/modulegen__gcc_LP64.pyc and b/src/wifi/bindings/modulegen__gcc_LP64.pyc differ
+diff -uprNB ns-3.13/src/wifi/helper/yans-wifi-helper.cc b/src/wifi/helper/yans-wifi-helper.cc
+--- ns-3.13/src/wifi/helper/yans-wifi-helper.cc 2011-12-23 22:09:34.000000000 +0100
++++ b/src/wifi/helper/yans-wifi-helper.cc 2012-04-30 19:11:27.000000000 +0200
+@@ -34,6 +34,10 @@
+ #include "ns3/abort.h"
+ #include "ns3/log.h"
+
++#include <stdio.h>
++#include <ns3/error-model.h>
++
++
+ NS_LOG_COMPONENT_DEFINE ("YansWifiHelper");
+
+ namespace ns3 {
+@@ -125,6 +129,14 @@ YansWifiChannelHelper::AddPropagationLos
+ m_propagationLoss.push_back (factory);
+ }
+
++
++void YansWifiChannelHelper::AddPropagationLoss(Ptr<PropagationLossModel> loss)
++{
++ m_propagationLossModelVector.push_back(loss);
++
++}
++
++
+ void
+ YansWifiChannelHelper::SetPropagationDelay (std::string type,
+ std::string n0, const AttributeValue &v0,
+@@ -154,6 +166,23 @@ YansWifiChannelHelper::Create (void) con
+ {
+ Ptr<YansWifiChannel> channel = CreateObject<YansWifiChannel> ();
+ Ptr<PropagationLossModel> prev = 0;
++
++ if (m_propagationLossModelVector.size())
++ {
++ Ptr<PropagationLossModel> prev = 0;
++ for(std::vector<Ptr <PropagationLossModel> >::const_iterator i = m_propagationLossModelVector.begin(); i != m_propagationLossModelVector.end();++i)
++ {
++ if (prev != 0)
++ prev->SetNext(*i);
++ if (m_propagationLossModelVector.begin() == i)
++ channel->SetPropagationLossModel(*i);
++ prev = *i;
++ }
++ }
++ else
++ {
++
++
+ for (std::vector<ObjectFactory>::const_iterator i = m_propagationLoss.begin (); i != m_propagationLoss.end (); ++i)
+ {
+ Ptr<PropagationLossModel> cur = (*i).Create<PropagationLossModel> ();
+@@ -167,6 +196,9 @@ YansWifiChannelHelper::Create (void) con
+ }
+ prev = cur;
+ }
++
++ }
++
+ Ptr<PropagationDelayModel> delay = m_propagationDelay.Create<PropagationDelayModel> ();
+ channel->SetPropagationDelayModel (delay);
+ return channel;
+@@ -178,6 +210,9 @@ YansWifiPhyHelper::YansWifiPhyHelper ()
+ m_pcapDlt (PcapHelper::DLT_IEEE802_11)
+ {
+ m_phy.SetTypeId ("ns3::YansWifiPhy");
++
++ m_errorModel = 0;
++
+ }
+
+ YansWifiPhyHelper
+@@ -228,12 +263,45 @@ YansWifiPhyHelper::SetErrorRateModel (st
+ m_errorRateModel.Set (n7, v7);
+ }
+
++ void YansWifiPhyHelper::SetErrorModel(std::string name, std::string n0, const AttributeValue & v0, std::string n1, const AttributeValue & v1, std::string n2, const AttributeValue & v2, std::string n3, const AttributeValue & v3, std::string n4, const AttributeValue & v4, std::string n5, const AttributeValue & v5, std::string n6, const AttributeValue & v6, std::string n7, const AttributeValue & v7)
++ {
++ ;
++ m_errorModelFactory = ObjectFactory();
++ m_errorModelFactory.SetTypeId(name);
++ m_errorModelFactory.Set(n0, v0);
++ m_errorModelFactory.Set(n1, v1);
++ m_errorModelFactory.Set(n2, v2);
++ m_errorModelFactory.Set(n3, v3);
++ m_errorModelFactory.Set(n4, v4);
++ m_errorModelFactory.Set(n5, v5);
++ m_errorModelFactory.Set(n6, v6);
++ m_errorModelFactory.Set(n7, v7);
++ }
++
++ Ptr<ErrorModel> YansWifiPhyHelper::GetErrorModel() const
++ {
++ return m_errorModel;
++ }
++
++ void YansWifiPhyHelper::SetErrorModel(Ptr<ErrorModel> errorModel)
++ {
++ this->m_errorModel = errorModel;
++ }
++
++
+ Ptr<WifiPhy>
+ YansWifiPhyHelper::Create (Ptr<Node> node, Ptr<WifiNetDevice> device) const
+ {
+ Ptr<YansWifiPhy> phy = m_phy.Create<YansWifiPhy> ();
+ Ptr<ErrorRateModel> error = m_errorRateModel.Create<ErrorRateModel> ();
+ phy->SetErrorRateModel (error);
++
++
++ //If declared error model, set it as attribute
++ if (m_errorModel )
++ phy->SetErrorModel(m_errorModel);
++
++
+ phy->SetChannel (m_channel);
+ phy->SetMobility (node);
+ phy->SetDevice (device);
+diff -uprNB ns-3.13/src/wifi/helper/yans-wifi-helper.h b/src/wifi/helper/yans-wifi-helper.h
+--- ns-3.13/src/wifi/helper/yans-wifi-helper.h 2011-12-23 22:09:34.000000000 +0100
++++ b/src/wifi/helper/yans-wifi-helper.h 2012-04-30 19:04:44.000000000 +0200
+@@ -25,6 +25,9 @@
+ #include "ns3/yans-wifi-channel.h"
+ #include "ns3/deprecated.h"
+
++#include "ns3/propagation-loss-model.h"
++#include "ns3/error-model.h"
++
+ namespace ns3 {
+
+ /**
+@@ -88,6 +91,21 @@ public:
+ std::string n5 = "", const AttributeValue &v5 = EmptyAttributeValue (),
+ std::string n6 = "", const AttributeValue &v6 = EmptyAttributeValue (),
+ std::string n7 = "", const AttributeValue &v7 = EmptyAttributeValue ());
++
++
++ /** Add a propagation loss model to the set of currently-configured loss models.
++ * This method is additive to allow you to construct complex propagation loss models
++ * such as a log distance + jakes model, etc.
++ *
++ * The order in which PropagationLossModels are added may be significant. Some
++ * propagation models are dependent of the "txPower" (eg. Nakagami model), and
++ * are therefore not commutative. The final receive power (excluding receiver
++ * gains) are calculated in the order the models are added.
++ */
++ void AddPropagationLoss (Ptr<PropagationLossModel> loss);
++
++
++
+ /**
+ * \param name the name of the model to set
+ * \param n0 the name of the attribute to set
+@@ -129,6 +147,10 @@ public:
+ private:
+ std::vector<ObjectFactory> m_propagationLoss;
+ ObjectFactory m_propagationDelay;
++
++ std::vector<Ptr <PropagationLossModel> > m_propagationLossModelVector;
++
++
+ };
+
+ /**
+@@ -208,6 +230,42 @@ public:
+ std::string n7 = "", const AttributeValue &v7 = EmptyAttributeValue ());
+
+ /**
++ * \param name the name of the error rate model to set.
++ * \param n0 the name of the attribute to set
++ * \param v0 the value of the attribute to set
++ * \param n1 the name of the attribute to set
++ * \param v1 the value of the attribute to set
++ * \param n2 the name of the attribute to set
++ * \param v2 the value of the attribute to set
++ * \param n3 the name of the attribute to set
++ * \param v3 the value of the attribute to set
++ * \param n4 the name of the attribute to set
++ * \param v4 the value of the attribute to set
++ * \param n5 the name of the attribute to set
++ * \param v5 the value of the attribute to set
++ * \param n6 the name of the attribute to set
++ * \param v6 the value of the attribute to set
++ * \param n7 the name of the attribute to set
++ * \param v7 the value of the attribute to set
++ *
++ * Set the error model and its attributes to use when Install is called.
++ */
++ void SetErrorModel (std::string name,
++ std::string n0 = "", const AttributeValue &v0 = EmptyAttributeValue (),
++ std::string n1 = "", const AttributeValue &v1 = EmptyAttributeValue (),
++ std::string n2 = "", const AttributeValue &v2 = EmptyAttributeValue (),
++ std::string n3 = "", const AttributeValue &v3 = EmptyAttributeValue (),
++ std::string n4 = "", const AttributeValue &v4 = EmptyAttributeValue (),
++ std::string n5 = "", const AttributeValue &v5 = EmptyAttributeValue (),
++ std::string n6 = "", const AttributeValue &v6 = EmptyAttributeValue (),
++ std::string n7 = "", const AttributeValue &v7 = EmptyAttributeValue ());
++
++ Ptr<ErrorModel> GetErrorModel() const;
++
++ void SetErrorModel(Ptr<ErrorModel> errorModel);
++
++
++ /**
+ * An enumeration of the pcap data link types (DLTs) which this helper
+ * supports. See http://wiki.wireshark.org/Development/LibpcapFileFormat
+ * for more information on these formats.
+@@ -274,6 +332,12 @@ private:
+
+ ObjectFactory m_phy;
+ ObjectFactory m_errorRateModel;
++
++
++ ObjectFactory m_errorModelFactory;
++ Ptr<ErrorModel> m_errorModel;
++
++
+ Ptr<YansWifiChannel> m_channel;
+ uint32_t m_pcapDlt;
+ };
+diff -uprNB ns-3.13/src/wifi/model/yans-wifi-phy.cc b/src/wifi/model/yans-wifi-phy.cc
+--- ns-3.13/src/wifi/model/yans-wifi-phy.cc 2011-12-23 22:09:34.000000000 +0100
++++ b/src/wifi/model/yans-wifi-phy.cc 2012-04-30 19:15:10.000000000 +0200
+@@ -37,6 +37,13 @@
+ #include "ns3/trace-source-accessor.h"
+ #include <math.h>
+
++#include "ns3/error-model.h"
++//YansWifiPhy::EndReceive headers parser
++#include "ns3/wifi-mac-header.h"
++#include "ns3/llc-snap-header.h"
++#include "ns3/ipv4-header.h"
++#include "ns3/tcp-header.h"
++
+ NS_LOG_COMPONENT_DEFINE ("YansWifiPhy");
+
+ namespace ns3 {
+@@ -121,6 +128,14 @@ YansWifiPhy::GetTypeId (void)
+ &YansWifiPhy::GetChannelNumber),
+ MakeUintegerChecker<uint16_t> ())
+
++
++ .AddAttribute ("ErrorModel",
++ "The receiver error model used to simulate packet loss",
++ PointerValue(),
++ MakePointerAccessor (&YansWifiPhy::m_errorModel),
++ MakePointerChecker<ErrorModel>())
++
++
+ ;
+ return tid;
+ }
+@@ -129,7 +144,11 @@ YansWifiPhy::YansWifiPhy ()
+ : m_channelNumber (1),
+ m_endRxEvent (),
+ m_random (0.0, 1.0),
+- m_channelStartingFrequency (0)
++ m_channelStartingFrequency (0),
++
++ m_ranvar (0.0, 1.0),
++ m_errorModel (0)
++
+ {
+ NS_LOG_FUNCTION (this);
+ m_state = CreateObject<WifiPhyStateHelper> ();
+@@ -149,6 +168,8 @@ YansWifiPhy::DoDispose (void)
+ m_device = 0;
+ m_mobility = 0;
+ m_state = 0;
++
++ m_errorModel = 0;
+ }
+
+ void
+@@ -241,6 +262,12 @@ YansWifiPhy::SetErrorRateModel (Ptr<Erro
+ {
+ m_interference.SetErrorRateModel (rate);
+ }
++
++void YansWifiPhy::SetErrorModel(Ptr<ErrorModel> errorModel)
++{
++ m_errorModel = errorModel;
++}
++
+ void
+ YansWifiPhy::SetDevice (Ptr<Object> device)
+ {
+@@ -295,6 +322,13 @@ YansWifiPhy::GetErrorRateModel (void) co
+ {
+ return m_interference.GetErrorRateModel ();
+ }
++
++Ptr<ErrorModel> YansWifiPhy::GetErrorModel (void) const
++{
++ return m_errorModel;
++}
++
++
+ Ptr<Object>
+ YansWifiPhy::GetDevice (void) const
+ {
+@@ -774,27 +808,125 @@ YansWifiPhy::EndReceive (Ptr<Packet> pac
+ NS_ASSERT (IsStateRx ());
+ NS_ASSERT (event->GetEndTime () == Simulator::Now ());
+
++ WifiMacHeader hdr;
++ LlcSnapHeader llcHdr;
++ Ipv4Header ipv4Hdr;
++ TcpHeader tcpHdr;
++ Ptr<Packet> pktCopy = packet->Copy();
++
+ struct InterferenceHelper::SnrPer snrPer;
+ snrPer = m_interference.CalculateSnrPer (event);
+ m_interference.NotifyRxEnd ();
+
+ NS_LOG_DEBUG ("mode=" << (event->GetPayloadMode ().GetDataRate ()) <<
+ ", snr=" << snrPer.snr << ", per=" << snrPer.per << ", size=" << packet->GetSize ());
+- if (m_random.GetValue () > snrPer.per)
+- {
+- NotifyRxEnd (packet);
+- uint32_t dataRate500KbpsUnits = event->GetPayloadMode ().GetDataRate () / 500000;
+- bool isShortPreamble = (WIFI_PREAMBLE_SHORT == event->GetPreambleType ());
+- double signalDbm = RatioToDb (event->GetRxPowerW ()) + 30;
+- double noiseDbm = RatioToDb (event->GetRxPowerW () / snrPer.snr) - GetRxNoiseFigure () + 30;
+- NotifyMonitorSniffRx (packet, (uint16_t)GetChannelFrequencyMhz (), GetChannelNumber (), dataRate500KbpsUnits, isShortPreamble, signalDbm, noiseDbm);
+- m_state->SwitchFromRxEndOk (packet, snrPer.snr, event->GetPayloadMode (), event->GetPreambleType ());
+- }
+- else
+- {
+- /* failure. */
+- NotifyRxDrop (packet);
+- m_state->SwitchFromRxEndError (packet, snrPer.snr);
+- }
++
++ if (m_errorModel)
++ {
++ if (m_errorModel->IsEnabled())
++ {
++ if (m_errorModel && m_errorModel->IsCorrupt(packet)) //Error
++ {
++ NS_LOG_LOGIC("CORRUPT!!! Dropping pkt due to error model (" << this <<")");
++ NotifyRxDrop (packet);
++ m_state->SwitchFromRxEndError (packet, snrPer.snr);
++ return;
++ }
++ else //Correct reception
++ {
++ NS_LOG_LOGIC("CORRECT!!! (" << this <<")");
++ NotifyRxEnd (packet);
++ uint32_t dataRate500KbpsUnits = event->GetPayloadMode ().GetDataRate () / 500000;
++ bool isShortPreamble = (WIFI_PREAMBLE_SHORT == event->GetPreambleType ());
++ double signalDbm = RatioToDb (event->GetRxPowerW ()) + 30;
++ double noiseDbm = RatioToDb (event->GetRxPowerW () / snrPer.snr) - GetRxNoiseFigure () + 30;
++ NotifyMonitorSniffRx (packet, (uint16_t)GetChannelFrequencyMhz (), GetChannelNumber (), dataRate500KbpsUnits, isShortPreamble, signalDbm, noiseDbm);
++ m_state->SwitchFromRxEndOk (packet, snrPer.snr, event->GetPayloadMode (), event->GetPreambleType ());
++ return;
++ }
++ }
++ }
++
++
++
++ else //For NS-3 default error rate model (NIST/YANS)
++ {
++ //Force the IEEE 802.11 ACK frames and all broadcast/control/management messages to be correct
++ pktCopy->RemoveHeader(hdr);
++ //Decide whether the frame is correct or not according to the frame type (data, TCP or broadcast/control)
++ if (hdr.IsData() && !hdr.GetAddr1().IsBroadcast())
++ {
++ //We have split the packet decision into the following three conditions:
++ // - ARP frames --> Always correct
++ // - TCP ACK --> Always correct
++ // - Data frames --> Legacy HMM decision process
++
++ pktCopy->RemoveHeader(llcHdr);
++
++ switch (llcHdr.GetType())
++ {
++ case 0x0806: //ARP
++ snrPer.per = snrPer.per;
++ break;
++ case 0x0800: //IP packet
++ pktCopy->RemoveHeader(ipv4Hdr);
++ switch (ipv4Hdr.GetProtocol())
++ {
++ case 6: //TCP
++ pktCopy->RemoveHeader(tcpHdr);
++ //Data segments --> To be errored
++ if (pktCopy->GetSize() > 4)
++ snrPer.per = snrPer.per;
++ else
++ snrPer.per = 0;
++ break;
++ case 17: //UDP
++ snrPer.per = snrPer.per;
++ break;
++ default:
++ NS_LOG_ERROR ("Protocol not implemented yet (IP) --> " << ipv4Hdr.GetProtocol());
++ break;
++ }
++ break;
++ default:
++ NS_LOG_ERROR ("Protocol not implemented yet (LLC) --> " << llcHdr.GetType());
++ break;
++ }
++ }
++ else if (hdr.IsAck())
++ snrPer.per = 0;
++ else if (hdr.IsCtl() || hdr.IsMgt() || (hdr.GetAddr1()).IsBroadcast())
++ snrPer.per = 0;
++ else
++ snrPer.per = 0;
++
++ NS_LOG_DEBUG("SNR = " << 10*log10 (snrPer.snr) << " dB | PER = " << snrPer.per << " | Packet length =" << packet->GetSize());
++
++
++ ////////////////////LEGACY NS-3 Code//////////////
++ if (m_ranvar.GetValue () > snrPer.per)
++ {
++ NotifyRxEnd (packet);
++ uint32_t dataRate500KbpsUnits = event->GetPayloadMode ().GetDataRate () / 500000;
++ bool isShortPreamble = (WIFI_PREAMBLE_SHORT == event->GetPreambleType ());
++ double signalDbm = RatioToDb (event->GetRxPowerW ()) + 30;
++ double noiseDbm = RatioToDb (event->GetRxPowerW () / snrPer.snr) - GetRxNoiseFigure () + 30;
++ NotifyMonitorSniffRx (packet, (uint16_t)GetChannelFrequencyMhz (), GetChannelNumber (), dataRate500KbpsUnits, isShortPreamble, signalDbm, noiseDbm);
++ m_state->SwitchFromRxEndOk (packet, snrPer.snr, event->GetPayloadMode (), event->GetPreambleType ());
++ }
++ else
++ {
++ /* failure. */
++ NotifyRxDrop (packet);
++ m_state->SwitchFromRxEndError (packet, snrPer.snr);
++ }
++ ////////////////////LEGACY NS-3 Code//////////////
++
++
++ }
++
++
++
++
+ }
+ } // namespace ns3
+diff -uprNB ns-3.13/src/wifi/model/yans-wifi-phy.h b/src/wifi/model/yans-wifi-phy.h
+--- ns-3.13/src/wifi/model/yans-wifi-phy.h 2011-12-23 22:09:34.000000000 +0100
++++ b/src/wifi/model/yans-wifi-phy.h 2012-04-30 19:16:22.000000000 +0200
+@@ -36,6 +36,8 @@
+ #include "wifi-phy-standard.h"
+ #include "interference-helper.h"
+
++#include "ns3/error-model.h"
++
+
+ namespace ns3 {
+
+@@ -105,6 +107,9 @@ public:
+ void SetEdThreshold (double threshold);
+ void SetCcaMode1Threshold (double threshold);
+ void SetErrorRateModel (Ptr<ErrorRateModel> rate);
++
++ void SetErrorModel (Ptr<ErrorModel> errorModel);
++
+ void SetDevice (Ptr<Object> device);
+ void SetMobility (Ptr<Object> mobility);
+ double GetRxNoiseFigure (void) const;
+@@ -113,6 +118,7 @@ public:
+ double GetEdThreshold (void) const;
+ double GetCcaMode1Threshold (void) const;
+ Ptr<ErrorRateModel> GetErrorRateModel (void) const;
++ Ptr<ErrorModel> GetErrorModel (void) const;
+ Ptr<Object> GetDevice (void) const;
+ Ptr<Object> GetMobility (void);
+
+@@ -220,6 +223,10 @@ private:
+ InterferenceHelper m_interference;
+ Time m_channelSwitchDelay;
+
++ UniformVariable m_ranvar;
++ Ptr<ErrorModel> m_errorModel;
++
++
+ };
+
+ } // namespace ns3
+diff -uprNB ns-3.13/src/wifi/wscript b/src/wifi/wscript
+--- ns-3.13/src/wifi/wscript 2011-12-23 22:09:34.000000000 +0100
++++ b/src/wifi/wscript 2012-04-30 19:12:46.000000000 +0200
+@@ -1,7 +1,7 @@
+ ## -*- Mode: python; py-indent-offset: 4; indent-tabs-mode: nil; coding: utf-8; -*-
+
+ def build(bld):
+- obj = bld.create_ns3_module('wifi', ['network', 'propagation'])
++ obj = bld.create_ns3_module('wifi', ['network', 'propagation', 'internet'])
+ obj.source = [
+ 'model/wifi-information-element.cc',
+ 'model/wifi-information-element-vector.cc',
+Binary files ns-3.13/src/wimax/bindings/callbacks_list.pyc and b/src/wimax/bindings/callbacks_list.pyc differ
+Binary files ns-3.13/src/wimax/bindings/modulegen__gcc_LP64.pyc and b/src/wimax/bindings/modulegen__gcc_LP64.pyc differ
« no previous file with comments | « ns-3.13/README ('k') | ns-3.13/scratch/error-model-test.cc » ('j') | no next file with comments »

Powered by Google App Engine
RSS Feeds Recent Issues | This issue
This is Rietveld f62528b