TTEthernet Model for INET Framework
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
TTEthernetModel::TTIncoming Class Reference

Class for the critical traffic conformance check of time-triggered traffic. More...

#include <TTIncoming.h>

Inheritance diagram for TTEthernetModel::TTIncoming:
TTEthernetModel::Incoming

Public Member Functions

 TTIncoming ()
 Constructor. More...
 
virtual ~TTIncoming ()
 Destructor. More...
 
- Public Member Functions inherited from TTEthernetModel::Incoming
 Incoming ()
 Constructor. More...
 

Protected Member Functions

virtual void handleMessage (cMessage *msg)
 Forwards messages arriving on in-gate to out-gate checks conformance with receive window, delays messages until permanence pit. More...
 
- Protected Member Functions inherited from TTEthernetModel::Incoming
virtual void initialize ()
 Initialization of the module. More...
 

Private Attributes

EtherFrame * frame
 Stores the frame until the configured permanence point in time. More...
 

Additional Inherited Members

- Protected Attributes inherited from TTEthernetModel::Incoming
bool hadError
 set to true if there was an error during runtime More...
 
- Static Protected Attributes inherited from TTEthernetModel::Incoming
static simsignal_t ctDroppedSignal = SIMSIGNAL_NULL
 Signal that is emitted when a frame is dropped. More...
 

Detailed Description

Class for the critical traffic conformance check of time-triggered traffic.

This class checks whether incoming traffic arrived in the configured receive window. Messages are delayed until the configured permanence point in time.

See Also
Incoming

Definition at line 35 of file TTIncoming.h.

Constructor & Destructor Documentation

TTEthernetModel::TTIncoming::TTIncoming ( )

Constructor.

Definition at line 25 of file TTIncoming.cc.

26 {
27  frame = NULL;
28 }
TTEthernetModel::TTIncoming::~TTIncoming ( )
virtual

Destructor.

Definition at line 30 of file TTIncoming.cc.

31 {
32  if (frame != NULL)
33  {
34  delete frame;
35  }
36 }

Member Function Documentation

void TTEthernetModel::TTIncoming::handleMessage ( cMessage *  msg)
protectedvirtual

Forwards messages arriving on in-gate to out-gate checks conformance with receive window, delays messages until permanence pit.

After checking the receive window when a frame arrived, a SchedulerActionTimeEvent is registered at the TTEScheduler that triggeres the forwarding at the permanence point in time that was configured

Parameters
msgthe incoming message

Reimplemented from TTEthernetModel::Incoming.

Definition at line 38 of file TTIncoming.cc.

39 {
40  //Incoming Message
41  if (msg->arrivedOn("in"))
42  {
43  TTEScheduler *tteScheduler = (TTEScheduler*) getParentModule()->getSubmodule("tteScheduler");
44  //get current time in cylce
45  uint32_t currentTicks = tteScheduler->getTicks();
46  //Now check for correct arrival:
47  if (frame != NULL)
48  {
49  emit(ctDroppedSignal, 1);
50  hadError=true;
51  if(ev.isGUI()){
52  ev.printf("Received frame before permanence point of previous frame \n");
53  bubble("Received frame before permanence point of previous frame");
54  getDisplayString().setTagArg("i2", 0, "status/excl3");
55  getDisplayString().setTagArg("tt", 0, "WARNING: Received frame before permanence point of previous frame");
56  getParentModule()->getDisplayString().setTagArg("i2", 0, "status/excl3");
57  getParentModule()->getDisplayString().setTagArg("tt", 0, "Problem with Buffer");
58  }
59  delete msg;
60  }
61  //Check too early
62  else if (currentTicks < (uint32_t) par("receive_window_start").longValue())
63  {
64  emit(ctDroppedSignal, 1);
65  hadError=true;
66  if(ev.isGUI()){
67  ev.printf("Received frame in %s too early! Receive Time was %d Ticks, should have been between %d and %d! \n",
68  getName(), currentTicks, par("receive_window_start").longValue(),
69  par("receive_window_end").longValue());
70  bubble("Frame to early");
71  getDisplayString().setTagArg("i2", 0, "status/excl3");
72  getDisplayString().setTagArg("tt", 0, "WARNING: Buffer configuration problem - Received frame too early");
73  getParentModule()->getDisplayString().setTagArg("i2", 0, "status/excl3");
74  getParentModule()->getDisplayString().setTagArg("tt", 0, "WARNING: Buffer configuration problem - Received frame too early");
75  }
76  delete msg;
77  }
78  //Check too late
79  else if (currentTicks > (uint32_t) par("receive_window_end").longValue())
80  {
81  emit(ctDroppedSignal, 1);
82  hadError=true;
83  if(ev.isGUI()){
84  ev.printf("Received frame in %s too late! Receive Time was %d Ticks, should have been between %d and %d! \n",
85  getName(), currentTicks, par("receive_window_start").longValue(),
86  par("receive_window_end").longValue());
87  bubble("Frame to late");
88  getDisplayString().setTagArg("i2", 0, "status/excl3");
89  getDisplayString().setTagArg("tt", 0, "WARNING: Buffer configuration problem - Received frame too late");
90  getParentModule()->getDisplayString().setTagArg("i2", 0, "status/excl3");
91  getParentModule()->getDisplayString().setTagArg("tt", 0, "WARNING: Buffer configuration problem - Received frame too late");
92  }
93  delete msg;
94  }
95  //Timing ok
96  else
97  {
98  //delay for permanence_pit
99  if(!hadError && ev.isGUI())
100  getDisplayString().setTagArg("i2", 0, "status/hourglass");
101  frame = (EtherFrame *) msg;
102  SchedulerActionTimeEvent *event = new SchedulerActionTimeEvent("PIT Event", ACTION_TIME_EVENT);
103  event->setAction_time(par("permanence_pit").doubleValue());
104  event->setDestinationGate(gate("schedulerIn"));
105  tteScheduler->registerEvent(event);
106  }
107  }
108  else if (msg->arrivedOn("schedulerIn") && msg->getKind() == ACTION_TIME_EVENT)
109  {
110  ASSERT(frame);
111  delete msg;
112  if(!hadError && ev.isGUI())
113  getDisplayString().setTagArg("i2", 0, "");
114  send(frame, "out");
115  frame = NULL;
116  }
117 
118 }

Member Data Documentation

EtherFrame* TTEthernetModel::TTIncoming::frame
private

Stores the frame until the configured permanence point in time.

Definition at line 41 of file TTIncoming.h.

Referenced by handleMessage(), TTIncoming(), and ~TTIncoming().


The documentation for this class was generated from the following files: