Contiki-NG
Toggle main menu visibility
Loading...
Searching...
No Matches
roll-tm.h
Go to the documentation of this file.
1
/*
2
* Copyright (c) 2011, Loughborough University - Computer Science
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 Institute nor the names of its contributors
14
* may be used to endorse or promote products derived from this software
15
* without specific prior written permission.
16
*
17
* THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
18
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20
* ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
21
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27
* SUCH DAMAGE.
28
*
29
* This file is part of the Contiki operating system.
30
*/
31
32
/**
33
* \addtogroup uip-multicast
34
* @{
35
*/
36
/**
37
* \defgroup roll-tm ROLL Trickle Multicast
38
*
39
* IPv6 multicast according to the algorithm in the
40
* "MCAST Forwarding Using Trickle" internet draft.
41
*
42
* The current version of the draft can always be found in
43
* http://tools.ietf.org/html/draft-ietf-roll-trickle-mcast
44
*
45
* This implementation is based on the draft version stored in
46
* ROLL_TM_VER.
47
*
48
* In draft v2, the document was renamed to
49
* "Multicast Protocol for Low power and Lossy Networks (MPL)"
50
* Due to very significant changes between draft versions 1 and 2,
51
* MPL will be implemented as a separate engine and this file here
52
* will provide legacy support for Draft v1.
53
* @{
54
*/
55
/**
56
* \file
57
* Header file for the implementation of the ROLL-TM multicast engine
58
* \author
59
* George Oikonomou - <oikonomou@users.sourceforge.net>
60
*/
61
62
#ifndef ROLL_TM_H_
63
#define ROLL_TM_H_
64
65
#include "contiki.h"
66
#include "
net/ipv6/multicast/uip-mcast6-stats.h
"
67
68
#include <stdint.h>
69
/*---------------------------------------------------------------------------*/
70
/* Protocol Constants */
71
/*---------------------------------------------------------------------------*/
72
#define ROLL_TM_VER 1
/**< Supported Draft Version */
73
#define ROLL_TM_ICMP_CODE 0
/**< ROLL TM ICMPv6 code field */
74
#define ROLL_TM_IP_HOP_LIMIT 0xFF
/**< Hop limit for ICMP messages */
75
#define ROLL_TM_INFINITE_REDUNDANCY 0xFF
76
#define ROLL_TM_DGRAM_OUT 0
77
#define ROLL_TM_DGRAM_IN 1
78
79
/*
80
* The draft does not currently specify a default number for the trickle
81
* interval nor a way to derive it. Examples however hint at 100 msec.
82
*
83
* In draft terminology, we use an 'aggressive' policy (M=0) and a conservative
84
* one (M=1).
85
*
86
* When experimenting with the two policies on the sky platform,
87
* an interval of 125ms proves to be way too low: When we have traffic,
88
* doublings happen after the interval end and periodics fire after point T
89
* within the interval (and sometimes even after interval end). When traffic
90
* settles down, the code compensates the offsets.
91
*
92
* We consider 125, 250ms etc because they are nice divisors of 1 sec
93
* (quotient is power of two). For some machines (e.g sky/msp430),
94
* this is also a nice number of clock ticks
95
*
96
* After experimentation, the values of Imin leading to best performance are:
97
* ContikiMAC: Imin=64 (500ms)
98
* Null RDC: imin=16 (125ms)
99
*/
100
101
/* Configuration for Timer with M=0 (aggressive) */
102
#ifdef ROLL_TM_CONF_IMIN_0
103
#define ROLL_TM_IMIN_0 ROLL_TM_CONF_IMIN_0
104
#else
105
#define ROLL_TM_IMIN_0 32
/* 250 msec */
106
#endif
107
108
#ifdef ROLL_TM_CONF_IMAX_0
109
#define ROLL_TM_IMAX_0 ROLL_TM_CONF_IMAX_0
110
#else
111
#define ROLL_TM_IMAX_0 1
/* Imax = 500ms */
112
#endif
113
114
#ifdef ROLL_TM_CONF_K_0
115
#define ROLL_TM_K_0 ROLL_TM_CONF_K_0
116
#else
117
#define ROLL_TM_K_0 ROLL_TM_INFINITE_REDUNDANCY
118
#endif
119
120
#ifdef ROLL_TM_CONF_T_ACTIVE_0
121
#define ROLL_TM_T_ACTIVE_0 ROLL_TM_CONF_T_ACTIVE_0
122
#else
123
#define ROLL_TM_T_ACTIVE_0 3
124
#endif
125
126
#ifdef ROLL_TM_CONF_T_DWELL_0
127
#define ROLL_TM_T_DWELL_0 ROLL_TM_CONF_T_DWELL_0
128
#else
129
#define ROLL_TM_T_DWELL_0 11
130
#endif
131
132
/* Configuration for Timer with M=1 (conservative) */
133
#ifdef ROLL_TM_CONF_IMIN_1
134
#define ROLL_TM_IMIN_1 ROLL_TM_CONF_IMIN_1
135
#else
136
#define ROLL_TM_IMIN_1 64
/* 500 msec */
137
#endif
138
139
#ifdef ROLL_TM_CONF_IMAX_1
140
#define ROLL_TM_IMAX_1 ROLL_TM_CONF_IMAX_1
141
#else
142
#define ROLL_TM_IMAX_1 9
/* Imax = 256 secs */
143
#endif
144
145
#ifdef ROLL_TM_CONF_K_1
146
#define ROLL_TM_K_1 ROLL_TM_CONF_K_1
147
#else
148
#define ROLL_TM_K_1 1
149
#endif
150
151
#ifdef ROLL_TM_CONF_T_ACTIVE_1
152
#define ROLL_TM_T_ACTIVE_1 ROLL_TM_CONF_T_ACTIVE_1
153
#else
154
#define ROLL_TM_T_ACTIVE_1 3
155
#endif
156
157
#ifdef ROLL_TM_CONF_T_DWELL_1
158
#define ROLL_TM_T_DWELL_1 ROLL_TM_CONF_T_DWELL_1
159
#else
160
#define ROLL_TM_T_DWELL_1 12
161
#endif
162
/*---------------------------------------------------------------------------*/
163
/* Configuration */
164
/*---------------------------------------------------------------------------*/
165
/**
166
* Number of Sliding Windows
167
* In essence: How many unique sources of simultaneous multicast traffic do we
168
* want to support for our lowpan
169
* If a node is seeding two multicast streams, parametrized on different M
170
* values, then this seed will occupy two different sliding windows
171
*/
172
#ifdef ROLL_TM_CONF_WINS
173
#define ROLL_TM_WINS ROLL_TM_CONF_WINS
174
#else
175
#define ROLL_TM_WINS 2
176
#endif
177
/*---------------------------------------------------------------------------*/
178
/**
179
* Maximum Number of Buffered Multicast Messages
180
* This buffer is shared across all Seed IDs, therefore a new very active Seed
181
* may eventually occupy all slots. It would make little sense (if any) to
182
* define support for fewer buffered messages than seeds*2
183
*/
184
#ifdef ROLL_TM_CONF_BUFF_NUM
185
#define ROLL_TM_BUFF_NUM ROLL_TM_CONF_BUFF_NUM
186
#else
187
#define ROLL_TM_BUFF_NUM 6
188
#endif
189
/*---------------------------------------------------------------------------*/
190
/**
191
* Use Short Seed IDs [short: 2, long: 16 (default)]
192
* It can be argued that we should (and it would be easy to) support both at
193
* the same time but the draft doesn't list this as a MUST so we opt for
194
* code/ram savings
195
*/
196
#ifdef ROLL_TM_CONF_SHORT_SEEDS
197
#define ROLL_TM_SHORT_SEEDS ROLL_TM_CONF_SHORT_SEEDS
198
#else
199
#define ROLL_TM_SHORT_SEEDS 0
200
#endif
201
/*---------------------------------------------------------------------------*/
202
/**
203
* Destination address for our ICMPv6 advertisements. The draft gives us a
204
* choice between LL all-nodes or LL all-routers
205
*
206
* We use allrouters unless a conf directive chooses otherwise
207
*/
208
#ifdef ROLL_TM_CONF_DEST_ALL_NODES
209
#define ROLL_TM_DEST_ALL_NODES ROLL_TM_CONF_DEST_ALL_NODES
210
#else
211
#define ROLL_TM_DEST_ALL_NODES 0
212
#endif
213
/*---------------------------------------------------------------------------*/
214
/**
215
* M param for our outgoing messages
216
* By default, we set the M bit (conservative). Define this as 0 to clear the
217
* M bit in our outgoing messages (aggressive)
218
*/
219
#ifdef ROLL_TM_CONF_SET_M_BIT
220
#define ROLL_TM_SET_M_BIT ROLL_TM_CONF_SET_M_BIT
221
#else
222
#define ROLL_TM_SET_M_BIT 1
223
#endif
224
/*---------------------------------------------------------------------------*/
225
/* Stats datatype */
226
/*---------------------------------------------------------------------------*/
227
/**
228
* \brief Multicast stats extension for the ROLL TM engine
229
*/
230
struct
roll_tm_stats
{
231
/** Number of received ICMP datagrams */
232
UIP_MCAST6_STATS_DATATYPE
icmp_in
;
233
234
/** Number of ICMP datagrams sent */
235
UIP_MCAST6_STATS_DATATYPE
icmp_out
;
236
237
/** Number of malformed ICMP datagrams seen by us */
238
UIP_MCAST6_STATS_DATATYPE
icmp_bad
;
239
};
240
/*---------------------------------------------------------------------------*/
241
#endif
/* ROLL_TM_H_ */
242
/*---------------------------------------------------------------------------*/
243
/** @} */
244
/** @} */
roll_tm_stats
Multicast stats extension for the ROLL TM engine.
Definition
roll-tm.h:230
roll_tm_stats::icmp_in
UIP_MCAST6_STATS_DATATYPE icmp_in
Number of received ICMP datagrams.
Definition
roll-tm.h:232
roll_tm_stats::icmp_out
UIP_MCAST6_STATS_DATATYPE icmp_out
Number of ICMP datagrams sent.
Definition
roll-tm.h:235
roll_tm_stats::icmp_bad
UIP_MCAST6_STATS_DATATYPE icmp_bad
Number of malformed ICMP datagrams seen by us.
Definition
roll-tm.h:238
uip-mcast6-stats.h
Header file for IPv6 multicast forwarding stats maintenance.
os
net
ipv6
multicast
roll-tm.h
Generated on
for Contiki-NG by
1.17.0