1
0
mirror of https://github.com/RIOT-OS/RIOT.git synced 2024-12-29 04:50:03 +01:00
RIOT/sys/net/sixlowpan/rpl/etx_beaconing.h
2013-03-19 14:04:23 +01:00

75 lines
2.5 KiB
C

/*
* Header for the ETX-beaconing module
* etx_beaconing.h
*
* Created on: Feb 26, 2013
* Author: stephan
*/
#ifndef ETX_BEACONING_H_
#define ETX_BEACONING_H_
#include "sys/net/sixlowpan/sixlowip.h"
#define ETX_BEACON_STACKSIZE 4500 //TODO debug stacksize, set for production
#define ETX_RADIO_STACKSIZE 4500 //TODO debug stacksize, set for production
#define ETX_UPDT_STACKSIZE 4500 //TODO debug stacksize, set for production
#define ETX_INTERVAL 1000000 //1 Second in us is the default value
#define ETX_ROUNDS 10 //10 is the default value
//[option|length|ipaddr.|packetcount] with up to 15 ipaddr|packetcount pairs
// 1 Byte 1 Byte 1 Byte 1 Byte
#define ETX_BUF_SIZE (32)
#define ETX_RCV_BUFFER_SIZE (128)
//Constants for packets
//ETX beaconing type (XXX ATTENTION! this is non-standard)
#define ETX_BEACON 0x20//Non-standard way of saying this is an etx-pkt.
#define ETX_PKT_HDR_LEN 2 //Option type + Length (1 Byte each)
#define ETX_TUPLE_SIZE 2 //1 Byte for Addr, 1 Byte for packets rec.
#define ETX_PKT_REC_OFFSET 1 //Offset in a tuple of (addr,pkt_rec)
#define ETX_IPV6_LAST_BYTE 15 //The last byte for an ipv6 address
#define ETX_JITTER_MOD 21 //The modulo value for jitter computation
#define ETX_DEF_JIT_CORRECT (ETX_JITTER_MOD - 1) / 2 //Default Jitter correction value (normally ETX_JITTER_MOD -1 / 2)
//prototypes
void etx_init_beaconing(ipv6_addr_t * address);
void etx_beacon(void);
double etx_get_metric(ipv6_addr_t * address);
void etx_update(void);
void etx_radio(void);
/*
* The ETX beaconing packet consists of:
*
* 0 1 2
* 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- - - - - - - -
* | Option Type | Option Length | Data
* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- - - - - - - -
* Option type: Set to 0x20
*
* Option Length: The length of the Data sent with this packet
*
* Option Data: 2-Octet Pairs of 8 bit for addresses and a positive integer
* denoting the amount of packets received from that IP address
*
* We only need 1 octet for the ip address since RPL for now only allows for
* 255 different addresses.
*
* If the length of this packet says 0, it has received no other beaconing
* packets itself so far.
*/
typedef struct __attribute__((packed)) {
uint8_t code;
uint8_t length;
uint8_t* data;
} etx_probe_t;
#endif /* ETX_BEACONING_H_ */