libschc
config.h
Go to the documentation of this file.
1 #ifndef COMPRESSOR_CONFIG_H_
2 #define COMPRESSOR_CONFIG_H_
3 
4 #include "schc_config.h"
5 
6 // protocol definitions
7 #define UDP_HLEN 8
8 #define IP6_HLEN 40
9 
10 // total number of CoAP options available
11 #define COAP_OPTIONS_LENGTH 16 // .. actually a picocoap variable
12 
13 // fixed fragmentation definitions
14 #define WINDOW_SIZE_BITS 1
15 #define MIC_C_SIZE_BITS 1
16 
17 typedef enum {
18  UP = 0, DOWN = 1, BI = 2
19 } direction;
20 
21 typedef enum {
23 } device_type;
24 
25 typedef enum {
26  NOTSENT = 0,
27  VALUESENT = 1,
29  LSB = 3,
31  COMPCHK = 5,
32  DEVIID = 6,
33  APPIID = 7
34 } CDA;
35 
36 struct schc_field {
37  char field[32];
38  uint8_t msb_length; // custom added field
39  uint8_t field_length;
40  uint8_t field_pos;
43  uint8_t (*MO)(struct schc_field* target_field, unsigned char* field_value);
45 };
46 
47 // specific protocol layer structure
48 #if USE_IPv6
50  uint16_t rule_id;
51  uint8_t up;
52  uint8_t down;
53  uint8_t length;
55 };
56 #endif
57 
58 #if USE_UDP
60  uint16_t rule_id;
61  uint8_t up;
62  uint8_t down;
63  uint8_t length;
65 };
66 #endif
67 
68 #if USE_COAP
70  uint16_t rule_id;
71  uint8_t up;
72  uint8_t down;
73  uint8_t length;
75 };
76 #endif
77 
78 // structure to allow generic compression of each layer
80  uint16_t rule_id;
81  uint8_t up;
82  uint8_t down;
83  uint8_t length;
84  struct schc_field content[];
85 };
86 
88 #if USE_IPv6
89  /* a pointer to the IPv6 rule */
90  const struct schc_ipv6_rule_t* ipv6_rule;
91 #endif
92 #if USE_UDP
93  /* a pointer to the UDP rule */
94  const struct schc_udp_rule_t* udp_rule;
95 #endif
96 #if USE_COAP
97  /* a pointer to the CoAP rule */
98  const struct schc_coap_rule_t* coap_rule;
99 #endif
100 };
101 
102 struct schc_rule_t {
103  /* the rule id */
104  uint8_t id;
105  /* a pointer to the SCHC rule */
107  /* the reliability mode */
109  /* the fcn size in bits */
110  uint8_t FCN_SIZE;
111  /* the maximum number of fragments per window */
112  uint8_t MAX_WND_FCN;
113  /* the window size in bits */
114  uint8_t WINDOW_SIZE;
115  /* the dtag size in bits */
116  uint8_t DTAG_SIZE;
117 };
118 
119 struct schc_device {
120  /* the device id (e.g. EUI) */
121  uint32_t device_id;
122  /* the total number of rules for a device */
123  uint8_t rule_count;
124  /* a pointer to the collection of rules for a device */
125  const struct schc_rule_t *(*context)[];
126 };
127 
128 typedef uint16_t schc_ip6addr_t[8];
130 
132  /* IPv6 header. */
133  uint8_t vtc,
135  uint16_t flow;
136  uint8_t len[2];
137  uint8_t proto, ttl;
139 
140  /* UDP header. */
141  uint16_t srcport,
143  uint16_t udplen;
144  uint16_t udpchksum;
145 };
146 
147 static uint8_t equal(struct schc_field* target_field, unsigned char* field_value);
148 static uint8_t ignore(struct schc_field* target_field, unsigned char* field_value);
149 static uint8_t MSB(struct schc_field* target_field, unsigned char* field_value);
150 static uint8_t matchmap(struct schc_field* target_field, unsigned char* field_value);
151 
152 #endif
schc_field::MO
uint8_t(* MO)(struct schc_field *target_field, unsigned char *field_value)
Definition: config.h:43
schc_coap_rule_t
Definition: config.h:69
schc_coap_rule_t::down
uint8_t down
Definition: config.h:72
NETWORK_GATEWAY
Definition: config.h:22
schc_udpip_hdr::srcport
uint16_t srcport
Definition: config.h:141
NOTSENT
Definition: config.h:26
reliability_mode
reliability_mode
Definition: schc_config.h:96
schc_udpip_hdr::udplen
uint16_t udplen
Definition: config.h:143
schc_layer_rule_t
Definition: config.h:79
schc_rule_t::MAX_WND_FCN
uint8_t MAX_WND_FCN
Definition: config.h:112
schc_udpip_hdr::destport
uint16_t destport
Definition: config.h:142
UDP_FIELDS
#define UDP_FIELDS
Definition: schc_config.h:23
schc_ipaddr_t
schc_ip6addr_t schc_ipaddr_t
Definition: config.h:129
schc_ip6addr_t
uint16_t schc_ip6addr_t[8]
Definition: config.h:128
schc_udpip_hdr::destipaddr
schc_ip6addr_t destipaddr
Definition: config.h:138
schc_layer_rule_t::length
uint8_t length
Definition: config.h:83
schc_field::field_length
uint8_t field_length
Definition: config.h:39
schc_rule_t::DTAG_SIZE
uint8_t DTAG_SIZE
Definition: config.h:116
schc_udp_rule_t::content
struct schc_field content[UDP_FIELDS]
Definition: config.h:64
schc_layer_rule_t::rule_id
uint16_t rule_id
Definition: config.h:80
schc_coap_rule_t::up
uint8_t up
Definition: config.h:71
schc_device
Definition: config.h:119
schc_field::target_value
unsigned char target_value[MAX_COAP_FIELD_LENGTH]
Definition: config.h:42
schc_rule_t
Definition: config.h:102
DEVICE
Definition: config.h:22
schc_udpip_hdr::flow
uint16_t flow
Definition: config.h:135
IPV6_FIELDS
#define IPV6_FIELDS
Definition: schc_config.h:22
schc_rule_t::compression_rule
const struct schc_compression_rule_t * compression_rule
Definition: config.h:106
schc_layer_rule_t::down
uint8_t down
Definition: config.h:82
schc_compression_rule_t::udp_rule
const struct schc_udp_rule_t * udp_rule
Definition: config.h:94
schc_field::field
char field[32]
Definition: config.h:37
schc_ipv6_rule_t
Definition: config.h:49
schc_compression_rule_t
Definition: config.h:87
schc_config.h
schc_udp_rule_t::length
uint8_t length
Definition: config.h:63
equal
static uint8_t equal(struct schc_field *target_field, unsigned char *field_value)
schc_rule_t::WINDOW_SIZE
uint8_t WINDOW_SIZE
Definition: config.h:114
schc_rule_t::FCN_SIZE
uint8_t FCN_SIZE
Definition: config.h:110
MSB
static uint8_t MSB(struct schc_field *target_field, unsigned char *field_value)
COMPCHK
Definition: config.h:31
schc_field::field_pos
uint8_t field_pos
Definition: config.h:40
schc_udp_rule_t::rule_id
uint16_t rule_id
Definition: config.h:60
schc_coap_rule_t::length
uint8_t length
Definition: config.h:73
DOWN
Definition: config.h:18
direction
direction
Definition: config.h:17
MAPPINGSENT
Definition: config.h:28
schc_coap_rule_t::content
struct schc_field content[COAP_FIELDS]
Definition: config.h:74
LSB
Definition: config.h:29
schc_compression_rule_t::coap_rule
const struct schc_coap_rule_t * coap_rule
Definition: config.h:98
CDA
CDA
Definition: config.h:25
schc_udpip_hdr::ttl
uint8_t ttl
Definition: config.h:137
schc_device::device_id
uint32_t device_id
Definition: config.h:121
schc_ipv6_rule_t::length
uint8_t length
Definition: config.h:53
schc_udp_rule_t::up
uint8_t up
Definition: config.h:61
UP
Definition: config.h:18
COAP_FIELDS
#define COAP_FIELDS
Definition: schc_config.h:24
schc_rule_t::id
uint8_t id
Definition: config.h:104
schc_udpip_hdr::tcf
uint8_t tcf
Definition: config.h:134
MAX_COAP_FIELD_LENGTH
#define MAX_COAP_FIELD_LENGTH
Definition: schc_config.h:30
schc_ipv6_rule_t::down
uint8_t down
Definition: config.h:52
schc_udpip_hdr::len
uint8_t len[2]
Definition: config.h:136
schc_ipv6_rule_t::up
uint8_t up
Definition: config.h:51
ignore
static uint8_t ignore(struct schc_field *target_field, unsigned char *field_value)
schc_rule_t::mode
reliability_mode mode
Definition: config.h:108
schc_udp_rule_t::down
uint8_t down
Definition: config.h:62
schc_field::msb_length
uint8_t msb_length
Definition: config.h:38
schc_udp_rule_t
Definition: config.h:59
matchmap
static uint8_t matchmap(struct schc_field *target_field, unsigned char *field_value)
schc_ipv6_rule_t::rule_id
uint16_t rule_id
Definition: config.h:50
schc_layer_rule_t::up
uint8_t up
Definition: config.h:81
schc_udpip_hdr::proto
uint8_t proto
Definition: config.h:137
device_type
device_type
Definition: config.h:21
schc_udpip_hdr::vtc
uint8_t vtc
Definition: config.h:133
schc_field::action
CDA action
Definition: config.h:44
schc_compression_rule_t::ipv6_rule
const struct schc_ipv6_rule_t * ipv6_rule
Definition: config.h:90
schc_udpip_hdr::srcipaddr
schc_ip6addr_t srcipaddr
Definition: config.h:138
schc_udpip_hdr::udpchksum
uint16_t udpchksum
Definition: config.h:144
schc_layer_rule_t::content
struct schc_field content[]
Definition: config.h:84
schc_field::dir
direction dir
Definition: config.h:41
schc_field
Definition: config.h:36
BI
Definition: config.h:18
COMPLENGTH
Definition: config.h:30
DEVIID
Definition: config.h:32
VALUESENT
Definition: config.h:27
schc_coap_rule_t::rule_id
uint16_t rule_id
Definition: config.h:70
schc_device::rule_count
uint8_t rule_count
Definition: config.h:123
APPIID
Definition: config.h:33
schc_ipv6_rule_t::content
struct schc_field content[IPV6_FIELDS]
Definition: config.h:54
schc_udpip_hdr
Definition: config.h:131