diff options
author | Harald Welte <laforge@gnumonks.org> | 2017-05-15 12:45:59 +0200 |
---|---|---|
committer | Harald Welte <laforge@gnumonks.org> | 2017-05-15 13:42:03 +0200 |
commit | 50ef73377cb9235adafe673c2bfa7a9dc02c0c02 (patch) | |
tree | e9aa58405bed62fd9427df03642f3a3831c37015 /include/osmocom/gsm | |
parent | 95871dadbd92048b0dc2ceb2d631a53e062a7420 (diff) |
tlv: Add tlvp_val{16,32}be() to get TLV values in unaligned host byte order
Change-Id: I3749e1e4974742bc8c32722e0e998775b5394829
Diffstat (limited to 'include/osmocom/gsm')
-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, |