From 50ef73377cb9235adafe673c2bfa7a9dc02c0c02 Mon Sep 17 00:00:00 2001 From: Harald Welte Date: Mon, 15 May 2017 12:45:59 +0200 Subject: tlv: Add tlvp_val{16,32}be() to get TLV values in unaligned host byte order Change-Id: I3749e1e4974742bc8c32722e0e998775b5394829 --- include/osmocom/gsm/tlv.h | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) 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 #include +#include +#include /*! \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, -- cgit v1.2.3