IT++
4.3.1
Toggle main menu visibility
itpp
protocol
packet_generator.cpp
Go to the documentation of this file.
1
28
29
#include <
itpp/protocol/packet_generator.h
>
30
31
32
namespace
itpp
33
{
34
35
Packet_Generator::Packet_Generator
(
const
int
Packet_size,
const
unsigned
long
int
Max_packets)
36
{
37
keep_running =
false
;
38
start
.forward(
this
, &Packet_Generator::handle_start);
39
next.forward(
this
, &Packet_Generator::handle_next);
40
output
.connect(&next);
41
set_parameters
(Packet_size, Max_packets);
42
}
43
44
Packet_Generator::~Packet_Generator
() { }
45
46
void
Packet_Generator::set_parameters
(
const
int
Packet_size,
const
unsigned
long
int
Max_packets)
47
{
48
it_assert
(Packet_size > 0,
"Packet_Generator::set_parameters(): "
);
49
packet_size = Packet_size;
50
max_packets = Max_packets;
51
id
= 0;
52
}
53
54
int
Packet_Generator::get_packet_size
()
55
{
56
return
packet_size;
57
}
58
59
int
Packet_Generator::get_max_packets
()
60
{
61
return
max_packets;
62
}
63
64
void
Packet_Generator::handle_next(
Packet
*)
65
{
66
if
(keep_running) {
67
output
(
new
Packet
(8*packet_size),
delta_t
());
68
id
++;
69
if
(max_packets &&
id
>= max_packets)
70
start
(
false
);
71
}
72
}
73
74
void
Packet_Generator::handle_start(
const
bool
run)
75
{
76
if
(run && !keep_running) {
77
keep_running = run;
78
handle_next(NULL);
79
}
80
keep_running = run;
81
}
82
83
84
// ---------------------------- Poisson_Packet_Generator -------------------------------------------------
85
86
Poisson_Packet_Generator::Poisson_Packet_Generator
(
const
double
Avg_bit_rate,
87
const
int
Packet_size,
88
const
unsigned
long
int
Max_packets):
Packet_Generator
(Packet_size, Max_packets)
89
{
90
set_parameters
(Avg_bit_rate, Packet_size, Max_packets);
91
}
92
93
Poisson_Packet_Generator::~Poisson_Packet_Generator
() {}
94
95
void
Poisson_Packet_Generator::set_parameters
(
const
double
Avg_bit_rate,
96
const
int
Packet_size,
97
const
unsigned
long
int
Max_packets)
98
{
99
Packet_Generator::set_parameters
(Packet_size, Max_packets);
100
it_assert
(Avg_bit_rate > 0.0,
"Packet_Generator::set_parameters(): "
);
101
avg_bit_rate
= Avg_bit_rate;
102
avg_delta_t
= 8.0 *
get_packet_size
() /
avg_bit_rate
;
103
ee
.setup(1.0);
104
}
105
106
double
Poisson_Packet_Generator::get_avg_bit_rate
()
107
{
108
return
avg_bit_rate
;
109
}
110
111
112
Ttype
Poisson_Packet_Generator::delta_t
()
113
{
114
return
ee
()*
avg_delta_t
;
115
}
116
117
118
// ---------------------------- Constant_Rate_Packet_Generator -------------------------------------------------
119
120
Constant_Rate_Packet_Generator::Constant_Rate_Packet_Generator
(
const
double
Avg_rate,
const
int
Packet_size,
const
unsigned
long
int
Max_packets):
Poisson_Packet_Generator
(Avg_rate, Packet_size, Max_packets) {}
121
122
Constant_Rate_Packet_Generator::~Constant_Rate_Packet_Generator
() {}
123
124
Ttype
Constant_Rate_Packet_Generator::delta_t
()
125
{
126
return
avg_delta_t
;
127
}
128
129
130
// ---------------------------- Burst_WWW_Packet_Generator -------------------------------------------------
131
132
133
Burst_WWW_Packet_Generator::Burst_WWW_Packet_Generator
(
const
double
Avg_bit_rate,
const
int
Packet_size,
const
int
Max_packets):
Poisson_Packet_Generator
(Avg_bit_rate, Packet_size, Max_packets)
134
{
135
Navg
= 50;
// Average number of packets per burst [packets].
136
Ti
= 1.1960e-4;
// Average inter-arrival time between packets in burst [s].
137
Tr
=
Navg
* Packet_size * 8.0 / Avg_bit_rate -
Ti
* (
Navg
- 1);
// Average time between bursts.
138
N
= 0;
139
}
140
141
Burst_WWW_Packet_Generator::~Burst_WWW_Packet_Generator
()
142
{
143
144
}
145
146
Ttype
Burst_WWW_Packet_Generator::delta_t
()
147
{
148
if
(
N
== 0) {
// Start of a new burst.
149
N
=
Navg
;
150
N
--;
// First packet is triggered at ...
151
return
ee
()*
Tr
;
// ... start time of next burst.
152
}
153
else
{
// Within a burst.
154
N
--;
// One packet less in the burst ...
155
return
ee
()*
Ti
;
// ... arrival time for next packet within the burst.
156
}
157
}
158
159
160
// ----------------------------Sink -------------------------------------------------
161
162
Sink::Sink
(
const
unsigned
long
int
Max_packets)
163
{
164
it_assert
(Max_packets > 0,
"Sink::Sink(): "
);
165
max_packets = Max_packets;
166
Ncp = 0;
167
Nbytes = 0;
168
packet_input
.forward(
this
, &Sink::handle_packet_input);
169
start_time =
Event_Queue::now
();
170
}
171
172
Sink::~Sink
()
173
{
174
std::cout <<
"Time = "
<<
Event_Queue::now
() <<
", Sink : "
<< std::endl;
175
std::cout <<
"Received "
<< Ncp <<
" packets in sequence."
<< std::endl;
176
std::cout <<
"Receive average bit rate = "
<< Nbytes*8.0 / (
Event_Queue::now
() - start_time) <<
" [bits/second]."
<< std::endl;
177
}
178
179
180
void
Sink::handle_packet_input(
Packet
*P)
181
{
182
it_assert
(P != NULL,
"Sink::handle_packet_input(): "
);
183
Ncp++;
184
Nbytes += (P->
bit_size
() / 8);
185
delete
P;
186
if
(Ncp >= max_packets) {
187
std::cout <<
"Time = "
<<
Event_Queue::now
() <<
", Sink : "
<< std::endl;
188
std::cout <<
"Simulation stopped because : Ncp > max_packets"
<< std::endl;
189
Event_Queue::stop
();
190
}
191
}
192
193
194
}
// namespace itpp
itpp::Burst_WWW_Packet_Generator::Ti
double Ti
ADD DOCUMENTATION HERE.
Definition
packet_generator.h:144
itpp::Burst_WWW_Packet_Generator::Tr
double Tr
ADD DOCUMENTATION HERE.
Definition
packet_generator.h:146
itpp::Burst_WWW_Packet_Generator::delta_t
virtual Ttype delta_t()
ADD DOCUMENTATION HERE.
Definition
packet_generator.cpp:146
itpp::Burst_WWW_Packet_Generator::~Burst_WWW_Packet_Generator
virtual ~Burst_WWW_Packet_Generator()
ADD DOCUMENTATION HERE.
Definition
packet_generator.cpp:141
itpp::Burst_WWW_Packet_Generator::N
int N
ADD DOCUMENTATION HERE.
Definition
packet_generator.h:140
itpp::Burst_WWW_Packet_Generator::Navg
int Navg
ADD DOCUMENTATION HERE.
Definition
packet_generator.h:142
itpp::Burst_WWW_Packet_Generator::Burst_WWW_Packet_Generator
Burst_WWW_Packet_Generator(const double Avg_bit_rate=1.0, const int Packet_size=150, const int Max_packets=0)
ADD DOCUMENTATION HERE.
Definition
packet_generator.cpp:133
itpp::Constant_Rate_Packet_Generator::~Constant_Rate_Packet_Generator
virtual ~Constant_Rate_Packet_Generator()
ADD DOCUMENTATION HERE.
Definition
packet_generator.cpp:122
itpp::Constant_Rate_Packet_Generator::delta_t
virtual Ttype delta_t()
ADD DOCUMENTATION HERE.
Definition
packet_generator.cpp:124
itpp::Constant_Rate_Packet_Generator::Constant_Rate_Packet_Generator
Constant_Rate_Packet_Generator(const double Avg_bit_rate=1.0, const int Packet_size=150, const unsigned long int Max_packets=0)
ADD DOCUMENTATION HERE.
Definition
packet_generator.cpp:120
itpp::Event_Queue::stop
static void stop()
Stop execution of events.
Definition
events.cpp:73
itpp::Event_Queue::now
static Ttype now()
Return current time.
Definition
events.h:139
itpp::Packet_Generator::delta_t
virtual Ttype delta_t()=0
ADD DOCUMENTATION HERE.
itpp::Packet_Generator::set_parameters
void set_parameters(const int Packet_size, const unsigned long int Max_packets)
ADD DOCUMENTATION HERE.
Definition
packet_generator.cpp:46
itpp::Packet_Generator::get_packet_size
int get_packet_size()
ADD DOCUMENTATION HERE.
Definition
packet_generator.cpp:54
itpp::Packet_Generator::output
Signal< Packet * > output
ADD DOCUMENTATION HERE.
Definition
packet_generator.h:62
itpp::Packet_Generator::get_max_packets
int get_max_packets()
ADD DOCUMENTATION HERE.
Definition
packet_generator.cpp:59
itpp::Packet_Generator::start
Slot< Packet_Generator, bool > start
ADD DOCUMENTATION HERE.
Definition
packet_generator.h:64
itpp::Packet_Generator::Packet_Generator
Packet_Generator(const int Packet_size=150, const unsigned long int Max_packets=0)
ADD DOCUMENTATION HERE.
Definition
packet_generator.cpp:35
itpp::Packet_Generator::~Packet_Generator
virtual ~Packet_Generator()
ADD DOCUMENTATION HERE.
Definition
packet_generator.cpp:44
itpp::Packet
Definition
packet.h:56
itpp::Packet::bit_size
int bit_size()
get size of packet in bits
Definition
packet.h:67
itpp::Poisson_Packet_Generator::get_avg_bit_rate
double get_avg_bit_rate()
ADD DOCUMENTATION HERE.
Definition
packet_generator.cpp:106
itpp::Poisson_Packet_Generator::~Poisson_Packet_Generator
virtual ~Poisson_Packet_Generator()
ADD DOCUMENTATION HERE.
Definition
packet_generator.cpp:93
itpp::Poisson_Packet_Generator::avg_delta_t
double avg_delta_t
ADD DOCUMENTATION HERE.
Definition
packet_generator.h:103
itpp::Poisson_Packet_Generator::avg_bit_rate
double avg_bit_rate
ADD DOCUMENTATION HERE.
Definition
packet_generator.h:105
itpp::Poisson_Packet_Generator::Poisson_Packet_Generator
Poisson_Packet_Generator(const double Avg_bit_rate=1.0, const int Packet_size=150, const unsigned long int Max_packets=0)
ADD DOCUMENTATION HERE.
Definition
packet_generator.cpp:86
itpp::Poisson_Packet_Generator::set_parameters
void set_parameters(const double Avg_bit_rate, const int Packet_size, const unsigned long int Max_packets)
ADD DOCUMENTATION HERE.
Definition
packet_generator.cpp:95
itpp::Poisson_Packet_Generator::delta_t
virtual Ttype delta_t()
ADD DOCUMENTATION HERE.
Definition
packet_generator.cpp:112
itpp::Poisson_Packet_Generator::ee
Exponential_RNG ee
ADD DOCUMENTATION HERE.
Definition
packet_generator.h:107
itpp::Sink::~Sink
~Sink()
ADD DOCUMENTATION HERE.
Definition
packet_generator.cpp:172
itpp::Sink::Sink
Sink(const unsigned long int Max_packets=1000)
ADD DOCUMENTATION HERE.
Definition
packet_generator.cpp:162
itpp::Sink::packet_input
Slot< Sink, Packet * > packet_input
ADD DOCUMENTATION HERE.
Definition
packet_generator.h:162
it_assert
#define it_assert(t, s)
Abort if t is not true.
Definition
itassert.h:94
itpp
itpp namespace
Definition
itmex.h:37
itpp::Ttype
double Ttype
64-bit floating point time
Definition
events.h:54
packet_generator.h
Definition of a Packet generator class.
Generated by
1.17.0