Child: [b323f7] (diff)

Download this file

UpstreamNotifier.cc    66 lines (55 with data), 2.2 kB

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
//
// Copyright Š 2014 - 2015 PRISTINE Consortium (http://ict-pristine.eu)
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// 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 Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public License
// along with this program. If not, see http://www.gnu.org/licenses/.
//
#include <UpstreamNotifier.h>
Define_Module(UpstreamNotifier);
void UpstreamNotifier::onPolicyInit()
{
}
bool UpstreamNotifier::run(RMTQueue* queue)
{
// simple version:
// Send out the notification when an output (N-1)-port is overflowing.
if (queue->getLength() >= queue->getMaxLength())
{
if (queue->getType() == RMTQueue::OUTPUT)
{ // (N-1)-port output queues are filling up => stop accepting more PDUs
notifySenderOfCongestion(queue->getLastPDU());
}
}
// extended version:
// !!! CURRENTLY NOT WORKING, will be available in the next release.
// When an output buffer is overflowing, disable reading data from the input
// buffer sending data to it. When the input buffer starts to overflow as well,
// send out the notification.
// if (queue->getLength() >= queue->getMaxLength())
// {
// if (queue->getType() == RMTQueue::OUTPUT)
// {
// disableSenderPortDrain(queue->getLastPDU());
// }
// else if (queue->getType() == RMTQueue::INPUT)
// {
// notifySenderOfCongestion(queue->getLastPDU());
// }
// }
// else if ((queue->getLength() == queue->getThreshLength()) &&
// port->hasBlockedInput())
// { // the output buffers are keeping up again, continue receiving on input
// port->unblockInput();
// }
return false;
}