EMANE  1.2.1
nemlayerstaterunning.cc
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2013-2014 - Adjacent Link LLC, Bridgewater, New Jersey
3  * Copyright (c) 2008 - DRS CenGen, LLC, Columbia, Maryland
4  * All rights reserved.
5  *
6  * Redistribution and use in source and binary forms, with or without
7  * modification, are permitted provided that the following conditions
8  * are met:
9  *
10  * * Redistributions of source code must retain the above copyright
11  * notice, this list of conditions and the following disclaimer.
12  * * Redistributions in binary form must reproduce the above copyright
13  * notice, this list of conditions and the following disclaimer in
14  * the documentation and/or other materials provided with the
15  * distribution.
16  * * Neither the name of DRS CenGen, LLC nor the names of its
17  * contributors may be used to endorse or promote products derived
18  * from this software without specific prior written permission.
19  *
20  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
23  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
24  * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
25  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
26  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
27  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
28  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
30  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
31  * POSSIBILITY OF SUCH DAMAGE.
32  */
33 
34 #include "nemlayerstaterunning.h"
35 #include "nemlayerstatestopped.h"
36 #include "nemstatefullayer.h"
37 
39  NEMLayerState("RUNNING"){}
40 
42 
44  NEMLayer * pLayer)
45 {
46  pLayer->postStart();
47 }
48 
50  NEMLayer * pLayer)
51 {
52  pLayer->stop();
54 }
55 
57  NEMLayer * pLayer,
58  const ConfigurationUpdate & update)
59 {
60  pLayer->processConfiguration(update);
61 }
62 
63 
65  NEMLayer * pLayer,
66  const ControlMessages & msgs)
67 {
68  pLayer->processDownstreamControl(msgs);
69 }
70 
72  NEMLayer * pLayer,
73  DownstreamPacket & pkt,
74  const ControlMessages & msgs)
75 {
76  pLayer->processDownstreamPacket(pkt,msgs);
77 }
78 
80  NEMLayer * pLayer,
81  UpstreamPacket & pkt,
82  const ControlMessages & msgs)
83 {
84  pLayer->processUpstreamPacket(pkt,msgs);
85 }
86 
88  NEMLayer * pLayer,
89  const ControlMessages & msgs)
90 {
91  pLayer->processUpstreamControl(msgs);
92 }
93 
95  NEMLayer * pLayer,
96  const EventId & id,
97  const Serialization & serialization)
98 {
99  pLayer->processEvent(id,serialization);
100 }
101 
102 
104  NEMLayer * pLayer,
105  TimerEventId eventId,
106  const TimePoint & expireTime,
107  const TimePoint & scheduleTime,
108  const TimePoint & fireTime,
109  const void * arg)
110 {
111  pLayer->processTimedEvent(eventId,expireTime,scheduleTime,fireTime,arg);
112 }
113 
virtual void processDownstreamControl(const ControlMessages &msgs)=0
std::string Serialization
Definition: serializable.h:42
A Packet class that allows upstream processing to strip layer headers as the packet travels up the st...
void processDownstreamPacket(NEMStatefulLayer *pStatefulLayer, NEMLayer *pLayer, DownstreamPacket &pkt, const ControlMessages &msgs)
virtual void processDownstreamPacket(DownstreamPacket &pkt, const ControlMessages &msgs=empty)=0
virtual void processUpstreamPacket(UpstreamPacket &pkt, const ControlMessages &msgs=empty)=0
virtual void processConfiguration(NEMStatefulLayer *pStatefulLayer, NEMLayer *pLayer, const ConfigurationUpdate &update)
void processEvent(NEMStatefulLayer *pStatefulLayer, NEMLayer *pLayer, const EventId &id, const Serialization &serialization)
std::list< const ControlMessage * > ControlMessages
void changeState(NEMStatefulLayer *pStatefulLayer, NEMLayerState *pState)
void handlePostStart(NEMStatefulLayer *pStatefulLayer, NEMLayer *pLayer)
Base class for NEMLayer containers. Builders construct NEMLayer objects to contain derived instances ...
Definition: nemlayer.h:57
void processUpstreamControl(NEMStatefulLayer *pStatefulLayer, NEMLayer *pLayer, const ControlMessages &msgs)
virtual void postStart()
Definition: component.h:119
std::uint16_t EventId
Definition: types.h:53
void handleStop(NEMStatefulLayer *pStatefulLayer, NEMLayer *pLayer)
virtual void stop()=0
virtual void processTimedEvent(TimerEventId eventId, const TimePoint &expireTime, const TimePoint &scheduleTime, const TimePoint &fireTime, const void *arg)
Specialized packet the allows downstream processing to add layer specific headers as the packet trave...
void processUpstreamPacket(NEMStatefulLayer *pStatefulLayer, NEMLayer *pLayer, UpstreamPacket &pkt, const ControlMessages &msgs)
virtual void processEvent(const EventId &eventId, const Serialization &serialization)
void processTimedEvent(NEMStatefulLayer *pStatefulLayer, NEMLayer *pLayer, TimerEventId eventId, const TimePoint &expireTime, const TimePoint &scheduleTime, const TimePoint &fireTime, const void *arg)
virtual void processConfiguration(const ConfigurationUpdate &update)
Encapsulated behavior associated with an NEMLayer depending on the layer&#39;s current context...
Definition: nemlayerstate.h:50
std::vector< ConfigurationNameAnyValues > ConfigurationUpdate
std::size_t TimerEventId
Definition: types.h:54
A layer stack that enforces component state transition rules. The stateful layer is not a fully funct...
Clock::time_point TimePoint
Definition: types.h:50
static NEMLayerStateStopped * instance()
Definition: singleton.h:56
virtual void processUpstreamControl(const ControlMessages &msgs)=0
void processDownstreamControl(NEMStatefulLayer *pStatefulLayer, NEMLayer *pLayer, const ControlMessages &msgs)