49 #ifndef __SICSLOWPAN_H__
50 #define __SICSLOWPAN_H__
59 #define SICSLOWPAN_UDP_4_BIT_PORT_MIN 0xF0B0
60 #define SICSLOWPAN_UDP_4_BIT_PORT_MAX 0xF0BF
61 #define SICSLOWPAN_UDP_8_BIT_PORT_MIN 0xF000
62 #define SICSLOWPAN_UDP_8_BIT_PORT_MAX 0xF0FF
70 #define SICSLOWPAN_COMPRESSION_IPV6 0
71 #define SICSLOWPAN_COMPRESSION_HC1 1
72 #define SICSLOWPAN_COMPRESSION_HC06 2
79 #define SICSLOWPAN_DISPATCH_IPV6 0x41
80 #define SICSLOWPAN_DISPATCH_HC1 0x42
81 #define SICSLOWPAN_DISPATCH_IPHC 0x60
82 #define SICSLOWPAN_DISPATCH_FRAG1 0xc0
83 #define SICSLOWPAN_DISPATCH_FRAGN 0xe0
89 #define SICSLOWPAN_HC1_NH_UDP 0x02
90 #define SICSLOWPAN_HC1_NH_TCP 0x06
91 #define SICSLOWPAN_HC1_NH_ICMP6 0x04
97 #define SICSLOWPAN_HC_UDP_ALL_C 0xE0
108 #define SICSLOWPAN_IPHC_FL_C 0x10
109 #define SICSLOWPAN_IPHC_TC_C 0x08
110 #define SICSLOWPAN_IPHC_NH_C 0x04
111 #define SICSLOWPAN_IPHC_TTL_1 0x01
112 #define SICSLOWPAN_IPHC_TTL_64 0x02
113 #define SICSLOWPAN_IPHC_TTL_255 0x03
114 #define SICSLOWPAN_IPHC_TTL_I 0x00
118 #define SICSLOWPAN_IPHC_CID 0x80
120 #define SICSLOWPAN_IPHC_SAC 0x40
121 #define SICSLOWPAN_IPHC_SAM_00 0x00
122 #define SICSLOWPAN_IPHC_SAM_01 0x10
123 #define SICSLOWPAN_IPHC_SAM_10 0x20
124 #define SICSLOWPAN_IPHC_SAM_11 0x30
126 #define SICSLOWPAN_IPHC_SAM_BIT 4
128 #define SICSLOWPAN_IPHC_M 0x08
129 #define SICSLOWPAN_IPHC_DAC 0x04
130 #define SICSLOWPAN_IPHC_DAM_00 0x00
131 #define SICSLOWPAN_IPHC_DAM_01 0x01
132 #define SICSLOWPAN_IPHC_DAM_10 0x02
133 #define SICSLOWPAN_IPHC_DAM_11 0x03
135 #define SICSLOWPAN_IPHC_DAM_BIT 0
138 #define SICSLOWPAN_IPHC_ADDR_CONTEXT_LL 0
140 #define SICSLOWPAN_IPHC_MCAST_RANGE 0xA0
144 #define SICSLOWPAN_NHC_MASK 0xF0
145 #define SICSLOWPAN_NHC_EXT_HDR 0xE0
155 #define SICSLOWPAN_NHC_UDP_MASK 0xF8
156 #define SICSLOWPAN_NHC_UDP_ID 0xF0
157 #define SICSLOWPAN_NHC_UDP_CHECKSUMC 0x04
158 #define SICSLOWPAN_NHC_UDP_CHECKSUMI 0x00
160 #define SICSLOWPAN_NHC_UDP_CS_P_00 0xF0
161 #define SICSLOWPAN_NHC_UDP_CS_P_01 0xF1
162 #define SICSLOWPAN_NHC_UDP_CS_P_10 0xF2
163 #define SICSLOWPAN_NHC_UDP_CS_P_11 0xF3
172 #define SICSLOWPAN_IPV6_HDR_LEN 1
173 #define SICSLOWPAN_HC1_HDR_LEN 3
174 #define SICSLOWPAN_HC1_HC_UDP_HDR_LEN 7
175 #define SICSLOWPAN_FRAG1_HDR_LEN 4
176 #define SICSLOWPAN_FRAGN_HDR_LEN 5
239 #define sicslowpan_is_iid_16_bit_compressable(a) \
240 ((((a)->u16[4]) == 0) && \
241 (((a)->u8[10]) == 0)&& \
242 (((a)->u8[11]) == 0xff)&& \
243 (((a)->u8[12]) == 0xfe)&& \
244 (((a)->u8[13]) == 0))
253 #define sicslowpan_is_mcast_addr_decompressable(a) \
254 (((*a & 0x01) == 0) && \
255 ((*(a + 1) == 0x01) || (*(a + 1) == 0x02)))
263 #define sicslowpan_is_mcast_addr_compressable(a) \
264 ((((a)->u16[1]) == 0) && \
265 (((a)->u16[2]) == 0) && \
266 (((a)->u16[3]) == 0) && \
267 (((a)->u16[4]) == 0) && \
268 (((a)->u16[5]) == 0) && \
269 (((a)->u16[6]) == 0) && \
270 (((a)->u8[14]) == 0) && \
271 ((((a)->u8[15]) == 1) || (((a)->u8[15]) == 2)))
274 #define sicslowpan_is_mcast_addr_compressable48(a) \
275 ((((a)->u16[1]) == 0) && \
276 (((a)->u16[2]) == 0) && \
277 (((a)->u16[3]) == 0) && \
278 (((a)->u16[4]) == 0) && \
279 (((a)->u8[10]) == 0))
282 #define sicslowpan_is_mcast_addr_compressable32(a) \
283 ((((a)->u16[1]) == 0) && \
284 (((a)->u16[2]) == 0) && \
285 (((a)->u16[3]) == 0) && \
286 (((a)->u16[4]) == 0) && \
287 (((a)->u16[5]) == 0) && \
288 (((a)->u8[12]) == 0))
291 #define sicslowpan_is_mcast_addr_compressable8(a) \
292 ((((a)->u8[1]) == 2) && \
293 (((a)->u16[1]) == 0) && \
294 (((a)->u16[2]) == 0) && \
295 (((a)->u16[3]) == 0) && \
296 (((a)->u16[4]) == 0) && \
297 (((a)->u16[5]) == 0) && \
298 (((a)->u16[6]) == 0) && \
299 (((a)->u8[14]) == 0))
309 int (* is_compressable)(uint8_t next_header);
313 int (*
compress)(uint8_t *compressed, uint8_t *uncompressed_len);
317 int (*
uncompress)(uint8_t *compressed, uint8_t *lowpanbuf, uint8_t *uncompressed_len);