DESERT 4.0.0
uwtokenbus.h
Go to the documentation of this file.
1//
2// Copyright (c) 2021 Regents of the SIGNET lab, University of Padova.
3// All rights reserved.
4//
5// Redistribution and use in source and binary forms, with or without
6// modification, are permitted provided that the following conditions
7// are met:
8// 1. Redistributions of source code must retain the above copyright
9// notice, this list of conditions and the following disclaimer.
10// 2. Redistributions in binary form must reproduce the above copyright
11// notice, this list of conditions and the following disclaimer in the
12// documentation and/or other materials provided with the distribution.
13// 3. Neither the name of the University of Padova (SIGNET lab) nor the
14// names of its contributors may be used to endorse or promote products
15// derived from this software without specific prior written permission.
16//
17// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
19// TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
20// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
21// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
22// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
23// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
24// OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
25// WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
26// OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
27// ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28//
29
39#ifndef UWTOKENBUS_H
40#define UWTOKENBUS_H
41
42#include "uwtokenbus_hdr.h"
43#include <deque>
44#include <mmac.h>
45
46extern packet_t PT_UWTOKENBUS;
47
51class UwTokenBus : public MMac
52{
53
54public:
58 UwTokenBus();
59
63 virtual ~UwTokenBus();
64
69 class TimerBusIdle : public TimerHandler
70 {
71
72 public:
78 : TimerHandler()
79 {
80 assert(m != NULL);
81 module = m;
82 }
83
84 protected:
89 virtual void expire(Event *e);
90 UwTokenBus *module;
91 };
92
97 class TimerTokenPass : public TimerHandler
98 {
99
100 public:
106 : TimerHandler()
107 {
108 assert(m != NULL);
109 module = m;
110 }
111
112 protected:
117 virtual void expire(Event *e);
118 UwTokenBus *module;
119 };
120
123protected:
127 virtual void expireBusIdle();
128
132 virtual void expireTokenPass();
133
137 virtual void initRing();
138
145 virtual bool validToken(Packet *p) const;
146
151 virtual void sendToken(int next_id);
152
156 virtual void txData();
157
161 virtual int normId(int id) const;
162
166 virtual int nextId(int id) const;
167
171 virtual int nextIdOwned(int id) const;
172
178 virtual void recvFromUpperLayers(Packet *p) override;
184 virtual void Phy2MacEndRx(Packet *p) override;
190 virtual void Phy2MacStartRx(const Packet *p) override;
196 virtual void Mac2PhyStartTx(Packet *p);
202 virtual void Phy2MacEndTx(const Packet *p) override;
203
209 virtual void initPkt(Packet *p);
210
222 virtual int command(int argc, const char *const *argv) override;
223
235 std::deque<Packet *> buffer;
238 double slot_time;
263 int debug;
270 static int count_nodes;
274 constexpr int
275 NMOD(int n)
276 {
277 return ((n_nodes + (n % n_nodes)) % n_nodes);
278 }
280};
281
282#endif
Definition uwtokenbus.h:70
TimerBusIdle(UwTokenBus *m)
Definition uwtokenbus.h:77
virtual void expire(Event *e)
Definition uwtokenbus.cpp:84
Definition uwtokenbus.h:98
TimerTokenPass(UwTokenBus *m)
Definition uwtokenbus.h:105
virtual void expire(Event *e)
Definition uwtokenbus.cpp:90
Definition uwtokenbus.h:52
UWTokenBus_STATUS rtx_status
Definition uwtokenbus.h:236
int count_token_invalid
Definition uwtokenbus.h:261
double token_pass_timeout
Definition uwtokenbus.h:240
double min_token_hold_time
Definition uwtokenbus.h:230
virtual void initRing()
Definition uwtokenbus.cpp:209
virtual void expireBusIdle()
Definition uwtokenbus.cpp:197
int debug
Definition uwtokenbus.h:263
double slot_time
Definition uwtokenbus.h:238
virtual void Phy2MacEndTx(const Packet *p) override
Definition uwtokenbus.cpp:352
virtual int nextIdOwned(int id) const
Definition uwtokenbus.cpp:278
static int count_token_pass_exp
Definition uwtokenbus.h:272
virtual ~UwTokenBus()
Definition uwtokenbus.cpp:183
UWTokenBus_STATUS
Definition uwtokenbus.h:121
@ IDLE
Definition uwtokenbus.h:121
@ TRANSMITTING
Definition uwtokenbus.h:121
@ RECEIVING
Definition uwtokenbus.h:121
TimerBusIdle bus_idle_timer
Definition uwtokenbus.h:251
int n_nodes
Definition uwtokenbus.h:225
virtual int normId(int id) const
Definition uwtokenbus.cpp:261
virtual void recvFromUpperLayers(Packet *p) override
Definition uwtokenbus.cpp:218
virtual void Mac2PhyStartTx(Packet *p)
Definition uwtokenbus.cpp:330
virtual int nextId(int id) const
Definition uwtokenbus.cpp:270
static int count_nodes
Definition uwtokenbus.h:270
virtual int command(int argc, const char *const *argv) override
Definition uwtokenbus.cpp:491
constexpr int NMOD(int n)
Definition uwtokenbus.h:275
double bus_idle_timeout
Definition uwtokenbus.h:243
double token_rx_time
Definition uwtokenbus.h:233
virtual void Phy2MacStartRx(const Packet *p) override
Definition uwtokenbus.cpp:362
std::deque< Packet * > buffer
Definition uwtokenbus.h:235
TimerTokenPass token_pass_timer
Definition uwtokenbus.h:246
int last_token_id_heard
Definition uwtokenbus.h:226
int count_token_regen
Definition uwtokenbus.h:260
int drop_old_
Definition uwtokenbus.h:264
bool got_token
Definition uwtokenbus.h:237
virtual void Phy2MacEndRx(Packet *p) override
Definition uwtokenbus.cpp:389
int last_token_id_owned
Definition uwtokenbus.h:227
int max_queue_size
Definition uwtokenbus.h:234
virtual void initPkt(Packet *p)
Definition uwtokenbus.cpp:456
virtual void sendToken(int next_id)
Definition uwtokenbus.cpp:464
int node_id
Definition uwtokenbus.h:224
int checkPriority
Definition uwtokenbus.h:266
virtual void txData()
Definition uwtokenbus.cpp:287
int count_token_resend
Definition uwtokenbus.h:259
virtual bool validToken(Packet *p) const
Definition uwtokenbus.cpp:374
virtual void expireTokenPass()
Definition uwtokenbus.cpp:188
static int count_bus_idle_exp
Definition uwtokenbus.h:273
UwTokenBus()
Definition uwtokenbus.cpp:102
double max_token_hold_time
Definition uwtokenbus.h:229
packet_t PT_UWTOKENBUS
Definition initlib.cpp:43
Common structures and variables in the protocol.