diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/osmocom/gsm/tlv.h | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/include/osmocom/gsm/tlv.h b/include/osmocom/gsm/tlv.h index 701fe688..8caddae8 100644 --- a/include/osmocom/gsm/tlv.h +++ b/include/osmocom/gsm/tlv.h @@ -4,6 +4,8 @@ #include <string.h> #include <osmocom/core/msgb.h> +#include <osmocom/core/bit16gen.h> +#include <osmocom/core/bit32gen.h> /*! \defgroup tlv GSM L3 compatible TLV parser * @{ @@ -436,6 +438,27 @@ static inline uint32_t tlvp_val32_unal(const struct tlv_parsed *tp, int pos) return res; } +/*! \brief Retrieve (possibly unaligned) TLV element and convert to host byte order + * \param[in] tp pointer to \ref tlv_parsed + * \param[in] pos element to return + * \returns aligned 16 bit value in host byte order + */ +static inline uint16_t tlvp_val16be(const struct tlv_parsed *tp, int pos) +{ + return osmo_load16be(TLVP_VAL(tp, pos)); +} + +/*! \brief Retrieve (possibly unaligned) TLV element and convert to host byte order + * \param[in] tp pointer to \ref tlv_parsed + * \param[in] pos element to return + * \returns aligned 32 bit value in host byte order + */ +static inline uint32_t tlvp_val32be(const struct tlv_parsed *tp, int pos) +{ + return osmo_load32be(TLVP_VAL(tp, pos)); +} + + struct tlv_parsed *osmo_tlvp_copy(const struct tlv_parsed *tp_orig, void *ctx); int osmo_tlvp_merge(struct tlv_parsed *dst, const struct tlv_parsed *src); int osmo_shift_v_fixed(uint8_t **data, size_t *data_len, |