diff --git a/os/net/ipv6/uipbuf.c b/os/net/ipv6/uipbuf.c index c0f9da4e2..6ccbb99aa 100644 --- a/os/net/ipv6/uipbuf.c +++ b/os/net/ipv6/uipbuf.c @@ -128,6 +128,6 @@ uipbuf_clr_attr_flag(uint16_t flag) uint16_t uipbuf_is_attr_flag(uint16_t flag) { - return (uipbuf_attrs[UIPBUF_ATTR_FLAGS] & flag) > 0; + return (uipbuf_attrs[UIPBUF_ATTR_FLAGS] & flag) == flag; } /*---------------------------------------------------------------------------*/ diff --git a/os/net/ipv6/uipbuf.h b/os/net/ipv6/uipbuf.h index 16b201843..337ffe17f 100644 --- a/os/net/ipv6/uipbuf.h +++ b/os/net/ipv6/uipbuf.h @@ -35,33 +35,106 @@ #include "contiki.h" -/* Get the next header given the buffer - start indicates that this is - start of the IPv6 header - needs to be set to 0 when in an ext hdr */ - +/** + * \brief Get the next IPv6 header. + * \param buffer A pointer to the buffer holding the IPv6 packet + * \param size The size of the data in the buffer + * \param protocol A pointer to a variable where the protocol of the header will be stored + * \param start A flag that indicates if this is expected to be the IPv6 packet header or a later header (Extension header) + * \retval returns address of the starting position of the next header + * + * This function moves to the next header in a IPv6 packet. + */ uint8_t* uipbuf_get_next_header(uint8_t *buffer, uint16_t size, uint8_t *protocol, uint8_t start); -/* Get the final header given the buffer - that is assumed to be at start - of an IPv6 header */ + + +/** + * \brief Get the last IPv6 header. + * \param buffer A pointer to the buffer holding the IPv6 packet + * \param size The size of the data in the buffer + * \param protocol A pointer to a variable where the protocol of the header will be stored + * \retval returns address of the starting position of the next header + * + * This function moves to the last header of the IPv6 packet. + */ uint8_t* uipbuf_get_last_header(uint8_t *buffer, uint16_t size, uint8_t *protocol); -/* Attributes relating to the current packet in uipbuf */ + +/** + * \brief Get the value of the attribute + * \param type The attribute to get the value of + * \retval the value of the attribute + * + * This function gets the value of a specific uipbuf attribute. + */ uint16_t uipbuf_get_attr(uint8_t type); -void uipbuf_set_attr_flag(uint16_t flag); -void uipbuf_clr_attr_flag(uint16_t flag); -uint16_t uipbuf_is_attr_flag(uint16_t flag); + + +/** + * \brief Set the value of the attribute + * \param type The attribute to set the value of + * \param value The value to set + * \retval 0 - indicates failure of setting the value + * \retval 1 - indicates success of setting the value + * + * This function sets the value of a specific uipbuf attribute. + */ int uipbuf_set_attr(uint8_t type, uint16_t value); + +/** + * \brief Set bits in the uipbuf attribute flags. + * \param flag_bits The bits to set in the flag. + * + * This function sets the uipbuf attributes flag of specified bits. + */ +void uipbuf_set_attr_flag(uint16_t flag_bits); + +/** + * \brief Clear bits in the uipbuf attribute flags. + * \param flag_bits The bits to clear in the flag. + * + * This function clears the uipbuf attributes flag of specified bits. + */ +void uipbuf_clr_attr_flag(uint16_t flag_bits); + +/** + * \brief Check if bits in the uipbuf attribute flag are set. + * \param flag_bits The bits to check in the flag. + * + * This function checks if the specified bits are set in the + * uipbuf attributes flag. + */ +uint16_t uipbuf_is_attr_flag(uint16_t flag_bits); + + +/** + * \brief Clear all attributes. + * + * This function clear all attributes in the uipbuf attributes + * including all flags. + */ void uipbuf_clear_attr(void); -/* These flags will be used for being */ +/** + * \brief The bits defined for uipbuf attributes flag. + * + */ +/* Avoid using NHC compression on the packet (6LoWPAN) */ #define UIPBUF_ATTR_FLAGS_6LOWPAN_NO_NHC_COMPRESSION 0x01 +/* Avoid using prefix compression on the packet (6LoWPAN) */ #define UIPBUF_ATTR_FLAGS_6LOWPAN_NO_PREFIX_COMPRESSION 0x02 +/** + * \brief The attributes defined for uipbuf attributes function. + * + */ enum { - UIPBUF_ATTR_LLSEC_LEVEL, - UIPBUF_ATTR_LLSEC_KEY_ID, - UIPBUF_ATTR_INTERFACE_ID, - UIPBUF_ATTR_PHYSICAL_NETWORK_ID, - UIPBUF_ATTR_MAX_MAC_TRANSMISSIONS, - UIPBUF_ATTR_FLAGS, + UIPBUF_ATTR_LLSEC_LEVEL, /**< Control link layer security level. */ + UIPBUF_ATTR_LLSEC_KEY_ID, /**< Control link layer security key ID. */ + UIPBUF_ATTR_INTERFACE_ID, /**< The interface to output packet on */ + UIPBUF_ATTR_PHYSICAL_NETWORK_ID, /**< Physical network ID (mapped to PAN ID)*/ + UIPBUF_ATTR_MAX_MAC_TRANSMISSIONS, /**< MAX transmissions of the packet MAC */ + UIPBUF_ATTR_FLAGS, /**< Flags that can control lower layers. see above. */ UIPBUF_ATTR_MAX };