55 #include "contiki-conf.h"
61 #ifdef PACKETBUF_CONF_SIZE
62 #define PACKETBUF_SIZE PACKETBUF_CONF_SIZE
64 #define PACKETBUF_SIZE 128
70 #ifdef PACKETBUF_CONF_HDR_SIZE
71 #define PACKETBUF_HDR_SIZE PACKETBUF_CONF_HDR_SIZE
73 #define PACKETBUF_HDR_SIZE 48
100 void packetbuf_hdr_remove(
int bytes);
318 typedef uint16_t packetbuf_attr_t;
320 struct packetbuf_attr {
322 packetbuf_attr_t val;
324 struct packetbuf_addr {
329 #define PACKETBUF_ATTR_PACKET_TYPE_DATA 0
330 #define PACKETBUF_ATTR_PACKET_TYPE_ACK 1
331 #define PACKETBUF_ATTR_PACKET_TYPE_STREAM 2
332 #define PACKETBUF_ATTR_PACKET_TYPE_STREAM_END 3
333 #define PACKETBUF_ATTR_PACKET_TYPE_TIMESTAMP 4
339 PACKETBUF_ATTR_CHANNEL,
340 PACKETBUF_ATTR_NETWORK_ID,
341 PACKETBUF_ATTR_LINK_QUALITY,
343 PACKETBUF_ATTR_TIMESTAMP,
344 PACKETBUF_ATTR_RADIO_TXPOWER,
345 PACKETBUF_ATTR_LISTEN_TIME,
346 PACKETBUF_ATTR_TRANSMIT_TIME,
347 PACKETBUF_ATTR_MAX_MAC_TRANSMISSIONS,
348 PACKETBUF_ATTR_MAC_SEQNO,
349 PACKETBUF_ATTR_MAC_ACK,
352 PACKETBUF_ATTR_RELIABLE,
353 PACKETBUF_ATTR_PACKET_ID,
354 PACKETBUF_ATTR_PACKET_TYPE,
355 PACKETBUF_ATTR_REXMIT,
356 PACKETBUF_ATTR_MAX_REXMIT,
357 PACKETBUF_ATTR_NUM_REXMIT,
358 PACKETBUF_ATTR_PENDING,
363 PACKETBUF_ATTR_EPACKET_ID,
364 PACKETBUF_ATTR_EPACKET_TYPE,
365 PACKETBUF_ATTR_ERELIABLE,
368 PACKETBUF_ADDR_SENDER,
369 PACKETBUF_ADDR_RECEIVER,
370 PACKETBUF_ADDR_ESENDER,
371 PACKETBUF_ADDR_ERECEIVER,
376 #define PACKETBUF_NUM_ADDRS 4
377 #define PACKETBUF_NUM_ATTRS (PACKETBUF_ATTR_MAX - PACKETBUF_NUM_ADDRS)
378 #define PACKETBUF_ADDR_FIRST PACKETBUF_ADDR_SENDER
380 #define PACKETBUF_IS_ADDR(type) ((type) >= PACKETBUF_ADDR_FIRST)
382 #if PACKETBUF_CONF_ATTRS_INLINE
384 extern struct packetbuf_attr packetbuf_attrs[];
385 extern struct packetbuf_addr packetbuf_addrs[];
387 static int packetbuf_set_attr(uint8_t type,
const packetbuf_attr_t val);
388 static packetbuf_attr_t packetbuf_attr(uint8_t type);
389 static int packetbuf_set_addr(uint8_t type,
const linkaddr_t *addr);
390 static const linkaddr_t *packetbuf_addr(uint8_t type);
393 packetbuf_set_attr(uint8_t type,
const packetbuf_attr_t val)
396 packetbuf_attrs[type].val = val;
399 static inline packetbuf_attr_t
400 packetbuf_attr(uint8_t type)
402 return packetbuf_attrs[type].val;
406 packetbuf_set_addr(uint8_t type,
const linkaddr_t *addr)
409 linkaddr_copy(&packetbuf_addrs[type - PACKETBUF_ADDR_FIRST].addr, addr);
413 static inline const linkaddr_t *
414 packetbuf_addr(uint8_t type)
416 return &packetbuf_addrs[type - PACKETBUF_ADDR_FIRST].addr;
419 int packetbuf_set_attr(uint8_t type,
const packetbuf_attr_t val);
420 packetbuf_attr_t packetbuf_attr(uint8_t type);
421 int packetbuf_set_addr(uint8_t type,
const linkaddr_t *addr);
422 const linkaddr_t *packetbuf_addr(uint8_t type);
425 void packetbuf_attr_clear(
void);
427 void packetbuf_attr_copyto(
struct packetbuf_attr *attrs,
428 struct packetbuf_addr *addrs);
429 void packetbuf_attr_copyfrom(
struct packetbuf_attr *attrs,
430 struct packetbuf_addr *addrs);
432 #define PACKETBUF_ATTRIBUTES(...) { __VA_ARGS__ PACKETBUF_ATTR_LAST }
433 #define PACKETBUF_ATTR_LAST { PACKETBUF_ATTR_NONE, 0 }
435 #define PACKETBUF_ATTR_BIT 1
436 #define PACKETBUF_ATTR_BYTE 8
437 #define PACKETBUF_ADDRSIZE (sizeof(linkaddr_t) * PACKETBUF_ATTR_BYTE)
439 struct packetbuf_attrlist {