IPv6 multicast according to the algorithm in the "MCAST Forwarding Using Trickle" internet draft.
More...
|
|
#define | TRICKLE_TIME(m, d) |
| | Convert a timer to a sane clock_time_t value after d doublings m is a value of Imin, d is a number of doublings Careful of overflows.
|
| #define | TRICKLE_IMAX(t) |
| | Convert Imax from number of doublings to clock_time_t units for trickle_param t.
|
|
#define | TRICKLE_ACTIVE(t) |
| | Convert Tactive for a trickle timer to a sane clock_time_t value t is a pointer to the timer Careful of overflows.
|
|
#define | TRICKLE_DWELL(t) |
| | Convert Tdwell for a trickle timer to a sane clock_time_t value t is a pointer to the timer Careful of overflows.
|
|
#define | SUPPRESSION_ENABLED(t) |
| | Check if suppression is enabled for trickle_param t t is a pointer to the timer.
|
|
#define | SUPPRESSION_DISABLED(t) |
| | Check if suppression is disabled for trickle_param t t is a pointer to the timer.
|
|
#define | TIMER_CONFIGURE(m) |
| | Init trickle_timer[m].
|
|
#define | SEQ_VAL_IS_EQ(i1, i2) |
| | s1 is said to be equal s2 iif SEQ_VAL_IS_EQ(s1, s2) == 1
|
|
#define | SEQ_VAL_IS_LT(i1, i2) |
| | s1 is said to be less than s2 iif SEQ_VAL_IS_LT(s1, s2) == 1
|
|
#define | SEQ_VAL_IS_GT(i1, i2) |
| | s1 is said to be greater than s2 iif SEQ_VAL_IS_LT(s1, s2) == 1
|
|
#define | SEQ_VAL_ADD(s, n) |
| | Add n to s: (s + n) modulo (2 ^ SERIAL_BITS) => ((s + n) % 0x8000).
|
|
#define | SLIDING_WINDOW_IS_USED(w) |
| | Is Occupied sliding window location w w: pointer to a sliding window.
|
|
#define | SLIDING_WINDOW_IS_USED_SET(w) |
| | Set 'Is Used' bit for window w w: pointer to a sliding window.
|
|
#define | SLIDING_WINDOW_IS_USED_CLR(w) |
| | Clear 'Is Used' bit for window w w: pointer to a sliding window.
|
|
#define | SLIDING_WINDOW_LISTED_SET(w) |
| | Set 'Is Seen' bit for window w w: pointer to a sliding window.
|
|
#define | SLIDING_WINDOW_LISTED_CLR(w) |
| | Clear 'Is Seen' bit for window w w: pointer to a sliding window.
|
| #define | SLIDING_WINDOW_IS_LISTED(w) |
| | Is the sliding window at location w listed in current ICMP message?
|
|
#define | SLIDING_WINDOW_M_SET(w) |
| | Set M bit for window w w: pointer to a sliding window.
|
|
#define | SLIDING_WINDOW_M_CLR(w) |
| | Clear M bit for window w w: pointer to a sliding window.
|
|
#define | SLIDING_WINDOW_GET_M(w) |
| | Retrieve trickle parametrization for sliding window at location w w: pointer to a sliding window.
|
|
#define | MCAST_PACKET_TTL(p) |
| | Get the TTL of a buffered packet p: pointer to a packet buffer.
|
|
#define | MCAST_PACKET_USED_SET(p) |
| | Set 'Is Used' bit for packet p p: pointer to a packet buffer.
|
|
#define | MCAST_PACKET_USED_CLR(p) |
| | Clear 'Is Used' bit for packet p p: pointer to a packet buffer.
|
|
#define | MCAST_PACKET_IS_USED(p) |
| | Is Occupied buffer location p.
|
|
#define | MCAST_PACKET_MUST_SEND(p) |
| | Must we send this message this pass?
|
|
#define | MCAST_PACKET_SEND_SET(p) |
| | Set 'Must Send' bit for message p p: pointer to a struct mcast_packet.
|
|
#define | MCAST_PACKET_SEND_CLR(p) |
| | Clear 'Must Send' bit for message p p: pointer to a struct mcast_packet.
|
| #define | MCAST_PACKET_IS_LISTED(p) |
| | Is the message p listed in current ICMP message?
|
|
#define | MCAST_PACKET_LISTED_SET(p) |
| | Set 'Is Listed' bit for message p p: pointer to a struct mcast_packet.
|
|
#define | MCAST_PACKET_LISTED_CLR(p) |
| | Clear 'Is Listed' bit for message p p: pointer to a struct mcast_packet.
|
|
#define | MCAST_PACKET_FREE(p) |
| | Free a multicast packet buffer p: pointer to a struct mcast_packet.
|
|
#define | SEQUENCE_LIST_GET_M(l) |
| | Get the Trickle Parametrization for an ICMPv6 sequence list l: pointer to a sequence list structure.
|
|
#define | SEQUENCE_LIST_GET_S(l) |
| | Get the Seed ID Length for an ICMPv6 sequence list l: pointer to a sequence list structure.
|
|
#define | HBH_GET_M(h) |
| | Get the Trickle Parametrization for a multicast HBHO header m: pointer to the HBHO header.
|
|
#define | HBH_SET_M(h) |
| | Set the Trickle Parametrization bit for a multicast HBHO header m: pointer to the HBHO header.
|
|
#define | HBH_GET_SV_MSB(h) |
| | Retrieve the Sequence Value MSB from a multicast HBHO header m: pointer to the HBHO header.
|
|
#define | ROLL_TM_VER 1 |
| | Supported Draft Version.
|
|
#define | ROLL_TM_ICMP_CODE 0 |
| | ROLL TM ICMPv6 code field.
|
|
#define | ROLL_TM_IP_HOP_LIMIT 0xFF |
| | Hop limit for ICMP messages.
|
|
#define | ROLL_TM_WINS 2 |
| | Number of Sliding Windows In essence: How many unique sources of simultaneous multicast traffic do we want to support for our lowpan If a node is seeding two multicast streams, parametrized on different M values, then this seed will occupy two different sliding windows.
|
| #define | ROLL_TM_BUFF_NUM 6 |
| | Maximum Number of Buffered Multicast Messages This buffer is shared across all Seed IDs, therefore a new very active Seed may eventually occupy all slots.
|
|
#define | ROLL_TM_SHORT_SEEDS 0 |
| | Use Short Seed IDs [short: 2, long: 16 (default)] It can be argued that we should (and it would be easy to) support both at the same time but the draft doesn't list this as a MUST so we opt for code/ram savings.
|
| #define | ROLL_TM_DEST_ALL_NODES 0 |
| | Destination address for our ICMPv6 advertisements.
|
| #define | ROLL_TM_SET_M_BIT 1 |
| | M param for our outgoing messages By default, we set the M bit (conservative).
|
IPv6 multicast according to the algorithm in the "MCAST Forwarding Using Trickle" internet draft.
The current version of the draft can always be found in http://tools.ietf.org/html/draft-ietf-roll-trickle-mcast
This implementation is based on the draft version stored in ROLL_TM_VER.
In draft v2, the document was renamed to "Multicast Protocol for Low power and Lossy Networks (MPL)" Due to very significant changes between draft versions 1 and 2, MPL will be implemented as a separate engine and this file here will provide legacy support for Draft v1.